DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_PREQ_GRP

Source


1 PACKAGE BODY QP_PREQ_GRP AS
2 /* $Header: QPXGPREB.pls 120.132.12020000.8 2013/05/09 12:08:04 jputta ship $ */
3 
4 G_VERSION VARCHAR2(240):= '/* $Header: QPXGPREB.pls 120.132.12020000.8 2013/05/09 12:08:04 jputta ship $ */';
5 --Indexes similar to temporary sequence number
6 /*TYPE PLS_INTEGER_TYPE   IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
7 TYPE NUMBER_TYPE        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8 TYPE VARCHAR_TYPE       IS TABLE OF VARCHAR2(240) INDEX BY BINARY_INTEGER;
9 TYPE FLAG_TYPE          IS TABLE OF VARCHAR2(1)   INDEX BY BINARY_INTEGER;
10 TYPE ROWID_TYPE         IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
11 TYPE DATE_TYPE          IS TABLE OF DATE INDEX BY BINARY_INTEGER;*/
12 
13 
14 --G_RELATED_LINE_DETAIL_INDEX   PLS_INTEGER :=1;
15 G_PRICE_LIST_PHASE_ID         PLS_INTEGER ;  --will be replaced by initialization routine
16 G_PRICE_LIST_SEQUENCE         PLS_INTEGER ;  --will be replaced by initialization routine
17 G_INV_DECIMAL_PRECISION       NUMBER; -- bug 3572594
18 --G_DISCOUNT_MODE               CONSTANT VARCHAR2(3):='DIS';
19 --G_PRICELIST_MODE              CONSTANT VARCHAR2(3):='PLL';
20 --G_PRIMARY_SEARCH_IND          CONSTANT NUMBER := 1;
21 --G_SECONDARY_SEARCH_IND        CONSTANT NUMBER := 2;
22 --G_NULL_GROUPING_NUMBER        CONSTANT NUMBER := -1;
23 --G_NULL_LIST_LINE_ID           CONSTANT NUMBER := -1;
24 G_PRICE_PHASE_FLAG            BOOLEAN;
25 --G_NUMBER_FORMAT_TYPE	      CONSTANT VARCHAR2(1) := 'N';
26 
27  G_LINE_INDEX_tbl                pls_integer_type;
28  G_USAGE_PRICING_TYPE_tbl	 varchar_type;
29  G_LINE_CATEGORY_tbl	         varchar_type;
30  G_LINE_DETAIL_INDEX_tbl         pls_integer_type;
31  G_ATTRIBUTE_LEVEL_tbl           varchar_type;
32  G_ATTRIBUTE_TYPE_tbl            varchar_type;
33  G_LIST_HEADER_ID_tbl            number_type;
34  G_LIST_LINE_ID_tbl              number_type;
35  G_CONTEXT_tbl                   varchar_type;
36  G_ATTRIBUTE_tbl                 varchar_type;
37  G_VALUE_FROM_tbl                varchar_type;
38  G_SETUP_VALUE_FROM_tbl          varchar_type;
39  G_VALUE_TO_tbl                  varchar_type;
40  G_SETUP_VALUE_TO_tbl            varchar_type;
41  G_GROUPING_NUMBER_tbl           pls_integer_type;
42  G_NO_QUALIFIERS_IN_GRP_tbl      pls_integer_type;
43  G_COMPARISON_OPERATOR_TYPE_tbl  varchar_type;
44  G_VALIDATED_FLAG_tbl            varchar_type;
45  G_APPLIED_FLAG_tbl              varchar_type;
46  G_PRICING_STATUS_CODE_tbl       varchar_type;
47  G_PRICING_STATUS_TEXT_tbl       varchar_type;
48  G_QUALIFIER_PRECEDENCE_tbl      pls_integer_type;
49  G_DATATYPE_tbl                  varchar_type;
50  G_PRICING_ATTR_FLAG_tbl         varchar_type;
51  G_QUALIFIER_TYPE_tbl            varchar_type;
52  G_product_uom_code_tbl          varchar_type;
53  G_EXCLUDER_FLAG_TBL             varchar_type;
54  G_PRICE_REQUEST_CODE_TBL        varchar_type;
55  --G_DISTINCT_QUAL_FLAG_TBL        varchar_type;
56  G_RELATIONSHIP_TYPE_TBL         VARCHAR_TYPE; -- 3215497
57  G_RLTD_LINE_INDEX_TBL        PLS_INTEGER_TYPE; -- 3215497
58  G_RLTD_LINE_DETAIL_INDEX_TBL PLS_INTEGER_TYPE; -- 3215497
59 
60  G_LINE_INDEX_l_TBL            PLS_INTEGER_TYPE;
61  G_LINE_DETAIL_INDEX_l_TBL     PLS_INTEGER_TYPE;
62  G_PRICING_STATUS_CODE_L_TBL   VARCHAR_TYPE;
63  G_PRICING_STATUS_TEXT_L_TBL   VARCHAR_TYPE;
64 
65  G_LINE_TYPE_CODE_TBL          VARCHAR_TYPE;
66  G_PRICING_EFFECTIVE_DATE_TBL  DATE_TYPE   ;
67  G_ACTIVE_DATE_FIRST_TBL       DATE_TYPE   ;
68  G_ACTIVE_DATE_FIRST_TYPE_TBL  VARCHAR_TYPE;
69  G_ACTIVE_DATE_SECOND_TBL      DATE_TYPE   ;
70  G_ACTIVE_DATE_SECOND_TYPE_TBL VARCHAR_TYPE ;
71  G_LINE_QUANTITY_TBL           NUMBER_TYPE ;
72  G_LINE_UOM_CODE_TBL           VARCHAR_TYPE;
73  G_REQUEST_TYPE_CODE_TBL       VARCHAR_TYPE;
74  G_PRICED_QUANTITY_TBL         NUMBER_TYPE;
75  G_UOM_QUANTITY_TBL            NUMBER_TYPE;
76  G_PRICED_UOM_CODE_TBL         VARCHAR_TYPE;
77  G_CURRENCY_CODE_TBL           VARCHAR_TYPE;
78  G_UNIT_PRICE_TBL              NUMBER_TYPE;
79  G_PERCENT_PRICE_TBL           NUMBER_TYPE;
80  G_ADJUSTED_UNIT_PRICE_TBL     NUMBER_TYPE;
81  G_UPD_ADJUSTED_UNIT_PRICE_TBL     NUMBER_TYPE;
82  G_PROCESSED_FLAG_TBL          VARCHAR_TYPE;
83  G_PRICE_FLAG_TBL              VARCHAR_TYPE;
84  G_LINE_ID_TBL                 NUMBER_TYPE;
85  G_PROCESSING_ORDER_TBL        PLS_INTEGER_TYPE;
86  G_CONTRACT_START_DATE_TBL	DATE_TYPE; /* shulin */
87  G_CONTRACT_END_DATE_TBL	DATE_TYPE; /* shulin */
88  G_LINE_UNIT_PRICE_TBL	NUMBER_TYPE; /* shu_latest */
89  G_LIST_PRICE_OVERRIDE_FLAG_TBL  VARCHAR_TYPE; -- po integration
90  G_CHARGE_PERIODICITY_CODE_TBL VARCHAR_3_TYPE;
91  G_UPDATED_FLAG_TBL            VARCHAR_TYPE; -- 3215497
92  G_CALCULATION_CODE_TBL        VARCHAR_TYPE; -- 3215497
93  G_CHANGE_REASON_CODE_TBL      VARCHAR_TYPE; -- 3215497
94  G_CHANGE_REASON_TEXT_TBL      VARCHAR_TYPE; -- 3215497
95  G_PROCESS_CODE_TBL            VARCHAR_TYPE; -- 3215497
96   G_LINE_INDEX_LD_TBL            PLS_INTEGER_TYPE;
97   G_LINE_DETAIL_INDEX_LD_TBL     PLS_INTEGER_TYPE;
98   G_LIST_HEADER_ID_LD_TBL        NUMBER_TYPE;
99   G_LIST_LINE_ID_LD_TBL          NUMBER_TYPE;
100   G_PRICING_STATUS_CODE_LD_TBL   VARCHAR_TYPE;
101   G_PRICING_STATUS_TEXT_LD_TBL   VARCHAR_TYPE;
102   G_APPLIED_FLAG_LD_TBL          VARCHAR_TYPE;
103   G_PROCESSED_FLAG_LD_TBL        VARCHAR_TYPE;
104 
105   G_ROUNDING_FACTOR_TBL              PLS_INTEGER_TYPE;
106   G_ROUNDING_FLAG_TBL                FLAG_TYPE;
107   G_LINE_DETAIL_TYPE_CODE_TBL        VARCHAR_TYPE;
108   G_PRICE_BREAK_TYPE_CODE_TBL        VARCHAR_TYPE;
109   G_LIST_PRICE_TBL                   NUMBER_TYPE;
110   G_LIST_LINE_TYPE_TBL               VARCHAR_TYPE;
111   G_LIST_TYPE_CODE_TBL               VARCHAR_TYPE;
112   G_CREATED_FROM_SQL_TBL             VARCHAR_TYPE;
113   G_PRICING_GROUP_SEQUENCE_TBL       PLS_INTEGER_TYPE;
114   G_PRICING_PHASE_ID_TBL             PLS_INTEGER_TYPE;
115   G_OPERAND_CALCULATION_CODE_TBL     VARCHAR_TYPE;
116   G_OPERAND_VALUE_TBL                VARCHAR_TYPE;
117   G_NET_AMOUNT_FLAG_TBL              VARCHAR_TYPE; -- IT net_amount 2720717
118   G_SUBSTITUTION_TYPE_CODE_TBL       VARCHAR_TYPE;
119   G_SUBSTITUTION_VALUE_FROM_TBL      VARCHAR_TYPE;
120   G_SUBSTITUTION_VALUE_TO_TBL        VARCHAR_TYPE;
121   G_ASK_FOR_FLAG_TBL                 VARCHAR_TYPE;
122   G_PRICE_FORMULA_ID_TBL             NUMBER_TYPE;
123   G_PRODUCT_PRECEDENCE_TBL           PLS_INTEGER_TYPE;
124   G_INCOMP_GRP_CODE_TBL              VARCHAR_TYPE;
125   G_AUTOMATIC_FLAG_TBL               VARCHAR_TYPE;
126   G_OVERRIDE_FLAG_TBL                VARCHAR_TYPE;
127   G_PRIMARY_UOM_FLAG_TBL             VARCHAR_TYPE;
128   G_PRINT_ON_INVOICE_FLAG_TBL        VARCHAR_TYPE;
129   G_MODIFIER_LEVEL_CODE_TBL          VARCHAR_TYPE;
130   G_BENEFIT_QTY_TBL                  NUMBER_TYPE;
131   G_BENEFIT_UOM_CODE_TBL             VARCHAR_TYPE;
132   G_SERVICE_DURATION_TBL	           NUMBER_TYPE; -- SERVICE PROJECT
133   G_SERVICE_PERIOD_TBL		           VARCHAR_TYPE;-- SERVICE PROJECT
134   G_LIST_LINE_NO_TBL                 VARCHAR_TYPE;
135   G_ACCRUAL_FLAG_TBL                 VARCHAR_TYPE;
136   G_ACCRUAL_CONVERSION_RATE_TBL      NUMBER_TYPE;
137   G_ESTIM_ACCRUAL_RATE_TBL           NUMBER_TYPE;
138   G_RECURRING_FLAG_TBL               VARCHAR_TYPE;
139   G_SELECTED_VOLUME_ATTR_TBL         VARCHAR_TYPE;
140   G_QUALIFIERS_EXIST_FLAG_TBL        VARCHAR_TYPE;
141   G_PRICING_ATTRS_EXIST_FLAG_TBL     VARCHAR_TYPE;
142   G_PRICE_LIST_ID_TBL                NUMBER_TYPE;
143   G_PL_VALIDATED_FLAG_TBL            VARCHAR_TYPE;
144   G_HEADER_LIMIT_EXISTS_TBL          VARCHAR_TYPE;
145   G_LINE_LIMIT_EXISTS_TBL            VARCHAR_TYPE;
146   G_CHARGE_TYPE_CODE_TBL             VARCHAR_TYPE;
147   G_CHARGE_SUBTYPE_CODE_TBL          VARCHAR_TYPE;
148   G_CURRENCY_HEADER_ID_TBL           NUMBER_TYPE; /* vivek */
149   G_SELLING_ROUNDING_TBL           NUMBER_TYPE; /* vivek */
150   G_ORDER_CURRENCY_TBL               VARCHAR_TYPE; /* vivek */
151   G_BASE_CURRENCY_CODE_TBL           VARCHAR_TYPE; /* vivek */
152   G_CURRENCY_DETAIL_ID_TBL           NUMBER_TYPE; /* sunilpandey */
153 --  G_LDET_LINE_QUANTITY_TBL		     NUMBER_TYPE; -- defined in SPEC
154   G_ACCUM_CONTEXT_TBL                VARCHAR_TYPE; -- for accum range break
155   G_ACCUM_ATTRIBUTE_TBL              VARCHAR_TYPE; -- for accum range break
156   G_ACCUM_FLAG_TBL                   VARCHAR_TYPE; -- for accum range break
157   G_BREAK_UOM_TBL               VARCHAR_TYPE; /* Proration */
158   G_BREAK_CONTEXT_TBL           VARCHAR_TYPE; /* Proration */
159   G_BREAK_ATTRIBUTE_TBL         VARCHAR_TYPE; /* Proration */
160   G_SECONDARY_PRICELIST_IND_TBL VARCHAR_30_TYPE;
161 
162   G_LIST_HEADER_ID_TBL_Q             NUMBER_TYPE;
163   G_LIST_LINE_ID_TBL_Q               NUMBER_TYPE;
164   G_LINE_INDEX_TBL_Q                 NUMBER_TYPE;
165   G_LIST_LINE_TYPE_TBL_Q             VARCHAR_TYPE;
166   G_VALIDATED_FLAG_TBL_Q             VARCHAR_TYPE;
167   G_APPLIED_FLAG_TBL_Q               VARCHAR_TYPE;
168   G_AUTOMATIC_FLAG_TBL_Q             VARCHAR_TYPE;
169   G_START_DATE_ACTIVE_TBL_Q          DATE_TYPE;
170   G_END_DATE_ACTIVE_TBL_Q            DATE_TYPE;
171   G_PRICING_EFFECTIVE_DATE_TBL_Q     DATE_TYPE;
172   G_LINE_TYPE_CODE_TBL_Q             VARCHAR_TYPE;
173   G_PRICING_PHASE_ID_TBL_Q           PLS_INTEGER_TYPE;
174   G_UNIQUE_KEY_TBL_Q                 VARCHAR_TYPE;
175   G_ATTRIBUTE_LEVEL_TBL_Q            VARCHAR_TYPE;
176   G_ATTRIBUTE_TYPE_TBL_Q             VARCHAR_TYPE;
177   G_CONTEXT_TBL_Q                    VARCHAR_TYPE;
178   G_ATTRIBUTE_TBL_Q                  VARCHAR_TYPE;
179   G_VALUE_FROM_TBL_Q                 VARCHAR_TYPE;
180   G_GROUPING_NO_TBL_Q                PLS_INTEGER_TYPE;
181   G_QUALIFIER_PRECEDENCE_TBL_Q       PLS_INTEGER_TYPE;
182   G_DATATYPE_TBL_Q                   VARCHAR_TYPE;
183   G_SETUP_VALUE_FROM_TBL_Q           VARCHAR_TYPE;
184   G_SETUP_VALUE_TO_TBL_Q             VARCHAR_TYPE;
185   G_PRICING_ATTR_FLAG_TBL_Q          VARCHAR_TYPE;
186   G_OPERATOR_TYPE_TBL_Q              VARCHAR_TYPE;
187   G_CURRENCY_CODE_TBL_Q              VARCHAR_TYPE;
188   G_ASK_FOR_FLAG_TBL_Q               VARCHAR_TYPE;
189   G_LIST_TYPE_CODE_TBL_Q             VARCHAR_TYPE;
190   G_QUALIFIER_TYPE_TBL_Q             VARCHAR_TYPE;
191   G_QUALIFIER_GROUP_CNT_TBL_Q        NUMBER_TYPE;
192   G_OTHERS_GROUP_CNT_TBL_Q        	 NUMBER_TYPE;
193   G_HEADER_QUALS_EXIST_FLG_TBL_Q     VARCHAR_TYPE;
194   G_SEARCH_IND_TBL_Q                 NUMBER_TYPE;
195   G_PRICING_STATUS_CODE_TBL_Q        VARCHAR_TYPE;
196   G_START_DATE_ACTIVE_TBL_H_Q        DATE_TYPE;
197   G_END_DATE_ACTIVE_TBL_H_Q          DATE_TYPE;
198   G_START_DATE_ACTIVE_SEC_TBL_Q      DATE_TYPE;
199   G_END_DATE_ACTIVE_SEC_TBL_Q        DATE_TYPE;
200   G_ACTIVE_DATE_FIR_TYPE_TBL_Q       VARCHAR_TYPE;
201   G_ACTIVE_DATE_SEC_TYPE_TBL_Q       VARCHAR_TYPE;
202   G_START_DATE_ACTIVE_FIR_TBL_Q      DATE_TYPE;
203   G_END_DATE_ACTIVE_FIR_TBL_Q        DATE_TYPE;
204   G_HEADER_LIMIT_EXISTS_TBL_Q        VARCHAR_TYPE;
205   G_ACTIVE_DATE_FIRST_TBL_Q          DATE_TYPE;
206   G_ACTIVE_DATE_SECOND_TBL_Q         DATE_TYPE;
207   G_INCOMP_GRP_CODE_TBL_Q            VARCHAR_TYPE;
208   G_ACCR_CONVERSION_RATE_TBL_Q       NUMBER_TYPE;
209   G_ACCRUAL_FLAG_TBL_Q               VARCHAR_TYPE;
210   G_MODIFIER_LEVEL_CODE_TBL_Q        VARCHAR_TYPE;
211   G_LIST_PRICE_TBL_Q                 NUMBER_TYPE;
212   G_LIST_LINE_NO_TBL_Q               VARCHAR_TYPE;
213   G_PRIMARY_UOM_FLAG_TBL_Q           VARCHAR_TYPE;
214   G_OPER_CALCULATION_CODE_TBL_Q      VARCHAR_TYPE;
215   G_OPERAND_TBL_Q                    NUMBER_TYPE;
216   G_NET_AMOUNT_FLAG_TBL_Q            VARCHAR_TYPE; -- IT net_amount 2720717
217   G_PRICING_GROUP_SEQUENCE_TBL_Q     NUMBER_TYPE;
218   G_PRICE_BREAK_TYPE_CODE_TBL_Q      VARCHAR_TYPE;
219   G_PRICE_FORMULA_ID_TBL_Q           NUMBER_TYPE;
220   G_PRODUCT_PRECEDENCE_TBL_Q         NUMBER_TYPE;
221   G_ESTIM_ACCRUAL_RATE_TBL_Q         NUMBER_TYPE;
222   G_DERIVED_QUALIFIER_FLAG_TBL_Q     VARCHAR_TYPE;   -- Added for TCA
223 
224   G_LINE_INDEX_TBL_P              NUMBER_TYPE;
225   G_LINE_DETAIL_INDEX_TBL_P       NUMBER_TYPE;
226   G_LIST_HEADER_ID_TBL_P          NUMBER_TYPE;
227   G_LIST_LINE_ID_TBL_P            NUMBER_TYPE;
228   G_PRICE_BREAK_TYPE_CODE_TBL_P   VARCHAR_TYPE;
229   G_LIST_PRICE_TBL_P              NUMBER_TYPE;
230   G_LIST_LINE_TYPE_TBL_P          VARCHAR_TYPE;
231   G_LIST_TYPE_CODE_TBL_P          VARCHAR_TYPE;
232   G_PRICING_GROUP_SEQUENCE_TBL_P  NUMBER_TYPE;
233   G_PRICING_PHASE_ID_TBL_P        PLS_INTEGER_TYPE;
234   G_OPER_CALCULATION_CODE_TBL_P   VARCHAR_TYPE;
235   G_OPERAND_VALUE_TBL_P           NUMBER_TYPE;
236   G_NET_AMOUNT_FLAG_TBL_P         VARCHAR_TYPE;  -- IT net_amount 2720717
237   G_ASK_FOR_FLAG_TBL_P            VARCHAR_TYPE;
238   G_PRICE_FORMULA_ID_TBL_P        NUMBER_TYPE;
239   G_PRODUCT_PRECEDENCE_TBL_P      NUMBER_TYPE;
240   G_INCOMP_GRP_CODE_TBL_P         VARCHAR_TYPE;
241   G_AUTOMATIC_FLAG_TBL_P          VARCHAR_TYPE;
242   G_OVERRIDE_FLAG_TBL_P           VARCHAR_TYPE;
243   G_PRIMARY_UOM_FLAG_TBL_P        VARCHAR_TYPE;
244   G_PRINT_ON_INVOICE_FLAG_TBL_P   VARCHAR_TYPE;
245   G_MODIFIER_LEVEL_CODE_TBL_P     VARCHAR_TYPE;
246   G_BENEFIT_QTY_TBL_P             NUMBER_TYPE;
247   G_BENEFIT_UOM_CODE_TBL_P        VARCHAR_TYPE;
248   G_SERVICE_DURATION_TBL_P        NUMBER_TYPE; -- SERVICE PROJECT
249   G_SERVICE_PERIOD_TBL_P          VARCHAR_TYPE;-- SERVICE PROJECT
250   G_LIST_LINE_NO_TBL_P            VARCHAR_TYPE;
251   G_ACCRUAL_FLAG_TBL_P            VARCHAR_TYPE;
252   G_ACCR_CONVERSION_RATE_TBL_P    NUMBER_TYPE;
253   G_ESTIM_ACCRUAL_RATE_TBL_P      NUMBER_TYPE;
254   G_ATTRIBUTE_LEVEL_TBL_P         VARCHAR_TYPE;
255   G_ATTRIBUTE_TYPE_TBL_P          VARCHAR_TYPE;
256   G_CONTEXT_TBL_P                 VARCHAR_TYPE;
257   G_ATTRIBUTE_TBL_P               VARCHAR_TYPE;
258   G_VALUE_FROM_TBL_P              VARCHAR_TYPE;
259   G_SETUP_VALUE_FROM_TBL_P        VARCHAR_TYPE;
260   G_VALIDATED_FLAG_TBL_P          VARCHAR_TYPE;
261   G_APPLIED_FLAG_TBL_P            VARCHAR_TYPE;
262   G_PRICING_ATTR_FLAG_TBL_P       VARCHAR_TYPE;
263   G_GROUPING_NUMBER_TBL_P         NUMBER_TYPE;
264   G_QUALIFIER_PRECEDENCE_TBL_P    NUMBER_TYPE;
265   G_EXCLUDER_FLAG_TBL_P           VARCHAR_TYPE;
266   G_PRODUCT_UOM_CODE_TBL_P        VARCHAR_TYPE;
267   G_QUALIFIER_TYPE_TBL_P          VARCHAR_TYPE;
268   G_ROUNDING_FACTOR_TBL_P         NUMBER_TYPE;
269   G_HEADER_LIMIT_EXISTS_TBL_P     VARCHAR_TYPE;
270   G_LINE_LIMIT_EXISTS_TBL_P       VARCHAR_TYPE;
271   G_CHARGE_TYPE_CODE_TBL_P       VARCHAR_TYPE;
272   G_CHARGE_SUBTYPE_CODE_TBL_P       VARCHAR_TYPE;
273   G_CURRENCY_HEADER_ID_TBL_P      NUMBER_TYPE; /* vivek */
274   G_SELLING_ROUNDING_TBL_P      NUMBER_TYPE; /* vivek */
275   G_ORDER_CURRENCY_TBL_P          VARCHAR_TYPE; /* vivek */
276   G_PRICING_EFFECTIVE_DATE_TBL_P  DATE_TYPE; /* vivek */
277   G_BASE_CURRENCY_CODE_TBL_P      VARCHAR_TYPE; /* vivek */
278   G_CURRENCY_DETAIL_ID_TBL_P      NUMBER_TYPE; /* sunilpandey */
279   G_ACCUM_CONTEXT_TBL_P           VARCHAR_TYPE; -- for accum range break
280   G_ACCUM_ATTRIBUTE_TBL_P         VARCHAR_TYPE; -- for accum range break
281   G_ACCUM_FLAG_TBL_P              VARCHAR_TYPE; -- for accum range break
282 
283   G_ATTRIBUTE_LEVEL_TBL_PR        VARCHAR_TYPE;
284   G_ATTRIBUTE_TYPE_TBL_PR         VARCHAR_TYPE;
285   G_CONTEXT_TBL_PR                VARCHAR_TYPE;
286   G_ATTRIBUTE_TBL_PR              VARCHAR_TYPE;
287   G_VALUE_FROM_TBL_PR             VARCHAR_TYPE;
288   G_OPERATOR_TYPE_TBL_PR          VARCHAR_TYPE;
289   G_SETUP_VALUE_FROM_TBL_PR       VARCHAR_TYPE;
290   G_SETUP_VALUE_TO_TBL_PR         VARCHAR_TYPE;
291   G_DATATYPE_TBL_PR               VARCHAR_TYPE;
292   G_BREAK_UOM_TBL_P               VARCHAR_TYPE; /* Proration */
293   G_BREAK_CONTEXT_TBL_P           VARCHAR_TYPE; /* Proration */
294   G_BREAK_ATTRIBUTE_TBL_P         VARCHAR_TYPE; /* Proration */
295 
296   G_LINE_INDEX_TBL_B              PLS_INTEGER_TYPE;
297   G_LIST_HEADER_ID_TBL_B          NUMBER_TYPE;
298   G_LIST_LINE_ID_TBL_B            NUMBER_TYPE;
299   G_PRICE_BREAK_TYPE_CODE_TBL_B   VARCHAR_TYPE;
300   G_LIST_PRICE_TBL_B              NUMBER_TYPE;
301   G_LIST_LINE_TYPE_TBL_B          VARCHAR_TYPE;
302   G_LIST_TYPE_CODE_TBL_B          VARCHAR_TYPE;
303   G_PRICING_GROUP_SEQUENCE_TBL_B  NUMBER_TYPE;
304   G_PRICING_PHASE_ID_TBL_B        PLS_INTEGER_TYPE;
305   G_OPER_CALCULATION_CODE_TBL_B    VARCHAR_TYPE;
306   G_OPERAND_VALUE_TBL_B            VARCHAR_TYPE;
307   G_NET_AMOUNT_FLAG_TBL_B          VARCHAR_TYPE; -- IT net_amount 2720717
308   G_ASK_FOR_FLAG_TBL_B             VARCHAR_TYPE;
309   G_PRICE_FORMULA_ID_TBL_B         NUMBER_TYPE;
310   G_PRODUCT_PRECEDENCE_TBL_B       NUMBER_TYPE;
311   G_INCOMP_GRP_CODE_TBL_B          VARCHAR_TYPE;
312   G_AUTOMATIC_FLAG_TBL_B           VARCHAR_TYPE;
313   G_OVERRIDE_FLAG_TBL_B            VARCHAR_TYPE;
314   G_PRIMARY_UOM_FLAG_TBL_B         VARCHAR_TYPE;
315   G_PRINT_ON_INVOICE_FLAG_TBL_B    VARCHAR_TYPE;
316   G_MODIFIER_LEVEL_CODE_TBL_B      VARCHAR_TYPE;
317   G_BENEFIT_QTY_TBL_B              NUMBER_TYPE;
318   G_BENEFIT_UOM_CODE_TBL_B         VARCHAR_TYPE;
319   G_SERVICE_DURATION_TBL_B         NUMBER_TYPE; -- SERVICE PROJECT
320   G_SERVICE_PERIOD_TBL_B           VARCHAR_TYPE; -- SERVICE PROJECT
321   G_LIST_LINE_NO_TBL_B             VARCHAR_TYPE;
322   G_ACCRUAL_FLAG_TBL_B             VARCHAR_TYPE;
323   G_ACCR_CONVERSION_RATE_TBL_B     NUMBER_TYPE;
324   G_ESTIM_ACCRUAL_RATE_TBL_B       NUMBER_TYPE;
325 
326   G_LINE_INDEX_TBL_G              NUMBER_TYPE;
327   G_LIST_HEADER_ID_TBL_G          NUMBER_TYPE;
328   G_LIST_LINE_ID_TBL_G            NUMBER_TYPE;
329   G_NO_OF_PATTS_IN_GRP_TBL_G      NUMBER_TYPE;
330 
331   G_PRICING_PHASE_ID_TBL_A        PLS_INTEGER_TYPE;
332   G_INCOMP_GRP_CODE_TBL_A         VARCHAR_TYPE;
333   G_LINE_DETAIL_TYPE_CODE_TBL_A   VARCHAR_TYPE;
334   G_MODIFIER_LEVEL_CODE_TBL_A     VARCHAR_TYPE;
335   G_PRIMARY_UOM_FLAG_TBL_A        VARCHAR_TYPE;
336   G_LINE_INDEX_TBL_A              PLS_INTEGER_TYPE;
337   G_LINE_DETAIL_INDEX_TBL_A       PLS_INTEGER_TYPE;
338   G_LIST_LINE_ID_TBL_A              NUMBER_TYPE;
339   G_LIST_HEADER_ID_TBL_A              NUMBER_TYPE;
340 
341   --G_QUALIFIER_TEMP_EMPTY CONSTANT VARCHAR2(10) := 'E';
342   --G_QUALIFIER_TEMP_UPDATED CONSTANT VARCHAR2(10) := 'U';
343   --G_QUALIFIER_TEMP_NEED_UPDATE CONSTANT VARCHAR2(10) := 'N';
344   G_QUALIFIER_TEMP VARCHAR2(10);
345   G_LINE_QUALIFIER_TEMP VARCHAR2(10);
346 
347   G_INSERT_INTO_FORMULA_TMP      BOOLEAN ; -- Change
348   --G_INSERT_INTO_FORMULA_TMP      VARCHAR2(10) := 'N'; -- Change
349 
350   -- security
351   G_SECURITY_CONTROL              VARCHAR2(10) := 'OFF'; -- security
352   --G_CURRENT_USER_OP_UNIT   NUMBER := NULL; -- security (moved to spec)
353 
354   -- Bug 3143535 - ORDER AMOUNT CALCULATION ISSUE
355   G_BEFORE_PRICING_ORD_AMT  NUMBER := 0;
356 
357   G_NULL_PROFILE_VALUE      VARCHAR2(30) := 'NULL';
358 
359   -- julin [3805113]: storing for call_calculation_engine()
360   G_CHILD_VALUE_FROM_TBL            VARCHAR_TYPE;
361   G_CHILD_VALUE_TO_TBL              VARCHAR_TYPE;
362   G_PARENT_LINE_DETAIL_INDEX_TBL    NUMBER_TYPE;
363 
364   -- julin [3805113]: default bulk fetch size
365   G_BATCH_SIZE  NUMBER := 1000;
366   G_BATCH_SIZE_1  NUMBER := 50000; -- bug 6364923
367 
368   --Pattern changes
369   G_PTE_CODE VARCHAR2(30) := NULL;
370   G_CHUNK_SIZE NUMBER := 5000;
371   G_MIN_LINE_INDEX NUMBER;
372   G_MAX_LINE_INDEX NUMBER;
373 
374 -- Debug procedure
375 PROCEDURE Set_QP_Debug AS
376 
377  l_output_file			 VARCHAR2(240);
378  l_routine                       VARCHAR2(30) := 'Set_QP_Debug';
379  v_debug_switch    CONSTANT VARCHAR2(30) := 'QP_DEBUG';
380 
381 BEGIN
382 G_QP_DEBUG_PROFILE_VALUE := FND_PROFILE.VALUE(v_debug_switch);
383 
384 -- If Time Log is on then only Time Log messages should be printed.
385 -- Time Log will be on if Profiles QP:Debug is set to Time Log
386 -- and OM:Debug Level is set to 1.
387 -- Internal Bug# 8459818
388 
389 IF G_QP_DEBUG_PROFILE_VALUE = G_TIME_LOG_DBG_LEVEL
390       AND FND_PROFILE.VALUE('ONT_DEBUG_LEVEL') = 1 THEN
391     oe_debug_pub.SetDebugLevel(1);
392     oe_debug_pub.Initialize;
393     oe_debug_pub.debug_on;
394 
395     l_output_file := oe_debug_pub.Set_Debug_Mode('FILE');
396     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
397      engine_debug ('The output file is : ' || l_output_file );
398     END IF;
399 ELSIF FND_PROFILE.VALUE('ONT_DEBUG_LEVEL') = 5 THEN
400       l_output_file := oe_debug_pub.Set_Debug_Mode('FILE');
401       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
402        engine_debug ('The output file is : ' || l_output_file );
403       END IF;
404 END IF;
405 
406  -- Introduced for facilitating debugging for non OM Applications
407 --IF (NOT OE_DEBUG_PUB.ISDebugOn) THEN --If om debug is not on , then only look at qp_debug
408 if oe_debug_pub.g_debug_level > 0 then
409  G_DEBUG_ENGINE:= FND_API.G_TRUE;
410 else
411  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
412     (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
413   oe_debug_pub.SetDebugLevel(10);
414   oe_debug_pub.Initialize;
415   oe_debug_pub.debug_on;
416   l_output_file := oe_debug_pub.Set_Debug_Mode('FILE');
417   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
418    engine_debug ('The output file is : ' || l_output_file );
419   END IF;
420   G_DEBUG_ENGINE:= FND_API.G_TRUE;
421  ELSE
422   G_DEBUG_ENGINE:= FND_API.G_FALSE;
423  END IF;
424 END IF;
425 
426 EXCEPTION
427  WHEN OTHERS THEN
428   --x_status_code := FND_API.G_RET_STS_ERROR;
429   --x_status_text :=l_routine||' '||SQLERRM;
430  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
431   engine_debug(l_routine||' '||SQLERRM);
432  END IF;
433 
434 END Set_QP_Debug;
435 
436 -- shu new rounding implementation
437 /*+--------------------------------------------------------------------
438   | UPDATE_ROUNDING_FACTOR
439   | to update rounding_factor in the qp_npreq_lines_tmp table
440   +--------------------------------------------------------------------
441 */
442 PROCEDURE UPDATE_ROUNDING_FACTOR(
443 	p_mcurr_installed_used_flag	IN  VARCHAR2,
444 	x_status_code                   OUT NOCOPY VARCHAR2,
445 	x_status_text                   OUT NOCOPY VARCHAR2) AS
446 
447 	l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.UPDATE_ROUNDING_FACTOR';
448 
449 CURSOR get_price_lists_cur IS
450 SELECT distinct price_list_header_id , currency_code , trunc(pricing_effective_date) pricing_effective_date
451 FROM   qp_npreq_lines_tmp
452 where  price_flag in ('Y','P')
453 and    line_type_code = 'LINE'
454 and    rounding_factor is null
455 and    price_list_header_id > 0; --[julin/5395256]
456 
457 
458 p_price_list_id_tbl    NUMBER_TYPE;
459 p_currency_code_tbl    VARCHAR_TYPE;
460 p_pricing_eff_date_tbl DATE_TYPE;
461 p_rounding_factor_tbl  NUMBER_TYPE;
462 nROWS                  NUMBER :=1000;
463 v_count                NUMBER := 0;
464 
465 BEGIN
466 
467  OPEN get_price_lists_cur;
468 
469  LOOP
470 
471   p_price_list_id_tbl.delete;
472   p_currency_code_tbl.delete;
473   p_pricing_eff_date_tbl.delete;
474 
475  FETCH get_price_lists_cur BULK COLLECT INTO
476   p_price_list_id_tbl,
477   p_currency_code_tbl,
478   p_pricing_eff_date_tbl LIMIT nROWS;
479 
480  EXIT WHEN p_price_list_id_tbl.COUNT = 0;
481 
482   IF (p_price_list_id_tbl.COUNT > 0) THEN
483 
484    v_count := p_price_list_id_tbl.count;
485 
486    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
487     engine_debug('Calling Round Factor function for : '||v_count|| ' price list,currency,pricing date combinations');
488    END IF;
489 
490    FOR i in p_price_list_id_tbl.FIRST .. p_price_list_id_tbl.LAST
491    LOOP
492 
493     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
494      engine_debug('Price List Id : ' || p_price_list_id_tbl(i));
495      engine_debug('Currency Code : ' || p_currency_code_tbl(i));
496      engine_debug('Pricing Date  : ' || p_pricing_eff_date_tbl(i));
497     END IF;
498     p_rounding_factor_tbl(i) :=
499     qp_util_pub.get_rounding_factor(
500                 p_mcurr_installed_used_flag,
501                 p_price_list_id_tbl(i),
502                 p_currency_code_tbl(i),
503                 p_pricing_eff_date_tbl(i));
504 
505     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
506      engine_debug('Rounding factor in QP_PREQ_GRP after the function call : ' || p_rounding_factor_tbl(i));
507     END IF;
508 
509    END LOOP;
510 
511    FORALL i in p_price_list_id_tbl.FIRST .. p_price_list_id_tbl.LAST
512    UPDATE qp_npreq_lines_tmp
513    SET   ROUNDING_FACTOR = p_rounding_factor_tbl(i)
514    WHERE PRICE_FLAG in (QP_PREQ_GRP.G_YES, QP_PREQ_GRP.G_PHASE)
515    AND   PRICE_LIST_HEADER_ID = p_price_list_id_tbl(i)
516    AND   CURRENCY_CODE = p_currency_code_tbl(i)
517    AND   trunc(PRICING_EFFECTIVE_DATE) = p_pricing_eff_date_tbl(i); -- bug 3364978
518 
519     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
520      engine_debug('Number of lines updated with rounding factor : ' || SQL%ROWCOUNT);
521     END IF;
522 
523   END IF;
524  END LOOP;
525 
526  CLOSE get_price_lists_cur;
527 
528 EXCEPTION
529  	WHEN OTHERS THEN
530   		x_status_code := FND_API.G_RET_STS_ERROR;
531   		x_status_text :=l_routine||' '||SQLERRM;
532     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
533   		engine_debug(l_routine||' '||SQLERRM);
534     END IF;
535 END;
536 
537 /*+--------------------------------------------------------------------
538   |ENGINE_DEBUG
539   |For performance concern, we can avoid calling debug
540   |if the debug features is turned off
541   +--------------------------------------------------------------------
542 */
543 PROCEDURE ENGINE_DEBUG(p_text IN VARCHAR2) AS
544  l_return_status VARCHAR2(240);
545  l_status_text   VARCHAR2(240);
546 BEGIN
547  --IF (G_DEBUG_ENGINE  = FND_API.G_TRUE) THEN
548    oe_debug_pub.add(p_text,3);
549 
550 -- Debug Screen related change
551 -- Irrespective of om debug if qp debug is on debug information is captured into qp debug tables
552  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) THEN
553    QP_COPY_DEBUG_PVT.INSERT_DEBUG_LINE(p_text);
554  END IF;
555 
556  --END IF;
557 EXCEPTION
558  WHEN OTHERS THEN
559   NULL;
560 END;
561 
562 /*+---------------------------------------------------------------------
563   |GET_VERSION
564   +---------------------------------------------------------------------
565 */
566 FUNCTION GET_VERSION RETURN VARCHAR2 IS
567 BEGIN
568  --engine_debug(G_VERSION);
569  RETURN G_VERSION;
570 END;
571 
572 /*+----------------------------------------------------------------------
573   |Procedure INSERT_QUAL
574   +----------------------------------------------------------------------
575 */
576 PROCEDURE INSERT_QUAL(
577   p_LIST_HEADER_ID         IN NUMBER_TYPE,
578   p_LIST_LINE_ID           IN NUMBER_TYPE,
579   p_VALIDATED_FLAG         IN VARCHAR_TYPE,
580   p_APPLIED_FLAG           IN VARCHAR_TYPE,
581   p_ATTRIBUTE_LEVEL        IN VARCHAR_TYPE,
582   p_ATTRIBUTE_TYPE         IN VARCHAR_TYPE,
583   p_CONTEXT                IN VARCHAR_TYPE,
584   p_ATTRIBUTE              IN VARCHAR_TYPE,
585   p_VALUE_FROM             IN VARCHAR_TYPE,
586   p_GROUPING_NO            IN PLS_INTEGER_TYPE,
587   p_QUALIFIER_PRECEDENCE   IN PLS_INTEGER_TYPE,
588   p_DATATYPE               IN VARCHAR_TYPE,
589   p_SETUP_VALUE_FROM       IN VARCHAR_TYPE,
590   p_SETUP_VALUE_TO         IN VARCHAR_TYPE,
591   p_PRICING_ATTR_FLAG      IN VARCHAR_TYPE,
592   p_OPERATOR_TYPE          IN VARCHAR_TYPE,
593   p_LIST_TYPE_CODE         IN VARCHAR_TYPE,
594   p_ASK_FOR_FLAG           IN VARCHAR_TYPE,
595   p_QUALIFIER_TYPE         IN VARCHAR_TYPE,
596   p_QUALIFIER_GROUP_CNT    IN NUMBER_TYPE,
597   p_OTHERS_GROUP_CNT    IN NUMBER_TYPE,
598   p_HEADER_QUALS_EXIST_FLAG IN VARCHAR_TYPE,
599   p_SEARCH_IND             IN NUMBER_TYPE,
600   p_PRICING_STATUS_CODE    IN VARCHAR_TYPE,
601   p_START_DATE_ACTIVE      IN DATE_TYPE,
602   p_END_DATE_ACTIVE        IN DATE_TYPE,
603   p_LINE_INDEX             IN NUMBER_TYPE,
604   p_PRICING_EFFECTIVE_DATE IN DATE_TYPE,
605   p_START_DATE_ACTIVE_FIR  IN DATE_TYPE,
606   p_END_DATE_ACTIVE_FIR    IN DATE_TYPE,
607   p_LINE_TYPE_CODE         IN VARCHAR_TYPE,
608   p_PRICING_PHASE_ID       IN PLS_INTEGER_TYPE,
609   p_UNIQUE_KEY             IN VARCHAR_TYPE,
610   p_START_DATE_ACTIVE_H    IN DATE_TYPE,
611   p_END_DATE_ACTIVE_H      IN DATE_TYPE,
612   p_START_DATE_ACTIVE_SEC  IN DATE_TYPE,
613   p_END_DATE_ACTIVE_SEC    IN DATE_TYPE,
614   p_ACTIVE_DATE_FIR_TYPE   IN VARCHAR_TYPE,
615   p_ACTIVE_DATE_SEC_TYPE   IN VARCHAR_TYPE,
616   p_HEADER_LIMIT_EXISTS    IN VARCHAR_TYPE,
617   p_DERIVED_QUALIFIER_FLAG IN VARCHAR_TYPE,  -- Added for TCA
618   x_status_code            OUT NOCOPY VARCHAR2,
619   x_status_text            OUT NOCOPY VARCHAR2)      AS
620 
621   l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_QUAL';
622 
623 BEGIN
624 FORALL i in p_list_header_id.FIRST..p_list_header_id.LAST
625       Insert into QP_PREQ_QUAL_TMP
626       (  LIST_HEADER_ID
627       ,  LIST_LINE_ID
628       ,  LINE_INDEX
629       ,  QUALIFIER_ATTRIBUTE_LEVEL
630       ,  QUALIFIER_ATTRIBUTE_TYPE
631       ,  QUALIFIER_ATTRIBUTE_CONTEXT
632       ,  QUALIFIER_ATTRIBUTE
633       ,  QUALIFIER_ATTRIBUTE_VALUE
634       ,  QUALIFIER_GROUPING_NO
635       ,  QUALIFIER_PRECEDENCE
636       ,  QUALIFIER_DATATYPE
637       ,  SETUP_VALUE_FROM
638       ,  SETUP_VALUE_TO
639       ,  QUALIFIER_PRICING_ATTR_FLAG
640       ,  QUALIFIER_OPERATOR_TYPE
641       ,  ASK_FOR_FLAG
642       ,  CREATED_FROM_LIST_TYPE
643       ,  VALIDATED_FLAG
644       ,  APPLIED_FLAG
645       ,  QUALIFIER_TYPE
646       ,  QUALIFIER_GROUP_CNT
647       ,  OTHERS_GROUP_CNT
648       ,  HEADER_QUALS_EXIST_FLAG
649       ,  SEARCH_IND
650       ,  PRICING_STATUS_CODE
651       ,  START_DATE_ACTIVE
652       ,  END_DATE_ACTIVE
653       ,  PRICING_EFFECTIVE_DATE
654       ,  START_DATE_ACTIVE_FIRST
655       ,  END_DATE_ACTIVE_FIRST
656       ,  LINE_TYPE_CODE
657       ,  UNIQUE_KEY
658       ,  PRICING_PHASE_ID
659       ,  START_DATE_ACTIVE_H
660       ,  END_DATE_ACTIVE_H
661       ,  START_DATE_ACTIVE_SECOND
662       ,  END_DATE_ACTIVE_SECOND
663       ,  ACTIVE_DATE_FIRST_TYPE
664       ,  ACTIVE_DATE_SECOND_TYPE
665       ,  HEADER_LIMIT_EXISTS
666       ,  DERIVED_QUALIFIER_FLAG  -- Added for TCA
667       )
668       VALUES
669       (  p_LIST_HEADER_ID(i)
670       ,  p_LIST_LINE_ID(i)
671       ,  p_LINE_INDEX(i)
672       ,  p_ATTRIBUTE_LEVEL(i)
673       ,  p_ATTRIBUTE_TYPE(i)
674       ,  p_CONTEXT(i)
675       ,  p_ATTRIBUTE(i)
676       ,  p_VALUE_FROM(i)
677       ,  p_GROUPING_NO(i)
678       ,  p_QUALIFIER_PRECEDENCE(i)
679       ,  p_DATATYPE(i)
680       ,  p_SETUP_VALUE_FROM(i)
681       ,  p_SETUP_VALUE_TO(i)
682       ,  p_PRICING_ATTR_FLAG(i)
683       ,  p_OPERATOR_TYPE(i)
684       ,  p_ASK_FOR_FLAG(i)
685       ,  p_LIST_TYPE_CODE(i)
686       ,  p_VALIDATED_FLAG(i)
687       ,  p_APPLIED_FLAG(i)
688       ,  p_QUALIFIER_TYPE(i)
689       ,  p_QUALIFIER_GROUP_CNT(i)
690       ,  p_OTHERS_GROUP_CNT(i)
691       ,  p_HEADER_QUALS_EXIST_FLAG(i)
692       ,  p_SEARCH_IND(i)
693       ,  p_PRICING_STATUS_CODE(i)
694       ,  p_START_DATE_ACTIVE(i)
695       ,  p_END_DATE_ACTIVE(i)
696       ,  p_PRICING_EFFECTIVE_DATE(i)
697       ,  p_START_DATE_ACTIVE_FIR(i)
698       ,  p_END_DATE_ACTIVE_FIR(i)
699       ,  p_LINE_TYPE_CODE(i)
700       ,  p_UNIQUE_KEY(i)
701       ,  p_PRICING_PHASE_ID(i)
702       ,  p_START_DATE_ACTIVE_H(i)
703       ,  p_END_DATE_ACTIVE_H(i)
704       ,  p_START_DATE_ACTIVE_SEC(i)
705       ,  p_END_DATE_ACTIVE_SEC(i)
706       ,  p_ACTIVE_DATE_FIR_TYPE(i)
707       ,  p_ACTIVE_DATE_SEC_TYPE(i)
708       ,  p_HEADER_LIMIT_EXISTS(i)
709       ,  p_DERIVED_QUALIFIER_FLAG(i));  -- Added for TCA
710 EXCEPTION
711   WHEN OTHERS THEN
712   x_status_code := FND_API.G_RET_STS_ERROR;
713   x_status_text :=l_routine||' '||SQLERRM;
714   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
715    engine_debug(l_routine||' '||SQLERRM);
716   END IF;
717 END;
718 
719 /*+--------------------------------------------------------------------
720   |Mini_Cache_Qualifiers
721   |To get qualifiers for matched headers with search_ind=2
722   +--------------------------------------------------------------------
723 */
724 
725 PROCEDURE Mini_Cache_Qualifiers(  p_list_header_id IN NUMBER
726                                 , p_list_line_id IN NUMBER
727                                 , p_grouping_no  IN NUMBER
728                                 , p_pricing_phase_id IN NUMBER
729                                 , x_status_code  OUT NOCOPY VARCHAR2
730                                 , x_status_text  OUT NOCOPY VARCHAR2)      AS
731 
732 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Mini_Cache_Qualifiers';
733 
734 /*
735 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
736 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
737 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
738 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
739 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,SEARCH_IND,5
740 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,ACTIVE_FLAG,6
741 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUP_CNT,7
742 
743 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
744 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
745 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
746 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
747 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
748 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
749 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,DISTINCT_QUALIFIER_FLAG,7
750 
751 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
752 */
753 -- Changed the cursor l_outer_qual_cur for bug#3002632
754 --Added index hints for bug#7480862
755 CURSOR l_MINI_OUTER_QUAL_CUR IS
756 -- Qualifier Only
757 select /*+ ORDERED NO_EXPAND USE_NL(qpq qplatq qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6)
758        index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
759        qpq.list_header_id,
760        qpq.list_line_id list_line_id,
761        qpq.qualifier_group_cnt,
762        qpq.others_group_cnt,
763        qpq.header_quals_exist_flag,
764        qpq.search_ind,
765        G_NO validated_flag,
766        G_NO applied_flag,
767        G_LINE_LEVEL attribute_level,
768        G_QUALIFIER_TYPE attribute_type,
769        qplatq.context          ,
770        qplatq.attribute        ,
771        qplatq.value_from       ,
772        qpq.qualifier_grouping_no qualifier_grouping_no ,
773        qpq.qualifier_precedence  ,
774        qpq.qualifier_datatype,
775        qpq.qualifier_attr_value    ,
776        qpq.qualifier_attr_value_to ,
777        qpq.start_date_active,
778        qpq.end_date_active,
779        G_NO pricing_attr_flag,
780        qpq.comparison_operator_code ,
781        qph.list_type_code,
782        qph.ask_for_flag,
783        qplatq.pricing_status_code,
784        'OHQ1' ,
785         NULL line_index,
786         NULL pricing_effective_date,
787         qph.start_date_active_first start_date_active_first,
788         qph.end_date_active_first   end_date_active_first,
789         NULL line_type_code,
790         p_pricing_phase_id pricing_phase_id,
791         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
792         qph.start_date_active start_date_active_h,
793         qph.end_date_active end_date_active_h,
794         qph.start_date_active_second start_date_active_second,
795         qph.end_date_active_second end_date_active_second,
796         qph.active_date_first_type,
797         qph.active_date_second_type,
798         qph.limit_exists_flag,
799         qplatq.derived_qualifier_flag   -- Added for TCA
800 from
801         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id,qualifier_grouping_no
802          from qp_preq_qual_tmp
803          where pricing_status_code = G_STATUS_UNCHANGED
804          and   pricing_phase_id = p_pricing_phase_id) qptq,
805         qp_qualifiers qpq ,
806         qp_npreq_line_attrs_tmp qplatq,
807         qp_list_headers_b qph,
808 	qp_price_req_sources_v qprs
809 where
810         qpq.list_header_id = qptq.list_header_id
811 and     qpq.list_line_id = qptq.list_line_id
812 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
813 and     qpq.qualifier_grouping_no <> -1
814 and     qpq.qualifier_context      = qplatq.context
815 and     qpq.qualifier_attribute    = qplatq.attribute
816 and     qpq.qualifier_attr_value = qplatq.value_from
817 and     qpq.comparison_operator_code = '='
818 and     qpq.search_ind =  2
819 and     qpq.qualifier_group_cnt > 1
820 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
821          OR
822          qph.currency_code IS NULL) -- optional currency
823 -- bug 2799120
824 --added for moac -- commented references to security profile
825 --security will be built into qp_list_headers_b
826 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
827 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
828 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
829 --Begin Bug# 7833575
830 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
831                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
832 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
833                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
834 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
835                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
836 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
837                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
838 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
839 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
840 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
841 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
842 --End Bug# 7833575
843 and    qph.list_type_code not in ('PRL','AGR')
844 and    qph.active_flag = G_YES
845 and    qpq.active_flag = G_YES
846 and    qpq.list_header_id = qph.list_header_id
847 and    qplatq.line_index > 0
848 and    qplatq.distinct_qualifier_flag = G_YES
849 and    qplatq.pricing_status_code = G_STATUS_UNCHANGED
850 and    qplatq.attribute_type = G_QUALIFIER_TYPE
851 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
852 and    qph.source_system_code = qprs.source_system_code
853 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
854          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
855 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
856 --and    qptq.pricing_phase_id = p_pricing_phase_id
857 union all
858 select /*+ ORDERED USE_NL(qpq qplatq qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6) index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_o
859 uter_qual_cur_mod */
860        qpq.list_header_id,
861        qpq.list_line_id list_line_id,
862        qpq.qualifier_group_cnt,
863        qpq.others_group_cnt,
864        qpq.header_quals_exist_flag,
865        qpq.search_ind,
866        G_NO validated_flag,
867        G_NO applied_flag,
868        G_LINE_LEVEL attribute_level,
869        G_QUALIFIER_TYPE attribute_type,
870        qplatq.context          ,
871        qplatq.attribute        ,
872        qplatq.value_from       ,
873        qpq.qualifier_grouping_no qualifier_grouping_no ,
874        qpq.qualifier_precedence  ,
875        qpq.qualifier_datatype,
876        qpq.qualifier_attr_value    ,
877        qpq.qualifier_attr_value_to ,
878        qpq.start_date_active,
879        qpq.end_date_active,
880        G_NO pricing_attr_flag,
881        qpq.comparison_operator_code ,
882        qph.list_type_code,
883        qph.ask_for_flag,
884        qplatq.pricing_status_code,
885        'OHQ1' ,
886         NULL line_index,
887         NULL pricing_effective_date,
888         qph.start_date_active_first start_date_active_first,
889         qph.end_date_active_first   end_date_active_first,
890         NULL line_type_code,
891         p_pricing_phase_id pricing_phase_id,
892         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
893         qph.start_date_active start_date_active_h,
894         qph.end_date_active end_date_active_h,
895         qph.start_date_active_second start_date_active_second,
896         qph.end_date_active_second end_date_active_second,
897         qph.active_date_first_type,
898         qph.active_date_second_type,
899         qph.limit_exists_flag,
900         qplatq.derived_qualifier_flag   -- Added for TCA
901 from
902         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id
903          from qp_preq_qual_tmp
904          where pricing_status_code = G_STATUS_UNCHANGED
905          and   pricing_phase_id = p_pricing_phase_id) qptq,
906         qp_qualifiers qpq ,
907         qp_npreq_line_attrs_tmp qplatq,
908         qp_list_headers_b qph,
909 	qp_price_req_sources_v qprs
910 where
911         qpq.list_header_id = qptq.list_header_id
912 and     qpq.list_line_id = qptq.list_line_id
913 and     qpq.qualifier_grouping_no = -1
914 and     qpq.qualifier_context      = qplatq.context
915 and     qpq.qualifier_attribute    = qplatq.attribute
916 and     qpq.qualifier_attr_value = qplatq.value_from
917 and     qpq.comparison_operator_code = '='
918 and     qpq.search_ind =  2
919 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
920          OR
921          qph.currency_code IS NULL) -- optional currency
922 -- bug 2799120
923 --added for moac -- commented references to security profile
924 --security will be built into qp_list_headers_b
925 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
926 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
927 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
928 --Begin Bug# 7833575
929 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
930                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
931 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
932                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
933 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
934                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
935 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
936                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
937 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
938 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
939 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
940 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
941 --End Bug# 7833575
942 
943 and    qph.list_type_code not in ('PRL','AGR')
944 and    qph.active_flag = G_YES
945 and    qpq.active_flag = G_YES
946 and    qpq.list_header_id = qph.list_header_id
947 and    qplatq.line_index > 0
948 and    qplatq.distinct_qualifier_flag = G_YES
949 and    qplatq.pricing_status_code = G_STATUS_UNCHANGED
950 and    qplatq.attribute_type = G_QUALIFIER_TYPE
951 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
952 and    qph.source_system_code = qprs.source_system_code
953 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
954          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
955 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
956 --and    qptq.pricing_phase_id = p_pricing_phase_id
957 union  all
958 select /*+ ORDERED USE_NL(qpq qplatq qph) index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6) index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
959        qpq.list_header_id,
960        qpq.list_line_id list_line_id,
961        qpq.qualifier_group_cnt,
962        qpq.others_group_cnt,
963        qpq.header_quals_exist_flag,
964        qpq.search_ind,
965        G_NO validated_flag,
966        G_NO applied_flag,
967        G_LINE_LEVEL attribute_level,
968        G_QUALIFIER_TYPE attribute_type,
969        qplatq.context          ,
970        qplatq.attribute        ,
971        qplatq.value_from       ,
972        qpq.qualifier_grouping_no qualifier_grouping_no ,
973        qpq.qualifier_precedence  ,
974        qpq.qualifier_datatype,
975        qpq.qualifier_attr_value    ,
976        qpq.qualifier_attr_value_to ,
977        qpq.start_date_active,
978        qpq.end_date_active,
979        G_NO pricing_attr_flag,
980        qpq.comparison_operator_code ,
981        qph.list_type_code,
982        qph.ask_for_flag,
983        qplatq.pricing_status_code,
984        'OHQ1' ,
985         NULL line_index,
986         NULL pricing_effective_date,
987         qph.start_date_active_first start_date_active_first,
988         qph.end_date_active_first   end_date_active_first,
989         NULL line_type_code,
990         p_pricing_phase_id pricing_phase_id,
991         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
992         qph.start_date_active start_date_active_h,
993         qph.end_date_active end_date_active_h,
994         qph.start_date_active_second start_date_active_second,
995         qph.end_date_active_second end_date_active_second,
996         qph.active_date_first_type,
997         qph.active_date_second_type,
998         qph.limit_exists_flag,
999         qplatq.derived_qualifier_flag   -- Added for TCA
1000 from
1001         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id,qualifier_grouping_no
1002          from qp_preq_qual_tmp
1003          where pricing_status_code = G_STATUS_UNCHANGED
1004          and   pricing_phase_id = p_pricing_phase_id) qptq,
1005         qp_qualifiers qpq ,
1006         qp_npreq_line_attrs_tmp qplatq,
1007         qp_list_headers_b qph,
1008 	qp_price_req_sources_v qprs
1009 where
1010         qpq.list_header_id = qptq.list_header_id
1011 and     qpq.list_line_id = qptq.list_line_id
1012 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
1013 and     qpq.qualifier_grouping_no <> -1
1014 and     qpq.qualifier_context      = qplatq.context
1015 and     qpq.qualifier_attribute    = qplatq.attribute
1016 and     qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
1017 and     qpq.qualifier_datatype =  G_NUMERIC
1018 and     qpq.search_ind =  2
1019 and     qpq.qualifier_group_cnt > 1
1020 and     qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
1021 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
1022 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1023          OR
1024          qph.currency_code IS NULL) -- optional currency
1025 -- bug 2799120
1026 --added for moac -- commented references to security profile
1027 --security will be built into qp_list_headers_b
1028 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1029 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1030 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1031 --Begin Bug# 7833575
1032 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1033                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1034 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1035                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1036 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1037                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1038 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1039                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1040 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1041 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1042 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1043 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1044 --End Bug# 7833575
1045 and    qph.list_type_code not in ('PRL','AGR')
1046 and     qph.active_flag = G_YES
1047 and     qpq.active_flag = G_YES
1048 and     qpq.list_header_id = qph.list_header_id
1049 and     qplatq.line_index > 0
1050 and     qplatq.distinct_qualifier_flag = G_YES
1051 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1052 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1053 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1054 and    qph.source_system_code = qprs.source_system_code
1055 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1056          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1057 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1058 --and    qptq.pricing_phase_id = p_pricing_phase_id
1059 union all
1060 select /*+ ORDERED USE_NL(qpq qplatq qph) index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6) index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_ou
1061 ter_qual_cur_mod */
1062        qpq.list_header_id,
1063        qpq.list_line_id list_line_id,
1064        qpq.qualifier_group_cnt,
1065        qpq.others_group_cnt,
1066        qpq.header_quals_exist_flag,
1067        qpq.search_ind,
1068        G_NO validated_flag,
1069        G_NO applied_flag,
1070        G_LINE_LEVEL attribute_level,
1071        G_QUALIFIER_TYPE attribute_type,
1072        qplatq.context          ,
1073        qplatq.attribute        ,
1074        qplatq.value_from       ,
1075        qpq.qualifier_grouping_no qualifier_grouping_no ,
1076        qpq.qualifier_precedence  ,
1077        qpq.qualifier_datatype,
1078        qpq.qualifier_attr_value    ,
1079        qpq.qualifier_attr_value_to ,
1080        qpq.start_date_active,
1081        qpq.end_date_active,
1082        G_NO pricing_attr_flag,
1083        qpq.comparison_operator_code ,
1084        qph.list_type_code,
1085        qph.ask_for_flag,
1086        qplatq.pricing_status_code,
1087        'OHQ1' ,
1088         NULL line_index,
1089         NULL pricing_effective_date,
1090         qph.start_date_active_first start_date_active_first,
1091         qph.end_date_active_first   end_date_active_first,
1092         NULL line_type_code,
1093         p_pricing_phase_id pricing_phase_id,
1094         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1095         qph.start_date_active start_date_active_h,
1096         qph.end_date_active end_date_active_h,
1097         qph.start_date_active_second start_date_active_second,
1098         qph.end_date_active_second end_date_active_second,
1099         qph.active_date_first_type,
1100         qph.active_date_second_type,
1101         qph.limit_exists_flag,
1102         qplatq.derived_qualifier_flag  -- Added for TCA
1103 from
1104         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id
1105          from qp_preq_qual_tmp
1106          where pricing_status_code = G_STATUS_UNCHANGED
1107          and   pricing_phase_id = p_pricing_phase_id) qptq,
1108         qp_qualifiers qpq ,
1109         qp_npreq_line_attrs_tmp qplatq,
1110         qp_list_headers_b qph,
1111 	qp_price_req_sources_v qprs
1112 where
1113         qpq.list_header_id = qptq.list_header_id
1114 and     qpq.list_line_id = qptq.list_line_id
1115 and     qpq.qualifier_grouping_no = -1
1116 and     qpq.qualifier_context      = qplatq.context
1117 and     qpq.qualifier_attribute    = qplatq.attribute
1118 and     qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
1119 and     qpq.qualifier_datatype =  G_NUMERIC
1120 and     qpq.search_ind =  2
1121 and     qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
1122 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
1123 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1124          OR
1125          qph.currency_code IS NULL) -- optional currency
1126 -- bug 2799120
1127 --added for moac -- commented references to security profile
1128 --security will be built into qp_list_headers_b
1129 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1130 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1131 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1132 --Begin Bug# 7833575
1133 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1134                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1135 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1136                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1137 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1138                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1139 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1140                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1141 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1142 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1143 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1144 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1145 --End Bug# 7833575
1146 and    qph.list_type_code not in ('PRL','AGR')
1147 and     qph.active_flag = G_YES
1148 and     qpq.active_flag = G_YES
1149 and     qpq.list_header_id = qph.list_header_id
1150 and     qplatq.line_index > 0
1151 and     qplatq.distinct_qualifier_flag = G_YES
1152 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1153 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1154 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1155 and    qph.source_system_code = qprs.source_system_code
1156 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1157          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1158 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1159 --and    qptq.pricing_phase_id = p_pricing_phase_id
1160 union all
1161 select /*+ ORDERED USE_NL(qpq qplatq qph) index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6) index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
1162        qpq.list_header_id,
1163        qpq.list_line_id list_line_id,
1164        qpq.qualifier_group_cnt,
1165        qpq.others_group_cnt,
1166        qpq.header_quals_exist_flag,
1167        qpq.search_ind,
1168        G_NO validated_flag,
1169        G_NO applied_flag,
1170        G_LINE_LEVEL attribute_level,
1171        G_QUALIFIER_TYPE attribute_type,
1172        qplatq.context          ,
1173        qplatq.attribute        ,
1174        qplatq.value_from       ,
1175        qpq.qualifier_grouping_no qualifier_grouping_no ,
1176        qpq.qualifier_precedence  ,
1177        qpq.qualifier_datatype,
1178        qpq.qualifier_attr_value    ,
1179        qpq.qualifier_attr_value_to ,
1180        qpq.start_date_active,
1181        qpq.end_date_active,
1182        G_NO pricing_attr_flag,
1183        qpq.comparison_operator_code ,
1184        qph.list_type_code,
1185        qph.ask_for_flag,
1186        qplatq.pricing_status_code,
1187        'OHQ1' ,
1188         NULL line_index,
1189         NULL pricing_effective_date,
1190         qph.start_date_active_first start_date_active_first,
1191         qph.end_date_active_first   end_date_active_first,
1192         NULL line_type_code,
1193         p_pricing_phase_id pricing_phase_id,
1194         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1195         qph.start_date_active start_date_active_h,
1196         qph.end_date_active end_date_active_h,
1197         qph.start_date_active_second start_date_active_second,
1198         qph.end_date_active_second end_date_active_second,
1199         qph.active_date_first_type,
1200         qph.active_date_second_type,
1201         qph.limit_exists_flag,
1202         qplatq.derived_qualifier_flag  -- Added for TCA
1203 from
1204         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id,qualifier_grouping_no
1205          from qp_preq_qual_tmp
1206          where pricing_status_code = G_STATUS_UNCHANGED
1207          and   pricing_phase_id = p_pricing_phase_id) qptq,
1208         qp_qualifiers qpq ,
1209         qp_npreq_line_attrs_tmp qplatq,
1210         qp_list_headers_b qph,
1211 	qp_price_req_sources_v qprs
1212 where
1213         qpq.list_header_id = qptq.list_header_id
1214 and     qpq.list_line_id = qptq.list_line_id
1215 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
1216 and     qpq.qualifier_grouping_no <> -1
1217 and     qpq.qualifier_context      = qplatq.context
1218 and     qpq.qualifier_attribute    = qplatq.attribute
1219 and     qpq.comparison_operator_code = G_OPERATOR_BETWEEN
1220 and     qpq.search_ind =  2
1221 and     qpq.qualifier_group_cnt > 1
1222 and     qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
1223 --and     decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
1224 -- G_DATE_Y,qplatq.value_from,null)
1225 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
1226 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1227          OR
1228          qph.currency_code IS NULL) -- optional currency
1229 -- bug 2799120
1230 --added for moac -- commented references to security profile
1231 --security will be built into qp_list_headers_b
1232 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1233 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1234 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1235 and     qph.active_flag = G_YES
1236 --Begin Bug# 7833575
1237 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1238                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1239 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1240                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1241 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1242                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1243 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1244                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1245 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1246 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1247 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1248 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1249 --End Bug# 7833575
1250 and    qph.list_type_code not in ('PRL','AGR')
1251 and      qpq.active_flag = G_YES
1252 and    qplatq.line_index > 0
1253 and      qplatq.distinct_qualifier_flag = G_YES
1254 and    qpq.list_header_id = qph.list_header_id
1255 and      qplatq.pricing_status_code = G_STATUS_UNCHANGED
1256 and      qplatq.attribute_type = G_QUALIFIER_TYPE
1257 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1258 and    qph.source_system_code = qprs.source_system_code
1259 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1260          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1261 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1262 --and    qptq.pricing_phase_id = p_pricing_phase_id
1263 union all
1264 select /*+ ORDERED USE_NL(qpq qplh qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6) index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_out
1265 er_qual_cur_mod */
1266        qpq.list_header_id,
1267        qpq.list_line_id list_line_id,
1268        qpq.qualifier_group_cnt,
1269        qpq.others_group_cnt,
1270        qpq.header_quals_exist_flag,
1271        qpq.search_ind,
1272        G_NO validated_flag,
1273        G_NO applied_flag,
1274        G_LINE_LEVEL attribute_level,
1275        G_QUALIFIER_TYPE attribute_type,
1276        qplatq.context          ,
1277        qplatq.attribute        ,
1278        qplatq.value_from       ,
1279        qpq.qualifier_grouping_no qualifier_grouping_no ,
1280        qpq.qualifier_precedence  ,
1281        qpq.qualifier_datatype,
1282        qpq.qualifier_attr_value    ,
1283        qpq.qualifier_attr_value_to ,
1284        qpq.start_date_active,
1285        qpq.end_date_active,
1286        G_NO pricing_attr_flag,
1287        qpq.comparison_operator_code ,
1288        qph.list_type_code,
1289        qph.ask_for_flag,
1290        qplatq.pricing_status_code,
1291        'OHQ1' ,
1292         NULL line_index,
1293         NULL pricing_effective_date,
1294         qph.start_date_active_first start_date_active_first,
1295         qph.end_date_active_first   end_date_active_first,
1296         NULL line_type_code,
1297         p_pricing_phase_id pricing_phase_id,
1298         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1299         qph.start_date_active start_date_active_h,
1300         qph.end_date_active end_date_active_h,
1301         qph.start_date_active_second start_date_active_second,
1302         qph.end_date_active_second end_date_active_second,
1303         qph.active_date_first_type,
1304         qph.active_date_second_type,
1305         qph.limit_exists_flag,
1306         qplatq.derived_qualifier_flag    -- Added for TCA
1307 from
1308         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id
1309          from qp_preq_qual_tmp
1310          where pricing_status_code = G_STATUS_UNCHANGED
1311          and   pricing_phase_id = p_pricing_phase_id) qptq,
1312         qp_qualifiers qpq ,
1313         qp_npreq_line_attrs_tmp qplatq,
1314         qp_list_headers_b qph,
1315 	qp_price_req_sources_v qprs
1316 where
1317         qpq.list_header_id = qptq.list_header_id
1318 and     qpq.list_line_id = qptq.list_line_id
1319 and     qpq.qualifier_grouping_no = -1
1320 and     qpq.qualifier_context      = qplatq.context
1321 and     qpq.qualifier_attribute    = qplatq.attribute
1322 and     qpq.comparison_operator_code = G_OPERATOR_BETWEEN
1323 and     qpq.search_ind =  2
1324 and     qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
1325 --and     decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
1326 -- G_DATE_Y,qplatq.value_from,null)
1327 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
1328 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1329          OR
1330          qph.currency_code IS NULL) -- optional currency
1331 -- bug 2799120
1332 --added for moac -- commented references to security profile
1333 --security will be built into qp_list_headers_b
1334 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1335 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1336 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1337 and     qph.active_flag = G_YES
1338 --Begin Bug# 7833575
1339 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1340                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1341 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1342                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1343 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1344                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1345 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1346                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1347 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1348 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1349 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1350 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1351 --End Bug# 7833575
1352 and    qph.list_type_code not in ('PRL','AGR')
1353 and      qpq.active_flag = G_YES
1354 and    qplatq.line_index > 0
1355 and      qplatq.distinct_qualifier_flag = G_YES
1356 and    qpq.list_header_id = qph.list_header_id
1357 and      qplatq.pricing_status_code = G_STATUS_UNCHANGED
1358 and      qplatq.attribute_type = G_QUALIFIER_TYPE
1359 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1360 and    qph.source_system_code = qprs.source_system_code
1361 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1362          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1363 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1364 --and    qptq.pricing_phase_id = p_pricing_phase_id
1365 union all
1366 select /*+ ORDERED USE_NL(qpq qplh qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N7)
1367        index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
1368        qpq.list_header_id,
1369        qpq.list_line_id list_line_id,
1370        qpq.qualifier_group_cnt,
1371        qpq.others_group_cnt,
1372        qpq.header_quals_exist_flag,
1373        qpq.search_ind,
1374        G_NO validated_flag,
1375        G_NO applied_flag,
1376        G_LINE_LEVEL attribute_level,
1377        G_QUALIFIER_TYPE attribute_type,
1378        qplatq.context          ,
1379        qplatq.attribute        ,
1380        qplatq.value_from       ,
1381        qpq.qualifier_grouping_no qualifier_grouping_no ,
1382        qpq.qualifier_precedence  ,
1383        qpq.qualifier_datatype,
1384        qpq.qualifier_attr_value    ,
1385        qpq.qualifier_attr_value_to ,
1386        qpq.start_date_active,
1387        qpq.end_date_active,
1388        G_NO pricing_attr_flag,
1389        qpq.comparison_operator_code ,
1390        qph.list_type_code,
1391        qph.ask_for_flag,
1392        qplatq.pricing_status_code,
1393        'OHQ1' ,
1394         NULL line_index,
1395         NULL pricing_effective_date,
1396         qph.start_date_active_first start_date_active_first,
1397         qph.end_date_active_first   end_date_active_first,
1398         NULL line_type_code,
1399         p_pricing_phase_id pricing_phase_id,
1400         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1401         qph.start_date_active start_date_active_h,
1402         qph.end_date_active end_date_active_h,
1403         qph.start_date_active_second start_date_active_second,
1404         qph.end_date_active_second end_date_active_second,
1405         qph.active_date_first_type,
1406         qph.active_date_second_type,
1407         qph.limit_exists_flag,
1408         qplatq.derived_qualifier_flag    -- Added for TCA
1409 from
1410         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id,qualifier_grouping_no
1411          from qp_preq_qual_tmp
1412          where pricing_status_code = G_STATUS_UNCHANGED
1413          and   pricing_phase_id = p_pricing_phase_id) qptq,
1414         qp_qualifiers qpq ,
1415         qp_npreq_line_attrs_tmp qplatq,
1416         qp_list_headers_b qph,
1417 	qp_price_req_sources_v qprs
1418 where
1419         qpq.list_header_id = qptq.list_header_id
1420 and     qpq.list_line_id = qptq.list_line_id
1421 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
1422 and     qpq.qualifier_grouping_no <> -1
1423 and     qpq.qualifier_context      = qplatq.context
1424 and     qpq.qualifier_attribute    = qplatq.attribute
1425 and     qpq.comparison_operator_code = 'NOT ='
1426 and     qpq.qualifier_attr_value <> qplatq.value_from
1427 and     qpq.search_ind =  2
1428 and     qpq.qualifier_group_cnt > 1
1429 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1430          OR
1431          qph.currency_code IS NULL) -- optional currency
1432 -- bug 2799120
1433 --added for moac -- commented references to security profile
1434 --security will be built into qp_list_headers_b
1435 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1436 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1437 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1438 --Begin Bug# 7833575
1439 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1440                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1441 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1442                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1443 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1444                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1445 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1446                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1447 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1448 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1449 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1450 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1451 --End Bug# 7833575
1452 and    qph.list_type_code not in ('PRL','AGR')
1453 and     qph.active_flag = G_YES
1454 and     qpq.active_flag = G_YES
1455 and     qpq.list_header_id = qph.list_header_id
1456 and    qplatq.line_index > 0
1457 and     qplatq.distinct_qualifier_flag = G_YES
1458 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1459 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1460 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1461 and    qph.source_system_code = qprs.source_system_code
1462 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1463          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1464 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1465 --and    qptq.pricing_phase_id = p_pricing_phase_id
1466 union all
1467 select /*+ ORDERED USE_NL(qpq qplh qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N7)
1468        index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
1469        qpq.list_header_id,
1470        qpq.list_line_id list_line_id,
1471        qpq.qualifier_group_cnt,
1472        qpq.others_group_cnt,
1473        qpq.header_quals_exist_flag,
1474        qpq.search_ind,
1475        G_NO validated_flag,
1476        G_NO applied_flag,
1477        G_LINE_LEVEL attribute_level,
1478        G_QUALIFIER_TYPE attribute_type,
1479        qplatq.context          ,
1480        qplatq.attribute        ,
1481        qplatq.value_from       ,
1482        qpq.qualifier_grouping_no qualifier_grouping_no ,
1483        qpq.qualifier_precedence  ,
1484        qpq.qualifier_datatype,
1485        qpq.qualifier_attr_value    ,
1486        qpq.qualifier_attr_value_to ,
1487        qpq.start_date_active,
1488        qpq.end_date_active,
1489        G_NO pricing_attr_flag,
1490        qpq.comparison_operator_code ,
1491        qph.list_type_code,
1492        qph.ask_for_flag,
1493        qplatq.pricing_status_code,
1494        'OHQ1' ,
1495         NULL line_index,
1496         NULL pricing_effective_date,
1497         qph.start_date_active_first start_date_active_first,
1498         qph.end_date_active_first   end_date_active_first,
1499         NULL line_type_code,
1500         p_pricing_phase_id pricing_phase_id,
1501         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1502         qph.start_date_active start_date_active_h,
1503         qph.end_date_active end_date_active_h,
1504         qph.start_date_active_second start_date_active_second,
1505         qph.end_date_active_second end_date_active_second,
1506         qph.active_date_first_type,
1507         qph.active_date_second_type,
1508         qph.limit_exists_flag,
1509         qplatq.derived_qualifier_flag   -- Added for TCA
1510 from
1511         (select /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id,list_line_id
1512          from qp_preq_qual_tmp
1513          where pricing_status_code = G_STATUS_UNCHANGED
1514          and   pricing_phase_id = p_pricing_phase_id) qptq,
1515         qp_qualifiers qpq ,
1516         qp_npreq_line_attrs_tmp qplatq,
1517         qp_list_headers_b qph,
1518 	qp_price_req_sources_v qprs
1519 where
1520         qpq.list_header_id = qptq.list_header_id
1521 and     qpq.list_line_id = qptq.list_line_id
1522 and     qpq.qualifier_grouping_no = -1
1523 and     qpq.qualifier_context      = qplatq.context
1524 and     qpq.qualifier_attribute    = qplatq.attribute
1525 and     qpq.comparison_operator_code = 'NOT ='
1526 and     qpq.qualifier_attr_value <> qplatq.value_from
1527 and     qpq.search_ind =  2
1528 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1529          OR
1530          qph.currency_code IS NULL) -- optional currency
1531 -- bug 2799120
1532 --added for moac -- commented references to security profile
1533 --security will be built into qp_list_headers_b
1534 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1535 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1536 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1537 --Begin Bug# 7833575
1538 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1539                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1540 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1541                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1542 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1543                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1544 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1545                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1546 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1547 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1548 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1549 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1550 --End Bug# 7833575
1551 and    qph.list_type_code not in ('PRL','AGR')
1552 and     qph.active_flag = G_YES
1553 and     qpq.active_flag = G_YES
1554 and     qpq.list_header_id = qph.list_header_id
1555 and    qplatq.line_index > 0
1556 and     qplatq.distinct_qualifier_flag = G_YES
1557 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1558 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1559 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1560 and    qph.source_system_code = qprs.source_system_code
1561 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1562          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'));  -- Added for TCA
1563 
1564 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1565 --and    qptq.pricing_phase_id = p_pricing_phase_id;
1566 
1567 nROWS CONSTANT NUMBER := 1000;
1568 
1569 l_status_code VARCHAR2(30);
1570 l_status_text VARCHAR2(240);
1571 E_ROUTINE_ERRORS EXCEPTION;
1572 
1573 BEGIN
1574 
1575  --Delete from QP_PREQ_QUAL_TMP;
1576 
1577  --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_EMPTY;
1578 
1579  OPEN l_mini_outer_qual_cur;
1580 
1581  LOOP
1582   G_LIST_HEADER_ID_TBL_Q.delete;
1583   G_LIST_LINE_ID_TBL_Q.delete;
1584   G_VALIDATED_FLAG_TBL_Q.delete;
1585   G_APPLIED_FLAG_TBL_Q.delete;
1586   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
1587   G_ATTRIBUTE_TYPE_TBL_Q.delete;
1588   G_CONTEXT_TBL_Q.delete;
1589   G_ATTRIBUTE_TBL_Q.delete;
1590   G_VALUE_FROM_TBL_Q.delete;
1591   G_GROUPING_NO_TBL_Q.delete;
1592   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
1593   G_DATATYPE_TBL_Q.delete;
1594   G_SETUP_VALUE_FROM_TBL_Q.delete;
1595   G_SETUP_VALUE_TO_TBL_Q.delete;
1596   G_PRICING_ATTR_FLAG_TBL_Q.delete;
1597   G_OPERATOR_TYPE_TBL_Q.delete;
1598   G_QUALIFIER_TYPE_TBL_Q.delete;
1599   G_LIST_TYPE_CODE_TBL_Q.delete;
1600   G_ASK_FOR_FLAG_TBL_Q.delete;
1601   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
1602   G_OTHERS_GROUP_CNT_TBL_Q.delete;
1603   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
1604   G_SEARCH_IND_TBL_Q.delete;
1605   G_PRICING_STATUS_CODE_TBL_Q.delete;
1606   G_START_DATE_ACTIVE_TBL_Q.delete;
1607   G_END_DATE_ACTIVE_TBL_Q.delete;
1608   G_LINE_INDEX_TBL_Q.delete;
1609   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
1610   G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
1611   G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
1612   G_LINE_TYPE_CODE_TBL_Q.delete;
1613   G_PRICING_PHASE_ID_TBL_Q.delete;
1614   G_UNIQUE_KEY_TBL_Q.delete;
1615   G_START_DATE_ACTIVE_TBL_H_Q.delete;
1616   G_END_DATE_ACTIVE_TBL_H_Q.delete;
1617   G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
1618   G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
1619   G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
1620   G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
1621   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
1622   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;   -- Added for TCA
1623 
1624   FETCH l_mini_outer_qual_cur
1625   BULK COLLECT INTO
1626      G_LIST_HEADER_ID_TBL_Q
1627    , G_LIST_LINE_ID_TBL_Q
1628    , G_QUALIFIER_GROUP_CNT_TBL_Q
1629    , G_OTHERS_GROUP_CNT_TBL_Q
1630    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
1631    , G_SEARCH_IND_TBL_Q
1632    , G_VALIDATED_FLAG_TBL_Q
1633    , G_APPLIED_FLAG_TBL_Q
1634    , G_ATTRIBUTE_LEVEL_TBL_Q
1635    , G_ATTRIBUTE_TYPE_TBL_Q
1636    , G_CONTEXT_TBL_Q
1637    , G_ATTRIBUTE_TBL_Q
1638    , G_VALUE_FROM_TBL_Q
1639    , G_GROUPING_NO_TBL_Q
1640    , G_QUALIFIER_PRECEDENCE_TBL_Q
1641    , G_DATATYPE_TBL_Q
1642    , G_SETUP_VALUE_FROM_TBL_Q
1643    , G_SETUP_VALUE_TO_TBL_Q
1644    , G_START_DATE_ACTIVE_TBL_Q
1645    , G_END_DATE_ACTIVE_TBL_Q
1646    , G_PRICING_ATTR_FLAG_TBL_Q
1647    , G_OPERATOR_TYPE_TBL_Q
1648    , G_LIST_TYPE_CODE_TBL_Q
1649    , G_ASK_FOR_FLAG_TBL_Q
1650    , G_PRICING_STATUS_CODE_TBL_Q
1651    , G_QUALIFIER_TYPE_TBL_Q
1652    , G_LINE_INDEX_TBL_Q
1653    , G_PRICING_EFFECTIVE_DATE_TBL_Q
1654    , G_START_DATE_ACTIVE_FIR_TBL_Q
1655    , G_END_DATE_ACTIVE_FIR_TBL_Q
1656    , G_LINE_TYPE_CODE_TBL_Q
1657    , G_PRICING_PHASE_ID_TBL_Q
1658    , G_UNIQUE_KEY_TBL_Q
1659    , G_START_DATE_ACTIVE_TBL_H_Q
1660    , G_END_DATE_ACTIVE_TBL_H_Q
1661    , G_START_DATE_ACTIVE_SEC_TBL_Q
1662    , G_END_DATE_ACTIVE_SEC_TBL_Q
1663    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
1664    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
1665    , G_HEADER_LIMIT_EXISTS_TBL_Q
1666    , G_DERIVED_QUALIFIER_FLAG_TBL_Q LIMIT nROWS;   -- Added for TCA
1667    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
1668 
1669  IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
1670      --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_UPDATED;
1671       INSERT_QUAL(
1672        G_LIST_HEADER_ID_TBL_Q
1673      , G_LIST_LINE_ID_TBL_Q
1674      , G_VALIDATED_FLAG_TBL_Q
1675      , G_APPLIED_FLAG_TBL_Q
1676      , G_ATTRIBUTE_LEVEL_TBL_Q
1677      , G_ATTRIBUTE_TYPE_TBL_Q
1678      , G_CONTEXT_TBL_Q
1679      , G_ATTRIBUTE_TBL_Q
1680      , G_VALUE_FROM_TBL_Q
1681      , G_GROUPING_NO_TBL_Q
1682      , G_QUALIFIER_PRECEDENCE_TBL_Q
1683      , G_DATATYPE_TBL_Q
1684      , G_SETUP_VALUE_FROM_TBL_Q
1685      , G_SETUP_VALUE_TO_TBL_Q
1686      , G_PRICING_ATTR_FLAG_TBL_Q
1687      , G_OPERATOR_TYPE_TBL_Q
1688      , G_LIST_TYPE_CODE_TBL_Q
1689      , G_ASK_FOR_FLAG_TBL_Q
1690      , G_QUALIFIER_TYPE_TBL_Q
1691      , G_QUALIFIER_GROUP_CNT_TBL_Q
1692      , G_OTHERS_GROUP_CNT_TBL_Q
1693      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
1694      , G_SEARCH_IND_TBL_Q
1695      , G_PRICING_STATUS_CODE_TBL_Q
1696      , G_START_DATE_ACTIVE_TBL_Q
1697      , G_END_DATE_ACTIVE_TBL_Q
1698      , G_LINE_INDEX_TBL_Q
1699      , G_PRICING_EFFECTIVE_DATE_TBL_Q
1700      , G_START_DATE_ACTIVE_FIR_TBL_Q
1701      , G_END_DATE_ACTIVE_FIR_TBL_Q
1702      , G_LINE_TYPE_CODE_TBL_Q
1703      , G_PRICING_PHASE_ID_TBL_Q
1704      , G_UNIQUE_KEY_TBL_Q
1705      , G_START_DATE_ACTIVE_TBL_H_Q
1706      , G_END_DATE_ACTIVE_TBL_H_Q
1707      , G_START_DATE_ACTIVE_SEC_TBL_Q
1708      , G_END_DATE_ACTIVE_SEC_TBL_Q
1709      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
1710      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
1711      , G_HEADER_LIMIT_EXISTS_TBL_Q
1712      , G_DERIVED_QUALIFIER_FLAG_TBL_Q     -- Added for TCA
1713      , l_status_code
1714      , l_status_text);
1715 
1716      IF l_status_code = FND_API.G_RET_STS_ERROR THEN
1717         RAISE E_ROUTINE_ERRORS;
1718      END IF;
1719 
1720  END IF;
1721 
1722 END LOOP;
1723 CLOSE l_mini_outer_qual_cur;
1724 
1725 EXCEPTION
1726   WHEN OTHERS THEN
1727   x_status_code := FND_API.G_RET_STS_ERROR;
1728   x_status_text :=l_routine||' '||SQLERRM;
1729   IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
1730    engine_debug(l_routine||' '||SQLERRM);
1731   END IF;
1732 
1733 END Mini_Cache_Qualifiers;
1734 
1735 /*+--------------------------------------------------------------------
1736   |Cache_Line_Qualifiers
1737   |To get the pure line level quals  and
1738   |To get the line level quals for satisfied headers
1739   |
1740   +--------------------------------------------------------------------
1741 */
1742 PROCEDURE Cache_Line_Qualifiers(p_pricing_phase_id IN NUMBER,
1743 					  x_status_code OUT NOCOPY VARCHAR2,
1744 					  x_status_text OUT NOCOPY VARCHAR2) As
1745 /*
1746 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,DISTINCT_QUALIFIER_FLAG,1
1747 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,ATTRIBUTE_TYPE,2
1748 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,PRICING_STATUS_CODE,3
1749 
1750 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_CONTEXT,1
1751 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTRIBUTE,2
1752 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTR_VALUE,3
1753 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,COMPARISON_OPERATOR_CODE,4
1754 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,ACTIVE_FLAG,5
1755 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,SEARCH_IND,6
1756 
1757 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,PRICING_PHASE_ID,1
1758 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,LIST_HEADER_ID,2
1759 
1760 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
1761 */
1762 -- Changed the cursor l_outer_qual_cur for bug#3002632
1763 -- [julin/4396043/4471795] perform header filter before prod check, go to qp_pricing_attributes
1764 -- before qp_npreq_line_attrs_tmp during prod check.
1765 CURSOR l_OUTER_QUAL_CUR IS
1766 -- Qualifier Only
1767 select /*+ ORDERED USE_NL(qpq qplh qph)  index(qpq qp_qualifiers_n4) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) l_outer_qual_cur_mod */
1768        qpq.list_header_id,
1769        qpq.list_line_id list_line_id,
1770        qpq.qualifier_group_cnt,
1771        qpq.others_group_cnt,
1772        qpq.header_quals_exist_flag,
1773        qpq.search_ind,
1774        G_NO validated_flag,
1775        G_NO applied_flag,
1776        G_LINE_LEVEL attribute_level,
1777        G_QUALIFIER_TYPE attribute_type,
1778        qplatq.context          ,
1779        qplatq.attribute        ,
1780        qplatq.value_from       ,
1781        qpq.qualifier_grouping_no qualifier_grouping_no ,
1782        qpq.qualifier_precedence  ,
1783        qpq.qualifier_datatype,
1784        qpq.qualifier_attr_value    ,
1785        qpq.qualifier_attr_value_to ,
1786        qpq.start_date_active,
1787        qpq.end_date_active,
1788        G_NO pricing_attr_flag,
1789        qpq.comparison_operator_code ,
1790        qph.list_type_code,
1791        qph.ask_for_flag,
1792        qplatq.pricing_status_code,
1793        'OHQ' ,
1794         NULL line_index,
1795         NULL pricing_effective_date,
1796         qph.start_date_active_first start_date_active_first,
1797         qph.end_date_active_first   end_date_active_first,
1798         NULL line_type_code,
1799 	p_pricing_phase_id pricing_phase_id,
1800         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1801         qph.start_date_active start_date_active_h,
1802         qph.end_date_active end_date_active_h,
1803         qph.start_date_active_second start_date_active_second,
1804         qph.end_date_active_second end_date_active_second,
1805         qph.active_date_first_type,
1806         qph.active_date_second_type,
1807         qph.limit_exists_flag,
1808         qplatq.derived_qualifier_flag    -- Added for TCA
1809 from
1810 	   qp_npreq_line_attrs_tmp qplatq,
1811 	   qp_qualifiers qpq ,
1812 	   qp_list_header_phases qplh,
1813 	   qp_list_headers_b qph,
1814            qp_price_req_sources_v qprs
1815 where
1816       qpq.list_header_id = qplh.list_header_id
1817 and   qplh.list_header_id = qph.list_header_id
1818 -- bug 2799120
1819 --added for moac -- commented references to security profile
1820 --security will be built into qp_list_headers_b
1821 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1822 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1823 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1824 and   qplh.pricing_phase_id = p_pricing_phase_id
1825 AND qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
1826 and 	 qpq.qualifier_context      = qplatq.context
1827 and 	 qpq.qualifier_attribute    = qplatq.attribute
1828 and   qpq.qualifier_attr_value = qplatq.value_from
1829 and   qpq.comparison_operator_code = '='
1830 and   qpq.search_ind = 1
1831 and   qpq.list_line_id <> -1
1832 and   ( qpq.list_header_id in (SELECT /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id -- for qualified headers from Cache_Header_Qualifiers
1833                              FROM qp_preq_qual_tmp
1834                              WHERE pricing_phase_id = p_pricing_phase_id
1835                              AND   pricing_status_code = G_STATUS_UNCHANGED)
1836          or
1837         qpq.header_quals_exist_flag = G_NO) -- Pure line level qualifiers
1838 and   (not exists (select /*+ INDEX (qp_pa,QP_PRICING_ATTRIBUTES_N2) */'x'    --added hint 8579312    --3520634 start
1839                      from qp_pricing_attributes qp_pa           -- if no product defined,select the header
1840                     where qp_pa.list_line_id = qpq.list_line_id
1841                       and rownum = 1)
1842        OR  -- If product defined on line level,select headers for which product matches.
1843        exists (select  /*+ ORDERED USE_NL(qpprod) INDEX (c,QP_PRICING_ATTRIBUTES_N2) */ 'x' --added hint 8579312
1844                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
1845                    WHERE c.list_header_id = qpq.list_header_id
1846                    AND   c.list_line_id = qpq.list_line_id
1847                    AND   c.pricing_phase_id = p_pricing_phase_id
1848                    AND   qpprod.context = c.product_attribute_context
1849                    AND   qpprod.attribute = c.product_attribute
1850                    AND   qpprod.value_from = c.product_attr_value
1851                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
1852                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
1853                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
1854                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
1855                    AND   c.excluder_flag = G_NO
1856       --3683298             AND   qpprod.line_index = qplatq.line_index
1857                    AND   rownum = 1)
1858       )                                                         --3520634 end
1859 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1860        OR
1861        qph.currency_code IS NULL) -- optional currency
1862 --Begin Bug# 7833575
1863 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1864                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1865 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1866                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1867 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1868                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1869 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1870                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1871 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1872 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1873 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1874 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1875 --End Bug# 7833575
1876 and   qph.list_type_code not in ('PRL','AGR')
1877 and   qpq.list_type_code not in ('PRL','AGR')
1878 and   qph.active_flag = G_YES
1879 and   qpq.active_flag = G_YES
1880 and   qplatq.distinct_qualifier_flag = G_YES
1881 and   qpq.list_header_id = qph.list_header_id
1882 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
1883 and   qplatq.attribute_type = G_QUALIFIER_TYPE
1884 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
1885 and   qph.source_system_code = qprs.source_system_code
1886 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1887          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1888 union all
1889 select /*+ ORDERED USE_NL(qpq qplh qph) index(qpq qp_qualifiers_n6) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) l_outer_qual_cur_mod */
1890        qpq.list_header_id,
1891        qpq.list_line_id list_line_id,
1892        qpq.qualifier_group_cnt,
1893        qpq.others_group_cnt,
1894        qpq.header_quals_exist_flag,
1895        qpq.search_ind,
1896        G_NO validated_flag,
1897        G_NO applied_flag,
1898        G_LINE_LEVEL attribute_level,
1899        G_QUALIFIER_TYPE attribute_type,
1900        qplatq.context          ,
1901        qplatq.attribute        ,
1902        qplatq.value_from       ,
1903        qpq.qualifier_grouping_no qualifier_grouping_no ,
1904        qpq.qualifier_precedence  ,
1905        qpq.qualifier_datatype,
1906        qpq.qualifier_attr_value    ,
1907        qpq.qualifier_attr_value_to ,
1908        qpq.start_date_active,
1909        qpq.end_date_active,
1910        G_NO pricing_attr_flag,
1911        qpq.comparison_operator_code ,
1912        qph.list_type_code,
1913        qph.ask_for_flag,
1914        qplatq.pricing_status_code,
1915        'OHQ' ,
1916         NULL line_index,
1917         NULL pricing_effective_date,
1918         qph.start_date_active_first start_date_active_first,
1919         qph.end_date_active_first   end_date_active_first,
1920         NULL line_type_code,
1921         p_pricing_phase_id pricing_phase_id,
1922         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1923         qph.start_date_active start_date_active_h,
1924         qph.end_date_active end_date_active_h,
1925         qph.start_date_active_second start_date_active_second,
1926         qph.end_date_active_second end_date_active_second,
1927         qph.active_date_first_type,
1928         qph.active_date_second_type,
1929         qph.limit_exists_flag,
1930         qplatq.derived_qualifier_flag    -- Added for TCA
1931 from
1932 	   qp_npreq_line_attrs_tmp qplatq,
1933 	   qp_qualifiers qpq ,
1934 	   qp_list_header_phases qplh,
1935 	   qp_list_headers_b qph,
1936 	   qp_price_req_sources_v qprs
1937 where
1938       qpq.list_header_id = qplh.list_header_id
1939 and   qplh.list_header_id = qph.list_header_id
1940 -- bug 2799120
1941 --added for moac -- commented references to security profile
1942 --security will be built into qp_list_headers_b
1943 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1944 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1945 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1946 and   qplh.pricing_phase_id = p_pricing_phase_id
1947 AND qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
1948 and 	 qpq.qualifier_context      = qplatq.context
1949 and 	 qpq.qualifier_attribute    = qplatq.attribute
1950 and   qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
1951 and   qpq.qualifier_datatype =  G_NUMERIC
1952 and   qpq.search_ind = 1
1953 and   qpq.list_line_id <> -1
1954 and   ( qpq.list_header_id in (SELECT /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id
1955                              FROM qp_preq_qual_tmp
1956                              WHERE pricing_phase_id = p_pricing_phase_id
1957                              AND   pricing_status_code = G_STATUS_UNCHANGED)
1958          or
1959         qpq.header_quals_exist_flag = G_NO)
1960 and   (not exists (select /*+ INDEX (qp_pa,QP_PRICING_ATTRIBUTES_N2) */'x'      --added hint 8579312 --3520634 start
1961                      from qp_pricing_attributes qp_pa  -- if no product defined,select the header
1962                     where qp_pa.list_line_id = qpq.list_line_id
1963                       and rownum = 1)
1964        OR -- If product defined on line level,select headers for which product matches.
1965        exists (select  /*+ ORDERED USE_NL(qpprod) INDEX (c,QP_PRICING_ATTRIBUTES_N2) */ 'x' --added hint 8579312
1966                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
1967                    WHERE c.list_header_id = qpq.list_header_id
1968                    AND   c.list_line_id = qpq.list_line_id
1969                    AND   c.pricing_phase_id = p_pricing_phase_id
1970                    AND   qpprod.context = c.product_attribute_context
1971                    AND   qpprod.attribute = c.product_attribute
1972                    AND   qpprod.value_from = c.product_attr_value
1973                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
1974                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
1975                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
1976                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
1977                    AND   c.excluder_flag = G_NO
1978 --3683298                   AND   qpprod.line_index = qplatq.line_index
1979                    AND   rownum = 1)
1980       )                          --3520634 end
1981 and   qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
1982 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
1983 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1984        OR
1985        qph.currency_code IS NULL) -- optional currency
1986 --Begin Bug# 7833575
1987 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1988                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1989 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1990                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1991 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1992                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1993 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1994                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
1995 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1996 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1997 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
1998 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
1999 --End Bug# 7833575
2000 and   qph.list_type_code not in ('PRL','AGR')
2001 and   qpq.list_type_code not in ('PRL','AGR')
2002 and   qph.active_flag = G_YES
2003 and   qpq.active_flag = G_YES
2004 and   qplatq.distinct_qualifier_flag = G_YES
2005 and   qpq.list_header_id = qph.list_header_id
2006 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2007 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2008 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2009 and   qph.source_system_code = qprs.source_system_code
2010 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2011          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2012 union all
2013 select /*+ ORDERED USE_NL(qpq qplh qph) index(qpq qp_qualifiers_n5) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) l_outer_qual_cur_mod */
2014        qpq.list_header_id,
2015        qpq.list_line_id list_line_id,
2016        qpq.qualifier_group_cnt,
2017        qpq.others_group_cnt,
2018        qpq.header_quals_exist_flag,
2019        qpq.search_ind,
2020        G_NO validated_flag,
2021        G_NO applied_flag,
2022        G_LINE_LEVEL attribute_level,
2023        G_QUALIFIER_TYPE attribute_type,
2024        qplatq.context          ,
2025        qplatq.attribute        ,
2026        qplatq.value_from       ,
2027        qpq.qualifier_grouping_no qualifier_grouping_no ,
2028        qpq.qualifier_precedence  ,
2029        qpq.qualifier_datatype,
2030        qpq.qualifier_attr_value    ,
2031        qpq.qualifier_attr_value_to ,
2032        qpq.start_date_active,
2033        qpq.end_date_active,
2034        G_NO pricing_attr_flag,
2035        qpq.comparison_operator_code ,
2036        qph.list_type_code,
2037        qph.ask_for_flag,
2038        qplatq.pricing_status_code,
2039        'OHQ' ,
2040         NULL line_index,
2041         NULL pricing_effective_date,
2042         qph.start_date_active_first start_date_active_first,
2043         qph.end_date_active_first   end_date_active_first,
2044         NULL line_type_code,
2045         p_pricing_phase_id pricing_phase_id,
2046         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2047         qph.start_date_active start_date_active_h,
2048         qph.end_date_active end_date_active_h,
2049         qph.start_date_active_second start_date_active_second,
2050         qph.end_date_active_second end_date_active_second,
2051         qph.active_date_first_type,
2052         qph.active_date_second_type,
2053         qph.limit_exists_flag,
2054         qplatq.derived_qualifier_flag   -- Added for TCA
2055 from
2056 	   qp_npreq_line_attrs_tmp qplatq,
2057 	   qp_qualifiers qpq ,
2058 	   qp_list_header_phases qplh,
2059 	   qp_list_headers_b qph,
2060 	   qp_price_req_sources_v qprs
2061 where
2062       qpq.list_header_id = qplh.list_header_id
2063 and   qplh.list_header_id = qph.list_header_id
2064 -- bug 2799120
2065 --added for moac -- commented references to security profile
2066 --security will be built into qp_list_headers_b
2067 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2068 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2069 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2070 and   qplh.pricing_phase_id = p_pricing_phase_id
2071 AND qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
2072 and 	 qpq.qualifier_context      = qplatq.context
2073 and 	 qpq.qualifier_attribute    = qplatq.attribute
2074 and   qpq.comparison_operator_code = G_OPERATOR_BETWEEN
2075 and   qpq.search_ind = 1
2076 and   qpq.list_line_id <> -1
2077 and   ( qpq.list_header_id in (SELECT /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id
2078                              FROM qp_preq_qual_tmp
2079                              WHERE pricing_phase_id = p_pricing_phase_id
2080                              AND   pricing_status_code = G_STATUS_UNCHANGED)
2081          or
2082         qpq.header_quals_exist_flag = G_NO)
2083 and   (not exists (select /*+ INDEX (qp_pa,QP_PRICING_ATTRIBUTES_N2) */ 'x'    --added hint 8579312 --3520634 start
2084                      from qp_pricing_attributes qp_pa    -- if no product defined,select the header
2085                     where qp_pa.list_line_id = qpq.list_line_id
2086                       and rownum = 1)
2087        OR  -- If product defined on line level,select headers for which product matches.
2088        exists (select  /*+ ORDERED USE_NL(qpprod) INDEX (c,QP_PRICING_ATTRIBUTES_N2) */ 'x' --added hint 8579312
2089                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
2090                    WHERE c.list_header_id = qpq.list_header_id
2091                    AND   c.list_line_id = qpq.list_line_id
2092                    AND   c.pricing_phase_id = p_pricing_phase_id
2093                    AND   qpprod.context = c.product_attribute_context
2094                    AND   qpprod.attribute = c.product_attribute
2095                    AND   qpprod.value_from = c.product_attr_value
2096                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
2097                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
2098                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
2099                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
2100                    AND   c.excluder_flag = G_NO
2101 --3683298                   AND   qpprod.line_index = qplatq.line_index
2102                    AND   rownum = 1)
2103       )                            --3520634 end
2104 and   qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
2105 --and   decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
2106 -- G_DATE_Y,qplatq.value_from,null)
2107 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
2108 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2109        OR
2110        qph.currency_code IS NULL) -- optional currency
2111 --Begin Bug# 7833575
2112 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2113                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2114 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2115                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2116 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2117                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2118 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2119                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
2120 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2121 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2122 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2123 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2124 --End Bug# 7833575
2125 and   qph.list_type_code not in ('PRL','AGR')
2126 and   qpq.list_type_code not in ('PRL','AGR')
2127 and   qph.active_flag = G_YES
2128 and   qpq.active_flag = G_YES
2129 and   qplatq.distinct_qualifier_flag = G_YES
2130 and   qpq.list_header_id = qph.list_header_id
2131 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2132 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2133 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2134 and   qph.source_system_code = qprs.source_system_code
2135 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2136          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2137 union all
2138 select /*+ ORDERED USE_NL(qpq qplh qph)  index(qpq qp_qualifiers_n5) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) l_outer_qual_cur_mod */
2139        qpq.list_header_id,
2140        qpq.list_line_id list_line_id,
2141        qpq.qualifier_group_cnt,
2142        qpq.others_group_cnt,
2143        qpq.header_quals_exist_flag,
2144        qpq.search_ind,
2145        G_NO validated_flag,
2146        G_NO applied_flag,
2147        G_LINE_LEVEL attribute_level,
2148        G_QUALIFIER_TYPE attribute_type,
2149        qplatq.context          ,
2150        qplatq.attribute        ,
2151        qplatq.value_from       ,
2152        qpq.qualifier_grouping_no qualifier_grouping_no ,
2153        qpq.qualifier_precedence  ,
2154        qpq.qualifier_datatype,
2155        qpq.qualifier_attr_value    ,
2156        qpq.qualifier_attr_value_to ,
2157        qpq.start_date_active,
2158        qpq.end_date_active,
2159        G_NO pricing_attr_flag,
2160        qpq.comparison_operator_code ,
2161        qph.list_type_code,
2162        qph.ask_for_flag,
2163        qplatq.pricing_status_code,
2164        'OHQ' ,
2165         NULL line_index,
2166         NULL pricing_effective_date,
2167         qph.start_date_active_first start_date_active_first,
2168         qph.end_date_active_first   end_date_active_first,
2169         NULL line_type_code,
2170         p_pricing_phase_id pricing_phase_id,
2171         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2172         qph.start_date_active start_date_active_h,
2173         qph.end_date_active end_date_active_h,
2174         qph.start_date_active_second start_date_active_second,
2175         qph.end_date_active_second end_date_active_second,
2176         qph.active_date_first_type,
2177         qph.active_date_second_type,
2178         qph.limit_exists_flag,
2179         qplatq.derived_qualifier_flag     -- Added for TCA
2180 from
2181 	   qp_npreq_line_attrs_tmp qplatq,
2182 	   qp_qualifiers qpq ,
2183 	   qp_list_header_phases qplh,
2184 	   qp_list_headers_b qph,
2185 	   qp_price_req_sources_v qprs
2186 where
2187       qpq.list_header_id = qplh.list_header_id
2188 and   qplh.list_header_id = qph.list_header_id
2189 -- bug 2799120
2190 --added for moac -- commented references to security profile
2191 --security will be built into qp_list_headers_b
2192 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2193 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2194 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2195 and   qplh.pricing_phase_id = p_pricing_phase_id
2196 AND qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
2197 and 	 qpq.qualifier_context      = qplatq.context
2198 and 	 qpq.qualifier_attribute    = qplatq.attribute
2199 and   qpq.comparison_operator_code = 'NOT ='
2200 and   qpq.qualifier_attr_value <> qplatq.value_from
2201 and   qpq.search_ind = 1
2202 and   qpq.list_line_id <> -1
2203 and   ( qpq.list_header_id in (SELECT /*+ index(qp_preq_qual_tmp QP_PREQ_QUAL_TMP_N7) */ distinct list_header_id
2204                              FROM qp_preq_qual_tmp
2205                              WHERE pricing_phase_id = p_pricing_phase_id
2206                              AND   pricing_status_code = G_STATUS_UNCHANGED)
2207          or
2208         qpq.header_quals_exist_flag = G_NO)
2209 and   (not exists (select /*+ INDEX (qp_pa,QP_PRICING_ATTRIBUTES_N2) */ 'x'    --added hint 8579312 --3520634 start
2210                      from qp_pricing_attributes qp_pa            -- if no product defined,select the header
2211                     where qp_pa.list_line_id = qpq.list_line_id
2212                       and rownum = 1)
2213        OR  -- If product defined on line level,select headers for which product matches.
2214        exists (select  /*+ ORDERED USE_NL(qpprod) INDEX (c,QP_PRICING_ATTRIBUTES_N2) */ 'x' --added hint 8579312
2215                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
2216                    WHERE c.list_header_id = qpq.list_header_id
2217                    AND   c.list_line_id = qpq.list_line_id
2218                    AND   c.pricing_phase_id = p_pricing_phase_id
2219                    AND   qpprod.context = c.product_attribute_context
2220                    AND   qpprod.attribute = c.product_attribute
2221                    AND   qpprod.value_from = c.product_attr_value
2222                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
2223                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
2224                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
2225                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
2226                    AND   c.excluder_flag = G_NO
2227 --3683298                   AND   qpprod.line_index = qplatq.line_index
2228                    AND   rownum = 1)
2229       )                        --3520634 end
2230 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2231        OR
2232        qph.currency_code IS NULL) -- optional currency
2233 --Begin Bug# 7833575
2234 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2235                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2236 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2237                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2238 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2239                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2240 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2241                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
2242 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2243 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2244 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2245 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2246 --End Bug# 7833575
2247 and   qph.list_type_code not in ('PRL','AGR')
2248 and   qpq.list_type_code not in ('PRL','AGR')
2249 and   qph.active_flag = G_YES
2250 and   qpq.active_flag = G_YES
2251 and   qplatq.distinct_qualifier_flag = G_YES
2252 and   qpq.list_header_id = qph.list_header_id
2253 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2254 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2255 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2256 and   qph.source_system_code = qprs.source_system_code
2257 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2258          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'));  -- Added for TCA
2259 
2260 
2261 nROWS CONSTANT NUMBER := 1000;
2262 
2263 l_status_code VARCHAR2(30);
2264 l_status_text VARCHAR2(240);
2265 
2266 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Cache_Line_Qualifiers';
2267 
2268 BEGIN
2269 
2270  --Delete from QP_PREQ_QUAL_TMP;
2271 
2272  G_LINE_QUALIFIER_TEMP := 'E';
2273 
2274  OPEN l_outer_qual_cur;
2275 
2276  LOOP
2277   G_LIST_HEADER_ID_TBL_Q.delete;
2278   G_LIST_LINE_ID_TBL_Q.delete;
2279   G_VALIDATED_FLAG_TBL_Q.delete;
2280   G_APPLIED_FLAG_TBL_Q.delete;
2281   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
2282   G_ATTRIBUTE_TYPE_TBL_Q.delete;
2283   G_CONTEXT_TBL_Q.delete;
2284   G_ATTRIBUTE_TBL_Q.delete;
2285   G_VALUE_FROM_TBL_Q.delete;
2286   G_GROUPING_NO_TBL_Q.delete;
2287   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
2288   G_DATATYPE_TBL_Q.delete;
2289   G_SETUP_VALUE_FROM_TBL_Q.delete;
2290   G_SETUP_VALUE_TO_TBL_Q.delete;
2291   G_PRICING_ATTR_FLAG_TBL_Q.delete;
2292   G_OPERATOR_TYPE_TBL_Q.delete;
2293   G_QUALIFIER_TYPE_TBL_Q.delete;
2294   G_LIST_TYPE_CODE_TBL_Q.delete;
2295   G_ASK_FOR_FLAG_TBL_Q.delete;
2296   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
2297   G_OTHERS_GROUP_CNT_TBL_Q.delete;
2298   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
2299   G_SEARCH_IND_TBL_Q.delete;
2300   G_PRICING_STATUS_CODE_TBL_Q.delete;
2301   G_START_DATE_ACTIVE_TBL_Q.delete;
2302   G_END_DATE_ACTIVE_TBL_Q.delete;
2303   G_LINE_INDEX_TBL_Q.delete;
2304   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
2305   G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
2306   G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
2307   G_LINE_TYPE_CODE_TBL_Q.delete;
2308   G_PRICING_PHASE_ID_TBL_Q.delete;
2309   G_UNIQUE_KEY_TBL_Q.delete;
2310   G_START_DATE_ACTIVE_TBL_H_Q.delete;
2311   G_END_DATE_ACTIVE_TBL_H_Q.delete;
2312   G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
2313   G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
2314   G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
2315   G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
2316   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
2317   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;    -- Added for TCA
2318 
2319   FETCH l_outer_qual_cur
2320   BULK COLLECT INTO
2321      G_LIST_HEADER_ID_TBL_Q
2322    , G_LIST_LINE_ID_TBL_Q
2323    , G_QUALIFIER_GROUP_CNT_TBL_Q
2324    , G_OTHERS_GROUP_CNT_TBL_Q
2325    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2326    , G_SEARCH_IND_TBL_Q
2327    , G_VALIDATED_FLAG_TBL_Q
2328    , G_APPLIED_FLAG_TBL_Q
2329    , G_ATTRIBUTE_LEVEL_TBL_Q
2330    , G_ATTRIBUTE_TYPE_TBL_Q
2331    , G_CONTEXT_TBL_Q
2332    , G_ATTRIBUTE_TBL_Q
2333    , G_VALUE_FROM_TBL_Q
2334    , G_GROUPING_NO_TBL_Q
2335    , G_QUALIFIER_PRECEDENCE_TBL_Q
2336    , G_DATATYPE_TBL_Q
2337    , G_SETUP_VALUE_FROM_TBL_Q
2338    , G_SETUP_VALUE_TO_TBL_Q
2339    , G_START_DATE_ACTIVE_TBL_Q
2340    , G_END_DATE_ACTIVE_TBL_Q
2341    , G_PRICING_ATTR_FLAG_TBL_Q
2342    , G_OPERATOR_TYPE_TBL_Q
2343    , G_LIST_TYPE_CODE_TBL_Q
2344    , G_ASK_FOR_FLAG_TBL_Q
2345    , G_PRICING_STATUS_CODE_TBL_Q
2346    , G_QUALIFIER_TYPE_TBL_Q
2347    , G_LINE_INDEX_TBL_Q
2348    , G_PRICING_EFFECTIVE_DATE_TBL_Q
2349    , G_START_DATE_ACTIVE_FIR_TBL_Q
2350    , G_END_DATE_ACTIVE_FIR_TBL_Q
2351    , G_LINE_TYPE_CODE_TBL_Q
2352    , G_PRICING_PHASE_ID_TBL_Q
2353    , G_UNIQUE_KEY_TBL_Q
2354    , G_START_DATE_ACTIVE_TBL_H_Q
2355    , G_END_DATE_ACTIVE_TBL_H_Q
2356    , G_START_DATE_ACTIVE_SEC_TBL_Q
2357    , G_END_DATE_ACTIVE_SEC_TBL_Q
2358    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
2359    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
2360    , G_HEADER_LIMIT_EXISTS_TBL_Q
2361    , G_DERIVED_QUALIFIER_FLAG_TBL_Q LIMIT nROWS;     -- Added for TCA
2362    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
2363 
2364  IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
2365 
2366      G_LINE_QUALIFIER_TEMP := 'U';
2367 
2368       INSERT_QUAL(
2369        G_LIST_HEADER_ID_TBL_Q
2370      , G_LIST_LINE_ID_TBL_Q
2371      , G_VALIDATED_FLAG_TBL_Q
2372      , G_APPLIED_FLAG_TBL_Q
2373      , G_ATTRIBUTE_LEVEL_TBL_Q
2374      , G_ATTRIBUTE_TYPE_TBL_Q
2375      , G_CONTEXT_TBL_Q
2376      , G_ATTRIBUTE_TBL_Q
2377      , G_VALUE_FROM_TBL_Q
2378      , G_GROUPING_NO_TBL_Q
2379      , G_QUALIFIER_PRECEDENCE_TBL_Q
2380      , G_DATATYPE_TBL_Q
2381      , G_SETUP_VALUE_FROM_TBL_Q
2382      , G_SETUP_VALUE_TO_TBL_Q
2383      , G_PRICING_ATTR_FLAG_TBL_Q
2384      , G_OPERATOR_TYPE_TBL_Q
2385      , G_LIST_TYPE_CODE_TBL_Q
2386      , G_ASK_FOR_FLAG_TBL_Q
2387      , G_QUALIFIER_TYPE_TBL_Q
2388      , G_QUALIFIER_GROUP_CNT_TBL_Q
2389      , G_OTHERS_GROUP_CNT_TBL_Q
2390      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2391      , G_SEARCH_IND_TBL_Q
2392      , G_PRICING_STATUS_CODE_TBL_Q
2393      , G_START_DATE_ACTIVE_TBL_Q
2394      , G_END_DATE_ACTIVE_TBL_Q
2395      , G_LINE_INDEX_TBL_Q
2396      , G_PRICING_EFFECTIVE_DATE_TBL_Q
2397      , G_START_DATE_ACTIVE_FIR_TBL_Q
2398      , G_END_DATE_ACTIVE_FIR_TBL_Q
2399      , G_LINE_TYPE_CODE_TBL_Q
2400      , G_PRICING_PHASE_ID_TBL_Q
2401      , G_UNIQUE_KEY_TBL_Q
2402      , G_START_DATE_ACTIVE_TBL_H_Q
2403      , G_END_DATE_ACTIVE_TBL_H_Q
2404      , G_START_DATE_ACTIVE_SEC_TBL_Q
2405      , G_END_DATE_ACTIVE_SEC_TBL_Q
2406      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
2407      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
2408      , G_HEADER_LIMIT_EXISTS_TBL_Q
2409      , G_DERIVED_QUALIFIER_FLAG_TBL_Q     -- Added for TCA
2410      , l_status_code
2411      , l_status_text);
2412      IF l_status_code = FND_API.G_RET_STS_ERROR THEN
2413         RAISE FND_API.G_EXC_ERROR;
2414      END IF;
2415  END IF;
2416 
2417 END LOOP;
2418 CLOSE l_outer_qual_cur;
2419 
2420 -- Nitin
2421 -- addeded check to delete header level qualifiers if no line qualifier is selected
2422 -- and the header has no lines without line level qualifier in that phase.
2423 
2424 	UPDATE QP_PREQ_QUAL_TMP a
2425      	SET   a.PRICING_STATUS_CODE = G_DELETED_GRP
2426     	WHERE
2427 		a.list_line_id = '-1'
2428     	AND   a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
2429     	AND   a.PRICING_PHASE_ID = p_pricing_phase_id
2430 	and 	a.line_index is null
2431 	and 	not exists
2432 		(select 'x' from qp_preq_qual_tmp b where
2433 			b.list_header_id = a.list_header_id
2434 			and b.list_line_id <> '-1'
2435 			and b.pricing_phase_id = p_pricing_phase_id
2436 			and b.pricing_status_code = G_STATUS_UNCHANGED
2437 			and b.line_index is null)
2438 	and 	a.list_header_id in
2439 		(select list_header_id from
2440 			qp_list_header_phases
2441 			where
2442 			pricing_phase_id = p_pricing_phase_id
2443 			and qualifier_flag = 'Y');
2444 
2445  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
2446 	engine_debug('Nitin - Delete headers - rows deleted '||sql%rowcount);
2447 
2448  END IF;
2449 EXCEPTION
2450   WHEN OTHERS THEN
2451   x_status_code := FND_API.G_RET_STS_ERROR;
2452   x_status_text :=l_routine||' '||SQLERRM;
2453   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
2454   engine_debug(l_routine||' '||SQLERRM);
2455   END IF;
2456 END Cache_Line_Qualifiers;
2457 
2458 /*+--------------------------------------------------------------------
2459   |Cache_Header_Qualifiers
2460   |To match only the header level qualifiers and get qualified headers (list_line_id = -1)
2461   |
2462   +--------------------------------------------------------------------
2463 */
2464 PROCEDURE Cache_Header_Qualifiers(p_pricing_phase_id IN NUMBER,
2465 					  x_status_code OUT NOCOPY VARCHAR2,
2466 					  x_status_text OUT NOCOPY VARCHAR2) As
2467 /*
2468 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,DISTINCT_QUALIFIER_FLAG,1
2469 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,ATTRIBUTE_TYPE,2
2470 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,PRICING_STATUS_CODE,3
2471 
2472 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_CONTEXT,1
2473 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTRIBUTE,2
2474 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTR_VALUE,3
2475 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,COMPARISON_OPERATOR_CODE,4
2476 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,ACTIVE_FLAG,5
2477 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,SEARCH_IND,6
2478 
2479 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,PRICING_PHASE_ID,1
2480 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,LIST_HEADER_ID,2
2481 
2482 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
2483 */
2484 -- Changed the cursor l_outer_qual_cur for bug#3002632
2485 CURSOR l_OUTER_QUAL_CUR IS
2486 -- Qualifier Only
2487 select /*+ ORDERED USE_NL(qpq qplh qph)  index(qpq qp_qualifiers_n4) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) dynamic_sampling(1) l_header_outer_qual_cur_mod */
2488        qpq.list_header_id,
2489        qpq.list_line_id list_line_id,
2490        qpq.qualifier_group_cnt,
2491        qpq.others_group_cnt,
2492        qpq.header_quals_exist_flag,
2493        qpq.search_ind,
2494        G_NO validated_flag,
2495        G_NO applied_flag,
2496        G_LINE_LEVEL attribute_level,
2497        G_QUALIFIER_TYPE attribute_type,
2498        qplatq.context          ,
2499        qplatq.attribute        ,
2500        qplatq.value_from       ,
2501        qpq.qualifier_grouping_no qualifier_grouping_no ,
2502        qpq.qualifier_precedence  ,
2503        qpq.qualifier_datatype,
2504        qpq.qualifier_attr_value    ,
2505        qpq.qualifier_attr_value_to ,
2506        qpq.start_date_active,
2507        qpq.end_date_active,
2508        G_NO pricing_attr_flag,
2509        qpq.comparison_operator_code ,
2510        qph.list_type_code,
2511        qph.ask_for_flag,
2512        qplatq.pricing_status_code,
2513        'OHQ' ,
2514         NULL line_index,
2515         NULL pricing_effective_date,
2516         qph.start_date_active_first start_date_active_first,
2517         qph.end_date_active_first   end_date_active_first,
2518         NULL line_type_code,
2519 	p_pricing_phase_id pricing_phase_id,
2520         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2521         qph.start_date_active start_date_active_h,
2522         qph.end_date_active end_date_active_h,
2523         qph.start_date_active_second start_date_active_second,
2524         qph.end_date_active_second end_date_active_second,
2525         qph.active_date_first_type,
2526         qph.active_date_second_type,
2527         qph.limit_exists_flag,
2528         qplatq.derived_qualifier_flag    -- Added for TCA
2529 from
2530 	   qp_npreq_line_attrs_tmp qplatq,
2531 	   qp_qualifiers qpq ,
2532 	   qp_list_header_phases qplh,
2533 	   qp_list_headers_b qph,
2534 	   qp_price_req_sources_v qprs
2535 where
2536       qpq.list_header_id = qplh.list_header_id
2537 and   qplh.list_header_id = qph.list_header_id
2538 -- bug 2799120
2539 --added for moac -- commented references to security profile
2540 --security will be built into qp_list_headers_b
2541 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2542 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2543 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2544 and   qplh.pricing_phase_id = p_pricing_phase_id
2545 AND   qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
2546 and 	 qpq.qualifier_context      = qplatq.context
2547 and 	 qpq.qualifier_attribute    = qplatq.attribute
2548 and   qpq.qualifier_attr_value = qplatq.value_from
2549 and   qpq.comparison_operator_code = '='
2550 and   qpq.list_line_id = -1 -- only Header level quals
2551 and   qpq.search_ind = 1
2552 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2553        OR
2554        qph.currency_code IS NULL) -- optional currency
2555 and   ((qph.ask_for_flag = G_YES and
2556         qph.list_header_id in (SELECT list_header_id
2557                                FROM qp_npreq_line_attrs_tmp
2558                                WHERE attribute_type = 'QUALIFIER'
2559                                AND pricing_status_code = G_STATUS_UNCHANGED
2560                                AND validated_flag = G_NO
2561                                AND list_header_id IS NOT NULL))
2562         OR qph.ask_for_flag = G_NO)
2563 --Begin Bug# 7833575
2564 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2565                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2566 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2567                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2568 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2569                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2570 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2571                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
2572 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2573 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2574 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2575 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2576 --End Bug# 7833575
2577 and   qph.list_type_code not in ('PRL','AGR')
2578 and   qpq.list_type_code not in ('PRL','AGR')
2579 and   qph.active_flag = G_YES
2580 and   qpq.active_flag = G_YES
2581 and   qplatq.distinct_qualifier_flag = G_YES
2582 and   qpq.list_header_id = qph.list_header_id
2583 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2584 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2585 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2586 and   qph.source_system_code = qprs.source_system_code
2587 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2588          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2589 union all
2590 select /*+ ORDERED USE_NL(qpq qplh qph) index(qpq qp_qualifiers_n6) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) dynamic_sampling(1) l_header_outer_qual_cur_mod */
2591        qpq.list_header_id,
2592        qpq.list_line_id list_line_id,
2593        qpq.qualifier_group_cnt,
2594        qpq.others_group_cnt,
2595        qpq.header_quals_exist_flag,
2596        qpq.search_ind,
2597        G_NO validated_flag,
2598        G_NO applied_flag,
2599        G_LINE_LEVEL attribute_level,
2600        G_QUALIFIER_TYPE attribute_type,
2601        qplatq.context          ,
2602        qplatq.attribute        ,
2603        qplatq.value_from       ,
2604        qpq.qualifier_grouping_no qualifier_grouping_no ,
2605        qpq.qualifier_precedence  ,
2606        qpq.qualifier_datatype,
2607        qpq.qualifier_attr_value    ,
2608        qpq.qualifier_attr_value_to ,
2609        qpq.start_date_active,
2610        qpq.end_date_active,
2611        G_NO pricing_attr_flag,
2612        qpq.comparison_operator_code ,
2613        qph.list_type_code,
2614        qph.ask_for_flag,
2615        qplatq.pricing_status_code,
2616        'OHQ' ,
2617         NULL line_index,
2618         NULL pricing_effective_date,
2619         qph.start_date_active_first start_date_active_first,
2620         qph.end_date_active_first   end_date_active_first,
2621         NULL line_type_code,
2622         p_pricing_phase_id pricing_phase_id,
2623         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2624         qph.start_date_active start_date_active_h,
2625         qph.end_date_active end_date_active_h,
2626         qph.start_date_active_second start_date_active_second,
2627         qph.end_date_active_second end_date_active_second,
2628         qph.active_date_first_type,
2629         qph.active_date_second_type,
2630         qph.limit_exists_flag,
2631         qplatq.derived_qualifier_flag     -- Added for TCA
2632 from
2633 	   qp_npreq_line_attrs_tmp qplatq,
2634 	   qp_qualifiers qpq ,
2635 	   qp_list_header_phases qplh,
2636 	   qp_list_headers_b qph,
2637 	   qp_price_req_sources_v qprs
2638 where
2639       qpq.list_header_id = qplh.list_header_id
2640 and   qplh.list_header_id = qph.list_header_id
2641 -- bug 2799120
2642 --added for moac -- commented references to security profile
2643 --security will be built into qp_list_headers_b
2644 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2645 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2646 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2647 and   qplh.pricing_phase_id = p_pricing_phase_id
2648 AND   qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
2649 and 	 qpq.qualifier_context      = qplatq.context
2650 and 	 qpq.qualifier_attribute    = qplatq.attribute
2651 and   qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
2652 and   qpq.qualifier_datatype =  G_NUMERIC
2653 and   qpq.search_ind = 1
2654 and   qpq.list_line_id = -1 -- Header level quals
2655 and   qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
2656 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
2657 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2658        OR
2659        qph.currency_code IS NULL) -- optional currency
2660 and   ((qph.ask_for_flag = G_YES and
2661         qph.list_header_id in (SELECT list_header_id
2662                                FROM qp_npreq_line_attrs_tmp
2663                                WHERE attribute_type = 'QUALIFIER'
2664                                AND pricing_status_code = G_STATUS_UNCHANGED
2665                                AND validated_flag = G_NO
2666                                AND list_header_id IS NOT NULL))
2667         OR qph.ask_for_flag = G_NO)
2668 --Begin Bug# 7833575
2669 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2670                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2671 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2672                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2673 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2674                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2675 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2676                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
2677 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2678 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2679 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2680 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2681 --End Bug# 7833575
2682 and   qph.list_type_code not in ('PRL','AGR')
2683 and   qpq.list_type_code not in ('PRL','AGR')
2684 and   qph.active_flag = G_YES
2685 and   qpq.active_flag = G_YES
2686 and   qplatq.distinct_qualifier_flag = G_YES
2687 and   qpq.list_header_id = qph.list_header_id
2688 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2689 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2690 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2691 and   qph.source_system_code = qprs.source_system_code
2692 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2693          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2694 union all
2695 select /*+ ORDERED USE_NL(qpq qplh qph) index(qpq qp_qualifiers_n5) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) dynamic_sampling(1) l_header_outer_qual_cur_mod */
2696        qpq.list_header_id,
2697        qpq.list_line_id list_line_id,
2698        qpq.qualifier_group_cnt,
2699        qpq.others_group_cnt,
2700        qpq.header_quals_exist_flag,
2701        qpq.search_ind,
2702        G_NO validated_flag,
2703        G_NO applied_flag,
2704        G_LINE_LEVEL attribute_level,
2705        G_QUALIFIER_TYPE attribute_type,
2706        qplatq.context          ,
2707        qplatq.attribute        ,
2708        qplatq.value_from       ,
2709        qpq.qualifier_grouping_no qualifier_grouping_no ,
2710        qpq.qualifier_precedence  ,
2711        qpq.qualifier_datatype,
2712        qpq.qualifier_attr_value    ,
2713        qpq.qualifier_attr_value_to ,
2714        qpq.start_date_active,
2715        qpq.end_date_active,
2716        G_NO pricing_attr_flag,
2717        qpq.comparison_operator_code ,
2718        qph.list_type_code,
2719        qph.ask_for_flag,
2720        qplatq.pricing_status_code,
2721        'OHQ' ,
2722         NULL line_index,
2723         NULL pricing_effective_date,
2724         qph.start_date_active_first start_date_active_first,
2725         qph.end_date_active_first   end_date_active_first,
2726         NULL line_type_code,
2727         p_pricing_phase_id pricing_phase_id,
2728         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2729         qph.start_date_active start_date_active_h,
2730         qph.end_date_active end_date_active_h,
2731         qph.start_date_active_second start_date_active_second,
2732         qph.end_date_active_second end_date_active_second,
2733         qph.active_date_first_type,
2734         qph.active_date_second_type,
2735         qph.limit_exists_flag,
2736         qplatq.derived_qualifier_flag      -- Added for TCA
2737 
2738 from
2739 	   qp_npreq_line_attrs_tmp qplatq,
2740 	   qp_qualifiers qpq ,
2741 	   qp_list_header_phases qplh,
2742 	   qp_list_headers_b qph,
2743 	   qp_price_req_sources_v qprs
2744 where
2745       qpq.list_header_id = qplh.list_header_id
2746 and   qplh.list_header_id = qph.list_header_id
2747 -- bug 2799120
2748 --added for moac -- commented references to security profile
2749 --security will be built into qp_list_headers_b
2750 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2751 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2752 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2753 and   qplh.pricing_phase_id = p_pricing_phase_id
2754 AND   qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
2755 and 	 qpq.qualifier_context      = qplatq.context
2756 and 	 qpq.qualifier_attribute    = qplatq.attribute
2757 and   qpq.comparison_operator_code = G_OPERATOR_BETWEEN
2758 and   qpq.search_ind = 1
2759 and   qpq.list_line_id = -1 -- Header level quals
2760 and   qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
2761 --and   decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
2762 -- G_DATE_Y,qplatq.value_from,null)
2763 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
2764 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2765        OR
2766        qph.currency_code IS NULL) -- optional currency
2767 and   ((qph.ask_for_flag = G_YES and
2768         qph.list_header_id in (SELECT list_header_id
2769                                FROM qp_npreq_line_attrs_tmp
2770                                WHERE attribute_type = 'QUALIFIER'
2771                                AND pricing_status_code = G_STATUS_UNCHANGED
2772                                AND validated_flag = G_NO
2773                                AND list_header_id IS NOT NULL))
2774         OR qph.ask_for_flag = G_NO)
2775 --Begin Bug# 7833575
2776 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2777                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2778 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2779                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2780 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2781                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2782 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2783                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
2784 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2785 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2786 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2787 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2788 --End Bug# 7833575
2789 and   qph.list_type_code not in ('PRL','AGR')
2790 and   qpq.list_type_code not in ('PRL','AGR')
2791 and   qph.active_flag = G_YES
2792 and   qpq.active_flag = G_YES
2793 and   qplatq.distinct_qualifier_flag = G_YES
2794 and   qpq.list_header_id = qph.list_header_id
2795 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2796 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2797 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2798 and   qph.source_system_code = qprs.source_system_code
2799 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2800          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2801 union all
2802 select /*+ ORDERED USE_NL(qpq qplh qph)  index(qpq qp_qualifiers_n5) index(qph qp_list_headers_b_n7) index(qplatq qp_preq_line_attrs_tmp_n2) dynamic_sampling(1) l_header_outer_qual_cur_mod */
2803        qpq.list_header_id,
2804        qpq.list_line_id list_line_id,
2805        qpq.qualifier_group_cnt,
2806        qpq.others_group_cnt,
2807        qpq.header_quals_exist_flag,
2808        qpq.search_ind,
2809        G_NO validated_flag,
2810        G_NO applied_flag,
2811        G_LINE_LEVEL attribute_level,
2812        G_QUALIFIER_TYPE attribute_type,
2813        qplatq.context          ,
2814        qplatq.attribute        ,
2815        qplatq.value_from       ,
2816        qpq.qualifier_grouping_no qualifier_grouping_no ,
2817        qpq.qualifier_precedence  ,
2818        qpq.qualifier_datatype,
2819        qpq.qualifier_attr_value    ,
2820        qpq.qualifier_attr_value_to ,
2821        qpq.start_date_active,
2822        qpq.end_date_active,
2823        G_NO pricing_attr_flag,
2824        qpq.comparison_operator_code ,
2825        qph.list_type_code,
2826        qph.ask_for_flag,
2827        qplatq.pricing_status_code,
2828        'OHQ' ,
2829         NULL line_index,
2830         NULL pricing_effective_date,
2831         qph.start_date_active_first start_date_active_first,
2832         qph.end_date_active_first   end_date_active_first,
2833         NULL line_type_code,
2834         p_pricing_phase_id pricing_phase_id,
2835         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2836         qph.start_date_active start_date_active_h,
2837         qph.end_date_active end_date_active_h,
2838         qph.start_date_active_second start_date_active_second,
2839         qph.end_date_active_second end_date_active_second,
2840         qph.active_date_first_type,
2841         qph.active_date_second_type,
2842         qph.limit_exists_flag,
2843         qplatq.derived_qualifier_flag    -- Added for TCA
2844 
2845 from
2846 	   qp_npreq_line_attrs_tmp qplatq,
2847 	   qp_qualifiers qpq ,
2848 	   qp_list_header_phases qplh,
2849 	   qp_list_headers_b qph,
2850 	   qp_price_req_sources_v qprs
2851 where
2852       qpq.list_header_id = qplh.list_header_id
2853 and   qplh.list_header_id = qph.list_header_id
2854 -- bug 2799120
2855 --added for moac -- commented references to security profile
2856 --security will be built into qp_list_headers_b
2857 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2858 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2859 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2860 and   qplh.pricing_phase_id = p_pricing_phase_id
2861 AND   qplh.PRIC_PROD_ATTR_ONLY_FLAG = 'N' -- Pattern changes
2862 and 	 qpq.qualifier_context      = qplatq.context
2863 and 	 qpq.qualifier_attribute    = qplatq.attribute
2864 and   qpq.comparison_operator_code = 'NOT ='
2865 and   qpq.qualifier_attr_value <> qplatq.value_from
2866 and   qpq.search_ind = 1
2867 and   qpq.list_line_id = -1 -- Header Level Quals
2868 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2869        OR
2870        qph.currency_code IS NULL) -- optional currency
2871 and   ((qph.ask_for_flag = G_YES and
2872         qph.list_header_id in (SELECT list_header_id
2873                                FROM qp_npreq_line_attrs_tmp
2874                                WHERE attribute_type = 'QUALIFIER'
2875                                AND pricing_status_code = G_STATUS_UNCHANGED
2876                                AND validated_flag = G_NO
2877                                AND list_header_id IS NOT NULL))
2878         OR qph.ask_for_flag = G_NO)
2879 --Begin Bug# 7833575
2880 /*and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2881                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2882 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2883                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2884 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2885                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2886 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2887                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))*/
2888 AND (NVL(qph.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2889 	AND NVL(qph.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2890 AND (NVL(qpq.end_date_active,G_MIN_PRICING_DATE) >= g_min_pricing_date
2891 	AND NVL(qpq.start_date_active, G_MAX_PRICING_DATE) <= g_max_pricing_date)
2892 --End Bug# 7833575
2893 and   qph.list_type_code not in ('PRL','AGR')
2894 and   qpq.list_type_code not in ('PRL','AGR')
2895 and   qph.active_flag = G_YES
2896 and   qpq.active_flag = G_YES
2897 and   qplatq.distinct_qualifier_flag = G_YES
2898 and   qpq.list_header_id = qph.list_header_id
2899 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2900 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2901 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2902 and   qph.source_system_code = qprs.source_system_code
2903 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2904          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'));  -- Added for TCA
2905 
2906 
2907 nROWS CONSTANT NUMBER := 1000;
2908 
2909 l_status_code VARCHAR2(30);
2910 l_status_text VARCHAR2(240);
2911 
2912 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Cache_Header_Qualifiers';
2913 
2914 BEGIN
2915 
2916  --Delete from QP_PREQ_QUAL_TMP;
2917 
2918  G_QUALIFIER_TEMP := 'E';
2919 
2920  OPEN l_outer_qual_cur;
2921 
2922  LOOP
2923   G_LIST_HEADER_ID_TBL_Q.delete;
2924   G_LIST_LINE_ID_TBL_Q.delete;
2925   G_VALIDATED_FLAG_TBL_Q.delete;
2926   G_APPLIED_FLAG_TBL_Q.delete;
2927   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
2928   G_ATTRIBUTE_TYPE_TBL_Q.delete;
2929   G_CONTEXT_TBL_Q.delete;
2930   G_ATTRIBUTE_TBL_Q.delete;
2931   G_VALUE_FROM_TBL_Q.delete;
2932   G_GROUPING_NO_TBL_Q.delete;
2933   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
2934   G_DATATYPE_TBL_Q.delete;
2935   G_SETUP_VALUE_FROM_TBL_Q.delete;
2936   G_SETUP_VALUE_TO_TBL_Q.delete;
2937   G_PRICING_ATTR_FLAG_TBL_Q.delete;
2938   G_OPERATOR_TYPE_TBL_Q.delete;
2939   G_QUALIFIER_TYPE_TBL_Q.delete;
2940   G_LIST_TYPE_CODE_TBL_Q.delete;
2941   G_ASK_FOR_FLAG_TBL_Q.delete;
2942   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
2943   G_OTHERS_GROUP_CNT_TBL_Q.delete;
2944   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
2945   G_SEARCH_IND_TBL_Q.delete;
2946   G_PRICING_STATUS_CODE_TBL_Q.delete;
2947   G_START_DATE_ACTIVE_TBL_Q.delete;
2948   G_END_DATE_ACTIVE_TBL_Q.delete;
2949   G_LINE_INDEX_TBL_Q.delete;
2950   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
2951   G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
2952   G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
2953   G_LINE_TYPE_CODE_TBL_Q.delete;
2954   G_PRICING_PHASE_ID_TBL_Q.delete;
2955   G_UNIQUE_KEY_TBL_Q.delete;
2956   G_START_DATE_ACTIVE_TBL_H_Q.delete;
2957   G_END_DATE_ACTIVE_TBL_H_Q.delete;
2958   G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
2959   G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
2960   G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
2961   G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
2962   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
2963   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;   -- Added for TCA
2964 
2965   FETCH l_outer_qual_cur
2966   BULK COLLECT INTO
2967      G_LIST_HEADER_ID_TBL_Q
2968    , G_LIST_LINE_ID_TBL_Q
2969    , G_QUALIFIER_GROUP_CNT_TBL_Q
2970    , G_OTHERS_GROUP_CNT_TBL_Q
2971    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2972    , G_SEARCH_IND_TBL_Q
2973    , G_VALIDATED_FLAG_TBL_Q
2974    , G_APPLIED_FLAG_TBL_Q
2975    , G_ATTRIBUTE_LEVEL_TBL_Q
2976    , G_ATTRIBUTE_TYPE_TBL_Q
2977    , G_CONTEXT_TBL_Q
2978    , G_ATTRIBUTE_TBL_Q
2979    , G_VALUE_FROM_TBL_Q
2980    , G_GROUPING_NO_TBL_Q
2981    , G_QUALIFIER_PRECEDENCE_TBL_Q
2982    , G_DATATYPE_TBL_Q
2983    , G_SETUP_VALUE_FROM_TBL_Q
2984    , G_SETUP_VALUE_TO_TBL_Q
2985    , G_START_DATE_ACTIVE_TBL_Q
2986    , G_END_DATE_ACTIVE_TBL_Q
2987    , G_PRICING_ATTR_FLAG_TBL_Q
2988    , G_OPERATOR_TYPE_TBL_Q
2989    , G_LIST_TYPE_CODE_TBL_Q
2990    , G_ASK_FOR_FLAG_TBL_Q
2991    , G_PRICING_STATUS_CODE_TBL_Q
2992    , G_QUALIFIER_TYPE_TBL_Q
2993    , G_LINE_INDEX_TBL_Q
2994    , G_PRICING_EFFECTIVE_DATE_TBL_Q
2995    , G_START_DATE_ACTIVE_FIR_TBL_Q
2996    , G_END_DATE_ACTIVE_FIR_TBL_Q
2997    , G_LINE_TYPE_CODE_TBL_Q
2998    , G_PRICING_PHASE_ID_TBL_Q
2999    , G_UNIQUE_KEY_TBL_Q
3000    , G_START_DATE_ACTIVE_TBL_H_Q
3001    , G_END_DATE_ACTIVE_TBL_H_Q
3002    , G_START_DATE_ACTIVE_SEC_TBL_Q
3003    , G_END_DATE_ACTIVE_SEC_TBL_Q
3004    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
3005    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
3006    , G_HEADER_LIMIT_EXISTS_TBL_Q
3007    , G_DERIVED_QUALIFIER_FLAG_TBL_Q  LIMIT nROWS;     -- Added for TCA
3008    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
3009 
3010  IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
3011 
3012      G_QUALIFIER_TEMP := 'U';
3013 
3014       INSERT_QUAL(
3015        G_LIST_HEADER_ID_TBL_Q
3016      , G_LIST_LINE_ID_TBL_Q
3017      , G_VALIDATED_FLAG_TBL_Q
3018      , G_APPLIED_FLAG_TBL_Q
3019      , G_ATTRIBUTE_LEVEL_TBL_Q
3020      , G_ATTRIBUTE_TYPE_TBL_Q
3021      , G_CONTEXT_TBL_Q
3022      , G_ATTRIBUTE_TBL_Q
3023      , G_VALUE_FROM_TBL_Q
3024      , G_GROUPING_NO_TBL_Q
3025      , G_QUALIFIER_PRECEDENCE_TBL_Q
3026      , G_DATATYPE_TBL_Q
3027      , G_SETUP_VALUE_FROM_TBL_Q
3028      , G_SETUP_VALUE_TO_TBL_Q
3029      , G_PRICING_ATTR_FLAG_TBL_Q
3030      , G_OPERATOR_TYPE_TBL_Q
3031      , G_LIST_TYPE_CODE_TBL_Q
3032      , G_ASK_FOR_FLAG_TBL_Q
3033      , G_QUALIFIER_TYPE_TBL_Q
3034      , G_QUALIFIER_GROUP_CNT_TBL_Q
3035      , G_OTHERS_GROUP_CNT_TBL_Q
3036      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
3037      , G_SEARCH_IND_TBL_Q
3038      , G_PRICING_STATUS_CODE_TBL_Q
3039      , G_START_DATE_ACTIVE_TBL_Q
3040      , G_END_DATE_ACTIVE_TBL_Q
3041      , G_LINE_INDEX_TBL_Q
3042      , G_PRICING_EFFECTIVE_DATE_TBL_Q
3043      , G_START_DATE_ACTIVE_FIR_TBL_Q
3044      , G_END_DATE_ACTIVE_FIR_TBL_Q
3045      , G_LINE_TYPE_CODE_TBL_Q
3046      , G_PRICING_PHASE_ID_TBL_Q
3047      , G_UNIQUE_KEY_TBL_Q
3048      , G_START_DATE_ACTIVE_TBL_H_Q
3049      , G_END_DATE_ACTIVE_TBL_H_Q
3050      , G_START_DATE_ACTIVE_SEC_TBL_Q
3051      , G_END_DATE_ACTIVE_SEC_TBL_Q
3052      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
3053      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
3054      , G_HEADER_LIMIT_EXISTS_TBL_Q
3055      , G_DERIVED_QUALIFIER_FLAG_TBL_Q     -- Added for TCA
3056      , l_status_code
3057      , l_status_text);
3058  END IF;
3059 
3060 END LOOP;
3061 CLOSE l_outer_qual_cur;
3062 EXCEPTION
3063   WHEN OTHERS THEN
3064   x_status_code := FND_API.G_RET_STS_ERROR;
3065   x_status_text :=l_routine||' '||SQLERRM;
3066   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3067   engine_debug(l_routine||' '||SQLERRM);
3068 
3069   END IF;
3070 END Cache_Header_Qualifiers;
3071 
3072 /*+--------------------------------------------------------------------
3073   |Reset_All_Tbls
3074   |To Reset all pl/sql tables.
3075   +--------------------------------------------------------------------
3076 */
3077 PROCEDURE Reset_All_Tbls(x_status_code OUT NOCOPY VARCHAR2,
3078                          x_status_text OUT NOCOPY VARCHAR2)
3079 AS
3080 l_routine VARCHAR2(240):='QP_PREQ_GRP.Reset_All_Tbls';
3081 BEGIN
3082  G_LINE_INDEX_tbl.delete;
3083  G_USAGE_PRICING_TYPE_TBL.delete;
3084  G_LINE_CATEGORY_TBL.delete;
3085  G_LINE_CATEGORY_DEF_TBL.delete;
3086  G_CONTRACT_START_DATE_TBL.delete;	/* shulin */
3087  G_CONTRACT_END_DATE_TBL.delete;	/* shulin */
3088  G_LINE_UNIT_PRICE_TBL.delete;	/* shu_latest */
3089  G_CONTRACT_START_DATE_DEF_TBL.delete;	/* shulin */
3090  G_CONTRACT_END_DATE_DEF_TBL.delete;	/* shulin */
3091  G_LINE_UNIT_PRICE_DEF_TBL.delete;	/* shu_latest */
3092  G_CHARGE_PERIODICITY_CODE_TBL.delete;
3093  G_CURRENCY_HEADER_ID_DEF_TBL.delete;    /* vivek */
3094  G_SELLING_ROUNDING_DEF_TBL.delete;    /* vivek */
3095  G_ORDER_CURRENCY_DEF_TBL.delete;        /* vivek */
3096  G_PRICING_EFF_DATE_DEF_TBL.delete;      /* vivek */
3097  G_BASE_CURRENCY_DEF_TBL.delete;         /* vivek */
3098  G_CURRENCY_DETAIL_ID_DEF_TBL.delete;    /* sunilpandey */
3099 
3100  G_LINE_DETAIL_INDEX_tbl.delete;
3101  G_ATTRIBUTE_LEVEL_tbl.delete;
3102  G_ATTRIBUTE_TYPE_tbl.delete;
3103  G_LIST_HEADER_ID_tbl.delete;
3104  G_LIST_LINE_ID_tbl.delete;
3105  G_CONTEXT_tbl.delete;
3106  G_ATTRIBUTE_tbl.delete;
3107  G_VALUE_FROM_tbl.delete;
3108  G_SETUP_VALUE_FROM_tbl.delete;
3109  G_VALUE_TO_tbl.delete;
3110  G_SETUP_VALUE_TO_tbl.delete;
3111  G_GROUPING_NUMBER_tbl.delete;
3112  G_NO_QUALIFIERS_IN_GRP_tbl.delete;
3113  G_COMPARISON_OPERATOR_TYPE_tbl.delete;
3114  G_VALIDATED_FLAG_tbl.delete;
3115  G_APPLIED_FLAG_tbl.delete;
3116  G_PRICING_STATUS_CODE_tbl.delete;
3117  G_PRICING_STATUS_TEXT_tbl.delete;
3118  G_QUALIFIER_PRECEDENCE_tbl.delete;
3119  G_DATATYPE_tbl.delete;
3120  G_PRICING_ATTR_FLAG_tbl.delete;
3121  G_QUALIFIER_TYPE_tbl.delete;
3122  G_product_uom_code_tbl.delete;
3123 
3124  G_ROUNDING_FLAG_TBL.delete;
3125  G_LINE_TYPE_CODE_TBL.delete          ;
3126  G_PRICING_EFFECTIVE_DATE_TBL.delete  ;
3127  G_ACTIVE_DATE_FIRST_TBL.delete       ;
3128  G_ACTIVE_DATE_FIRST_TYPE_TBL.delete  ;
3129  G_ACTIVE_DATE_SECOND_TBL.delete      ;
3130  G_ACTIVE_DATE_SECOND_TYPE_TBL.delete ;
3131  G_LINE_QUANTITY_TBL.delete           ;
3132  G_LINE_UOM_CODE_TBL.delete           ;
3133  G_REQUEST_TYPE_CODE_TBL.delete       ;
3134  G_PRICED_QUANTITY_TBL.delete         ;
3135  G_UOM_QUANTITY_TBL.delete         ;
3136  G_PRICED_UOM_CODE_TBL.delete         ;
3137  G_CURRENCY_CODE_TBL.delete           ;
3138  G_UNIT_PRICE_TBL.delete              ;
3139  G_PERCENT_PRICE_TBL.delete           ;
3140  G_ADJUSTED_UNIT_PRICE_TBL.delete     ;
3141  G_UPD_ADJUSTED_UNIT_PRICE_TBL.delete;
3142  G_PROCESSED_FLAG_TBL.delete          ;
3143  G_PRICE_FLAG_TBL.delete              ;
3144  G_LINE_ID_TBL.delete                 ;
3145  G_PROCESSING_ORDER_TBL.delete        ;
3146  G_EXCLUDER_FLAG_TBL.delete               ;
3147  G_PRICE_REQUEST_CODE_TBL.delete;
3148  G_HEADER_LIMIT_EXISTS_TBL.delete;
3149  G_LINE_LIMIT_EXISTS_TBL.delete;
3150  G_CHARGE_TYPE_CODE_TBL.delete;
3151  G_CHARGE_SUBTYPE_CODE_TBL.delete;
3152  G_CURRENCY_HEADER_ID_TBL.delete;           /* vivek */
3153  G_SELLING_ROUNDING_TBL.delete;           /* vivek */
3154  G_ORDER_CURRENCY_TBL.delete;               /* vivek */
3155  G_BASE_CURRENCY_CODE_TBL.delete;           /* vivek */
3156  G_CURRENCY_DETAIL_ID_TBL.delete;           /* sunilpandey */
3157  G_ACCUM_CONTEXT_TBL.delete;   -- accum range break
3158  G_ACCUM_ATTRIBUTE_TBL.delete; -- accum range break
3159  G_ACCUM_FLAG_TBL.delete;      -- accum range break
3160  G_UPDATED_FLAG_TBL.delete;       -- 3215497
3161  G_CALCULATION_CODE_TBL.delete;   -- 3215497
3162  G_CHANGE_REASON_CODE_TBL.delete; -- 3215497
3163  G_CHANGE_REASON_TEXT_TBL.delete; -- 3215497
3164  G_PROCESS_CODE_TBL.delete;       -- 3215497
3165   G_LINE_DETAIL_TYPE_CODE_TBL.delete        ;
3166   G_PRICE_BREAK_TYPE_CODE_TBL.delete        ;
3167   G_LIST_PRICE_TBL.delete                   ;
3168   G_LIST_LINE_TYPE_TBL.delete               ;
3169   G_LIST_TYPE_CODE_TBL.delete               ;
3170   G_CREATED_FROM_SQL_TBL.delete             ;
3171   G_PRICING_GROUP_SEQUENCE_TBL.delete       ;
3172   G_PRICING_PHASE_ID_TBL.delete             ;
3173   G_OPERAND_CALCULATION_CODE_TBL.delete     ;
3174   G_OPERAND_VALUE_TBL.delete                ;
3175   G_SUBSTITUTION_TYPE_CODE_TBL.delete       ;
3176   G_SUBSTITUTION_VALUE_FROM_TBL.delete      ;
3177   G_SUBSTITUTION_VALUE_TO_TBL.delete        ;
3178   G_ASK_FOR_FLAG_TBL.delete                 ;
3179   G_PRICE_FORMULA_ID_TBL.delete             ;
3180   G_PRODUCT_PRECEDENCE_TBL.delete           ;
3181   G_INCOMP_GRP_CODE_TBL.delete              ;
3182   G_AUTOMATIC_FLAG_TBL.delete               ;
3183   G_OVERRIDE_FLAG_TBL.delete                ;
3184   G_PRIMARY_UOM_FLAG_TBL.delete             ;
3185   G_PRINT_ON_INVOICE_FLAG_TBL.delete        ;
3186   G_MODIFIER_LEVEL_CODE_TBL.delete          ;
3187   G_BENEFIT_QTY_TBL.delete                  ;
3188   G_BENEFIT_UOM_CODE_TBL.delete             ;
3189   G_SERVICE_DURATION_TBL.delete		    ; -- SERVICE PROJECT
3190   G_SERVICE_PERIOD_TBL.delete		    ; -- SERVICE PROJECT
3191   G_LIST_LINE_NO_TBL.delete                 ;
3192   G_ACCRUAL_FLAG_TBL.delete                 ;
3193   G_ACCRUAL_CONVERSION_RATE_TBL.delete      ;
3194   G_ESTIM_ACCRUAL_RATE_TBL.delete           ;
3195   G_RECURRING_FLAG_TBL.delete               ;
3196   G_QUALIFIERS_EXIST_FLAG_TBL.delete;
3197   G_PRICING_ATTRS_EXIST_FLAG_TBL.delete;
3198   G_SELECTED_VOLUME_ATTR_TBL.delete         ;
3199   G_ROUNDING_FACTOR_TBL.delete              ;
3200   G_LINE_INDEX_LD_TBL.delete                ;
3201   G_LINE_DETAIL_INDEX_LD_TBL.delete         ;
3202   G_LIST_HEADER_ID_LD_TBL.delete            ;
3203   G_LIST_LINE_ID_LD_TBL.delete              ;
3204   G_PRICING_STATUS_CODE_LD_TBL.delete       ;
3205   G_PRICING_STATUS_TEXT_LD_TBL.delete       ;
3206   G_APPLIED_FLAG_LD_TBL.delete;
3207   G_PROCESSED_FLAG_LD_TBL.delete;
3208   G_LINE_INDEX_l_TBL.delete;
3209   G_LINE_DETAIL_INDEX_l_TBL.delete;
3210   G_PRICING_STATUS_CODE_L_TBL.delete;
3211   G_PRICING_STATUS_TEXT_L_TBL.delete;
3212 
3213   G_LIST_HEADER_ID_TBL_Q.delete;
3214   G_LIST_LINE_ID_TBL_Q.delete;
3215   G_LINE_INDEX_TBL_Q.delete;
3216   G_VALIDATED_FLAG_TBL_Q.delete;
3217   G_APPLIED_FLAG_TBL_Q.delete;
3218   G_START_DATE_ACTIVE_TBL_Q.delete;
3219   G_END_DATE_ACTIVE_TBL_Q.delete;
3220   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
3221   G_LINE_TYPE_CODE_TBL_Q.delete;
3222   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
3223   G_ATTRIBUTE_TYPE_TBL_Q.delete;
3224   G_CONTEXT_TBL_Q.delete;
3225   G_ATTRIBUTE_TBL_Q.delete;
3226   G_VALUE_FROM_TBL_Q.delete;
3227   G_GROUPING_NO_TBL_Q.delete;
3228   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
3229   G_DATATYPE_TBL_Q.delete;
3230   G_SETUP_VALUE_FROM_TBL_Q.delete;
3231   G_SETUP_VALUE_TO_TBL_Q.delete;
3232   G_PRICING_ATTR_FLAG_TBL_Q.delete;
3233   G_OPERATOR_TYPE_TBL_Q.delete;
3234   G_CURRENCY_CODE_TBL_Q.delete;
3235   G_ASK_FOR_FLAG_TBL_Q.delete;
3236   G_LIST_TYPE_CODE_TBL_Q.delete;
3237   G_QUALIFIER_TYPE_TBL_Q.delete;
3238   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
3239   G_OTHERS_GROUP_CNT_TBL_Q.delete;
3240   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
3241   G_SEARCH_IND_TBL_Q.delete;
3242   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
3243   G_LIST_LINE_NO_TBL_Q.delete;
3244 
3245   G_LINE_INDEX_TBL_P.delete;
3246   G_LINE_DETAIL_INDEX_TBL_P.delete;
3247   G_LIST_HEADER_ID_TBL_P.delete;
3248   G_LIST_LINE_ID_TBL_P.delete;
3249   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
3250   G_LIST_PRICE_TBL_P.delete;
3251   G_LIST_LINE_TYPE_TBL_P.delete;
3252   G_LIST_TYPE_CODE_TBL_P.delete;
3253   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
3254   G_PRICING_PHASE_ID_TBL_P.delete;
3255   G_OPER_CALCULATION_CODE_TBL_P.delete;
3256   G_OPERAND_VALUE_TBL_P.delete;
3257   G_ASK_FOR_FLAG_TBL_P.delete;
3258   G_PRICE_FORMULA_ID_TBL_P.delete;
3259   G_PRODUCT_PRECEDENCE_TBL_P.delete;
3260   G_INCOMP_GRP_CODE_TBL_P.delete;
3261   G_AUTOMATIC_FLAG_TBL_P.delete;
3262   G_OVERRIDE_FLAG_TBL_P.delete;
3263   G_PRIMARY_UOM_FLAG_TBL_P.delete;
3264   G_PRINT_ON_INVOICE_FLAG_TBL_P.delete;
3265   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
3266   G_BENEFIT_QTY_TBL_P.delete;
3267   G_BENEFIT_UOM_CODE_TBL_P.delete;
3268   G_SERVICE_DURATION_TBL_P.delete;  -- SERVICE PROJECT
3269   G_SERVICE_PERIOD_TBL_P.delete;    -- SERVICE PROJECT
3270   G_LIST_LINE_NO_TBL_P.delete;
3271   G_ACCRUAL_FLAG_TBL_P.delete;
3272   G_ACCR_CONVERSION_RATE_TBL_P.delete;
3273   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
3274   G_ATTRIBUTE_LEVEL_TBL_P.delete;
3275   G_ATTRIBUTE_TYPE_TBL_P.delete;
3276   G_CONTEXT_TBL_P.delete;
3277   G_ATTRIBUTE_TBL_P.delete;
3278   G_VALUE_FROM_TBL_P.delete;
3279   G_SETUP_VALUE_FROM_TBL_P.delete;
3280   G_VALIDATED_FLAG_TBL_P.delete;
3281   G_APPLIED_FLAG_TBL_P.delete;
3282   G_PRICING_ATTR_FLAG_TBL_P.delete;
3283   G_GROUPING_NUMBER_TBL_P.delete;
3284   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
3285   G_EXCLUDER_FLAG_TBL_P.delete;
3286   G_PRODUCT_UOM_CODE_TBL_P.delete;
3287   G_QUALIFIER_TYPE_TBL_P.delete;
3288   G_ROUNDING_FACTOR_TBL_P.delete;
3289   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
3290   G_LINE_LIMIT_EXISTS_TBL_P.delete;
3291   G_CHARGE_TYPE_CODE_TBL_P.delete;
3292   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
3293   G_CURRENCY_HEADER_ID_TBL_P.delete;      /* vivek */
3294   G_SELLING_ROUNDING_TBL_P.delete;      /* vivek */
3295   G_ORDER_CURRENCY_TBL_P.delete;          /* vivek */
3296   G_PRICING_EFFECTIVE_DATE_TBL_P.delete;  /* vivek */
3297   G_BASE_CURRENCY_CODE_TBL_P.delete;      /* vivek */
3298   G_CURRENCY_DETAIL_ID_TBL_P.delete;      /* sunilpandey */
3299   G_ACCUM_CONTEXT_TBL_P.delete;   -- accum range break
3300   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- accum range break
3301   G_ACCUM_FLAG_TBL_P.delete;      -- accum range break
3302 
3303   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
3304   G_ATTRIBUTE_TYPE_TBL_PR.delete;
3305   G_CONTEXT_TBL_PR.delete;
3306   G_ATTRIBUTE_TBL_PR.delete;
3307   G_VALUE_FROM_TBL_PR.delete;
3308   G_OPERATOR_TYPE_TBL_PR.delete;
3309   G_SETUP_VALUE_FROM_TBL_PR.delete;
3310   G_SETUP_VALUE_TO_TBL_PR.delete;
3311   G_DATATYPE_TBL_PR.delete;
3312 
3313   G_LINE_INDEX_TBL_B.delete;
3314   G_LIST_HEADER_ID_TBL_B.delete;
3315   G_LIST_LINE_ID_TBL_B.delete;
3316   G_PRICE_BREAK_TYPE_CODE_TBL_B.delete;
3317   G_LIST_PRICE_TBL_B.delete;
3318   G_LIST_LINE_TYPE_TBL_B.delete;
3319   G_LIST_TYPE_CODE_TBL_B.delete;
3320   G_PRICING_GROUP_SEQUENCE_TBL_B.delete;
3321   G_PRICING_PHASE_ID_TBL_B.delete;
3322   G_OPER_CALCULATION_CODE_TBL_B.delete;
3323   G_OPERAND_VALUE_TBL_B.delete;
3324   G_ASK_FOR_FLAG_TBL_B.delete;
3325   G_PRICE_FORMULA_ID_TBL_B.delete;
3326   G_PRODUCT_PRECEDENCE_TBL_B.delete;
3327   G_INCOMP_GRP_CODE_TBL_B.delete;
3328   G_AUTOMATIC_FLAG_TBL_B.delete;
3329   G_OVERRIDE_FLAG_TBL_B.delete;
3330   G_PRIMARY_UOM_FLAG_TBL_B.delete;
3331   G_PRINT_ON_INVOICE_FLAG_TBL_B.delete;
3332   G_MODIFIER_LEVEL_CODE_TBL_B.delete;
3333   G_BENEFIT_QTY_TBL_B.delete;
3334   G_BENEFIT_UOM_CODE_TBL_B.delete;
3335   G_SERVICE_DURATION_TBL_B.delete;  -- SERVICE PROJECT
3336   G_SERVICE_PERIOD_TBL_B.delete;    -- SERVICE PROJECT
3337   G_LIST_LINE_NO_TBL_B.delete;
3338   G_ACCRUAL_FLAG_TBL_B.delete;
3339   G_ACCR_CONVERSION_RATE_TBL_B.delete;
3340   G_ESTIM_ACCRUAL_RATE_TBL_B.delete;
3341   G_LINE_INDEX_TBL_G.delete;
3342   G_LIST_HEADER_ID_TBL_G.delete;
3343   G_LIST_LINE_ID_TBL_G.delete;
3344   G_NO_OF_PATTS_IN_GRP_TBL_G.delete;
3345 
3346   G_PRICING_PHASE_ID_TBL_A.delete;
3347   G_INCOMP_GRP_CODE_TBL_A.delete;
3348   G_LINE_DETAIL_TYPE_CODE_TBL_A.delete;
3349   G_MODIFIER_LEVEL_CODE_TBL_A.delete;
3350   G_PRIMARY_UOM_FLAG_TBL_A.delete;
3351 
3352 EXCEPTION
3353 WHEN OTHERS THEN
3354  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3355   engine_debug(l_routine||': '||SQLERRM);
3356  END IF;
3357  x_status_code := FND_API.G_RET_STS_ERROR;
3358  x_status_text := l_routine || ': '  || SQLERRM;
3359 END Reset_All_Tbls;
3360 
3361 /*+---------------------------------------------------------------------
3362   |Update Processing_Order
3363   |For service lines, two request lines might be related to each other and one
3364   |might be the parent and the other might be child.
3365   |This relationship are passed by the calling application
3366   |thru rltd_tbl structure. From this structure, we can find
3367   |the which is the parent and child.  Parent lines
3368   |need to be process before the child lines.  This information
3369   |is store in processing_order column in temp by this procedure
3370   +---------------------------------------------------------------------
3371 */
3372 PROCEDURE Update_Processing_Order (x_status_code OUT NOCOPY VARCHAR2,
3373                                    x_status_text OUT NOCOPY VARCHAR2)
3374 AS
3375 
3376 /*
3377 INDX,QP_PREQ_GRP.Update_Processing_Order.l_Service_Cur,-No Index Used-,NA,NA
3378 */
3379 CURSOR l_Service_Cur IS
3380   SELECT LINE_INDEX,
3381          RELATED_LINE_INDEX
3382   FROM qp_npreq_rltd_lines_tmp
3383   WHERE LINE_INDEX IS NOT NULL
3384   AND   RELATED_LINE_INDEX IS NOT NULL
3385   AND   RELATIONSHIP_TYPE_CODE = G_SERVICE_LINE;
3386 
3387 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Update_Processing_Order';
3388 l_line_index_tbl NUMBER_TYPE;
3389 l_related_line_index_tbl NUMBER_TYPE;
3390 
3391 BEGIN
3392 x_status_code := FND_API.G_RET_STS_SUCCESS;
3393 /*
3394 INDX,QP_PREQ_GRP.Update_Processing_Order.Update_Processing_Order_upd1,qp_npreq_lines_tmp_U1,LINE_INDEX,1
3395 */
3396 
3397   -- julin [3805113]: using bulk collect and update
3398   OPEN l_Service_Cur;
3399   LOOP
3400     FETCH l_Service_Cur BULK COLLECT INTO
3401        l_line_index_tbl,
3402        l_related_line_index_tbl
3403        LIMIT G_BATCH_SIZE;
3404     EXIT WHEN l_line_index_tbl.count = 0;
3405 
3406      -- julin [3805113]: bulk update
3407      FORALL I IN l_line_index_tbl.first..l_line_index_tbl.last
3408        UPDATE qp_npreq_lines_tmp --upd1
3409        SET PROCESSING_ORDER = 1
3410        WHERE LINE_INDEX = l_line_index_tbl(I);
3411 
3412 --Assuming that parent line has it index on related_line_index column
3413 /*
3414 INDX,QP_PREQ_GRP.Update_Processing_Order.Update_Processing_Order_upd2,qp_npreq_lines_tmp_U1,LINE_INDEX,1
3415 */
3416      -- julin [3805113]: bulk update
3417      FORALL I IN l_related_line_index_tbl.first..l_related_line_index_tbl.last
3418        UPDATE qp_npreq_lines_tmp --upd2
3419        SET PROCESSING_ORDER = 2
3420        WHERE LINE_INDEX = l_related_line_index_tbl(I);
3421 
3422   END LOOP;
3423   CLOSE l_Service_Cur;
3424 
3425 --added for 4900095
3426 --marking the service lines with uom_quantity as null
3427 --this will be used in lumpsum calculation
3428 for cl in (select line_index from qp_npreq_lines_tmp line
3429            where processing_order = 2
3430            and (contract_start_date is not null or contract_end_date is not null)
3431            and uom_quantity is null)
3432 loop
3433   G_service_line_ind_tbl(cl.line_index) := cl.line_index;
3434   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3435     IF G_service_line_ind_tbl.exists(cl.line_index) THEN
3436       engine_debug('service line with uom_qty as null line_index: '||G_service_line_ind_tbl(cl.line_index));
3437     END IF;--G_service_line_ind_tbl.exists
3438   END IF;--G_DEBUG_ENGINE
3439 end loop;
3440 
3441 EXCEPTION
3442   WHEN OTHERS THEN
3443    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3444    engine_debug(l_routine||' '||SQLERRM);
3445    END IF;
3446    x_status_code := FND_API.G_RET_STS_ERROR;
3447    x_status_text := 'Error in '||l_routine||SQLERRM;
3448 END;
3449 
3450 /*+----------------------------------------------------------------------
3451   | Function GET_LINE_DETAIL_INDEX
3452   | Output: Unique number
3453   | This function behave like a sequence, to return uniq
3454   +----------------------------------------------------------------------
3455 */
3456 FUNCTION GET_LINE_DETAIL_INDEX RETURN PLS_INTEGER IS
3457 BEGIN
3458  G_LINE_DETAIL_INDEX :=G_LINE_DETAIL_INDEX + 1;
3459  RETURN G_LINE_DETAIL_INDEX;
3460 END;
3461 
3462 /*+----------------------------------------------------------------------
3463   |PROCEDURE SET_STATUS_CODE
3464   +----------------------------------------------------------------------
3465 */
3466 PROCEDURE SET_STATUS_CODE (p_status_code IN VARCHAR2,
3467                            p_status_text IN VARCHAR2:=NULL,
3468                            p_line_index    IN NUMBER,
3469                            p_line_detail_index IN PLS_INTEGER:=NULL,
3470                            p_temp_table  IN VARCHAR2,
3471                            x_status_code OUT NOCOPY VARCHAR2,
3472                            x_status_text OUT NOCOPY VARCHAR2)
3473 AS
3474 l_routine VARCHAR2(240):='QP_PREQ_GRP.SET_STATUS_CODE';
3475 BEGIN
3476    IF(p_temp_table = 'LINES') THEN
3477 /*
3478 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd1,qp_npreq_lines_tmp_N1,LINE_INDEX,1
3479 */
3480 	-- shulin fix bug1745788, widen substr to 2000
3481    UPDATE qp_npreq_lines_tmp --upd1
3482       SET PRICING_STATUS_CODE = p_status_code,
3483           PRICING_STATUS_TEXT = substr(p_status_text,1,2000)
3484       WHERE LINE_INDEX = p_line_index;
3485    ELSIF (p_temp_table = 'LDETS' AND p_line_index IS NOT NULL) THEN
3486 /*
3487 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd2,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
3488 */
3489 	-- shulin fix bug1745788, widen substr to 2000
3490 	--bug 14464004
3491       UPDATE  /*+ index(qp_npreq_ldets_tmp qp_preq_ldets_tmp_n1) */ qp_npreq_ldets_tmp     --upd2
3492         SET PRICING_STATUS_CODE = p_status_code,
3493             PRICING_STATUS_TEXT =
3494                   substr(pricing_status_code||'+'||p_status_code||'+'||p_status_text,1,2000)
3495         WHERE LINE_INDEX = p_line_index
3496 	   AND   PRICING_STATUS_CODE <> G_STATUS_UNCHANGED;
3497    ELSIF (p_temp_table = 'ATTRS' AND p_line_index IS NOT NULL
3498           AND p_line_detail_index IS NULL) THEN
3499         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3500         engine_debug('----Updating status code for LDETS---------');
3501         END IF;
3502 /*
3503 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd3,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
3504 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd3,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
3505 */
3506 --bug 14464004
3507         UPDATE /*+ dynamic_sampling(1)  index(qp_npreq_line_attrs_tmp qp_preq_line_attrs_tmp_n1) */ qp_npreq_line_attrs_tmp     --upd3
3508         SET PRICING_STATUS_CODE = p_status_code,
3509             PRICING_STATUS_TEXT = substr(p_status_text,1,240)
3510         WHERE LINE_INDEX = p_line_index
3511         AND   PRICING_STATUS_CODE <> G_STATUS_UNCHANGED;
3512    END IF;
3513 EXCEPTION
3514   WHEN OTHERS THEN
3515    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3516    engine_debug(l_routine||' '||SQLERRM);
3517    END IF;
3518    x_status_code := FND_API.G_RET_STS_ERROR;
3519    x_status_text := l_routine||': '||SQLERRM;
3520 
3521 END SET_STATUS_CODE;
3522 
3523 
3524 /*+----------------------------------------------------------------------
3525   |PROCEDURE SET_PROCESSED_CODE
3526   +----------------------------------------------------------------------
3527 */
3528 PROCEDURE SET_PROCESSED_CODE (p_processed_code IN VARCHAR2,
3529                               p_line_index    IN NUMBER,
3530                               p_line_detail_index IN PLS_INTEGER:=NULL,
3531                               p_temp_table  IN VARCHAR2,
3532                               x_status_code OUT NOCOPY VARCHAR2,
3533                               x_status_text OUT NOCOPY VARCHAR2)
3534 AS
3535 l_routine VARCHAR2(240):='QP_PREQ_GRP.SET_PROCESSED_CODE';
3536 BEGIN
3537    IF(p_temp_table = 'LINES') THEN
3538 /*
3539 INDX,QP_PREQ_GRP.set_processed_code.set_processed_code_upd1,qp_npreq_lines_tmp_N1,LINE_INDEX,1
3540 */
3541    UPDATE qp_npreq_lines_tmp --upd1
3542       SET PROCESSED_CODE = p_processed_code
3543       WHERE LINE_INDEX = p_line_index;
3544     ELSIF (p_temp_table = 'ATTRS' AND p_line_index IS NOT NULL
3545           AND p_line_detail_index IS NULL) THEN
3546         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3547         engine_debug('----Updating status code for LDETS---------');
3548         END IF;
3549 /*
3550 INDX,QP_PREQ_GRP.set_processed_code.set_processed_code_upd2,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
3551 */
3552         UPDATE qp_npreq_line_attrs_tmp      --upd2
3553         SET PROCESSED_CODE = p_processed_code
3554         WHERE LINE_INDEX = p_line_index;
3555    END IF;
3556 EXCEPTION
3557   WHEN OTHERS THEN
3558    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3559    engine_debug(l_routine||' '||SQLERRM);
3560    END IF;
3561    x_status_code := FND_API.G_RET_STS_ERROR;
3562    x_status_text := l_routine||': '||SQLERRM;
3563 
3564 END SET_PROCESSED_CODE;
3565 
3566 /*+----------------------------------------------------
3567   |PROCEDURE DELETE_ALL_LINES
3568   |This procedure mark qp_npreq_line_attrs_tmp and qp_npreq_ldets_tmp
3569   |for delete. And mark qp_preq_lines status code as
3570   |whatever calling procedure wanted. Which is usually
3571   |not a 'Delete' because record in qp_npreq_lines_tmp
3572   |is the only one which communicates with outside
3573   |world (order managment for example).
3574   +----------------------------------------------------
3575 */
3576 
3577 PROCEDURE DELETE_LINES(p_line_index       IN NUMBER,
3578                        p_line_status_code IN VARCHAR2,
3579                        p_status_text      IN VARCHAR2,
3580                        x_status_code OUT NOCOPY VARCHAR2,
3581                        x_status_text OUT NOCOPY VARCHAR2) AS
3582 
3583 l_routine VARCHAR2(240):='QP_PREQ_GRP.DELETE_LINES';
3584 
3585 l_error_status_code VARCHAR2(30);
3586 l_error_status_text VARCHAR2(240);
3587 
3588 E_ROUTINE_ERRORS EXCEPTION;
3589 
3590 BEGIN
3591        SET_STATUS_CODE(p_line_status_code,
3592                        p_status_text,
3593                        P_LINE_INDEX,
3594                        NULL,
3595                       'LINES',
3596                        l_error_status_code,
3597                        l_error_status_text);
3598 
3599        IF (l_error_status_code = FND_API.G_RET_STS_ERROR) THEN
3600         RAISE E_ROUTINE_ERRORS;
3601        END IF;
3602 
3603        SET_STATUS_CODE(G_STATUS_DELETED,
3604                        p_status_text,
3605                        P_LINE_INDEX,
3606                        NULL,
3607                       'ATTRS',
3608                        l_error_status_code,
3609                        l_error_status_text);
3610 
3611        IF (l_error_status_code = FND_API.G_RET_STS_ERROR) THEN
3612         RAISE E_ROUTINE_ERRORS;
3613        END IF;
3614 
3615        SET_STATUS_CODE(G_STATUS_DELETED,
3616                        p_status_text,
3617                        P_LINE_INDEX,
3618                        NULL,
3619                       'LDETS',
3620                        l_error_status_code,
3621                        l_error_status_text);
3622 
3623        IF (l_error_status_code = FND_API.G_RET_STS_ERROR) THEN
3624         RAISE E_ROUTINE_ERRORS;
3625        END IF;
3626 
3627 EXCEPTION
3628   WHEN E_ROUTINE_ERRORS THEN
3629     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3630      engine_debug(l_routine||': '||l_error_status_text);
3631      END IF;
3632      x_status_code := FND_API.G_RET_STS_ERROR;
3633      x_status_text := l_routine||': '||l_error_status_text;
3634   WHEN OTHERS THEN
3635    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3636      engine_debug(l_routine||' '||SQLERRM);
3637    END IF;
3638    x_status_code := FND_API.G_RET_STS_ERROR;
3639    x_status_text := 'Error in '||l_routine||SQLERRM;
3640 END DELETE_LINES;
3641 
3642 /*+----------------------------------------------------------------------
3643   |Procedure Group INSERT_LINE_ATTRS2_AT
3644   +----------------------------------------------------------------------
3645 */
3646 
3647 PROCEDURE INSERT_LINE_ATTRS2_AT
3648    (    p_LINE_INDEX_tbl                number_type,
3649         p_LINE_DETAIL_INDEX_tbl         pls_integer_type ,
3650         p_ATTRIBUTE_TYPE_tbl            varchar_type,
3651         p_CONTEXT_tbl                   varchar_type,
3652         p_ATTRIBUTE_tbl                 varchar_type,
3653         p_VALUE_FROM_tbl                varchar_type,
3654         p_VALUE_TO_tbl                  varchar_type,
3655         p_VALIDATED_FLAG_tbl            varchar_type,
3656         x_status_code                   OUT NOCOPY VARCHAR2,
3657         x_status_text                   OUT NOCOPY VARCHAR2)
3658 AS
3659  PRAGMA AUTONOMOUS_TRANSACTION;
3660  l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT';
3661  l_request_id number;
3662 
3663 BEGIN
3664  x_status_code := FND_API.G_RET_STS_SUCCESS;
3665  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
3666 
3667 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3668  INSERT INTO QP_INT_LINE_ATTRS_T
3669                 (LINE_INDEX,
3670                  LINE_DETAIL_INDEX,
3671                  ATTRIBUTE_TYPE,
3672                  CONTEXT,
3673                  ATTRIBUTE,
3674                  VALUE_FROM,
3675                  VALUE_TO,
3676                  VALIDATED_FLAG,
3677                  request_id)
3678 VALUES          (p_LINE_INDEX_tbl(i),
3679                  p_LINE_DETAIL_INDEX_tbl(i),
3680                  p_ATTRIBUTE_TYPE_tbl(i),
3681                  p_CONTEXT_tbl(i),
3682                  p_ATTRIBUTE_tbl(i),
3683                  p_VALUE_FROM_tbl(i),
3684                  p_VALUE_TO_tbl(i),
3685                  p_VALIDATED_FLAG_tbl(i),
3686                  l_request_id);
3687  /*INSERT INTO QP_INT_LINE_ATTRS
3688                 (LINE_INDEX,
3689                  LINE_DETAIL_INDEX,
3690                  ATTRIBUTE_TYPE,
3691                  CONTEXT,
3692                  ATTRIBUTE,
3693                  VALUE_FROM,
3694                  VALUE_TO,
3695                  VALIDATED_FLAG)
3696 VALUES          (p_LINE_INDEX_tbl(i),
3697                  p_LINE_DETAIL_INDEX_tbl(i),
3698                  p_ATTRIBUTE_TYPE_tbl(i),
3699                  p_CONTEXT_tbl(i),
3700                  p_ATTRIBUTE_tbl(i),
3701                  p_VALUE_FROM_tbl(i),
3702                  p_VALUE_TO_tbl(i),
3703                  p_VALIDATED_FLAG_tbl(i));
3704 */
3705  QP_PREQ_GRP.G_INT_ATTRS_NO := QP_PREQ_GRP.G_INT_ATTRS_NO + p_LINE_INDEX_tbl.count;
3706  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3707    QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_ATTRS_NO='||QP_PREQ_GRP.G_INT_ATTRS_NO);
3708  END IF;
3709 COMMIT;
3710 EXCEPTION
3711   WHEN OTHERS THEN
3712   x_status_code := FND_API.G_RET_STS_ERROR;
3713   x_status_text :=l_routine||' '||SQLERRM;
3714   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3715    QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
3716   END IF;
3717 END;
3718 
3719 /*+----------------------------------------------------------------------
3720   |Procedure Group INSERT_LINE_ATTRS2
3721   +----------------------------------------------------------------------
3722 */
3723 
3724 PROCEDURE INSERT_LINE_ATTRS2
3725    (    p_LINE_INDEX_tbl                number_type,
3726         p_LINE_DETAIL_INDEX_tbl         pls_integer_type ,
3727         p_ATTRIBUTE_TYPE_tbl            varchar_type,
3728         p_CONTEXT_tbl                   varchar_type,
3729         p_ATTRIBUTE_tbl                 varchar_type,
3730         p_VALUE_FROM_tbl                varchar_type,
3731         p_VALUE_TO_tbl                  varchar_type,
3732         p_VALIDATED_FLAG_tbl            varchar_type,
3733         x_status_code                   OUT NOCOPY VARCHAR2,
3734         x_status_text                   OUT NOCOPY VARCHAR2)
3735 AS
3736  l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2';
3737 --added by yangli for Java Engine 3086881
3738  l_debug varchar2(3);
3739 --added by yangli for Java Engine 3086881
3740 BEGIN
3741 
3742 --added by yangli for Java Engine 3086881
3743 -- Set the global variable G_DEBUG_ENGINE
3744   QP_PREQ_GRP.Set_QP_Debug;
3745 
3746   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
3747 
3748 --added by yangli for Java Engine project
3749 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
3750  IF l_debug = FND_API.G_TRUE THEN
3751         ENGINE_DEBUG('Java Engine not Installed ----------');
3752  END IF;
3753 --added by yangli for Java Engine 3086881
3754  x_status_code := FND_API.G_RET_STS_SUCCESS;
3755 
3756 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3757  INSERT INTO qp_npreq_line_attrs_tmp
3758                 (LINE_INDEX,
3759                  LINE_DETAIL_INDEX,
3760                  ATTRIBUTE_TYPE,
3761                  CONTEXT,
3762                  ATTRIBUTE,
3763                  VALUE_FROM,
3764                  VALUE_TO,
3765                  VALIDATED_FLAG)
3766 VALUES          (p_LINE_INDEX_tbl(i),
3767                  p_LINE_DETAIL_INDEX_tbl(i),
3768                  p_ATTRIBUTE_TYPE_tbl(i),
3769                  p_CONTEXT_tbl(i),
3770                  p_ATTRIBUTE_tbl(i),
3771                  p_VALUE_FROM_tbl(i),
3772                  p_VALUE_TO_tbl(i),
3773                  p_VALIDATED_FLAG_tbl(i));
3774 --added by yangli for Java Engine 3086881
3775 ELSE
3776   IF l_debug = FND_API.G_TRUE THEN
3777         ENGINE_DEBUG('Java Engine Installed ----------');
3778   END IF;
3779   QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT(
3780         p_LINE_INDEX_tbl               ,
3781         p_LINE_DETAIL_INDEX_tbl        ,
3782         p_ATTRIBUTE_TYPE_tbl           ,
3783         p_CONTEXT_tbl                  ,
3784         p_ATTRIBUTE_tbl                ,
3785         p_VALUE_FROM_tbl               ,
3786         p_VALUE_TO_tbl                 ,
3787         p_VALIDATED_FLAG_tbl           ,
3788         x_status_code                  ,
3789         x_status_text
3790 );
3791 
3792 END IF;
3793 --added by yangli for Java Engine 3086881
3794 
3795 EXCEPTION
3796   WHEN OTHERS THEN
3797   x_status_code := FND_API.G_RET_STS_ERROR;
3798   x_status_text :=l_routine||' '||SQLERRM;
3799   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3800   engine_debug(l_routine||' '||SQLERRM);
3801   END IF;
3802 END;
3803 
3804 
3805 /*+-----------------------------------------------------------------------
3806   | PROCEDURE INSERT_LINE_ATTRS
3807   +-----------------------------------------------------------------------
3808 */
3809 PROCEDURE INSERT_LINE_ATTRS
3810    (    p_LINE_INDEX                      IN PLS_INTEGER,
3811         p_LINE_DETAIL_INDEX               IN PLS_INTEGER   :=NULL,
3812         p_ATTRIBUTE_LEVEL                 IN VARCHAR2,
3813         p_ATTRIBUTE_TYPE                  IN VARCHAR2,
3814         p_LIST_HEADER_ID                  IN NUMBER   :=NULL,
3815         p_LIST_LINE_ID                    IN NUMBER   :=NULL,
3816         p_CONTEXT                         IN VARCHAR2,
3817         p_ATTRIBUTE                       IN VARCHAR2,
3818         p_VALUE_FROM                      IN VARCHAR2,
3819         p_SETUP_VALUE_FROM                IN VARCHAR2 :=NULL,
3820         p_VALUE_TO                        IN VARCHAR2 :=NULL,
3821         p_SETUP_VALUE_TO                  IN VARCHAR2 :=NULL,
3822         p_GROUPING_NUMBER                 IN PLS_INTEGER   :=NULL,
3823         p_NO_QUALIFIERS_IN_GRP            IN PLS_INTEGER   :=NULL,
3824         p_COMPARISON_OPERATOR_TYPE        IN VARCHAR2 :=NULL,
3825         p_VALIDATED_FLAG                  IN VARCHAR2 :=NULL,
3826         p_APPLIED_FLAG                    IN VARCHAR2 :=NULL,
3827         p_PRICING_STATUS_CODE             IN VARCHAR2,
3828         p_PRICING_STATUS_TEXT             IN VARCHAR2 :=NULL,
3829         p_QUALIFIER_PRECEDENCE            IN PLS_INTEGER   :=NULL,
3830         p_DATATYPE                        IN VARCHAR2 :=NULL,
3831         p_PRICING_ATTR_FLAG               IN VARCHAR2 :=NULL,
3832         p_QUALIFIER_TYPE                  IN VARCHAR2 :=NULL,
3833         p_product_uom_code                IN VARCHAR2 :=NULL,
3834         p_excluder_flag                   IN VARCHAR2 :=NULL,
3835         x_status_code                     OUT NOCOPY VARCHAR2,
3836         x_status_text                     OUT NOCOPY VARCHAR2)
3837 AS
3838 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS';
3839 BEGIN
3840  x_status_code := FND_API.G_RET_STS_SUCCESS;
3841  INSERT INTO qp_npreq_line_attrs_tmp
3842                 (LINE_INDEX,
3843                  LINE_DETAIL_INDEX,
3844                  ATTRIBUTE_LEVEL,
3845                  ATTRIBUTE_TYPE,
3846                  LIST_HEADER_ID,
3847                  LIST_LINE_ID,
3848                  CONTEXT,
3849                  ATTRIBUTE,
3850                  VALUE_FROM,
3851                  SETUP_VALUE_FROM,
3852                  VALUE_TO,
3853                  SETUP_VALUE_TO,
3854                  GROUPING_NUMBER,
3855                  COMPARISON_OPERATOR_TYPE_CODE,
3856                  VALIDATED_FLAG,
3857                  APPLIED_FLAG,
3858                  PRICING_STATUS_CODE,
3859                  PRICING_STATUS_TEXT,
3860                  QUALIFIER_PRECEDENCE,
3861                  DATATYPE,
3862                  PRICING_ATTR_FLAG,
3863                  QUALIFIER_TYPE,
3864                  PRODUCT_UOM_CODE,
3865                  EXCLUDER_FLAG
3866                 )
3867 VALUES          (p_LINE_INDEX,
3868                  p_LINE_DETAIL_INDEX,
3869                  p_ATTRIBUTE_LEVEL,
3870                  p_ATTRIBUTE_TYPE,
3871                  p_LIST_HEADER_ID,
3872                  p_LIST_LINE_ID,
3873                  p_CONTEXT,
3874                  p_ATTRIBUTE,
3875                  p_VALUE_FROM,
3876                  p_SETUP_VALUE_FROM,
3877                  p_VALUE_TO,
3878                  p_SETUP_VALUE_TO,
3879                  p_GROUPING_NUMBER,
3880                  p_COMPARISON_OPERATOR_TYPE,
3881                  p_VALIDATED_FLAG,
3882                  p_APPLIED_FLAG,
3883                  p_PRICING_STATUS_CODE,
3884                  p_PRICING_STATUS_TEXT,
3885                  p_QUALIFIER_PRECEDENCE,
3886                  p_DATATYPE,
3887                  p_PRICING_ATTR_FLAG,
3888                  p_QUALIFIER_TYPE,
3889                  p_PRODUCT_UOM_CODE,
3890                  p_EXCLUDER_FLAG
3891                 );
3892 EXCEPTION
3893   WHEN OTHERS THEN
3894   x_status_code := FND_API.G_RET_STS_ERROR;
3895   x_status_text :=l_routine||' '||SQLERRM;
3896   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3897   engine_debug(l_routine||' '||SQLERRM);
3898   END IF;
3899 END;
3900 
3901 /*+-----------------------------------------------------------------------
3902   | PROCEDURE INSERT_PRICE_LIST_ATTRS
3903   +-----------------------------------------------------------------------
3904 */
3905 PROCEDURE INSERT_PRICE_LIST_ATTRS
3906    (    p_LINE_INDEX_tbl         pls_integer_type,
3907         p_LINE_DETAIL_INDEX_tbl  pls_integer_type ,
3908         p_ATTRIBUTE_LEVEL_tbl    varchar_type,
3909         p_ATTRIBUTE_TYPE_tbl     varchar_type,
3910         p_LIST_HEADER_ID_tbl     number_type,
3911         p_LIST_LINE_ID_tbl       number_type,
3912         p_CONTEXT_tbl            varchar_type,
3913         p_ATTRIBUTE_tbl          varchar_type,
3914         p_VALUE_FROM_tbl         varchar_type,
3915         p_SETUP_VALUE_FROM_tbl   varchar_type,
3916         p_SETUP_VALUE_TO_tbl     varchar_type,
3917         p_GROUPING_NUMBER_tbl    pls_integer_type,
3918         p_COMPARISON_OPERATOR_TYPE_tbl  varchar_type,
3919         p_VALIDATED_FLAG_tbl            varchar_type,
3920         p_APPLIED_FLAG_tbl              varchar_type,
3921         p_PRICING_STATUS_CODE_tbl       varchar_type,
3922         p_PRICING_STATUS_TEXT_tbl       varchar_type,
3923         p_QUALIFIER_PRECEDENCE_tbl      pls_integer_type,
3924         p_DATATYPE_tbl                  varchar_type,
3925         p_PRICING_ATTR_FLAG_tbl         varchar_type,
3926         p_QUALIFIER_TYPE_tbl            varchar_type,
3927         p_PRODUCT_UOM_CODE_TBL          varchar_type,
3928         p_EXCLUDER_FLAG_TBL             varchar_type ,
3929         p_PRICING_PHASE_ID_TBL          pls_integer_type ,
3930         p_INCOMPATABILITY_GRP_CODE_TBL  varchar_type ,
3931         p_LINE_DETAIL_TYPE_CODE_TBL     varchar_type ,
3932         p_MODIFIER_LEVEL_CODE_TBL       varchar_type ,
3933         p_PRIMARY_UOM_FLAG_TBL          varchar_type ,
3934         x_status_code                   OUT NOCOPY VARCHAR2,
3935         x_status_text                   OUT NOCOPY VARCHAR2)
3936 AS
3937 
3938 
3939 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_PRICE_LIST_ATTRS';
3940 BEGIN
3941  x_status_code := FND_API.G_RET_STS_SUCCESS;
3942 
3943 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3944  INSERT INTO qp_npreq_line_attrs_tmp
3945                 (LINE_INDEX,
3946                  LINE_DETAIL_INDEX,
3947                  ATTRIBUTE_LEVEL,
3948                  ATTRIBUTE_TYPE,
3949                  LIST_HEADER_ID,
3950                  LIST_LINE_ID,
3951                  CONTEXT,
3952                  ATTRIBUTE,
3953                  VALUE_FROM,
3954                  SETUP_VALUE_FROM,
3955                  SETUP_VALUE_TO,
3956                  GROUPING_NUMBER,
3957                  COMPARISON_OPERATOR_TYPE_CODE,
3958                  VALIDATED_FLAG,
3959                  APPLIED_FLAG,
3960                  PRICING_STATUS_CODE,
3961                  PRICING_STATUS_TEXT,
3962                  QUALIFIER_PRECEDENCE,
3963                  DATATYPE,
3964                  PRICING_ATTR_FLAG,
3965                  QUALIFIER_TYPE,
3966                  PRODUCT_UOM_CODE,
3967                  EXCLUDER_FLAG,
3968                  PRICING_PHASE_ID,
3969                  INCOMPATABILITY_GRP_CODE,
3970                  LINE_DETAIL_TYPE_CODE,
3971                  MODIFIER_LEVEL_CODE,
3972                  PRIMARY_UOM_FLAG
3973                 )
3974 VALUES          (p_LINE_INDEX_tbl(i),
3975                  p_LINE_DETAIL_INDEX_tbl(i),
3976                  p_ATTRIBUTE_LEVEL_tbl(i),
3977                  p_ATTRIBUTE_TYPE_tbl(i),
3978                  p_LIST_HEADER_ID_tbl(i),
3979                  p_LIST_LINE_ID_tbl(i),
3980                  p_CONTEXT_tbl(i),
3981                  p_ATTRIBUTE_tbl(i),
3982                  p_VALUE_FROM_tbl(i),
3983                  p_SETUP_VALUE_FROM_tbl(i),
3984                  p_SETUP_VALUE_TO_tbl(i),
3985                  p_GROUPING_NUMBER_tbl(i),
3986                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
3987                  p_VALIDATED_FLAG_tbl(i),
3988                  p_APPLIED_FLAG_tbl(i),
3989                  p_PRICING_STATUS_CODE_tbl(i),
3990                  p_PRICING_STATUS_TEXT_tbl(i),
3991                  p_QUALIFIER_PRECEDENCE_tbl(i),
3992                  p_DATATYPE_tbl(i),
3993                  p_PRICING_ATTR_FLAG_tbl(i),
3994                  p_QUALIFIER_TYPE_tbl(i),
3995                  p_PRODUCT_UOM_CODE_tbl(i),
3996                  p_EXCLUDER_FLAG_TBL(i),
3997                  p_PRICING_PHASE_ID_TBL(i),
3998                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
3999                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
4000                  p_MODIFIER_LEVEL_CODE_TBL(i),
4001                  p_PRIMARY_UOM_FLAG_TBL(i)
4002                 );
4003 EXCEPTION
4004   WHEN OTHERS THEN
4005   x_status_code := FND_API.G_RET_STS_ERROR;
4006   x_status_text :=l_routine||' '||SQLERRM;
4007   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4008   engine_debug(l_routine||' '||SQLERRM);
4009   END IF;
4010 END;
4011 
4012 /*+-----------------------------------------------------------------------
4013   | PROCEDURE INSERT_LINE_ATTRS2_AT
4014   +-----------------------------------------------------------------------
4015 */
4016 PROCEDURE INSERT_LINE_ATTRS2_AT
4017    (    p_LINE_INDEX_tbl         pls_integer_type,
4018         p_LINE_DETAIL_INDEX_tbl  pls_integer_type ,
4019         p_ATTRIBUTE_LEVEL_tbl    varchar_type,
4020         p_ATTRIBUTE_TYPE_tbl     varchar_type,
4021         p_LIST_HEADER_ID_tbl     number_type,
4022         p_LIST_LINE_ID_tbl       number_type,
4023         p_CONTEXT_tbl            varchar_type,
4024         p_ATTRIBUTE_tbl          varchar_type,
4025         p_VALUE_FROM_tbl         varchar_type,
4026         p_SETUP_VALUE_FROM_tbl   varchar_type,
4027         p_VALUE_TO_tbl           varchar_type,
4028         p_SETUP_VALUE_TO_tbl     varchar_type,
4029         p_GROUPING_NUMBER_tbl    pls_integer_type,
4030         p_NO_QUALIFIERS_IN_GRP_tbl      pls_integer_type,
4031         p_COMPARISON_OPERATOR_TYPE_tbl  varchar_type,
4032         p_VALIDATED_FLAG_tbl            varchar_type,
4033         p_APPLIED_FLAG_tbl              varchar_type,
4034         p_PRICING_STATUS_CODE_tbl       varchar_type,
4035         p_PRICING_STATUS_TEXT_tbl       varchar_type,
4036         p_QUALIFIER_PRECEDENCE_tbl      pls_integer_type,
4037         p_DATATYPE_tbl                  varchar_type,
4038         p_PRICING_ATTR_FLAG_tbl         varchar_type,
4039         p_QUALIFIER_TYPE_tbl            varchar_type,
4040         p_PRODUCT_UOM_CODE_TBL          varchar_type,
4041         p_EXCLUDER_FLAG_TBL             varchar_type ,
4042         p_PRICING_PHASE_ID_TBL          pls_integer_type ,
4043         p_INCOMPATABILITY_GRP_CODE_TBL  varchar_type ,
4044         p_LINE_DETAIL_TYPE_CODE_TBL     varchar_type ,
4045         p_MODIFIER_LEVEL_CODE_TBL       varchar_type ,
4046         p_PRIMARY_UOM_FLAG_TBL          varchar_type ,
4047         x_status_code                   OUT NOCOPY VARCHAR2,
4048         x_status_text                   OUT NOCOPY VARCHAR2)
4049 AS
4050 PRAGMA AUTONOMOUS_TRANSACTION;
4051 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT';
4052 l_request_id number;
4053 BEGIN
4054  x_status_code := FND_API.G_RET_STS_SUCCESS;
4055  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
4056 
4057  FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
4058  /*INSERT INTO QP_INT_LINE_ATTRS
4059                 ( LINE_INDEX,
4060                  LINE_DETAIL_INDEX,
4061                  ATTRIBUTE_LEVEL,
4062                  ATTRIBUTE_TYPE,
4063                  LIST_HEADER_ID,
4064                  LIST_LINE_ID,
4065                  CONTEXT,
4066                  ATTRIBUTE,
4067                  VALUE_FROM,
4068                  SETUP_VALUE_FROM,
4069                  VALUE_TO,
4070                  SETUP_VALUE_TO,
4071                  GROUPING_NUMBER,
4072                  COMPARISON_OPERATOR_TYPE_CODE,
4073                  VALIDATED_FLAG,
4074                  APPLIED_FLAG,
4075                  PRICING_STATUS_CODE,
4076                  PRICING_STATUS_TEXT,
4077                  QUALIFIER_PRECEDENCE,
4078                  DATATYPE,
4079                  PRICING_ATTR_FLAG,
4080                  QUALIFIER_TYPE,
4081                  PRODUCT_UOM_CODE,
4082                  EXCLUDER_FLAG,
4083                  PRICING_PHASE_ID,
4084                  INCOMPATABILITY_GRP_CODE,
4085                  LINE_DETAIL_TYPE_CODE,
4086                  MODIFIER_LEVEL_CODE,
4087                  PRIMARY_UOM_FLAG
4088                 )
4089 VALUES          ( p_LINE_INDEX_tbl(i),
4090                  p_LINE_DETAIL_INDEX_tbl(i),
4091                  p_ATTRIBUTE_LEVEL_tbl(i),
4092                  p_ATTRIBUTE_TYPE_tbl(i),
4093                  --made changes to fix bug 2374591 ask for promotions not
4094                  --getting applied in performance code path
4095                  decode(p_CONTEXT_tbl(i)||p_ATTRIBUTE_tbl(i),G_LIST_HEADER_CONTEXT||G_PROMOTION_ATTRIBUTE,p_VALUE_FROM_tbl(i),p_LIST_HEADER_ID_tbl(i)),
4096                  decode(p_CONTEXT_tbl(i)||p_ATTRIBUTE_tbl(i),G_LIST_HEADER_CONTEXT||G_QUAL_ATTRIBUTE2,p_VALUE_FROM_tbl(i),p_LIST_LINE_ID_tbl(i)),
4097                  p_CONTEXT_tbl(i),
4098                  p_ATTRIBUTE_tbl(i),
4099                  p_VALUE_FROM_tbl(i),
4100                  p_SETUP_VALUE_FROM_tbl(i),
4101                  p_VALUE_TO_tbl(i),
4102                  p_SETUP_VALUE_TO_tbl(i),
4103                  p_GROUPING_NUMBER_tbl(i),
4104                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
4105                  p_VALIDATED_FLAG_tbl(i),
4106                  p_APPLIED_FLAG_tbl(i),
4107                  p_PRICING_STATUS_CODE_tbl(i),
4108                  p_PRICING_STATUS_TEXT_tbl(i),
4109                  p_QUALIFIER_PRECEDENCE_tbl(i),
4110                  p_DATATYPE_tbl(i),
4111                  p_PRICING_ATTR_FLAG_tbl(i),
4112                  p_QUALIFIER_TYPE_tbl(i),
4113                  p_PRODUCT_UOM_CODE_tbl(i),
4114                  p_EXCLUDER_FLAG_TBL(i),
4115                  p_PRICING_PHASE_ID_TBL(i),
4116                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
4117                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
4118                  p_MODIFIER_LEVEL_CODE_TBL(i),
4119                  p_PRIMARY_UOM_FLAG_TBL(i)
4120                 );*/
4121  INSERT INTO QP_INT_LINE_ATTRS_T
4122                 ( LINE_INDEX,
4123                  LINE_DETAIL_INDEX,
4124                  ATTRIBUTE_LEVEL,
4125                  ATTRIBUTE_TYPE,
4126                  LIST_HEADER_ID,
4127                  LIST_LINE_ID,
4128                  CONTEXT,
4129                  ATTRIBUTE,
4130                  VALUE_FROM,
4131                  SETUP_VALUE_FROM,
4132                  VALUE_TO,
4133                  SETUP_VALUE_TO,
4134                  GROUPING_NUMBER,
4135                  COMPARISON_OPERATOR_TYPE_CODE,
4136                  VALIDATED_FLAG,
4137                  APPLIED_FLAG,
4138                  PRICING_STATUS_CODE,
4139                  PRICING_STATUS_TEXT,
4140                  QUALIFIER_PRECEDENCE,
4141                  DATATYPE,
4142                  PRICING_ATTR_FLAG,
4143                  QUALIFIER_TYPE,
4144                  PRODUCT_UOM_CODE,
4145                  EXCLUDER_FLAG,
4146                  PRICING_PHASE_ID,
4147                  INCOMPATABILITY_GRP_CODE,
4148                  LINE_DETAIL_TYPE_CODE,
4149                  MODIFIER_LEVEL_CODE,
4150                  PRIMARY_UOM_FLAG,
4151                  request_id
4152                 )
4153 VALUES          ( p_LINE_INDEX_tbl(i),
4154                  p_LINE_DETAIL_INDEX_tbl(i),
4155                  p_ATTRIBUTE_LEVEL_tbl(i),
4156                  p_ATTRIBUTE_TYPE_tbl(i),
4157                  --made changes to fix bug 2374591 ask for promotions not
4158                  --getting applied in performance code path
4159                  decode(p_CONTEXT_tbl(i)||p_ATTRIBUTE_tbl(i),G_LIST_HEADER_CONTEXT||G_PROMOTION_ATTRIBUTE,p_VALUE_FROM_tbl(i),p_LIST_HEADER_ID_tbl(i)),
4160                  decode(p_CONTEXT_tbl(i)||p_ATTRIBUTE_tbl(i),G_LIST_HEADER_CONTEXT||G_QUAL_ATTRIBUTE2,p_VALUE_FROM_tbl(i),p_LIST_LINE_ID_tbl(i)),
4161                  p_CONTEXT_tbl(i),
4162                  p_ATTRIBUTE_tbl(i),
4163                  p_VALUE_FROM_tbl(i),
4164                  p_SETUP_VALUE_FROM_tbl(i),
4165                  p_VALUE_TO_tbl(i),
4166                  p_SETUP_VALUE_TO_tbl(i),
4167                  p_GROUPING_NUMBER_tbl(i),
4168                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
4169                  p_VALIDATED_FLAG_tbl(i),
4170                  p_APPLIED_FLAG_tbl(i),
4171                  p_PRICING_STATUS_CODE_tbl(i),
4172                  p_PRICING_STATUS_TEXT_tbl(i),
4173                  p_QUALIFIER_PRECEDENCE_tbl(i),
4174                  p_DATATYPE_tbl(i),
4175                  p_PRICING_ATTR_FLAG_tbl(i),
4176                  p_QUALIFIER_TYPE_tbl(i),
4177                  p_PRODUCT_UOM_CODE_tbl(i),
4178                  p_EXCLUDER_FLAG_TBL(i),
4179                  p_PRICING_PHASE_ID_TBL(i),
4180                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
4181                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
4182                  p_MODIFIER_LEVEL_CODE_TBL(i),
4183                  p_PRIMARY_UOM_FLAG_TBL(i),
4184                  l_request_id
4185                 );
4186  QP_PREQ_GRP.G_INT_ATTRS_NO := QP_PREQ_GRP.G_INT_ATTRS_NO + p_LINE_INDEX_tbl.count;
4187   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4188     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_ATTRS_NO='||QP_PREQ_GRP.G_INT_ATTRS_NO);
4189   END IF;
4190 
4191  COMMIT;
4192 EXCEPTION
4193   WHEN OTHERS THEN
4194   x_status_code := FND_API.G_RET_STS_ERROR;
4195   x_status_text :=l_routine||' '||SQLERRM;
4196   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4197     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
4198   END IF;
4199 END;
4200 
4201 /*+-----------------------------------------------------------------------
4202   | PROCEDURE INSERT_LINE_ATTRS2
4203   +-----------------------------------------------------------------------
4204 */
4205 PROCEDURE INSERT_LINE_ATTRS2
4206    (    p_LINE_INDEX_tbl         pls_integer_type,
4207         p_LINE_DETAIL_INDEX_tbl  pls_integer_type ,
4208         p_ATTRIBUTE_LEVEL_tbl    varchar_type,
4209         p_ATTRIBUTE_TYPE_tbl     varchar_type,
4210         p_LIST_HEADER_ID_tbl     number_type,
4211         p_LIST_LINE_ID_tbl       number_type,
4212         p_CONTEXT_tbl            varchar_type,
4213         p_ATTRIBUTE_tbl          varchar_type,
4214         p_VALUE_FROM_tbl         varchar_type,
4215         p_SETUP_VALUE_FROM_tbl   varchar_type,
4216         p_VALUE_TO_tbl           varchar_type,
4217         p_SETUP_VALUE_TO_tbl     varchar_type,
4218         p_GROUPING_NUMBER_tbl    pls_integer_type,
4219         p_NO_QUALIFIERS_IN_GRP_tbl      pls_integer_type,
4220         p_COMPARISON_OPERATOR_TYPE_tbl  varchar_type,
4221         p_VALIDATED_FLAG_tbl            varchar_type,
4222         p_APPLIED_FLAG_tbl              varchar_type,
4223         p_PRICING_STATUS_CODE_tbl       varchar_type,
4224         p_PRICING_STATUS_TEXT_tbl       varchar_type,
4225         p_QUALIFIER_PRECEDENCE_tbl      pls_integer_type,
4226         p_DATATYPE_tbl                  varchar_type,
4227         p_PRICING_ATTR_FLAG_tbl         varchar_type,
4228         p_QUALIFIER_TYPE_tbl            varchar_type,
4229         p_PRODUCT_UOM_CODE_TBL          varchar_type,
4230         p_EXCLUDER_FLAG_TBL             varchar_type ,
4231         p_PRICING_PHASE_ID_TBL          pls_integer_type ,
4232         p_INCOMPATABILITY_GRP_CODE_TBL  varchar_type ,
4233         p_LINE_DETAIL_TYPE_CODE_TBL     varchar_type ,
4234         p_MODIFIER_LEVEL_CODE_TBL       varchar_type ,
4235         p_PRIMARY_UOM_FLAG_TBL          varchar_type ,
4236         x_status_code                   OUT NOCOPY VARCHAR2,
4237         x_status_text                   OUT NOCOPY VARCHAR2)
4238 AS
4239 
4240 
4241 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2';
4242 --added by yangli for Java Engine 3086881
4243 l_debug varchar2(3);
4244 BEGIN
4245 --added by yangli for Java Engine 3086881
4246 -- Set the global variable G_DEBUG_ENGINE
4247   QP_PREQ_GRP.Set_QP_Debug;
4248 
4249   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
4250 
4251 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
4252  IF l_debug = FND_API.G_TRUE THEN
4253         ENGINE_DEBUG('Java Engine not Installed ----------');
4254  END IF;
4255 --added by yangli for Java Engine 3086881
4256 
4257  x_status_code := FND_API.G_RET_STS_SUCCESS;
4258 
4259 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
4260  INSERT INTO qp_npreq_line_attrs_tmp
4261                 (LINE_INDEX,
4262                  LINE_DETAIL_INDEX,
4263                  ATTRIBUTE_LEVEL,
4264                  ATTRIBUTE_TYPE,
4265                  LIST_HEADER_ID,
4266                  LIST_LINE_ID,
4267                  CONTEXT,
4268                  ATTRIBUTE,
4269                  VALUE_FROM,
4270                  SETUP_VALUE_FROM,
4271                  VALUE_TO,
4272                  SETUP_VALUE_TO,
4273                  GROUPING_NUMBER,
4274                  COMPARISON_OPERATOR_TYPE_CODE,
4275                  VALIDATED_FLAG,
4276                  APPLIED_FLAG,
4277                  PRICING_STATUS_CODE,
4278                  PRICING_STATUS_TEXT,
4279                  QUALIFIER_PRECEDENCE,
4280                  DATATYPE,
4281                  PRICING_ATTR_FLAG,
4282                  QUALIFIER_TYPE,
4283                  PRODUCT_UOM_CODE,
4284                  EXCLUDER_FLAG,
4285                  PRICING_PHASE_ID,
4286                  INCOMPATABILITY_GRP_CODE,
4287                  LINE_DETAIL_TYPE_CODE,
4288                  MODIFIER_LEVEL_CODE,
4289                  PRIMARY_UOM_FLAG
4290                 )
4291 VALUES          (p_LINE_INDEX_tbl(i),
4292                  p_LINE_DETAIL_INDEX_tbl(i),
4293                  p_ATTRIBUTE_LEVEL_tbl(i),
4294                  p_ATTRIBUTE_TYPE_tbl(i),
4295 		 --made changes to fix bug 2374591 ask for promotions not
4296 		 --getting applied in performance code path
4297                  decode(p_CONTEXT_tbl(i)||p_ATTRIBUTE_tbl(i),G_LIST_HEADER_CONTEXT||G_PROMOTION_ATTRIBUTE,p_VALUE_FROM_tbl(i),p_LIST_HEADER_ID_tbl(i)),
4298                  decode(p_CONTEXT_tbl(i)||p_ATTRIBUTE_tbl(i),G_LIST_HEADER_CONTEXT||G_QUAL_ATTRIBUTE2,p_VALUE_FROM_tbl(i),p_LIST_LINE_ID_tbl(i)),
4299                  p_CONTEXT_tbl(i),
4300                  p_ATTRIBUTE_tbl(i),
4301                  p_VALUE_FROM_tbl(i),
4302                  p_SETUP_VALUE_FROM_tbl(i),
4303                  p_VALUE_TO_tbl(i),
4304                  p_SETUP_VALUE_TO_tbl(i),
4305                  p_GROUPING_NUMBER_tbl(i),
4306                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
4307                  p_VALIDATED_FLAG_tbl(i),
4308                  p_APPLIED_FLAG_tbl(i),
4309                  p_PRICING_STATUS_CODE_tbl(i),
4310                  p_PRICING_STATUS_TEXT_tbl(i),
4311                  p_QUALIFIER_PRECEDENCE_tbl(i),
4312                  p_DATATYPE_tbl(i),
4313                  p_PRICING_ATTR_FLAG_tbl(i),
4314                  p_QUALIFIER_TYPE_tbl(i),
4315                  p_PRODUCT_UOM_CODE_tbl(i),
4316                  p_EXCLUDER_FLAG_TBL(i),
4317                  p_PRICING_PHASE_ID_TBL(i),
4318                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
4319                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
4320                  p_MODIFIER_LEVEL_CODE_TBL(i),
4321                  p_PRIMARY_UOM_FLAG_TBL(i)
4322                 );
4323 --added by yangli for Java Engine 3086881
4324 ELSE
4325  IF l_debug = FND_API.G_TRUE THEN
4326         ENGINE_DEBUG('Java Engine Installed ----------');
4327  END IF;
4328 QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT
4329 (   p_LINE_INDEX_tbl         ,
4330         p_LINE_DETAIL_INDEX_tbl  ,
4331         p_ATTRIBUTE_LEVEL_tbl    ,
4332         p_ATTRIBUTE_TYPE_tbl     ,
4333         p_LIST_HEADER_ID_tbl     ,
4334         p_LIST_LINE_ID_tbl       ,
4335         p_CONTEXT_tbl            ,
4336         p_ATTRIBUTE_tbl          ,
4337         p_VALUE_FROM_tbl         ,
4338         p_SETUP_VALUE_FROM_tbl   ,
4339         p_VALUE_TO_tbl           ,
4340         p_SETUP_VALUE_TO_tbl     ,
4341         p_GROUPING_NUMBER_tbl    ,
4342         p_NO_QUALIFIERS_IN_GRP_tbl      ,
4343         p_COMPARISON_OPERATOR_TYPE_tbl  ,
4344         p_VALIDATED_FLAG_tbl            ,
4345         p_APPLIED_FLAG_tbl              ,
4346         p_PRICING_STATUS_CODE_tbl       ,
4347         p_PRICING_STATUS_TEXT_tbl       ,
4348         p_QUALIFIER_PRECEDENCE_tbl      ,
4349         p_DATATYPE_tbl                  ,
4350         p_PRICING_ATTR_FLAG_tbl         ,
4351         p_QUALIFIER_TYPE_tbl            ,
4352         p_PRODUCT_UOM_CODE_TBL          ,
4353         p_EXCLUDER_FLAG_TBL             ,
4354         p_PRICING_PHASE_ID_TBL          ,
4355         p_INCOMPATABILITY_GRP_CODE_TBL  ,
4356         p_LINE_DETAIL_TYPE_CODE_TBL     ,
4357         p_MODIFIER_LEVEL_CODE_TBL       ,
4358         p_PRIMARY_UOM_FLAG_TBL          ,
4359         x_status_code                   ,
4360         x_status_text                   );
4361 
4362 END IF;
4363 --added by yangli for Java Engine 3086881
4364 
4365 EXCEPTION
4366   WHEN OTHERS THEN
4367   x_status_code := FND_API.G_RET_STS_ERROR;
4368   x_status_text :=l_routine||' '||SQLERRM;
4369   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4370   engine_debug(l_routine||' '||SQLERRM);
4371   END IF;
4372 END;
4373 
4374 /*+-----------------------------------------------------------------------
4375   |PROCEDURE INSERT_LINES
4376   +-----------------------------------------------------------------------
4377 */
4378 PROCEDURE INSERT_LINES
4379                 (p_LINE_INDEX              IN PLS_INTEGER,
4380                  p_LINE_TYPE_CODE          IN VARCHAR2,
4381                  p_PRICING_EFFECTIVE_DATE  IN DATE   :=NULL,
4382                  p_ACTIVE_DATE_FIRST       IN DATE   :=NULL,
4383                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR2 :=NULL,
4384                  p_ACTIVE_DATE_SECOND      IN DATE   :=NULL,
4385                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR2 :=NULL,
4386                  p_LINE_QUANTITY           IN NUMBER :=NULL,
4387                  p_LINE_UOM_CODE          IN VARCHAR2:=NULL,
4388                  p_REQUEST_TYPE_CODE      IN VARCHAR2:=NULL,
4389                  p_PRICED_QUANTITY        IN NUMBER :=NULL,
4390                  p_PRICED_UOM_CODE        IN VARCHAR2:=NULL,
4391                  p_CURRENCY_CODE          IN VARCHAR2:=NULL,
4392                  p_UNIT_PRICE             IN NUMBER:=NULL,
4393                  p_PERCENT_PRICE          IN NUMBER:=NULL,
4394                  p_UOM_QUANTITY           IN NUMBER :=NULL,
4395                  p_ADJUSTED_UNIT_PRICE    IN NUMBER:=NULL,
4396                  p_PROCESSED_FLAG         IN VARCHAR2:=NULL,
4397                  p_PRICE_FLAG             IN VARCHAR2,
4398                  p_LINE_ID                IN NUMBER:=NULL,
4399                  p_PROCESSING_ORDER       IN PLS_INTEGER:=NULL,
4400                  p_PRICING_STATUS_CODE    IN VARCHAR2,
4401                  p_PRICING_STATUS_TEXT    IN VARCHAR2:=NULL,
4402                  p_ROUNDING_FLAG          IN VARCHAR2:=NULL,
4403                  p_LINE_CATEGORY          IN VARCHAR2:=NULL,
4404                  p_charge_periodicity_code IN VARCHAR2:=NULL,
4405                  x_status_code            OUT NOCOPY VARCHAR2,
4406                  x_status_text            OUT NOCOPY VARCHAR2 )
4407 AS
4408 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES';
4409 BEGIN
4410 x_status_code := FND_API.G_RET_STS_SUCCESS;
4411 INSERT INTO qp_npreq_lines_tmp
4412                 (LINE_INDEX,
4413                  LINE_TYPE_CODE,
4414                  PRICING_EFFECTIVE_DATE,
4415                  START_DATE_ACTIVE_FIRST,
4416                  ACTIVE_DATE_FIRST_TYPE,
4417                  START_DATE_ACTIVE_SECOND,
4418                  ACTIVE_DATE_SECOND_TYPE,
4419                  LINE_QUANTITY,
4420                  LINE_UOM_CODE,
4421                  REQUEST_TYPE_CODE,
4422                  PRICED_QUANTITY,
4423                  PRICED_UOM_CODE,
4424                  CURRENCY_CODE,
4425                  UNIT_PRICE,
4426                  PERCENT_PRICE,
4427                  UOM_QUANTITY,
4428                  ADJUSTED_UNIT_PRICE,
4429                  PROCESSED_FLAG,
4430                  PRICE_FLAG,
4431                  LINE_ID,
4432                  PROCESSING_ORDER,
4433                  ROUNDING_FLAG,
4434                  PRICING_STATUS_CODE,
4435                  PRICING_STATUS_TEXT,
4436                  LINE_CATEGORY,
4437                  CHARGE_PERIODICITY_CODE)
4438 VALUES (         p_LINE_INDEX,
4439                  p_LINE_TYPE_CODE,
4440                  p_PRICING_EFFECTIVE_DATE,
4441                  p_ACTIVE_DATE_FIRST,
4442                  p_ACTIVE_DATE_FIRST_TYPE,
4443                  p_ACTIVE_DATE_SECOND,
4444                  p_ACTIVE_DATE_SECOND_TYPE,
4445                  p_LINE_QUANTITY,
4446                  p_LINE_UOM_CODE,
4447                  p_REQUEST_TYPE_CODE,
4448                  p_PRICED_QUANTITY,
4449                  p_PRICED_UOM_CODE ,
4450                  p_CURRENCY_CODE,
4451                  p_UNIT_PRICE ,
4452                  p_PERCENT_PRICE,
4453                  p_UOM_QUANTITY,
4454                  p_ADJUSTED_UNIT_PRICE,
4455                  p_PROCESSED_FLAG,
4456                  p_PRICE_FLAG,
4457                  p_LINE_ID,
4458                  P_PROCESSING_ORDER,
4459                  P_ROUNDING_FLAG,
4460                  p_PRICING_STATUS_CODE,
4461                  p_PRICING_STATUS_TEXT,
4462                  p_LINE_CATEGORY,
4463                  p_CHARGE_PERIODICITY_CODE
4464                  );
4465 EXCEPTION
4466   WHEN OTHERS THEN
4467   x_status_code := FND_API.G_RET_STS_ERROR;
4468   x_status_text :=l_routine||' '||SQLERRM;
4469   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4470   engine_debug(l_routine||' '||SQLERRM);
4471   engine_debug(SQLERRM);
4472   END IF;
4473 END;
4474 
4475 /*+----------------------------------------------------------------------
4476   |Procedure Group INSERT_LINES2_AT
4477   +----------------------------------------------------------------------
4478 */
4479 
4480 PROCEDURE INSERT_LINES2_AT
4481                 (p_LINE_INDEX              IN NUMBER_TYPE,
4482                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4483                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4484                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4485                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4486                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4487                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4488                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4489                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4490                  p_REQUEST_TYPE_CODE       IN VARCHAR_TYPE,
4491                  p_PRICED_QUANTITY         IN NUMBER_TYPE,
4492                  p_PRICED_UOM_CODE         IN VARCHAR_TYPE,
4493                  p_CURRENCY_CODE           IN VARCHAR_TYPE,
4494                  p_UNIT_PRICE              IN NUMBER_TYPE,
4495                  p_ADJUSTED_UNIT_PRICE     IN NUMBER_TYPE,
4496                  p_UPD_ADJUSTED_UNIT_PRICE IN NUMBER_TYPE,
4497                  p_UOM_QUANTITY            IN NUMBER_TYPE,
4498                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4499                  p_LINE_ID                IN NUMBER_TYPE,
4500                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4501                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4502                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4503 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4504                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4505                  p_CONTRACT_START_DATE	  IN DATE_TYPE,
4506                  p_CONTRACT_END_DATE	  IN DATE_TYPE,
4507 		 p_CATCHWEIGHT_QTY	  IN NUMBER_TYPE,
4508 		 p_ACTUAL_ORDER_QTY	  IN NUMBER_TYPE,
4509 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE,
4510                  p_charge_periodicity_code IN  VARCHAR_3_TYPE,
4511                  x_status_code            OUT NOCOPY VARCHAR2,
4512                  x_status_text            OUT NOCOPY VARCHAR2 )
4513 AS
4514 PRAGMA AUTONOMOUS_TRANSACTION;
4515  l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2_AT';
4516  l_request_id number;
4517 BEGIN
4518  x_status_code := FND_API.G_RET_STS_SUCCESS;
4519  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
4520 
4521 FORALL i in p_line_index.FIRST..p_line_index.LAST
4522 /*INSERT INTO QP_INT_LINES
4523                 (LINE_INDEX,
4524                  LINE_TYPE_CODE,
4525                  PRICING_EFFECTIVE_DATE,
4526                  START_DATE_ACTIVE_FIRST,
4527                  ACTIVE_DATE_FIRST_TYPE,
4528                  START_DATE_ACTIVE_SECOND,
4529                  ACTIVE_DATE_SECOND_TYPE,
4530                  LINE_QUANTITY,
4531                  LINE_UOM_CODE,
4532                  REQUEST_TYPE_CODE,
4533                  PRICED_QUANTITY,
4534                  PRICED_UOM_CODE,
4535                  CURRENCY_CODE,
4536                  UNIT_PRICE,
4537                  ADJUSTED_UNIT_PRICE,
4538                  PRICE_FLAG,
4539                  UOM_QUANTITY,
4540                  LINE_ID,
4541                  ROUNDING_FACTOR,
4542                  UPDATED_ADJUSTED_UNIT_PRICE,
4543                  PRICE_LIST_HEADER_ID,
4544                  PRICE_REQUEST_CODE,
4545                  USAGE_PRICING_TYPE,
4546                  LINE_CATEGORY,
4547                  CONTRACT_START_DATE,
4548                  CONTRACT_END_DATE,
4549                  CATCHWEIGHT_QTY,
4550                  ACTUAL_ORDER_QUANTITY,
4551 		 LIST_PRICE_OVERRIDE_FLAG, --po integration
4552                  CHARGE_PERIODICITY_CODE,
4553 		 ORDER_UOM_SELLING_PRICE
4554 	        )
4555 VALUES (         p_LINE_INDEX(i),
4556                  p_LINE_TYPE_CODE(i),
4557                  p_PRICING_EFFECTIVE_DATE(i),
4558                  p_ACTIVE_DATE_FIRST(i),
4559                  p_ACTIVE_DATE_FIRST_TYPE(i),
4560                  p_ACTIVE_DATE_SECOND(i),
4561                  p_ACTIVE_DATE_SECOND_TYPE(i),
4562                  p_LINE_QUANTITY(i),
4563                  p_LINE_UOM_CODE(i),
4564                  p_REQUEST_TYPE_CODE(i),
4565                  p_PRICED_QUANTITY(i),
4566                  p_PRICED_UOM_CODE (i),
4567                  p_CURRENCY_CODE(i),
4568                  p_UNIT_PRICE (i),
4569                  p_ADJUSTED_UNIT_PRICE(i),
4570                  p_PRICE_FLAG(i),
4571                  p_UOM_QUANTITY(i),
4572                  p_LINE_ID(i),
4573                  P_ROUNDING_FACTOR(i),
4574                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4575                  nvl(p_PRICE_LIST_ID(i),-9999),
4576                  p_PRICE_REQUEST_CODE(i),
4577                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4578                  p_LINE_CATEGORY(i),
4579                  p_CONTRACT_START_DATE(i),
4580                  p_CONTRACT_END_DATE(i),
4581                  p_CATCHWEIGHT_QTY(i),
4582                  p_ACTUAL_ORDER_QTY(i),
4583 		 nvl (p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'),
4584                  p_CHARGE_PERIODICITY_CODE,
4585 		 p_UNIT_PRICE(i)-- po integration
4586      );*/
4587 INSERT INTO QP_INT_LINES_t
4588                 (LINE_INDEX,
4589                  LINE_TYPE_CODE,
4590                  PRICING_EFFECTIVE_DATE,
4591                  START_DATE_ACTIVE_FIRST,
4592                  ACTIVE_DATE_FIRST_TYPE,
4593                  START_DATE_ACTIVE_SECOND,
4594                  ACTIVE_DATE_SECOND_TYPE,
4595                  LINE_QUANTITY,
4596                  LINE_UOM_CODE,
4597                  REQUEST_TYPE_CODE,
4598                  PRICED_QUANTITY,
4599                  PRICED_UOM_CODE,
4600                  CURRENCY_CODE,
4601                  UNIT_PRICE,
4602                  ADJUSTED_UNIT_PRICE,
4603                  PRICE_FLAG,
4604                  UOM_QUANTITY,
4605                  LINE_ID,
4606                  ROUNDING_FACTOR,
4607                  UPDATED_ADJUSTED_UNIT_PRICE,
4608                  PRICE_LIST_HEADER_ID,
4609                  PRICE_REQUEST_CODE,
4610                  USAGE_PRICING_TYPE,
4611                  LINE_CATEGORY,
4612                  CONTRACT_START_DATE,
4613                  CONTRACT_END_DATE,
4614                  CATCHWEIGHT_QTY,
4615                  ACTUAL_ORDER_QUANTITY,
4616 		 LIST_PRICE_OVERRIDE_FLAG, --po integration
4617 		 ORDER_UOM_SELLING_PRICE ,
4618                  CHARGE_PERIODICITY_CODE,
4619                  request_id
4620 	        )
4621 VALUES (         p_LINE_INDEX(i),
4622                  p_LINE_TYPE_CODE(i),
4623                  p_PRICING_EFFECTIVE_DATE(i),
4624                  p_ACTIVE_DATE_FIRST(i),
4625                  p_ACTIVE_DATE_FIRST_TYPE(i),
4626                  p_ACTIVE_DATE_SECOND(i),
4627                  p_ACTIVE_DATE_SECOND_TYPE(i),
4628                  p_LINE_QUANTITY(i),
4629                  p_LINE_UOM_CODE(i),
4630                  p_REQUEST_TYPE_CODE(i),
4631                  p_PRICED_QUANTITY(i),
4632                  p_PRICED_UOM_CODE (i),
4633                  p_CURRENCY_CODE(i),
4634                  p_UNIT_PRICE (i),
4635                  p_ADJUSTED_UNIT_PRICE(i),
4636                  p_PRICE_FLAG(i),
4637                  p_UOM_QUANTITY(i),
4638                  p_LINE_ID(i),
4639                  P_ROUNDING_FACTOR(i),
4640                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4641                  nvl(p_PRICE_LIST_ID(i),-9999),
4642                  p_PRICE_REQUEST_CODE(i),
4643                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4644                  p_LINE_CATEGORY(i),
4645                  p_CONTRACT_START_DATE(i),
4646                  p_CONTRACT_END_DATE(i),
4647                  p_CATCHWEIGHT_QTY(i),
4648                  p_ACTUAL_ORDER_QTY(i),
4649 		 nvl (p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'),
4650 		 p_UNIT_PRICE(i), -- po integration
4651                  p_CHARGE_PERIODICITY_CODE(i),
4652                  l_request_id
4653      );
4654 QP_PREQ_GRP.G_INT_LINES_NO := QP_PREQ_GRP.G_INT_LINES_NO + p_LINE_INDEX.count;
4655   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4656   QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LINES_NO='||QP_PREQ_GRP.G_INT_LINES_NO);
4657   END IF;
4658 COMMIT;
4659 EXCEPTION
4660   WHEN OTHERS THEN
4661   x_status_code := FND_API.G_RET_STS_ERROR;
4662   x_status_text :=l_routine||' '||SQLERRM;
4663   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4664   QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
4665   END IF;
4666 END ;
4667 
4668 /*+----------------------------------------------------------------------
4669   |Procedure Group INSERT_LINES2
4670   +----------------------------------------------------------------------
4671 */
4672 
4673 PROCEDURE INSERT_LINES2
4674                 (p_LINE_INDEX              IN NUMBER_TYPE,
4675                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4676                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4677                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4678                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4679                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4680                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4681                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4682                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4683                  p_REQUEST_TYPE_CODE       IN VARCHAR_TYPE,
4684                  p_PRICED_QUANTITY         IN NUMBER_TYPE,
4685                  p_PRICED_UOM_CODE         IN VARCHAR_TYPE,
4686                  p_CURRENCY_CODE           IN VARCHAR_TYPE,
4687                  p_UNIT_PRICE              IN NUMBER_TYPE,
4688                  p_ADJUSTED_UNIT_PRICE     IN NUMBER_TYPE,
4689                  p_UPD_ADJUSTED_UNIT_PRICE IN NUMBER_TYPE,
4690                  p_UOM_QUANTITY            IN NUMBER_TYPE,
4691                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4692                  p_LINE_ID                IN NUMBER_TYPE,
4693                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4694                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4695                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4696 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4697                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4698                  p_CONTRACT_START_DATE	  IN DATE_TYPE,
4699                  p_CONTRACT_END_DATE	  IN DATE_TYPE,
4700 		 p_CATCHWEIGHT_QTY	  IN NUMBER_TYPE,
4701 		 p_ACTUAL_ORDER_QTY	  IN NUMBER_TYPE,
4702 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE,
4703                  p_charge_periodicity_code  IN VARCHAR_3_TYPE,
4704 		 p_SERVICE_DURATION            IN NUMBER_TYPE,  -- SERVICE PROJECT
4705 		 p_SERVICE_PERIOD              IN VARCHAR_TYPE,    -- SERVICE PROJECT
4706                  x_status_code            OUT NOCOPY VARCHAR2,
4707                  x_status_text            OUT NOCOPY VARCHAR2 )
4708 AS
4709  l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2';
4710  --added by yangli for Java Engine project 3086881
4711  l_debug varchar2(3);
4712 BEGIN
4713   --added by yangli for Java Engine project 3086881
4714   -- Set the global variable G_DEBUG_ENGINE
4715   QP_PREQ_GRP.Set_QP_Debug;
4716 
4717   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
4718 
4719 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
4720  IF l_debug = FND_API.G_TRUE THEN
4721         ENGINE_DEBUG('Java Engine not Installed ----------');
4722  END IF;
4723  --added by yangli for Java Engine project 3086881
4724 
4725  x_status_code := FND_API.G_RET_STS_SUCCESS;
4726 
4727 FORALL i in p_line_index.FIRST..p_line_index.LAST
4728 INSERT INTO qp_npreq_lines_tmp
4729                 (LINE_INDEX,
4730                  LINE_TYPE_CODE,
4731                  PRICING_EFFECTIVE_DATE,
4732                  START_DATE_ACTIVE_FIRST,
4733                  ACTIVE_DATE_FIRST_TYPE,
4734                  START_DATE_ACTIVE_SECOND,
4735                  ACTIVE_DATE_SECOND_TYPE,
4736                  LINE_QUANTITY,
4737                  LINE_UOM_CODE,
4738                  REQUEST_TYPE_CODE,
4739                  PRICED_QUANTITY,
4740                  PRICED_UOM_CODE,
4741                  CURRENCY_CODE,
4742                  UNIT_PRICE,
4743                  ADJUSTED_UNIT_PRICE,
4744                  PRICE_FLAG,
4745                  UOM_QUANTITY,
4746                  LINE_ID,
4747                  ROUNDING_FACTOR,
4748                  UPDATED_ADJUSTED_UNIT_PRICE,
4749                  PRICE_LIST_HEADER_ID,
4750                  PRICE_REQUEST_CODE,
4751                  USAGE_PRICING_TYPE,
4752                  LINE_CATEGORY,
4753                  CONTRACT_START_DATE,
4754                  CONTRACT_END_DATE,
4755 		 CATCHWEIGHT_QTY,
4756                  ACTUAL_ORDER_QUANTITY,
4757 		 LIST_PRICE_OVERRIDE_FLAG, --po integration
4758                  CHARGE_PERIODICITY_CODE,
4759 		 ORDER_UOM_SELLING_PRICE,
4760 		 SERVICE_DURATION,
4761 		 SERVICE_PERIOD
4762 
4763 		 )
4764 VALUES (         p_LINE_INDEX(i),
4765                  p_LINE_TYPE_CODE(i),
4766                  p_PRICING_EFFECTIVE_DATE(i),
4767                  p_ACTIVE_DATE_FIRST(i),
4768                  p_ACTIVE_DATE_FIRST_TYPE(i),
4769                  p_ACTIVE_DATE_SECOND(i),
4770                  p_ACTIVE_DATE_SECOND_TYPE(i),
4771                  p_LINE_QUANTITY(i),
4772                  p_LINE_UOM_CODE(i),
4773                  p_REQUEST_TYPE_CODE(i),
4774                  p_PRICED_QUANTITY(i),
4775                  p_PRICED_UOM_CODE (i),
4776                  p_CURRENCY_CODE(i),
4777                  p_UNIT_PRICE (i),
4778                  p_ADJUSTED_UNIT_PRICE(i),
4779                  p_PRICE_FLAG(i),
4780                  p_UOM_QUANTITY(i),
4781                  p_LINE_ID(i),
4782                  P_ROUNDING_FACTOR(i),
4783                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4784                  nvl(p_PRICE_LIST_ID(i),-9999),
4785                  p_PRICE_REQUEST_CODE(i),
4786                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4787                  p_LINE_CATEGORY(i),
4788                  p_CONTRACT_START_DATE(i),
4789                  p_CONTRACT_END_DATE(i),
4790 		 p_CATCHWEIGHT_QTY(i),
4791 		 p_ACTUAL_ORDER_QTY(i),
4792 		 nvl (p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'),
4793                  p_CHARGE_PERIODICITY_CODE(i),
4794 --		 p_UNIT_PRICE(i)
4795                 DECODE(p_LINE_QUANTITY(i),
4796                            0,p_ADJUSTED_UNIT_PRICE(i),
4797                            p_ADJUSTED_UNIT_PRICE(i)*nvl(p_PRICED_QUANTITY(i),p_LINE_QUANTITY(i))/p_LINE_QUANTITY(i)), --8370238
4798 		p_SERVICE_DURATION(i),
4799 		p_SERVICE_PERIOD(i)
4800 
4801 		 ); --po integration
4802  --added by yangli for Java Engine project 3086881
4803 ELSE
4804  IF l_debug = FND_API.G_TRUE THEN
4805         ENGINE_DEBUG('Java Engine Installed ----------');
4806  END IF;
4807 QP_PREQ_GRP.INSERT_LINES2_AT
4808                 (p_LINE_INDEX             ,
4809                  p_LINE_TYPE_CODE         ,
4810                  p_PRICING_EFFECTIVE_DATE ,
4811                  p_ACTIVE_DATE_FIRST      ,
4812                  p_ACTIVE_DATE_FIRST_TYPE ,
4813                  p_ACTIVE_DATE_SECOND     ,
4814                  p_ACTIVE_DATE_SECOND_TYPE,
4815                  p_LINE_QUANTITY          ,
4816                  p_LINE_UOM_CODE          ,
4817                  p_REQUEST_TYPE_CODE      ,
4818                  p_PRICED_QUANTITY        ,
4819                  p_PRICED_UOM_CODE        ,
4820                  p_CURRENCY_CODE          ,
4821                  p_UNIT_PRICE             ,
4822                  p_ADJUSTED_UNIT_PRICE    ,
4823                  p_UPD_ADJUSTED_UNIT_PRICE,
4824                  p_UOM_QUANTITY           ,
4825                  p_PRICE_FLAG             ,
4826                  p_LINE_ID                ,
4827                  p_ROUNDING_FACTOR        ,
4828                  p_PRICE_LIST_ID          ,
4829                  p_PRICE_REQUEST_CODE     ,
4830                  p_USAGE_PRICING_TYPE     ,
4831                  p_LINE_CATEGORY          ,
4832                  p_CONTRACT_START_DATE    ,
4833                  p_CONTRACT_END_DATE      ,
4834                  p_CATCHWEIGHT_QTY        ,
4835                  p_ACTUAL_ORDER_QTY       ,
4836 		 p_LIST_PRICE_OVERRIDE_FLAG, --po integration
4837                  p_charge_periodicity_code,
4838                  x_status_code            ,
4839                  x_status_text            );
4840 
4841 END IF;
4842  --added by yangli for Java Engine project 3086881
4843 
4844 EXCEPTION
4845   WHEN OTHERS THEN
4846   x_status_code := FND_API.G_RET_STS_ERROR;
4847   x_status_text :=l_routine||' '||SQLERRM;
4848   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4849   engine_debug(l_routine||' '||SQLERRM);
4850   END IF;
4851 END ;
4852 
4853 /*+-----------------------------------------------------------------------
4854   |PROCEDURE INSERT_LINES2_AT for bulk binding
4855   +-----------------------------------------------------------------------
4856 */
4857 PROCEDURE INSERT_LINES2_AT
4858                 (p_LINE_INDEX              IN PLS_INTEGER_TYPE,
4859                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4860                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4861                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4862                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4863                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4864                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4865                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4866                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4867                  p_REQUEST_TYPE_CODE      IN VARCHAR_TYPE,
4868                  p_PRICED_QUANTITY        IN NUMBER_TYPE,
4869                  p_PRICED_UOM_CODE        IN VARCHAR_TYPE,
4870                  p_CURRENCY_CODE          IN VARCHAR_TYPE,
4871                  p_UNIT_PRICE             IN NUMBER_TYPE,
4872                  p_PERCENT_PRICE          IN NUMBER_TYPE,
4873                  p_UOM_QUANTITY           IN NUMBER_TYPE,
4874                  p_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
4875                  p_UPD_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
4876                  p_PROCESSED_FLAG         IN VARCHAR_TYPE,
4877                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4878                  p_LINE_ID                IN NUMBER_TYPE,
4879                  p_PROCESSING_ORDER       IN PLS_INTEGER_TYPE,
4880                  p_PRICING_STATUS_CODE    IN VARCHAR_TYPE,
4881                  p_PRICING_STATUS_TEXT    IN VARCHAR_TYPE,
4882                  p_ROUNDING_FLAG          IN FLAG_TYPE,
4883                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4884                  p_QUALIFIERS_EXIST_FLAG  IN VARCHAR_TYPE,
4885                  p_PRICING_ATTRS_EXIST_FLAG IN VARCHAR_TYPE,
4886                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4887                  p_VALIDATED_FLAG         IN VARCHAR_TYPE,
4888                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4889 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4890                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4891                  p_CONTRACT_START_DATE    IN DATE_TYPE,
4892                  p_CONTRACT_END_DATE    IN DATE_TYPE,
4893                  p_LINE_UNIT_PRICE    IN NUMBER_TYPE,
4894                  p_CATCHWEIGHT_QTY    IN NUMBER_TYPE,
4895                  p_ACTUAL_ORDER_QTY    IN NUMBER_TYPE,
4896 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE,--po integration
4897                  p_charge_periodicity_code IN VARCHAR_3_TYPE,
4898                  x_status_code            OUT NOCOPY VARCHAR2,
4899                  x_status_text            OUT NOCOPY VARCHAR2 )
4900 AS
4901 PRAGMA AUTONOMOUS_TRANSACTION;
4902 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2_AT';
4903 l_request_id number;
4904 BEGIN
4905   x_status_code := FND_API.G_RET_STS_SUCCESS;
4906   l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
4907   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4908     QP_PREQ_GRP.engine_debug('Before bulk inserting lines...');
4909     QP_PREQ_GRP.engine_debug('line index size:'||p_line_index.count());
4910   END IF;
4911 
4912   FORALL i in p_line_index.FIRST..p_line_index.LAST
4913     /*INSERT INTO QP_INT_LINES
4914                 ( LINE_INDEX,
4915                  LINE_TYPE_CODE,
4916                  PRICING_EFFECTIVE_DATE,
4917                  START_DATE_ACTIVE_FIRST,
4918                  ACTIVE_DATE_FIRST_TYPE,
4919                  START_DATE_ACTIVE_SECOND,
4920                  ACTIVE_DATE_SECOND_TYPE,
4921                  LINE_QUANTITY,
4922                  LINE_UOM_CODE,
4923                  REQUEST_TYPE_CODE,
4924                  PRICED_QUANTITY,
4925                  PRICED_UOM_CODE,
4926                  CURRENCY_CODE,
4927                  UNIT_PRICE,
4928                  PERCENT_PRICE,
4929                  UOM_QUANTITY,
4930                  ADJUSTED_UNIT_PRICE,
4931                  PROCESSED_FLAG,
4932                  PRICE_FLAG,
4933                  LINE_ID,
4934                  PROCESSING_ORDER,
4935                  ROUNDING_FLAG,
4936                  ROUNDING_FACTOR,
4937                  PRICING_STATUS_CODE,
4938                  PRICING_STATUS_TEXT,
4939                  UPDATED_ADJUSTED_UNIT_PRICE,
4940                  QUALIFIERS_EXIST_FLAG,
4941                  PRICING_ATTRS_EXIST_FLAG,
4942                  PRICE_LIST_HEADER_ID,
4943                  VALIDATED_FLAG,
4944                  PRICE_REQUEST_CODE,
4945                  USAGE_PRICING_TYPE,
4946                  LINE_CATEGORY,
4947                  CONTRACT_START_DATE,  -- shulin
4948                  CONTRACT_END_DATE,    -- shulin
4949                  LINE_UNIT_PRICE,      -- shu_latest
4950                  CATCHWEIGHT_QTY,
4951                  ACTUAL_ORDER_QUANTITY,
4952 		 LIST_PRICE_OVERRIDE_FLAG, -- po integration
4953                  CHARGE_PERIODICITY_CODE,
4954 		 ORDER_UOM_SELLING_PRICE)
4955       VALUES (   p_LINE_INDEX(i),
4956                  p_LINE_TYPE_CODE(i),
4957                  p_PRICING_EFFECTIVE_DATE(i),
4958                  p_ACTIVE_DATE_FIRST(i),
4959                  p_ACTIVE_DATE_FIRST_TYPE(i),
4960                  p_ACTIVE_DATE_SECOND(i),
4961                  p_ACTIVE_DATE_SECOND_TYPE(i),
4962                  p_LINE_QUANTITY(i),
4963                  p_LINE_UOM_CODE(i),
4964                  p_REQUEST_TYPE_CODE(i),
4965                  p_PRICED_QUANTITY(i),
4966                  p_PRICED_UOM_CODE (i),
4967                  p_CURRENCY_CODE(i),
4968                  p_UNIT_PRICE (i),
4969                  p_PERCENT_PRICE(i),
4970                  p_UOM_QUANTITY(i),
4971                  p_ADJUSTED_UNIT_PRICE(i),
4972                  p_PROCESSED_FLAG(i),
4973                  p_PRICE_FLAG(i),
4974                  p_LINE_ID(i),
4975                  P_PROCESSING_ORDER(i),
4976                  P_ROUNDING_FLAG(i),
4977                  P_ROUNDING_FACTOR(i),
4978                  p_PRICING_STATUS_CODE(i),
4979                  p_PRICING_STATUS_TEXT(i),
4980                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4981                  nvl(p_QUALIFIERS_EXIST_FLAG(i),'N'),
4982                  nvl(p_PRICING_ATTRS_EXIST_FLAG(i),'N'),
4983                  nvl(p_PRICE_LIST_ID(i),-9999),
4984                  nvl(p_VALIDATED_FLAG(i),'N'),
4985                  p_PRICE_REQUEST_CODE(i),
4986                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4987                  G_LINE_CATEGORY_DEF_TBL(i),
4988                  G_CONTRACT_START_DATE_DEF_TBL(i),
4989                  G_CONTRACT_END_DATE_DEF_TBL(i),
4990                  G_LINE_UNIT_PRICE_DEF_TBL(i),
4991                  G_CATCHWEIGHT_QTY_DEF_TBL(i),
4992                  G_ACTUAL_ORDER_QTY_DEF_TBL(i),
4993 		 NVL(p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'), --po integration
4994                  p_CHARGE_PERIODICITY_CODE(i),
4995 		 p_UNIT_PRICE(i)
4996                  );*/
4997     INSERT INTO QP_INT_LINES_T
4998                 ( LINE_INDEX,
4999                  LINE_TYPE_CODE,
5000                  PRICING_EFFECTIVE_DATE,
5001                  START_DATE_ACTIVE_FIRST,
5002                  ACTIVE_DATE_FIRST_TYPE,
5003                  START_DATE_ACTIVE_SECOND,
5004                  ACTIVE_DATE_SECOND_TYPE,
5005                  LINE_QUANTITY,
5006                  LINE_UOM_CODE,
5007                  REQUEST_TYPE_CODE,
5008                  PRICED_QUANTITY,
5009                  PRICED_UOM_CODE,
5010                  CURRENCY_CODE,
5011                  UNIT_PRICE,
5012                  PERCENT_PRICE,
5013                  UOM_QUANTITY,
5014                  ADJUSTED_UNIT_PRICE,
5015                  PROCESSED_FLAG,
5016                  PRICE_FLAG,
5017                  LINE_ID,
5018                  PROCESSING_ORDER,
5019                  ROUNDING_FLAG,
5020                  ROUNDING_FACTOR,
5021                  PRICING_STATUS_CODE,
5022                  PRICING_STATUS_TEXT,
5023                  UPDATED_ADJUSTED_UNIT_PRICE,
5024                  QUALIFIERS_EXIST_FLAG,
5025                  PRICING_ATTRS_EXIST_FLAG,
5026                  PRICE_LIST_HEADER_ID,
5027                  VALIDATED_FLAG,
5028                  PRICE_REQUEST_CODE,
5029                  USAGE_PRICING_TYPE,
5030                  LINE_CATEGORY,
5031                  CONTRACT_START_DATE,  -- shulin
5032                  CONTRACT_END_DATE,    -- shulin
5033                  LINE_UNIT_PRICE,      -- shu_latest
5034                  CATCHWEIGHT_QTY,
5035                  ACTUAL_ORDER_QUANTITY,
5036 		 LIST_PRICE_OVERRIDE_FLAG, -- po integration
5037                  CHARGE_PERIODICITY_CODE,
5038 		 ORDER_UOM_SELLING_PRICE,
5039                  request_id)
5040       VALUES (   p_LINE_INDEX(i),
5041                  p_LINE_TYPE_CODE(i),
5042                  p_PRICING_EFFECTIVE_DATE(i),
5043                  p_ACTIVE_DATE_FIRST(i),
5044                  p_ACTIVE_DATE_FIRST_TYPE(i),
5045                  p_ACTIVE_DATE_SECOND(i),
5046                  p_ACTIVE_DATE_SECOND_TYPE(i),
5047                  p_LINE_QUANTITY(i),
5048                  p_LINE_UOM_CODE(i),
5049                  p_REQUEST_TYPE_CODE(i),
5050                  p_PRICED_QUANTITY(i),
5051                  p_PRICED_UOM_CODE (i),
5052                  p_CURRENCY_CODE(i),
5053                  p_UNIT_PRICE (i),
5054                  p_PERCENT_PRICE(i),
5055                  p_UOM_QUANTITY(i),
5056                  p_ADJUSTED_UNIT_PRICE(i),
5057                  p_PROCESSED_FLAG(i),
5058                  p_PRICE_FLAG(i),
5059                  p_LINE_ID(i),
5060                  P_PROCESSING_ORDER(i),
5061                  P_ROUNDING_FLAG(i),
5062                  P_ROUNDING_FACTOR(i),
5063                  p_PRICING_STATUS_CODE(i),
5064                  p_PRICING_STATUS_TEXT(i),
5065                  p_UPD_ADJUSTED_UNIT_PRICE(i),
5066                  nvl(p_QUALIFIERS_EXIST_FLAG(i),'N'),
5067                  nvl(p_PRICING_ATTRS_EXIST_FLAG(i),'N'),
5068                  nvl(p_PRICE_LIST_ID(i),-9999),
5069                  nvl(p_VALIDATED_FLAG(i),'N'),
5070                  p_PRICE_REQUEST_CODE(i),
5071                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
5072                  G_LINE_CATEGORY_DEF_TBL(i),
5073                  G_CONTRACT_START_DATE_DEF_TBL(i), /* shulin */
5074                  G_CONTRACT_END_DATE_DEF_TBL(i), /* shulin */
5075                  G_LINE_UNIT_PRICE_DEF_TBL(i), /* shu_latest */
5076                  G_CATCHWEIGHT_QTY_DEF_TBL(i),
5077                  G_ACTUAL_ORDER_QTY_DEF_TBL(i),
5078 		 NVL(p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'), --po integration
5079                  p_CHARGE_PERIODICITY_CODE(i),
5080 		 p_UNIT_PRICE(i),
5081                  l_request_id
5082                  );
5083   QP_PREQ_GRP.G_INT_LINES_NO := QP_PREQ_GRP.G_INT_LINES_NO + p_LINE_INDEX.count;
5084   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5085     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LINES_NO='||QP_PREQ_GRP.G_INT_LINES_NO);
5086   END IF;
5087 
5088   COMMIT;
5089 
5090 EXCEPTION
5091   WHEN OTHERS THEN
5092   x_status_code := FND_API.G_RET_STS_ERROR;
5093   x_status_text :=l_routine||' '||SQLERRM;
5094   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5095     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
5096     QP_PREQ_GRP.engine_debug(SQLERRM);
5097   END IF;
5098 END;
5099 
5100 /*+-----------------------------------------------------------------------
5101   |PROCEDURE INSERT_LINES2 for bulk binding
5102   +-----------------------------------------------------------------------
5103 */
5104 PROCEDURE INSERT_LINES2
5105                 (p_LINE_INDEX              IN PLS_INTEGER_TYPE,
5106                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
5107                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
5108                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
5109                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
5110                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
5111                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
5112                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
5113                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
5114                  p_REQUEST_TYPE_CODE      IN VARCHAR_TYPE,
5115                  p_PRICED_QUANTITY        IN NUMBER_TYPE,
5116                  p_PRICED_UOM_CODE        IN VARCHAR_TYPE,
5117                  p_CURRENCY_CODE          IN VARCHAR_TYPE,
5118                  p_UNIT_PRICE             IN NUMBER_TYPE,
5119                  p_PERCENT_PRICE          IN NUMBER_TYPE,
5120                  p_UOM_QUANTITY           IN NUMBER_TYPE,
5121                  p_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
5122                  p_UPD_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
5123                  p_PROCESSED_FLAG         IN VARCHAR_TYPE,
5124                  p_PRICE_FLAG             IN VARCHAR_TYPE,
5125                  p_LINE_ID                IN NUMBER_TYPE,
5126                  p_PROCESSING_ORDER       IN PLS_INTEGER_TYPE,
5127                  p_PRICING_STATUS_CODE    IN VARCHAR_TYPE,
5128                  p_PRICING_STATUS_TEXT    IN VARCHAR_TYPE,
5129                  p_ROUNDING_FLAG          IN FLAG_TYPE,
5130                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
5131                  p_QUALIFIERS_EXIST_FLAG  IN VARCHAR_TYPE,
5132                  p_PRICING_ATTRS_EXIST_FLAG IN VARCHAR_TYPE,
5133                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
5134                  p_VALIDATED_FLAG         IN VARCHAR_TYPE,
5135                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
5136 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
5137                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
5138                  p_CONTRACT_START_DATE    IN DATE_TYPE,
5139                  p_CONTRACT_END_DATE    IN DATE_TYPE,
5140                  p_LINE_UNIT_PRICE    IN NUMBER_TYPE,
5141                  p_CATCHWEIGHT_QTY    IN NUMBER_TYPE,
5142                  p_ACTUAL_ORDER_QTY    IN NUMBER_TYPE,
5143 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE, --po integration
5144                  p_charge_periodicity_code IN VARCHAR_3_TYPE,
5145 		 p_SERVICE_DURATION            IN NUMBER_TYPE,  -- SERVICE PROJECT
5146 		 p_SERVICE_PERIOD              IN VARCHAR_TYPE,    -- SERVICE PROJECT
5147                  x_status_code            OUT NOCOPY VARCHAR2,
5148                  x_status_text            OUT NOCOPY VARCHAR2 )
5149 AS
5150 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2';
5151 --added by yangli for Java Engine project
5152 l_debug varchar2(3);
5153 --added by yangli for Java Engine project
5154 BEGIN
5155 --added by yangli for Java Engine project
5156 -- Set the global variable G_DEBUG_ENGINE
5157   QP_PREQ_GRP.Set_QP_Debug;
5158 
5159   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
5160 --added by yangli for Java Engine project
5161 
5162 x_status_code := FND_API.G_RET_STS_SUCCESS;
5163 
5164 -- Defaulting
5165 IF (p_line_category.count = 0) THEN -- p_line_category not passed at all
5166  FOR i in p_line_index.FIRST .. p_line_index.LAST
5167  LOOP
5168   G_LINE_CATEGORY_DEF_TBL(i) := NULL;
5169  END LOOP;
5170 ELSE
5171  FOR i in p_line_index.FIRST .. p_line_index.LAST
5172  LOOP
5173   G_LINE_CATEGORY_DEF_TBL(i) := p_LINE_CATEGORY(i);
5174  END LOOP;
5175 END IF;
5176 
5177 -- shulin
5178 -- Defaulting
5179 IF (p_contract_start_date.count = 0) THEN -- p_contract_start_date not passed at all
5180  FOR i in p_line_index.FIRST .. p_line_index.LAST
5181  LOOP
5182   G_CONTRACT_START_DATE_DEF_TBL(i) := NULL;
5183  END LOOP;
5184 ELSE
5185  FOR i in p_line_index.FIRST .. p_line_index.LAST
5186  LOOP
5187   G_CONTRACT_START_DATE_DEF_TBL(i) := p_CONTRACT_START_DATE(i); /* shulin */
5188  END LOOP;
5189 END IF;
5190 
5191 IF (p_contract_end_date.count = 0) THEN -- p_contract_end_date not passed at all
5192  FOR i in p_line_index.FIRST .. p_line_index.LAST
5193  LOOP
5194   G_CONTRACT_END_DATE_DEF_TBL(i) := NULL;
5195  END LOOP;
5196 ELSE
5197  FOR i in p_line_index.FIRST .. p_line_index.LAST
5198  LOOP
5199   G_CONTRACT_END_DATE_DEF_TBL(i) := p_CONTRACT_END_DATE(i); /* shulin */
5200  END LOOP;
5201 END IF;
5202 
5203 IF (p_line_unit_price.count = 0) THEN -- p_line_unit_price not passed at all
5204  FOR i in p_line_index.FIRST .. p_line_index.LAST
5205  LOOP
5206   G_LINE_UNIT_PRICE_DEF_TBL(i) := NULL;
5207  END LOOP;
5208 ELSE
5209  FOR i in p_line_index.FIRST .. p_line_index.LAST
5210  LOOP
5211   G_LINE_UNIT_PRICE_DEF_TBL(i) := p_LINE_UNIT_PRICE(i); /* shu_latest */
5212  END LOOP;
5213 END IF;
5214 
5215 IF (p_catchweight_qty.count = 0) THEN -- p_catchweight_qty not passed at all
5216  FOR i in p_line_index.FIRST .. p_line_index.LAST
5217  LOOP
5218   G_CATCHWEIGHT_QTY_DEF_TBL(i) := NULL;
5219  END LOOP;
5220 ELSE
5221  FOR i in p_line_index.FIRST .. p_line_index.LAST
5222  LOOP
5223   G_CATCHWEIGHT_QTY_DEF_TBL(i) := p_catchweight_qty(i); /* shu_latest */
5224  END LOOP;
5225 END IF;
5226 
5227 IF (p_actual_order_qty.count = 0) THEN
5228  FOR i in p_line_index.FIRST .. p_line_index.LAST
5229  LOOP
5230   G_ACTUAL_ORDER_QTY_DEF_TBL(i) := NULL;
5231  END LOOP;
5232 ELSE
5233  FOR i in p_line_index.FIRST .. p_line_index.LAST
5234  LOOP
5235   G_ACTUAL_ORDER_QTY_DEF_TBL(i) := p_actual_order_qty(i);
5236  END LOOP;
5237 END IF;
5238 
5239 -- start po integration
5240 IF (p_list_price_override_flag.count= 0)
5241 THEN
5242  FOR i in p_line_index.FIRST .. p_line_index.LAST
5243  LOOP
5244   G_LIST_PRICE_OVERRIDE_FLAG_TBL(i) := 'N';
5245  END LOOP;
5246 ELSE
5247  FOR i in p_line_index.FIRST .. p_line_index.LAST
5248  LOOP
5249   G_LIST_PRICE_OVERRIDE_FLAG_TBL(i) := nvl (p_list_price_override_flag(i), 'N');
5250  END LOOP;
5251 End IF;
5252 -- end po integration
5253 
5254 IF (p_charge_periodicity_code.count = 0) THEN
5255   FOR i in p_line_index.FIRST .. p_line_index.LAST LOOP
5256     G_CHARGE_PERIODICITY_CODE_TBL(i) := NULL;
5257   END LOOP;
5258 ELSE
5259   FOR i in p_line_index.FIRST .. p_line_index.LAST LOOP
5260     G_CHARGE_PERIODICITY_CODE_TBL(i) := p_charge_periodicity_code(i);
5261   END LOOP;
5262 END IF;
5263 
5264 --added by yangli for Java Engine project
5265 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
5266  IF l_debug = FND_API.G_TRUE THEN
5267         ENGINE_DEBUG('Java Engine not Installed ----------');
5268  END IF;
5269 --added by yangli for Java Engine project
5270 
5271 FORALL i in p_line_index.FIRST..p_line_index.LAST
5272 
5273 INSERT INTO qp_npreq_lines_tmp
5274                 (LINE_INDEX,
5275                  LINE_TYPE_CODE,
5276                  PRICING_EFFECTIVE_DATE,
5277                  START_DATE_ACTIVE_FIRST,
5278                  ACTIVE_DATE_FIRST_TYPE,
5279                  START_DATE_ACTIVE_SECOND,
5280                  ACTIVE_DATE_SECOND_TYPE,
5281                  LINE_QUANTITY,
5282                  LINE_UOM_CODE,
5283                  REQUEST_TYPE_CODE,
5284                  PRICED_QUANTITY,
5285                  PRICED_UOM_CODE,
5286                  CURRENCY_CODE,
5287                  UNIT_PRICE,
5288                  PERCENT_PRICE,
5289                  UOM_QUANTITY,
5290                  ADJUSTED_UNIT_PRICE,
5291                  PROCESSED_FLAG,
5292                  PRICE_FLAG,
5293                  LINE_ID,
5294                  PROCESSING_ORDER,
5295                  ROUNDING_FLAG,
5296                  ROUNDING_FACTOR,
5297                  PRICING_STATUS_CODE,
5298                  PRICING_STATUS_TEXT,
5299                  UPDATED_ADJUSTED_UNIT_PRICE,
5300                  QUALIFIERS_EXIST_FLAG,
5301                  PRICING_ATTRS_EXIST_FLAG,
5302                  PRICE_LIST_HEADER_ID,
5303                  VALIDATED_FLAG,
5304                  PRICE_REQUEST_CODE,
5305                  USAGE_PRICING_TYPE,
5306                  LINE_CATEGORY,
5307                  CONTRACT_START_DATE,  -- shulin
5308                  CONTRACT_END_DATE,    -- shulin
5309                  LINE_UNIT_PRICE,      -- shu_latest
5310 		 CATCHWEIGHT_QTY,
5311                  ACTUAL_ORDER_QUANTITY,
5312 		 LIST_PRICE_OVERRIDE_FLAG, -- po integration
5313                  CHARGE_PERIODICITY_CODE,
5314 		 ORDER_UOM_SELLING_PRICE
5315 		 )
5316 VALUES (         p_LINE_INDEX(i),
5317                  p_LINE_TYPE_CODE(i),
5318                  p_PRICING_EFFECTIVE_DATE(i),
5319                  p_ACTIVE_DATE_FIRST(i),
5320                  p_ACTIVE_DATE_FIRST_TYPE(i),
5321                  p_ACTIVE_DATE_SECOND(i),
5322                  p_ACTIVE_DATE_SECOND_TYPE(i),
5323                  p_LINE_QUANTITY(i),
5324                  p_LINE_UOM_CODE(i),
5325                  p_REQUEST_TYPE_CODE(i),
5326                  p_PRICED_QUANTITY(i),
5327                  p_PRICED_UOM_CODE (i),
5328                  p_CURRENCY_CODE(i),
5329                  p_UNIT_PRICE (i),
5330                  p_PERCENT_PRICE(i),
5331                  p_UOM_QUANTITY(i),
5332                  p_ADJUSTED_UNIT_PRICE(i),
5333                  p_PROCESSED_FLAG(i),
5334                  p_PRICE_FLAG(i),
5335                  p_LINE_ID(i),
5336                  P_PROCESSING_ORDER(i),
5337                  P_ROUNDING_FLAG(i),
5338                  P_ROUNDING_FACTOR(i),
5339                  p_PRICING_STATUS_CODE(i),
5340                  p_PRICING_STATUS_TEXT(i),
5341                  p_UPD_ADJUSTED_UNIT_PRICE(i),
5342                  nvl(p_QUALIFIERS_EXIST_FLAG(i),'N'),
5343                  nvl(p_PRICING_ATTRS_EXIST_FLAG(i),'N'),
5344                  nvl(p_PRICE_LIST_ID(i),-9999),
5345                  nvl(p_VALIDATED_FLAG(i),'N'),
5346                  p_PRICE_REQUEST_CODE(i),
5347                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
5348                  G_LINE_CATEGORY_DEF_TBL(i),
5349                  G_CONTRACT_START_DATE_DEF_TBL(i), /* shulin */
5350                  G_CONTRACT_END_DATE_DEF_TBL(i), /* shulin */
5351                  G_LINE_UNIT_PRICE_DEF_TBL(i), /* shu_latest */
5352 		 G_CATCHWEIGHT_QTY_DEF_TBL(i),
5353 		 G_ACTUAL_ORDER_QTY_DEF_TBL(i),
5354 		 nvl (G_LIST_PRICE_OVERRIDE_FLAG_TBL(i), 'N'), -- po integration
5355                  G_CHARGE_PERIODICITY_CODE_TBL(i),
5356 --		 p_UNIT_PRICE(i)
5357                 DECODE(p_LINE_QUANTITY(i),
5358                            0,p_ADJUSTED_UNIT_PRICE(i),
5359                            p_ADJUSTED_UNIT_PRICE(i)*nvl(p_PRICED_QUANTITY(i),p_LINE_QUANTITY(i))/p_LINE_QUANTITY(i)) --8370238
5360                  );
5361 --added by yangli for Java Engine project
5362 ELSE
5363  IF l_debug = FND_API.G_TRUE THEN
5364         ENGINE_DEBUG('Java Engine Installed ----------');
5365  END IF;
5366 QP_PREQ_GRP.INSERT_LINES2_AT(
5367      p_LINE_INDEX,
5368      p_LINE_TYPE_CODE         ,
5369      p_PRICING_EFFECTIVE_DATE ,
5370      p_ACTIVE_DATE_FIRST      ,
5371      p_ACTIVE_DATE_FIRST_TYPE ,
5372      p_ACTIVE_DATE_SECOND     ,
5373      p_ACTIVE_DATE_SECOND_TYPE,
5374      p_LINE_QUANTITY          ,
5375      p_LINE_UOM_CODE          ,
5376      p_REQUEST_TYPE_CODE      ,
5377      p_PRICED_QUANTITY        ,
5378      p_PRICED_UOM_CODE        ,
5379      p_CURRENCY_CODE          ,
5380      p_UNIT_PRICE             ,
5381      p_PERCENT_PRICE          ,
5382      p_UOM_QUANTITY           ,
5383      p_ADJUSTED_UNIT_PRICE    ,
5384      p_UPD_ADJUSTED_UNIT_PRICE,
5385      p_PROCESSED_FLAG         ,
5386      p_PRICE_FLAG             ,
5387      p_LINE_ID                ,
5388      p_PROCESSING_ORDER       ,
5389      p_PRICING_STATUS_CODE    ,
5390      p_PRICING_STATUS_TEXT    ,
5391      p_ROUNDING_FLAG          ,
5392      p_ROUNDING_FACTOR        ,
5393      p_QUALIFIERS_EXIST_FLAG  ,
5394      p_PRICING_ATTRS_EXIST_FLAG ,
5395      p_PRICE_LIST_ID          ,
5396      p_VALIDATED_FLAG         ,
5397      p_PRICE_REQUEST_CODE    ,
5398      p_USAGE_PRICING_TYPE    ,
5399      G_LINE_CATEGORY_DEF_TBL,
5400      G_CONTRACT_START_DATE_DEF_TBL,
5401      G_CONTRACT_END_DATE_DEF_TBL,
5402      G_LINE_UNIT_PRICE_DEF_TBL,
5403      G_CATCHWEIGHT_QTY_DEF_TBL,
5404      G_ACTUAL_ORDER_QTY_DEF_TBL,
5405      G_LIST_PRICE_OVERRIDE_FLAG_TBL, --po integration
5406      G_CHARGE_PERIODICITY_CODE_TBL,
5407      x_status_code       ,
5408      x_status_text
5409 );
5410 END IF;
5411 --added by yangli for Java Engine project
5412 
5413 G_LINE_CATEGORY_DEF_TBL.delete;
5414 G_CONTRACT_START_DATE_DEF_TBL.delete;
5415 G_CONTRACT_END_DATE_DEF_TBL.delete;
5416 G_LINE_UNIT_PRICE_DEF_TBL.delete;
5417 G_CATCHWEIGHT_QTY_DEF_TBL.delete;
5418 G_ACTUAL_ORDER_QTY_DEF_TBL.delete;
5419 G_LIST_PRICE_OVERRIDE_FLAG_TBL.delete;
5420 G_CHARGE_PERIODICITY_CODE_TBL.delete;
5421 
5422 EXCEPTION
5423   WHEN OTHERS THEN
5424   x_status_code := FND_API.G_RET_STS_ERROR;
5425   x_status_text :=l_routine||' '||SQLERRM;
5426   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5427   engine_debug(l_routine||' '||SQLERRM);
5428   engine_debug(SQLERRM);
5429   END IF;
5430 END;
5431 
5432 /*+----------------------------------------------------------------------
5433   |Procedure INSERT_LDETS
5434   +----------------------------------------------------------------------
5435 */
5436 PROCEDURE INSERT_LDETS
5437                 (p_LINE_DETAIL_index IN PLS_INTEGER,
5438                  p_LINE_DETAIL_TYPE_CODE   IN VARCHAR2,
5439                  p_PRICE_BREAK_TYPE_CODE   IN VARCHAR2:=NULL,
5440                  p_LIST_PRICE              IN NUMBER:=NULL,
5441                  p_LINE_INDEX                  IN PLS_INTEGER,
5442                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER,
5443                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER,
5444                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR2,
5445                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR2:=NULL,
5446                  p_CREATED_FROM_SQL            IN VARCHAR2:=NULL,
5447                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER:=NULL,
5448                  P_PRICING_PHASE_ID            IN PLS_INTEGER:=NULL,
5449                  p_OPERAND_CALCULATION_CODE    IN VARCHAR2:=NULL,
5450                  p_OPERAND_VALUE               IN VARCHAR2:=NULL,
5451                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR2:=NULL,
5452                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR2:=NULL,
5453                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR2:=NULL,
5454                  p_ASK_FOR_FLAG                IN VARCHAR2:=NULL,
5455                  p_PRICE_FORMULA_ID            IN NUMBER:=NULL,
5456                  p_PRICING_STATUS_CODE         IN VARCHAR2,
5457                  p_PRICING_STATUS_TEXT         IN VARCHAR2:=NULL,
5458                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER:=NULL,
5459                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR2:=NULL,
5460                  p_PROCESSED_FLAG              IN VARCHAR2:=NULL,
5461                  p_APPLIED_FLAG                IN VARCHAR2:=NULL,
5462                  p_AUTOMATIC_FLAG              IN VARCHAR2:=NULL,
5463                  p_OVERRIDE_FLAG               IN VARCHAR2:=NULL,
5464                  p_PRIMARY_UOM_FLAG            IN VARCHAR2:=NULL,
5465                  p_PRINT_ON_INVOICE_FLAG       IN VARCHAR2:=NULL,
5466                  p_MODIFIER_LEVEL_CODE         IN VARCHAR2:=NULL,
5467                  p_BENEFIT_QTY                 IN NUMBER:=NULL,
5468                  p_BENEFIT_UOM_CODE            IN VARCHAR2:=NULL,
5469 		 p_SERVICE_DURATION            IN NUMBER:=NULL,  -- SERVICE PROJECT
5470 		 p_SERVICE_PERIOD              IN VARCHAR2:=NULL,    -- SERVICE PROJECT
5471                  p_LIST_LINE_NO                IN VARCHAR2:=NULL,
5472                  p_ACCRUAL_FLAG                IN VARCHAR2:=NULL,
5473                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER:=NULL,
5474                  p_ESTIM_ACCRUAL_RATE          IN NUMBER:=NULL,
5475                  p_RECURRING_FLAG              IN VARCHAR2:=NULL,
5476                  p_RECURRING_VALUE             IN NUMBER:=NULL, -- block pricing
5477                  p_SELECTED_VOLUME_ATTR        IN VARCHAR2:=NULL,
5478                  p_ROUNDING_FACTOR             IN NUMBER:=NULL,
5479                  p_SECONDARY_PRICELIST_IND     IN VARCHAR2:=NULL,
5480                  p_UPDATED_FLAG                IN VARCHAR := NULL,
5481                  p_PROCESS_CODE                IN VARCHAR := NULL,
5482                  p_CHARGE_TYPE_CODE            IN VARCHAR := NULL,
5483                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR := NULL,
5484                  p_GROUP_QUANTITY              IN NUMBER :=NULL,
5485                  p_GROUP_AMOUNT                IN NUMBER :=NULL,
5486 		 p_CALCULATION_CODE	       IN VARCHAR2 := NULL,
5487                  p_CURRENCY_DETAIL_ID          IN NUMBER :=NULL, /*vivek */
5488                  p_CURRENCY_HEADER_ID          IN NUMBER :=NULL, /*vivek */
5489                  p_SELLING_ROUNDING_FACTOR          IN NUMBER :=NULL, /*vivek */
5490                  p_ORDER_CURRENCY              IN VARCHAR := NULL, /*vivek */
5491                  p_PRICING_EFFECTIVE_DATE      IN DATE := NULL,/*vivek */
5492                  p_BASE_CURRENCY_CODE          IN VARCHAR := NULL,/*vivek */
5493 		 p_CHANGE_REASON_CODE		IN VARCHAR2 := NULL,
5494 		 p_CHANGE_REASON_TEXT		IN VARCHAR2 := NULL,
5495 		 p_LINE_QUANTITY		IN NUMBER := NULL,
5496                  p_BREAK_UOM_CODE              IN VARCHAR2 := NULL, /* Proration */
5497                  p_BREAK_UOM_CONTEXT           IN VARCHAR2 := NULL, /* Proration */
5498                  p_BREAK_UOM_ATTRIBUTE         IN VARCHAR2 := NULL, /* Proration */
5499                  x_status_code                 OUT NOCOPY VARCHAR2,
5500                  x_status_text                 OUT NOCOPY VARCHAR2)
5501 AS
5502 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS';
5503 BEGIN
5504  INSERT INTO qp_npreq_ldets_tmp
5505                 (LINE_DETAIL_INDEX,
5506                  LINE_DETAIL_TYPE_CODE,
5507                  PRICE_BREAK_TYPE_CODE,
5508                  LINE_INDEX,
5509                  CREATED_FROM_LIST_HEADER_ID,
5510                  CREATED_FROM_LIST_LINE_ID,
5511                  CREATED_FROM_LIST_LINE_TYPE,
5512                  CREATED_FROM_LIST_TYPE_CODE,
5513                  CREATED_FROM_SQL,
5514                  PRICING_GROUP_SEQUENCE,
5515                  PRICING_PHASE_ID,
5516                  OPERAND_CALCULATION_CODE,
5517                  OPERAND_VALUE,
5518                  SUBSTITUTION_TYPE_CODE,
5519                  SUBSTITUTION_VALUE_FROM,
5520                  SUBSTITUTION_VALUE_TO,
5521                  ASK_FOR_FLAG,
5522                  PRICE_FORMULA_ID,
5523                  PRICING_STATUS_CODE,
5524                  PRICING_STATUS_TEXT,
5525                  PRODUCT_PRECEDENCE,
5526                  INCOMPATABILITY_GRP_CODE,
5527                  PROCESSED_FLAG,
5528                  APPLIED_FLAG,
5529                  AUTOMATIC_FLAG,
5530                  OVERRIDE_FLAG,
5531                  PRINT_ON_INVOICE_FLAG,
5532                  PRIMARY_UOM_FLAG,
5533                  MODIFIER_LEVEL_CODE,
5534                  BENEFIT_QTY,
5535                  BENEFIT_UOM_CODE,
5536 		 SERVICE_DURATION,  -- SERVICE PROJECT
5537 		 SERVICE_PERIOD,    -- SERVICE PROJECT
5538                  LIST_LINE_NO,
5539                  ACCRUAL_FLAG,
5540                  ACCRUAL_CONVERSION_RATE,
5541                  ESTIM_ACCRUAL_RATE,
5542                  RECURRING_FLAG,
5543                  RECURRING_VALUE, -- block pricing
5544                  SELECTED_VOLUME_ATTR,
5545                  ROUNDING_FACTOR,
5546                  UPDATED_FLAG,
5547                  PROCESS_CODE,
5548                  CHARGE_TYPE_CODE,
5549                  CHARGE_SUBTYPE_CODE,
5550                  GROUP_QUANTITY,
5551                  GROUP_AMOUNT,
5552 		 CALCULATION_CODE,
5553                  CURRENCY_DETAIL_ID, /*vivek */
5554                  CURRENCY_HEADER_ID, /*vivek */
5555                  SELLING_ROUNDING_FACTOR, /*vivek */
5556                  ORDER_CURRENCY, /*vivek */
5557                  PRICING_EFFECTIVE_DATE,/*vivek */
5558                  BASE_CURRENCY_CODE,/*vivek */
5559 		 CHANGE_REASON_CODE,
5560 		 CHANGE_REASON_TEXT,
5561 		 LINE_QUANTITY
5562                 ,BREAK_UOM_CODE /* Proration */
5563                 ,BREAK_UOM_CONTEXT /* Proration */
5564                 ,BREAK_UOM_ATTRIBUTE /* Proration */
5565           )
5566   VALUES (       p_LINE_DETAIL_INDEX,
5567                  p_LINE_DETAIL_TYPE_CODE,
5568                  p_PRICE_BREAK_TYPE_CODE,
5569                  p_LINE_INDEX,
5570                  p_CREATED_FROM_LIST_HEADER_ID,
5571                  p_CREATED_FROM_LIST_LINE_ID,
5572                  p_CREATED_FROM_LIST_LINE_TYPE,
5573                  p_CREATED_FROM_LIST_TYPE_CODE,
5574                  p_CREATED_FROM_SQL,
5575                  p_PRICING_GROUP_SEQUENCE,
5576                  p_PRICING_PHASE_ID,
5577                  p_OPERAND_CALCULATION_CODE,
5578                  p_OPERAND_VALUE,
5579                  p_SUBSTITUTION_TYPE_CODE,
5580                  p_SUBSTITUTION_VALUE_FROM,
5581                  p_SUBSTITUTION_VALUE_TO,
5582                  p_ASK_FOR_FLAG,
5583                  p_PRICE_FORMULA_ID,
5584                  p_PRICING_STATUS_CODE,
5585                  p_PRICING_STATUS_TEXT,
5586                  p_PRODUCT_PRECEDENCE,
5587                  p_INCOMPATABLILITY_GRP_CODE,
5588                  p_PROCESSED_FLAG,
5589                  p_APPLIED_FLAG,
5590                  p_AUTOMATIC_FLAG,
5591                  p_OVERRIDE_FLAG,
5592                  p_PRINT_ON_INVOICE_FLAG,
5593                  p_PRIMARY_UOM_FLAG,
5594                  p_MODIFIER_LEVEL_CODE,
5595                  p_BENEFIT_QTY,
5596                  p_BENEFIT_UOM_CODE,
5597 		 p_SERVICE_DURATION,  -- SERVICE PROJECT
5598 		 p_SERVICE_PERIOD,    -- SERVICE PROJECT
5599                  p_LIST_LINE_NO,
5600                  p_ACCRUAL_FLAG,
5601                  p_ACCRUAL_CONVERSION_RATE,
5602                  p_ESTIM_ACCRUAL_RATE,
5603                  p_RECURRING_FLAG,
5604                  p_RECURRING_VALUE, -- block pricing
5605                  p_SELECTED_VOLUME_ATTR,
5606                  p_ROUNDING_FACTOR,
5607                  p_UPDATED_FLAG,
5608                  nvl(p_PROCESS_CODE,G_STATUS_NEW),
5609                  p_CHARGE_TYPE_CODE,
5610                  p_CHARGE_SUBTYPE_CODE,
5611                  p_GROUP_QUANTITY,
5612                  p_GROUP_AMOUNT,
5613 		 p_CALCULATION_CODE,
5614                  P_CURRENCY_DETAIL_ID, /*vivek */
5615                  P_CURRENCY_HEADER_ID, /*vivek */
5616                  P_SELLING_ROUNDING_FACTOR, /*vivek */
5617                  P_ORDER_CURRENCY, /*vivek */
5618                  P_PRICING_EFFECTIVE_DATE,/*vivek */
5619                  P_BASE_CURRENCY_CODE,/*vivek */
5620 		 p_CHANGE_REASON_CODE,
5621 		 p_CHANGE_REASON_TEXT,
5622 		 p_LINE_QUANTITY
5623                 ,p_BREAK_UOM_CODE /* Proration */
5624                 ,p_BREAK_UOM_CONTEXT /* Proration */
5625                 ,p_BREAK_UOM_ATTRIBUTE /* Proration */
5626            );
5627 EXCEPTION
5628   WHEN OTHERS THEN
5629   x_status_code := FND_API.G_RET_STS_ERROR;
5630   x_status_text :=l_routine||' '||SQLERRM;
5631   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5632   engine_debug(l_routine||' '||SQLERRM);
5633   engine_debug(SQLERRM);
5634   END IF;
5635 END;
5636 
5637 /*+----------------------------------------------------------------------
5638   |Procedure INSERT_LDETS_PRICE_LIST_PVT
5639   +----------------------------------------------------------------------
5640 */
5641 PROCEDURE INSERT_LDETS_PRICE_LIST_PVT
5642                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
5643                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5644                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5645                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
5646                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
5647                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
5648                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
5649                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
5650                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
5651                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5652                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5653                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5654                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5655                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5656                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
5657                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
5658                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5659                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5660                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
5661                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5662                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5663                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
5664                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5665                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5666                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
5667                  p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration */
5668                  p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration */
5669                  p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration */
5670                  x_status_code                 OUT NOCOPY VARCHAR2,
5671                  x_status_text                 OUT NOCOPY VARCHAR2)
5672 AS
5673 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS_PRICE_LIST_PVT';
5674 
5675 BEGIN
5676 
5677    FORALL i in p_line_index.FIRST..p_line_index.LAST
5678    INSERT INTO qp_npreq_ldets_tmp
5679                 (LINE_DETAIL_INDEX,
5680                  LINE_DETAIL_TYPE_CODE,
5681                  PRICE_BREAK_TYPE_CODE,
5682                  LINE_INDEX,
5683                  CREATED_FROM_LIST_HEADER_ID,
5684                  CREATED_FROM_LIST_LINE_ID,
5685                  CREATED_FROM_LIST_LINE_TYPE,
5686                  CREATED_FROM_LIST_TYPE_CODE,
5687                  CREATED_FROM_SQL,
5688                  PRICING_GROUP_SEQUENCE,
5689                  PRICING_PHASE_ID,
5690                  OPERAND_CALCULATION_CODE,
5691                  OPERAND_VALUE,
5692                  PRICE_FORMULA_ID,
5693                  PRICING_STATUS_CODE,
5694                  PRICING_STATUS_TEXT,
5695                  PRODUCT_PRECEDENCE,
5696                  INCOMPATABILITY_GRP_CODE,
5697                  PROCESSED_FLAG,
5698                  APPLIED_FLAG,
5699                  AUTOMATIC_FLAG,
5700                  PRIMARY_UOM_FLAG,
5701                  MODIFIER_LEVEL_CODE,
5702                  LIST_LINE_NO,
5703 		 PROCESS_CODE,
5704                  ROUNDING_FACTOR
5705                 ,BREAK_UOM_CODE /* Proration */
5706                 ,BREAK_UOM_CONTEXT /* Proration */
5707                 ,BREAK_UOM_ATTRIBUTE /* Proration */
5708            )
5709    VALUES (      p_LINE_DETAIL_INDEX(i),
5710                  p_LINE_DETAIL_TYPE_CODE(i),
5711                  p_PRICE_BREAK_TYPE_CODE(i),
5712                  p_LINE_INDEX(i),
5713                  p_CREATED_FROM_LIST_HEADER_ID(i),
5714                  p_CREATED_FROM_LIST_LINE_ID(i),
5715                  p_CREATED_FROM_LIST_LINE_TYPE(i),
5716                  p_CREATED_FROM_LIST_TYPE_CODE(i),
5717                  p_CREATED_FROM_SQL(i),
5718                  p_PRICING_GROUP_SEQUENCE(i),
5719                  p_PRICING_PHASE_ID(i),
5720                  p_OPERAND_CALCULATION_CODE(i),
5721                  p_OPERAND_VALUE(i),
5722                  p_PRICE_FORMULA_ID(i),
5723                  p_PRICING_STATUS_CODE(i),
5724                  p_PRICING_STATUS_TEXT(i),
5725                  p_PRODUCT_PRECEDENCE(i),
5726                  p_INCOMPATABLILITY_GRP_CODE(i),
5727                  p_PROCESSED_FLAG(i),
5728                  p_APPLIED_FLAG(i),
5729                  p_AUTOMATIC_FLAG(i),
5730                  p_PRIMARY_UOM_FLAG(i),
5731                  p_MODIFIER_LEVEL_CODE(i),
5732                  p_LIST_LINE_NO(i),
5733 		 G_STATUS_NEW,
5734                  p_ROUNDING_FACTOR(i)
5735                 ,p_BREAK_UOM_CODE(i) /* Proration */
5736                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
5737                 ,p_BREAK_UOM_ATTRIBUTE(i) /* Proration */
5738           );
5739 EXCEPTION
5740   WHEN OTHERS THEN
5741   x_status_code := FND_API.G_RET_STS_ERROR;
5742   x_status_text :=l_routine||' '||SQLERRM;
5743   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5744   engine_debug(l_routine||' '||SQLERRM);
5745   engine_debug(SQLERRM);
5746   END IF;
5747 END;
5748 
5749 /*+----------------------------------------------------------------------
5750   |Procedure INSERT_LDETS_PRICE_LIST_MULT
5751   +----------------------------------------------------------------------
5752 */
5753 PROCEDURE INSERT_LDETS_PRICE_LIST_MULT
5754                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
5755                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5756                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5757                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
5758                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
5759                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
5760                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
5761                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
5762                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
5763                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5764                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5765                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5766                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5767                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5768                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
5769                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
5770                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5771                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5772                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
5773                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5774                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5775                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
5776                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5777                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5778                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
5779                  p_CURRENCY_DETAIL_ID          IN NUMBER_TYPE,
5780                  p_CURRENCY_HEADER_ID          IN NUMBER_TYPE,
5781                  p_SELLING_ROUNDING_FACTOR     IN NUMBER_TYPE,
5782                  p_ORDER_CURRENCY              IN VARCHAR_TYPE,
5783                  p_PRICING_EFFECTIVE_DATE      IN DATE_TYPE,
5784                  p_BASE_CURRENCY_CODE          IN VARCHAR_TYPE,
5785                  p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration */
5786                  p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration */
5787                  p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration */
5788                  x_status_code                 OUT NOCOPY VARCHAR2,
5789                  x_status_text                 OUT NOCOPY VARCHAR2)
5790 AS
5791 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS_PRICE_LIST_MULT';
5792 
5793 BEGIN
5794 
5795  FORALL i in p_line_index.FIRST..p_line_index.LAST
5796  INSERT INTO qp_npreq_ldets_tmp
5797                 (LINE_DETAIL_INDEX,
5798                  LINE_DETAIL_TYPE_CODE,
5799                  PRICE_BREAK_TYPE_CODE,
5800                  LINE_INDEX,
5801                  CREATED_FROM_LIST_HEADER_ID,
5802                  CREATED_FROM_LIST_LINE_ID,
5803                  CREATED_FROM_LIST_LINE_TYPE,
5804                  CREATED_FROM_LIST_TYPE_CODE,
5805                  CREATED_FROM_SQL,
5806                  PRICING_GROUP_SEQUENCE,
5807                  PRICING_PHASE_ID,
5808                  OPERAND_CALCULATION_CODE,
5809                  OPERAND_VALUE,
5810                  PRICE_FORMULA_ID,
5811                  PRICING_STATUS_CODE,
5812                  PRICING_STATUS_TEXT,
5813                  PRODUCT_PRECEDENCE,
5814                  INCOMPATABILITY_GRP_CODE,
5815                  PROCESSED_FLAG,
5816                  APPLIED_FLAG,
5817                  AUTOMATIC_FLAG,
5818                  PRIMARY_UOM_FLAG,
5819                  MODIFIER_LEVEL_CODE,
5820                  LIST_LINE_NO,
5821                  ROUNDING_FACTOR,
5822                  CURRENCY_DETAIL_ID,
5823                  CURRENCY_HEADER_ID,
5824                  SELLING_ROUNDING_FACTOR,
5825                  ORDER_CURRENCY,
5826                  PRICING_EFFECTIVE_DATE,
5827 		 PROCESS_CODE,
5828                  BASE_CURRENCY_CODE
5829                 ,BREAK_UOM_CODE /* Proration */
5830                 ,BREAK_UOM_CONTEXT /* Proration */
5831                 ,BREAK_UOM_ATTRIBUTE /* Proration */
5832           )
5833   VALUES (       p_LINE_DETAIL_INDEX(i),
5834                  p_LINE_DETAIL_TYPE_CODE(i),
5835                  p_PRICE_BREAK_TYPE_CODE(i),
5836                  p_LINE_INDEX(i),
5837                  p_CREATED_FROM_LIST_HEADER_ID(i),
5838                  p_CREATED_FROM_LIST_LINE_ID(i),
5839                  p_CREATED_FROM_LIST_LINE_TYPE(i),
5840                  p_CREATED_FROM_LIST_TYPE_CODE(i),
5841                  p_CREATED_FROM_SQL(i),
5842                  p_PRICING_GROUP_SEQUENCE(i),
5843                  p_PRICING_PHASE_ID(i),
5844                  p_OPERAND_CALCULATION_CODE(i),
5845                  p_OPERAND_VALUE(i),
5846                  p_PRICE_FORMULA_ID(i),
5847                  p_PRICING_STATUS_CODE(i),
5848                  p_PRICING_STATUS_TEXT(i),
5849                  p_PRODUCT_PRECEDENCE(i),
5850                  p_INCOMPATABLILITY_GRP_CODE(i),
5851                  p_PROCESSED_FLAG(i),
5852                  p_APPLIED_FLAG(i),
5853                  p_AUTOMATIC_FLAG(i),
5854                  p_PRIMARY_UOM_FLAG(i),
5855                  p_MODIFIER_LEVEL_CODE(i),
5856                  p_LIST_LINE_NO(i),
5857                  p_ROUNDING_FACTOR(i),
5858                  p_CURRENCY_DETAIL_ID(i),
5859                  p_CURRENCY_HEADER_ID(i),
5860                  p_SELLING_ROUNDING_FACTOR(i),
5861                  p_ORDER_CURRENCY(i),
5862                  p_PRICING_EFFECTIVE_DATE(i),
5863 		 G_STATUS_NEW,
5864                  p_BASE_CURRENCY_CODE(i)
5865                 ,p_BREAK_UOM_CODE(i) /* Proration */
5866                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
5867                 ,p_BREAK_UOM_ATTRIBUTE(i) /* Proration */
5868          );
5869 
5870 EXCEPTION
5871   WHEN OTHERS THEN
5872   x_status_code := FND_API.G_RET_STS_ERROR;
5873   x_status_text :=l_routine||' '||SQLERRM;
5874   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5875   engine_debug(l_routine||' '||SQLERRM);
5876   engine_debug(SQLERRM);
5877   END IF;
5878 END;
5879 
5880 /*+----------------------------------------------------------------------
5881   |Procedure Group INSERT_LDETS2_AT
5882   +----------------------------------------------------------------------
5883 */
5884 
5885 PROCEDURE INSERT_LDETS2_AT
5886                 (p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
5887                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5888                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5889                  p_LINE_INDEX                  IN NUMBER_TYPE,
5890                  p_LIST_HEADER_ID              IN NUMBER_TYPE,
5891                  p_LIST_LINE_ID                IN NUMBER_TYPE,
5892                  p_LIST_LINE_TYPE_CODE         IN VARCHAR_TYPE,
5893                  p_LIST_TYPE_CODE              IN VARCHAR_TYPE,
5894                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5895                  p_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5896                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5897                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5898                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
5899                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
5900                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
5901                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5902                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5903                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5904                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5905                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5906                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
5907                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5908                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
5909                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
5910                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5911                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
5912                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
5913 		 p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
5914                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
5915                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
5916 		 p_LINE_QUANTITY               IN NUMBER_TYPE,
5917 		 p_UPDATED_FLAG                IN VARCHAR_TYPE,
5918 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
5919 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
5920 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
5921                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
5922                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
5923                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
5924 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
5925 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
5926 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
5927                  x_status_code                 OUT NOCOPY VARCHAR2,
5928                  x_status_text                 OUT NOCOPY VARCHAR2) AS
5929 PRAGMA AUTONOMOUS_TRANSACTION;
5930 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2_AT';
5931 l_request_id number;
5932 BEGIN
5933  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
5934  FORALL i in p_line_index.FIRST..p_line_index.LAST
5935  /*INSERT INTO QP_INT_LDETS
5936                 (LINE_DETAIL_INDEX,
5937                  LINE_DETAIL_TYPE_CODE,
5938                  PRICE_BREAK_TYPE_CODE,
5939                  LINE_INDEX,
5940                  CREATED_FROM_LIST_HEADER_ID,
5941                  CREATED_FROM_LIST_LINE_ID,
5942                  CREATED_FROM_LIST_LINE_TYPE,
5943                  CREATED_FROM_LIST_TYPE_CODE,
5944                  PRICING_GROUP_SEQUENCE,
5945                  PRICING_PHASE_ID,
5946                  OPERAND_CALCULATION_CODE,
5947                  OPERAND_VALUE,
5948                  SUBSTITUTION_TYPE_CODE,
5949                  SUBSTITUTION_VALUE_FROM,
5950                  SUBSTITUTION_VALUE_TO,
5951                  PRICE_FORMULA_ID,
5952                  PRICING_STATUS_CODE,
5953                  PRODUCT_PRECEDENCE,
5954                  INCOMPATABILITY_GRP_CODE,
5955                  APPLIED_FLAG,
5956                  AUTOMATIC_FLAG,
5957                  OVERRIDE_FLAG,
5958                  MODIFIER_LEVEL_CODE,
5959                  BENEFIT_QTY,
5960                  BENEFIT_UOM_CODE,
5961                  LIST_LINE_NO,
5962                  ACCRUAL_FLAG,
5963                  ACCRUAL_CONVERSION_RATE,
5964                  ESTIM_ACCRUAL_RATE,
5965                  CHARGE_TYPE_CODE,
5966                  CHARGE_SUBTYPE_CODE,
5967                  PROCESS_CODE,
5968                  LINE_QUANTITY,
5969                  UPDATED_FLAG, -- begin shu, fix Bug 2599822
5970                  CALCULATION_CODE,
5971                  CHANGE_REASON_CODE,
5972                  CHANGE_REASON_TEXT,
5973                  ACCUM_CONTEXT, -- accum range break
5974                  ACCUM_ATTRIBUTE, -- accum range break
5975                  ACCUM_ATTR_RUN_SRC_FLAG,
5976                  BREAK_UOM_CODE,
5977                  BREAK_UOM_CONTEXT,
5978                  BREAK_UOM_ATTRIBUTE)
5979   VALUES (
5980                  p_LINE_DETAIL_INDEX(i),
5981                  'NULL',
5982                  p_PRICE_BREAK_TYPE_CODE(i),
5983                  p_LINE_INDEX(i),
5984                  p_LIST_HEADER_ID(i),
5985                  p_LIST_LINE_ID(i),
5986                  p_LIST_LINE_TYPE_CODE(i),
5987                  p_LIST_TYPE_CODE(i),
5988                  p_PRICING_GROUP_SEQUENCE(i),
5989                  p_PRICING_PHASE_ID(i),
5990                  p_OPERAND_CALCULATION_CODE(i),
5991                  p_OPERAND_VALUE(i),
5992                  p_SUBSTITUTION_TYPE_CODE(i),
5993                  p_SUBSTITUTION_VALUE_FROM(i),
5994                  p_SUBSTITUTION_VALUE_TO(i),
5995                  p_PRICE_FORMULA_ID(i),
5996                  G_STATUS_NEW,
5997                  p_PRODUCT_PRECEDENCE(i),
5998                  p_INCOMPATABLILITY_GRP_CODE(i),
5999                  p_APPLIED_FLAG(i),
6000                  p_AUTOMATIC_FLAG(i),
6001                  p_OVERRIDE_FLAG(i),
6002                  p_MODIFIER_LEVEL_CODE(i),
6003                  p_BENEFIT_QTY(i),
6004                  p_BENEFIT_UOM_CODE(i),
6005                  p_LIST_LINE_NO(i),
6006                  p_ACCRUAL_FLAG(i),
6007                  p_ACCRUAL_CONVERSION_RATE(i),
6008                  p_ESTIM_ACCRUAL_RATE(i),
6009                  p_CHARGE_TYPE_CODE(i),
6010                  p_CHARGE_SUBTYPE_CODE(i),
6011                  G_STATUS_NEW,
6012                  p_LINE_QUANTITY(i),
6013                  p_UPDATED_FLAG(i),
6014                  p_CALCULATION_CODE(i),
6015                  p_CHANGE_REASON_CODE(i),
6016                  p_CHANGE_REASON_TEXT(i),
6017                  p_ACCUM_CONTEXT(i), -- accum range break
6018                  p_ACCUM_ATTRIBUTE(i), -- accum range break
6019                  p_ACCUM_FLAG(i)
6020                 ,p_BREAK_UOM_CODE(i)
6021                 ,p_BREAK_UOM_CONTEXT(i)
6022                 ,p_BREAK_UOM_ATTRIBUTE(i)
6023           );*/
6024  INSERT INTO QP_INT_LDETS_T
6025                 (LINE_DETAIL_INDEX,
6026                  LINE_DETAIL_TYPE_CODE,
6027                  PRICE_BREAK_TYPE_CODE,
6028                  LINE_INDEX,
6029                  CREATED_FROM_LIST_HEADER_ID,
6030                  CREATED_FROM_LIST_LINE_ID,
6031                  CREATED_FROM_LIST_LINE_TYPE,
6032                  CREATED_FROM_LIST_TYPE_CODE,
6033                  PRICING_GROUP_SEQUENCE,
6034                  PRICING_PHASE_ID,
6035                  OPERAND_CALCULATION_CODE,
6036                  OPERAND_VALUE,
6037                  SUBSTITUTION_TYPE_CODE,
6038                  SUBSTITUTION_VALUE_FROM,
6039                  SUBSTITUTION_VALUE_TO,
6040                  PRICE_FORMULA_ID,
6041                  PRICING_STATUS_CODE,
6042                  PRODUCT_PRECEDENCE,
6043                  INCOMPATABILITY_GRP_CODE,
6044                  APPLIED_FLAG,
6045                  AUTOMATIC_FLAG,
6046                  OVERRIDE_FLAG,
6047                  MODIFIER_LEVEL_CODE,
6048                  BENEFIT_QTY,
6049                  BENEFIT_UOM_CODE,
6050                  LIST_LINE_NO,
6051                  ACCRUAL_FLAG,
6052                  ACCRUAL_CONVERSION_RATE,
6053                  ESTIM_ACCRUAL_RATE,
6054                  CHARGE_TYPE_CODE,
6055                  CHARGE_SUBTYPE_CODE,
6056                  PROCESS_CODE,
6057                  LINE_QUANTITY,
6058                  UPDATED_FLAG, -- begin shu, fix Bug 2599822
6059                  CALCULATION_CODE,
6060                  CHANGE_REASON_CODE,
6061                  CHANGE_REASON_TEXT,
6062                  ACCUM_CONTEXT, -- accum range break
6063                  ACCUM_ATTRIBUTE, -- accum range break
6064                  ACCUM_ATTR_RUN_SRC_FLAG,
6065                  BREAK_UOM_CODE, /* Proration */
6066                  BREAK_UOM_CONTEXT, /* Proration */
6067                  BREAK_UOM_ATTRIBUTE, /* Proration */
6068                  request_id)
6069   VALUES (
6070                  p_LINE_DETAIL_INDEX(i),
6071                  'NULL',
6072                  p_PRICE_BREAK_TYPE_CODE(i),
6073                  p_LINE_INDEX(i),
6074                  p_LIST_HEADER_ID(i),
6075                  p_LIST_LINE_ID(i),
6076                  p_LIST_LINE_TYPE_CODE(i),
6077                  p_LIST_TYPE_CODE(i),
6078                  p_PRICING_GROUP_SEQUENCE(i),
6079                  p_PRICING_PHASE_ID(i),
6080                  p_OPERAND_CALCULATION_CODE(i),
6081                  p_OPERAND_VALUE(i),
6082                  p_SUBSTITUTION_TYPE_CODE(i),
6083                  p_SUBSTITUTION_VALUE_FROM(i),
6084                  p_SUBSTITUTION_VALUE_TO(i),
6085                  p_PRICE_FORMULA_ID(i),
6086                  G_STATUS_NEW,
6087                  p_PRODUCT_PRECEDENCE(i),
6088                  p_INCOMPATABLILITY_GRP_CODE(i),
6089                  p_APPLIED_FLAG(i),
6090                  p_AUTOMATIC_FLAG(i),
6091                  p_OVERRIDE_FLAG(i),
6092                  p_MODIFIER_LEVEL_CODE(i),
6093                  p_BENEFIT_QTY(i),
6094                  p_BENEFIT_UOM_CODE(i),
6095                  p_LIST_LINE_NO(i),
6096                  p_ACCRUAL_FLAG(i),
6097                  p_ACCRUAL_CONVERSION_RATE(i),
6098                  p_ESTIM_ACCRUAL_RATE(i),
6099                  p_CHARGE_TYPE_CODE(i),
6100                  p_CHARGE_SUBTYPE_CODE(i),
6101                  G_STATUS_NEW,
6102                  p_LINE_QUANTITY(i),
6103                  p_UPDATED_FLAG(i),
6104                  p_CALCULATION_CODE(i),
6105                  p_CHANGE_REASON_CODE(i),
6106                  p_CHANGE_REASON_TEXT(i),
6107                  p_ACCUM_CONTEXT(i), -- accum range break
6108                  p_ACCUM_ATTRIBUTE(i), -- accum range break
6109                  p_ACCUM_FLAG(i)
6110                 ,p_BREAK_UOM_CODE(i) /* Proration */
6111                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
6112                 ,p_BREAK_UOM_ATTRIBUTE(i), /* Proration */
6113                  l_request_id
6114           );
6115   QP_PREQ_GRP.G_INT_LDETS_NO := QP_PREQ_GRP.G_INT_LDETS_NO + p_LINE_DETAIL_INDEX.count;
6116   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6117     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LDETS_NO='||QP_PREQ_GRP.G_INT_LDETS_NO);
6118   END IF;
6119 
6120 COMMIT;
6121 EXCEPTION
6122   WHEN OTHERS THEN
6123   x_status_code := FND_API.G_RET_STS_ERROR;
6124   x_status_text :=l_routine||' '||SQLERRM;
6125   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6126   QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
6127   QP_PREQ_GRP.engine_debug(SQLERRM);
6128   END IF;
6129 END;
6130 
6131 /*+----------------------------------------------------------------------
6132   |Procedure Group INSERT_LDETS2
6133   +----------------------------------------------------------------------
6134 */
6135 
6136 PROCEDURE INSERT_LDETS2
6137                 (p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
6138                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6139                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6140                  p_LINE_INDEX                  IN NUMBER_TYPE,
6141                  p_LIST_HEADER_ID              IN NUMBER_TYPE,
6142                  p_LIST_LINE_ID                IN NUMBER_TYPE,
6143                  p_LIST_LINE_TYPE_CODE         IN VARCHAR_TYPE,
6144                  p_LIST_TYPE_CODE              IN VARCHAR_TYPE,
6145                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6146                  p_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6147                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6148                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6149                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
6150                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
6151                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
6152                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6153                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6154                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6155                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6156                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6157                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6158                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6159                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6160                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6161 		 p_SERVICE_DURATION	       IN NUMBER_TYPE,  -- SERVICE PROJECT
6162 		 p_SERVICE_PERIOD	       IN VARCHAR_TYPE,    -- SERVICE PROJECT
6163                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6164                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6165                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6166 		 p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6167                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6168                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6169 		 p_LINE_QUANTITY               IN NUMBER_TYPE,
6170 		 p_UPDATED_FLAG                IN VARCHAR_TYPE,
6171 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
6172 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
6173 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
6174                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6175                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6176                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6177 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
6178 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
6179 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
6180                  x_status_code                 OUT NOCOPY VARCHAR2,
6181                  x_status_text                 OUT NOCOPY VARCHAR2) AS
6182 
6183 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2';
6184 --added by yangli for Java Engine project
6185 l_debug varchar2(3);
6186 --added by yangli for Java Engine project
6187 BEGIN
6188 --added by yangli for Java Engine project
6189 -- Set the global variable G_DEBUG_ENGINE
6190   QP_PREQ_GRP.Set_QP_Debug;
6191 
6192   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
6193 
6194 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
6195  IF l_debug = FND_API.G_TRUE THEN
6196         ENGINE_DEBUG('Java Engine not Installed ----------');
6197  END IF;
6198 --added by yangli for Java Engine project
6199 
6200  FORALL i in p_line_index.FIRST..p_line_index.LAST
6201  INSERT INTO qp_npreq_ldets_tmp
6202                 (LINE_DETAIL_INDEX,
6203                  LINE_DETAIL_TYPE_CODE,
6204                  PRICE_BREAK_TYPE_CODE,
6205                  LINE_INDEX,
6206                  CREATED_FROM_LIST_HEADER_ID,
6207                  CREATED_FROM_LIST_LINE_ID,
6208                  CREATED_FROM_LIST_LINE_TYPE,
6209                  CREATED_FROM_LIST_TYPE_CODE,
6210                  PRICING_GROUP_SEQUENCE,
6211                  PRICING_PHASE_ID,
6212                  OPERAND_CALCULATION_CODE,
6213                  OPERAND_VALUE,
6214                  SUBSTITUTION_TYPE_CODE,
6215                  SUBSTITUTION_VALUE_FROM,
6216                  SUBSTITUTION_VALUE_TO,
6217                  PRICE_FORMULA_ID,
6218                  PRICING_STATUS_CODE,
6219                  PRODUCT_PRECEDENCE,
6220                  INCOMPATABILITY_GRP_CODE,
6221                  APPLIED_FLAG,
6222                  AUTOMATIC_FLAG,
6223                  OVERRIDE_FLAG,
6224                  MODIFIER_LEVEL_CODE,
6225                  BENEFIT_QTY,
6226                  BENEFIT_UOM_CODE,
6227 		 SERVICE_DURATION,  -- SERVICE PROJECT
6228 		 SERVICE_PERIOD,    -- SERVICE PROJECT
6229                  LIST_LINE_NO,
6230                  ACCRUAL_FLAG,
6231                  ACCRUAL_CONVERSION_RATE,
6232                  ESTIM_ACCRUAL_RATE,
6233                  CHARGE_TYPE_CODE,
6234                  CHARGE_SUBTYPE_CODE,
6235 		 PROCESS_CODE,
6236 		 LINE_QUANTITY,
6237 		 UPDATED_FLAG, -- begin shu, fix Bug 2599822
6238 		 CALCULATION_CODE,
6239 		 CHANGE_REASON_CODE,
6240 		 CHANGE_REASON_TEXT,
6241                  ACCUM_CONTEXT, -- accum range break
6242                  ACCUM_ATTRIBUTE, -- accum range break
6243                  ACCUM_ATTR_RUN_SRC_FLAG
6244                 ,BREAK_UOM_CODE /* Proration */
6245                 ,BREAK_UOM_CONTEXT /* Proration */
6246                 ,BREAK_UOM_ATTRIBUTE /* Proration */
6247          )
6248   VALUES (
6249                  p_LINE_DETAIL_INDEX(i),
6250                  'NULL',
6251                  p_PRICE_BREAK_TYPE_CODE(i),
6252                  p_LINE_INDEX(i),
6253                  p_LIST_HEADER_ID(i),
6254                  p_LIST_LINE_ID(i),
6255                  p_LIST_LINE_TYPE_CODE(i),
6256                  p_LIST_TYPE_CODE(i),
6257                  p_PRICING_GROUP_SEQUENCE(i),
6258                  p_PRICING_PHASE_ID(i),
6259                  p_OPERAND_CALCULATION_CODE(i),
6260                  p_OPERAND_VALUE(i),
6261                  p_SUBSTITUTION_TYPE_CODE(i),
6262                  p_SUBSTITUTION_VALUE_FROM(i),
6263                  p_SUBSTITUTION_VALUE_TO(i),
6264                  p_PRICE_FORMULA_ID(i),
6265                  G_STATUS_NEW,
6266                  p_PRODUCT_PRECEDENCE(i),
6267                  p_INCOMPATABLILITY_GRP_CODE(i),
6268                  p_APPLIED_FLAG(i),
6269                  p_AUTOMATIC_FLAG(i),
6270                  p_OVERRIDE_FLAG(i),
6271                  p_MODIFIER_LEVEL_CODE(i),
6272                  p_BENEFIT_QTY(i),
6273                  p_BENEFIT_UOM_CODE(i),
6274 		 p_SERVICE_DURATION(i),  -- SERVICE PROJECT
6275 		 p_SERVICE_PERIOD(i),    -- SERVICE PROJECT
6276                  p_LIST_LINE_NO(i),
6277                  p_ACCRUAL_FLAG(i),
6278                  p_ACCRUAL_CONVERSION_RATE(i),
6279                  p_ESTIM_ACCRUAL_RATE(i),
6280                  p_CHARGE_TYPE_CODE(i),
6281                  p_CHARGE_SUBTYPE_CODE(i),
6282 		 G_STATUS_NEW,
6283 		 p_LINE_QUANTITY(i),
6284 		 p_UPDATED_FLAG(i),
6285 		 p_CALCULATION_CODE(i),
6286 		 p_CHANGE_REASON_CODE(i),
6287 		 p_CHANGE_REASON_TEXT(i),
6288                  p_ACCUM_CONTEXT(i), -- accum range break
6289                  p_ACCUM_ATTRIBUTE(i), -- accum range break
6290                  p_ACCUM_FLAG(i)
6291                 ,p_BREAK_UOM_CODE(i) /* Proration */
6292                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
6293                 ,p_BREAK_UOM_ATTRIBUTE(i) /* Proration */
6294           );
6295 --added by yangli for Java Engine project
6296 ELSE
6297  IF l_debug = FND_API.G_TRUE THEN
6298         ENGINE_DEBUG('Java Engine Installed ----------');
6299  END IF;
6300 QP_PREQ_GRP.INSERT_LDETS2_AT
6301                 (p_LINE_DETAIL_INDEX           ,
6302                  p_LINE_DETAIL_TYPE_CODE       ,
6303                  p_PRICE_BREAK_TYPE_CODE       ,
6304                  p_LINE_INDEX                  ,
6305                  p_LIST_HEADER_ID              ,
6306                  p_LIST_LINE_ID                ,
6307                  p_LIST_LINE_TYPE_CODE         ,
6308                  p_LIST_TYPE_CODE              ,
6309                  p_PRICING_GROUP_SEQUENCE      ,
6310                  p_PRICING_PHASE_ID            ,
6311                  p_OPERAND_CALCULATION_CODE    ,
6312                  p_OPERAND_VALUE               ,
6313                  p_SUBSTITUTION_TYPE_CODE      ,
6314                  p_SUBSTITUTION_VALUE_FROM     ,
6315                  p_SUBSTITUTION_VALUE_TO       ,
6316                  p_PRICE_FORMULA_ID            ,
6317                  p_PRODUCT_PRECEDENCE          ,
6318                  p_INCOMPATABLILITY_GRP_CODE   ,
6319                  p_APPLIED_FLAG                ,
6320                  p_AUTOMATIC_FLAG              ,
6321                  p_OVERRIDE_FLAG               ,
6322                  p_MODIFIER_LEVEL_CODE         ,
6323                  p_BENEFIT_QTY                 ,
6324                  p_BENEFIT_UOM_CODE            ,
6325                  p_LIST_LINE_NO                ,
6326 
6327                  p_ACCRUAL_FLAG                ,
6328 
6329                  p_ACCRUAL_CONVERSION_RATE     ,
6330                  p_ESTIM_ACCRUAL_RATE          ,
6331 
6332                  p_CHARGE_TYPE_CODE            ,
6333                  p_CHARGE_SUBTYPE_CODE         ,
6334                  p_LINE_QUANTITY               ,
6335                  p_UPDATED_FLAG                ,
6336                  p_CALCULATION_CODE            ,
6337                  p_CHANGE_REASON_CODE          ,
6338                  p_CHANGE_REASON_TEXT          ,
6339                  p_ACCUM_CONTEXT, -- accum range break
6340                  p_ACCUM_ATTRIBUTE, -- accum range break
6341                  p_ACCUM_FLAG,
6342                  p_BREAK_UOM_CODE, /* Proration */
6343                  p_BREAK_UOM_CONTEXT, /* Proration */
6344                  p_BREAK_UOM_ATTRIBUTE, /* Proration */
6345                  x_status_code                 ,
6346                  x_status_text                 );
6347 END IF;
6348 --added by yangli for Java Engine project
6349 
6350 EXCEPTION
6351   WHEN OTHERS THEN
6352   x_status_code := FND_API.G_RET_STS_ERROR;
6353   x_status_text :=l_routine||' '||SQLERRM;
6354   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6355   engine_debug(l_routine||' '||SQLERRM);
6356   engine_debug(SQLERRM);
6357   END IF;
6358 END;
6359 
6360 /*+----------------------------------------------------------------------
6361   |Procedure INSERT_LDETS_PVT
6362   +----------------------------------------------------------------------
6363 */
6364 PROCEDURE INSERT_LDETS_PVT
6365                 (p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
6366                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6367                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6368                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
6369                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
6370                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
6371                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
6372                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
6373                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
6374                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6375                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6376                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6377                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6378                  p_NET_AMOUNT_FLAG             IN VARCHAR_TYPE, --2720717, net_amount
6379                  p_ASK_FOR_FLAG                IN VARCHAR_TYPE,
6380                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6381                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
6382                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
6383                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6384                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6385                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
6386                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6387                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6388                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6389                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
6390                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6391                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6392                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6393 		 p_SERVICE_DURATION	       IN NUMBER_TYPE,  -- SERVICE PROJECT
6394 		 p_SERVICE_PERIOD	       IN VARCHAR_TYPE,    -- SERVICE PROJECT
6395                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6396                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6397                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6398                  p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6399                  p_HEADER_LIMIT_EXISTS         IN VARCHAR_TYPE,
6400                  p_LINE_LIMIT_EXISTS           IN VARCHAR_TYPE,
6401                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6402                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6403                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6404                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6405                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6406                  x_status_code                 OUT NOCOPY VARCHAR2,
6407                  x_status_text                 OUT NOCOPY VARCHAR2)
6408 AS
6409 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS_PVT';
6410 
6411 BEGIN
6412 
6413    FORALL i in p_line_index.FIRST..p_line_index.LAST
6414    INSERT INTO qp_npreq_ldets_tmp
6415                 (LINE_DETAIL_INDEX,
6416                  LINE_DETAIL_TYPE_CODE,
6417                  PRICE_BREAK_TYPE_CODE,
6418                  LINE_INDEX,
6419                  CREATED_FROM_LIST_HEADER_ID,
6420                  CREATED_FROM_LIST_LINE_ID,
6421                  CREATED_FROM_LIST_LINE_TYPE,
6422                  CREATED_FROM_LIST_TYPE_CODE,
6423                  CREATED_FROM_SQL,
6424                  PRICING_GROUP_SEQUENCE,
6425                  PRICING_PHASE_ID,
6426                  OPERAND_CALCULATION_CODE,
6427                  OPERAND_VALUE,
6428                  NET_AMOUNT_FLAG,     --2720717, net_amount
6429                  ASK_FOR_FLAG,
6430                  PRICE_FORMULA_ID,
6431                  PRICING_STATUS_CODE,
6432                  PRICING_STATUS_TEXT,
6433                  PRODUCT_PRECEDENCE,
6434                  INCOMPATABILITY_GRP_CODE,
6435                  PROCESSED_FLAG,
6436                  APPLIED_FLAG,
6437                  AUTOMATIC_FLAG,
6438                  OVERRIDE_FLAG,
6439                  PRIMARY_UOM_FLAG,
6440                  MODIFIER_LEVEL_CODE,
6441                  BENEFIT_QTY,
6442                  BENEFIT_UOM_CODE,
6443 		 SERVICE_DURATION,  -- SERVICE PROJECT
6444 		 SERVICE_PERIOD,    -- SERVICE PROJECT
6445                  LIST_LINE_NO,
6446                  ACCRUAL_FLAG,
6447                  ACCRUAL_CONVERSION_RATE,
6448                  ESTIM_ACCRUAL_RATE,
6449                  HEADER_LIMIT_EXISTS,
6450                  LINE_LIMIT_EXISTS,
6451 		 PROCESS_CODE,
6452                  CHARGE_TYPE_CODE,
6453                  CHARGE_SUBTYPE_CODE,
6454                  ACCUM_CONTEXT,
6455                  ACCUM_ATTRIBUTE,
6456                  ACCUM_ATTR_RUN_SRC_FLAG)
6457    VALUES (      p_LINE_DETAIL_INDEX(i),
6458                  p_LINE_DETAIL_TYPE_CODE(i),
6459                  p_PRICE_BREAK_TYPE_CODE(i),
6460                  p_LINE_INDEX(i),
6461                  p_CREATED_FROM_LIST_HEADER_ID(i),
6462                  p_CREATED_FROM_LIST_LINE_ID(i),
6463                  p_CREATED_FROM_LIST_LINE_TYPE(i),
6464                  p_CREATED_FROM_LIST_TYPE_CODE(i),
6465                  p_CREATED_FROM_SQL(i),
6466                  p_PRICING_GROUP_SEQUENCE(i),
6467                  p_PRICING_PHASE_ID(i),
6468                  p_OPERAND_CALCULATION_CODE(i),
6469                  p_OPERAND_VALUE(i),
6470                  p_NET_AMOUNT_FLAG(i),      --2720717, net_amount
6471                  p_ASK_FOR_FLAG(i),
6472                  p_PRICE_FORMULA_ID(i),
6473                  p_PRICING_STATUS_CODE(i),
6474                  p_PRICING_STATUS_TEXT(i),
6475                  p_PRODUCT_PRECEDENCE(i),
6476                  p_INCOMPATABLILITY_GRP_CODE(i),
6477                  p_PROCESSED_FLAG(i),
6478                  p_APPLIED_FLAG(i),
6479                  p_AUTOMATIC_FLAG(i),
6480                  p_OVERRIDE_FLAG(i),
6481                  p_PRIMARY_UOM_FLAG(i),
6482                  p_MODIFIER_LEVEL_CODE(i),
6483                  p_BENEFIT_QTY(i),
6484                  p_BENEFIT_UOM_CODE(i),
6485 		 p_SERVICE_DURATION(i),  -- SERVICE PROJECT
6486 		 p_SERVICE_PERIOD(i),    -- SERVICE PROJECT
6487                  p_LIST_LINE_NO(i),
6488                  p_ACCRUAL_FLAG(i),
6489                  p_ACCRUAL_CONVERSION_RATE(i),
6490                  p_ESTIM_ACCRUAL_RATE(i),
6491                  decode(p_HEADER_LIMIT_EXISTS(i),'Y','Y',decode(p_LINE_LIMIT_EXISTS(i),'Y','Y','N')),
6492                  p_LINE_LIMIT_EXISTS(i),
6493 		 G_STATUS_NEW,
6494                  p_CHARGE_TYPE_CODE(i),
6495                  p_CHARGE_SUBTYPE_CODE(i),
6496                  p_ACCUM_CONTEXT(i),
6497                  p_ACCUM_ATTRIBUTE(i),
6498                  p_ACCUM_FLAG(i));
6499 EXCEPTION
6500   WHEN OTHERS THEN
6501   x_status_code := FND_API.G_RET_STS_ERROR;
6502   x_status_text :=l_routine||' '||SQLERRM;
6503   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6504   engine_debug(l_routine||' '||SQLERRM);
6505   engine_debug(SQLERRM);
6506   END IF;
6507 END;
6508 
6509 /*+----------------------------------------------------------------------
6510   |Procedure Public INSERT_LDETS2_AT
6511   +----------------------------------------------------------------------
6512 */
6513 PROCEDURE INSERT_LDETS2_AT
6514                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
6515                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6516                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6517                  p_LIST_PRICE                  IN NUMBER_TYPE,
6518                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
6519                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
6520                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
6521                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
6522                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
6523                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
6524                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6525                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6526                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6527                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6528                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
6529                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
6530                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
6531                  p_ASK_FOR_FLAG                IN VARCHAR_TYPE,
6532                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6533                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
6534                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
6535                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6536                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6537                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
6538                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6539                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6540                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6541                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
6542                  p_PRINT_ON_INVOICE_FLAG       IN VARCHAR_TYPE,
6543                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6544                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6545                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6546                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6547                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6548                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6549                  p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6550                  p_RECURRING_FLAG              IN VARCHAR_TYPE,
6551                  p_SELECTED_VOLUME_ATTR        IN VARCHAR_TYPE,
6552                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
6553                  p_HEADER_LIMIT_EXISTS         IN VARCHAR_TYPE,
6554                  p_LINE_LIMIT_EXISTS           IN VARCHAR_TYPE,
6555                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6556                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6557                  p_CURRENCY_DETAIL_ID          IN NUMBER_TYPE,
6558                  p_CURRENCY_HEADER_ID          IN NUMBER_TYPE,
6559                  p_SELLING_ROUNDING_FACTOR     IN NUMBER_TYPE,
6560                  p_ORDER_CURRENCY              IN VARCHAR_TYPE,
6561                  p_PRICING_EFFECTIVE_DATE      IN DATE_TYPE,
6562                  p_BASE_CURRENCY_CODE          IN VARCHAR_TYPE,
6563 		 p_LINE_QUANTITY	       IN NUMBER_TYPE,
6564                  p_UPDATED_FLAG                IN VARCHAR_TYPE,
6565 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
6566 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
6567 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
6568                  p_PRICE_ADJUSTMENT_ID         IN NUMBER_TYPE, -- bug 3099847
6569                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6570                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6571                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6572 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
6573 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
6574 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
6575                  p_PROCESS_CODE                IN VARCHAR_TYPE, -- 3215497
6576                  x_status_code                 OUT NOCOPY VARCHAR2,
6577                  x_status_text                 OUT NOCOPY VARCHAR2)
6578 AS
6579 PRAGMA AUTONOMOUS_TRANSACTION;
6580 l_request_id number;
6581 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2';
6582 BEGIN
6583   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6584     QP_PREQ_GRP.engine_debug('G_LINE_DETAIL_INDEX b4 insert_ldets2 '||G_LINE_DETAIL_INDEX);
6585     QP_PREQ_GRP.engine_debug('current request_id: '||sys_context('qp_context','request_id'));
6586   END IF;
6587   l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
6588 
6589   FORALL i in p_line_index.FIRST..p_line_index.LAST
6590   INSERT INTO QP_INT_LDETS_T
6591                 ( LINE_DETAIL_INDEX,
6592                  LINE_DETAIL_TYPE_CODE,
6593                  PRICE_BREAK_TYPE_CODE,
6594                  LINE_INDEX,
6595                  CREATED_FROM_LIST_HEADER_ID,
6596                  CREATED_FROM_LIST_LINE_ID,
6597                  CREATED_FROM_LIST_LINE_TYPE,
6598                  CREATED_FROM_LIST_TYPE_CODE,
6599                  CREATED_FROM_SQL,
6600                  PRICING_GROUP_SEQUENCE,
6601                  PRICING_PHASE_ID,
6602                  OPERAND_CALCULATION_CODE,
6603                  OPERAND_VALUE,
6604                  SUBSTITUTION_TYPE_CODE,
6605                  SUBSTITUTION_VALUE_FROM,
6606                  SUBSTITUTION_VALUE_TO,
6607                  ASK_FOR_FLAG,
6608                  PRICE_FORMULA_ID,
6609                  PRICING_STATUS_CODE,
6610                  PRICING_STATUS_TEXT,
6611                  PRODUCT_PRECEDENCE,
6612                  INCOMPATABILITY_GRP_CODE,
6613                  PROCESSED_FLAG,
6614                  APPLIED_FLAG,
6615                  AUTOMATIC_FLAG,
6616                  OVERRIDE_FLAG,
6617                  PRINT_ON_INVOICE_FLAG,
6618                  PRIMARY_UOM_FLAG,
6619                  MODIFIER_LEVEL_CODE,
6620                  BENEFIT_QTY,
6621                  BENEFIT_UOM_CODE,
6622                  LIST_LINE_NO,
6623                  ACCRUAL_FLAG,
6624                  ACCRUAL_CONVERSION_RATE,
6625                  ESTIM_ACCRUAL_RATE,
6626                  RECURRING_FLAG,
6627                  SELECTED_VOLUME_ATTR,
6628                  ROUNDING_FACTOR,
6629                  HEADER_LIMIT_EXISTS,
6630                  LINE_LIMIT_EXISTS,
6631                  CHARGE_TYPE_CODE,
6632                  CHARGE_SUBTYPE_CODE,
6633                  CURRENCY_DETAIL_ID, /*sunilpandey */
6634                  CURRENCY_HEADER_ID, /*vivek */
6635                  SELLING_ROUNDING_FACTOR, /*vivek */
6636                  ORDER_CURRENCY, /*vivek */
6637                  PRICING_EFFECTIVE_DATE,/*vivek */
6638                  BASE_CURRENCY_CODE,/*vivek */
6639                  PROCESS_CODE,
6640                  LINE_QUANTITY,
6641                  UPDATED_FLAG, -- begin shu fix bug 2599822
6642                  CALCULATION_CODE,
6643                  CHANGE_REASON_CODE,
6644                  CHANGE_REASON_TEXT, -- end shu fix bug 2599822
6645                  PRICE_ADJUSTMENT_ID, -- bug 3099847
6646                  ACCUM_CONTEXT,          -- accum range break
6647                  ACCUM_ATTRIBUTE,        -- accum range break
6648                  ACCUM_ATTR_RUN_SRC_FLAG, -- accum range break
6649                  BREAK_UOM_CODE, /* Proration */
6650                  BREAK_UOM_CONTEXT, /* Proration */
6651                  BREAK_UOM_ATTRIBUTE, /* Proration */
6652                  request_id
6653                  )
6654     VALUES (     p_LINE_DETAIL_INDEX(i),
6655                  p_LINE_DETAIL_TYPE_CODE(i),
6656                  p_PRICE_BREAK_TYPE_CODE(i),
6657                  p_LINE_INDEX(i),
6658                  p_CREATED_FROM_LIST_HEADER_ID(i),
6659                  p_CREATED_FROM_LIST_LINE_ID(i),
6660                  p_CREATED_FROM_LIST_LINE_TYPE(i),
6661                  p_CREATED_FROM_LIST_TYPE_CODE(i),
6662                  p_CREATED_FROM_SQL(i),
6663                  p_PRICING_GROUP_SEQUENCE(i),
6664                  p_PRICING_PHASE_ID(i),
6665                  p_OPERAND_CALCULATION_CODE(i),
6666                  p_OPERAND_VALUE(i),
6667                  p_SUBSTITUTION_TYPE_CODE(i),
6668                  p_SUBSTITUTION_VALUE_FROM(i),
6669                  p_SUBSTITUTION_VALUE_TO(i),
6670                  p_ASK_FOR_FLAG(i),
6671                  p_PRICE_FORMULA_ID(i),
6672                  p_PRICING_STATUS_CODE(i),
6673                  p_PRICING_STATUS_TEXT(i),
6674                  p_PRODUCT_PRECEDENCE(i),
6675                  p_INCOMPATABLILITY_GRP_CODE(i),
6676                  p_PROCESSED_FLAG(i),
6677                  p_APPLIED_FLAG(i),
6678                  p_AUTOMATIC_FLAG(i),
6679                  p_OVERRIDE_FLAG(i),
6680                  p_PRINT_ON_INVOICE_FLAG(i),
6681                  p_PRIMARY_UOM_FLAG(i),
6682                  p_MODIFIER_LEVEL_CODE(i),
6683                  p_BENEFIT_QTY(i),
6684                  p_BENEFIT_UOM_CODE(i),
6685                  p_LIST_LINE_NO(i),
6686                  p_ACCRUAL_FLAG(i),
6687                  p_ACCRUAL_CONVERSION_RATE(i),
6688                  p_ESTIM_ACCRUAL_RATE(i),
6689                  p_RECURRING_FLAG(i),
6690                  p_SELECTED_VOLUME_ATTR(i),
6691                  p_ROUNDING_FACTOR(i),
6692                  decode(p_HEADER_LIMIT_EXISTS(i),'Y','Y',decode(p_LINE_LIMIT_EXISTS(i),'Y','Y','N')),
6693                  p_LINE_LIMIT_EXISTS(i),
6694                  p_CHARGE_TYPE_CODE(i),
6695                  p_CHARGE_SUBTYPE_CODE(i),
6696                  p_CURRENCY_DETAIL_ID(i),    /* sunilpandey */
6697                  p_CURRENCY_HEADER_ID(i),    /* vivek */
6698                  p_SELLING_ROUNDING_FACTOR(i),    /* vivek */
6699                  p_ORDER_CURRENCY(i),        /* vivek */
6700                  p_PRICING_EFFECTIVE_DATE(i),      /* vivek */
6701                  p_BASE_CURRENCY_CODE(i),         /* vivek */
6702                  p_PROCESS_CODE(i), -- 3215497, changed from G_STATUS_NEW
6703                  p_LINE_QUANTITY(i),
6704                  p_UPDATED_FLAG(i),  -- begin shu fix bug 2599822
6705                  p_CALCULATION_CODE(i),
6706                  p_CHANGE_REASON_CODE(i),
6707                  p_CHANGE_REASON_TEXT(i),     -- end shu fix bug 2599822
6708                  p_PRICE_ADJUSTMENT_ID(i), -- bug 3099847
6709                  p_ACCUM_CONTEXT(i),   -- accum range break
6710                  p_ACCUM_ATTRIBUTE(i), -- accum range break
6711                  p_ACCUM_FLAG(i),       -- accum range break
6712                  p_BREAK_UOM_CODE(i), /* Proration */
6713                  p_BREAK_UOM_CONTEXT(i), /* Proration */
6714                  p_BREAK_UOM_ATTRIBUTE(i), /* Proration */
6715                  l_request_id
6716              );
6717   QP_PREQ_GRP.G_INT_LDETS_NO := QP_PREQ_GRP.G_INT_LDETS_NO + p_LINE_DETAIL_INDEX.count;
6718   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6719     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LDETS_NO='||QP_PREQ_GRP.G_INT_LDETS_NO);
6720   END IF;
6721   COMMIT;
6722 
6723 EXCEPTION
6724   WHEN OTHERS THEN
6725   x_status_code := FND_API.G_RET_STS_ERROR;
6726   x_status_text :=l_routine||' '||SQLERRM;
6727   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6728     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
6729     QP_PREQ_GRP.engine_debug(SQLERRM);
6730   END IF;
6731 END;
6732 
6733 /*+----------------------------------------------------------------------
6734   |Procedure Public INSERT_LDETS2
6735   +----------------------------------------------------------------------
6736 */
6737 PROCEDURE INSERT_LDETS2
6738                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
6739                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6740                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6741                  p_LIST_PRICE                  IN NUMBER_TYPE,
6742                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
6743                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
6744                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
6745                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
6746                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
6747                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
6748                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6749                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6750                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6751                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6752                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
6753                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
6754                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
6755                  p_ASK_FOR_FLAG                IN VARCHAR_TYPE,
6756                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6757                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
6758                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
6759                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6760                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6761                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
6762                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6763                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6764                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6765                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
6766                  p_PRINT_ON_INVOICE_FLAG       IN VARCHAR_TYPE,
6767                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6768                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6769                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6770 		 p_SERVICE_DURATION	       IN NUMBER_TYPE,  -- SERVICE PROJECT
6771 		 p_SERVICE_PERIOD	       IN VARCHAR_TYPE,    -- SERVICE PROJECT
6772                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6773                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6774                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6775                  p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6776                  p_RECURRING_FLAG              IN VARCHAR_TYPE,
6777                  p_SELECTED_VOLUME_ATTR        IN VARCHAR_TYPE,
6778                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
6779                  p_HEADER_LIMIT_EXISTS         IN VARCHAR_TYPE,
6780                  p_LINE_LIMIT_EXISTS           IN VARCHAR_TYPE,
6781                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6782                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6783                  p_CURRENCY_DETAIL_ID          IN NUMBER_TYPE,
6784                  p_CURRENCY_HEADER_ID          IN NUMBER_TYPE,
6785                  p_SELLING_ROUNDING_FACTOR     IN NUMBER_TYPE,
6786                  p_ORDER_CURRENCY              IN VARCHAR_TYPE,
6787                  p_PRICING_EFFECTIVE_DATE      IN DATE_TYPE,
6788                  p_BASE_CURRENCY_CODE          IN VARCHAR_TYPE,
6789 		 p_LINE_QUANTITY	       IN NUMBER_TYPE,
6790                  p_UPDATED_FLAG                IN VARCHAR_TYPE,
6791 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
6792 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
6793 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
6794 		 p_PRICE_ADJUSTMENT_ID         IN NUMBER_TYPE, -- bug 3099847
6795                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6796                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6797                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6798 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
6799 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
6800 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
6801                  p_PROCESS_CODE                IN VARCHAR_TYPE, -- 3215497
6802                  x_status_code                 OUT NOCOPY VARCHAR2,
6803                  x_status_text                 OUT NOCOPY VARCHAR2)
6804 AS
6805 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2';
6806 --added by yangli for Java Engine project
6807 l_debug varchar2(3);
6808 --added by yangli for Java Engine project
6809 BEGIN
6810 --added by yangli for Java Engine project
6811 -- Set the global variable G_DEBUG_ENGINE
6812   QP_PREQ_GRP.Set_QP_Debug;
6813 
6814   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
6815 --added by yangli for Java Engine project
6816 
6817 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6818 engine_debug('G_LINE_DETAIL_INDEX b4 insert_ldets2 '||G_LINE_DETAIL_INDEX);
6819 
6820 engine_debug('current request_id: '||sys_context('qp_context','request_id'));
6821 
6822 END IF;
6823 -- sunilpandey, begin defaulting for multi-currency
6824 IF (p_currency_detail_id.count = 0) THEN -- p_currency_detail_id not passed at all
6825  FOR i in p_line_index.FIRST .. p_line_index.LAST
6826  LOOP
6827   G_CURRENCY_DETAIL_ID_DEF_TBL(i) := NULL;
6828  END LOOP;
6829 ELSE
6830  FOR i in p_line_index.FIRST .. p_line_index.LAST
6831  LOOP
6832   G_CURRENCY_DETAIL_ID_DEF_TBL(i) := p_currency_detail_id(i);
6833  END LOOP;
6834 END IF;
6835 -- sunilpandey, begin defaulting for multi-currency
6836 
6837 -- vivek, begin defaulting for multi-currency
6838 IF (p_currency_header_id.count = 0) THEN -- p_currency_header_id not passed at all
6839  FOR i in p_line_index.FIRST .. p_line_index.LAST
6840  LOOP
6841   G_CURRENCY_HEADER_ID_DEF_TBL(i) := NULL;
6842  END LOOP;
6843 ELSE
6844  FOR i in p_line_index.FIRST .. p_line_index.LAST
6845  LOOP
6846   G_CURRENCY_HEADER_ID_DEF_TBL(i) := p_currency_header_id(i);
6847  END LOOP;
6848 END IF;
6849 
6850 -- vivek, begin defaulting for multi-currency - selling_rounding_factor
6851 IF (p_selling_rounding_factor.count = 0) THEN -- p_selling_rounding_factor not passed at all
6852  FOR i in p_line_index.FIRST .. p_line_index.LAST
6853  LOOP
6854   G_SELLING_ROUNDING_DEF_TBL(i) := NULL;
6855  END LOOP;
6856 ELSE
6857  FOR i in p_line_index.FIRST .. p_line_index.LAST
6858  LOOP
6859   G_SELLING_ROUNDING_DEF_TBL(i) := p_selling_rounding_factor(i);
6860  END LOOP;
6861 END IF;
6862 
6863 IF (p_order_currency.count = 0) THEN -- p_order_currency not passed at all
6864  FOR i in p_line_index.FIRST .. p_line_index.LAST
6865  LOOP
6866   G_ORDER_CURRENCY_DEF_TBL(i) := NULL;
6867  END LOOP;
6868 ELSE
6869  FOR i in p_line_index.FIRST .. p_line_index.LAST
6870  LOOP
6871   G_ORDER_CURRENCY_DEF_TBL(i) := p_order_currency(i);
6872  END LOOP;
6873 END IF;
6874 
6875 IF (p_pricing_effective_date.count = 0) THEN -- p_pricing_effective_date not passed at all
6876  FOR i in p_line_index.FIRST .. p_line_index.LAST
6877  LOOP
6878   G_PRICING_EFF_DATE_DEF_TBL(i) := NULL;
6879  END LOOP;
6880 ELSE
6881  FOR i in p_line_index.FIRST .. p_line_index.LAST
6882  LOOP
6883   G_PRICING_EFF_DATE_DEF_TBL(i) := p_pricing_effective_date(i);
6884  END LOOP;
6885 END IF;
6886 
6887 IF (p_base_currency_code.count = 0) THEN -- p_base_currency_code not passed at all
6888  FOR i in p_line_index.FIRST .. p_line_index.LAST
6889  LOOP
6890   G_BASE_CURRENCY_DEF_TBL(i) := NULL;
6891  END LOOP;
6892 ELSE
6893  FOR i in p_line_index.FIRST .. p_line_index.LAST
6894  LOOP
6895   G_BASE_CURRENCY_DEF_TBL(i) := p_base_currency_code(i);
6896  END LOOP;
6897 END IF;
6898 
6899 -- vivek, end defaulting for multi-currency
6900 
6901 --added by spgopal for user-passed line_quantity
6902 IF p_LINE_QUANTITY.count = 0
6903 THEN
6904 FOR i IN p_LINE_DETAIL_INDEX.FIRST..p_LINE_DETAIL_INDEX.LAST
6905 LOOP
6906 	G_LDET_LINE_QUANTITY_TBL(i) := NULL;
6907 END LOOP;
6908 ELSE
6909 FOR i IN p_LINE_DETAIL_INDEX.FIRST..p_LINE_DETAIL_INDEX.LAST
6910 LOOP
6911 	G_LDET_LINE_QUANTITY_TBL(i) := p_LINE_QUANTITY(i);
6912 END LOOP;
6913 END IF;--p_LINE_QUANTITY.count
6914 
6915 -- begin shu fix bug 2599822
6916 IF p_UPDATED_FLAG.count = 0 THEN
6917   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6918     G_UPDATED_FLAG_DEF_TBL(i) := NULL;
6919   END LOOP;
6920 ELSE
6921   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6922     G_UPDATED_FLAG_DEF_TBL(i) := p_UPDATED_FLAG(i);
6923   END LOOP;
6924 END IF;
6925 
6926 IF p_CALCULATION_CODE.count = 0 THEN
6927   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6928     G_CALCULATION_CODE_DEF_TBL(i) := NULL;
6929   END LOOP;
6930 ELSE
6931   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6932     G_CALCULATION_CODE_DEF_TBL(i) := p_CALCULATION_CODE(i);
6933   END LOOP;
6934 END IF;
6935 
6936 
6937 IF p_CHANGE_REASON_CODE.count = 0 THEN
6938   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6939     G_CHANGE_REASON_CODE_DEF_TBL(i) := NULL;
6940   END LOOP;
6941 ELSE
6942   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6943     G_CHANGE_REASON_CODE_DEF_TBL(i) := p_CHANGE_REASON_CODE(i);
6944   END LOOP;
6945 END IF;
6946 
6947 IF p_CHANGE_REASON_TEXT.count = 0 THEN
6948   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6949     G_CHANGE_REASON_TEXT_DEF_TBL(i) := NULL;
6950   END LOOP;
6951 ELSE
6952   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6953     G_CHANGE_REASON_TEXT_DEF_TBL(i) := p_CHANGE_REASON_TEXT(i);
6954   END LOOP;
6955 END IF; -- end shu fix bug 2599822
6956 
6957 -- bug 3099847
6958 IF p_PRICE_ADJUSTMENT_ID.count = 0 THEN
6959   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6960     G_PRICE_ADJUSTMENT_ID_DEF_TBL(i) := null;
6961   END LOOP;
6962 ELSE
6963   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6964     G_PRICE_ADJUSTMENT_ID_DEF_TBL(i) := p_PRICE_ADJUSTMENT_ID(i);
6965   END LOOP;
6966 END IF;
6967 
6968 -- begin accum range break
6969 IF p_ACCUM_CONTEXT.count = 0 THEN
6970   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6971     G_ACCUM_CONTEXT_DEF_TBL(i) := null;
6972   END LOOP;
6973 ELSE
6974   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6975     G_ACCUM_CONTEXT_DEF_TBL(i) := p_ACCUM_CONTEXT(i);
6976   END LOOP;
6977 END IF;
6978 
6979 IF p_ACCUM_ATTRIBUTE.count = 0 THEN
6980   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6981     G_ACCUM_ATTRIBUTE_DEF_TBL(i) := null;
6982   END LOOP;
6983 ELSE
6984   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6985     G_ACCUM_ATTRIBUTE_DEF_TBL(i) := p_ACCUM_ATTRIBUTE(i);
6986   END LOOP;
6987 END IF;
6988 
6989 IF p_ACCUM_FLAG.count = 0 THEN
6990   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6991     G_ACCUM_FLAG_DEF_TBL(i) := null;
6992   END LOOP;
6993 ELSE
6994   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6995     G_ACCUM_FLAG_DEF_TBL(i) := p_ACCUM_FLAG(i);
6996   END LOOP;
6997 END IF;
6998 -- end accum range break
6999 /* Proration defaulting START*/
7000 IF p_BREAK_UOM_CODE.count = 0 THEN
7001   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7002     G_BREAK_UOM_CODE_DEF_TBL(i) := NULL;
7003   END LOOP;
7004 ELSE
7005   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7006     G_BREAK_UOM_CODE_DEF_TBL(i) := p_BREAK_UOM_CODE(i);
7007   END LOOP;
7008 END IF;
7009 
7010 IF p_BREAK_UOM_CONTEXT.count = 0 THEN
7011   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7012     G_BREAK_UOM_CONTEXT_DEF_TBL(i) := NULL;
7013   END LOOP;
7014 ELSE
7015   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7016     G_BREAK_UOM_CONTEXT_DEF_TBL(i) := p_BREAK_UOM_CONTEXT(i);
7017   END LOOP;
7018 END IF;
7019 
7020 IF p_BREAK_UOM_ATTRIBUTE.count = 0 THEN
7021   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7022     G_BREAK_UOM_ATTRIBUTE_DEF_TBL(i) := NULL;
7023   END LOOP;
7024 ELSE
7025   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7026     G_BREAK_UOM_ATTRIBUTE_DEF_TBL(i) := p_BREAK_UOM_ATTRIBUTE(i);
7027   END LOOP;
7028 END IF;
7029 /* Proration defaulting END*/
7030 
7031 -- 3215497, defaulting process_code
7032 IF p_PROCESS_CODE.count = 0 THEN
7033   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7034     G_PROCESS_CODE_DEF_TBL(i) := G_STATUS_NEW;
7035   END LOOP;
7036 ELSE
7037   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7038     G_PROCESS_CODE_DEF_TBL(i) := p_PROCESS_CODE(i);
7039   END LOOP;
7040 END IF;
7041 -- SERVICE PROJECT
7042 IF p_SERVICE_DURATION.count = 0 THEN
7043   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7044     G_SERVICE_DURATION_DEF_TBL(i) := NULL;
7045   END LOOP;
7046 ELSE
7047   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7048     G_SERVICE_DURATION_DEF_TBL(i) := p_SERVICE_DURATION(i);
7049   END LOOP;
7050 END IF;
7051 
7052 IF p_SERVICE_PERIOD.count = 0 THEN
7053   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7054     G_SERVICE_PERIOD_DEF_TBL(i) := NULL;
7055   END LOOP;
7056 ELSE
7057   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7058     G_SERVICE_PERIOD_DEF_TBL(i) := p_SERVICE_PERIOD(i);
7059   END LOOP;
7060 END IF;
7061 -- SERVICE PROJECT
7062 --added by yangli for Java Engine project
7063 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
7064  IF l_debug = FND_API.G_TRUE THEN
7065         ENGINE_DEBUG('Java Engine not Installed ----------');
7066  END IF;
7067 
7068 --added by yangli for Java Engine project
7069 FORALL i in p_line_index.FIRST..p_line_index.LAST
7070  INSERT INTO qp_npreq_ldets_tmp
7071                 (LINE_DETAIL_INDEX,
7072                  LINE_DETAIL_TYPE_CODE,
7073                  PRICE_BREAK_TYPE_CODE,
7074                  LINE_INDEX,
7075                  CREATED_FROM_LIST_HEADER_ID,
7076                  CREATED_FROM_LIST_LINE_ID,
7077                  CREATED_FROM_LIST_LINE_TYPE,
7078                  CREATED_FROM_LIST_TYPE_CODE,
7079                  CREATED_FROM_SQL,
7080                  PRICING_GROUP_SEQUENCE,
7081                  PRICING_PHASE_ID,
7082                  OPERAND_CALCULATION_CODE,
7083                  OPERAND_VALUE,
7084                  SUBSTITUTION_TYPE_CODE,
7085                  SUBSTITUTION_VALUE_FROM,
7086                  SUBSTITUTION_VALUE_TO,
7087                  ASK_FOR_FLAG,
7088                  PRICE_FORMULA_ID,
7089                  PRICING_STATUS_CODE,
7090                  PRICING_STATUS_TEXT,
7091                  PRODUCT_PRECEDENCE,
7092                  INCOMPATABILITY_GRP_CODE,
7093                  PROCESSED_FLAG,
7094                  APPLIED_FLAG,
7095                  AUTOMATIC_FLAG,
7096                  OVERRIDE_FLAG,
7097                  PRINT_ON_INVOICE_FLAG,
7098                  PRIMARY_UOM_FLAG,
7099                  MODIFIER_LEVEL_CODE,
7100                  BENEFIT_QTY,
7101                  BENEFIT_UOM_CODE,
7102 		 SERVICE_DURATION,  -- SERVICE PROJECT
7103 		 SERVICE_PERIOD,    -- SERVICE PROJECT
7104                  LIST_LINE_NO,
7105                  ACCRUAL_FLAG,
7106                  ACCRUAL_CONVERSION_RATE,
7107                  ESTIM_ACCRUAL_RATE,
7108                  RECURRING_FLAG,
7109                  SELECTED_VOLUME_ATTR,
7110                  ROUNDING_FACTOR,
7111                  HEADER_LIMIT_EXISTS,
7112                  LINE_LIMIT_EXISTS,
7113                  CHARGE_TYPE_CODE,
7114                  CHARGE_SUBTYPE_CODE,
7115                  CURRENCY_DETAIL_ID, /*sunilpandey */
7116                  CURRENCY_HEADER_ID, /*vivek */
7117                  SELLING_ROUNDING_FACTOR, /*vivek */
7118                  ORDER_CURRENCY, /*vivek */
7119                  PRICING_EFFECTIVE_DATE,/*vivek */
7120                  BASE_CURRENCY_CODE,/*vivek */
7121 		 PROCESS_CODE,
7122 		 LINE_QUANTITY,
7123 		 UPDATED_FLAG, -- begin shu fix bug 2599822
7124 		 CALCULATION_CODE,
7125 		 CHANGE_REASON_CODE,
7126 		 CHANGE_REASON_TEXT, -- end shu fix bug 2599822
7127 		 PRICE_ADJUSTMENT_ID, -- bug 3099847
7128                  ACCUM_CONTEXT,          -- accum range break
7129                  ACCUM_ATTRIBUTE,        -- accum range break
7130                  ACCUM_ATTR_RUN_SRC_FLAG, -- accum range break
7131                  BREAK_UOM_CODE, /* Proration */
7132                  BREAK_UOM_CONTEXT, /* Proration */
7133                  BREAK_UOM_ATTRIBUTE /* Proration */
7134                  )
7135   VALUES (       p_LINE_DETAIL_INDEX(i),
7136                  p_LINE_DETAIL_TYPE_CODE(i),
7137                  p_PRICE_BREAK_TYPE_CODE(i),
7138                  p_LINE_INDEX(i),
7139                  p_CREATED_FROM_LIST_HEADER_ID(i),
7140                  p_CREATED_FROM_LIST_LINE_ID(i),
7141                  p_CREATED_FROM_LIST_LINE_TYPE(i),
7142                  p_CREATED_FROM_LIST_TYPE_CODE(i),
7143                  p_CREATED_FROM_SQL(i),
7144                  p_PRICING_GROUP_SEQUENCE(i),
7145                  p_PRICING_PHASE_ID(i),
7146                  p_OPERAND_CALCULATION_CODE(i),
7147                  p_OPERAND_VALUE(i),
7148                  p_SUBSTITUTION_TYPE_CODE(i),
7149                  p_SUBSTITUTION_VALUE_FROM(i),
7150                  p_SUBSTITUTION_VALUE_TO(i),
7151                  p_ASK_FOR_FLAG(i),
7152                  p_PRICE_FORMULA_ID(i),
7153                  p_PRICING_STATUS_CODE(i),
7154                  p_PRICING_STATUS_TEXT(i),
7155                  p_PRODUCT_PRECEDENCE(i),
7156                  p_INCOMPATABLILITY_GRP_CODE(i),
7157                  p_PROCESSED_FLAG(i),
7158                  p_APPLIED_FLAG(i),
7159                  p_AUTOMATIC_FLAG(i),
7160                  p_OVERRIDE_FLAG(i),
7161                  p_PRINT_ON_INVOICE_FLAG(i),
7162                  p_PRIMARY_UOM_FLAG(i),
7163                  p_MODIFIER_LEVEL_CODE(i),
7164                  p_BENEFIT_QTY(i),
7165                  p_BENEFIT_UOM_CODE(i),
7166 		 p_SERVICE_DURATION(i),  -- SERVICE PROJECT
7167 		 p_SERVICE_PERIOD(i),    -- SERVICE PROJECT
7168                  p_LIST_LINE_NO(i),
7169                  p_ACCRUAL_FLAG(i),
7170                  p_ACCRUAL_CONVERSION_RATE(i),
7171                  p_ESTIM_ACCRUAL_RATE(i),
7172                  p_RECURRING_FLAG(i),
7173                  p_SELECTED_VOLUME_ATTR(i),
7174                  p_ROUNDING_FACTOR(i),
7175                  decode(p_HEADER_LIMIT_EXISTS(i),'Y','Y',decode(p_LINE_LIMIT_EXISTS(i),'Y','Y','N')),
7176                  p_LINE_LIMIT_EXISTS(i),
7177                  p_CHARGE_TYPE_CODE(i),
7178                  p_CHARGE_SUBTYPE_CODE(i),
7179                  G_CURRENCY_DETAIL_ID_DEF_TBL(i),    /* sunilpandey */
7180                  G_CURRENCY_HEADER_ID_DEF_TBL(i),    /* vivek */
7181                  G_SELLING_ROUNDING_DEF_TBL(i),    /* vivek */
7182                  G_ORDER_CURRENCY_DEF_TBL(i),        /* vivek */
7183                  G_PRICING_EFF_DATE_DEF_TBL(i),      /* vivek */
7184                  G_BASE_CURRENCY_DEF_TBL(i),         /* vivek */
7185 		 G_PROCESS_CODE_DEF_TBL(i), -- 3215497, changed from G_STATUS_NEW,
7186 		 G_LDET_LINE_QUANTITY_TBL(i),
7187 		 G_UPDATED_FLAG_DEF_TBL(i),  -- begin shu fix bug 2599822
7188 		 G_CALCULATION_CODE_DEF_TBL(i),
7189 		 G_CHANGE_REASON_CODE_DEF_TBL(i),
7190 		 G_CHANGE_REASON_TEXT_DEF_TBL(i),    -- end shu fix bug 2599822
7191 		 G_PRICE_ADJUSTMENT_ID_DEF_TBL(i), -- bug 3099847
7192                  G_ACCUM_CONTEXT_DEF_TBL(i),   -- accum range break
7193                  G_ACCUM_ATTRIBUTE_DEF_TBL(i), -- accum range break
7194                  G_ACCUM_FLAG_DEF_TBL(i),       -- accum range break
7195 		 G_BREAK_UOM_CODE_DEF_TBL(i), /* Proration */
7196 		 G_BREAK_UOM_CONTEXT_DEF_TBL(i), /* Proration */
7197 		 G_BREAK_UOM_ATTRIBUTE_DEF_TBL(i) /* Proration */
7198              );
7199 --added by yangli for Java Engine project
7200 ELSE
7201  IF l_debug = FND_API.G_TRUE THEN
7202         ENGINE_DEBUG('Java Engine Installed ----------');
7203  END IF;
7204   QP_PREQ_GRP.INSERT_LDETS2_AT
7205                 (p_LINE_DETAIL_index           ,
7206                  p_LINE_DETAIL_TYPE_CODE       ,
7207                  p_PRICE_BREAK_TYPE_CODE       ,
7208                  p_LIST_PRICE                  ,
7209                  p_LINE_INDEX                  ,
7210                  p_CREATED_FROM_LIST_HEADER_ID ,
7211                  p_CREATED_FROM_LIST_LINE_ID   ,
7212                  p_CREATED_FROM_LIST_LINE_TYPE ,
7213                  p_CREATED_FROM_LIST_TYPE_CODE ,
7214                  p_CREATED_FROM_SQL            ,
7215                  p_PRICING_GROUP_SEQUENCE      ,
7216                  P_PRICING_PHASE_ID            ,
7217                  p_OPERAND_CALCULATION_CODE    ,
7218                  p_OPERAND_VALUE               ,
7219                  p_SUBSTITUTION_TYPE_CODE      ,
7220                  p_SUBSTITUTION_VALUE_FROM     ,
7221                  p_SUBSTITUTION_VALUE_TO       ,
7222                  p_ASK_FOR_FLAG                ,
7223                  p_PRICE_FORMULA_ID            ,
7224                  p_PRICING_STATUS_CODE         ,
7225                  p_PRICING_STATUS_TEXT         ,
7226                  p_PRODUCT_PRECEDENCE          ,
7227                  p_INCOMPATABLILITY_GRP_CODE   ,
7228                  p_PROCESSED_FLAG              ,
7229                  p_APPLIED_FLAG                ,
7230                  p_AUTOMATIC_FLAG              ,
7231                  p_OVERRIDE_FLAG               ,
7232                  p_PRIMARY_UOM_FLAG            ,
7233                  p_PRINT_ON_INVOICE_FLAG       ,
7234                  p_MODIFIER_LEVEL_CODE         ,
7235                  p_BENEFIT_QTY                 ,
7236                  p_BENEFIT_UOM_CODE            ,
7237                  p_LIST_LINE_NO                ,
7238                  p_ACCRUAL_FLAG                ,
7239                  p_ACCRUAL_CONVERSION_RATE     ,
7240                  p_ESTIM_ACCRUAL_RATE          ,
7241                  p_RECURRING_FLAG              ,
7242                  p_SELECTED_VOLUME_ATTR        ,
7243                  p_ROUNDING_FACTOR             ,
7244                  p_HEADER_LIMIT_EXISTS         ,
7245                  p_LINE_LIMIT_EXISTS           ,
7246                  p_CHARGE_TYPE_CODE            ,
7247                  p_CHARGE_SUBTYPE_CODE         ,
7248                  G_CURRENCY_DETAIL_ID_DEF_TBL,    /* sunilpandey */
7249                  G_CURRENCY_HEADER_ID_DEF_TBL,    /* vivek */
7250                  G_SELLING_ROUNDING_DEF_TBL,    /* vivek */
7251                  G_ORDER_CURRENCY_DEF_TBL,        /* vivek */
7252                  G_PRICING_EFF_DATE_DEF_TBL,      /* vivek */
7253                  G_BASE_CURRENCY_DEF_TBL,         /* vivek */
7254                  G_LDET_LINE_QUANTITY_TBL,
7255                  G_UPDATED_FLAG_DEF_TBL,  -- begin shu fix bug 2599822
7256                  G_CALCULATION_CODE_DEF_TBL,
7257                  G_CHANGE_REASON_CODE_DEF_TBL,
7258                  G_CHANGE_REASON_TEXT_DEF_TBL,     -- end shu fix bug 2599822
7259 		 G_PRICE_ADJUSTMENT_ID_DEF_TBL, -- bug 3099847
7260                  G_ACCUM_CONTEXT_DEF_TBL,   -- accum range break
7261                  G_ACCUM_ATTRIBUTE_DEF_TBL, -- accum range break
7262                  G_ACCUM_FLAG_DEF_TBL,       -- accum range break
7263 		 G_BREAK_UOM_CODE_DEF_TBL, /* Proration */
7264 		 G_BREAK_UOM_CONTEXT_DEF_TBL, /* Proration */
7265 		 G_BREAK_UOM_ATTRIBUTE_DEF_TBL, /* Proration */
7266                  G_PROCESS_CODE_DEF_TBL, -- 3215497
7267                  x_status_code                 ,
7268                  x_status_text                 );
7269 END IF;
7270 --added by yangli for Java Engine project
7271 
7272 G_CURRENCY_DETAIL_ID_DEF_TBL.delete;
7273 G_CURRENCY_HEADER_ID_DEF_TBL.delete;
7274 G_SELLING_ROUNDING_DEF_TBL.delete;
7275 G_ORDER_CURRENCY_DEF_TBL.delete;
7276 G_PRICING_EFF_DATE_DEF_TBL.delete;
7277 G_BASE_CURRENCY_DEF_TBL.delete;
7278 G_LDET_LINE_QUANTITY_TBL.delete;
7279 G_UPDATED_FLAG_DEF_TBL.delete;  -- begin shu fix bug 2599822
7280 G_CALCULATION_CODE_DEF_TBL.delete;
7281 G_CHANGE_REASON_CODE_DEF_TBL.delete;
7282 G_CHANGE_REASON_TEXT_DEF_TBL.delete; -- end shu fix bug 2599822
7283 G_PRICE_ADJUSTMENT_ID_DEF_TBL.delete; -- bug 3099847
7284 G_ACCUM_CONTEXT_DEF_TBL.delete;   -- accum range break
7285 G_ACCUM_ATTRIBUTE_DEF_TBL.delete; -- accum range break
7286 G_ACCUM_FLAG_DEF_TBL.delete;      -- accum range break
7287 G_BREAK_UOM_CODE_DEF_TBL.delete;  /* Proration */
7288 G_BREAK_UOM_CONTEXT_DEF_TBL.delete;  /* Proration */
7289 G_BREAK_UOM_ATTRIBUTE_DEF_TBL.delete;  /* Proration */
7290 G_PROCESS_CODE_DEF_TBL.delete; -- 3215497
7291 G_SERVICE_DURATION_DEF_TBL.delete;  -- service project
7292 G_SERVICE_PERIOD_DEF_TBL.delete;   -- service project
7293 
7294 
7295 EXCEPTION
7296   WHEN OTHERS THEN
7297   x_status_code := FND_API.G_RET_STS_ERROR;
7298   x_status_text :=l_routine||' '||SQLERRM;
7299   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7300   engine_debug(l_routine||' '||SQLERRM);
7301   engine_debug(SQLERRM);
7302   END IF;
7303 END;
7304 
7305 /*+----------------------------------------------------------------------
7306   |Procedure INSERT_RLTD_LINES2_AT, API to insert relationship data
7307   +----------------------------------------------------------------------
7308 */
7309 PROCEDURE INSERT_RLTD_LINES2_AT(
7310               p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
7311               p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
7312               p_RELATIONSHIP_TYPE_CODE      IN VARCHAR_TYPE,
7313               p_RELATED_LINE_INDEX          IN PLS_INTEGER_TYPE,
7314               p_RELATED_LINE_DETAIL_INDEX   IN PLS_INTEGER_TYPE,
7315               x_status_code                 OUT NOCOPY VARCHAR2,
7316               x_status_text                 OUT NOCOPY VARCHAR2,
7317               p_LIST_LINE_ID                IN NUMBER_TYPE, /* bug 3020816 */
7318               p_RELATED_LIST_LINE_ID        IN NUMBER_TYPE, /* bug 3020816 */
7319               p_pricing_status_text         IN VARCHAR_TYPE)
7320 IS
7321 PRAGMA AUTONOMOUS_TRANSACTION;
7322 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_RLTD_LINES2_AT';
7323 l_request_id number;
7324 BEGIN
7325   l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
7326   FORALL i in p_line_index.FIRST..p_line_index.LAST
7327   INSERT INTO QP_INT_RLTD_LINES_T (
7328               LINE_INDEX,
7329               LINE_DETAIL_INDEX,
7330               RELATIONSHIP_TYPE_CODE,
7331               RELATED_LINE_INDEX,
7332               RELATED_LINE_DETAIL_INDEX,
7333               REQUEST_TYPE_CODE,
7334               PRICING_STATUS_CODE,
7335               LIST_LINE_ID,
7336               RELATED_LIST_LINE_ID,
7337               PRICING_STATUS_TEXT,
7338               request_id)
7339 
7340  VALUES     ( p_LINE_INDEX (i),
7341               p_LINE_DETAIL_INDEX(i),
7342               p_RELATIONSHIP_TYPE_CODE(i),
7343               p_RELATED_LINE_INDEX(i),
7344               p_RELATED_LINE_DETAIL_INDEX(i),
7345               'NULL',          -- ASK PRIYA
7346               G_STATUS_NEW,     -- SHOULD THIS BE UNCHANGED??, SHU, WHAT HAPPENED TO SERVICE LINE
7347               p_list_line_id(i),
7348               p_related_list_line_id(i),
7349               p_pricing_status_text(i),
7350               l_request_id
7351             );
7352   QP_PREQ_GRP.G_INT_RELS_NO := QP_PREQ_GRP.G_INT_RELS_NO + p_LINE_INDEX.count;
7353   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7354     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_RELS_NO='||QP_PREQ_GRP.G_INT_RELS_NO);
7355   END IF;
7356  COMMIT;
7357 EXCEPTION
7358   WHEN OTHERS THEN
7359   x_status_code := FND_API.G_RET_STS_ERROR;
7360   x_status_text :=l_routine||' '||SQLERRM;
7361   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7362     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
7363     QP_PREQ_GRP.engine_debug(SQLERRM);
7364   END IF;
7365 END;
7366 
7367 
7368 /*+----------------------------------------------------------------------
7369   |Procedure INSERT_RLTD_LINES2, API to insert relationship data
7370   +----------------------------------------------------------------------
7371 */
7372 PROCEDURE INSERT_RLTD_LINES2(
7373               p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
7374               p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
7375               p_RELATIONSHIP_TYPE_CODE      IN VARCHAR_TYPE,
7376               p_RELATED_LINE_INDEX          IN PLS_INTEGER_TYPE,
7377               p_RELATED_LINE_DETAIL_INDEX   IN PLS_INTEGER_TYPE,
7378               x_status_code                 OUT NOCOPY VARCHAR2,
7379               x_status_text                 OUT NOCOPY VARCHAR2,
7380               p_LIST_LINE_ID                IN NUMBER_TYPE, /* bug 3020816 */
7381               p_RELATED_LIST_LINE_ID        IN NUMBER_TYPE, /* bug 3020816 */
7382               p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE) --added for Java Engine
7383 IS
7384   l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_RLTD_LINES2';
7385 --added by yangli for Java Engine project
7386  l_debug varchar2(3);
7387 --added by yangli for Java Engine project
7388 BEGIN
7389 --added by yangli for Java Engine project
7390 -- Set the global variable G_DEBUG_ENGINE
7391   QP_PREQ_GRP.Set_QP_Debug;
7392 
7393   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
7394 --added by yangli for Java Engine project
7395 
7396   -- bug 3020816 - need to allow insert into list_line_id and related_list_line_id columns
7397   IF (p_list_line_id.count = 0) THEN -- p_list_line_id not passed at all
7398    FOR i in p_line_index.FIRST .. p_line_index.LAST
7399    LOOP
7400     G_LIST_LINE_ID_DEF_TBL(i) := NULL;
7401    END LOOP;
7402   ELSE
7403    FOR i in p_line_index.FIRST .. p_line_index.LAST
7404    LOOP
7405     G_LIST_LINE_ID_DEF_TBL(i) := p_list_line_id(i);
7406    END LOOP;
7407   END IF;
7408 
7409   IF (p_related_list_line_id.count = 0) THEN -- p_related_list_line_id not passed at all
7410    FOR i in p_line_index.FIRST .. p_line_index.LAST
7411    LOOP
7412     G_RLTD_LIST_LINE_ID_DEF_TBL(i) := NULL;
7413    END LOOP;
7414   ELSE
7415    FOR i in p_line_index.FIRST .. p_line_index.LAST
7416    LOOP
7417     G_RLTD_LIST_LINE_ID_DEF_TBL(i) := p_related_list_line_id(i);
7418    END LOOP;
7419   END IF;
7420 
7421 --added by yangli for Java Engine project
7422   IF (p_pricing_status_text.count = 0) THEN -- p_pricing_status_text not passed at all
7423    FOR i in p_line_index.FIRST .. p_line_index.LAST
7424    LOOP
7425     G_PRICING_STATUS_TEXT_DEF_TBL(i) := NULL;
7426    END LOOP;
7427   ELSE
7428    FOR i in p_line_index.FIRST .. p_line_index.LAST
7429    LOOP
7430     G_PRICING_STATUS_TEXT_DEF_TBL(i) := p_pricing_status_text(i);
7431    END LOOP;
7432   END IF;
7433 
7434 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
7435  IF l_debug = FND_API.G_TRUE THEN
7436         ENGINE_DEBUG('Java Engine not Installed ----------');
7437  END IF;
7438 --added by yangli for Java Engine project
7439 
7440   FORALL i in p_line_index.FIRST..p_line_index.LAST
7441   INSERT INTO qp_npreq_rltd_lines_tmp (
7442               LINE_INDEX,
7443               LINE_DETAIL_INDEX,
7444               RELATIONSHIP_TYPE_CODE,
7445               RELATED_LINE_INDEX,
7446               RELATED_LINE_DETAIL_INDEX,
7447               REQUEST_TYPE_CODE,
7448               PRICING_STATUS_CODE,
7449               LIST_LINE_ID,
7450               RELATED_LIST_LINE_ID)
7451 
7452  VALUES     (
7453               p_LINE_INDEX (i),
7454               p_LINE_DETAIL_INDEX(i),
7455               p_RELATIONSHIP_TYPE_CODE(i),
7456               p_RELATED_LINE_INDEX(i),
7457               p_RELATED_LINE_DETAIL_INDEX(i),
7458               'NULL',          -- ASK PRIYA
7459               G_STATUS_NEW,     -- SHOULD THIS BE UNCHANGED??, SHU, WHAT HAPPENED TO SERVICE LINE
7460               G_LIST_LINE_ID_DEF_TBL(i),
7461               G_RLTD_LIST_LINE_ID_DEF_TBL(i)
7462             );
7463 --added by yangli for Java Engine project
7464 ELSE
7465  IF l_debug = FND_API.G_TRUE THEN
7466         ENGINE_DEBUG('Java Engine Installed ----------');
7467  END IF;
7468 QP_PREQ_GRP.INSERT_RLTD_LINES2_AT
7469               (p_LINE_INDEX  ,
7470               p_LINE_DETAIL_INDEX           ,
7471               p_RELATIONSHIP_TYPE_CODE      ,
7472               p_RELATED_LINE_INDEX          ,
7473               p_RELATED_LINE_DETAIL_INDEX   ,
7474               x_status_code                 ,
7475               x_status_text,
7476               G_LIST_LINE_ID_DEF_TBL,
7477               G_RLTD_LIST_LINE_ID_DEF_TBL,
7478               G_PRICING_STATUS_TEXT_DEF_TBL);
7479 END IF;
7480 --added by yangli for Java Engine project
7481 
7482    G_LIST_LINE_ID_DEF_TBL.delete;
7483    G_RLTD_LIST_LINE_ID_DEF_TBL.delete;
7484 --added by yangli for Java Engine project
7485    G_PRICING_STATUS_TEXT_DEF_TBL.delete;
7486 EXCEPTION
7487   WHEN OTHERS THEN
7488   x_status_code := FND_API.G_RET_STS_ERROR;
7489   x_status_text :=l_routine||' '||SQLERRM;
7490   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7491   engine_debug(l_routine||' '||SQLERRM);
7492   engine_debug(SQLERRM);
7493   END IF;
7494 END INSERT_RLTD_LINES2; -- public version
7495 
7496 /*+----------------------------------------------------------------------
7497   |Procedure INSERT_RLTD_LINES2, overloaded version, bug 3215497
7498   +----------------------------------------------------------------------*/
7499 PROCEDURE INSERT_RLTD_LINES2(
7500               p_LINE_INDEX                  IN NUMBER_TYPE,
7501               p_LINE_DETAIL_INDEX           IN NUMBER_TYPE,
7502               p_RELATIONSHIP_TYPE_CODE      IN VARCHAR_TYPE,
7503               p_RELATED_LINE_INDEX          IN NUMBER_TYPE,
7504               p_RELATED_LINE_DETAIL_INDEX   IN NUMBER_TYPE,
7505               x_status_code                 OUT NOCOPY VARCHAR2,
7506               x_status_text                 OUT NOCOPY VARCHAR2,
7507               p_LIST_LINE_ID                IN NUMBER_TYPE, /* bug 3020816 */
7508               p_RELATED_LIST_LINE_ID        IN NUMBER_TYPE, /* bug 3020816 */
7509               p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE) --added for Java Engine
7510 IS
7511   i NUMBER;
7512   l_line_index PLS_INTEGER_TYPE;
7513   l_ldet_index PLS_INTEGER_TYPE;
7514   l_rltd_line_index PLS_INTEGER_TYPE;
7515   l_rltd_ldet_index PLS_INTEGER_TYPE;
7516 BEGIN
7517   FOR i IN p_LINE_INDEX.FIRST .. p_LINE_INDEX.LAST LOOP
7518     l_line_index(i) := p_LINE_INDEX(i);
7519   END LOOP;
7520   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7521     l_ldet_index(i) := p_LINE_DETAIL_INDEX(i);
7522   END LOOP;
7523   FOR i IN p_RELATED_LINE_INDEX.FIRST .. p_RELATED_LINE_INDEX.LAST LOOP
7524     l_rltd_line_index(i) := p_RELATED_LINE_INDEX(i);
7525   END LOOP;
7526   FOR i IN p_RELATED_LINE_DETAIL_INDEX.FIRST .. p_RELATED_LINE_DETAIL_INDEX.LAST LOOP
7527     l_rltd_ldet_index(i) := p_RELATED_LINE_DETAIL_INDEX(i);
7528   END LOOP;
7529 
7530   -- call new version
7531   INSERT_RLTD_LINES2(
7532     p_LINE_INDEX => l_line_index,
7533     p_LINE_DETAIL_INDEX => l_ldet_index,
7534     p_RELATIONSHIP_TYPE_CODE => p_RELATIONSHIP_TYPE_CODE,
7535     p_RELATED_LINE_INDEX => l_rltd_line_index,
7536     p_RELATED_LINE_DETAIL_INDEX => l_rltd_ldet_index,
7537     x_status_code => x_status_code,
7538     x_status_text => x_status_text,
7539     p_LIST_LINE_ID => p_LIST_LINE_ID,
7540     p_RELATED_LIST_LINE_ID => p_RELATED_LIST_LINE_ID,
7541     p_PRICING_STATUS_TEXT => p_PRICING_STATUS_TEXT
7542   );
7543 END INSERT_RLTD_LINES2; -- overloaded version
7544 
7545 /*
7546   +------------------------------------------------------------------------
7547   |PROCEDURE Source_Vol_Contexts_Attributes
7548   +-------------------------------------------------------------------------
7549 */
7550 
7551 PROCEDURE Source_Vol_Contexts_Attributes(p_pricing_phase_seq    PLS_INTEGER,
7552                                          p_freeze_override_flag VARCHAR2,
7553                                          p_ordr_amt_flag        VARCHAR2,
7554                                          x_status_code OUT NOCOPY     VARCHAR2,
7555                                          x_status_text OUT NOCOPY     VARCHAR2) AS
7556 /*
7557 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_request_lines_cur,- No Index Used-,NA,NA
7558 */
7559 CURSOR get_request_lines_cur IS
7560 SELECT LINE_INDEX,
7561        LINE_QUANTITY,
7562        PRICED_QUANTITY,
7563        UNIT_PRICE,
7564        LINE_TYPE_CODE,
7565 	  LINE_UOM_CODE,
7566 	  PRICED_UOM_CODE,
7567 	  PRICE_FLAG
7568 FROM   qp_npreq_lines_tmp;
7569 --WHERE  LINE_UOM_CODE <> PRICED_UOM_CODE;
7570 /*WHERE  (PRICE_FLAG = G_YES
7571        OR
7572        (PRICE_FLAG = G_PHASE
7573         AND
7574         p_freeze_override_flag = G_YES)
7575        );*/
7576 
7577 /*
7578 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7579 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7580 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7581 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7582 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7583 */
7584 CURSOR get_inventory_item_id_cur(p_line_index PLS_INTEGER) IS
7585 SELECT /*+ dynamic_sampling(1) */ to_number(VALUE_FROM)
7586 FROM   qp_npreq_line_attrs_tmp
7587 WHERE  CONTEXT = G_PRIC_ITEM_CONTEXT
7588 AND    ATTRIBUTE = G_PRIC_ATTRIBUTE1
7589 AND    ATTRIBUTE_TYPE = G_PRODUCT_TYPE
7590 AND    LINE_INDEX = p_line_index
7591 AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7592 
7593 /*
7594 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.order_amount_cur,- No Index Used -,NA,NA
7595 */
7596 CURSOR order_amount_cur IS
7597 --SELECT nvl(SUM(UNIT_PRICE * PRICED_QUANTITY),0)
7598 select nvl(sum(nvl(line_unit_price * line_quantity, UNIT_PRICE * PRICED_QUANTITY)),0) /* 3143535 */
7599 FROM   qp_npreq_lines_tmp
7600 WHERE charge_periodicity_code is NULL;   -- added for recurring charges Bug # 4465168
7601 
7602 
7603 
7604 v_order_amt         NUMBER;
7605 v_count             PLS_INTEGER;
7606 v_inventory_item_id	NUMBER;
7607 v_uom_rate		NUMBER;
7608 l_status_code       VARCHAR2(30);
7609 l_status_text       VARCHAR2(240);
7610 l_routine      	CONSTANT VARCHAR2(240) := 'QP_PREQ_GRP.Source_Vol_Contexts_Attributes';
7611 
7612 l_l_line_index_tbl      NUMBER_TYPE;
7613 l_l_line_quantity_tbl   NUMBER_TYPE;
7614 l_l_priced_quantity_tbl NUMBER_TYPE;
7615 l_l_unit_price_tbl      NUMBER_TYPE;
7616 l_l_line_type_code_tbl  VARCHAR_30_TYPE;
7617 l_l_line_uom_code_tbl   VARCHAR_30_TYPE;
7618 l_l_priced_uom_code_tbl VARCHAR_30_TYPE;
7619 l_l_price_flag_tbl      VARCHAR_30_TYPE;
7620 
7621 l_co_line_index_tbl  NUMBER_TYPE;
7622 l_co_bulk_count      NUMBER := 0;
7623 
7624 l_ia_value_from_tbl  VARCHAR_TYPE;
7625 l_ia_line_index_tbl  NUMBER_TYPE;
7626 l_ia_attribute_tbl   VARCHAR_TYPE;
7627 l_ia_bulk_count      NUMBER := 0;
7628 l_lin_qty_exists	number:=0;
7629 BEGIN
7630 qp_debug_util.tstart('SOURCE_VOL_CONTEXTS_ATTRIBUTES','Procedure SOURCE_VOL_CONTEXTS_ATTRIBUTES');
7631   -- julin [3805113]: bulk fetch request lines
7632   OPEN get_request_lines_cur;
7633   LOOP
7634     FETCH get_request_lines_cur BULK COLLECT INTO
7635       l_l_line_index_tbl,
7636       l_l_line_quantity_tbl,
7637       l_l_priced_quantity_tbl,
7638       l_l_unit_price_tbl,
7639       l_l_line_type_code_tbl,
7640       l_l_line_uom_code_tbl,
7641       l_l_priced_uom_code_tbl,
7642       l_l_price_flag_tbl
7643       LIMIT G_BATCH_SIZE;
7644     EXIT WHEN l_l_line_index_tbl.count = 0;
7645 
7646     l_co_line_index_tbl.delete;
7647     l_ia_value_from_tbl.delete;
7648     l_ia_line_index_tbl.delete;
7649     l_ia_attribute_tbl.delete;
7650 
7651   FOR I in l_l_line_index_tbl.first .. l_l_line_index_tbl.last
7652   LOOP
7653 
7654   -- ITEM QUANTITY(Price List Sequence)
7655   /* IF (p_pricing_phase_seq = G_PRICE_LIST_SEQUENCE AND i.LINE_TYPE_CODE = G_LINE_LEVEL) THEN
7656 
7657      UPDATE qp_npreq_line_attrs_tmp
7658      SET VALUE_FROM = qp_number.number_to_canonical(nvl(I.LINE_QUANTITY,0))
7659      WHERE  LINE_INDEX = I.LINE_INDEX
7660      AND    CONTEXT = G_PRIC_VOLUME_CONTEXT
7661      AND    ATTRIBUTE = G_QUANTITY_ATTRIBUTE
7662      AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7663      AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7664 
7665      IF SQL%ROWCOUNT = 0 THEN
7666        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7667        engine_debug('No volume context in temp table, inserting one');
7668        END IF;
7669         INSERT_LINE_ATTRS
7670        (p_LINE_INDEX               =>I.LINE_INDEX,
7671         p_ATTRIBUTE_LEVEL          =>G_LINE_LEVEL,
7672         p_ATTRIBUTE_TYPE           =>G_PRICING_TYPE,
7673         p_CONTEXT                  =>G_PRIC_VOLUME_CONTEXT,
7674         p_ATTRIBUTE                =>G_QUANTITY_ATTRIBUTE,
7675         p_VALUE_FROM               =>qp_number.number_to_canonical(NVL(I.LINE_QUANTITY,0)),
7676         p_VALIDATED_FLAG           =>G_NO,
7677         p_APPLIED_FLAG             =>G_LIST_NOT_APPLIED,
7678         p_PRICING_STATUS_CODE      =>G_STATUS_UNCHANGED,
7679         P_PRICING_ATTR_FLAG        =>G_PRICING_YES,
7680         x_status_code              =>l_status_code,
7681         x_status_text              =>l_status_text);
7682 
7683         IF l_status_code = FND_API.G_RET_STS_ERROR THEN
7684 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7685         END IF;
7686      END IF;
7687 	-- Reset the unit price if price event occurs
7688   IF (i.PRICE_FLAG = G_YES OR (i.PRICE_FLAG = G_PHASE AND p_freeze_override_flag = G_YES)) THEN
7689 	 UPDATE qp_npreq_lines_tmp
7690 	 SET UNIT_PRICE = NULL
7691 	 WHERE LINE_INDEX = I.LINE_INDEX;
7692   END IF;
7693 
7694  END IF;  */
7695 
7696   -- PRICED QUANTITY(Discounts Sequence)
7697   -- bug 3572594 - update the cross order volume period qty even if there is no price phase in the current engine call
7698   IF (p_pricing_phase_seq <> G_PRICE_LIST_SEQUENCE AND l_l_line_type_code_tbl(I) = G_LINE_LEVEL ) THEN
7699        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7700        engine_debug('Trying to update cross order volume period qty in temp table');
7701 
7702        END IF;
7703 	 -- Cross Order Quantities
7704       OPEN get_inventory_item_id_cur(l_l_line_index_tbl(I));
7705       FETCH get_inventory_item_id_cur INTO v_inventory_item_id;
7706       CLOSE get_inventory_item_id_cur;
7707 
7708        -- Get the pricing uom qty with the uom conversion routine
7709       Inv_convert.inv_um_conversion(l_l_line_uom_code_tbl(I),
7710 				               l_l_priced_uom_code_tbl(I),
7711 				               v_inventory_item_id,
7712 				               v_uom_rate);
7713 
7714       -- Update Period1 Item Qty, Period2 Item Qty , Period3 Item Qty with conversion from order uom to pricing uom
7715       IF (v_uom_rate = -99999) THEN
7716      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7717 	    engine_debug('Uom Rate cannot be -99999');
7718      END IF;
7719       ELSE
7720          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7721          engine_debug('Uom Rate Is: ' || v_uom_rate );
7722          END IF;
7723 
7724          -- bug 3572594 - round the multiplied value to profile QP_INV_DECIMAL_PRECISION
7725          if G_INV_DECIMAL_PRECISION is null then
7726            G_INV_DECIMAL_PRECISION := nvl(FND_PROFILE.Value('QP_INV_DECIMAL_PRECISION'),10);
7727          end if;
7728 /*
7729 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7730 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7731 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7732 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7733 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7734 */
7735 
7736          -- julin [3805113]: bulk update
7737          l_co_line_index_tbl(l_co_bulk_count) := l_l_line_index_tbl(I);
7738          l_co_bulk_count := l_co_bulk_count + 1;
7739       END IF;
7740   END IF;
7741 
7742   -- ITEM AMOUNT(Discounts Sequence)
7743    IF (p_pricing_phase_seq <> G_PRICE_LIST_SEQUENCE AND l_l_line_type_code_tbl(I) = G_LINE_LEVEL AND G_PRICE_PHASE_FLAG = TRUE) THEN
7744   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7745 	 engine_debug ('Trying to update line quantity and line amount in temp table');
7746 
7747   END IF;
7748 /*
7749 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7750 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7751 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7752 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7753 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7754 */
7755      -- julin [3805113]: bulk update
7756      l_ia_value_from_tbl(l_ia_bulk_count) := qp_number.number_to_canonical(nvl(nvl(l_l_priced_quantity_tbl(I),l_l_line_quantity_tbl(I)),0));
7757      l_ia_line_index_tbl(l_ia_bulk_count) := l_l_line_index_tbl(I);
7758      l_ia_attribute_tbl(l_ia_bulk_count) := G_QUANTITY_ATTRIBUTE;
7759      l_ia_bulk_count := l_ia_bulk_count + 1;
7760 
7761     IF G_LIN_QTY_ATTR_SRCD <> G_YES THEN
7762 	    BEGIN
7763 		    SELECT 1
7764 		    INTO l_lin_qty_exists
7765 		    FROM dual
7766 		    WHERE EXISTS (SELECT 1
7767 				    FROM qp_npreq_line_attrs_tmp
7768 				     WHERE  CONTEXT = G_PRIC_VOLUME_CONTEXT
7769 				     AND    ATTRIBUTE = G_QUANTITY_ATTRIBUTE
7770 				     AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7771 				     AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED);
7772 		     engine_debug ('After select statment ');
7773 	    EXCEPTION
7774 	    WHEN NO_DATA_FOUND THEN
7775 		FORALL j in l_l_line_index_tbl.FIRST..l_l_line_index_tbl.LAST
7776 		 INSERT INTO qp_npreq_line_attrs_tmp
7777 				(LINE_INDEX,
7778 				 ATTRIBUTE_LEVEL,
7779 				 ATTRIBUTE_TYPE,
7780 				 CONTEXT,
7781 				 ATTRIBUTE,
7782 				 VALUE_FROM,
7783 				 VALIDATED_FLAG,
7784 				 APPLIED_FLAG       ,
7785 				 PRICING_STATUS_CODE,
7786 				 PRICING_STATUS_TEXT,
7787 				 PRICING_ATTR_FLAG
7788 				 )
7789 		VALUES          (l_l_line_index_tbl(j),
7790 				 G_LINE_LEVEL,
7791 				 G_PRICING_TYPE,
7792 				 G_PRIC_VOLUME_CONTEXT,
7793 				 G_QUANTITY_ATTRIBUTE,
7794 				 qp_number.number_to_canonical(nvl(nvl(l_l_priced_quantity_tbl(j),l_l_line_quantity_tbl(j)),0)),
7795 				 G_NO,
7796 				 G_LIST_NOT_APPLIED,
7797 				 G_STATUS_UNCHANGED,
7798 				 'Unchanged',
7799 				 G_PRICING_YES
7800 				 );
7801 		G_LIN_QTY_ATTR_SRCD := G_YES;
7802 	    WHEN OTHERS THEN
7803 	    NULL;
7804 	    END;
7805 	END IF;
7806 
7807      /* IF SQL%ROWCOUNT = 0 THEN
7808       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7809       engine_debug('No volume context in temp table, inserting one');
7810       END IF;
7811       INSERT_LINE_ATTRS
7812        (p_LINE_INDEX               =>I.LINE_INDEX,
7813         p_ATTRIBUTE_LEVEL          =>G_LINE_LEVEL,
7814         p_ATTRIBUTE_TYPE           =>G_PRICING_TYPE,
7815         p_CONTEXT                  =>G_PRIC_VOLUME_CONTEXT,
7816         p_ATTRIBUTE                =>G_QUANTITY_ATTRIBUTE,
7817         p_VALUE_FROM               =>qp_number.number_to_canonical(nvl(NVL(I.PRICED_QUANTITY,I.LINE_QUANTITY),0)),
7818         p_VALIDATED_FLAG           =>G_NO,
7819         p_APPLIED_FLAG             =>G_LIST_NOT_APPLIED,
7820         p_PRICING_STATUS_CODE      =>G_STATUS_UNCHANGED,
7821         P_PRICING_ATTR_FLAG        =>G_PRICING_YES,
7822         x_status_code              =>l_status_code,
7823         x_status_text              =>l_status_text);
7824      END IF; */ -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
7825 
7826 /*
7827 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7828 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7829 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7830 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7831 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7832 */
7833      -- julin [3805113]: bulk update
7834      l_ia_value_from_tbl(l_ia_bulk_count) := qp_number.number_to_canonical(nvl(nvl(l_l_priced_quantity_tbl(I),l_l_line_quantity_tbl(I))  * l_l_unit_price_tbl(I),0));
7835      l_ia_line_index_tbl(l_ia_bulk_count) := l_l_line_index_tbl(I);
7836      l_ia_attribute_tbl(l_ia_bulk_count) := G_LINE_AMT_ATTRIBUTE;
7837      l_ia_bulk_count := l_ia_bulk_count + 1;
7838 
7839       /* IF SQL%ROWCOUNT = 0 THEN
7840          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7841          engine_debug('No volume context and line amt in temp table, inserting one');
7842          END IF;
7843         INSERT_LINE_ATTRS
7844          (p_LINE_INDEX              =>I.LINE_INDEX,
7845           p_ATTRIBUTE_LEVEL         =>G_LINE_LEVEL,
7846           p_ATTRIBUTE_TYPE          =>G_PRICING_TYPE,
7847           p_CONTEXT                 =>G_PRIC_VOLUME_CONTEXT,
7848           p_ATTRIBUTE               =>G_LINE_AMT_ATTRIBUTE,
7849           p_VALUE_FROM              =>qp_number.number_to_canonical(nvl(nvl(I.PRICED_QUANTITY,I.LINE_QUANTITY) * I.UNIT_PRICE ,0)),
7850           p_VALIDATED_FLAG          =>G_NO,
7851           p_APPLIED_FLAG            =>G_LIST_NOT_APPLIED,
7852           p_PRICING_STATUS_CODE     =>G_STATUS_UNCHANGED,
7853           P_PRICING_ATTR_FLAG       =>G_PRICING_YES,
7854           x_status_code             =>l_status_code,
7855           x_status_text             =>l_status_text);
7856       END IF;  */ -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
7857 
7858 
7859     /*UPDATE qp_npreq_lines_tmp
7860     SET    LINE_AMOUNT = nvl(nvl(I.PRICED_QUANTITY,I.LINE_QUANTITY) * I.UNIT_PRICE,0)
7861     WHERE  LINE_INDEX = I.LINE_INDEX; */
7862 
7863     G_QUALIFIER_TEMP := 'N';
7864 
7865   END IF;
7866 
7867  END LOOP;
7868 
7869   -- julin [3805113]: bulk update for CROSS ORDER VOLUME
7870   IF (l_co_line_index_tbl.count > 0) THEN
7871     FORALL I IN l_co_line_index_tbl.first..l_co_line_index_tbl.last
7872       UPDATE /*+ index(qp_npreq_line_attrs_tmp qp_preq_line_attrs_tmp_n2) */ qp_npreq_line_attrs_tmp --upd4
7873         SET VALUE_FROM = qp_number.number_to_canonical(round(qp_number.canonical_to_number(nvl(VALUE_FROM,0)) * v_uom_rate, G_INV_DECIMAL_PRECISION))
7874 	WHERE  LINE_INDEX = l_co_line_index_tbl(I)
7875 	AND    CONTEXT = G_PRIC_VOLUME_CONTEXT
7876 	AND    ATTRIBUTE IN ('PRICING_ATTRIBUTE3','PRICING_ATTRIBUTE1','PRICING_ATTRIBUTE11')
7877 	AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7878 	AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7879   END IF;
7880 
7881   -- julin [3805113]: bulk update for ITEM AMOUNT
7882   IF (l_ia_line_index_tbl.count > 0) THEN
7883     FORALL I IN l_ia_line_index_tbl.first..l_ia_line_index_tbl.last
7884       UPDATE /*+ index(qp_npreq_line_attrs_tmp qp_preq_line_attrs_tmp_n2) */ qp_npreq_line_attrs_tmp --upd3, upd5
7885         SET VALUE_FROM = l_ia_value_from_tbl(I)
7886         WHERE  LINE_INDEX = l_ia_line_index_tbl(I)
7887         AND    CONTEXT = G_PRIC_VOLUME_CONTEXT
7888         AND    ATTRIBUTE = l_ia_attribute_tbl(I)
7889         AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7890         AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7891   END IF;
7892 
7893   -- ORDER AMOUNT(Discounts Sequence) only for BATCH event
7894   IF (p_pricing_phase_seq <> G_PRICE_LIST_SEQUENCE and p_ordr_amt_flag = G_YES) THEN
7895   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7896 	 engine_debug ('Trying to update order amount in temp table');
7897 
7898   END IF;
7899      OPEN order_amount_cur;
7900      FETCH order_amount_cur INTO v_order_amt;
7901      CLOSE order_amount_cur;
7902 
7903   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7904      engine_debug ('v_order_amt = ' || v_order_amt);
7905      engine_debug ('G_BEFORE_PRICING_ORD_AMT = ' || G_BEFORE_PRICING_ORD_AMT);
7906   END IF;
7907 
7908 /*
7909 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7910 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7911 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7912 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7913 */
7914      -- Bug 3143535 - ORDER AMOUNT CALCULATION ISSUE
7915      UPDATE qp_npreq_line_attrs_tmp --upd6
7916      --SET VALUE_FROM = qp_number.number_to_canonical(v_order_amt)
7917      SET VALUE_FROM = qp_number.number_to_canonical(qp_number.canonical_to_number(value_from)
7918                                                      - G_BEFORE_PRICING_ORD_AMT
7919                                                      + v_order_amt)
7920      WHERE
7921             CONTEXT = G_PRIC_VOLUME_CONTEXT
7922      AND    ATTRIBUTE = G_ORDER_AMOUNT_ATTRIBUTE
7923      AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
7924      AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7925 
7926       IF SQL%ROWCOUNT = 0 THEN
7927          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7928          engine_debug('No volume context and order amt in temp table, inserting one');
7929 
7930          END IF;
7931         INSERT INTO qp_npreq_line_attrs_tmp
7932 	   (LINE_INDEX,ATTRIBUTE_LEVEL,ATTRIBUTE_TYPE,CONTEXT,ATTRIBUTE,VALUE_FROM,
7933 	    VALIDATED_FLAG,APPLIED_FLAG,PRICING_STATUS_CODE,PRICING_ATTR_FLAG)
7934         SELECT
7935          LINE_INDEX,
7936          LINE_TYPE_CODE,
7937          G_QUALIFIER_TYPE,
7938          G_PRIC_VOLUME_CONTEXT,
7939          G_ORDER_AMOUNT_ATTRIBUTE,
7940          qp_number.number_to_canonical(v_order_amt),
7941          G_NO,
7942          G_NO,
7943          G_STATUS_UNCHANGED,
7944          G_NO
7945         FROM qp_npreq_lines_tmp;
7946 
7947       END IF;
7948 
7949       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7950          declare
7951             l_value_from   varchar2(240);
7952          begin
7953            select value_from
7954            into l_value_from
7955           from qp_npreq_line_attrs_tmp
7956          where CONTEXT = G_PRIC_VOLUME_CONTEXT
7957            AND ATTRIBUTE = G_ORDER_AMOUNT_ATTRIBUTE
7958            AND ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
7959            AND PRICING_STATUS_CODE = G_STATUS_UNCHANGED
7960            and rownum = 1;
7961 
7962             engine_debug ('final order amount attribute = ' || l_value_from);
7963          exception
7964            when no_data_found then
7965              null;
7966            when others then
7967              null;
7968          end;
7969       END IF;
7970 
7971   END IF;
7972 
7973   END LOOP;
7974   CLOSE get_request_lines_cur;
7975 qp_debug_util.tstop('SOURCE_VOL_CONTEXTS_ATTRIBUTES');
7976 EXCEPTION
7977    WHEN OTHERS THEN
7978    x_status_code := FND_API.G_RET_STS_ERROR;
7979    x_status_text := l_routine ||': '||SQLERRM;
7980    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7981    engine_debug(x_status_text);
7982    END IF;
7983    qp_debug_util.tstop('SOURCE_VOL_CONTEXTS_ATTRIBUTES');
7984 END Source_Vol_Contexts_Attributes;
7985 
7986 PROCEDURE Update_Distinct_Qualifier_Flag( x_status_code OUT NOCOPY VARCHAR2,
7987                                           x_status_text OUT NOCOPY VARCHAR2) AS
7988 
7989  l_routine VARCHAR2(40) := 'Update_Distinct_Qualifier_Flag';
7990 BEGIN
7991 qp_debug_util.tstart('UPDATE_DISTINCT_QUALIFIER_FLAG','Procedure UPDATE_DISTINCT_QUALIFIER_FLAG');
7992 /*
7993 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7994 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7995 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7996 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7997 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7998 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
7999 */
8000  UPDATE /*+ dynamic_sampling(1) */ qp_npreq_line_attrs_tmp a
8001  SET    distinct_qualifier_flag = 'Y'
8002  WHERE  pricing_status_code = G_STATUS_UNCHANGED
8003  AND    attribute_type = G_QUALIFIER_TYPE
8004  AND    rowid = (SELECT /*+ dynamic_sampling(1) INDEX(b QP_PREQ_LINE_ATTRS_TMP_N6) */ min(rowid) --bug 14464004
8005                  FROM qp_npreq_line_attrs_tmp b
8006                  WHERE a.context = b.context
8007                  AND   a.attribute = b.attribute
8008                  AND   a.value_from = b.value_from
8009                  AND   b.attribute_type = G_QUALIFIER_TYPE
8010                  AND   b.pricing_status_code = G_STATUS_UNCHANGED);
8011 
8012  -- This is much performant than the previous sql
8013   /* UPDATE qp_npreq_line_attrs_tmp a
8014   SET    distinct_qualifier_flag = 'Y'
8015   WHERE  pricing_status_code = G_STATUS_UNCHANGED
8016   AND    attribute_type = G_QUALIFIER_TYPE
8017   AND    rowid = (SELECT min(rowid)
8018                   FROM qp_npreq_line_attrs_tmp b
8019                   WHERE b.attribute_type = G_QUALIFIER_TYPE
8020                   AND   b.pricing_status_code = G_STATUS_UNCHANGED
8021                   GROUP BY b.context , b.attribute , b.value_from); */
8022 qp_debug_util.tstop('UPDATE_DISTINCT_QUALIFIER_FLAG');
8023 EXCEPTION
8024   WHEN OTHERS THEN
8025    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8026    engine_debug(l_routine||' '||SQLERRM);
8027    END IF;
8028    x_status_code := FND_API.G_RET_STS_ERROR;
8029    x_status_text := 'Error in '||l_routine||SQLERRM;
8030 	qp_debug_util.tstop('UPDATE_DISTINCT_QUALIFIER_FLAG');
8031 END Update_Distinct_Qualifier_Flag;
8032 
8033 
8034 /*+-----------------------------------------------------------------------
8035   |PROCEDURE  Delete_Duplicate_List_Lines
8036   +------------------------------------------------------------------------
8037 */
8038 
8039 -- shu fix bug 1915355
8040 
8041 PROCEDURE Delete_Duplicate_List_Lines(p_pricing_phase_id NUMBER,
8042                            x_status_code OUT NOCOPY VARCHAR2,
8043                            x_status_text OUT NOCOPY VARCHAR2) AS
8044 
8045 l_routine VARCHAR2(40) := 'Delete_Duplicate_List_Lines';
8046 
8047 CURSOR get_duplicate_list_lines_count IS
8048 SELECT count(*)
8049 FROM qp_npreq_ldets_tmp
8050 WHERE pricing_status_code = G_STATUS_NEW
8051 AND   pricing_phase_id = p_pricing_phase_id
8052 GROUP BY line_index,created_from_list_line_id
8053 HAVING count(*) > 1;
8054 
8055 l_count NUMBER := 0;
8056 
8057 BEGIN
8058 
8059 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8060 engine_debug('In Delete Duplicate List Lines procedure');
8061 
8062 END IF;
8063 OPEN get_duplicate_list_lines_count;
8064 FETCH get_duplicate_list_lines_count INTO l_count;
8065 CLOSE get_duplicate_list_lines_count;
8066 
8067 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8068 engine_debug('Duplicate List Lines Count : ' || l_count);
8069 END IF;
8070 
8071 IF (l_count > 0) THEN
8072  UPDATE qp_npreq_ldets_tmp a
8073  SET pricing_status_code = 'DUPLICATE_LIST_LINE'
8074  WHERE pricing_status_code = G_STATUS_NEW
8075  AND   pricing_phase_id = p_pricing_phase_id
8076  AND rowid not in (SELECT min(rowid)
8077  		FROM qp_npreq_ldets_tmp
8078  		WHERE pricing_status_code = G_STATUS_NEW
8079    		AND   pricing_phase_id = p_pricing_phase_id
8080                 GROUP BY line_index,created_from_list_line_id);
8081 END IF;
8082 EXCEPTION
8083   WHEN OTHERS THEN
8084    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8085    engine_debug(l_routine||' '||SQLERRM);
8086    END IF;
8087    x_status_code := FND_API.G_RET_STS_ERROR;
8088    x_status_text := 'Error in '||l_routine||SQLERRM;
8089 
8090 END Delete_Duplicate_List_Lines;
8091 --Added new procedure Delete_Hdrs_With_No_ProdAttr for 3520634
8092 /*+-----------------------------------------------------------------------
8093   |PROCEDURE Delete_Hdrs_With_No_ProdAttr
8094   +------------------------------------------------------------------------
8095 */
8096 --Added index hints for bug#7480862
8097 PROCEDURE Delete_Hdrs_With_No_ProdAttr(p_pricing_phase_id NUMBER,
8098                                        x_status_code OUT NOCOPY VARCHAR2,
8099                                        x_status_text OUT NOCOPY VARCHAR2) AS
8100 
8101  l_routine VARCHAR2(40) := 'Delete_Hdrs_With_No_ProdAttr';
8102 
8103 BEGIN
8104 
8105    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8106         engine_debug('Entering '||l_routine);
8107    END IF;
8108  UPDATE /*+ index(a qpprod QP_PREQ_QUAL_TMP_N1) dynamic_sampling(1) */ qp_preq_qual_tmp a   --5658579
8109  --UPDATE qp_preq_qual_tmp a
8110  SET    pricing_status_code = G_STATUS_DELETED
8111  WHERE pricing_status_code = G_STATUS_UNCHANGED
8112    AND pricing_phase_id = p_pricing_phase_id
8113    AND list_line_id = -1
8114    AND NOT EXISTS (select /*+ NO_UNNEST
8115                               leading (c)
8116                               use_nl (c qpprod)
8117                               index (qpprod, QP_PREQ_LINE_ATTRS_TMP_N6)
8118                               index(c qp_pricing_attributes_n13) */
8119 		'x'
8120                    FROM  qp_npreq_line_attrs_tmp qpprod, qp_pricing_attributes c
8121                    WHERE c.list_header_id = a.list_header_id        -- delete header for which product does
8122                    AND   c.pricing_phase_id = p_pricing_phase_id    -- not match
8123                    AND   qpprod.context = c.product_attribute_context
8124                    AND   qpprod.attribute = c.product_attribute
8125                    AND   qpprod.value_from = c.product_attr_value
8126                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
8127                    AND   c.qualification_ind in (G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PROD_HDR_QUAL_IND,
8128                                                  G_YES_PROD_PRIC_HDR_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
8129                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
8130                    AND   c.excluder_flag = G_NO
8131                    AND   rownum = 1
8132                    --UNION
8133                    --SELECT /*+ ORDERED USE_NL(d qppric) index(d qp_pricing_attributes_n5) */ 'x'
8134                    /*FROM  qp_npreq_line_attrs_tmp qpprod,
8135                          qp_pricing_attributes d,
8136                          qp_preq_line_attrs_tmp qppric
8137                    WHERE d.list_header_id = a.list_header_id      -- delete header for which product and
8138                    AND   d.pricing_phase_id = p_pricing_phase_id  -- pricing attrbutes do not match
8139                    AND   d.QUALIFICATION_IND in (G_YES_PROD_PRIC_HDR_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
8140                    AND   d.product_attribute_context = qpprod.context
8141                    AND   d.product_attribute = qpprod.attribute
8142                    AND   d.product_attr_value = qpprod.value_from
8143                    AND   d.excluder_flag = G_NO
8144                    AND   d.pricing_attribute_context = qppric.context
8145                    AND   d.pricing_attribute = qppric.attribute
8146                    AND   (d.pricing_attr_value_from = qppric.value_from
8147                           or d.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
8148                    AND   qpprod.attribute_type='PRODUCT'
8149                    AND   qpprod.pricing_status_code=G_STATUS_UNCHANGED
8150                    AND   qppric.attribute_type = 'PRICING'
8151                    AND   qppric.pricing_status_code = G_STATUS_UNCHANGED
8152                    AND   qpprod.line_index = qppric.line_index
8153                    AND   rownum = 1*/
8154                   )
8155  AND  NOT EXISTS (SELECT 'x'              --do not delete header for which product is not defined
8156                   FROM  qp_list_lines d
8157                   WHERE d.list_header_id = a.list_header_id
8158                   AND   d.qualification_ind in (G_YES_HDR_LINE_QUAL_IND,G_YES_HDR_QUAL_IND)
8159                   AND   d.pricing_phase_id = p_pricing_phase_id
8160                   AND   rownum=1);
8161 
8162  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8163   engine_debug('No of headers deleted from qual tmp due to non-matching of product : ' || l_routine || ' ' || SQL%ROWCOUNT);
8164  END IF;
8165 
8166 EXCEPTION
8167   WHEN OTHERS THEN
8168    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8169    engine_debug(l_routine||' '||SQLERRM);
8170    END IF;
8171    x_status_code := FND_API.G_RET_STS_ERROR;
8172    x_status_text := 'Error in '||l_routine||SQLERRM;
8173 
8174 END Delete_Hdrs_With_No_ProdAttr;
8175 
8176 
8177 
8178 PROCEDURE Delete_Un_Asked_For_Promotions (p_line_index            IN NUMBER,
8179                                           p_pricing_phase_id      IN NUMBER,
8180                                           p_incompat_resolve_code IN VARCHAR2,
8181                                           x_return_status       OUT NOCOPY
8182 VARCHAR2,
8183                                           x_return_status_txt   OUT NOCOPY
8184 VARCHAR2) AS
8185 l_debug varchar2(3);
8186 l_pricing_status_code varchar2(30);
8187 BEGIN
8188      l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
8189 
8190      -- [julin/4116856]: moved from QP_Resolve_Incompatability_PVT.Best_Price_-
8191      -- For_Phase; required to delete un-asked-for promotions before they are
8192      -- processed.
8193      -- Delete lines which are actually ask_for in setup , but are not asked for in the Order
8194      -- Because Engine selects these lines irrespective of their ask_for_flag
8195      -- Index Certificate
8196      /*
8197             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
8198             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
8199             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
8200             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
8201             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
8202             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
8203             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
8204             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
8205             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
8206        */
8207      IF (p_incompat_resolve_code = G_INCOMP_BEST_PRICE) THEN
8208  l_pricing_status_code := QP_PREQ_GRP.G_STATUS_BEST_PRICE_EVAL;
8209      ELSE
8210        l_pricing_status_code := QP_PREQ_GRP.G_STATUS_INCOMP_LOGIC;
8211      END IF;
8212 
8213 
8214      UPDATE qp_npreq_ldets_tmp a  --upd1
8215      SET PRICING_STATUS_CODE = l_pricing_status_code
8216      WHERE a.ASK_FOR_FLAG = QP_PREQ_GRP.G_YES
8217      AND a.PRICING_PHASE_ID = p_pricing_phase_id
8218      AND a.LINE_INDEX = p_line_index
8219      AND NOT EXISTS (
8220        SELECT /*+ index(b QP_PREQ_LINE_ATTRS_TMP_N2) */ 'X' -- This can use N2 instead of N7
8221        FROM  qp_npreq_line_attrs_tmp b
8222        WHERE  b.LINE_INDEX = p_line_index
8223        AND b.PRICING_STATUS_CODE = QP_PREQ_GRP.G_STATUS_UNCHANGED
8224        AND b.ATTRIBUTE_TYPE = QP_PREQ_GRP.G_QUALIFIER_TYPE
8225        AND b.CONTEXT = QP_PREQ_GRP.G_LIST_HEADER_CONTEXT
8226        AND b.ATTRIBUTE IN (QP_PREQ_GRP.G_QUAL_ATTRIBUTE1,
8227                       QP_PREQ_GRP.G_QUAL_ATTRIBUTE2,
8228                       QP_PREQ_GRP.G_QUAL_ATTRIBUTE6)
8229        AND b.VALUE_FROM = decode(b.ATTRIBUTE,
8230                      QP_PREQ_GRP.G_QUAL_ATTRIBUTE1,to_char(a.CREATED_FROM_LIST_HEADER_ID),
8231                      QP_PREQ_GRP.G_QUAL_ATTRIBUTE2,to_char(a.CREATED_FROM_LIST_LINE_ID),
8232                      QP_PREQ_GRP.G_QUAL_ATTRIBUTE6,to_char(a.CREATED_FROM_LIST_HEADER_ID)));
8233 
8234      IF l_debug = FND_API.G_TRUE THEN
8235        QP_PREQ_GRP.engine_debug ('Deleted Un Asked for promotions:'||l_pricing_status_code);
8236      END IF;
8237 
8238 EXCEPTION
8239   WHEN OTHERS THEN
8240     x_return_status := FND_API.G_RET_STS_ERROR;
8241     x_return_status_txt := 'Unexpected error in QP_PREQ_GRP.Delete_Un_Asked_For_Promotions: ' || SQLERRM;
8242 END Delete_Un_Asked_For_Promotions;
8243 
8244 
8245 
8246 /*+-----------------------------------------------------------------------
8247   |PROCEDURE  Populate_Temp_Tables
8248   +------------------------------------------------------------------------
8249 */
8250 PROCEDURE Populate_Temp_Tables
8251 (p_line_tbl               IN   LINE_TBL_TYPE,
8252  p_qual_tbl               IN   QUAL_TBL_TYPE,
8253  p_line_attr_tbl          IN   LINE_ATTR_TBL_TYPE,
8254  p_LINE_DETAIL_tbl        IN   LINE_DETAIL_TBL_TYPE,
8255  p_LINE_DETAIL_qual_tbl   IN   LINE_DETAIL_QUAL_TBL_TYPE,
8256  p_LINE_DETAIL_attr_tbl   IN   LINE_DETAIL_ATTR_TBL_TYPE,
8257  p_rltd_lines_tbl         IN   RELATED_LINES_TBL_TYPE,
8258  p_rounding_flag          IN   VARCHAR2,
8259  p_pricing_status_code    IN   VARCHAR2,
8260  p_price_phase_flag       IN   BOOLEAN,
8261  p_freeze_override_flag   IN   VARCHAR2,
8262  p_pricing_event          IN   VARCHAR2,
8263  p_calculate_flag         IN   VARCHAR2,
8264  x_status_code            OUT NOCOPY VARCHAR2,
8265  x_status_text            OUT NOCOPY VARCHAR2
8266 )
8267 
8268 AS
8269 
8270 I PLS_INTEGER;
8271 v_error_code NUMBER;
8272 v_error_message VARCHAR2(255);
8273 l_message VARCHAR2(255);
8274 l_status_code VARCHAR2(240);
8275 l_status_text VARCHAR2(240);
8276 l_pricing_status_code VARCHAR2(30);
8277 v_pricing_status_code VARCHAR2(30);
8278 J PLS_INTEGER:=1;
8279 K PLS_INTEGER:=1;
8280 TYPE line_index_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8281 l_line_index_tbl line_index_type;
8282 E_DATE_IS_NULL EXCEPTION;
8283 E_CURRENCY_CODE_IS_NULL EXCEPTION;
8284 l_routine VARCHAR2(240):='QP_PREQ_GRP.Populate_Temp_Tables';
8285 l_count   PLS_INTEGER;
8286 l_attribute_type VARCHAR2(30);
8287 l_line_quantity  NUMBER;
8288 l_line_amount    NUMBER;
8289 l_unit_price     NUMBER;
8290 l_order_header_id  VARCHAR2(200) := 'MISSING HEADER';
8291 l_order_line_id NUMBER;
8292 l_not_insert_order_line_flag BOOLEAN := FALSE;
8293 l_summary_line_index PLS_INTEGER;
8294 l_price_flag    VARCHAR2(1);
8295 l_source_qty_flag VARCHAR2(1);
8296 l_source_amt_flag VARCHAR2(1);
8297 
8298 E_ROUTINE_ERRORS EXCEPTION;
8299 
8300 /*
8301 INDX,QP_PREQ_GRP.populate_temp_tables.l_get_count_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
8302 */
8303 CURSOR l_get_count_cur IS
8304  SELECT COUNT(*)
8305  FROM   qp_npreq_line_attrs_tmp
8306  WHERE  PRICING_STATUS_CODE = 'X';
8307 
8308 --added by yangli for Java Engine project
8309 /*
8310 INDX,QP_PREQ_GRP.populate_temp_tables.l_int_count_cur,qp_int_line_attrs_N2,PRICING_STATUS_CODE,1
8311 */
8312 CURSOR l_int_count_cur IS
8313  SELECT COUNT(*)
8314  FROM   qp_int_line_attrs
8315  WHERE  PRICING_STATUS_CODE = 'X';
8316 --added by yangli for Java Engine project
8317 
8318    -- begin declare shu fix bug 1728757
8319   l_list_header_id qp_qualifiers.list_header_id%type := NULL;
8320   --l_cascade_ask_for_profile VARCHAR2(2):= nvl(FND_PROFILE.value ('QP_CASCADE_ASK_FOR_PROMOTION'), G_NO);
8321   l_cascade_ask_for_profile VARCHAR2(2):= G_NO;
8322   l_ask_for_flag qp_list_headers_b.ask_for_flag%type := NULL;
8323 
8324   CURSOR get_ask_for_flag_cur (l_list_header_id IN NUMBER) IS
8325 	SELECT a.ask_for_flag
8326 	FROM qp_list_headers_b a
8327  	WHERE a.list_header_id = l_list_header_id;
8328 
8329   CURSOR l_ask_for_child_ids (l_list_header_id IN NUMBER) IS
8330  	SELECT
8331     		qp_lhdr_b.list_header_id
8332  	FROM
8333    		qp_list_headers_b qp_lhdr_b
8334  	WHERE
8335     		qp_lhdr_b.parent_list_header_id = l_list_header_id AND qp_lhdr_b.ask_for_flag = G_YES;
8336 
8337   -- end shu fix bug 1728757
8338 
8339 BEGIN
8340  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8341  engine_debug('Rounding Flag: '||p_rounding_flag);
8342  engine_debug ('Passed in Attribute Count : ' || p_line_attr_tbl.count);
8343  engine_debug ('Passed in Qualifier Count : ' || p_qual_tbl.count);
8344  engine_debug ('Passed in Lines Count : ' || p_line_tbl.count);
8345  engine_debug ('Passed in Line dtls Count : ' || p_LINE_DETAIL_tbl.count);
8346  engine_debug ('-----Line information passed-----');
8347  END IF;
8348  I:=  p_line_tbl.FIRST;
8349 
8350  --if the control record says it is calculate_only
8351  --then it will bypass search so, pricing_status_code should
8352  --be G_STATUS_NEW as is it is selected by search engine.
8353 
8354  l_pricing_status_code := p_pricing_status_code;
8355 
8356 
8357 --Reset_all_tbls;
8358 Reset_All_Tbls(l_status_code ,l_status_text );
8359 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8360  RAISE E_ROUTINE_ERRORS;
8361 END IF;
8362 
8363 K:=1;
8364 WHILE I IS NOT NULL LOOP
8365 
8366 
8367    IF ( p_line_tbl(I).CURRENCY_CODE IS NULL or
8368      p_line_tbl(I).CURRENCY_CODE = FND_API.G_MISS_CHAR ) THEN
8369      RAISE E_CURRENCY_CODE_IS_NULL;
8370    ELSE
8371     --IF (G_CURRENCY_CODE IS NULL) THEN
8372      G_CURRENCY_CODE := p_line_tbl(I).CURRENCY_CODE;
8373     --END IF;
8374    END IF;
8375 
8376 
8377    IF ( p_line_tbl(I).PRICING_EFFECTIVE_DATE IS NULL ) THEN
8378      RAISE E_DATE_IS_NULL;
8379    END IF;
8380 --Begin Bug# 7833575
8381   --uncommented the commenting done for FP 7321922
8382    IF (G_MIN_PRICING_DATE IS NULL) THEN
8383     G_MIN_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8384     G_MAX_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8385  --/*  --FP 7321922
8386    ELSE
8387     IF (TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE) < TRUNC(G_MIN_PRICING_DATE) AND
8388               p_line_tbl(I).LINE_TYPE_CODE <> 'ORDER') THEN
8389      G_MIN_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8390     END IF;
8391     IF (TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE) > TRUNC(G_MAX_PRICING_DATE) AND
8392               p_line_tbl(I).LINE_TYPE_CODE <> 'ORDER') THEN
8393      G_MAX_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8394     END IF;
8395    END IF;
8396 --*/
8397 --End Bug# 7833575
8398    IF (instr(p_pricing_event || ',' ,'PRICE,',1,1) > 0 OR instr(p_pricing_event || ',' ,'LINE,',1,1) > 0) THEN
8399    --IF (p_pricing_event in ('PRICE','LINE')) THEN
8400     l_not_insert_order_line_flag := TRUE;
8401    ELSE
8402     l_not_insert_order_line_flag := FALSE;
8403    END IF;
8404 
8405    l_summary_line_index := -99999; -- Reset
8406    l_price_flag := p_line_tbl(I).price_flag ; -- Default/Reset
8407 
8408    IF (p_line_tbl(I).LINE_TYPE_CODE = G_ORDER_LEVEL) THEN
8409     l_summary_line_index := p_line_tbl(I).LINE_INDEX;
8410     l_order_header_id := to_char(p_line_tbl(I).LINE_ID);
8411     G_ORDER_ID := p_line_tbl(I).LINE_ID; -- accum range break
8412     --Global variable for limits
8413     G_ORDER_PRICE_REQUEST_CODE := p_line_tbl(I).REQUEST_TYPE_CODE || '-' || l_order_header_id;
8414     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8415     engine_debug( ' Order Price Request Code : ' || G_ORDER_PRICE_REQUEST_CODE);
8416     END IF;
8417    END IF;
8418 
8419    IF (p_line_tbl(I).LINE_TYPE_CODE = G_ORDER_LEVEL AND l_not_insert_order_line_flag = TRUE) THEN
8420     l_price_flag := 'N'; -- for summary line
8421    END IF;
8422 
8423    --dbms_output.put_line ('Min Sysdate : ' || G_MIN_PRICING_DATE);
8424    --dbms_output.put_line ('Max Sysdate : ' || G_MAX_PRICING_DATE);
8425 
8426    -- do not overwrite the list price if it is a calculate call
8427    IF ((p_line_tbl(I).PRICE_FLAG = G_YES OR (p_line_tbl(I).PRICE_FLAG = G_PHASE AND p_freeze_override_flag = G_YES))
8428        AND p_price_phase_flag = TRUE AND G_MANUAL_ADJUSTMENTS_CALL_FLAG = G_NO
8429        AND p_calculate_flag IN (G_SEARCH_ONLY,G_SEARCH_N_CALCULATE))
8430        AND NVL (p_line_tbl(I).LIST_PRICE_OVERRIDE_FLAG, 'N') = 'N'  --po integration
8431   THEN
8432     l_unit_price := NULL;
8433    ELSE
8434     l_unit_price := p_line_tbl(I).UNIT_PRICE;
8435    END IF;
8436 
8437   --IF (l_not_insert_order_line_flag = TRUE and p_line_tbl(I).LINE_TYPE_CODE <> G_ORDER_LEVEL or
8438   --    l_not_insert_order_line_flag = FALSE) THEN
8439    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8440    engine_debug (' Loading the line info into plsql tables');
8441 
8442    END IF;
8443    G_LINE_INDEX_TBL(K)            :=  p_line_tbl(I).LINE_INDEX;
8444    G_LINE_TYPE_CODE_TBL(K)        :=  p_line_tbl(I).LINE_TYPE_CODE;
8445    G_PRICING_EFFECTIVE_DATE_TBL(K):=  TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8446    G_ACTIVE_DATE_FIRST_TBL(K)     :=  TRUNC(p_line_tbl(I).ACTIVE_DATE_FIRST);
8447    G_ACTIVE_DATE_FIRST_TYPE_TBL(K):=  p_line_tbl(I).ACTIVE_DATE_FIRST_TYPE;
8448    G_ACTIVE_DATE_SECOND_TBL(K)    :=  TRUNC(p_line_tbl(I).ACTIVE_DATE_SECOND);
8449    G_ACTIVE_DATE_SECOND_TYPE_TBL(K):= p_line_tbl(I).ACTIVE_DATE_SECOND_TYPE;
8450    G_LINE_QUANTITY_TBL(K)          := p_line_tbl(I).LINE_QUANTITY;
8451    G_LINE_UOM_CODE_TBL(K)          := p_line_tbl(I).LINE_UOM_CODE;
8452    G_REQUEST_TYPE_CODE_TBL(K)      := p_line_tbl(I).REQUEST_TYPE_CODE;
8453    G_UOM_QUANTITY_TBL(K)           := p_line_tbl(I).UOM_QUANTITY;
8454 
8455    If p_price_phase_flag = TRUE AND p_line_tbl(I).LIST_PRICE_OVERRIDE_FLAG IN (
8456 'Y', 'O')
8457    Then  --po integration
8458    	G_PRICED_QUANTITY_TBL(K)        := p_line_tbl(I).LINE_QUANTITY;
8459    	G_PRICED_UOM_CODE_TBL(K)        := p_line_tbl(I).LINE_UOM_CODE;
8460         G_ADJUSTED_UNIT_PRICE_TBL(K)    := l_unit_price;
8461    	G_LINE_UNIT_PRICE_TBL(K) 	:= l_unit_price; /* shu_latest */
8462    Else
8463    	G_PRICED_QUANTITY_TBL(K)        := p_line_tbl(I).PRICED_QUANTITY;
8464    	G_PRICED_UOM_CODE_TBL(K)        := p_line_tbl(I).PRICED_UOM_CODE;
8465    	G_ADJUSTED_UNIT_PRICE_TBL(K)    := p_line_tbl(I).ADJUSTED_UNIT_PRICE;
8466    	G_LINE_UNIT_PRICE_TBL(K) 	:= p_line_tbl(I).LINE_UNIT_PRICE; /* shu_latest */
8467    End If;  --po integration
8468 
8469    G_CURRENCY_CODE_TBL(K)          := p_line_tbl(I).CURRENCY_CODE;
8470    G_UNIT_PRICE_TBL(K)             := l_unit_price;
8471    G_PERCENT_PRICE_TBL(K)          := p_line_tbl(I).PERCENT_PRICE;
8472    G_UPD_ADJUSTED_UNIT_PRICE_TBL(K):= p_line_tbl(I).UPDATED_ADJUSTED_UNIT_PRICE;
8473    G_PROCESSED_FLAG_TBL(K)         := G_NOT_PROCESSED;
8474    G_PRICE_FLAG_TBL(K)             := l_price_flag;
8475    G_LINE_ID_TBL(K)                := p_line_tbl(I).LINE_ID;
8476    G_ROUNDING_FLAG_TBL(K)          := p_rounding_flag;
8477    G_ROUNDING_FACTOR_TBL(K)        := p_line_tbl(I).ROUNDING_FACTOR;
8478    G_PROCESSING_ORDER_TBL(K)       := NULL;
8479    G_PRICING_STATUS_CODE_tbl(K)    := G_STATUS_UNCHANGED; -- always when inserted
8480    G_PRICING_STATUS_TEXT_tbl(K)    := NULL;
8481    G_QUALIFIERS_EXIST_FLAG_TBL(K)  := 'N';
8482    G_PRICING_ATTRS_EXIST_FLAG_TBL(K) := 'N';
8483    G_PRICE_LIST_ID_TBL(K) := -9999;
8484    G_PL_VALIDATED_FLAG_TBL(K) := 'N';
8485    G_USAGE_PRICING_TYPE_TBL(K)     := nvl(p_line_tbl(I).USAGE_PRICING_TYPE,G_REGULAR_USAGE_TYPE);
8486    G_LINE_CATEGORY_TBL(K) := p_line_tbl(I).LINE_CATEGORY;
8487    G_CONTRACT_START_DATE_TBL(K) := p_line_tbl(I).CONTRACT_START_DATE; /* shulin */
8488    G_CONTRACT_END_DATE_TBL(K) := p_line_tbl(I).CONTRACT_END_DATE; /* shulin */
8489    G_LIST_PRICE_OVERRIDE_FLAG_TBL(K)   := nvl (p_line_tbl(I).LIST_PRICE_OVERRIDE_FLAG, 'N'); --po integration
8490    G_CHARGE_PERIODICITY_CODE_TBL(K) := p_line_tbl(I).CHARGE_PERIODICITY_CODE;
8491    G_SERVICE_DURATION_DEF_TBL(K) :=  p_line_tbl(I).SERVICE_DURATION;   -- SERVICE PROJECT
8492    G_SERVICE_PERIOD_DEF_TBL(K) := p_line_tbl(I).SERVICE_PERIOD;   -- SERVICE PROJECT
8493 
8494    /* IF (p_line_tbl(I).HEADER_ID IS NULL) THEN
8495     l_order_header_id := 'MISSING HEADER';
8496    ELSE
8497     l_order_header_id := to_char(p_line_tbl(I).HEADER_ID);
8498    END IF; */
8499 
8500    IF (p_line_tbl(I).LINE_ID IS NULL) THEN
8501     SELECT qp_limit_price_request_code_s.nextval
8502     INTO l_order_line_id
8503     FROM dual;
8504    ELSE
8505     l_order_line_id := p_line_tbl(I).LINE_ID;
8506    END IF;
8507 
8508    IF (p_line_tbl(I).LINE_TYPE_CODE = G_LINE_LEVEL) THEN
8509     IF (p_line_tbl(I).PRICE_REQUEST_CODE IS NULL) THEN
8510      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).REQUEST_TYPE_CODE || '-' || l_order_header_id || '-' || l_order_line_id;
8511     ELSE
8512      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).PRICE_REQUEST_CODE;
8513     END IF;
8514    ELSE
8515     IF (p_line_tbl(I).PRICE_REQUEST_CODE IS NULL) THEN
8516      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).REQUEST_TYPE_CODE || '-' || l_order_header_id;
8517     ELSE
8518      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).PRICE_REQUEST_CODE;
8519     END IF;
8520    END IF;
8521 
8522   --END IF;
8523 
8524  I:=  p_line_tbl.NEXT(I);
8525  K:=K+1;
8526 END LOOP;
8527 
8528   IF K > 1 THEN
8529             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8530             engine_debug ('Bulk Inserting the actual lines : ' || G_PRICE_LIST_ID_TBL(1));
8531             END IF;
8532             INSERT_LINES2
8533                 (p_LINE_INDEX =>   G_LINE_INDEX_TBL,
8534                  p_LINE_TYPE_CODE =>  G_LINE_TYPE_CODE_TBL,
8535                  p_PRICING_EFFECTIVE_DATE =>G_PRICING_EFFECTIVE_DATE_TBL,
8536                  p_ACTIVE_DATE_FIRST       =>G_ACTIVE_DATE_FIRST_TBL,
8537                  p_ACTIVE_DATE_FIRST_TYPE  =>G_ACTIVE_DATE_FIRST_TYPE_TBL,
8538                  p_ACTIVE_DATE_SECOND      =>G_ACTIVE_DATE_SECOND_TBL,
8539                  p_ACTIVE_DATE_SECOND_TYPE =>G_ACTIVE_DATE_SECOND_TYPE_TBL,
8540                  p_LINE_QUANTITY =>     G_LINE_QUANTITY_TBL,
8541                  p_LINE_UOM_CODE =>     G_LINE_UOM_CODE_TBL,
8542                  p_REQUEST_TYPE_CODE => G_REQUEST_TYPE_CODE_TBL,
8543                  p_PRICED_QUANTITY =>   G_PRICED_QUANTITY_TBL,
8544                  p_PRICED_UOM_CODE =>   G_PRICED_UOM_CODE_TBL,
8545                  p_CURRENCY_CODE   =>   G_CURRENCY_CODE_TBL,
8546                  p_UNIT_PRICE      =>   G_UNIT_PRICE_TBL,
8547                  p_PERCENT_PRICE   =>   G_PERCENT_PRICE_TBL,
8548                  p_UOM_QUANTITY =>      G_UOM_QUANTITY_TBL,
8549                  p_ADJUSTED_UNIT_PRICE =>G_ADJUSTED_UNIT_PRICE_TBL,
8550                  p_UPD_ADJUSTED_UNIT_PRICE =>G_UPD_ADJUSTED_UNIT_PRICE_TBL,
8551                  p_PROCESSED_FLAG      =>G_PROCESSED_FLAG_TBL,
8552                  p_PRICE_FLAG          =>G_PRICE_FLAG_TBL,
8553                  p_LINE_ID             =>G_LINE_ID_TBL,
8554                  p_PROCESSING_ORDER    =>G_PROCESSING_ORDER_TBL,
8555                  p_PRICING_STATUS_CODE =>G_PRICING_STATUS_CODE_tbl,
8556                  p_PRICING_STATUS_TEXT =>G_PRICING_STATUS_TEXT_tbl,
8557                  p_ROUNDING_FLAG       =>G_ROUNDING_FLAG_TBL,
8558                  p_ROUNDING_FACTOR     =>G_ROUNDING_FACTOR_TBL,
8559                  p_QUALIFIERS_EXIST_FLAG => G_QUALIFIERS_EXIST_FLAG_TBL,
8560                  p_PRICING_ATTRS_EXIST_FLAG =>G_PRICING_ATTRS_EXIST_FLAG_TBL,
8561                  p_PRICE_LIST_ID          => G_PRICE_LIST_ID_TBL,
8562                  p_VALIDATED_FLAG         => G_PL_VALIDATED_FLAG_TBL,
8563                  p_PRICE_REQUEST_CODE     => G_PRICE_REQUEST_CODE_TBL,
8564 		 p_USAGE_PRICING_TYPE  =>G_USAGE_PRICING_TYPE_tbl,
8565                  p_LINE_CATEGORY       =>G_LINE_CATEGORY_TBL,
8566                  p_CONTRACT_START_DATE =>G_CONTRACT_START_DATE_TBL, /* shulin */
8567                  p_CONTRACT_END_DATE =>G_CONTRACT_END_DATE_TBL, /* shulin */
8568                  p_LINE_UNIT_PRICE =>G_LINE_UNIT_PRICE_TBL, /* shu_latest */
8569 		 p_LIST_PRICE_OVERRIDE_FLAG => G_LIST_PRICE_OVERRIDE_FLAG_TBL, -- po integration
8570                  p_CHARGE_PERIODICITY_CODE => G_CHARGE_PERIODICITY_CODE_TBL,
8571 		 p_SERVICE_DURATION        => G_SERVICE_DURATION_DEF_TBL,  -- SERVICE PROJECT
8572 		 p_SERVICE_PERIOD          => G_SERVICE_PERIOD_DEF_TBL,    -- SERVICE PROJECT
8573                  x_status_code         =>l_status_code,
8574                  x_status_text         =>l_status_text);
8575 
8576         IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8577             RAISE E_ROUTINE_ERRORS;
8578         END IF;
8579  END IF;
8580 
8581 /*************************populating line attributes *****************************/
8582 
8583 --Reset_all_tbls;
8584 Reset_All_Tbls(l_status_code ,l_status_text );
8585 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8586  RAISE E_ROUTINE_ERRORS;
8587 END IF;
8588 
8589 I:= p_qual_tbl.FIRST;
8590 K:=1;
8591 
8592 WHILE (I IS NOT NULL AND
8593       (l_not_insert_order_line_flag = TRUE
8594        and p_qual_tbl(I).LINE_INDEX <> l_summary_line_index or
8595        l_not_insert_order_line_flag = FALSE)) LOOP
8596  G_LINE_INDEX_tbl(K)          := p_qual_tbl(I).LINE_INDEX;
8597  G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8598  G_ATTRIBUTE_TYPE_tbl(K)      := G_QUALIFIER_TYPE;
8599  G_CONTEXT_tbl(K)             := p_qual_tbl(I).QUALIFIER_CONTEXT;
8600  G_ATTRIBUTE_tbl(K)           := p_qual_tbl(I).QUALIFIER_ATTRIBUTE;
8601  G_VALUE_FROM_tbl(K)          := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM;
8602  G_VALUE_TO_tbl(K)            := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO;
8603  G_COMPARISON_OPERATOR_TYPE_tbl(K):=p_qual_tbl(I).COMPARISON_OPERATOR_CODE;
8604  G_VALIDATED_FLAG_tbl(K)  := p_qual_tbl(I).VALIDATED_FLAG;
8605  G_APPLIED_FLAG_tbl(K)    := G_LIST_NOT_APPLIED;
8606  G_PRICING_STATUS_CODE_tbl(K)    :=  l_pricing_status_code;
8607  G_PRICING_ATTR_FLAG_tbl(K)      := G_YES;
8608  G_LINE_DETAIL_INDEX_tbl(K)      := NULL;
8609  G_LIST_HEADER_ID_tbl(K)         :=NULL;
8610  G_LIST_LINE_ID_tbl(K)           :=NULL;
8611  G_SETUP_VALUE_FROM_tbl(K)       :=NULL;
8612  G_SETUP_VALUE_TO_tbl(K)         :=NULL;
8613  G_GROUPING_NUMBER_tbl(K)        :=NULL;
8614  G_NO_QUALIFIERS_IN_GRP_tbl(K)   :=NULL;
8615  G_PRICING_STATUS_TEXT_tbl(K)    :=NULL;
8616  G_QUALIFIER_PRECEDENCE_tbl(K)   :=NULL;
8617  G_DATATYPE_tbl(K)               :=NULL;
8618  G_PRODUCT_UOM_CODE_TBL(K)       :=NULL;
8619  G_QUALIFIER_TYPE_TBL(K)         :=NULL;
8620  G_EXCLUDER_FLAG_TBL(K)          :=NULL;
8621  G_PRICING_PHASE_ID_TBL_A(K)       :=NULL;
8622  G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8623  G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8624  G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8625  G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8626 
8627  -- begin shu_promo, fix bug 1728757
8628 
8629  	IF p_qual_tbl(I).QUALIFIER_CONTEXT = 'MODLIST' AND
8630  	   p_qual_tbl(I).QUALIFIER_ATTRIBUTE IN ('QUALIFIER_ATTRIBUTE1','QUALIFIER_ATTRIBUTE6')-- promotion no.
8631  	THEN
8632  	   G_LIST_HEADER_ID_TBL(K) := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM; -- promotion hdr id
8633         END IF;
8634 
8635  	IF p_qual_tbl(I).QUALIFIER_CONTEXT = 'MODLIST' AND
8636  	   p_qual_tbl(I).QUALIFIER_ATTRIBUTE IN ('QUALIFIER_ATTRIBUTE2')-- list line id
8637  	THEN
8638  	   --G_LIST_LINE_ID_TBL(K) := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM; -- promotion list line id
8639            -- Get the list header id for the list line
8640           BEGIN
8641            SELECT list_header_id
8642            INTO G_LIST_HEADER_ID_TBL(K)
8643            FROM qp_list_lines
8644            WHERE list_line_id = to_number(p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM);
8645           EXCEPTION
8646            WHEN NO_DATA_FOUND THEN
8647              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8648              engine_debug('Error in Finding List Header Id for List Line : '||
8649                           p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM);
8650              END IF;
8651 			 l_status_code := FND_API.G_RET_STS_ERROR;
8652 			 l_status_text := 'Error in Finding List Header Id for List Line : '||
8653                           p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM;
8654              RAISE E_ROUTINE_ERRORS;
8655           END ;
8656         END IF;
8657 
8658         -- if it is a promotion
8659  	IF p_qual_tbl(I).QUALIFIER_CONTEXT = 'MODLIST' AND
8660  	   p_qual_tbl(I).QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE1' -- promotion no.
8661  	THEN
8662  	   l_list_header_id := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM; -- promotion hdr id
8663     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8664 	   engine_debug ('promotion hdr id: '|| l_list_header_id);
8665     END IF;
8666 
8667 	   -- get ask_for_flag of this promotion
8668 	   OPEN get_ask_for_flag_cur(l_list_header_id);
8669       		FETCH get_ask_for_flag_cur INTO l_ask_for_flag;
8670      		CLOSE get_ask_for_flag_cur;
8671 
8672 	   IF ( l_cascade_ask_for_profile = G_YES AND l_ask_for_flag = G_YES) THEN
8673     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8674 	   engine_debug ('perform cascading ask for pormotion to ask for deals...');
8675     END IF;
8676      	   -- cascade ask_for_promotion to ask_for_deals
8677 
8678  	 	--cursor gets ask for deals' list_header_ids
8679  	   	for l_ask_for_child_ids_data in l_ask_for_child_ids (l_list_header_id) loop
8680    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8681 			engine_debug ('cascaded ask for deals: ' || l_ask_for_child_ids_data.list_header_id);
8682    END IF;
8683 			K:= K+1;
8684 			G_LINE_INDEX_tbl(K)          := p_qual_tbl(I).LINE_INDEX;
8685  			G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8686  			G_ATTRIBUTE_TYPE_tbl(K)      := G_QUALIFIER_TYPE;
8687  			G_CONTEXT_tbl(K)             := p_qual_tbl(I).QUALIFIER_CONTEXT;
8688  			G_ATTRIBUTE_tbl(K)           := p_qual_tbl(I).QUALIFIER_ATTRIBUTE;
8689  			G_VALUE_FROM_tbl(K)          := l_ask_for_child_ids_data.list_header_id;
8690  			G_VALUE_TO_tbl(K)            := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO;
8691  			G_COMPARISON_OPERATOR_TYPE_tbl(K):=p_qual_tbl(I).COMPARISON_OPERATOR_CODE;
8692  			G_VALIDATED_FLAG_tbl(K)  := p_qual_tbl(I).VALIDATED_FLAG;
8693  			G_APPLIED_FLAG_tbl(K)    := G_LIST_NOT_APPLIED;
8694  			G_PRICING_STATUS_CODE_tbl(K)    :=  l_pricing_status_code;
8695  			G_PRICING_ATTR_FLAG_tbl(K)      := G_YES;
8696  			G_LINE_DETAIL_INDEX_tbl(K)      := NULL;
8697  			G_LIST_HEADER_ID_tbl(K)         :=NULL;
8698  			G_LIST_LINE_ID_tbl(K)           :=NULL;
8699  			G_SETUP_VALUE_FROM_tbl(K)       :=NULL;
8700  			G_SETUP_VALUE_TO_tbl(K)         :=NULL;
8701  			G_GROUPING_NUMBER_tbl(K)        :=NULL;
8702  			G_NO_QUALIFIERS_IN_GRP_tbl(K)   :=NULL;
8703  			G_PRICING_STATUS_TEXT_tbl(K)    :=NULL;
8704  			G_QUALIFIER_PRECEDENCE_tbl(K)   :=NULL;
8705  			G_DATATYPE_tbl(K)               :=NULL;
8706  			G_PRODUCT_UOM_CODE_TBL(K)       :=NULL;
8707  			G_QUALIFIER_TYPE_TBL(K)         :=NULL;
8708  			G_EXCLUDER_FLAG_TBL(K)          :=NULL;
8709  			G_PRICING_PHASE_ID_TBL_A(K)       :=NULL;
8710  			G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8711  			G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8712  			G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8713  			G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8714  		end loop; --end cursor l_ask_for_child_ids loop
8715  	   END IF; -- end if cascade ask_for_promotion
8716  	END IF; -- end if if is a promotion
8717 
8718         -- end shu_promo
8719  K:= K+1;
8720  I:= p_qual_tbl.NEXT(I);
8721 END LOOP;
8722 
8723 I := p_line_attr_tbl.FIRST;
8724 
8725 WHILE I IS NOT NULL LOOP
8726  IF (p_line_attr_tbl(I).PRICING_CONTEXT = G_ITEM_CONTEXT) THEN
8727   l_attribute_type := G_PRODUCT_TYPE;
8728  ELSE
8729   l_attribute_type := G_PRICING_TYPE;
8730  END IF;
8731 
8732  G_LINE_INDEX_tbl(K)          := p_line_attr_tbl(I).LINE_INDEX;
8733  G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8734  G_ATTRIBUTE_TYPE_tbl(K)      := l_attribute_type;
8735  G_CONTEXT_tbl(K)             := p_line_attr_tbl(I).PRICING_CONTEXT;
8736  G_ATTRIBUTE_tbl(K)           := p_line_attr_tbl(I).PRICING_ATTRIBUTE;
8737  G_VALUE_FROM_tbl(K)          := p_line_attr_tbl(I).PRICING_ATTR_VALUE_FROM;
8738  G_VALUE_TO_tbl(K)            := p_line_attr_tbl(I).PRICING_ATTR_VALUE_TO;
8739  G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
8740  G_VALIDATED_FLAG_tbl(K)      := p_line_attr_tbl(I).VALIDATED_FLAG;
8741  G_APPLIED_FLAG_tbl(K)        := G_LIST_NOT_APPLIED;
8742  G_PRICING_STATUS_CODE_tbl(K) := l_pricing_status_code;
8743  G_PRICING_ATTR_FLAG_tbl(K)   := G_YES;
8744  G_LINE_DETAIL_INDEX_tbl(K)   := NULL;
8745  G_LIST_HEADER_ID_tbl(K)      :=NULL;
8746  G_LIST_LINE_ID_tbl(K)        :=NULL;
8747  G_SETUP_VALUE_FROM_tbl(K)    :=NULL;
8748  G_SETUP_VALUE_TO_tbl(K)      :=NULL;
8749  G_GROUPING_NUMBER_tbl(K)     :=NULL;
8750  G_NO_QUALIFIERS_IN_GRP_tbl(K):=NULL;
8751  G_PRICING_STATUS_TEXT_tbl(K) :=NULL;
8752  G_QUALIFIER_PRECEDENCE_tbl(K):=NULL;
8753  G_DATATYPE_tbl(K)            :=NULL;
8754  G_PRODUCT_UOM_CODE_TBL(K)    :=NULL;
8755  G_QUALIFIER_TYPE_TBL(K)      :=NULL;
8756  G_EXCLUDER_FLAG_TBL(K)       :=NULL;
8757  G_PRICING_PHASE_ID_TBL_A(K)    :=NULL;
8758  G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8759  G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8760  G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8761  G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8762  K:= K+1;
8763  I:= p_line_attr_tbl.NEXT(I);
8764 END LOOP;
8765 
8766 
8767 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8768 engine_debug('Before Sourcing Volume Attributes');
8769 
8770 END IF;
8771 l_source_qty_flag := QP_BUILD_SOURCING_PVT.Is_Attribute_Used('VOLUME','PRICING_ATTRIBUTE10');
8772 l_source_amt_flag := QP_BUILD_SOURCING_PVT.Is_Attribute_Used('VOLUME','PRICING_ATTRIBUTE12');
8773 
8774 IF (l_source_qty_flag = G_YES) THEN
8775 
8776  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8777  engine_debug('Sourcing Quantity Attribute');
8778 
8779  END IF;
8780  FOR G IN p_line_tbl.first .. p_line_tbl.last
8781  LOOP
8782 
8783   IF (p_price_phase_flag = TRUE) THEN
8784    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8785    engine_debug('Pricing Phase Exists.. Sourcing Line Quantity');
8786    END IF;
8787    l_line_quantity := nvl(p_line_tbl(G).LINE_QUANTITY,0);
8788   ELSE
8789    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8790    engine_debug('Pricing Phase Does not Exist.. Sourcing Priced Quantity');
8791    END IF;
8792    l_line_quantity := nvl(nvl(p_line_tbl(G).PRICED_QUANTITY,p_line_tbl(G).LINE_QUANTITY),0);
8793   END IF;
8794 
8795   --dbms_output.put_line ('Sourcing Item Qty for Line : ' ||p_line_tbl(G).LINE_INDEX );
8796 
8797   -- Source Item Quantity
8798   G_LINE_INDEX_tbl(K)          := p_line_tbl(G).LINE_INDEX;
8799   G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8800   G_ATTRIBUTE_TYPE_tbl(K)      := G_PRICING_TYPE;
8801   G_CONTEXT_tbl(K)             := G_PRIC_VOLUME_CONTEXT;
8802   G_ATTRIBUTE_tbl(K)           := G_QUANTITY_ATTRIBUTE;
8803   G_VALUE_FROM_tbl(K)          := qp_number.number_to_canonical(l_line_quantity);
8804   G_VALUE_TO_tbl(K)            := NULL;
8805   G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
8806   G_VALIDATED_FLAG_tbl(K)      := G_NO;
8807   G_APPLIED_FLAG_tbl(K)        := G_LIST_NOT_APPLIED;
8808   G_PRICING_STATUS_CODE_tbl(K) := G_STATUS_UNCHANGED;
8809   G_PRICING_ATTR_FLAG_tbl(K)   := G_YES;
8810   G_LINE_DETAIL_INDEX_tbl(K)   := NULL;
8811   G_LIST_HEADER_ID_tbl(K)      :=NULL;
8812   G_LIST_LINE_ID_tbl(K)        :=NULL;
8813   G_SETUP_VALUE_FROM_tbl(K)    :=NULL;
8814   G_SETUP_VALUE_TO_tbl(K)      :=NULL;
8815   G_GROUPING_NUMBER_tbl(K)     :=NULL;
8816   G_NO_QUALIFIERS_IN_GRP_tbl(K):=NULL;
8817   G_PRICING_STATUS_TEXT_tbl(K) :=NULL;
8818   G_QUALIFIER_PRECEDENCE_tbl(K):=NULL;
8819   G_DATATYPE_tbl(K)            :=NULL;
8820   G_PRODUCT_UOM_CODE_TBL(K)    :=NULL;
8821   G_QUALIFIER_TYPE_TBL(K)      :=NULL;
8822   G_EXCLUDER_FLAG_TBL(K)       :=NULL;
8823   G_PRICING_PHASE_ID_TBL_A(K)    :=NULL;
8824   G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8825   G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8826   G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8827   G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8828 
8829   K:= K+1;
8830 
8831  END LOOP;    -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
8832 END IF;
8833 
8834 IF (l_source_amt_flag = G_YES) THEN
8835 
8836  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8837  engine_debug('Sourcing Amount Attribute');
8838 
8839  END IF;
8840  FOR G IN p_line_tbl.first .. p_line_tbl.last
8841  LOOP
8842 
8843  IF (p_price_phase_flag = TRUE) THEN
8844   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8845   engine_debug('Pricing Phase Exists.. Sourcing Line Quantity');
8846   END IF;
8847   l_line_amount := nvl(p_line_tbl(G).LINE_QUANTITY * p_line_tbl(G).UNIT_PRICE,0);
8848  ELSE
8849   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8850   engine_debug('Pricing Phase Does not Exist.. ,l_status_textSourcing Priced Quantity');
8851   END IF;
8852   l_line_amount := nvl(nvl(p_line_tbl(G).PRICED_QUANTITY,p_line_tbl(G).LINE_QUANTITY) * p_line_tbl(G).UNIT_PRICE,0);
8853  END IF;
8854 
8855   --dbms_output.put_line ('Sourcing Item Qty for Line : ' ||p_line_tbl(G).LINE_INDEX );
8856 
8857   -- Source Item Amount
8858   G_LINE_INDEX_tbl(K)          := p_line_tbl(G).LINE_INDEX;
8859   G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8860   G_ATTRIBUTE_TYPE_tbl(K)      := G_PRICING_TYPE;
8861   G_CONTEXT_tbl(K)             := G_PRIC_VOLUME_CONTEXT;
8862   G_ATTRIBUTE_tbl(K)           := G_LINE_AMT_ATTRIBUTE;
8863   G_VALUE_FROM_tbl(K)          := qp_number.number_to_canonical(l_line_amount);
8864   G_VALUE_TO_tbl(K)            := NULL;
8865   G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
8866   G_VALIDATED_FLAG_tbl(K)      := G_NO;
8867   G_APPLIED_FLAG_tbl(K)        := G_LIST_NOT_APPLIED;
8868   G_PRICING_STATUS_CODE_tbl(K) := G_STATUS_UNCHANGED;
8869   G_PRICING_ATTR_FLAG_tbl(K)   := G_YES;
8870   G_LINE_DETAIL_INDEX_tbl(K)   := NULL;
8871   G_LIST_HEADER_ID_tbl(K)      :=NULL;
8872   G_LIST_LINE_ID_tbl(K)        :=NULL;
8873   G_SETUP_VALUE_FROM_tbl(K)    :=NULL;
8874   G_SETUP_VALUE_TO_tbl(K)      :=NULL;
8875   G_GROUPING_NUMBER_tbl(K)     :=NULL;
8876   G_NO_QUALIFIERS_IN_GRP_tbl(K):=NULL;
8877   G_PRICING_STATUS_TEXT_tbl(K) :=NULL;
8878   G_QUALIFIER_PRECEDENCE_tbl(K):=NULL;
8879   G_DATATYPE_tbl(K)            :=NULL;
8880   G_PRODUCT_UOM_CODE_TBL(K)    :=NULL;
8881   G_QUALIFIER_TYPE_TBL(K)      :=NULL;
8882   G_EXCLUDER_FLAG_TBL(K)       :=NULL;
8883   G_PRICING_PHASE_ID_TBL_A(K)    :=NULL;
8884   G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8885   G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8886   G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8887   G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8888 
8889   K:= K+1;
8890 
8891  END LOOP;    -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
8892 END IF;
8893 
8894 --Insert record only if there is record
8895 IF K > 1 THEN
8896 INSERT_LINE_ATTRS2
8897    (    G_LINE_INDEX_tbl,
8898         G_LINE_DETAIL_INDEX_tbl  ,
8899         G_ATTRIBUTE_LEVEL_tbl    ,
8900         G_ATTRIBUTE_TYPE_tbl     ,
8901         G_LIST_HEADER_ID_tbl     ,
8902         G_LIST_LINE_ID_tbl       ,
8903         G_CONTEXT_tbl            ,
8904         G_ATTRIBUTE_tbl          ,
8905         G_VALUE_FROM_tbl         ,
8906         G_SETUP_VALUE_FROM_tbl   ,
8907         G_VALUE_TO_tbl           ,
8908         G_SETUP_VALUE_TO_tbl     ,
8909         G_GROUPING_NUMBER_tbl         ,
8910         G_NO_QUALIFIERS_IN_GRP_tbl      ,
8911         G_COMPARISON_OPERATOR_TYPE_tbl  ,
8912         G_VALIDATED_FLAG_tbl            ,
8913         G_APPLIED_FLAG_tbl              ,
8914         G_PRICING_STATUS_CODE_tbl       ,
8915         G_PRICING_STATUS_TEXT_tbl       ,
8916         G_QUALIFIER_PRECEDENCE_tbl      ,
8917         G_DATATYPE_tbl                  ,
8918         G_PRICING_ATTR_FLAG_tbl         ,
8919         G_QUALIFIER_TYPE_tbl            ,
8920         G_PRODUCT_UOM_CODE_TBL          ,
8921         G_EXCLUDER_FLAG_TBL             ,
8922         G_PRICING_PHASE_ID_TBL_A        ,
8923         G_INCOMP_GRP_CODE_TBL_A         ,
8924         G_LINE_DETAIL_TYPE_CODE_TBL_A   ,
8925         G_MODIFIER_LEVEL_CODE_TBL_A     ,
8926         G_PRIMARY_UOM_FLAG_TBL_A        ,
8927         l_status_code                   ,
8928         l_status_text                   );
8929 
8930        IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8931             RAISE E_ROUTINE_ERRORS;
8932        END IF;
8933 
8934 END IF;
8935 
8936 /* begin bulk insert ldets -- 3215497 */
8937 -- first reset global tables
8938 Reset_All_Tbls(l_status_code, l_status_text);
8939 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8940  RAISE E_ROUTINE_ERRORS;
8941 END IF;
8942 
8943 I := p_LINE_DETAIL_tbl.FIRST;
8944 K := 1;
8945 
8946 IF (G_PUBLIC_API_CALL_FLAG = G_YES) THEN
8947   v_pricing_status_code := G_STATUS_UNCHANGED; -- insert passed adjustments with X
8948 ELSE
8949   v_pricing_status_code := G_STATUS_NEW; -- passed adjustments with N if called from qp_preq_grp
8950 END IF;
8951 
8952 WHILE (I IS NOT NULL AND
8953        (l_not_insert_order_line_flag = TRUE and
8954         p_line_detail_tbl(I).LINE_INDEX <> l_summary_line_index or
8955         l_not_insert_order_line_flag = FALSE)
8956       )
8957 LOOP
8958   -- populate relevant tables
8959   G_LINE_DETAIL_INDEX_tbl(K) := p_LINE_DETAIL_tbl(I).LINE_DETAIL_INDEX;
8960   G_LINE_DETAIL_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).LINE_DETAIL_TYPE_CODE;
8961   G_PRICE_BREAK_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).PRICE_BREAK_TYPE_CODE;
8962   G_LINE_INDEX_tbl(K) := p_LINE_DETAIL_tbl(I).LINE_INDEX;
8963   G_LIST_HEADER_ID_tbl(K) := p_LINE_DETAIL_tbl(I).LIST_HEADER_ID;
8964   G_LIST_LINE_ID_tbl(K) := p_LINE_DETAIL_tbl(I).LIST_LINE_ID;
8965   G_LIST_LINE_TYPE_TBL(K) := p_LINE_DETAIL_tbl(I).LIST_LINE_TYPE_CODE;
8966   G_LIST_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).CREATED_FROM_LIST_TYPE_CODE;
8967   G_PRICING_GROUP_SEQUENCE_TBL(K) := p_LINE_DETAIL_tbl(I).PRICING_GROUP_SEQUENCE;
8968   G_PRICING_PHASE_ID_TBL(K) := p_LINE_DETAIL_tbl(I).PRICING_PHASE_ID; --added for usage_pricing
8969   G_OPERAND_CALCULATION_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).OPERAND_CALCULATION_CODE;
8970   G_OPERAND_VALUE_TBL(K) := p_LINE_DETAIL_tbl(I).OPERAND_VALUE;
8971   G_SUBSTITUTION_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).SUBSTITUTION_TYPE_CODE;
8972   G_SUBSTITUTION_VALUE_FROM_TBL(K) := p_LINE_DETAIL_tbl(I).SUBSTITUTION_FROM;
8973   G_SUBSTITUTION_VALUE_TO_TBL(K) := p_LINE_DETAIL_tbl(I).SUBSTITUTION_TO;
8974   G_PRICING_STATUS_CODE_tbl(K) := v_pricing_status_code;
8975   G_APPLIED_FLAG_tbl(K) := p_LINE_DETAIL_tbl(I).APPLIED_FLAG;
8976   G_AUTOMATIC_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).AUTOMATIC_FLAG;
8977   G_OVERRIDE_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).OVERRIDE_FLAG;
8978   G_PRINT_ON_INVOICE_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).PRINT_ON_INVOICE_FLAG;
8979   G_MODIFIER_LEVEL_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).MODIFIER_LEVEL_CODE;
8980   G_LIST_LINE_NO_TBL(K) := p_LINE_DETAIL_tbl(I).LIST_LINE_NO; --shu, fix bug 2226344
8981   G_CHARGE_TYPE_CODE_TBL(K) := nvl(p_LINE_DETAIL_tbl(I).CHARGE_TYPE_CODE,'');
8982   G_CHARGE_SUBTYPE_CODE_TBL(K) := nvl(p_LINE_DETAIL_tbl(I).CHARGE_SUBTYPE_CODE,'');
8983   G_LINE_QUANTITY_TBL(K) := p_LINE_DETAIL_tbl(I).LINE_QUANTITY;
8984   G_UPDATED_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).UPDATED_FLAG;
8985   G_CALCULATION_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).CALCULATION_CODE;
8986   G_CHANGE_REASON_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).CHANGE_REASON_CODE;
8987   G_CHANGE_REASON_TEXT_TBL(K) := p_LINE_DETAIL_tbl(I).CHANGE_REASON_TEXT;
8988   G_PROCESS_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).PROCESS_CODE;
8989   -- remaining tables defaulted to null
8990   G_LIST_PRICE_TBL(K) := null;
8991   G_CREATED_FROM_SQL_TBL(K) := null;
8992   G_ASK_FOR_FLAG_TBL(K) := null;
8993   G_PRICE_FORMULA_ID_TBL(K) := null;
8994   G_PRICING_STATUS_TEXT_tbl(K) := null;
8995   G_PRODUCT_PRECEDENCE_TBL(K) := null;
8996   G_INCOMP_GRP_CODE_TBL(K) := null;
8997   G_PROCESSED_FLAG_TBL(K) := null;
8998   G_PRIMARY_UOM_FLAG_TBL(K) := null;
8999   G_BENEFIT_QTY_TBL(K) := null;
9000   G_BENEFIT_UOM_CODE_TBL(K) := null;
9001   G_SERVICE_DURATION_TBL(K) := null;  -- SERVICE PROJECT
9002   G_SERVICE_PERIOD_TBL(K) := null;    -- SERVICE PROJECT
9003   G_ACCRUAL_FLAG_TBL(K) := null;
9004   G_ACCRUAL_CONVERSION_RATE_TBL(K) := null;
9005   G_ESTIM_ACCRUAL_RATE_TBL(K) := null;
9006   G_RECURRING_FLAG_TBL(K) := null;
9007   G_SELECTED_VOLUME_ATTR_TBL(K) := null;
9008   G_ROUNDING_FACTOR_TBL(K) := null;
9009   G_HEADER_LIMIT_EXISTS_TBL(K) := null;
9010   G_LINE_LIMIT_EXISTS_TBL(K) := null;
9011 
9012   I := p_LINE_DETAIL_tbl.NEXT(I);
9013   K := K+1;
9014 END LOOP;
9015 
9016 -- perform bulk insert (using public API) if any records present
9017 IF (K > 1) THEN
9018   INSERT_LDETS2(
9019     p_LINE_DETAIL_index => G_LINE_DETAIL_INDEX_tbl,
9020     p_LINE_DETAIL_TYPE_CODE => G_LINE_DETAIL_TYPE_CODE_TBL,
9021     p_PRICE_BREAK_TYPE_CODE => G_PRICE_BREAK_TYPE_CODE_TBL,
9022     p_LIST_PRICE => G_LIST_PRICE_TBL,
9023     p_LINE_INDEX => G_LINE_INDEX_tbl,
9024     p_CREATED_FROM_LIST_HEADER_ID => G_LIST_HEADER_ID_tbl,
9025     p_CREATED_FROM_LIST_LINE_ID => G_LIST_LINE_ID_tbl,
9026     p_CREATED_FROM_LIST_LINE_TYPE => G_LIST_LINE_TYPE_TBL,
9027     p_CREATED_FROM_LIST_TYPE_CODE => G_LIST_TYPE_CODE_TBL,
9028     p_CREATED_FROM_SQL => G_CREATED_FROM_SQL_TBL,
9029     p_PRICING_GROUP_SEQUENCE => G_PRICING_GROUP_SEQUENCE_TBL,
9030     p_PRICING_PHASE_ID => G_PRICING_PHASE_ID_TBL,
9031     p_OPERAND_CALCULATION_CODE => G_OPERAND_CALCULATION_CODE_TBL,
9032     p_OPERAND_VALUE => G_OPERAND_VALUE_TBL,
9033     p_SUBSTITUTION_TYPE_CODE => G_SUBSTITUTION_TYPE_CODE_TBL,
9034     p_SUBSTITUTION_VALUE_FROM => G_SUBSTITUTION_VALUE_FROM_TBL,
9035     p_SUBSTITUTION_VALUE_TO => G_SUBSTITUTION_VALUE_TO_TBL,
9036     p_ASK_FOR_FLAG => G_ASK_FOR_FLAG_TBL,
9037     p_PRICE_FORMULA_ID => G_PRICE_FORMULA_ID_TBL,
9038     p_PRICING_STATUS_CODE => G_PRICING_STATUS_CODE_tbl,
9039     p_PRICING_STATUS_TEXT => G_PRICING_STATUS_TEXT_tbl,
9040     p_PRODUCT_PRECEDENCE => G_PRODUCT_PRECEDENCE_TBL,
9041     p_INCOMPATABLILITY_GRP_CODE => G_INCOMP_GRP_CODE_TBL,
9042     p_PROCESSED_FLAG => G_PROCESSED_FLAG_TBL,
9043     p_APPLIED_FLAG => G_APPLIED_FLAG_tbl,
9044     p_AUTOMATIC_FLAG => G_AUTOMATIC_FLAG_TBL,
9045     p_OVERRIDE_FLAG => G_OVERRIDE_FLAG_TBL,
9046     p_PRIMARY_UOM_FLAG => G_PRIMARY_UOM_FLAG_TBL,
9047     p_PRINT_ON_INVOICE_FLAG => G_PRINT_ON_INVOICE_FLAG_TBL,
9048     p_MODIFIER_LEVEL_CODE => G_MODIFIER_LEVEL_CODE_TBL,
9049     p_BENEFIT_QTY => G_BENEFIT_QTY_TBL,
9050     p_BENEFIT_UOM_CODE => G_BENEFIT_UOM_CODE_TBL,
9051     p_SERVICE_DURATION =>  G_SERVICE_DURATION_TBL,  -- SERVICE PROJECT
9052     p_SERVICE_PERIOD =>  G_SERVICE_PERIOD_TBL,    -- SERVICE PROJECT
9053     p_LIST_LINE_NO => G_LIST_LINE_NO_TBL,
9054     p_ACCRUAL_FLAG => G_ACCRUAL_FLAG_TBL,
9055     p_ACCRUAL_CONVERSION_RATE => G_ACCRUAL_CONVERSION_RATE_TBL,
9056     p_ESTIM_ACCRUAL_RATE => G_ESTIM_ACCRUAL_RATE_TBL,
9057     p_RECURRING_FLAG => G_RECURRING_FLAG_TBL,
9058     p_SELECTED_VOLUME_ATTR => G_SELECTED_VOLUME_ATTR_TBL,
9059     p_ROUNDING_FACTOR => G_ROUNDING_FACTOR_TBL,
9060     p_HEADER_LIMIT_EXISTS => G_HEADER_LIMIT_EXISTS_TBL,
9061     p_LINE_LIMIT_EXISTS => G_LINE_LIMIT_EXISTS_TBL,
9062     p_CHARGE_TYPE_CODE => G_CHARGE_TYPE_CODE_TBL,
9063     p_CHARGE_SUBTYPE_CODE => G_CHARGE_SUBTYPE_CODE_TBL,
9064     p_LINE_QUANTITY => G_LINE_QUANTITY_TBL,
9065     p_UPDATED_FLAG => G_UPDATED_FLAG_TBL,
9066     p_CALCULATION_CODE => G_CALCULATION_CODE_TBL,
9067     p_CHANGE_REASON_CODE =>G_CHANGE_REASON_CODE_TBL,
9068     p_CHANGE_REASON_TEXT => G_CHANGE_REASON_TEXT_TBL,
9069     p_PROCESS_CODE => G_PROCESS_CODE_TBL,
9070     x_status_code => l_status_code,
9071     x_status_text => l_status_text
9072   );
9073   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
9074     RAISE E_ROUTINE_ERRORS;
9075   END IF;
9076 END IF;
9077 /* end bulk insert ldets */
9078 
9079 
9080 /* begin bulk insert ldet qualifiers -- 3215497 */
9081 -- first reset global tables
9082 Reset_All_Tbls(l_status_code, l_status_text);
9083 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
9084  RAISE E_ROUTINE_ERRORS;
9085 END IF;
9086 
9087 I := p_LINE_DETAIL_qual_tbl.FIRST;
9088 K := 1;
9089 WHILE I IS NOT NULL LOOP
9090   -- populate relevant tables
9091   G_LINE_DETAIL_INDEX_tbl(K) := p_LINE_DETAIL_qual_tbl(I).LINE_DETAIL_INDEX;
9092   G_ATTRIBUTE_LEVEL_tbl(K) := G_DETAIL_LEVEL;
9093   G_ATTRIBUTE_TYPE_tbl(K) := G_QUALIFIER_TYPE;
9094   G_CONTEXT_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_CONTEXT;
9095   G_ATTRIBUTE_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_ATTRIBUTE;
9096   G_VALUE_FROM_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM;
9097   G_VALUE_TO_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO;
9098   G_COMPARISON_OPERATOR_TYPE_tbl(K) := p_LINE_DETAIL_qual_tbl(I).COMPARISON_OPERATOR_CODE;
9099   G_VALIDATED_FLAG_tbl(K) := p_LINE_DETAIL_qual_tbl(I).VALIDATED_FLAG;
9100   -- remaining tables defaulted to null
9101   G_LINE_INDEX_tbl(K) := null;
9102   G_LIST_HEADER_ID_tbl(K) := null;
9103   G_LIST_LINE_ID_tbl(K) := null;
9104   G_SETUP_VALUE_FROM_tbl(K) := null;
9105   G_SETUP_VALUE_TO_tbl(K) := null;
9106   G_GROUPING_NUMBER_tbl(K) := null;
9107   G_NO_QUALIFIERS_IN_GRP_tbl(K) := null;
9108   G_APPLIED_FLAG_tbl(K) := null;
9109   G_PRICING_STATUS_CODE_tbl(K) := null;
9110   G_PRICING_STATUS_TEXT_tbl(K) := null;
9111   G_QUALIFIER_PRECEDENCE_tbl(K) := null;
9112   G_DATATYPE_tbl(K) := null;
9113   G_PRICING_ATTR_FLAG_tbl(K) := null;
9114   G_QUALIFIER_TYPE_tbl(K) := null;
9115   G_PRODUCT_UOM_CODE_tbl(K) := null;
9116   G_EXCLUDER_FLAG_tbl(K) := null;
9117   G_PRICING_PHASE_ID_tbl(K) := null;
9118   G_INCOMP_GRP_CODE_tbl(K) := null;
9119   G_LINE_DETAIL_TYPE_CODE_tbl(K) := null;
9120   G_MODIFIER_LEVEL_CODE_tbl(K) := null;
9121   G_PRIMARY_UOM_FLAG_tbl(K) := null;
9122 
9123   I := p_LINE_DETAIL_qual_tbl.NEXT(I);
9124   K := K+1;
9125 END LOOP;
9126 
9127 -- the next piece of code, which handles ldet line attributes, also calls
9128 -- INSERT_LINE_ATTRS2, so don't reset the global tables, and wait until the
9129 -- tables are completely populated before making one call to the insert API
9130 /* end bulk insert ldet qualifiers */
9131 
9132 /* begin bulk insert ldet line attributes -- 3215497 */
9133 -- continue using global tables where last left off
9134 I := p_LINE_DETAIL_attr_tbl.FIRST;
9135 WHILE I IS NOT NULL LOOP
9136   -- populate relevant tables
9137   G_LINE_INDEX_tbl(K) := p_LINE_DETAIL_attr_tbl(I).LINE_INDEX;
9138   G_LINE_DETAIL_INDEX_tbl(K) := p_LINE_DETAIL_attr_tbl(I).LINE_DETAIL_INDEX;
9139   G_PRICING_STATUS_CODE_tbl(K) := G_STATUS_NEW;
9140   G_ATTRIBUTE_LEVEL_tbl(K) := G_LINE_LEVEL;
9141   G_CONTEXT_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_CONTEXT;
9142   G_ATTRIBUTE_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_ATTRIBUTE;
9143   G_VALUE_FROM_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_ATTR_VALUE_FROM;
9144   G_VALIDATED_FLAG_tbl(K) := p_LINE_DETAIL_attr_tbl(I).VALIDATED_FLAG;
9145   IF (p_LINE_DETAIL_attr_tbl(I).PRICING_CONTEXT = G_ITEM_CONTEXT) THEN
9146     G_ATTRIBUTE_TYPE_tbl(K) := G_PRODUCT_TYPE;
9147     G_VALUE_TO_tbl(K) := null;
9148   ELSIF (p_LINE_DETAIL_attr_tbl(I).PRICING_CONTEXT IS NOT NULL) THEN
9149     G_ATTRIBUTE_TYPE_tbl(K) := G_PRICING_TYPE;
9150     G_VALUE_TO_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_ATTR_VALUE_TO;
9151   ELSE
9152     G_ATTRIBUTE_TYPE_tbl(K) := null;
9153     G_VALUE_TO_tbl(K) := null;
9154   END IF;
9155   -- remaining tables defaulted to null
9156   G_LIST_HEADER_ID_tbl(K) := null;
9157   G_LIST_LINE_ID_tbl(K) := null;
9158   G_SETUP_VALUE_FROM_tbl(K) := null;
9159   G_SETUP_VALUE_TO_tbl(K) := null;
9160   G_GROUPING_NUMBER_tbl(K) := null;
9161   G_NO_QUALIFIERS_IN_GRP_tbl(K) := null;
9162   G_COMPARISON_OPERATOR_TYPE_tbl(K) := null;
9163   G_APPLIED_FLAG_tbl(K) := null;
9164   G_PRICING_STATUS_TEXT_tbl(K) := null;
9165   G_QUALIFIER_PRECEDENCE_tbl(K) := null;
9166   G_DATATYPE_tbl(K) := null;
9167   G_PRICING_ATTR_FLAG_tbl(K) := null;
9168   G_QUALIFIER_TYPE_tbl(K) := null;
9169   G_PRODUCT_UOM_CODE_tbl(K) := null;
9170   G_EXCLUDER_FLAG_tbl(K) := null;
9171   G_PRICING_PHASE_ID_tbl(K) := null;
9172   G_INCOMP_GRP_CODE_tbl(K) := null;
9173   G_LINE_DETAIL_TYPE_CODE_tbl(K) := null;
9174   G_MODIFIER_LEVEL_CODE_tbl(K) := null;
9175   G_PRIMARY_UOM_FLAG_tbl(K) := null;
9176 
9177   I := p_LINE_DETAIL_attr_tbl.NEXT(I);
9178   K := K+1;
9179 END LOOP;
9180 
9181 -- perform bulk insert (using public API) if any records present
9182 IF (K > 1) THEN
9183   INSERT_LINE_ATTRS2(
9184     p_LINE_INDEX_tbl => G_LINE_INDEX_tbl,
9185     p_LINE_DETAIL_INDEX_tbl => G_LINE_DETAIL_INDEX_tbl,
9186     p_ATTRIBUTE_LEVEL_tbl => G_ATTRIBUTE_LEVEL_tbl,
9187     p_ATTRIBUTE_TYPE_tbl => G_ATTRIBUTE_TYPE_tbl,
9188     p_LIST_HEADER_ID_tbl => G_LIST_HEADER_ID_tbl,
9189     p_LIST_LINE_ID_tbl => G_LIST_LINE_ID_tbl,
9190     p_CONTEXT_tbl => G_CONTEXT_tbl,
9191     p_ATTRIBUTE_tbl => G_ATTRIBUTE_tbl,
9192     p_VALUE_FROM_tbl => G_VALUE_FROM_tbl,
9193     p_SETUP_VALUE_FROM_tbl => G_SETUP_VALUE_FROM_tbl,
9194     p_VALUE_TO_tbl => G_VALUE_TO_tbl,
9195     p_SETUP_VALUE_TO_tbl => G_SETUP_VALUE_TO_tbl,
9196     p_GROUPING_NUMBER_tbl => G_GROUPING_NUMBER_tbl,
9197     p_NO_QUALIFIERS_IN_GRP_tbl => G_NO_QUALIFIERS_IN_GRP_tbl,
9198     p_COMPARISON_OPERATOR_TYPE_tbl => G_COMPARISON_OPERATOR_TYPE_tbl,
9199     p_VALIDATED_FLAG_tbl => G_VALIDATED_FLAG_tbl,
9200     p_APPLIED_FLAG_tbl => G_APPLIED_FLAG_tbl,
9201     p_PRICING_STATUS_CODE_tbl => G_PRICING_STATUS_CODE_tbl,
9202     p_PRICING_STATUS_TEXT_tbl => G_PRICING_STATUS_TEXT_tbl,
9203     p_QUALIFIER_PRECEDENCE_tbl => G_QUALIFIER_PRECEDENCE_tbl,
9204     p_DATATYPE_tbl => G_DATATYPE_tbl,
9205     p_PRICING_ATTR_FLAG_tbl => G_PRICING_ATTR_FLAG_tbl,
9206     p_QUALIFIER_TYPE_tbl => G_QUALIFIER_TYPE_tbl,
9207     p_PRODUCT_UOM_CODE_TBL => G_PRODUCT_UOM_CODE_tbl,
9208     p_EXCLUDER_FLAG_TBL => G_EXCLUDER_FLAG_tbl,
9209     p_PRICING_PHASE_ID_TBL => G_PRICING_PHASE_ID_tbl,
9210     p_INCOMPATABILITY_GRP_CODE_TBL => G_INCOMP_GRP_CODE_tbl,
9211     p_LINE_DETAIL_TYPE_CODE_TBL => G_LINE_DETAIL_TYPE_CODE_tbl,
9212     p_MODIFIER_LEVEL_CODE_TBL => G_MODIFIER_LEVEL_CODE_tbl,
9213     p_PRIMARY_UOM_FLAG_TBL => G_PRIMARY_UOM_FLAG_tbl,
9214     x_status_code => l_status_code,
9215     x_status_text => l_status_text
9216   );
9217   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
9218     RAISE E_ROUTINE_ERRORS;
9219   END IF;
9220 END IF;
9221 /* end bulk insert ldet line attributes */
9222 
9223 
9224 /* begin bulk insert rltd lines -- 3215497 */
9225 -- first reset global tables
9226 Reset_All_Tbls(l_status_code, l_status_text);
9227 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
9228  RAISE E_ROUTINE_ERRORS;
9229 END IF;
9230 
9231 I := p_rltd_lines_tbl.FIRST;
9232 K := 1;
9233 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9234   engine_debug('RLTD first in populate_temp_table: '||I);
9235 END IF;
9236 WHILE I IS NOT NULL LOOP
9237   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9238     engine_debug('Collecting in rltd table');
9239   END IF;
9240   -- populate relevant tables
9241   G_LINE_INDEX_tbl(K) := p_rltd_lines_tbl(I).LINE_INDEX;
9242   G_LINE_DETAIL_INDEX_tbl(K) := p_rltd_lines_tbl(I).LINE_DETAIL_INDEX;
9243   G_RELATIONSHIP_TYPE_TBL(K) := p_rltd_lines_tbl(I).RELATIONSHIP_TYPE_CODE;
9244   G_RLTD_LINE_INDEX_TBL(K) := p_rltd_lines_tbl(I).RELATED_LINE_INDEX;
9245   G_RLTD_LINE_DETAIL_INDEX_TBL(K) := p_rltd_lines_tbl(I).RELATED_LINE_DETAIL_INDEX;
9246 
9247   I := p_rltd_lines_tbl.NEXT(I);
9248   K := K+1;
9249 END LOOP;
9250 
9251 -- perform bulk insert (using public API) if any records present
9252 IF (K > 1) THEN
9253   INSERT_RLTD_LINES2(
9254     p_LINE_INDEX => G_LINE_INDEX_tbl,
9255     p_LINE_DETAIL_INDEX => G_LINE_DETAIL_INDEX_tbl,
9256     p_RELATIONSHIP_TYPE_CODE => G_RELATIONSHIP_TYPE_TBL,
9257     p_RELATED_LINE_INDEX => G_RLTD_LINE_INDEX_TBL,
9258     p_RELATED_LINE_DETAIL_INDEX => G_RLTD_LINE_DETAIL_INDEX_TBL,
9259     x_status_code => l_status_code,
9260     x_status_text => l_status_text
9261   );
9262   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
9263     RAISE E_ROUTINE_ERRORS;
9264   END IF;
9265   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9266     engine_debug('after bulk insert rltd lines');
9267   END IF;
9268 END IF;
9269 /* end bulk insert rltd lines */
9270 
9271 
9272 
9273 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9274   OPEN l_get_count_cur;
9275   FETCH l_get_count_cur INTO l_count;
9276   CLOSE l_get_count_cur;
9277   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9278   engine_debug ('Culprit Attribute Count :' || l_count);
9279   END IF;
9280 END IF;
9281 
9282 --x_status_code := FND_API.G_RET_STS_SUCCESS;
9283 
9284 
9285 --Reset_all_tbls;
9286 Reset_All_Tbls(l_status_code ,l_status_text );
9287 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
9288  RAISE E_ROUTINE_ERRORS;
9289 END IF;
9290 
9291 EXCEPTION
9292 WHEN E_ROUTINE_ERRORS THEN
9293   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9294   engine_debug(l_routine||': '||l_status_text);
9295   END IF;
9296   x_status_text := l_status_text;
9297   x_status_code := FND_API.G_RET_STS_ERROR;
9298 WHEN E_DATE_IS_NULL THEN
9299   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9300   engine_debug('Date or date type is null');
9301   engine_debug('Date or date type is null');
9302   END IF;
9303   x_status_code :=  FND_API.G_RET_STS_ERROR;
9304   x_status_text := 'Error in QP_PREQ_GRP.populate_temp_tables: One of the three dates is null';
9305 WHEN E_CURRENCY_CODE_IS_NULL THEN
9306   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9307   engine_debug('Currency code can not be null');
9308   engine_debug('Currency code can not be null');
9309   END IF;
9310   x_status_code :=  FND_API.G_RET_STS_ERROR;
9311   x_status_text := 'Error in QP_PREQ_GRP.populate_temp_tables: Currency can not be null';
9312 WHEN OTHERS THEN
9313   v_error_code :=SQLCODE;
9314   v_error_message:=SQLERRM;
9315   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9316   engine_debug('Error in QP_PREQ_GRP.populate_temp_tables: '||SQLERRM);
9317   END IF;
9318   x_status_code := FND_API.G_RET_STS_ERROR;
9319   x_status_text :='Error in QP_PREQ_GRP.populate_temp_tables:'||SQLERRM;
9320 
9321 END Populate_Temp_Tables;
9322 
9323 /*+------------------------------------------------------------
9324   |PROCEDURE SET_EXPIRATION_DATES
9325   +------------------------------------------------------------
9326 */
9327 
9328 PROCEDURE SET_EXPIRATION_DATES (p_number_expiration_period   IN  NUMBER,
9329                                 p_expiration_period_uom_code IN  VARCHAR2,
9330                                 p_line_index                 IN  NUMBER,
9331                                 x_expiration_period_end_date OUT NOCOPY DATE,
9332                                 x_status_code                OUT NOCOPY VARCHAR2,
9333                                 x_status_text                OUT NOCOPY VARCHAR2) AS
9334 E_Coupon_Error EXCEPTION;
9335 l_expiration_period_end_date Date;
9336 l_dummy                      Date;
9337 l_status_code                VARCHAR2(240);
9338 l_status_text                VARCHAR2(240);
9339 l_routine VARCHAR2(240):='QP_PRQ_GRP.SET_EXPIRATION_DATES';
9340 l_pricing_effective_date Date;
9341 l_debug varchar2(3);
9342 
9343 /*
9344 INDX,QP_PREQ_GRP.set_expiration_dates.l_get_pricing_effective_date,qp_npreq_lines_tmp_N1,LINE_INDEX,1
9345 */
9346 CURSOR l_get_pricing_effective_date (p_line_index IN PLS_INTEGER) IS
9347 SELECT pricing_effective_date
9348 FROM   qp_npreq_lines_tmp
9349 WHERE  line_index = p_line_index;
9350 
9351 --added by yangli for Java Engine interface tables
9352 /*
9353 INDX,QP_PREQ_GRP.set_expiration_dates.l_int_pricing_effective_date,qp_int_lines_N1,LINE_INDEX,1
9354 */
9355 CURSOR l_int_pricing_effective_date (p_line_index IN PLS_INTEGER) IS
9356 SELECT pricing_effective_date
9357 FROM   qp_int_lines
9358 WHERE  line_index = p_line_index;
9359 
9360 BEGIN
9361   x_status_code := FND_API.G_RET_STS_SUCCESS;
9362 
9363   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
9364   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9365   IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
9366     IF l_debug = FND_API.G_TRUE THEN
9367      QP_PREQ_GRP.ENGINE_DEBUG('Populate_Price_Adj_ID: Java Engine not Installed ----------');
9368     END IF;
9369   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9370     OPEN  l_get_pricing_effective_date (p_line_index);
9371     FETCH l_get_pricing_effective_date into l_pricing_effective_date;
9372     CLOSE l_get_pricing_effective_date;
9373   ELSE
9374     IF l_debug = FND_API.G_TRUE THEN
9375      QP_PREQ_GRP.ENGINE_DEBUG('Set_Expiration_Dates: Java Engine is Installed ----------');
9376     END IF;
9377     OPEN  l_int_pricing_effective_date (p_line_index);
9378     FETCH l_int_pricing_effective_date into l_pricing_effective_date;
9379     CLOSE l_int_pricing_effective_date;
9380   END IF;
9381 
9382   QP_COUPON_PVT.Set_Expiration_Dates
9383           (l_dummy,
9384            l_expiration_period_end_date,
9385            p_number_expiration_period,
9386            p_expiration_period_uom_code,
9387            l_pricing_effective_date,
9388            l_status_code,
9389            l_status_text);
9390 
9391 IF (l_status_code <> FND_API.G_RET_STS_SUCCESS) Then
9392   Raise E_Coupon_Error;
9393 END IF;
9394 
9395    x_expiration_period_end_date := l_expiration_period_end_date;
9396 
9397 EXCEPTION
9398 
9399 WHEN  E_Coupon_Error THEN
9400   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9401   engine_debug('Error returned by QP_COUPON_PVT.Set_Expiration_Dates');
9402   END IF;
9403   x_status_code := FND_API.G_RET_STS_ERROR;
9404   x_status_text :=l_routine||':'||l_status_text;
9405 WHEN OTHERS THEN
9406   x_status_code := FND_API.G_RET_STS_ERROR;
9407   x_status_code := l_routine||':'||SQLERRM;
9408   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9409   engine_debug(l_routine||':'||SQLERRM);
9410   END IF;
9411 END;
9412 
9413 
9414 /*+-----------------------------------------------------------
9415   |PROCEDURE Populate_OutPut
9416   +-----------------------------------------------------------
9417 */
9418 PROCEDURE Populate_Output
9419 (x_line_tbl             OUT NOCOPY LINE_TBL_TYPE,
9420  x_line_qual_tbl        OUT NOCOPY QUAL_TBL_TYPE,
9421  x_line_attr_tbl        OUT NOCOPY LINE_ATTR_TBL_TYPE,
9422  x_line_detail_tbl      OUT NOCOPY LINE_DETAIL_TBL_TYPE,
9423  x_line_detail_qual_tbl OUT NOCOPY LINE_DETAIL_QUAL_TBL_TYPE,
9424  x_line_detail_attr_tbl OUT NOCOPY LINE_DETAIL_ATTR_TBL_TYPE,
9425  x_related_lines_tbl    OUT NOCOPY RELATED_LINES_TBL_TYPE)
9426 AS
9427 /*
9428 INDX,QP_PREQ_GRP.populate_output.l_lines_cur,- No Index Used -,NA,NA
9429 */
9430   CURSOR l_lines_cur IS
9431     SELECT LINE_INDEX,
9432            LINE_ID,
9433            PRICE_LIST_HEADER_ID, -- shu, print out this
9434            LINE_TYPE_CODE,
9435            LINE_QUANTITY,
9436            LINE_UOM_CODE,
9437            LINE_UNIT_PRICE, -- shu
9438            ROUNDING_FACTOR, -- shu
9439            PRICED_QUANTITY,
9440            UOM_QUANTITY,
9441            PRICED_UOM_CODE,
9442            CURRENCY_CODE,
9443            UNIT_PRICE,
9444            PERCENT_PRICE,
9445            PARENT_PRICE,
9446            PARENT_QUANTITY,
9447            PARENT_UOM_CODE,
9448            PRICE_FLAG,
9449            ADJUSTED_UNIT_PRICE,
9450            UPDATED_ADJUSTED_UNIT_PRICE,
9451            PROCESSING_ORDER,
9452            PROCESSED_CODE,
9453            PRICING_STATUS_CODE,
9454            PRICING_STATUS_TEXT,
9455            HOLD_CODE,
9456            HOLD_TEXT,
9457            PRICE_REQUEST_CODE,
9458            PRICING_EFFECTIVE_DATE,
9459            EXTENDED_PRICE 		/* block pricing */
9460            --EXTENDED_SELLING_PRICE_UR,    --[prarasto:Post Round]New fields for unrounded values, [julin/postround] redesign
9461            --ORDER_UOM_SELLING_PRICE_UR,   --[prarasto:Post Round]
9462            --ADJUSTED_UNIT_PRICE_UR        --[prarasto:Post Round]
9463     FROM   qp_npreq_lines_tmp;
9464 
9465 /*
9466 INDX,QP_PREQ_GRP.populate_output.l_qual_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,1
9467 
9468 INDX,QP_PREQ_GRP.populate_output.l_qual_cur,qp_npreq_line_attrs_tmp_N3,LINE_DETAIL_INDEX,1
9469 INDX,QP_PREQ_GRP.populate_output.l_qual_cur,qp_npreq_line_attrs_tmp_N3,ATTRIBUTE_TYPE,2
9470 */
9471   CURSOR l_qual_cur (L_ATTRIBUTE_LEVEL VARCHAR2)IS
9472     SELECT /*+ dynamic_sampling(1) */ QPLAT.LINE_INDEX,
9473            QPLAT.LINE_DETAIL_INDEX,
9474            QPLAT.CONTEXT,
9475            QPLAT.ATTRIBUTE,
9476            QPLAT.SETUP_VALUE_FROM,
9477            QPLAT.SETUP_VALUE_TO,
9478            QPLAT.COMPARISON_OPERATOR_TYPE_CODE,
9479            QPLAT.VALIDATED_FLAG,
9480            QPLAT.PRICING_STATUS_CODE,
9481            QPLAT.PRICING_STATUS_TEXT
9482      FROM  qp_npreq_ldets_tmp QPLD ,
9483            qp_npreq_line_attrs_tmp QPLAT
9484      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT.LINE_DETAIL_INDEX
9485      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9486      AND   QPLAT.ATTRIBUTE_TYPE = 'QUALIFIER';
9487            --AND QPLAT.PRICING_STATUS_CODE = G_STATUS_NEW;
9488 
9489 /*
9490 INDX,QP_PREQ_GRP.populate_output.l_pricing_attr_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,1
9491 
9492 INDX,QP_PREQ_GRP.populate_output.l_pricing_attr_cur,qp_npreq_line_attrs_tmp_N3,LINE_DETAIL_INDEX,1
9493 INDX,QP_PREQ_GRP.populate_output.l_pricing_attr_cur,qp_npreq_line_attrs_tmp_N3,ATTRIBUTE_TYPE,2
9494 */
9495   CURSOR l_pricing_attr_cur IS
9496     SELECT /*+ dynamic_sampling(1) index(QPLAT_PRICING QP_PREQ_LINE_ATTRS_TMP_N3) */ --bug8359591
9497            QPLAT_PRICING.CONTEXT        PRICING_CONTEXT,
9498            QPLAT_PRICING.ATTRIBUTE      PRICING_ATTRIBUTE,
9499            nvl(QPLAT_PRICING.SETUP_VALUE_FROM,QPLAT_PRICING.VALUE_FROM)     PRICING_ATTR_VALUE_FROM,
9500            QPLAT_PRICING.SETUP_VALUE_TO       PRICING_ATTR_VALUE_TO,
9501            QPLAT_PRICING.COMPARISON_OPERATOR_TYPE_CODE,
9502            QPLAT_PRICING.LINE_DETAIL_INDEX,
9503            QPLAT_PRICING.LINE_INDEX,
9504            QPLAT_PRICING.VALIDATED_FLAG
9505      FROM  qp_npreq_ldets_tmp QPLD ,
9506            qp_npreq_line_attrs_tmp QPLAT_PRICING
9507      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT_PRICING.LINE_DETAIL_INDEX
9508      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9509      AND   QPLAT_PRICING.ATTRIBUTE_TYPE IN ('PRICING','PRODUCT');
9510            --AND QPLAT_PRICING.PRICING_STATUS_CODE = G_STATUS_NEW;
9511 
9512 /*
9513 INDX,QP_PREQ_GRP.populate_output.l_ldets_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
9514 
9515 INDX,QP_PREQ_GRP.populate_output.l_ldets_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,1
9516 
9517 INDX,QP_PREQ_GRP.populate_output.l_ldets_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
9518 */
9519   CURSOR l_ldets_cur IS
9520 
9521     SELECT /*+ ORDERED USE_NL(A B C) l_ldets_cur */
9522 
9523            a.LINE_DETAIL_INDEX,
9524            a.LINE_DETAIL_TYPE_CODE,
9525            a.LINE_INDEX,
9526            a.CREATED_FROM_LIST_HEADER_ID LIST_HEADER_ID,
9527            a.CREATED_FROM_LIST_LINE_ID   LIST_LINE_ID,
9528            a.CREATED_FROM_LIST_LINE_TYPE LIST_LINE_TYPE_CODE,
9529            a.PRICE_BREAK_TYPE_CODE,
9530            a.LINE_QUANTITY,
9531            a.ADJUSTMENT_AMOUNT,
9532            a.AUTOMATIC_FLAG,
9533            a.PRICING_PHASE_ID,
9534            a.OPERAND_CALCULATION_CODE,
9535            a.OPERAND_VALUE,
9536            a.PRICING_GROUP_SEQUENCE,
9537            a.CREATED_FROM_LIST_TYPE_CODE,
9538            a.APPLIED_FLAG,
9539            a.PRICING_STATUS_CODE,
9540            a.PRICING_STATUS_TEXT,
9541            a.LIMIT_CODE,
9542            a.LIMIT_TEXT,
9543            a.LIST_LINE_NO,
9544            a.GROUP_QUANTITY,
9545            a.GROUP_AMOUNT, -- 2388011_new
9546            a.UPDATED_FLAG,
9547 	   a.PROCESS_CODE,
9548 	   a.CALCULATION_CODE,
9549 	   a.CHANGE_REASON_CODE,
9550 	   a.CHANGE_REASON_TEXT,
9551            b.SUBSTITUTION_VALUE SUBSTITUTION_VALUE_TO,
9552            b.SUBSTITUTION_ATTRIBUTE,
9553            b.ACCRUAL_FLAG,
9554            b.modifier_level_code,
9555            b.ESTIM_GL_VALUE,
9556            b.ACCRUAL_CONVERSION_RATE,
9557            --Pass throuh components
9558            b.OVERRIDE_FLAG,
9559            b.PRINT_ON_INVOICE_FLAG,
9560            b.INVENTORY_ITEM_ID,
9561            b.ORGANIZATION_ID,
9562            b.RELATED_ITEM_ID,
9563            b.RELATIONSHIP_TYPE_ID,
9564            b.ESTIM_ACCRUAL_RATE,
9565            b.EXPIRATION_DATE,
9566            b.BENEFIT_PRICE_LIST_LINE_ID,
9567            b.RECURRING_FLAG,
9568            b.RECURRING_VALUE,  --for block pricing bug 3657116
9569            b.BENEFIT_LIMIT,
9570            b.CHARGE_TYPE_CODE,
9571            b.CHARGE_SUBTYPE_CODE,
9572            b.BENEFIT_QTY,
9573            b.BENEFIT_UOM_CODE,
9574 	   b.SERVICE_DURATION,  -- service project
9575 	   b.SERVICE_PERIOD,  -- service project
9576            b.PRORATION_TYPE_CODE,
9577            b.INCLUDE_ON_RETURNS_FLAG,
9578            b.REBATE_TRANSACTION_TYPE_CODE,
9579            b.NUMBER_EXPIRATION_PERIODS,
9580            b.EXPIRATION_PERIOD_UOM,
9581            b.COMMENTS,
9582            b.break_uom_code, /* proration */
9583            b.break_uom_context, /* proration */
9584            b.break_uom_attribute /* proration */
9585     FROM  qp_npreq_ldets_tmp a,
9586           QP_LIST_LINES     b
9587     WHERE a.CREATED_FROM_LIST_LINE_ID = b.LIST_LINE_ID
9588     AND   a.PRICING_STATUS_CODE = G_STATUS_NEW;
9589 
9590 /*
9591 INDX,QP_PREQ_GRP.populate_output.l_rltd_lines_cur,- No Index Used -,NA,NA
9592 */
9593   CURSOR l_rltd_lines_cur IS
9594     SELECT  LINE_INDEX,
9595             LINE_DETAIL_INDEX,
9596             RELATIONSHIP_TYPE_CODE,
9597             RELATED_LINE_INDEX,
9598             RELATED_LINE_DETAIL_INDEX,
9599             PRICING_STATUS_CODE,
9600             PRICING_STATUS_TEXT
9601     FROM qp_npreq_rltd_lines_tmp
9602     WHERE PRICING_STATUS_CODE = G_STATUS_NEW
9603     ORDER BY SETUP_VALUE_FROM;
9604 
9605 --for Java Engine interface tables
9606 /*
9607 INDX,QP_PREQ_GRP.populate_output.l_int_lines_cur,- No Index Used -,NA,NA
9608 */
9609   CURSOR l_int_lines_cur IS
9610     SELECT LINE_INDEX,
9611            LINE_ID,
9612            PRICE_LIST_HEADER_ID, -- shu, print out this
9613            LINE_TYPE_CODE,
9614            LINE_QUANTITY,
9615            LINE_UOM_CODE,
9616            LINE_UNIT_PRICE, -- shu
9617            ROUNDING_FACTOR, -- shu
9618            PRICED_QUANTITY,
9619            UOM_QUANTITY,
9620            PRICED_UOM_CODE,
9621            CURRENCY_CODE,
9622            UNIT_PRICE,
9623            PERCENT_PRICE,
9624            PARENT_PRICE,
9625            PARENT_QUANTITY,
9626            PARENT_UOM_CODE,
9627            PRICE_FLAG,
9628            ADJUSTED_UNIT_PRICE,
9629            UPDATED_ADJUSTED_UNIT_PRICE,
9630            PROCESSING_ORDER,
9631            PROCESSED_CODE,
9632            PRICING_STATUS_CODE,
9633            PRICING_STATUS_TEXT,
9634            HOLD_CODE,
9635            HOLD_TEXT,
9636            PRICE_REQUEST_CODE,
9637            PRICING_EFFECTIVE_DATE,
9638            EXTENDED_PRICE 		/* block pricing */
9639     FROM   qp_int_lines;
9640 
9641 /*
9642 INDX,QP_PREQ_GRP.populate_output.l_int_qual_cur,qp_int_ldets_N4,PRICING_STATUS_CODE,1
9643 
9644 INDX,QP_PREQ_GRP.populate_output.l_int_qual_cur,qp_int_line_attrs_N3,LINE_DETAIL_INDEX,1
9645 INDX,QP_PREQ_GRP.populate_output.l_int_qual_cur,qp_int_line_attrs_N3,ATTRIBUTE_TYPE,2
9646 */
9647   CURSOR l_int_qual_cur (L_ATTRIBUTE_LEVEL VARCHAR2)IS
9648     SELECT /*+ dynamic_sampling(1) */ QPLAT.LINE_INDEX,
9649            QPLAT.LINE_DETAIL_INDEX,
9650            QPLAT.CONTEXT,
9651            QPLAT.ATTRIBUTE,
9652            QPLAT.SETUP_VALUE_FROM,
9653            QPLAT.SETUP_VALUE_TO,
9654            QPLAT.COMPARISON_OPERATOR_TYPE_CODE,
9655            QPLAT.VALIDATED_FLAG,
9656            QPLAT.PRICING_STATUS_CODE,
9657            QPLAT.PRICING_STATUS_TEXT
9658      FROM  qp_int_ldets QPLD ,
9659            qp_int_line_attrs QPLAT
9660      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT.LINE_DETAIL_INDEX
9661      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9662      AND   QPLAT.ATTRIBUTE_TYPE = 'QUALIFIER';
9663            --AND QPLAT.PRICING_STATUS_CODE = G_STATUS_NEW;
9664 
9665 /*
9666 INDX,QP_PREQ_GRP.populate_output.l_int_pricing_attr_cur,qp_int_ldets_N4,PRICING_STATUS_CODE,1
9667 
9668 INDX,QP_PREQ_GRP.populate_output.l_int_pricing_attr_cur,qp_int_line_attrs_N3,LINE_DETAIL_INDEX,1
9669 INDX,QP_PREQ_GRP.populate_output.l_int_pricing_attr_cur,qp_int_line_attrs_N3,ATTRIBUTE_TYPE,2
9670 */
9671   CURSOR l_int_pricing_attr_cur IS
9672     SELECT QPLAT_PRICING.CONTEXT        PRICING_CONTEXT,
9673            QPLAT_PRICING.ATTRIBUTE      PRICING_ATTRIBUTE,
9674            nvl(QPLAT_PRICING.SETUP_VALUE_FROM,QPLAT_PRICING.VALUE_FROM)     PRICING_ATTR_VALUE_FROM,
9675            QPLAT_PRICING.SETUP_VALUE_TO       PRICING_ATTR_VALUE_TO,
9676            QPLAT_PRICING.COMPARISON_OPERATOR_TYPE_CODE,
9677            QPLAT_PRICING.LINE_DETAIL_INDEX,
9678            QPLAT_PRICING.LINE_INDEX,
9679            QPLAT_PRICING.VALIDATED_FLAG
9680      FROM  qp_int_ldets QPLD ,
9681            qp_int_line_attrs QPLAT_PRICING
9682      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT_PRICING.LINE_DETAIL_INDEX
9683      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9684      AND   QPLAT_PRICING.ATTRIBUTE_TYPE IN ('PRICING','PRODUCT');
9685            --AND QPLAT_PRICING.PRICING_STATUS_CODE = G_STATUS_NEW;
9686 
9687 /*
9688 INDX,QP_PREQ_GRP.populate_output.l_int_ldets_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
9689 
9690 INDX,QP_PREQ_GRP.populate_output.l_int_ldets_cur,qp_int_ldets_N4,PRICING_STATUS_CODE,1
9691 
9692 INDX,QP_PREQ_GRP.populate_output.l_int_ldets_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
9693 */
9694   CURSOR l_int_ldets_cur IS
9695 
9696     SELECT /*+ ORDERED USE_NL(A B C) l_int_ldets_cur */
9697 
9698            a.LINE_DETAIL_INDEX,
9699            a.LINE_DETAIL_TYPE_CODE,
9700            a.LINE_INDEX,
9701            a.CREATED_FROM_LIST_HEADER_ID LIST_HEADER_ID,
9702            a.CREATED_FROM_LIST_LINE_ID   LIST_LINE_ID,
9703            a.CREATED_FROM_LIST_LINE_TYPE LIST_LINE_TYPE_CODE,
9704            a.PRICE_BREAK_TYPE_CODE,
9705            a.LINE_QUANTITY,
9706            a.ADJUSTMENT_AMOUNT,
9707            a.AUTOMATIC_FLAG,
9708            a.PRICING_PHASE_ID,
9709            a.OPERAND_CALCULATION_CODE,
9710            a.OPERAND_VALUE,
9711            a.PRICING_GROUP_SEQUENCE,
9712            a.CREATED_FROM_LIST_TYPE_CODE,
9713            a.APPLIED_FLAG,
9714            a.PRICING_STATUS_CODE,
9715            a.PRICING_STATUS_TEXT,
9716            a.LIMIT_CODE,
9717            a.LIMIT_TEXT,
9718            a.LIST_LINE_NO,
9719            a.GROUP_QUANTITY,
9720            a.GROUP_AMOUNT, -- 2388011_new
9721            a.UPDATED_FLAG,
9722 	   a.PROCESS_CODE,
9723 	   a.CALCULATION_CODE,
9724 	   a.CHANGE_REASON_CODE,
9725 	   a.CHANGE_REASON_TEXT,
9726            b.SUBSTITUTION_VALUE SUBSTITUTION_VALUE_TO,
9727            b.SUBSTITUTION_ATTRIBUTE,
9728            b.ACCRUAL_FLAG,
9729            b.modifier_level_code,
9730            b.ESTIM_GL_VALUE,
9731            b.ACCRUAL_CONVERSION_RATE,
9732            --Pass throuh components
9733            b.OVERRIDE_FLAG,
9734            b.PRINT_ON_INVOICE_FLAG,
9735            b.INVENTORY_ITEM_ID,
9736            b.ORGANIZATION_ID,
9737            b.RELATED_ITEM_ID,
9738            b.RELATIONSHIP_TYPE_ID,
9739            b.ESTIM_ACCRUAL_RATE,
9740            b.EXPIRATION_DATE,
9741            b.BENEFIT_PRICE_LIST_LINE_ID,
9742            b.RECURRING_FLAG,
9743            b.BENEFIT_LIMIT,
9744            b.CHARGE_TYPE_CODE,
9745            b.CHARGE_SUBTYPE_CODE,
9746            b.BENEFIT_QTY,
9747            b.BENEFIT_UOM_CODE,
9748            b.PRORATION_TYPE_CODE,
9749            b.INCLUDE_ON_RETURNS_FLAG,
9750            b.REBATE_TRANSACTION_TYPE_CODE,
9751            b.NUMBER_EXPIRATION_PERIODS,
9752            b.EXPIRATION_PERIOD_UOM,
9753            b.COMMENTS,
9754            b.break_uom_code, /* proration */
9755            b.break_uom_context, /* proration */
9756            b.break_uom_attribute /* proration */
9757     FROM  qp_int_ldets a,
9758           QP_LIST_LINES     b
9759     WHERE a.CREATED_FROM_LIST_LINE_ID = b.LIST_LINE_ID
9760     AND   a.PRICING_STATUS_CODE = G_STATUS_NEW;
9761 
9762 /*
9763 INDX,QP_PREQ_GRP.populate_output.l_int_rltd_lines_cur,- No Index Used -,NA,NA
9764 */
9765   CURSOR l_int_rltd_lines_cur IS
9766     SELECT  LINE_INDEX,
9767             LINE_DETAIL_INDEX,
9768             RELATIONSHIP_TYPE_CODE,
9769             RELATED_LINE_INDEX,
9770             RELATED_LINE_DETAIL_INDEX,
9771             PRICING_STATUS_CODE,
9772             PRICING_STATUS_TEXT
9773     FROM qp_int_rltd_lines
9774     WHERE PRICING_STATUS_CODE = G_STATUS_NEW
9775     ORDER BY SETUP_VALUE_FROM;
9776 
9777 I PLS_INTEGER :=1;
9778 J PLS_INTEGER :=1;
9779 l_expiration_period_end_date Date;
9780 l_status_code VARCHAR2(30);
9781 l_status_text VARCHAR2(30);
9782 E_ROUTINE_ERROR EXCEPTION;
9783 l_routine VARCHAR2(240):='QP_PREQ_GRP.POPULATE_OUTPUT';
9784 l_debug varchar2(3);
9785 
9786 BEGIN
9787   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
9788 
9789   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9790   engine_debug('----Before populate l_line_tbl-----');
9791   engine_debug('----Line information return back to caller----');
9792   END IF;
9793 
9794   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9795   IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
9796     IF l_debug = FND_API.G_TRUE THEN
9797       QP_PREQ_GRP.ENGINE_DEBUG('Populate_output: Java Engine not Installed ----------');
9798     END IF;
9799   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9800 
9801   FOR l_line IN l_lines_cur LOOP
9802     --requirement from Jay, will cause holes in pl/sql table.
9803     I :=  l_line.LINE_INDEX;
9804     x_line_tbl(I).LINE_INDEX := l_line.LINE_INDEX;
9805     x_line_tbl(I).LINE_ID    := l_line.LINE_ID;
9806     x_line_tbl(I).HEADER_ID    := l_line.PRICE_LIST_HEADER_ID;
9807     x_line_tbl(I).LINE_TYPE_CODE := l_line.LINE_TYPE_CODE;
9808     x_line_tbl(I).PRICED_QUANTITY := l_line.PRICED_QUANTITY;
9809     x_line_tbl(I).CURRENCY_CODE := l_line.CURRENCY_CODE;
9810     x_line_tbl(I).ROUNDING_FACTOR := l_line.ROUNDING_FACTOR;
9811     x_line_tbl(I).PRICED_UOM_CODE := l_line.PRICED_UOM_CODE;
9812     x_line_tbl(I).UNIT_PRICE := l_line.UNIT_PRICE; --shu_latest
9813     x_line_tbl(I).LINE_QUANTITY:=l_line.LINE_QUANTITY;
9814     x_line_tbl(I).LINE_UOM_CODE:=l_line.LINE_UOM_CODE;
9815     x_line_tbl(I).LINE_UNIT_PRICE := l_line.LINE_UNIT_PRICE; --shu_latest
9816     x_line_tbl(I).UOM_QUANTITY := l_line.UOM_QUANTITY; --shu_latest
9817     x_line_tbl(I).PERCENT_PRICE := l_line.PERCENT_PRICE;
9818     x_line_tbl(I).ADJUSTED_UNIT_PRICE := l_line.ADJUSTED_UNIT_PRICE;
9819     x_line_tbl(I).UPDATED_ADJUSTED_UNIT_PRICE := l_line.UPDATED_ADJUSTED_UNIT_PRICE;
9820     x_line_tbl(I).PARENT_PRICE := l_line.PARENT_PRICE;
9821     x_line_tbl(I).PARENT_QUANTITY := l_line.PARENT_QUANTITY;
9822     x_line_tbl(I).PARENT_UOM_CODE := l_line.PARENT_UOM_CODE;
9823     x_line_tbl(I).PROCESSED_CODE := l_line.PROCESSED_CODE;
9824     x_line_tbl(I).PRICE_FLAG := l_line.PRICE_FLAG;
9825     x_line_tbl(I).STATUS_CODE := l_line.PRICING_STATUS_CODE;
9826     x_line_tbl(I).STATUS_TEXT := substr(l_line.PRICING_STATUS_TEXT,1,2000); -- shulin, fix bug 1745788
9827     x_line_tbl(I).HOLD_CODE := l_line.HOLD_CODE;
9828     x_line_tbl(I).HOLD_TEXT := substr(l_line.HOLD_TEXT,1,240);
9829     x_line_tbl(I).PRICE_REQUEST_CODE := l_line.PRICE_REQUEST_CODE;
9830     x_line_tbl(I).PRICING_EFFECTIVE_DATE := l_line.PRICING_EFFECTIVE_DATE;
9831     x_line_tbl(I).EXTENDED_PRICE := l_line.EXTENDED_PRICE; -- block pricing
9832     --x_line_tbl(I).EXTENDED_SELLING_PRICE_UR := l_line.EXTENDED_SELLING_PRICE_UR;   --[prarasto:Post Round], [julin/postround] redesign
9833     --x_line_tbl(I).ORDER_UOM_SELLING_PRICE_UR := l_line.ORDER_UOM_SELLING_PRICE_UR; --[prarasto:Post Round]
9834     --x_line_tbl(I).ADJUSTED_UNIT_PRICE_UR := l_line.ADJUSTED_UNIT_PRICE_UR;         --[prarasto:Post Round]
9835 
9836     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9837     engine_debug('LINE_INDEX :='||l_line.LINE_INDEX);
9838     engine_debug('LINE_ID    :='||l_line.LINE_ID);
9839     engine_debug('PRICE_LIST_HEADER_ID   :='||l_line.PRICE_LIST_HEADER_ID); -- shu, print out this
9840     engine_debug('LINE_TYPE_CODE :='||l_line.LINE_TYPE_CODE);
9841     engine_debug('UOM_QUANTITY :='||l_line.UOM_QUANTITY);
9842     engine_debug('CURRENCY_CODE :='||l_line.CURRENCY_CODE);
9843     engine_debug('ROUNDING_FACTOR :='||l_line.ROUNDING_FACTOR);
9844     engine_debug('PRICED_QUANTITY :='||l_line.PRICED_QUANTITY);
9845     engine_debug('PRICED_UOM_CODE :='||l_line.PRICED_UOM_CODE);
9846     engine_debug('UNIT_PRICE :='||l_line.UNIT_PRICE);
9847     engine_debug('LINE_QUANTITY:='||l_line.LINE_QUANTITY);
9848     engine_debug('LINE_UOM_CODE:='||l_line.LINE_UOM_CODE);
9849     engine_debug('LINE_UNIT_PRICE:='||l_line.LINE_UNIT_PRICE); -- shu_latest
9850     engine_debug('PERCENT_PRICE :='||l_line.PERCENT_PRICE);
9851     engine_debug('ADJUSTED_UNIT_PRICE :='||l_line.ADJUSTED_UNIT_PRICE);
9852     engine_debug('PARENT_PRICE :='||l_line.PARENT_PRICE);
9853     engine_debug('PARENT_QUANTITY :='||l_line.PARENT_QUANTITY);
9854     engine_debug('PARENT_UOM_CODE :='||l_line.PARENT_UOM_CODE);
9855     engine_debug('processed_code :='||l_line.processed_code);
9856     engine_debug('Price Flag :='||l_line.price_flag);
9857     engine_debug('STATUS_CODE :='||l_line.PRICING_STATUS_CODE);
9858     engine_debug('STATUS_TEXT :='|| substr(l_line.PRICING_STATUS_TEXT,1,2000));
9859     engine_debug('HOLD_CODE := '||l_line.HOLD_CODE);
9860     engine_debug('HOLD_TEXT := '||substr(l_line.HOLD_TEXT,1,240));
9861     engine_debug('PRICE_REQUEST_CODE := '||l_line.PRICE_REQUEST_CODE);
9862     engine_debug('PRICING_DATE := '||l_line.PRICING_EFFECTIVE_DATE);
9863     engine_debug('EXTENDED_PRICE := '||l_line.EXTENDED_PRICE);
9864     --engine_debug('EXTENDED_SELLING_PRICE_UR := '|| l_line.EXTENDED_SELLING_PRICE_UR);   --[prarasto:Post Round], [julin/postround] redesign
9865     --engine_debug('ORDER_UOM_SELLING_PRICE_UR := '|| l_line.ORDER_UOM_SELLING_PRICE_UR); --[prarasto:Post Round]
9866     --engine_debug('ADJUSTED_UNIT_PRICE_UR := '|| l_line.ADJUSTED_UNIT_PRICE_UR);         --[prarasto:Post Round]
9867     END IF;
9868 
9869   END LOOP;
9870   I:=1;
9871 
9872 
9873 --Populate Line detail
9874      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9875      engine_debug('----Line detail information return back to caller----');
9876      END IF;
9877   FOR l_dets IN l_ldets_cur LOOP
9878     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9879     engine_debug('----populating line detail output------');
9880     END IF;
9881 
9882     --requirement by Jay, will cause holes in pl/sql tbl
9883     I := l_dets.line_detail_index;
9884     x_line_detail_tbl(I).LINE_DETAIL_INDEX := l_dets.LINE_DETAIL_INDEX;
9885     x_line_detail_tbl(I).LINE_DETAIL_TYPE_CODE:=l_dets.LINE_DETAIL_TYPE_CODE;
9886     x_line_detail_tbl(I).LINE_INDEX:=l_dets.LINE_INDEX;
9887     x_line_detail_tbl(I).LIST_HEADER_ID:=l_dets.LIST_HEADER_ID;
9888     x_line_detail_tbl(I).LIST_LINE_ID:=l_dets.LIST_LINE_ID;
9889     x_line_detail_tbl(I).LIST_LINE_TYPE_CODE:=l_dets.LIST_LINE_TYPE_CODE;
9890     x_line_detail_tbl(I).SUBSTITUTION_TO:=l_dets.SUBSTITUTION_VALUE_TO;
9891     x_line_detail_tbl(I).LINE_QUANTITY :=l_dets.LINE_QUANTITY;
9892     x_line_detail_tbl(I).ADJUSTMENT_AMOUNT := l_dets.ADJUSTMENT_AMOUNT;
9893     x_line_detail_tbl(I).AUTOMATIC_FLAG    := l_dets.AUTOMATIC_FLAG;
9894     x_line_detail_tbl(I).APPLIED_FLAG      := l_dets.APPLIED_FLAG;
9895     x_line_detail_tbl(I).PRICING_GROUP_SEQUENCE := l_dets.PRICING_GROUP_SEQUENCE;
9896     x_line_detail_tbl(I).CREATED_FROM_LIST_TYPE_CODE:=l_dets.CREATED_FROM_LIST_TYPE_CODE;
9897     x_line_detail_tbl(I).PRICE_BREAK_TYPE_CODE := l_dets.PRICE_BREAK_TYPE_CODE;
9898     x_line_detail_tbl(I).OVERRIDE_FLAG   := l_dets.override_flag;
9899     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG :=l_dets.print_on_invoice_flag;
9900     x_line_detail_tbl(I).PRICING_PHASE_ID := l_dets.PRICING_PHASE_ID;
9901     x_line_detail_tbl(I).APPLIED_FLAG := l_dets.APPLIED_FLAG;
9902     x_line_detail_tbl(I).OPERAND_CALCULATION_CODE := l_dets.OPERAND_CALCULATION_CODE;
9903     x_line_detail_tbl(I).OPERAND_VALUE := l_dets.OPERAND_VALUE;
9904     x_line_detail_tbl(I).STATUS_CODE:=l_dets.PRICING_STATUS_CODE;
9905     x_line_detail_tbl(I).STATUS_TEXT:=substr(l_dets.PRICING_STATUS_TEXT,1,240);
9906     x_line_detail_tbl(I).SUBSTITUTION_ATTRIBUTE:=l_dets.SUBSTITUTION_ATTRIBUTE;
9907     x_line_detail_tbl(I).ACCRUAL_FLAG:=l_dets.ACCRUAL_FLAG;
9908     x_line_detail_tbl(I).LIST_LINE_NO:=l_dets.LIST_LINE_NO;
9909     x_line_detail_tbl(I).ESTIM_GL_VALUE:=l_dets.ESTIM_GL_VALUE;
9910     x_line_detail_tbl(I).ACCRUAL_CONVERSION_RATE:=l_dets.ACCRUAL_CONVERSION_RATE;
9911            --Pass throuh components
9912     x_line_detail_tbl(I).OVERRIDE_FLAG:= l_dets.OVERRIDE_FLAG;
9913     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG:=l_dets.PRINT_ON_INVOICE_FLAG;
9914     x_line_detail_tbl(I).INVENTORY_ITEM_ID:=l_dets.INVENTORY_ITEM_ID;
9915     x_line_detail_tbl(I).ORGANIZATION_ID:=l_dets.ORGANIZATION_ID;
9916     x_line_detail_tbl(I).RELATED_ITEM_ID:= l_dets.RELATED_ITEM_ID;
9917     x_line_detail_tbl(I).RELATIONSHIP_TYPE_ID:=l_dets.RELATIONSHIP_TYPE_ID;
9918     x_line_detail_tbl(I).ESTIM_ACCRUAL_RATE:=l_dets.ESTIM_ACCRUAL_RATE;
9919 
9920     x_line_detail_tbl(I).BENEFIT_PRICE_LIST_LINE_ID:=l_dets.BENEFIT_PRICE_LIST_LINE_ID;
9921     x_line_detail_tbl(I).RECURRING_FLAG:= l_dets.RECURRING_FLAG;
9922     x_line_detail_tbl(I).RECURRING_VALUE:= l_dets.RECURRING_VALUE; --for block pricing bug 3657116
9923     x_line_detail_tbl(I).BENEFIT_LIMIT:= l_dets.BENEFIT_LIMIT;
9924     x_line_detail_tbl(I).CHARGE_TYPE_CODE:=  l_dets.CHARGE_TYPE_CODE;
9925     x_line_detail_tbl(I).CHARGE_SUBTYPE_CODE:=l_dets.CHARGE_SUBTYPE_CODE;
9926     x_line_detail_tbl(I).BENEFIT_QTY:=l_dets.BENEFIT_QTY;
9927     x_line_detail_tbl(I).BENEFIT_UOM_CODE:=l_dets.BENEFIT_UOM_CODE;
9928     x_line_detail_tbl(I).SERVICE_DURATION:=l_dets.SERVICE_DURATION; -- service project
9929     x_line_detail_tbl(I).SERVICE_PERIOD:=l_dets.SERVICE_PERIOD; -- service project
9930     x_line_detail_tbl(I).PRORATION_TYPE_CODE:=l_dets.PRORATION_TYPE_CODE;
9931     x_line_detail_tbl(I).INCLUDE_ON_RETURNS_FLAG := l_dets.INCLUDE_ON_RETURNS_FLAG;
9932     x_line_detail_tbl(I).LIST_LINE_NO := l_dets.LIST_LINE_NO;
9933     x_line_detail_tbl(I).MODIFIER_LEVEL_CODE := l_dets.MODIFIER_LEVEL_CODE;
9934     x_line_detail_tbl(I).GROUP_VALUE := nvl(l_dets.GROUP_QUANTITY,l_dets.GROUP_AMOUNT); -- 2388011_new
9935     x_line_detail_tbl(I).COMMENTS := l_dets.COMMENTS;
9936     x_line_detail_tbl(I).UPDATED_FLAG := l_dets.UPDATED_FLAG;
9937     x_line_detail_tbl(I).PROCESS_CODE := l_dets.PROCESS_CODE;
9938     x_line_detail_tbl(I).LIMIT_CODE := l_dets.LIMIT_CODE;
9939     x_line_detail_tbl(I).LIMIT_TEXT := substr(l_dets.LIMIT_TEXT,1,240);
9940     x_line_detail_tbl(I).CALCULATION_CODE := l_dets.CALCULATION_CODE;
9941     x_line_detail_tbl(I).CHANGE_REASON_CODE := l_dets.CHANGE_REASON_CODE;
9942     x_line_detail_tbl(I).CHANGE_REASON_CODE := substr(l_dets.CHANGE_REASON_CODE,1,240);
9943     x_line_detail_tbl(I).BREAK_UOM_CODE := l_dets.BREAK_UOM_CODE; /* proration */
9944     x_line_detail_tbl(I).BREAK_UOM_CONTEXT := l_dets.BREAK_UOM_CONTEXT; /* proration */
9945     x_line_detail_tbl(I).BREAK_UOM_ATTRIBUTE := l_dets.BREAK_UOM_ATTRIBUTE; /* proration */
9946 
9947     IF (l_dets.LINE_DETAIL_TYPE_CODE = G_COUPON_ISSUE) THEN
9948      SET_EXPIRATION_DATES (l_dets.number_expiration_periods,
9949                           l_dets.EXPIRATION_PERIOD_UOM,
9950                           l_dets.line_index,
9951                           l_expiration_period_end_date,
9952                           l_status_code,
9953                           l_status_text);
9954     END IF;
9955 
9956     IF l_status_code = FND_API.G_RET_STS_ERROR THEN
9957         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9958         engine_debug(l_routine||':'||substr(l_status_text,1,240));
9959         END IF;
9960     END IF;
9961 
9962     x_line_detail_tbl(I).EXPIRATION_DATE :=l_expiration_period_end_date;
9963     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9964     engine_debug('LINE_DETAIL_INDEX :='|| l_dets.LINE_DETAIL_INDEX);
9965     engine_debug('LINE_DETAIL_TYPE_CODE:='||l_dets.LINE_DETAIL_TYPE_CODE);
9966     engine_debug('LINE_INDEX:='||l_dets.LINE_INDEX);
9967     engine_debug('LIST_HEADER_ID:='||l_dets.LIST_HEADER_ID);
9968     engine_debug('LIST_LINE_ID:='||l_dets.LIST_LINE_ID);
9969     engine_debug('LIST_LINE_TYPE_CODE:='||l_dets.LIST_LINE_TYPE_CODE);
9970     engine_debug('SUBSTITUTION_TO:='||l_dets.SUBSTITUTION_VALUE_TO);
9971     engine_debug('LINE_QUANTITY :='||l_dets.LINE_QUANTITY);
9972     engine_debug('ADJUSTMENT_AMOUNT :='|| l_dets.ADJUSTMENT_AMOUNT);
9973     engine_debug('AUTOMATIC_FLAG    :='|| l_dets.AUTOMATIC_FLAG);
9974     engine_debug('APPLIED_FLAG      :='|| l_dets.APPLIED_FLAG);
9975     engine_debug('PRICING_GROUP_SEQUENCE :='|| l_dets.PRICING_GROUP_SEQUENCE);
9976     engine_debug('CREATED_FROM_LIST_TYPE_CODE:='||l_dets.CREATED_FROM_LIST_TYPE_CODE);
9977     engine_debug('PRICE_BREAK_TYPE_CODE :='|| l_dets.PRICE_BREAK_TYPE_CODE);
9978     engine_debug('OVERRIDE_FLAG   :='|| l_dets.override_flag);
9979     engine_debug('PRINT_ON_INVOICE_FLAG :='||l_dets.print_on_invoice_flag);
9980     engine_debug('PRICING_PHASE_ID :='|| l_dets.PRICING_PHASE_ID);
9981     engine_debug('OPERAND_CALCULATION_CODE :='|| l_dets.OPERAND_CALCULATION_CODE);
9982     engine_debug('OPERAND_VALUE :='|| l_dets.OPERAND_VALUE);
9983     engine_debug('STATUS_CODE:='||l_dets.PRICING_STATUS_CODE);
9984     engine_debug('STATUS_TEXT:='||substr(l_dets.PRICING_STATUS_TEXT,1,240));
9985     engine_debug('SUBSTITUTION_ATTRIBUTE:='||l_dets.SUBSTITUTION_ATTRIBUTE);
9986     engine_debug('ACCRUAL_FLAG:='||l_dets.ACCRUAL_FLAG);
9987     engine_debug('LIST_LINE_NO:='||l_dets.LIST_LINE_NO);
9988     engine_debug('ESTIM_GL_VALUE:='||l_dets.ESTIM_GL_VALUE);
9989     engine_debug('ACCRUAL_CONVERSION_RATE:='||l_dets.ACCRUAL_CONVERSION_RATE);
9990     END IF;
9991            --Pass throuh components
9992     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9993     engine_debug('OVERRIDE_FLAG:='|| l_dets.OVERRIDE_FLAG);
9994     engine_debug('INVENTORY_ITEM_ID:='||l_dets.INVENTORY_ITEM_ID);
9995     engine_debug('ORGANIZATION_ID:='||l_dets.ORGANIZATION_ID);
9996     engine_debug('RELATED_ITEM_ID:='|| l_dets.RELATED_ITEM_ID);
9997     engine_debug('RELATIONSHIP_TYPE_ID:='||l_dets.RELATIONSHIP_TYPE_ID);
9998     engine_debug('ESTIM_ACCRUAL_RATE:='||l_dets.ESTIM_ACCRUAL_RATE);
9999     engine_debug('EXPIRATION_DATE:='||l_dets.EXPIRATION_DATE);
10000     engine_debug('BENEFIT_PRICE_LIST_LINE_ID:='||l_dets.BENEFIT_PRICE_LIST_LINE_ID);
10001     engine_debug('RECURRING_FLAG:='|| l_dets.RECURRING_FLAG);
10002     engine_debug('BENEFIT_LIMIT:='|| l_dets.BENEFIT_LIMIT);
10003     engine_debug('CHARGE_TYPE_CODE:='||  l_dets.CHARGE_TYPE_CODE);
10004     engine_debug('CHARGE_SUBTYPE_CODE:='||l_dets.CHARGE_SUBTYPE_CODE);
10005     engine_debug('BENEFIT_QTY:='||l_dets.BENEFIT_QTY);
10006     engine_debug('BENEFIT_UOM_CODE:='||l_dets.BENEFIT_UOM_CODE);
10007     engine_debug('SERVICE_DURATION:='||l_dets.SERVICE_DURATION);  -- service project
10008     engine_debug('SERVICE_PERIOD:='||l_dets.SERVICE_PERIOD);  -- service project
10009     engine_debug('PRORATION_TYPE_CODE:='||l_dets.PRORATION_TYPE_CODE);
10010     engine_debug('INCLUDE_ON_RETURNS_FLAG :='|| l_dets.INCLUDE_ON_RETURNS_FLAG);
10011     engine_debug('MODIFIER_LEVEL_CODE :='|| l_dets.MODIFIER_LEVEL_CODE);
10012     engine_debug('GROUP VALUE :='|| l_dets.GROUP_QUANTITY);
10013     engine_debug('LIMIT_CODE :='|| l_dets.LIMIT_CODE);
10014     engine_debug('LIMIT_TEXT :='|| substr(l_dets.LIMIT_TEXT,1,240));
10015     engine_debug('CHANGE_REASON_CODE :='|| l_dets.CHANGE_REASON_CODE);
10016     engine_debug('CHANGE_REASON_TEXT :='|| substr(l_dets.CHANGE_REASON_TEXT,1,240));
10017     engine_debug('BREAK_UOM_CODE :='|| l_dets.BREAK_UOM_CODE); /* proration */
10018     engine_debug('BREAK_UOM_CONTEXT :='|| l_dets.BREAK_UOM_CONTEXT); /* proration */
10019     engine_debug('BREAK_UOM_ATTRIBUTE :='|| l_dets.BREAK_UOM_ATTRIBUTE); /* proration */
10020 
10021     END IF;
10022   --I:=I+1;
10023   END LOOP;
10024 I:=1;
10025 
10026 --Populate Qualifier detail
10027   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10028   engine_debug('----Before populate x_qual_tbl-----');
10029   END IF;
10030   FOR l_qual IN l_qual_cur(G_DETAIL_LEVEL) LOOP
10031     x_line_detail_qual_tbl(I).LINE_DETAIL_INDEX := l_qual.LINE_DETAIL_INDEX;
10032     x_line_detail_qual_tbl(I).QUALIFIER_CONTEXT := l_qual.CONTEXT;
10033     x_line_detail_qual_tbl(I).QUALIFIER_ATTRIBUTE := l_qual.ATTRIBUTE;
10034     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM := l_qual.SETUP_VALUE_FROM;
10035     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO := l_qual.SETUP_VALUE_TO;
10036     x_line_detail_qual_tbl(I).COMPARISON_OPERATOR_CODE := l_qual.COMPARISON_OPERATOR_TYPE_CODE;
10037     x_line_detail_qual_tbl(I).status_code := l_qual.PRICING_STATUS_CODE;
10038     x_line_detail_qual_tbl(I).VALIDATED_FLAG :=l_qual.VALIDATED_FLAG;
10039 
10040   I:=I+1;
10041   END LOOP;
10042   I:=1;
10043 
10044 --LINE ATTRIBUTE DETAIL NEEDED
10045   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10046   engine_debug('----Before populate attr_tbl-----');
10047   END IF;
10048  FOR l_prc IN l_pricing_attr_cur LOOP
10049     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10050     engine_debug('--------populating x_line_detail_attr----------');
10051     engine_debug('Line Detail Index: '||l_prc.LINE_DETAIL_INDEX);
10052     END IF;
10053     x_line_detail_attr_tbl(I).LINE_DETAIL_INDEX := l_prc.LINE_DETAIL_INDEX;
10054     x_line_detail_attr_tbl(I).PRICING_CONTEXT := l_prc.PRICING_CONTEXT;
10055     x_line_detail_attr_tbl(I).PRICING_ATTRIBUTE := l_prc.PRICING_ATTRIBUTE;
10056     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_FROM :=l_prc.PRICING_ATTR_VALUE_FROM;
10057     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_TO :=l_prc.PRICING_ATTR_VALUE_TO;
10058     x_line_detail_attr_tbl(I).VALIDATED_FLAG :=l_prc.VALIDATED_FLAG;
10059     --x_line_attr_tbl(I).PRICING_STATUS_CODE := l_prc.PRICING_STATUS_CODE;
10060     --x_line_attr_tbl(I).PRICING_STATUS_TEXT := l_prc.PRICING_STATUS_TEXT;
10061   I:=I+1;
10062   END LOOP;
10063 
10064   I:=1;
10065 
10066   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10067   engine_debug('----Before populate l_rltd_lines_tbl-----');
10068   END IF;
10069   FOR l_rltd IN l_rltd_lines_cur LOOP
10070      x_related_lines_tbl(I).LINE_INDEX := l_rltd.Line_index;
10071      x_related_lines_tbl(I).LINE_DETAIL_INDEX :=  l_rltd.LINE_DETAIL_INDEX;
10072      x_related_lines_tbl(I).RELATIONSHIP_TYPE_CODE :=l_rltd.RELATIONSHIP_TYPE_CODE;
10073      x_related_lines_tbl(I).RELATED_LINE_INDEX     :=l_rltd.RELATED_LINE_INDEX;
10074      x_related_lines_tbl(I).RELATED_LINE_DETAIL_INDEX :=l_rltd.RELATED_LINE_DETAIL_INDEX;
10075      x_related_lines_tbl(I).STATUS_CODE :=l_rltd.PRICING_STATUS_CODE;
10076      x_related_lines_tbl(I).STATUS_TEXT :=l_rltd.PRICING_STATUS_TEXT;
10077   I:=I+1;
10078   END LOOP;
10079 ELSE
10080     IF l_debug = FND_API.G_TRUE THEN
10081       QP_PREQ_GRP.ENGINE_DEBUG('Populate_output: Java Engine is Installed ----------');
10082     END IF;
10083   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
10084 
10085   FOR l_line IN l_int_lines_cur LOOP
10086     --requirement from Jay, will cause holes in pl/sql table.
10087     I :=  l_line.LINE_INDEX;
10088     x_line_tbl(I).LINE_INDEX := l_line.LINE_INDEX;
10089     x_line_tbl(I).LINE_ID    := l_line.LINE_ID;
10090     x_line_tbl(I).HEADER_ID    := l_line.PRICE_LIST_HEADER_ID;
10091     x_line_tbl(I).LINE_TYPE_CODE := l_line.LINE_TYPE_CODE;
10092     x_line_tbl(I).PRICED_QUANTITY := l_line.PRICED_QUANTITY;
10093     x_line_tbl(I).CURRENCY_CODE := l_line.CURRENCY_CODE;
10094     x_line_tbl(I).ROUNDING_FACTOR := l_line.ROUNDING_FACTOR;
10095     x_line_tbl(I).PRICED_UOM_CODE := l_line.PRICED_UOM_CODE;
10096     x_line_tbl(I).UNIT_PRICE := l_line.UNIT_PRICE; --shu_latest
10097     x_line_tbl(I).LINE_QUANTITY:=l_line.LINE_QUANTITY;
10098     x_line_tbl(I).LINE_UOM_CODE:=l_line.LINE_UOM_CODE;
10099     x_line_tbl(I).LINE_UNIT_PRICE := l_line.LINE_UNIT_PRICE; --shu_latest
10100     x_line_tbl(I).UOM_QUANTITY := l_line.UOM_QUANTITY; --shu_latest
10101     x_line_tbl(I).PERCENT_PRICE := l_line.PERCENT_PRICE;
10102     x_line_tbl(I).ADJUSTED_UNIT_PRICE := l_line.ADJUSTED_UNIT_PRICE;
10103     x_line_tbl(I).UPDATED_ADJUSTED_UNIT_PRICE := l_line.UPDATED_ADJUSTED_UNIT_PRICE;
10104     x_line_tbl(I).PARENT_PRICE := l_line.PARENT_PRICE;
10105     x_line_tbl(I).PARENT_QUANTITY := l_line.PARENT_QUANTITY;
10106     x_line_tbl(I).PARENT_UOM_CODE := l_line.PARENT_UOM_CODE;
10107     x_line_tbl(I).PROCESSED_CODE := l_line.PROCESSED_CODE;
10108     x_line_tbl(I).PRICE_FLAG := l_line.PRICE_FLAG;
10109     x_line_tbl(I).STATUS_CODE := l_line.PRICING_STATUS_CODE;
10110     x_line_tbl(I).STATUS_TEXT := substr(l_line.PRICING_STATUS_TEXT,1,2000); -- shulin, fix bug 1745788
10111     x_line_tbl(I).HOLD_CODE := l_line.HOLD_CODE;
10112     x_line_tbl(I).HOLD_TEXT := substr(l_line.HOLD_TEXT,1,240);
10113     x_line_tbl(I).PRICE_REQUEST_CODE := l_line.PRICE_REQUEST_CODE;
10114     x_line_tbl(I).PRICING_EFFECTIVE_DATE := l_line.PRICING_EFFECTIVE_DATE;
10115     x_line_tbl(I).EXTENDED_PRICE := l_line.EXTENDED_PRICE; -- block pricing
10116 
10117     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10118     engine_debug('LINE_INDEX :='||l_line.LINE_INDEX);
10119     engine_debug('LINE_ID    :='||l_line.LINE_ID);
10120     engine_debug('PRICE_LIST_HEADER_ID   :='||l_line.PRICE_LIST_HEADER_ID); -- shu, print out this
10121     engine_debug('LINE_TYPE_CODE :='||l_line.LINE_TYPE_CODE);
10122     engine_debug('UOM_QUANTITY :='||l_line.UOM_QUANTITY);
10123     engine_debug('CURRENCY_CODE :='||l_line.CURRENCY_CODE);
10124     engine_debug('ROUNDING_FACTOR :='||l_line.ROUNDING_FACTOR);
10125     engine_debug('PRICED_QUANTITY :='||l_line.PRICED_QUANTITY);
10126     engine_debug('PRICED_UOM_CODE :='||l_line.PRICED_UOM_CODE);
10127     engine_debug('UNIT_PRICE :='||l_line.UNIT_PRICE);
10128     engine_debug('LINE_QUANTITY:='||l_line.LINE_QUANTITY);
10129     engine_debug('LINE_UOM_CODE:='||l_line.LINE_UOM_CODE);
10130     engine_debug('LINE_UNIT_PRICE:='||l_line.LINE_UNIT_PRICE); -- shu_latest
10131     engine_debug('PERCENT_PRICE :='||l_line.PERCENT_PRICE);
10132     engine_debug('ADJUSTED_UNIT_PRICE :='||l_line.ADJUSTED_UNIT_PRICE);
10133     engine_debug('PARENT_PRICE :='||l_line.PARENT_PRICE);
10134     engine_debug('PARENT_QUANTITY :='||l_line.PARENT_QUANTITY);
10135     engine_debug('PARENT_UOM_CODE :='||l_line.PARENT_UOM_CODE);
10136     engine_debug('processed_code :='||l_line.processed_code);
10137     engine_debug('Price Flag :='||l_line.price_flag);
10138     engine_debug('STATUS_CODE :='||l_line.PRICING_STATUS_CODE);
10139     engine_debug('STATUS_TEXT :='|| substr(l_line.PRICING_STATUS_TEXT,1,2000));
10140     engine_debug('HOLD_CODE := '||l_line.HOLD_CODE);
10141     engine_debug('HOLD_TEXT := '||substr(l_line.HOLD_TEXT,1,240));
10142     engine_debug('PRICE_REQUEST_CODE := '||l_line.PRICE_REQUEST_CODE);
10143     engine_debug('PRICING_DATE := '||l_line.PRICING_EFFECTIVE_DATE);
10144     engine_debug('EXTENDED_PRICE := '||l_line.EXTENDED_PRICE);
10145     END IF;
10146 
10147   END LOOP;
10148   I:=1;
10149 
10150 
10151 --Populate Line detail
10152      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10153      engine_debug('----Line detail information return back to caller----');
10154      END IF;
10155   FOR l_dets IN l_int_ldets_cur LOOP
10156     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10157     engine_debug('----populating line detail output------');
10158     END IF;
10159 
10160     --requirement by Jay, will cause holes in pl/sql tbl
10161     I := l_dets.line_detail_index;
10162     x_line_detail_tbl(I).LINE_DETAIL_INDEX := l_dets.LINE_DETAIL_INDEX;
10163     x_line_detail_tbl(I).LINE_DETAIL_TYPE_CODE:=l_dets.LINE_DETAIL_TYPE_CODE;
10164     x_line_detail_tbl(I).LINE_INDEX:=l_dets.LINE_INDEX;
10165     x_line_detail_tbl(I).LIST_HEADER_ID:=l_dets.LIST_HEADER_ID;
10166     x_line_detail_tbl(I).LIST_LINE_ID:=l_dets.LIST_LINE_ID;
10167     x_line_detail_tbl(I).LIST_LINE_TYPE_CODE:=l_dets.LIST_LINE_TYPE_CODE;
10168     x_line_detail_tbl(I).SUBSTITUTION_TO:=l_dets.SUBSTITUTION_VALUE_TO;
10169     x_line_detail_tbl(I).LINE_QUANTITY :=l_dets.LINE_QUANTITY;
10170     x_line_detail_tbl(I).ADJUSTMENT_AMOUNT := l_dets.ADJUSTMENT_AMOUNT;
10171     x_line_detail_tbl(I).AUTOMATIC_FLAG    := l_dets.AUTOMATIC_FLAG;
10172     x_line_detail_tbl(I).APPLIED_FLAG      := l_dets.APPLIED_FLAG;
10173     x_line_detail_tbl(I).PRICING_GROUP_SEQUENCE := l_dets.PRICING_GROUP_SEQUENCE;
10174     x_line_detail_tbl(I).CREATED_FROM_LIST_TYPE_CODE:=l_dets.CREATED_FROM_LIST_TYPE_CODE;
10175     x_line_detail_tbl(I).PRICE_BREAK_TYPE_CODE := l_dets.PRICE_BREAK_TYPE_CODE;
10176     x_line_detail_tbl(I).OVERRIDE_FLAG   := l_dets.override_flag;
10177     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG :=l_dets.print_on_invoice_flag;
10178     x_line_detail_tbl(I).PRICING_PHASE_ID := l_dets.PRICING_PHASE_ID;
10179     x_line_detail_tbl(I).APPLIED_FLAG := l_dets.APPLIED_FLAG;
10180     x_line_detail_tbl(I).OPERAND_CALCULATION_CODE := l_dets.OPERAND_CALCULATION_CODE;
10181     x_line_detail_tbl(I).OPERAND_VALUE := l_dets.OPERAND_VALUE;
10182     x_line_detail_tbl(I).STATUS_CODE:=l_dets.PRICING_STATUS_CODE;
10183     x_line_detail_tbl(I).STATUS_TEXT:=substr(l_dets.PRICING_STATUS_TEXT,1,240);
10184     x_line_detail_tbl(I).SUBSTITUTION_ATTRIBUTE:=l_dets.SUBSTITUTION_ATTRIBUTE;
10185     x_line_detail_tbl(I).ACCRUAL_FLAG:=l_dets.ACCRUAL_FLAG;
10186     x_line_detail_tbl(I).LIST_LINE_NO:=l_dets.LIST_LINE_NO;
10187     x_line_detail_tbl(I).ESTIM_GL_VALUE:=l_dets.ESTIM_GL_VALUE;
10188     x_line_detail_tbl(I).ACCRUAL_CONVERSION_RATE:=l_dets.ACCRUAL_CONVERSION_RATE;
10189            --Pass throuh components
10190     x_line_detail_tbl(I).OVERRIDE_FLAG:= l_dets.OVERRIDE_FLAG;
10191     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG:=l_dets.PRINT_ON_INVOICE_FLAG;
10192     x_line_detail_tbl(I).INVENTORY_ITEM_ID:=l_dets.INVENTORY_ITEM_ID;
10193     x_line_detail_tbl(I).ORGANIZATION_ID:=l_dets.ORGANIZATION_ID;
10194     x_line_detail_tbl(I).RELATED_ITEM_ID:= l_dets.RELATED_ITEM_ID;
10195     x_line_detail_tbl(I).RELATIONSHIP_TYPE_ID:=l_dets.RELATIONSHIP_TYPE_ID;
10196     x_line_detail_tbl(I).ESTIM_ACCRUAL_RATE:=l_dets.ESTIM_ACCRUAL_RATE;
10197 
10198     x_line_detail_tbl(I).BENEFIT_PRICE_LIST_LINE_ID:=l_dets.BENEFIT_PRICE_LIST_LINE_ID;
10199     x_line_detail_tbl(I).RECURRING_FLAG:= l_dets.RECURRING_FLAG;
10200     x_line_detail_tbl(I).BENEFIT_LIMIT:= l_dets.BENEFIT_LIMIT;
10201     x_line_detail_tbl(I).CHARGE_TYPE_CODE:=  l_dets.CHARGE_TYPE_CODE;
10202     x_line_detail_tbl(I).CHARGE_SUBTYPE_CODE:=l_dets.CHARGE_SUBTYPE_CODE;
10203     x_line_detail_tbl(I).BENEFIT_QTY:=l_dets.BENEFIT_QTY;
10204     x_line_detail_tbl(I).BENEFIT_UOM_CODE:=l_dets.BENEFIT_UOM_CODE;
10205     x_line_detail_tbl(I).PRORATION_TYPE_CODE:=l_dets.PRORATION_TYPE_CODE;
10206     x_line_detail_tbl(I).INCLUDE_ON_RETURNS_FLAG := l_dets.INCLUDE_ON_RETURNS_FLAG;
10207     x_line_detail_tbl(I).LIST_LINE_NO := l_dets.LIST_LINE_NO;
10208     x_line_detail_tbl(I).MODIFIER_LEVEL_CODE := l_dets.MODIFIER_LEVEL_CODE;
10209     x_line_detail_tbl(I).GROUP_VALUE := nvl(l_dets.GROUP_QUANTITY,l_dets.GROUP_AMOUNT); -- 2388011_new
10210     x_line_detail_tbl(I).COMMENTS := l_dets.COMMENTS;
10211     x_line_detail_tbl(I).UPDATED_FLAG := l_dets.UPDATED_FLAG;
10212     x_line_detail_tbl(I).PROCESS_CODE := l_dets.PROCESS_CODE;
10213     x_line_detail_tbl(I).LIMIT_CODE := l_dets.LIMIT_CODE;
10214     x_line_detail_tbl(I).LIMIT_TEXT := substr(l_dets.LIMIT_TEXT,1,240);
10215     x_line_detail_tbl(I).CALCULATION_CODE := l_dets.CALCULATION_CODE;
10216     x_line_detail_tbl(I).CHANGE_REASON_CODE := l_dets.CHANGE_REASON_CODE;
10217     x_line_detail_tbl(I).CHANGE_REASON_CODE := substr(l_dets.CHANGE_REASON_CODE,1,240);
10218     x_line_detail_tbl(I).BREAK_UOM_CODE := l_dets.BREAK_UOM_CODE; /* proration */
10219     x_line_detail_tbl(I).BREAK_UOM_CONTEXT := l_dets.BREAK_UOM_CONTEXT; /* proration */
10220     x_line_detail_tbl(I).BREAK_UOM_ATTRIBUTE := l_dets.BREAK_UOM_ATTRIBUTE; /* proration */
10221 
10222     IF (l_dets.LINE_DETAIL_TYPE_CODE = G_COUPON_ISSUE) THEN
10223      SET_EXPIRATION_DATES (l_dets.number_expiration_periods,
10224                           l_dets.EXPIRATION_PERIOD_UOM,
10225                           l_dets.line_index,
10226                           l_expiration_period_end_date,
10227                           l_status_code,
10228                           l_status_text);
10229     END IF;
10230 
10231     IF l_status_code = FND_API.G_RET_STS_ERROR THEN
10232         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10233         engine_debug(l_routine||':'||substr(l_status_text,1,240));
10234         END IF;
10235     END IF;
10236 
10237     x_line_detail_tbl(I).EXPIRATION_DATE :=l_expiration_period_end_date;
10238     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10239     engine_debug('LINE_DETAIL_INDEX :='|| l_dets.LINE_DETAIL_INDEX);
10240     engine_debug('LINE_DETAIL_TYPE_CODE:='||l_dets.LINE_DETAIL_TYPE_CODE);
10241     engine_debug('LINE_INDEX:='||l_dets.LINE_INDEX);
10242     engine_debug('LIST_HEADER_ID:='||l_dets.LIST_HEADER_ID);
10243     engine_debug('LIST_LINE_ID:='||l_dets.LIST_LINE_ID);
10244     engine_debug('LIST_LINE_TYPE_CODE:='||l_dets.LIST_LINE_TYPE_CODE);
10245     engine_debug('SUBSTITUTION_TO:='||l_dets.SUBSTITUTION_VALUE_TO);
10246     engine_debug('LINE_QUANTITY :='||l_dets.LINE_QUANTITY);
10247     engine_debug('ADJUSTMENT_AMOUNT :='|| l_dets.ADJUSTMENT_AMOUNT);
10248     engine_debug('AUTOMATIC_FLAG    :='|| l_dets.AUTOMATIC_FLAG);
10249     engine_debug('APPLIED_FLAG      :='|| l_dets.APPLIED_FLAG);
10250     engine_debug('PRICING_GROUP_SEQUENCE :='|| l_dets.PRICING_GROUP_SEQUENCE);
10251     engine_debug('CREATED_FROM_LIST_TYPE_CODE:='||l_dets.CREATED_FROM_LIST_TYPE_CODE);
10252     engine_debug('PRICE_BREAK_TYPE_CODE :='|| l_dets.PRICE_BREAK_TYPE_CODE);
10253     engine_debug('OVERRIDE_FLAG   :='|| l_dets.override_flag);
10254     engine_debug('PRINT_ON_INVOICE_FLAG :='||l_dets.print_on_invoice_flag);
10255     engine_debug('PRICING_PHASE_ID :='|| l_dets.PRICING_PHASE_ID);
10256     engine_debug('OPERAND_CALCULATION_CODE :='|| l_dets.OPERAND_CALCULATION_CODE);
10257     engine_debug('OPERAND_VALUE :='|| l_dets.OPERAND_VALUE);
10258     engine_debug('STATUS_CODE:='||l_dets.PRICING_STATUS_CODE);
10259     engine_debug('STATUS_TEXT:='||substr(l_dets.PRICING_STATUS_TEXT,1,240));
10260     engine_debug('SUBSTITUTION_ATTRIBUTE:='||l_dets.SUBSTITUTION_ATTRIBUTE);
10261     engine_debug('ACCRUAL_FLAG:='||l_dets.ACCRUAL_FLAG);
10262     engine_debug('LIST_LINE_NO:='||l_dets.LIST_LINE_NO);
10263     engine_debug('ESTIM_GL_VALUE:='||l_dets.ESTIM_GL_VALUE);
10264     engine_debug('ACCRUAL_CONVERSION_RATE:='||l_dets.ACCRUAL_CONVERSION_RATE);
10265     END IF;
10266            --Pass throuh components
10267     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10268     engine_debug('OVERRIDE_FLAG:='|| l_dets.OVERRIDE_FLAG);
10269     engine_debug('INVENTORY_ITEM_ID:='||l_dets.INVENTORY_ITEM_ID);
10270     engine_debug('ORGANIZATION_ID:='||l_dets.ORGANIZATION_ID);
10271     engine_debug('RELATED_ITEM_ID:='|| l_dets.RELATED_ITEM_ID);
10272     engine_debug('RELATIONSHIP_TYPE_ID:='||l_dets.RELATIONSHIP_TYPE_ID);
10273     engine_debug('ESTIM_ACCRUAL_RATE:='||l_dets.ESTIM_ACCRUAL_RATE);
10274     engine_debug('EXPIRATION_DATE:='||l_dets.EXPIRATION_DATE);
10275     engine_debug('BENEFIT_PRICE_LIST_LINE_ID:='||l_dets.BENEFIT_PRICE_LIST_LINE_ID);
10276     engine_debug('RECURRING_FLAG:='|| l_dets.RECURRING_FLAG);
10277     engine_debug('BENEFIT_LIMIT:='|| l_dets.BENEFIT_LIMIT);
10278     engine_debug('CHARGE_TYPE_CODE:='||  l_dets.CHARGE_TYPE_CODE);
10279     engine_debug('CHARGE_SUBTYPE_CODE:='||l_dets.CHARGE_SUBTYPE_CODE);
10280     engine_debug('BENEFIT_QTY:='||l_dets.BENEFIT_QTY);
10281     engine_debug('BENEFIT_UOM_CODE:='||l_dets.BENEFIT_UOM_CODE);
10282     engine_debug('PRORATION_TYPE_CODE:='||l_dets.PRORATION_TYPE_CODE);
10283     engine_debug('INCLUDE_ON_RETURNS_FLAG :='|| l_dets.INCLUDE_ON_RETURNS_FLAG);
10284     engine_debug('MODIFIER_LEVEL_CODE :='|| l_dets.MODIFIER_LEVEL_CODE);
10285     engine_debug('GROUP VALUE :='|| l_dets.GROUP_QUANTITY);
10286     engine_debug('LIMIT_CODE :='|| l_dets.LIMIT_CODE);
10287     engine_debug('LIMIT_TEXT :='|| substr(l_dets.LIMIT_TEXT,1,240));
10288     engine_debug('CHANGE_REASON_CODE :='|| l_dets.CHANGE_REASON_CODE);
10289     engine_debug('CHANGE_REASON_TEXT :='|| substr(l_dets.CHANGE_REASON_TEXT,1,240));
10290     engine_debug('BREAK_UOM_CODE :='|| l_dets.BREAK_UOM_CODE); /* proration */
10291     engine_debug('BREAK_UOM_CONTEXT :='|| l_dets.BREAK_UOM_CONTEXT); /* proration */
10292     engine_debug('BREAK_UOM_ATTRIBUTE :='|| l_dets.BREAK_UOM_ATTRIBUTE); /* proration */
10293 
10294     END IF;
10295   --I:=I+1;
10296   END LOOP;
10297 I:=1;
10298 
10299 --Populate Qualifier detail
10300   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10301   engine_debug('----Before populate x_qual_tbl-----');
10302   END IF;
10303   FOR l_qual IN l_int_qual_cur(G_DETAIL_LEVEL) LOOP
10304     x_line_detail_qual_tbl(I).LINE_DETAIL_INDEX := l_qual.LINE_DETAIL_INDEX;
10305     x_line_detail_qual_tbl(I).QUALIFIER_CONTEXT := l_qual.CONTEXT;
10306     x_line_detail_qual_tbl(I).QUALIFIER_ATTRIBUTE := l_qual.ATTRIBUTE;
10307     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM := l_qual.SETUP_VALUE_FROM;
10308     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO := l_qual.SETUP_VALUE_TO;
10309     x_line_detail_qual_tbl(I).COMPARISON_OPERATOR_CODE := l_qual.COMPARISON_OPERATOR_TYPE_CODE;
10310     x_line_detail_qual_tbl(I).status_code := l_qual.PRICING_STATUS_CODE;
10311     x_line_detail_qual_tbl(I).VALIDATED_FLAG :=l_qual.VALIDATED_FLAG;
10312 
10313   I:=I+1;
10314   END LOOP;
10315   I:=1;
10316 
10317 --LINE ATTRIBUTE DETAIL NEEDED
10318   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10319   engine_debug('----Before populate attr_tbl-----');
10320   END IF;
10321  FOR l_prc IN l_int_pricing_attr_cur LOOP
10322     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10323     engine_debug('--------populating x_line_detail_attr----------');
10324     engine_debug('Line Detail Index: '||l_prc.LINE_DETAIL_INDEX);
10325     END IF;
10326     x_line_detail_attr_tbl(I).LINE_DETAIL_INDEX := l_prc.LINE_DETAIL_INDEX;
10327     x_line_detail_attr_tbl(I).PRICING_CONTEXT := l_prc.PRICING_CONTEXT;
10328     x_line_detail_attr_tbl(I).PRICING_ATTRIBUTE := l_prc.PRICING_ATTRIBUTE;
10329     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_FROM :=l_prc.PRICING_ATTR_VALUE_FROM;
10330     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_TO :=l_prc.PRICING_ATTR_VALUE_TO;
10331     x_line_detail_attr_tbl(I).VALIDATED_FLAG :=l_prc.VALIDATED_FLAG;
10332     --x_line_attr_tbl(I).PRICING_STATUS_CODE := l_prc.PRICING_STATUS_CODE;
10333     --x_line_attr_tbl(I).PRICING_STATUS_TEXT := l_prc.PRICING_STATUS_TEXT;
10334   I:=I+1;
10335   END LOOP;
10336 
10337   I:=1;
10338 
10339   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10340   engine_debug('----Before populate l_rltd_lines_tbl-----');
10341   END IF;
10342   FOR l_rltd IN l_int_rltd_lines_cur LOOP
10343      x_related_lines_tbl(I).LINE_INDEX := l_rltd.Line_index;
10344      x_related_lines_tbl(I).LINE_DETAIL_INDEX :=  l_rltd.LINE_DETAIL_INDEX;
10345      x_related_lines_tbl(I).RELATIONSHIP_TYPE_CODE :=l_rltd.RELATIONSHIP_TYPE_CODE;
10346      x_related_lines_tbl(I).RELATED_LINE_INDEX     :=l_rltd.RELATED_LINE_INDEX;
10347      x_related_lines_tbl(I).RELATED_LINE_DETAIL_INDEX :=l_rltd.RELATED_LINE_DETAIL_INDEX;
10348      x_related_lines_tbl(I).STATUS_CODE :=l_rltd.PRICING_STATUS_CODE;
10349      x_related_lines_tbl(I).STATUS_TEXT :=l_rltd.PRICING_STATUS_TEXT;
10350   I:=I+1;
10351   END LOOP;
10352 END IF;
10353 
10354 EXCEPTION
10355 WHEN E_ROUTINE_ERROR THEN
10356    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10357    engine_debug(l_routine||':'||substr(l_status_text,1,240));
10358    END IF;
10359 
10360 END;
10361 
10362 PROCEDURE Eliminate_Multiple_Hierarchies(p_pricing_phase_id NUMBER,
10363                                          x_status_code OUT NOCOPY VARCHAR2,
10364                                          x_status_text OUT NOCOPY VARCHAR2) AS
10365 
10366 /*
10367 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
10368 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
10369 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
10370 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
10371 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
10372 
10373 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10374 
10375 */
10376 
10377 --Pricing Phase Change
10378 CURSOR l_get_multiple_exclude_cur IS
10379 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) l_get_multiple_exclude_cur */
10380        distinct a.line_index , a.list_header_id , a.list_line_id , a.grouping_number grouping_no,
10381        a.context , a.attribute , a.setup_value_from
10382 FROM   qp_npreq_line_attrs_tmp a , qp_npreq_ldets_tmp b
10383 WHERE
10384        a.comparison_operator_type_code = 'NOT ='
10385 AND    a.attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE)
10386 AND    a.pricing_status_code = G_STATUS_NEW
10387 AND    a.pricing_phase_id = p_pricing_phase_id
10388 AND    a.line_index > 0
10389 AND    a.line_detail_index = b.line_detail_index
10390 AND    b.pricing_status_code = G_STATUS_NEW
10391 order  by a.line_index,a.list_header_id,a.list_line_id, a.grouping_number;
10392 
10393 /*
10394 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,line_index,1
10395 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
10396 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,context,3
10397 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,attribute,4
10398 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
10399 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,value_from,6
10400 */
10401 CURSOR l_get_passed_hierarchy_cur(p_line_index NUMBER,
10402                                   p_context   VARCHAR2,
10403                                   p_attribute VARCHAR2,
10404                                   p_value     VARCHAR2) IS
10405 SELECT value_from
10406 FROM   qp_npreq_line_attrs_tmp
10407 WHERE  context = p_context
10408 AND    attribute = p_attribute
10409 AND    value_from = p_value
10410 AND    line_index = p_line_index
10411 AND    attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE )
10412 AND    pricing_status_code = G_STATUS_UNCHANGED;
10413 
10414 l_del_list_line_tbl    NUMBER_TYPE;
10415 l_del_list_header_tbl  NUMBER_TYPE;
10416 l_del_line_index_tbl   NUMBER_TYPE;
10417 l_del_ind              PLS_INTEGER := 0;
10418 l_list_line_index      NUMBER := -9999;
10419 l_list_line_id         NUMBER := -9999;
10420 l_list_header_id       NUMBER := -9999;
10421 l_list_attr_type       VARCHAR2(30) := 'NULL';
10422 l_grouping_no          NUMBER := -9999999999999;
10423 l_setup_context        VARCHAR2(240);
10424 l_setup_attribute      VARCHAR2(240);
10425 l_setup_value_from     VARCHAR2(240);
10426 l_passed_value_from    VARCHAR2(240);
10427 l_deleted_flag         BOOLEAN := FALSE;
10428 l_status_code          VARCHAR2(30);
10429 l_status_text          VARCHAR2(240);
10430 l_routine              CONSTANT VARCHAR2(240) := 'QP_PREQ_GRP.Eliminate_Multiple_Hierarchies';
10431 
10432 E_ROUTINE_ERRORS        EXCEPTION;
10433 
10434 BEGIN
10435  qp_debug_util.tstart('Eliminate_Multiple_Hierarchies','Procedure Eliminate_Multiple_Hierarchies');
10436   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10437  engine_debug('In procedure Eliminate_Multiple_Hierarchies');
10438 
10439  END IF;
10440  FOR i IN l_get_multiple_exclude_cur
10441  LOOP
10442 
10443   IF (l_list_line_index <> i.line_index or l_list_line_id <> i.list_line_id or l_grouping_no <> i.grouping_no or
10444 	    l_deleted_flag = FALSE) THEN
10445 
10446    l_passed_value_from := NULL; -- Init
10447    l_deleted_flag := FALSE;
10448 
10449    --l_setup_context := i.context;
10450    --l_setup_attribute := i.attribute;
10451    --l_setup_value_from := i.setup_value_from;
10452 
10453    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10454    engine_debug('EMH Context:' || i.context || ' EMH Attribute:' || i.attribute || ' EMH Passed Value : '||i.setup_value_from);
10455    engine_debug('EMH Excluded Passed Value From Setup: ' || i.setup_value_from);
10456 
10457    END IF;
10458    OPEN  l_get_passed_hierarchy_cur(i.line_index,i.context,i.attribute,i.setup_value_from);
10459    FETCH l_get_passed_hierarchy_cur INTO l_passed_value_from;
10460    CLOSE l_get_passed_hierarchy_cur;
10461 
10462    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10463    engine_debug('EMH Excluded Passed Value From Sourcing: ' || l_passed_value_from);
10464 
10465    END IF;
10466    IF (l_passed_value_from IS NOT NULL) THEN
10467     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10468     engine_debug('EMH Deleted Flag is True');
10469     END IF;
10470     l_del_ind := l_del_ind + 1;
10471     l_del_list_line_tbl(l_del_ind) := i.list_line_id;
10472     l_del_list_header_tbl(l_del_ind) := i.list_header_id;
10473     l_del_line_index_tbl(l_del_ind) := i.line_index;
10474     l_deleted_flag := TRUE;
10475    END IF;
10476 
10477   END IF;
10478 
10479   l_list_line_index := i.line_index;
10480   l_list_line_id := i.list_line_id;
10481   l_list_header_id := i.list_header_id;
10482   l_grouping_no := i.grouping_no;
10483 
10484  END LOOP;
10485 
10486  -- Delete the multiple hierarchies
10487  IF (l_del_list_line_tbl.COUNT > 0) THEN
10488   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10489   engine_debug('Actually Deleting');
10490   END IF;
10491   FORALL j IN l_del_list_line_tbl.FIRST .. l_del_list_line_tbl.LAST
10492 /*
10493 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
10494 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
10495 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
10496 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
10497 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
10498 */
10499   UPDATE qp_npreq_line_attrs_tmp --upd1
10500   SET    pricing_status_code = G_DELETED_EXCLUDER
10501   WHERE  list_header_id = l_del_list_header_tbl(j)
10502   AND    list_line_id = l_del_list_line_tbl(j)
10503   AND    line_index = l_del_line_index_tbl(j)
10504   AND    comparison_operator_type_code = 'NOT ='
10505   AND    pricing_status_code = G_STATUS_NEW -- Expect an issue because of this join condition
10506   AND    attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE);
10507 
10508   /* FORALL j IN l_del_list_line_tbl.FIRST .. l_del_list_line_tbl.LAST
10509   UPDATE qp_npreq_ldets_tmp
10510   SET    pricing_status_code = G_DELETED_EXCLUDER
10511   WHERE  created_from_list_header_id = l_del_list_header_tbl(j)
10512   AND    created_from_list_line_id = l_del_list_line_tbl(j)
10513   AND    line_index = l_del_line_index_tbl(j)
10514   AND    pricing_phase_id = p_pricing_phase_id; */
10515  END IF;
10516 
10517  -- shu fix bug 1915355
10518  -- To delete duplicate list lines selected by ask for and regular cursors
10519  IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN
10520   Delete_Duplicate_List_Lines(p_pricing_phase_id,l_status_code,l_status_text);
10521   IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
10522    RAISE E_ROUTINE_ERRORS;
10523   END IF;
10524  END IF;
10525 qp_debug_util.tstop('Eliminate_Multiple_Hierarchies');
10526 EXCEPTION
10527   WHEN E_ROUTINE_ERRORS THEN
10528     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10529     engine_debug(l_routine||': '||l_status_text);
10530    END IF;
10531    x_status_code := FND_API.G_RET_STS_ERROR;
10532    x_status_text := l_routine||': '||l_status_text;
10533    qp_debug_util.tstop('Eliminate_Multiple_Hierarchies');
10534   WHEN OTHERS THEN
10535    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10536    engine_debug(l_routine||' '||SQLERRM);
10537    END IF;
10538    x_status_code := FND_API.G_RET_STS_ERROR;
10539    x_status_text := 'Error in '||l_routine||SQLERRM;
10540    qp_debug_util.tstop('Eliminate_Multiple_Hierarchies');
10541 END Eliminate_Multiple_Hierarchies;
10542 
10543 /*+--------------------------------------------------------
10544   |PROCEDURE PROCESS_LINE_GROUP
10545   |This procedure sum OUT quantity/amt
10546   |across all lines that have same product context,attribute,value
10547   |, pricing context,attribute and have list_line which is
10548   |line group.  The output on the sum will be populated
10549   |either on GROUP_QUANTITY or qualifier_amt column
10550   |of qp_npreq_lines_tmp.
10551   +--------------------------------------------------------
10552 */
10553 
10554 PROCEDURE PROCESS_LINE_GROUP(p_pricing_phase_id NUMBER,
10555                            x_status_code OUT NOCOPY VARCHAR2,
10556                            x_status_text OUT NOCOPY VARCHAR2) AS
10557 /*
10558 -- Might need a new index with pricing_phase_id
10559 */
10560 
10561 l_routine VARCHAR2(30) := 'Process_Line_Group';
10562 
10563 CURSOR line_grp_cur  IS
10564 select  /*+ ORDERED USE_NL(c a ) index(a qp_pricing_attributes_n2) line_grp_cur */
10565 b.created_from_list_line_id list_line_id , c.context , c.attribute ,
10566  sum(qp_number.canonical_to_number(c.value_from)) group_value
10567 from
10568  qp_npreq_ldets_tmp b , qp_npreq_line_attrs_tmp c , qp_pricing_attributes a
10569 where
10570     b.modifier_level_code  = G_LINE_GROUP
10571 and b.pricing_phase_id = p_pricing_phase_id
10572 and c.pricing_status_code = G_STATUS_UNCHANGED
10573 and c.context = G_PRIC_VOLUME_CONTEXT
10574 and c.attribute_type = G_PRICING_TYPE
10575 and b.line_index = c.line_index
10576 and b.pricing_status_code = G_STATUS_NEW
10577 and a.list_line_id = b.created_from_list_line_id
10578 and a.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT
10579 and a.pricing_attribute = c.attribute
10580 group by b.created_from_list_line_id , c.context , c.attribute;
10581 
10582 /*select  c.list_line_id list_line_id , c.context , c.attribute ,
10583  sum(qp_number.canonical_to_number(c.value_from)) group_value
10584 from
10585  qp_npreq_line_attrs_tmp c
10586 where
10587     c.modifier_level_code  = G_LINE_GROUP
10588 and c.pricing_phase_id = p_pricing_phase_id
10589 and c.pricing_status_code = G_STATUS_NEW
10590 and c.context = G_PRIC_VOLUME_CONTEXT
10591 and c.attribute_type = G_PRICING_TYPE
10592 and c.pricing_status_code = G_STATUS_NEW
10593 group by c.list_line_id , c.context , c.attribute ; */
10594 
10595 --begin 2388011, grp_pbh_amt
10596 CURSOR l_get_list_price_cur(p_list_line_id NUMBER) IS
10597    SELECT a.LINE_INDEX ,a.UNIT_PRICE
10598    FROM   qp_npreq_lines_tmp a,qp_npreq_ldets_tmp b
10599    WHERE  a.LINE_INDEX  = b.LINE_INDEX
10600    AND    b.CREATED_FROM_LIST_LINE_ID = p_list_line_id;
10601 --end 2388011, grp_pbh_amt
10602 
10603 l_GROUP_QUANTITY NUMBER;
10604 l_GROUP_AMOUNT   NUMBER;
10605 l_dummy          VARCHAR2(1);
10606 
10607 -- begin shu,  2388011, grp_pbh_amt
10608 l_list_price     NUMBER;
10609 l_group_amount_per_unit NUMBER;
10610 G_LINE_INDEX_TBL_G             PLS_INTEGER_TYPE;
10611 G_UNIT_PRICE_TBL_G             NUMBER_TYPE;
10612 G_GROUP_AMOUNT_PER_UNIT_TBL_G  NUMBER_TYPE;
10613 nROWS CONSTANT NUMBER := 1000;
10614 -- end shu,  2388011, grp_pbh_amt
10615 
10616 
10617 BEGIN
10618 
10619 --If no data has LINE_GROUP Modifier
10620 --don't bother to proceed
10621 
10622 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10623 engine_debug('Starting process linegroup');
10624 
10625 END IF;
10626 FOR J IN line_grp_cur LOOP
10627 
10628   IF J.attribute = G_QUANTITY_ATTRIBUTE THEN
10629       l_group_quantity := J.group_value;
10630       l_group_amount   := NULL;
10631   ELSE
10632       l_group_amount   := J.group_value;
10633       l_group_quantity := NULL;
10634   END IF;
10635 
10636   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10637   engine_debug('J.context : '||J.context);
10638   engine_debug('J.product_attribute : '||J.attribute);
10639   engine_debug('J.value_from : '||J.group_value);
10640   engine_debug('l_GROUP_QUANTITY: '||l_group_quantity);
10641   engine_debug('l_GROUP_AMOUNT: '  ||l_group_amount);
10642   engine_debug('List Line Id: '  ||j.list_line_id);
10643 
10644   END IF;
10645  IF (j.attribute = G_QUANTITY_ATTRIBUTE) THEN
10646 
10647   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10648   engine_debug('Updating Quantity Attribute');
10649 
10650   END IF;
10651 
10652 /*
10653 INDX,QP_PREQ_GRP.process_line_group.upd1,-No Index Used-,NA,NA
10654 */
10655   /*UPDATE qp_npreq_line_attrs_tmp --upd1
10656   SET GROUP_QUANTITY = l_group_quantity
10657   WHERE LIST_LINE_ID = j.list_line_id;*/
10658 
10659 /*
10660 INDX,QP_PREQ_GRP.process_line_group.upd2,-No Index Used-,NA,NA
10661 */
10662   UPDATE qp_npreq_ldets_tmp --upd2
10663   SET LINE_QUANTITY = l_group_quantity,  -- 2388011_latest, shu fix pbh_grp_amt
10664   GROUP_QUANTITY = l_group_quantity,  -- 2388011_latest, shu fix pbh_grp_amt
10665   SELECTED_VOLUME_ATTR = G_QUANTITY -- 2388011_latest
10666   WHERE CREATED_FROM_LIST_LINE_ID = j.list_line_id;
10667 
10668  ELSE
10669   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10670    engine_debug('Updating Amount Attribute');
10671   END IF;
10672 
10673    -- begin shu, fix group of lines lumpsum based on ITEM_AMOUNT, 2388011
10674 
10675   OPEN l_get_list_price_cur(j.list_line_id);
10676 
10677   LOOP
10678     G_LINE_INDEX_TBL_G.delete;
10679     G_UNIT_PRICE_TBL_G.delete;
10680 
10681   FETCH l_get_list_price_cur BULK COLLECT INTO
10682      G_LINE_INDEX_TBL_G
10683    , G_UNIT_PRICE_TBL_G LIMIT nROWS;
10684   EXIT WHEN G_LINE_INDEX_TBL_G.COUNT = 0;
10685 
10686    IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
10687     FOR I in G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
10688     LOOP
10689   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10690      engine_debug('Line Index : '  ||g_line_index_tbl_g(I));
10691      engine_debug('Unit Price : '  ||g_unit_price_tbl_g(I));
10692    END IF; -- 4033618
10693      IF (G_UNIT_PRICE_TBL_G(I) IS NOT NULL and G_UNIT_PRICE_TBL_G(I) <> 0) THEN -- avoid division by zero
10694         G_GROUP_AMOUNT_PER_UNIT_TBL_G(I) := l_group_amount/G_UNIT_PRICE_TBL_G(I);
10695      ELSE
10696         IF (G_UNIT_PRICE_TBL_G(I) = 0 ) THEN
10697          G_GROUP_AMOUNT_PER_UNIT_TBL_G(I):= 0;
10698         ELSE -- unit price is NULL
10699          G_GROUP_AMOUNT_PER_UNIT_TBL_G(I) :=l_group_amount; -- ASK RAVI? why not 0
10700         END IF;
10701      END IF;
10702    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10703      engine_debug('Group Amount Per Unit: '  ||g_group_amount_per_unit_tbl_g(I));
10704    END IF; -- 4033618
10705     END LOOP;
10706    END IF;
10707 
10708 /*
10709 INDX,QP_PREQ_GRP11.process_line_group.upd4,-No Index Used-,NA,NA
10710 */
10711    IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
10712     FORALL I IN G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
10713      UPDATE qp_npreq_ldets_tmp --upd4
10714      SET GROUP_AMOUNT = G_GROUP_AMOUNT_PER_UNIT_TBL_G(I),
10715         LINE_QUANTITY = l_group_amount, -- 2388011_latest
10716         SELECTED_VOLUME_ATTR = G_AMOUNT -- 2388011_latest
10717      WHERE CREATED_FROM_LIST_LINE_ID = j.list_line_id
10718      AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I);
10719    END IF;
10720 
10721   END LOOP;
10722   CLOSE l_get_list_price_cur;
10723  END IF;
10724 
10725 END LOOP;
10726 
10727 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10728 engine_debug('End process line group');
10729 
10730 END IF;
10731 EXCEPTION
10732   WHEN NO_DATA_FOUND THEN
10733   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10734   engine_debug('No line group data');
10735   engine_debug('End process line group');
10736   END IF;
10737   RETURN;
10738  WHEN OTHERS THEN
10739    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10740    engine_debug(l_routine||' '||SQLERRM);
10741    END IF;
10742    x_status_code := FND_API.G_RET_STS_ERROR;
10743    x_status_text := l_routine||': '||SQLERRM;
10744 END PROCESS_LINE_GROUP;
10745 
10746 /*+----------------------------------------------------------
10747   |Is_Line_Group
10748   +---------------------------------------------------------
10749 */
10750 FUNCTION Is_Line_Group (p_line_detail_index IN PLS_INTEGER:=NULL,
10751                         p_line_index        IN NUMBER:=NULL) RETURN BOOLEAN
10752 AS
10753 l_dummy VARCHAR2(30);
10754 l_routine VARCHAR2(240):='QP_PREQ_GRP.Is_Line_Group';
10755 BEGIN
10756 
10757   IF (p_line_detail_index IS NOT NULL) THEN
10758 /*
10759 INDX,QP_PREQ_GRP.is_line_group.is_line_group_sel1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10760 */
10761      SELECT 'X'
10762      INTO   l_dummy
10763      FROM   qp_npreq_ldets_tmp
10764      WHERE  line_detail_index = p_line_detail_index
10765      AND    modifier_level_code = G_LINE_GROUP;
10766   ELSE
10767 /*
10768 INDX,QP_PREQ_GRP.is_line_group.is_line_group_sel2,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
10769 */
10770       SELECT 'X'
10771       INTO   l_dummy
10772       FROM   qp_npreq_ldets_tmp
10773       WHERE  line_index = p_line_index
10774       AND    modifier_level_code = G_LINE_GROUP;
10775   END IF;
10776 
10777 RETURN TRUE;
10778 
10779 EXCEPTION
10780   WHEN NO_DATA_FOUND THEN
10781     RETURN FALSE;
10782 END Is_Line_Group;
10783 
10784 /*+------------------------------------------------------
10785   |Is_Uom_Match
10786   |
10787   +-----------------------------------------------------
10788 */
10789 
10790 Function Is_Uom_Match(p_line_index       IN PLS_INTEGER,
10791                       p_product_uom_code IN VARCHAR2
10792                       ) RETURN BOOLEAN
10793 AS
10794 
10795 l_dummy VARCHAR2(1);
10796 
10797 BEGIN
10798   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10799   engine_debug('p_line_index : '||p_line_index);
10800   engine_debug('p_product_uom_code: '||nvl(p_product_uom_code,'Null'));
10801   END IF;
10802 /*
10803 INDX,QP_PREQ_GRP.is_uom_match.is_uom_match_sel1,qp_npreq_lines_tmp_N1,LINE_INDEX,1
10804 */
10805   SELECT 'X'
10806   INTO l_dummy
10807   FROM qp_npreq_lines_tmp qplines
10808   WHERE qplines.LINE_INDEX = p_line_index
10809   AND   nvl(qplines.PRICED_UOM_CODE,qplines.LINE_UOM_CODE)  =
10810 	   nvl(p_product_uom_code,nvl(qplines.PRICED_UOM_CODE,qplines.LINE_UOM_CODE));
10811 
10812 RETURN TRUE;
10813 
10814 EXCEPTION
10815  WHEN NO_DATA_FOUND THEN
10816  RETURN FALSE;
10817 
10818 END;
10819 
10820 /*+-----------------------------------------------------------
10821   |Covert_Uom
10822   |This procedure will try to convert ordered uom to
10823   |primary uom.
10824   +-----------------------------------------------------------
10825 */
10826 
10827 PROCEDURE Convert_Uom(p_order_uom_code      IN  VARCHAR2,
10828                       p_primary_uom_code IN  VARCHAR2,
10829                       p_value            IN  NUMBER,
10830                       x_converted_value  OUT NOCOPY NUMBER,
10831                       x_status_code      OUT NOCOPY VARCHAR2,
10832                       x_status_text      OUT NOCOPY VARCHAR2) AS
10833 
10834 --l_primary_uom VARCHAR2(3):=NULL;
10835 --l_line_uom_code VARCHAR2(3):=NULL;
10836 E_INVALID_UOM EXCEPTION;
10837 l_item_id     NUMBER := 0;
10838 l_uom_rate    NUMBER;
10839 l_routine VARCHAR2(240):= 'QP_PREQ_GRP.Convert_Uom';
10840 BEGIN
10841 
10842 x_status_code := FND_API.G_RET_STS_SUCCESS;
10843 
10844             INV_CONVERT.INV_UM_CONVERSION(p_order_uom_code,
10845                                           p_primary_uom_code,
10846                                           l_item_id,
10847                                           l_uom_rate);
10848 
10849              IF (l_uom_rate >= 0) THEN
10850               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10851              	engine_debug ('conversion rate: '||l_uom_rate);
10852               END IF;
10853                x_converted_value := p_value * l_uom_rate;
10854              ELSE
10855                Raise E_INVALID_UOM;
10856              END IF;
10857 
10858 
10859 EXCEPTION
10860 
10861   WHEN E_INVALID_UOM THEN
10862      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10863      engine_debug('Invalid UOM');
10864      END IF;
10865      x_status_code := FND_API.G_RET_STS_ERROR;
10866      x_status_text := 'Invalid UOM';
10867   WHEN OTHERS THEN
10868      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10869      engine_debug(l_routine||': '||SQLERRM);
10870      END IF;
10871      x_status_code := FND_API.G_RET_STS_ERROR;
10872      x_status_text := l_routine||': '||SQLERRM;
10873 END Convert_Uom;
10874 
10875 /*+----------------------------------------------------------
10876   |Update_Request_Line_Status(For request lines that have price list passed)
10877   +----------------------------------------------------------
10878 */
10879 PROCEDURE Update_Request_Line_Status(p_control_rec  CONTROL_RECORD_TYPE,
10880                                      p_status_code  VARCHAR2,
10881                                      p_freeze_override_flag IN VARCHAR2, --[julin/4708044]
10882                                      x_status_code OUT NOCOPY VARCHAR2,
10883                                      x_status_text OUT NOCOPY VARCHAR2) AS
10884 
10885 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.Update_Request_Line_Status';
10886 l_rounding_factor NUMBER:= NULL;
10887 
10888 BEGIN
10889 qp_debug_util.tstart('UPDATE_REQUEST_LINE_STATUS','Procedure UPDATE_REQUEST_LINE_STATUS');
10890  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10891  engine_debug('In Update Request Line Status : ' || p_status_code);
10892  END IF;
10893 
10894 /*  --po integration start
10895   UPDATE qp_npreq_lines_tmp a
10896   SET    pricing_status_code = G_STATUS_UPDATED
10897   Where    list_price_override_flag in ('Y', 'O')  --po integration
10898   AND   line_type_code <> G_ORDER_LEVEL;
10899   --po integration end
10900 */
10901 
10902 
10903  IF (p_status_code = 'SUCCESS') THEN
10904 /*
10905 INDX,QP_PREQ_GRP.update_request_line_status.update_request_line_status_upd1,-No Index Used-,NA,NA
10906 */
10907 /*
10908 INDX,QP_PREQ_GRP.update_request_line_status.sel1,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
10909 INDX,QP_PREQ_GRP.update_request_line_status.sel1,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
10910 INDX,QP_PREQ_GRP.update_request_line_status.sel1,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
10911 */
10912 
10913   UPDATE qp_npreq_lines_tmp a
10914   SET    pricing_status_code = G_STATUS_UPDATED
10915         ,processed_code = NULL -- bug 3501150
10916   WHERE  EXISTS (SELECT 'x'
10917   		from qp_npreq_ldets_tmp b
10918                 WHERE a.line_index = b.line_index
10919                 AND   b.pricing_status_code = G_STATUS_NEW
10920   		AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
10921   AND   line_type_code <> G_ORDER_LEVEL;
10922 
10923   -- To make sure lines which did not get the price and do not have a record in qp_npreq_ldets_tmp get picked up
10924   UPDATE qp_npreq_lines_tmp a
10925   SET    processed_code = G_STS_LHS_NOT_FOUND
10926   WHERE  NOT EXISTS (SELECT 'x'
10927                 FROM   qp_npreq_ldets_tmp b
10928                 WHERE a.line_index = b.line_index
10929                 AND   b.pricing_status_code = G_STATUS_NEW
10930                 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
10931   AND   line_type_code <> G_ORDER_LEVEL
10932   AND   list_price_override_flag = 'N' --po integration
10933   AND   pricing_status_code NOT IN (G_STATUS_DUP_PRICE_LIST,G_STATUS_INVALID_UOM_CONV)
10934   AND  (price_flag = G_YES OR --[julin/4708044]
10935         (price_flag = G_PHASE AND p_freeze_override_flag = G_YES));
10936 
10937 
10938   /* --IF (nvl(p_control_rec.rounding_flag,G_YES) = G_YES) THEN
10939   -- need rounding_factor when 'Y', 'Q', 'U'
10940   IF (nvl(p_control_rec.rounding_flag,G_YES) <> 'N') THEN -- shu new rounding
10941 
10942         DECLARE
10943 
10944         	CURSOR tmp_data IS
10945 		SELECT rounding_factor FROM qp_npreq_lines_tmp;
10946         BEGIN
10947 
10948   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10949 		engine_debug ('G_MCURR_PROFILE: '||G_MULTI_CURRENCY_PROFILE);
10950 		engine_debug ('p_control_rec.use_multi_currency: '||p_control_rec.use_multi_currency);
10951   END IF;
10952 		-- cannot use IF G_MCURR_INSTALLED_USED here, it is null
10953 		IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
10954 
10955                         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10956                         engine_debug ('get rounding_factor from qp_currency_details table...');
10957                         END IF;
10958 
10959                         UPDATE qp_npreq_lines_tmp a
10960    			SET    ROUNDING_FACTOR = (SELECT qcdt.selling_rounding_factor
10961 					FROM qp_currency_details qcdt, qp_list_headers_b qhdr
10962 					WHERE qhdr.list_header_id = a.price_list_header_id
10963 					AND qhdr.currency_header_id = qcdt.currency_header_id
10964 					AND qcdt.to_currency_code = a.currency_code
10965 					AND a.pricing_effective_date BETWEEN
10966                            		NVL(TRUNC(qcdt.start_date_active),a.pricing_effective_date)
10967                            		AND NVL(TRUNC(qcdt.end_date_active),a.pricing_effective_date)
10968                            		AND ROWNUM <2) -- there maybe more than one rows rtrns here
10969                				WHERE ROUNDING_FACTOR IS NULL;
10970 
10971 		ELSE -- multi curr not installed not used, obtain rounding_factor from qp_list_headers_b
10972 
10973    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10974 			engine_debug('get rounding factor from qp_list_headers_b...');
10975    END IF;
10976 			UPDATE qp_npreq_lines_tmp a
10977    			SET    ROUNDING_FACTOR = (SELECT qhdr.rounding_factor
10978                         	FROM  qp_list_headers_b qhdr
10979                         	WHERE qhdr.list_header_id = a.price_list_header_id)
10980                 	WHERE ROUNDING_FACTOR IS NULL;
10981 
10982                 END IF; -- END IF G_MCURR_INSTALLED_USED = G_YES
10983 
10984 
10985                 FOR i IN tmp_data LOOP
10986                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10987                 	engine_debug ('final rounding_factor ' ||i.rounding_factor);
10988                  END IF;
10989 		end LOOP;
10990 
10991 
10992 	EXCEPTION
10993 		WHEN no_data_found THEN
10994    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10995 			engine_debug ('no_data_found occurred while obtaining rounding_factor');
10996    END IF;
10997 		WHEN others THEN
10998    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10999 			engine_debug ('error obtaining_rounding_factor: ' || SQLERRM);
11000    END IF;
11001 	END; -- end declare
11002   END IF; -- end p_rounding_flag = 'Y' */
11003 
11004  ELSE
11005 
11006   /*
11007   INDX,QP_PREQ_GRP.update_request_line_status.sel3,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
11008   INDX,QP_PREQ_GRP.update_request_line_status.sel3,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
11009   INDX,QP_PREQ_GRP.update_request_line_status.sel3,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
11010   */
11011 
11012   UPDATE qp_npreq_lines_tmp a
11013   SET    processed_code = G_STS_LHS_NOT_FOUND
11014   WHERE  NOT EXISTS (SELECT 'x'
11015                 FROM   qp_npreq_ldets_tmp b
11016                 WHERE a.line_index = b.line_index
11017                 AND   b.pricing_status_code = G_STATUS_NEW
11018                 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
11019   AND   line_type_code <> G_ORDER_LEVEL
11020   AND   list_price_override_flag in ( 'N', 'O') --po integration
11021   AND  (price_flag = G_YES OR --[julin/4708044]
11022         (price_flag = G_PHASE AND p_freeze_override_flag = G_YES));
11023 
11024  END IF;
11025 qp_debug_util.tstop('UPDATE_REQUEST_LINE_STATUS');
11026 EXCEPTION
11027  WHEN OTHERS THEN
11028      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11029      engine_debug(l_routine || ' ' || SQLERRM);
11030      END IF;
11031      x_status_code := FND_API.G_RET_STS_ERROR;
11032      x_status_text := l_routine||' '||SQLERRM;
11033 	qp_debug_util.tstop('UPDATE_REQUEST_LINE_STATUS');
11034 END Update_Request_Line_Status;
11035 
11036 /*+----------------------------------------------------------
11037   |Evaluate_Between
11038   +----------------------------------------------------------
11039 */
11040 -- Pricing Phase Change
11041 PROCEDURE Evaluate_Between (p_pricing_phase_id IN PLS_INTEGER,
11042                             p_line_group_flag IN VARCHAR2 :=NULL,
11043                             p_line_index IN NUMBER := NULL,
11044                             x_status_code OUT NOCOPY VARCHAR2,
11045                             x_status_text OUT NOCOPY VARCHAR2) AS
11046 
11047 
11048 /*
11049 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
11050 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
11051 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
11052 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
11053 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
11054 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
11055 
11056 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11057 
11058 */
11059 
11060 CURSOR l_pric_between_cur(p_datatype VARCHAR2) IS
11061 SELECT /*+ ORDERED USE_NL(ldets) index(pricing qp_preq_line_attrs_tmp_N5) l_pric_between_cur */
11062           pricing.line_detail_index,
11063 	  pricing.line_index,
11064 	  pricing.value_from,
11065           -- line group not applicable for price lists.ignore any code around line group for price lists
11066 	  pricing.group_quantity,
11067 	  pricing.group_amount,
11068 	  pricing.setup_value_from,
11069 	  pricing.setup_value_to,
11070 	  pricing.product_uom_code,
11071 	  pricing.attribute,
11072 	  pricing.context,
11073           pricing.attribute_type
11074 FROM  qp_npreq_line_attrs_tmp pricing,qp_npreq_ldets_tmp ldets
11075 WHERE pricing.comparison_operator_type_code = G_OPERATOR_BETWEEN
11076 AND   pricing.datatype = p_datatype
11077 AND   pricing.pricing_phase_id = G_PRICE_LIST_PHASE_ID
11078 AND   pricing.attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE)
11079 AND   pricing.pricing_status_code IN (G_STATUS_UNCHANGED,  G_STATUS_NEW)
11080 AND   pricing.line_index > 0
11081 AND   pricing.line_detail_index = ldets.line_detail_index
11082 AND   ldets.pricing_status_code = G_STATUS_NEW
11083 FOR UPDATE of pricing.pricing_status_code;
11084 
11085 /*
11086 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
11087 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
11088 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
11089 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
11090 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
11091 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
11092 
11093 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11094 
11095 */
11096 
11097 CURSOR l_mod_between_cur(p_datatype VARCHAR2) IS
11098 SELECT /*+ ORDERED USE_NL(ldets) index(pricing qp_preq_line_attrs_tmp_N5) l_mod_between_cur */
11099           pricing.line_detail_index,
11100 	  pricing.line_index,
11101 	  pricing.value_from,
11102 	  ldets.group_quantity,
11103 	  ldets.line_quantity group_amount,
11104 	  pricing.setup_value_from,
11105 	  pricing.setup_value_to,
11106 	  pricing.product_uom_code,
11107 	  pricing.attribute,
11108 	  pricing.context,
11109           pricing.attribute_type
11110 FROM  qp_npreq_line_attrs_tmp pricing,qp_npreq_ldets_tmp ldets
11111 WHERE pricing.comparison_operator_type_code = G_OPERATOR_BETWEEN
11112 AND   pricing.datatype = p_datatype
11113 AND   pricing.pricing_phase_id = p_pricing_phase_id
11114 AND   pricing.attribute_type = G_PRICING_TYPE
11115 AND   pricing.pricing_status_code IN (G_STATUS_UNCHANGED,  G_STATUS_NEW)
11116 AND   pricing.line_index > 0
11117 AND   pricing.line_detail_index = ldets.line_detail_index
11118 AND   ldets.pricing_status_code = G_STATUS_NEW
11119 FOR UPDATE of pricing.pricing_status_code;
11120 
11121 /*
11122 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
11123 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
11124 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
11125 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
11126 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
11127 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
11128 
11129 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11130 
11131 */
11132 
11133 CURSOR l_pric_character_between_cur IS
11134 SELECT /*+ ORDERED USE_NL(c) index(b qp_preq_line_attrs_tmp_N5) l_pric_character_between_cur */
11135        b.line_detail_index,
11136        b.line_index,
11137        b.value_from,
11138        b.setup_value_from,
11139        b.setup_value_to,
11140        b.product_uom_code,
11141        b.attribute,
11142        b.context,
11143        b.attribute_type
11144 FROM  qp_npreq_line_attrs_tmp b,qp_npreq_ldets_tmp c
11145 WHERE comparison_operator_type_code = G_OPERATOR_BETWEEN
11146 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID
11147 AND   datatype in (G_DATE_X,G_DATE_Y,G_VARCHAR)
11148 AND   attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE)
11149 AND   b.pricing_status_code IN (G_STATUS_UNCHANGED,G_STATUS_NEW)
11150 AND   b.pricing_phase_id = p_pricing_phase_id
11151 AND   b.line_index > 0
11152 AND   b.line_detail_index = c.line_detail_index
11153 AND   c.pricing_status_code = G_STATUS_NEW
11154 FOR update of b.pricing_status_code;
11155 
11156 /*
11157 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
11158 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
11159 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
11160 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
11161 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
11162 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
11163 
11164 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11165 
11166 */
11167 
11168 CURSOR l_mod_character_between_cur IS
11169 SELECT /*+ ORDERED USE_NL(c) index(b qp_preq_line_attrs_tmp_N5) l_mod_character_between_cur */
11170        b.line_detail_index,
11171        b.line_index,
11172        b.value_from,
11173        b.setup_value_from,
11174        b.setup_value_to,
11175        b.product_uom_code,
11176        b.attribute,
11177        b.context,
11178        b.attribute_type
11179 FROM  qp_npreq_line_attrs_tmp b,qp_npreq_ldets_tmp c
11180 WHERE comparison_operator_type_code = G_OPERATOR_BETWEEN
11181 AND   b.pricing_phase_id = p_pricing_phase_id
11182 AND   datatype in (G_DATE_X,G_DATE_Y,G_VARCHAR)
11183 AND   attribute_type = G_PRICING_TYPE
11184 AND   b.pricing_status_code IN (G_STATUS_UNCHANGED,G_STATUS_NEW)
11185 AND   b.pricing_phase_id = p_pricing_phase_id
11186 AND   b.line_index > 0
11187 AND   b.line_detail_index = c.line_detail_index
11188 AND   c.pricing_status_code = G_STATUS_NEW
11189 FOR update of b.pricing_status_code;
11190 
11191 --[julin/5085310]
11192 CURSOR l_line_amount_cur(p_line_index NUMBER,
11193                        p_line_detail_index NUMBER,
11194                        p_context VARCHAR2,
11195                        p_attribute VARCHAR2,
11196                        p_attribute_type VARCHAR2)
11197 IS
11198 SELECT  /*+ ORDERED USE_NL(a) l_line_amount_cur */
11199        fnd_number.canonical_to_number(c.value_from) group_value,
11200        a.priced_quantity
11201 FROM   qp_npreq_line_attrs_tmp c, qp_npreq_lines_tmp a
11202 WHERE  a.line_index = p_line_index
11203 AND    a.LINE_INDEX  = c.LINE_INDEX
11204 AND    c.line_detail_index = p_line_detail_index
11205 AND    c.context = p_context
11206 AND    c.attribute_type = p_attribute_type
11207 AND    c.attribute = p_attribute;
11208 
11209 l_group_amount		NUMBER;	--shu
11210 l_list_price 		NUMBER;	--shu
11211 
11212 l_line_amount           NUMBER;
11213 l_priced_quantity       NUMBER;
11214 
11215 l_value_from_date       DATE;
11216 l_setup_value_from_date DATE;
11217 l_setup_value_to_date   DATE;
11218 l_value_from_num        NUMBER;
11219 l_setup_value_from_num  NUMBER;
11220 l_setup_value_to_num    NUMBER;
11221 l_dummy                 VARCHAR2(3);
11222 l_qualifier_qty         NUMBER;
11223 l_qualifier_amt         NUMBER;
11224 l_primary_uom           VARCHAR2(3);
11225 l_item_id               NUMBER;
11226 l_uom_rate              NUMBER;
11227 l_line_uom_code         VARCHAR2(3);
11228 l_status_code           VARCHAR2(30);
11229 l_status_text           VARCHAR2(240);
11230 l_deleted_between       VARCHAR2(1);
11231 l_is_line_group_flag    VARCHAR2(1);
11232 l_line_detail_tbl       NUMBER_TYPE;
11233 l_count                 PLS_INTEGER := 0;
11234 l_selected_volume_attr  VARCHAR2(1); -- 2388011_new
11235 
11236 l_routine VARCHAR2(30) := 'Evaluate_Between';
11237 BEGIN
11238 qp_debug_util.tstart('Evaluate_Between','Procedure Evaluate_Between');
11239                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11240 QP_PREQ_GRP.engine_debug('In Evaluate Between' );
11241 
11242                  END IF;
11243 --Evaluate Between operator
11244 IF (p_line_group_flag IS NULL) THEN
11245 
11246   --Character and date between
11247  IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
11248                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11249    QP_PREQ_GRP.engine_debug('Before Opening Price List Character Date Between Cur');
11250                     END IF;
11251   FOR I IN l_pric_character_between_cur LOOP
11252                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11253    QP_PREQ_GRP.engine_debug('In Price List Character Date Between Cur');
11254                     END IF;
11255    IF (I.value_from NOT BETWEEN nvl(I.setup_value_from,I.value_from) and nvl(I.setup_value_to,I.value_from)) THEN
11256 
11257     -- If it is a pricing attribute and it fails on between we can delete it right away
11258     IF (I.attribute_type = 'PRICING') THEN
11259      l_count := l_count + 1;
11260      l_line_detail_tbl(l_count) := I.line_detail_index;
11261     ELSE
11262      UPDATE qp_npreq_line_attrs_tmp
11263      SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11264      WHERE CURRENT OF l_pric_character_between_cur;
11265     END IF;
11266    END IF;
11267   END LOOP;
11268  ELSE
11269                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11270   QP_PREQ_GRP.engine_debug('Before Opening Modifiers Character Date Between Cur');
11271                    END IF;
11272   FOR I IN l_mod_character_between_cur LOOP
11273                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11274    QP_PREQ_GRP.engine_debug('In Modifiers Character Date Between Cur');
11275                     END IF;
11276    IF (I.value_from NOT BETWEEN nvl(I.setup_value_from,I.value_from) and nvl(I.setup_value_to,I.value_from)) THEN
11277 
11278     -- If it is a pricing attribute and it fails on between we can delete it right away
11279     IF (I.attribute_type = 'PRICING') THEN
11280      l_count := l_count + 1;
11281      l_line_detail_tbl(l_count) := I.line_detail_index;
11282     ELSE
11283      UPDATE qp_npreq_line_attrs_tmp
11284      SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11285      WHERE CURRENT OF l_mod_character_between_cur;
11286     END IF;
11287    END IF;
11288   END LOOP;
11289  END IF; -- IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID)
11290 
11291 END IF; -- p_line_group_flag is null
11292 
11293  --Handle between with numeric data type
11294 
11295 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
11296                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11297  QP_PREQ_GRP.engine_debug('Before Opening Price List Numeric Between Cur');
11298 
11299                   END IF;
11300  FOR I IN l_pric_between_cur(p_datatype => G_NUMERIC) LOOP
11301 
11302                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11303   QP_PREQ_GRP.engine_debug('In Price List Numeric Between Cur');
11304 
11305                    END IF;
11306   l_deleted_between := 'F';
11307 
11308   IF I.context = G_PRIC_VOLUME_CONTEXT THEN
11309    IF(Is_Line_Group(p_line_detail_index => I.line_detail_index) = TRUE) THEN
11310                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11311     QP_PREQ_GRP.engine_debug('Is Line Group #100');
11312 
11313                      END IF;
11314     l_is_line_group_flag := 'T';
11315 
11316     IF (p_line_group_flag IS NOT NULL) THEN
11317      IF I.attribute = G_QUANTITY_ATTRIBUTE THEN
11318           l_value_from_num := I.group_quantity;
11319           l_selected_volume_attr := G_QUANTITY; -- 2388011_new
11320      ELSIF (I.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11321       IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN
11322            l_value_from_num := I.group_amount;
11323       END IF;
11324       l_selected_volume_attr := G_AMOUNT; -- 2388011_new
11325      ELSE -- For Order Amount,Period1 Amount  kind of attributes
11326       l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11327      END IF;
11328     ELSE -- Make it a success,because line group between is done again,so do not delete
11329       l_value_from_num :=  NULL;
11330     END IF;
11331 
11332      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11333      engine_debug('Is line group');
11334      engine_debug('Group Quantity : ' || l_value_from_num);
11335      engine_debug('Line detail index: '||I.line_detail_index);
11336      END IF;
11337    ELSE  -- is not a line group
11338      l_is_line_group_flag := 'F';
11339      l_value_from_num := qp_number.canonical_to_number(I.value_from);
11340      -- begin 2388011_new
11341      IF (I.attribute = G_QUANTITY_ATTRIBUTE) THEN
11342       l_selected_volume_attr := G_QUANTITY;
11343      ELSIF (I.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11344       l_selected_volume_attr := G_AMOUNT;
11345      ELSE -- 2388011_latest
11346        l_selected_volume_attr := 'O'; -- 2388011_latest, for weight volume attribute
11347      END IF;
11348      -- end 2388011_new
11349    END IF;-- END is a line group
11350  ELSE    --else Not a Volume Context
11351   l_is_line_group_flag := 'F';
11352   l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11353  END IF;
11354 
11355 
11356   IF (I.setup_value_from IS NULL) THEN
11357     l_setup_value_from_num := l_value_from_num;
11358   ELSE
11359     l_setup_value_from_num :=  qp_number.canonical_to_number(I.setup_value_from);
11360   END IF;
11361 
11362   IF (I.setup_value_to IS NULL) THEN
11363     l_setup_value_to_num := l_value_from_num;
11364   ELSE
11365     l_setup_value_to_num :=  qp_number.canonical_to_number(I.setup_value_to);
11366   END IF;
11367 
11368   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11369   engine_debug('1VALUE: '||l_value_from_num);
11370   engine_debug('2VALUE_FROM: '||l_setup_value_from_num);
11371   engine_debug('3VALUE_TO: '||l_setup_value_to_num);
11372 
11373   END IF;
11374   IF (l_value_from_num NOT BETWEEN l_setup_value_from_num and l_setup_value_to_num) and l_value_from_num IS NOT NULL THEN
11375 
11376     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11377     engine_debug('4NOT BETWEEN');
11378 
11379     END IF;
11380    -- If it is a pricing attribute and it fails on between we can delete it right away
11381    IF (I.attribute_type = 'PRICING') THEN
11382     l_count := l_count + 1;
11383     l_line_detail_tbl(l_count) := I.line_detail_index;
11384    ELSE
11385     UPDATE qp_npreq_line_attrs_tmp
11386     SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11387     WHERE CURRENT OF l_pric_between_cur;
11388     l_deleted_between := 'T';
11389    END IF;
11390   END IF;
11391 
11392   IF (l_deleted_between = 'F') THEN
11393 
11394    IF (I.group_quantity IS NOT NULL and I.group_quantity <> l_value_from_num and l_value_from_num IS NOT NULL
11395 	  and p_line_group_flag IS NOT NULL) THEN
11396    /*
11397    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11398    */
11399     UPDATE qp_npreq_ldets_tmp
11400     SET GROUP_QUANTITY = l_value_from_num
11401     WHERE LINE_INDEX = i.line_index
11402     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11403    END IF;
11404 
11405    -- shu debug msg
11406                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11407     QP_PREQ_GRP.engine_debug('check condition...');
11408     QP_PREQ_GRP.engine_debug('i.group_amount: : '||i.group_amount);
11409     QP_PREQ_GRP.engine_debug('l_value_from_num: '||l_value_from_num);
11410     QP_PREQ_GRP.engine_debug('p_line_group_flag: '||p_line_group_flag);
11411                      END IF;
11412 
11413 
11414    IF (I.group_amount IS NOT NULL and l_value_from_num IS NOT NULL -- shu
11415 	  and p_line_group_flag IS NOT NULL) THEN
11416    /*
11417    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11418    */
11419 
11420 
11421    -- begin shu, fix group of lines lumpsum based on ITEM_AMOUNT
11422 
11423    SELECT UNIT_PRICE INTO l_list_price
11424    FROM   qp_npreq_lines_tmp
11425    WHERE  LINE_INDEX = i.line_index;
11426 
11427    /* Handled l_list_price = 0 bug2385874 */
11428    IF (l_list_price IS NOT NULL and l_list_price <>0) THEN -- avoid division by zero
11429 
11430         l_group_amount := I.group_amount /l_list_price;
11431    ELSE
11432         if l_list_price = 0 then
11433         l_group_amount := 0;
11434         else
11435         l_group_amount :=I.group_amount;
11436         end if;
11437    END IF;
11438 
11439                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11440     QP_PREQ_GRP.engine_debug('line_index: '||i.line_index);
11441     QP_PREQ_GRP.engine_debug('list price: '||l_list_price);
11442     QP_PREQ_GRP.engine_debug('i.group_amount: '||i.group_amount);
11443     QP_PREQ_GRP.engine_debug('group_value: '||l_group_amount);
11444                      END IF;
11445     -- end shu fix
11446 
11447     UPDATE qp_npreq_ldets_tmp
11448     SET   GROUP_AMOUNT = l_group_amount -- shu
11449     WHERE LINE_INDEX = i.line_index
11450     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11451 
11452    END IF;
11453 
11454    --Need the LINE_QUANTITY column to be updated for regular lines with volume attributes, for Calculation purposes
11455    IF (p_line_group_flag IS NULL and l_is_line_group_flag = 'F'
11456        and i.context = G_PRIC_VOLUME_CONTEXT) -- added for [5005328/4911264]
11457    THEN
11458                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11459     QP_PREQ_GRP.engine_debug('Line Index: ' || i.line_index || ' LD Index : ' || i.line_detail_index ||
11460 						' '||l_value_from_num);
11461                      END IF;
11462    /*
11463    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11464    */
11465     UPDATE qp_npreq_ldets_tmp
11466     SET   LINE_QUANTITY = l_value_from_num
11467     WHERE LINE_INDEX = i.line_index
11468     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11469    END IF;
11470 
11471   END IF;
11472  END LOOP;
11473 ELSE
11474                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11475  QP_PREQ_GRP.engine_debug('Before Opening Modifiers Numeric Between Cur');
11476                   END IF;
11477  FOR I IN l_mod_between_cur(p_datatype => G_NUMERIC) LOOP
11478 
11479                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11480   QP_PREQ_GRP.engine_debug('In Modifiers Numeric Between Cur');
11481 
11482                    END IF;
11483   l_deleted_between := 'F';
11484 
11485   IF I.context = G_PRIC_VOLUME_CONTEXT THEN
11486    IF(Is_Line_Group(p_line_detail_index => I.line_detail_index) = TRUE) THEN
11487                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11488     QP_PREQ_GRP.engine_debug('Is Line Group #100');
11489 
11490                      END IF;
11491     l_is_line_group_flag := 'T';
11492 
11493     IF (p_line_group_flag IS NOT NULL) THEN
11494       IF I.attribute = G_QUANTITY_ATTRIBUTE THEN
11495           l_value_from_num := I.group_quantity;
11496       ELSIF (I.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11497        IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN
11498            l_value_from_num := I.group_amount;
11499        END IF;
11500       ELSE -- For Order Amount,Period1 Amount  kind of attributes
11501        l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11502       END IF;
11503     ELSE -- Make it a success,because line group between is done again,so do not delete
11504       l_value_from_num :=  NULL;
11505     END IF;
11506 
11507      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11508      engine_debug('Is line group');
11509      engine_debug('Group Quantity : ' || l_value_from_num);
11510      engine_debug('Line detail index: '||I.line_detail_index);
11511      END IF;
11512    ELSE  -- is not a line group
11513      l_is_line_group_flag := 'F';
11514      l_value_from_num := qp_number.canonical_to_number(I.value_from);
11515    END IF;
11516  ELSE    --else Not a Volume Context
11517   l_is_line_group_flag := 'F';
11518   l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11519  END IF;
11520 
11521 
11522   IF (I.setup_value_from IS NULL) THEN
11523     l_setup_value_from_num := l_value_from_num;
11524   ELSE
11525     l_setup_value_from_num :=  qp_number.canonical_to_number(I.setup_value_from);
11526   END IF;
11527 
11528   IF (I.setup_value_to IS NULL) THEN
11529     l_setup_value_to_num := l_value_from_num;
11530   ELSE
11531     l_setup_value_to_num :=  qp_number.canonical_to_number(I.setup_value_to);
11532   END IF;
11533 
11534   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11535   engine_debug('1VALUE: '||l_value_from_num);
11536   engine_debug('2VALUE_FROM: '||l_setup_value_from_num);
11537   engine_debug('3VALUE_TO: '||l_setup_value_to_num);
11538 
11539   END IF;
11540   IF (l_value_from_num NOT BETWEEN l_setup_value_from_num and l_setup_value_to_num) and l_value_from_num IS NOT NULL THEN
11541 
11542     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11543     engine_debug('4NOT BETWEEN');
11544 
11545     END IF;
11546    -- If it is a pricing attribute and it fails on between we can delete it right away
11547    IF (I.attribute_type = 'PRICING') THEN
11548     l_count := l_count + 1;
11549     l_line_detail_tbl(l_count) := I.line_detail_index;
11550    ELSE
11551     UPDATE qp_npreq_line_attrs_tmp
11552     SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11553     WHERE CURRENT OF l_mod_between_cur;
11554     l_deleted_between := 'T';
11555    END IF;
11556   END IF;
11557 
11558   IF (l_deleted_between = 'F') THEN
11559 
11560    IF (I.group_quantity IS NOT NULL and I.group_quantity <> l_value_from_num and l_value_from_num IS NOT NULL
11561 	  and p_line_group_flag IS NOT NULL) THEN
11562    /*
11563    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11564    */
11565     UPDATE qp_npreq_ldets_tmp
11566     SET GROUP_QUANTITY = l_value_from_num, --2388011_new
11567         SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new
11568     WHERE LINE_INDEX = i.line_index
11569     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11570    END IF;
11571 
11572     -- shu debug msg
11573                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11574     QP_PREQ_GRP.engine_debug('for modifiers...');
11575     QP_PREQ_GRP.engine_debug('check condition...');
11576     QP_PREQ_GRP.engine_debug('i.group_amount: : '||i.group_amount);
11577     QP_PREQ_GRP.engine_debug('l_value_from_num: '||l_value_from_num);
11578     QP_PREQ_GRP.engine_debug('p_line_group_flag: '||p_line_group_flag);
11579 
11580                      END IF;
11581    IF (I.group_amount IS NOT NULL and l_value_from_num IS NOT NULL
11582 	  and p_line_group_flag IS NOT NULL) THEN
11583    /*
11584    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11585    */
11586 
11587 
11588    -- [julin/5085310]
11589    IF (i.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11590 
11591      SELECT UNIT_PRICE INTO l_list_price
11592      FROM   qp_npreq_lines_tmp
11593      WHERE  LINE_INDEX = i.line_index;
11594 
11595     /* Handled l_list_price = 0 bug2385874 */
11596      IF (l_list_price IS NOT NULL and l_list_price <>0) THEN -- avoid division by zero
11597 
11598         l_group_amount := I.group_amount /l_list_price;
11599      ELSE
11600         if l_list_price = 0 then
11601         l_group_amount := 0;
11602         else
11603         l_group_amount :=I.group_amount;
11604         end if;
11605      END IF;
11606    ELSE
11607      OPEN l_line_amount_cur(i.line_index, i.line_detail_index, i.context, i.attribute, i.attribute_type);
11608      FETCH l_line_amount_cur into l_line_amount, l_priced_quantity;
11609      CLOSE l_line_amount_cur;
11610 
11611      IF (l_line_amount IS NOT NULL and l_line_amount <>0) THEN -- avoid division by zero
11612        l_group_amount := (I.group_amount /l_line_amount) * l_priced_quantity;
11613      ELSE
11614        if l_line_amount = 0 then
11615          l_group_amount := 0;
11616        else
11617          l_group_amount :=I.group_amount;
11618        end if;
11619      END IF;
11620    END IF;
11621 
11622     -- shu, for modifiers
11623                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11624     QP_PREQ_GRP.engine_debug('for modifiers...');
11625     QP_PREQ_GRP.engine_debug('line_index: '||i.line_index);
11626     QP_PREQ_GRP.engine_debug('list price: '||l_list_price);
11627     QP_PREQ_GRP.engine_debug('i.group_amount: '||i.group_amount);
11628     QP_PREQ_GRP.engine_debug('group_value: '||l_group_amount);
11629                      END IF;
11630 
11631     UPDATE qp_npreq_ldets_tmp
11632     SET   GROUP_AMOUNT = l_group_amount, -- 2388011_new, fix group of lines lumpsum based on ITEM_AMOUNT
11633           SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new
11634     WHERE LINE_INDEX = i.line_index
11635     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11636    END IF;
11637 
11638    --Need the LINE_QUANTITY column to be updated for regular lines with volume attributes, for Calculation purposes
11639    IF (p_line_group_flag IS NULL and l_is_line_group_flag = 'F'
11640        and i.context = G_PRIC_VOLUME_CONTEXT) -- added for [5005328/4911264]
11641    THEN
11642                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11643     QP_PREQ_GRP.engine_debug('Line Index: ' || i.line_index || ' LD Index : ' || i.line_detail_index ||
11644 						' '||l_value_from_num);
11645                      END IF;
11646    /*
11647    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11648    */
11649     UPDATE qp_npreq_ldets_tmp
11650     SET   LINE_QUANTITY = l_value_from_num, --2388011_new
11651           SELECTED_VOLUME_ATTR = l_selected_volume_attr --2388011_new
11652     WHERE LINE_INDEX = i.line_index
11653     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11654    END IF;
11655 
11656   END IF;
11657 
11658  END LOOP;
11659 
11660 END IF; -- IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID)
11661 
11662  -- If it is a pricing attribute and it fails on between we can delete it right away..Delete all line details where pricing
11663  -- attribute BETWEEN fails
11664  FORALL I IN 1 .. l_line_detail_tbl.COUNT
11665 
11666     /*
11667     INDX,QP_PREQ_GRP.evaluate_between.upd4,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11668     */
11669     UPDATE qp_npreq_ldets_tmp --upd4
11670     SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11671     WHERE  LINE_DETAIL_INDEX  = l_line_detail_tbl(i);
11672 qp_debug_util.tstop('Evaluate_Between');
11673 EXCEPTION
11674   WHEN OTHERS THEN
11675    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11676    engine_debug(l_routine||' '||SQLERRM);
11677    END IF;
11678    x_status_code := FND_API.G_RET_STS_ERROR;
11679    x_status_text := l_routine||': '||SQLERRM;
11680    qp_debug_util.tstop('Evaluate_Between');
11681 END Evaluate_Between;
11682 
11683 /*+---------------------------------------------------------
11684   |PROCEDURE handle_break called by get_eligible_break_lines
11685   +----------------------------------------------------------
11686 */
11687 
11688 PROCEDURE Handle_Break(p_list_header_id    IN  NUMBER,
11689                        p_list_line_id      IN  NUMBER,
11690                        p_pricing_phase_id  IN  PLS_INTEGER,
11691                        p_line_detail_index IN  PLS_INTEGER,
11692                        p_line_index        IN  PLS_INTEGER,
11693                        p_group_quantity    IN  NUMBER,
11694                        p_group_amount      IN  NUMBER,
11695                        p_list_type_code    IN  VARCHAR2, /* Vivek */
11696                        x_is_break_satisfy  OUT NOCOPY BOOLEAN,
11697                        x_status_code OUT NOCOPY VARCHAR2,
11698                        x_status_text OUT NOCOPY VARCHAR2) AS
11699 
11700 /*
11701 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_RLTD_MODIFIERS_N1,FROM_RLTD_MODIFIER_ID,1
11702 
11703 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
11704 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
11705 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
11706 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
11707 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
11708 
11709 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
11710 
11711 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE_CONTEXT,1
11712 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE,2
11713 
11714 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
11715 */
11716 
11717 cursor l_price_break_detail_multi_cur(p_reduced_pbh_processing VARCHAR2) is
11718    SELECT /*+ ordered use_nl(qplines, qprm, qppa, qpll, qph, qcdt) */
11719        qpll.pricing_group_sequence,
11720        qpll.list_header_id,
11721        qppa.list_line_id,
11722        qppa.product_attribute_context,  --setup values
11723        qppa.product_attribute,
11724        qppa.product_attr_value,
11725        qppa.pricing_attribute_context,
11726        qppa.pricing_attribute,
11727        qppa.pricing_attr_value_from,
11728        qppa.pricing_attr_value_to,
11729        qppa.product_uom_code,
11730        qplat_pricing.value_from,
11731        qplat_pricing.attribute,
11732        nvl(qplines.priced_uom_code,qplines.line_uom_code) line_uom_code,
11733        qplines.line_uom_code order_uom_code, -- shulin, for total_item_quantity uom conversion
11734        qplines.line_index,
11735        nvl(qplines.priced_quantity,qplines.line_quantity) line_quantity,
11736        qpll.list_line_type_code,
11737        qpll.modifier_level_code,
11738        qpll.benefit_qty,
11739        qpll.benefit_uom_code,
11740        qpll.service_duration,  -- service project
11741        qpll.service_period,  -- service project
11742        qpll.list_line_no,
11743        qpll.accrual_flag,
11744        qpll.accrual_conversion_rate,
11745        qpll.estim_accrual_rate,
11746        qpll.recurring_value, -- block pricing
11747        qpll.arithmetic_operator,
11748        qpll.operand,
11749        qpll.list_price,
11750        qpll.pricing_phase_id,
11751        qpll.automatic_flag,
11752        qpll.price_break_type_code,
11753        qpll.incompatibility_GRP_CODE,
11754        qpll.override_flag,
11755        qpll.print_on_invoice_flag,
11756        qpll.price_by_formula_id,
11757        qpll.product_precedence,
11758        nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) usage_pricing_type,
11759        QCDT.ROUNDING_FACTOR, /* vivek */
11760        QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
11761        QCDT.CURRENCY_HEADER_ID,  /* vivek */
11762        QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
11763        QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
11764        QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
11765        QPH.CURRENCY_CODE   BASE_CURRENCY_CODE,  /* vivek */
11766        qplines.contract_start_date, -- R12 partial period pricing
11767        qplines.contract_end_date    -- R12 partial period pricing
11768    FROM
11769        qp_npreq_line_attrs_tmp qplat_pricing,
11770        qp_npreq_lines_tmp      qplines,
11771        qp_rltd_modifiers qprm,
11772        qp_pricing_attributes  qppa,
11773        qp_list_lines          qpll
11774       ,qp_list_headers_b qph   /* Vivek */
11775       ,qp_currency_details qcdt /* Vivek */
11776    WHERE qprm.from_rltd_modifier_id = p_list_line_id
11777    AND   qprm.to_rltd_modifier_id = qppa.list_line_id
11778    AND   qppa.list_line_id = qpll.list_line_id
11779    AND   qplat_pricing.context = G_PRIC_VOLUME_CONTEXT
11780    AND   qppa.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT
11781    AND   qplat_pricing.attribute = qppa.pricing_attribute
11782    AND   qplat_pricing.attribute_type = G_PRICING_TYPE
11783    AND   qplat_pricing.line_index = qplines.line_index
11784    AND   qplat_pricing.pricing_status_code = G_STATUS_UNCHANGED
11785    AND   qplat_pricing.line_index = p_line_index
11786 -- and   qp_number.canonical_to_number(qplat_pricing.value_from) <> 0 -- 5158413
11787 -- commented above for bug#6896139 as fix for bug#5158413 did not consider for G_LINE_GROUP,lines with line qty as 0
11788 --(i.e qplat_pricing.value_from=0) even when the qualifier group count for G_LINE_GROUP was greater than zero
11789    and   qpll.list_header_id = qph.list_header_id /* Vivek */
11790    and   QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
11791             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
11792             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
11793                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11794                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11795    AND (   /* Vivek */
11796         (qcdt.curr_attribute_context is null   /* Vivek */
11797          and not exists   /* Vivek */
11798              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
11799                from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
11800                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
11801                  and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
11802                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
11803                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
11804                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
11805                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
11806                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
11807                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
11808                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
11809                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
11810                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11811                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11812              )   /* Vivek */
11813         )   /* Vivek */
11814         OR   /* Vivek */
11815         (qcdt.curr_attribute_context is not null   /* Vivek */
11816          and qcdt.precedence =
11817              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
11818                from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
11819                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
11820                  and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
11821                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
11822                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
11823                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
11824                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
11825                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
11826                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
11827                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
11828                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
11829                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11830                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11831              )   /* Vivek */
11832         )   /* Vivek */
11833        )   /* Vivek */
11834    and (( (p_reduced_pbh_processing = G_YES) --[julin/3783009/4712794]
11835          and (nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) <> G_AUTHORING_TYPE)
11836          and ( (qpll.price_break_type_code = G_POINT_BREAK and qp_number.canonical_to_number(qplat_pricing.value_from)
11837                                                        between qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11838                                                            and qp_number.canonical_to_number(qppa.pricing_attr_value_to)
11839                ) OR
11840                (qpll.price_break_type_code = G_RANGE_BREAK and qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11841                                                           <= qp_number.canonical_to_number(qplat_pricing.value_from)
11842                )
11843              )
11844         )
11845        or
11846         (p_reduced_pbh_processing = G_NO)
11847        )
11848    ORDER BY qp_number.canonical_to_number(qppa.pricing_attr_value_from);  --bug#1819397
11849 
11850 cursor l_price_break_detail_cur(p_reduced_pbh_processing VARCHAR2) is
11851    SELECT /*+ ordered use_nl(qplines, qprm, qppa, qpll) */
11852        qpll.pricing_group_sequence,
11853        qpll.list_header_id,
11854        qppa.list_line_id,
11855        qppa.product_attribute_context,  --setup values
11856        qppa.product_attribute,
11857        qppa.product_attr_value,
11858        qppa.pricing_attribute_context,
11859        qppa.pricing_attribute,
11860        qppa.pricing_attr_value_from,
11861        qppa.pricing_attr_value_to,
11862        qppa.product_uom_code,
11863        qplat_pricing.value_from,
11864        qplat_pricing.attribute,
11865        nvl(qplines.priced_uom_code,qplines.line_uom_code) line_uom_code,
11866        qplines.line_uom_code order_uom_code, -- shulin, for total_item_quantity uom conversion
11867        qplines.line_index,
11868        nvl(qplines.priced_quantity,qplines.line_quantity) line_quantity,
11869        qpll.list_line_type_code,
11870        qpll.modifier_level_code,
11871        qpll.benefit_qty,
11872        qpll.benefit_uom_code,
11873        qpll.service_duration,  -- service project
11874        qpll.service_period,  -- service project
11875        qpll.list_line_no,
11876        qpll.accrual_flag,
11877        qpll.accrual_conversion_rate,
11878        qpll.estim_accrual_rate,
11879        qpll.recurring_value, -- block pricing
11880        qpll.arithmetic_operator,
11881        qpll.operand,
11882        qpll.list_price,
11883        qpll.pricing_phase_id,
11884        qpll.automatic_flag,
11885        qpll.price_break_type_code,
11886        qpll.incompatibility_GRP_CODE,
11887        qpll.override_flag,
11888        qpll.print_on_invoice_flag,
11889        qpll.price_by_formula_id,
11890        qpll.product_precedence,
11891        nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) usage_pricing_type,
11892        NULL ROUNDING_FACTOR, /* vivek */
11893        NULL CURRENCY_DETAIL_ID,  /* sunilpandey */
11894        NULL CURRENCY_HEADER_ID,  /* vivek */
11895        NULL SELLING_ROUNDING_FACTOR,  /* vivek */
11896        NULL ORDER_CURRENCY,  /* vivek */
11897        NULL PRICING_EFFECTIVE_DATE,  /* vivek */
11898        NULL BASE_CURRENCY_CODE,  /* vivek */
11899        qplines.contract_start_date, -- R12 partial period pricing
11900        qplines.contract_end_date    -- R12 partial period pricing
11901    FROM
11902        qp_npreq_line_attrs_tmp qplat_pricing,
11903        qp_npreq_lines_tmp      qplines,
11904        qp_rltd_modifiers qprm,
11905        qp_pricing_attributes  qppa,
11906        qp_list_lines          qpll
11907    WHERE qprm.from_rltd_modifier_id = p_list_line_id
11908    AND   qprm.to_rltd_modifier_id = qppa.list_line_id
11909    AND   qppa.list_line_id = qpll.list_line_id
11910    AND   qplat_pricing.context = G_PRIC_VOLUME_CONTEXT
11911    AND   qppa.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT
11912    AND   qplat_pricing.attribute = qppa.pricing_attribute
11913    AND   qplat_pricing.attribute_type = G_PRICING_TYPE
11914    AND   qplat_pricing.line_index = qplines.line_index
11915    AND   qplat_pricing.pricing_status_code = G_STATUS_UNCHANGED
11916    AND   qplat_pricing.line_index = p_line_index
11917 -- and   qp_number.canonical_to_number(qplat_pricing.value_from) <> 0 -- 5158413
11918 -- commented above for bug#6896139 as fix for bug#5158413 did not consider for G_LINE_GROUP,lines with line qty as 0
11919 --(i.e qplat_pricing.value_from=0) even when the qualifier group count for G_LINE_GROUP was greater than zero
11920    and (( (p_reduced_pbh_processing = G_YES) --[julin/3783009/4712794]
11921           and (nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) <> G_AUTHORING_TYPE)
11922           and ( (qpll.price_break_type_code = G_POINT_BREAK and qp_number.canonical_to_number(qplat_pricing.value_from)
11923                                                         between qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11924                                                             and qp_number.canonical_to_number(qppa.pricing_attr_value_to)
11925                 ) OR
11926                 (qpll.price_break_type_code = G_RANGE_BREAK and qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11927                                                            <= qp_number.canonical_to_number(qplat_pricing.value_from)
11928                 )
11929               )
11930         )
11931        or
11932         (p_reduced_pbh_processing = G_NO)
11933        )
11934    ORDER BY qp_number.canonical_to_number(qppa.pricing_attr_value_from);  --bug#1819397
11935 
11936 CURSOR l_pbh_cur IS
11937 SELECT net_amount_flag
11938 FROM   qp_list_lines
11939 WHERE  list_line_id = p_list_line_id;
11940 
11941 J PLS_INTEGER:=1;
11942 N PLS_INTEGER:=1;
11943 --l_line_detail_index PLS_INTEGER;
11944 --l_line_detail_tbl LINE_DETAIL_TBL_TYPE;
11945 --l_line_attrs_tbl  LINE_ATTR_TBL_TYPE;
11946 l_VALID_PBH_FLAG VARCHAR2(1):='N';
11947 l_VALUE_TO NUMBER:=0;
11948 l_VALUE_FROM NUMBER;
11949 l_order_uom_code VARCHAR2(3);
11950 l_primary_uom    VARCHAR2(3);
11951 l_product_uom    VARCHAR2(3);
11952 l_quantity NUMBER;
11953 l_item_id NUMBER;
11954 l_uom_rate NUMBER;
11955 l_status_code VARCHAR2(30);
11956 l_status_text VARCHAR2(240);
11957 E_INVALID_PRICE_BREAK_TYPE EXCEPTION;
11958 E_INVALID_UOM_CONVERSION EXCEPTION;
11959 e_proration_fac_oks_error exception; /* Proration */
11960 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.HANDLE_BREAK';
11961 rowid_tbl ROWID_TYPE;
11962 index_tbl PLS_INTEGER_TYPE;
11963 l_count PLS_INTEGER:=0;
11964 l_grp_quantity NUMBER:=0;
11965 l_selected_volume_attr VARCHAR2(1);
11966 l_setup_value_from NUMBER;
11967 l_continuous_flag BOOLEAN := FALSE; -- 4061138, maintained only if proration involved
11968 
11969 -- julin [3805113]: local tables populated via cursor
11970 l_h_pricing_group_sequence_tbl    NUMBER_TYPE;
11971 l_h_list_header_id_tbl            NUMBER_TYPE;
11972 l_h_list_line_id_tbl              NUMBER_TYPE;
11973 l_h_product_attr_context_tbl VARCHAR_TYPE;
11974 l_h_product_attribute_tbl         VARCHAR_TYPE;
11975 l_h_product_attr_value_tbl        VARCHAR_TYPE;
11976 l_h_pricing_attr_context_tbl VARCHAR_TYPE;
11977 l_h_pricing_attribute_tbl         VARCHAR_TYPE;
11978 l_h_pricing_attr_val_from_tbl   VARCHAR_TYPE;
11979 l_h_pricing_attr_val_to_tbl     VARCHAR_TYPE;
11980 l_h_product_uom_code_tbl          VARCHAR_30_TYPE;
11981 l_h_value_from_tbl                VARCHAR_TYPE;
11982 l_h_attribute_tbl                 VARCHAR_TYPE;
11983 l_h_line_uom_code_tbl             VARCHAR_30_TYPE;
11984 l_h_order_uom_code_tbl            VARCHAR_30_TYPE; -- shu, for total_item_qty
11985 l_h_line_index_tbl                NUMBER_TYPE;
11986 l_h_line_quantity_tbl             NUMBER_TYPE;
11987 l_h_list_line_type_code_tbl       VARCHAR_30_TYPE;
11988 l_h_modifier_level_code_tbl       VARCHAR_30_TYPE;
11989 l_h_benefit_qty_tbl               NUMBER_TYPE;
11990 l_h_benefit_uom_code_tbl          VARCHAR_30_TYPE;
11991 l_h_service_duration_tbl	  NUMBER_TYPE;  -- service project
11992 l_h_service_period_tbl		  VARCHAR_30_TYPE;  -- service project
11993 l_h_list_line_no_tbl              VARCHAR_TYPE;  -- 9387258 changed from number to varchar
11994 l_h_accrual_flag_tbl              VARCHAR_30_TYPE;
11995 l_h_accrual_conv_rate_tbl   NUMBER_TYPE;
11996 l_h_estim_accrual_rate_tbl        NUMBER_TYPE;
11997 l_h_recurring_value_tbl           NUMBER_TYPE; -- block pricing
11998 l_h_arithmetic_operator_tbl       VARCHAR_30_TYPE;
11999 l_h_operand_tbl                   NUMBER_TYPE;
12000 l_h_list_price_tbl                NUMBER_TYPE;
12001 l_h_pricing_phase_id_tbl          NUMBER_TYPE;
12002 l_h_automatic_flag_tbl            VARCHAR_30_TYPE;
12003 l_h_price_break_type_code_tbl     VARCHAR_30_TYPE;
12004 l_h_incompat_grp_code_tbl  VARCHAR_30_TYPE;
12005 l_h_override_flag_tbl             VARCHAR_30_TYPE;
12006 l_h_print_on_invoice_flag_tbl     VARCHAR_30_TYPE;
12007 l_h_price_by_formula_id_tbl       NUMBER_TYPE;
12008 l_h_product_precedence_tbl        NUMBER_TYPE;
12009 l_h_usage_pricing_type_tbl        VARCHAR_30_TYPE;
12010 l_h_rounding_factor_tbl           NUMBER_TYPE; /* Vivek */
12011 l_h_currency_detail_id_tbl        NUMBER_TYPE; /* Vivek */
12012 l_h_currency_header_id_tbl        NUMBER_TYPE; /* Vivek */
12013 l_h_selling_round_factor_tbl   NUMBER_TYPE; /* Vivek */
12014 l_h_order_currency_tbl            VARCHAR_30_TYPE; /* Vivek */
12015 l_h_pricing_effective_date_tbl    DATE_TYPE; /* Vivek */
12016 l_h_base_currency_code_tbl        VARCHAR_30_TYPE; /* Vivek */
12017 l_h_contract_start_date_tbl       DATE_TYPE; -- R12 partial period pricing
12018 l_h_contract_end_date_tbl         DATE_TYPE; -- R12 partial period pricing
12019 
12020 -- julin [3805113]: local tables not populated via cursor
12021 l_l_line_detail_index_tbl         NUMBER_TYPE;
12022 l_l_selected_volume_attr_tbl      FLAG_TYPE; -- only need VARCHAR(1)
12023 l_l_G_CHILD_DETAIL_TYPE_tbl       VARCHAR_30_TYPE;
12024 l_l_p_line_index_tbl                PLS_INTEGER_TYPE;
12025 l_l_G_STATUS_NEW_tbl              VARCHAR_30_TYPE;
12026 l_l_G_NOT_PROCESSED_tbl           VARCHAR_30_TYPE;
12027 l_l_group_quantity_tbl            NUMBER_TYPE;
12028 l_l_group_amount_tbl              NUMBER_TYPE;
12029 l_l_list_type_code_tbl            VARCHAR_TYPE;
12030 l_l_G_DETAIL_LEVEL_tbl            VARCHAR_30_TYPE;
12031 l_l_G_PRICING_TYPE_tbl            VARCHAR_30_TYPE;
12032 l_l_G_BY_PBH_tbl                  VARCHAR_30_TYPE;
12033 l_l_G_OPERATOR_BETWEEN_tbl        VARCHAR_30_TYPE;
12034 l_l_p_list_line_id_tbl            NUMBER_TYPE;
12035 l_l_G_PBH_LINE_tbl                VARCHAR_30_TYPE;
12036 l_l_G_PROCESSED_tbl               VARCHAR_30_TYPE;
12037 l_l_quantity_tbl                  NUMBER_TYPE;
12038 l_l_p_line_detail_index_tbl       NUMBER_TYPE;
12039 
12040 --type refcur is ref cursor;
12041 
12042 --l_price_break_detail_cur    refcur;
12043 l_total_item_quantity NUMBER;	-- shu
12044 l_max_decimal_digits PLS_INTEGER := nvl(FND_PROFILE.Value ('QP_INV_DECIMAL_PRECISION'),10); --shu
12045 
12046 l_break_uom_code      VARCHAR2(3); /* Proration */
12047 l_break_uom_context   VARCHAR2(30); /* Proration */
12048 l_break_uom_attribute VARCHAR2(30); /* Proration */
12049 l_passed_break_uom    VARCHAR2(3); /* Proration */
12050 l_proration_factor    NUMBER; /* Proration */
12051 l_contract_start_date date; /* Proration */
12052 l_contract_end_date   date; /* Proration */
12053 l_proration_processed VARCHAR2(1) := 'N'; /* Proration */
12054 l_value_temp          NUMBER; /* Proration */
12055 l_first_time_flag     VARCHAR2(1) := 'Y'; /* Proration */
12056 l_prev_setup_to_value  number; /* ER 3637202 */
12057 l_prev_prorated_to_value  number; /* ER 3637202 */
12058 l_gap  number; /* ER 3637202 */
12059 l_reduced_pbh_processing varchar2(1); --[julin/3783009/4712794]
12060 l_net_amount_flag varchar2(1); --[julin/4671446]
12061 
12062 BEGIN
12063 
12064 --product uom code is different than order uom code
12065 --and attribute is quantity than we need to do uom conversion
12066 if G_BREAK_UOM_PRORATION is null then
12067   G_BREAK_UOM_PRORATION := nvl(fnd_profile.value('QP_BREAK_UOM_PRORATION'), G_NULL_PROFILE_VALUE);
12068 end if;
12069 
12070 N := 1;
12071 
12072  --[julin/3783009/4712794] ER - reduced pbh process should be done when following conditions are met
12073  if G_BREAK_UOM_PRORATION <> 'Y' and p_list_type_code = G_PRICE_LIST_HEADER and QP_PARAM_UTIL.GET_PARAMETER_VALUE('REQ', G_REQUEST_TYPE_CODE, 'QP_PL_BRK_RET_SATISFIED_ONLY') = G_YES then
12074    l_reduced_pbh_processing := G_YES;
12075  else
12076    l_reduced_pbh_processing := G_NO;
12077  end if;
12078 
12079   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12080     engine_debug('G_BREAK_UOM_PRORATION ' || G_BREAK_UOM_PRORATION);
12081     engine_debug('p_list_type_code ' || p_list_type_code);
12082     engine_debug('G_REQUEST_TYPE_CODE ' || G_REQUEST_TYPE_CODE);
12083     engine_debug('l_reduced_pbh_processing ' || l_reduced_pbh_processing);
12084 
12085   END IF;
12086 
12087 --[julin/4671446]
12088 OPEN l_pbh_cur;
12089 FETCH l_pbh_cur into l_net_amount_flag;
12090 CLOSE l_pbh_cur;
12091 
12092 -- julin [3805113]: bulk fetch
12093 IF (p_pricing_phase_id = 1 and G_MULTI_CURRENCY_PROFILE = G_YES
12094     and G_USE_MULTI_CURRENCY = G_YES) THEN
12095   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12096     engine_debug ('Multi-Currency Pricing Phase Price Break');
12097   END IF;
12098   OPEN l_price_break_detail_multi_cur(l_reduced_pbh_processing);
12099   FETCH l_price_break_detail_multi_cur BULK COLLECT INTO
12100        l_h_pricing_group_sequence_tbl,
12101        l_h_list_header_id_tbl,
12102        l_h_list_line_id_tbl,
12103        l_h_product_attr_context_tbl,
12104        l_h_product_attribute_tbl,
12105        l_h_product_attr_value_tbl,
12106        l_h_pricing_attr_context_tbl,
12107        l_h_pricing_attribute_tbl,
12108        l_h_pricing_attr_val_from_tbl,
12109        l_h_pricing_attr_val_to_tbl,
12110        l_h_product_uom_code_tbl,
12111        l_h_value_from_tbl,
12112        l_h_attribute_tbl,
12113        l_h_line_uom_code_tbl,
12114        l_h_order_uom_code_tbl, -- shulin_tbl, for total_item_quantity uom conversion
12115        l_h_line_index_tbl,
12116        l_h_line_quantity_tbl,
12117        l_h_list_line_type_code_tbl,
12118        l_h_modifier_level_code_tbl,
12119        l_h_benefit_qty_tbl,
12120        l_h_benefit_uom_code_tbl,
12121        l_h_service_duration_tbl,  -- service project
12122        l_h_service_period_tbl,  -- service project
12123        l_h_list_line_no_tbl,
12124        l_h_accrual_flag_tbl,
12125        l_h_accrual_conv_rate_tbl,
12126        l_h_estim_accrual_rate_tbl,
12127        l_h_recurring_value_tbl, -- block pricing
12128        l_h_arithmetic_operator_tbl,
12129        l_h_operand_tbl,
12130        l_h_list_price_tbl,
12131        l_h_pricing_phase_id_tbl,
12132        l_h_automatic_flag_tbl,
12133        l_h_price_break_type_code_tbl,
12134        l_h_incompat_grp_code_tbl,
12135        l_h_override_flag_tbl,
12136        l_h_print_on_invoice_flag_tbl,
12137        l_h_price_by_formula_id_tbl,
12138        l_h_product_precedence_tbl,
12139        l_h_usage_pricing_type_tbl,
12140        l_h_rounding_factor_tbl, /* Vivek */
12141        l_h_currency_detail_id_tbl, /* Vivek */
12142        l_h_currency_header_id_tbl, /* Vivek */
12143        l_h_selling_round_factor_tbl,  /* Vivek */
12144        l_h_order_currency_tbl,     /* Vivek */
12145        l_h_pricing_effective_date_tbl, /* Vivek */
12146        l_h_base_currency_code_tbl,     /* Vivek */
12147        l_h_contract_start_date_tbl, -- R12 partial period pricing
12148        l_h_contract_end_date_tbl;    -- R12 partial period pricing
12149   CLOSE l_price_break_detail_multi_cur;
12150 ELSE
12151   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12152     engine_debug ('Discounts Based Price Break');
12153   END IF;
12154   OPEN l_price_break_detail_cur(l_reduced_pbh_processing);
12155   FETCH l_price_break_detail_cur BULK COLLECT INTO
12156        l_h_pricing_group_sequence_tbl,
12157        l_h_list_header_id_tbl,
12158        l_h_list_line_id_tbl,
12159        l_h_product_attr_context_tbl,
12160        l_h_product_attribute_tbl,
12161        l_h_product_attr_value_tbl,
12162        l_h_pricing_attr_context_tbl,
12163        l_h_pricing_attribute_tbl,
12164        l_h_pricing_attr_val_from_tbl,
12165        l_h_pricing_attr_val_to_tbl,
12166        l_h_product_uom_code_tbl,
12167        l_h_value_from_tbl,
12168        l_h_attribute_tbl,
12169        l_h_line_uom_code_tbl,
12170        l_h_order_uom_code_tbl, -- shulin_tbl, for total_item_quantity uom conversion
12171        l_h_line_index_tbl,
12172        l_h_line_quantity_tbl,
12173        l_h_list_line_type_code_tbl,
12174        l_h_modifier_level_code_tbl,
12175        l_h_benefit_qty_tbl,
12176        l_h_benefit_uom_code_tbl,
12177        l_h_service_duration_tbl,  -- service project
12178        l_h_service_period_tbl,  -- service project
12179        l_h_list_line_no_tbl,
12180        l_h_accrual_flag_tbl,
12181        l_h_accrual_conv_rate_tbl,
12182        l_h_estim_accrual_rate_tbl,
12183        l_h_recurring_value_tbl, -- block pricing
12184        l_h_arithmetic_operator_tbl,
12185        l_h_operand_tbl,
12186        l_h_list_price_tbl,
12187        l_h_pricing_phase_id_tbl,
12188        l_h_automatic_flag_tbl,
12189        l_h_price_break_type_code_tbl,
12190        l_h_incompat_grp_code_tbl,
12191        l_h_override_flag_tbl,
12192        l_h_print_on_invoice_flag_tbl,
12193        l_h_price_by_formula_id_tbl,
12194        l_h_product_precedence_tbl,
12195        l_h_usage_pricing_type_tbl,
12196        l_h_rounding_factor_tbl, /* Vivek */
12197        l_h_currency_detail_id_tbl, /* Vivek */
12198        l_h_currency_header_id_tbl, /* Vivek */
12199        l_h_selling_round_factor_tbl,  /* Vivek */
12200        l_h_order_currency_tbl,     /* Vivek */
12201        l_h_pricing_effective_date_tbl, /* Vivek */
12202        l_h_base_currency_code_tbl,     /* Vivek */
12203        l_h_contract_start_date_tbl, -- R12 partial period pricing
12204        l_h_contract_end_date_tbl;    -- R12 partial period pricing
12205   CLOSE l_price_break_detail_cur;
12206 END IF;
12207 
12208 IF (l_h_list_line_id_tbl.COUNT > 0) THEN
12209   FOR I in l_h_list_line_id_tbl.FIRST .. l_h_list_line_id_tbl.LAST
12210   LOOP
12211 
12212    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12213    engine_debug('Modifier_level_code: '||l_h_modifier_level_code_tbl(i));
12214    engine_debug('Attribute: '||l_h_ATTRIBUTE_tbl(i));
12215 
12216    END IF;
12217 IF qp_number.canonical_to_number(l_h_value_from_tbl(i)) <> 0 OR (qp_number.canonical_to_number(l_h_value_from_tbl(i)) = 0 AND--bug#6896139.If Condition to consider 0 value only for G_LINE_GROUP
12218 l_h_modifier_level_code_tbl(i) = G_LINE_GROUP) THEN --since 0 value is now being considered in the cursor l_price_break_detail_cur --9475080 added
12219    IF l_h_modifier_level_code_tbl(i) = G_LINE_GROUP THEN
12220       IF l_h_attribute_tbl(i) = G_QUANTITY_ATTRIBUTE THEN
12221         l_quantity := p_group_quantity;
12222         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12223         engine_debug('l_quantity :'||l_quantity);
12224         END IF;
12225         l_selected_volume_attr := G_QUANTITY;
12226       ELSE
12227         l_quantity := p_group_amount;
12228         l_selected_volume_attr := G_AMOUNT;
12229       END IF;
12230 
12231       IF (p_group_quantity <> l_quantity) THEN
12232 
12233        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12234        engine_debug('UOM l_quantity : '||l_quantity);
12235        engine_debug('UOM p_group_quantity :'||p_group_quantity);
12236 
12237        END IF;
12238       /*
12239       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
12240       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
12241       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
12242       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
12243       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
12244       */
12245 
12246        UPDATE qp_npreq_ldets_tmp --upd1
12247        SET GROUP_QUANTITY = l_quantity, --2388011_new
12248            SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new, ASK RAVI, commented out??
12249        WHERE CREATED_FROM_LIST_HEADER_ID = p_list_header_id
12250        AND   PRICING_PHASE_ID = p_pricing_phase_id
12251        AND   PRICING_STATUS_CODE = QP_PREQ_GRP.G_STATUS_NEW
12252        AND   CREATED_FROM_LIST_LINE_ID = p_list_line_id
12253        AND   LINE_INDEX = p_line_index;
12254 
12255       END IF;
12256 
12257    ELSE  --not a line group
12258 
12259       IF l_h_ATTRIBUTE_tbl(i) = G_QUANTITY_ATTRIBUTE THEN
12260         IF l_h_product_uom_code_tbl(i) IS NULL THEN
12261           l_product_uom := l_h_line_uom_code_tbl(i);
12262         ELSE
12263           l_product_uom := l_h_product_uom_code_tbl(i);
12264         END IF;
12265         l_quantity :=  l_h_line_quantity_tbl(i);
12266         l_selected_volume_attr := G_QUANTITY;
12267 
12268       -- begin, shu fix
12269       ELSIF l_h_ATTRIBUTE_tbl(i) = 'PRICING_ATTRIBUTE20' THEN -- shulin, for fte total_item_quantity uom conversion
12270        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12271       	engine_debug ('TOTAL_ITEM_QUANTITY...');
12272        END IF;
12273       	IF (l_h_line_uom_code_tbl(i) = l_h_order_uom_code_tbl(i) ) THEN -- no uom conversion if pricing_uom_code is same as order_uom_code
12274         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12275       		engine_debug ('no uom conversion, pricing_uom_code is same as order_uom_code: '||l_h_line_uom_code_tbl(i));
12276         END IF;
12277       		l_quantity :=  qp_number.canonical_to_number(l_h_value_from_tbl(i));
12278         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12279       		engine_debug ('l_quantity: '||l_quantity);
12280         END IF;
12281       	ELSE	-- uom conversion
12282         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12283       		engine_debug ('uom conversion...');
12284       		engine_debug ('order_uom_code: '||l_h_order_uom_code_tbl(i));
12285       		engine_debug ('primary_uom_code: '||l_h_product_uom_code_tbl(i));
12286         END IF;
12287       		l_total_item_quantity :=  qp_number.canonical_to_number(l_h_value_from_tbl(i));
12288         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12289       		engine_debug ('l_quantity before uom convertion: '||l_total_item_quantity );
12290         END IF;
12291 
12292       		convert_uom (	l_h_order_uom_code_tbl(i),
12293                       		l_h_product_uom_code_tbl(i),
12294                       		l_total_item_quantity,  --total_item_qty
12295                       		l_quantity,		-- qty_after_uom_conversion
12296                       		l_status_code,
12297                       		l_status_text);
12298                  IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12299                  	raise E_INVALID_UOM_CONVERSION;
12300                  END IF;
12301 
12302                  -- shu, fix bug2368445
12303                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12304                  engine_debug ('l_quantity before rounded by inv_decimal_precision: '||l_quantity);
12305                  engine_debug ('inv_decimal_precision: '||l_max_decimal_digits);
12306                  END IF;
12307                  IF (l_quantity IS NOT NULL AND l_max_decimal_digits IS NOT NULL) THEN -- it will have sql err if null
12308                  	l_quantity := round (l_quantity, l_max_decimal_digits);
12309                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12310                  	engine_debug ('l_quantity after rounded by inv_decimal_precision: '||l_quantity);
12311                   END IF;
12312    		 END IF;
12313       	END IF;
12314       	l_selected_volume_attr := 'O'; --2388011_latest
12315       -- end, shu fix
12316       ELSE
12317         l_quantity :=  qp_number.canonical_to_number(l_h_value_from_tbl(i));
12318         l_selected_volume_attr := G_AMOUNT;
12319       END IF;
12320 
12321 	 -- This LINE_QUANTITY is column is needed for knowing the right value for
12322 	 -- PBH based on modifier level code 'LINE' for calculation purposes
12323 
12324        /*
12325        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
12326        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
12327        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
12328        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
12329        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
12330        */
12331 
12332        UPDATE qp_npreq_ldets_tmp --upd2
12333        SET LINE_QUANTITY = l_quantity, --2388011_new
12334            SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new
12335        WHERE CREATED_FROM_LIST_HEADER_ID = p_list_header_id
12336        AND   PRICING_PHASE_ID = p_pricing_phase_id
12337        AND   PRICING_STATUS_CODE = QP_PREQ_GRP.G_STATUS_NEW
12338        AND   CREATED_FROM_LIST_LINE_ID = p_list_line_id
12339        AND   LINE_INDEX = p_line_index;
12340 
12341    END IF;
12342 
12343 
12344      l_setup_value_from := qp_number.canonical_to_number(l_h_pricing_attr_val_from_tbl(i));
12345 
12346      --handle the case when value_to is null
12347      IF (l_h_pricing_attr_val_to_tbl(i) IS NULL) THEN
12348          IF l_quantity >= l_setup_value_from THEN
12349            l_value_to := l_quantity;
12350          ELSIF l_quantity < l_setup_value_from THEN
12351            l_value_to := l_setup_value_from;
12352          END IF;
12353      ELSE
12354          l_value_to := qp_number.canonical_to_number(l_h_pricing_attr_val_to_tbl(i));
12355      END IF;
12356 
12357      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12358      engine_debug(l_routine||' Line quantity: '||l_quantity);
12359      engine_debug(l_routine||' value from: '||l_setup_value_from);
12360      engine_debug(l_routine||' value to : '||l_value_to);
12361      engine_debug(l_routine||' usage pricing type: '||l_h_usage_pricing_type_tbl(i));
12362 
12363      END IF;
12364 
12365      /* Proration Changes START  */
12366      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12367        engine_debug(l_routine||'  QP_CODE_CONTROL.CODE_RELEASE_LEVEL : '|| QP_CODE_CONTROL.CODE_RELEASE_LEVEL);
12368        engine_debug(l_routine||'  profile QP_BREAK_UOM_PRORATION : '|| G_BREAK_UOM_PRORATION);
12369        engine_debug(l_routine||'  G_REGULAR_USAGE_TYPE : '|| G_REGULAR_USAGE_TYPE);
12370      END IF;
12371 
12372 -- feb 22 toi comment start
12373 -- proration makes sense for regular usage call and not for authoring call
12374 -- proration is not supported for the authoring call from Calling application
12375 -- feb 22 toi comment end
12376 
12377      if QP_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510'
12378        and G_BREAK_UOM_PRORATION = 'Y'
12379        and l_h_usage_pricing_type_tbl(i) = G_REGULAR_USAGE_TYPE
12380      then
12381 
12382         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12383           engine_debug(l_routine||' Proration allowed profile is set ');
12384         END IF;
12385 
12386 	-- feb 22 toi comment start
12387         -- Using l_first_time_flag ensures that the follwoing logic is executed once
12388         -- only since break related information is same across all the break lines
12389 	-- feb 22 toi comment end
12390         -- get the proration set up data only once
12391 
12392         if l_first_time_flag = 'Y' then
12393           select break_uom_code, break_uom_context, break_uom_attribute
12394             into l_break_uom_code, l_break_uom_context, l_break_uom_attribute
12395             from qp_npreq_ldets_tmp
12396            where line_detail_index = p_line_detail_index;
12397 
12398            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12399              engine_debug(l_routine||' l_break_uom_code = ' || l_break_uom_code);
12400              engine_debug(l_routine||' l_break_uom_context = ' || l_break_uom_context);
12401              engine_debug(l_routine||' l_break_uom_attribute = ' || l_break_uom_attribute);
12402            END IF;
12403         end if; --l_first_time_flag = 'Y'
12404 
12405 	IF l_break_uom_code IS NOT null THEN
12406         -- feb 22 toi comment start
12407           -- if break uom was set up, then get the passed break uom
12408           -- if break_uom is not set up, then no proration and proceed with normal price break evaluation
12409         -- feb 22 toi comment end
12410 	  -- price book
12411           IF nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES THEN
12412             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12413               engine_debug('call from price book with proration ==> skip this break entirely');
12414             END IF;
12415             EXIT; -- exit big loop to stop processing remaining child lines
12416           END IF;
12417         begin
12418             if l_first_time_flag = 'Y' then
12419               -- get the passed break uom only once
12420               select value_from
12421                 into l_passed_break_uom
12422                 from qp_npreq_line_attrs_tmp
12423                where line_index = p_line_index
12424                  and context = l_break_uom_context
12425                  and attribute = l_break_uom_attribute
12426                  and pricing_status_code = G_STATUS_UNCHANGED
12427                  and attribute_type = G_PRICING_TYPE;
12428             end if; --l_first_time_flag = 'Y'
12429 
12430             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12431               engine_debug(l_routine||' l_passed_break_uom = '|| l_passed_break_uom);
12432             END IF;
12433 
12434             -- break uom has been passed, do the proration
12435             l_proration_processed := 'Y';
12436 
12437             --if G_TIME_UOM_CONVERSION = 'ORACLE_CONTRACTS' then
12438             -- changed for R12 partial period pricing
12439             if (l_h_contract_start_date_tbl(i) is not null and
12440                 l_h_contract_end_date_tbl(i) is not null)
12441             then
12442               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12443                 engine_debug(l_routine||' OKS UOM conversion ');
12444               END IF;
12445 
12446                -- get the conversion factor by calling oks api
12447                -- call the oks api only once
12448                if l_first_time_flag = 'Y' then
12449                  select contract_start_date, contract_end_date
12450                    into l_contract_start_date, l_contract_end_date
12451                    from qp_npreq_lines_tmp
12452                   where line_index = p_line_index;
12453 
12454                  -- OKS_QP_INT.get_conversion_factor was replaced by
12455                  -- OKS_OMINT_PUB.get_quantity in R12 for partial period pricing
12456                  l_proration_factor := OKS_OMINT_PUB.get_quantity(
12457                                p_start_date => l_contract_start_date,
12458                                p_end_date   => l_contract_end_date,
12459                                p_source_uom => l_break_uom_code,
12460                                p_org_id     => QP_PREQ_GRP.G_CURRENT_USER_OP_UNIT);
12461 
12462                  IF l_proration_factor = 0 THEN
12463                     raise e_proration_fac_oks_error;
12464                  END IF;
12465                end if;
12466 
12467                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12468                  engine_debug(l_routine||' l_proration_factor = '|| l_proration_factor);
12469                END IF;
12470 
12471                if l_proration_factor is not null then
12472                   /* ER 3637202
12473                      bug fix 3715261 - after multiplying with proration factor, truncate the values
12474                      For 1st break line prorate as below
12475                      -----------------------------------
12476                         trunc(From * Proration Factor)          trunc(To * Proration Factor) ** changed behavior
12477 
12478                      For remaining break lines follow the below steps -
12479                      --------------------------------------------------
12480                      Gap = BreakLine (n) "From" - BreakLine (n-1) "To"
12481 
12482                      If Gap = 1
12483                        Prorated BreakLine (n-1) To + 1                  trunc(To * Proration Factor) ** changed behaviour
12484                      Else
12485                        trunc(BreakLine (n) From * Proration Factor) 		trunc(To * Proration Factor) ** changed behavior
12486                      End If
12487 
12488                      -- feb 22 toi comment start
12489                      Setup with fraction may cause issue as previous to value and current from value may become same and
12490                      currently pricing engine does not support overlapping price break ranges.
12491                      e.g   Value from     Value to
12492                               2             5
12493                               5.1           10
12494 
12495                      If this needs to be prorated by proration factor 2 the new price_break ranges will be
12496                             Value from     Value to
12497 		                1            2
12498                                 2            5
12499                       Thus, first break's value_to becomes equal to the second break's value_from.
12500                       This needs to be added to the Implementation Manual.
12501                      -- feb 22 toi comment end
12502 
12503                      ER 4061138 (Continuous Price Breaks)
12504                      For prorated break lines that are CONTINUOUS, the unrounded Value From is copied into
12505                      the previous break's Value To.   This deals with the problem inherent to mixed price
12506                      breaks with proration.
12507                      e.g.  Value From    Value To
12508                               1             100      <-- non-continuous break
12509                               100           200      <-- continuous
12510 
12511                            Apply a proration factor of 1/3
12512                            New From      New To
12513                               0             33       <-- 33 is trunc(33 1/3), old proration rule
12514                               33 1/3        66 2/3   <-- continuous = no trunc
12515 
12516                            Problem here is that the proration has introduced a gap between the first and
12517                            second break lines, and result can be that total satisfied qty <> ordered qty.
12518                            To fix this, we "borrow" the Value From to eliminate the unwanted gap.
12519                            New From      Newer To
12520                               0             33 1/3   <-- magic!
12521                               33 1/3        66 2/3
12522 
12523                      Refer to the enhancement document on Continuous Price Breaks for more details.
12524                   */
12525                  if l_first_time_flag = 'Y' then --means first price break
12526                    l_setup_value_from := trunc(l_setup_value_from * l_proration_factor);
12527                    l_prev_setup_to_value := l_value_to; -- store the un-prorated to value to determine setup gap
12528                    l_value_to := trunc(l_value_to * l_proration_factor);
12529                    l_prev_prorated_to_value := l_value_to; -- store the prorated to value to determine prorated value from for next break if setup gap is 1
12530                  else -- second break onwards
12531                    l_gap := l_setup_value_from - l_prev_setup_to_value;
12532                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12533                      engine_debug(l_routine||' l_gap = '|| l_gap);
12534                    END IF;
12535                    if l_gap = 0 then
12536                      -- 4061138, only for continuous breaks
12537                      l_continuous_flag := TRUE;
12538                      l_setup_value_from := l_setup_value_from * l_proration_factor;
12539                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12540                        engine_debug(l_routine||' * continuous price break');
12541                      END IF;
12542                    elsif l_gap = 1 then
12543                      -- non-continuous breaks with gap 1
12544                      -- 4687551, gap becomes precision of previous prorated to value
12545                      l_gap := abs(l_prev_prorated_to_value);
12546                      l_gap := power(10, -(length(to_char(l_gap-trunc(l_gap))) - 1));
12547                      l_setup_value_from := l_prev_prorated_to_value + l_gap;
12548                    else
12549                       l_setup_value_from := trunc(l_setup_value_from * l_proration_factor);
12550                    end if; -- if l_gap = 0
12551                    l_prev_setup_to_value := l_value_to;
12552                    l_value_to := l_value_to * l_proration_factor;
12553                    IF l_continuous_flag <> TRUE THEN
12554                      l_value_to := trunc(l_value_to);
12555                    END IF;
12556                    l_prev_prorated_to_value := l_value_to;
12557                  end if; -- if l_first_time_flag
12558                end if; --  if l_proration_factor is not null
12559                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12560                 engine_debug(l_routine||' l_setup_value_from = '|| l_setup_value_from);
12561                 engine_debug(l_routine||' l_value_to = '|| l_value_to);
12562                END IF;
12563 
12564             else
12565               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12566                 engine_debug(l_routine||' Standard UOM conversion ');
12567               END IF;
12568 
12569               -- OKS profile is not set, do standard uom conversion
12570               if l_first_time_flag = 'Y' then --means first price break
12571       	        convert_uom(l_passed_break_uom,
12572                           l_break_uom_code,
12573                       	  l_setup_value_from,  -- before conversion
12574                       	  l_value_temp,  -- after conversion
12575                       	  l_status_code,
12576                       	  l_status_text);
12577                 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12578                   raise E_INVALID_UOM_CONVERSION;
12579                 END IF;
12580 
12581                 -- 4061138 continuous break
12582                 -- remain non-continuous when value_from = 0, for OKS proration requirement
12583                 IF l_setup_value_from = 0 THEN
12584                   l_continuous_flag := FALSE;
12585                 END IF;
12586 
12587                 l_setup_value_from := trunc(l_value_temp);
12588 
12589                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12590                   engine_debug(l_routine||' l_setup_value_from = '|| l_setup_value_from);
12591                 END IF;
12592 
12593                 l_prev_setup_to_value := l_value_to; -- store the un-prorated to value to determine setup gap
12594 
12595       	        convert_uom(l_passed_break_uom,
12596                           l_break_uom_code,
12597                       	  l_value_to,  -- before conversion
12598                       	  l_value_temp,  -- after conversion
12599                       	  l_status_code,
12600                       	  l_status_text);
12601                 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12602                   raise E_INVALID_UOM_CONVERSION;
12603                 END IF;
12604 
12605                 -- 4061138, rewritten for continuous break logic
12606                 IF l_continuous_flag = TRUE THEN
12607                    -- first continuous break: do not trunc Value To
12608                    -- also, unset l_continuous flag even though this is continuous, because
12609                    -- later on when updating ldets, we don't want the flag to trigger an update
12610                    -- of the non-existent previous break's Value To
12611                   l_value_to := l_value_temp;
12612                   l_continuous_flag := FALSE;
12613                 ELSE
12614                   l_value_to := trunc(l_value_temp);
12615                 END IF;
12616 
12617                 l_prev_prorated_to_value := l_value_to; -- store the prorated to value to determine prorated value from for next break if setup gap is 1
12618                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12619                   engine_debug(l_routine||' l_value_to = '|| l_value_to);
12620                 END IF;
12621               else -- second breaks onwards
12622                 l_gap := l_setup_value_from - l_prev_setup_to_value;
12623                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12624                   engine_debug(l_routine||' l_gap = '|| l_gap);
12625                 END IF;
12626 
12627                 if l_gap = 1 then
12628                   -- 4687551, gap becomes precision of previous prorated to value
12629                   l_gap := abs(l_prev_prorated_to_value);
12630                   l_gap := power(10, -(length(to_char(l_gap-trunc(l_gap))) - 1));
12631                   l_setup_value_from := l_prev_prorated_to_value + l_gap;
12632                 else
12633       	          convert_uom(l_passed_break_uom,
12634                           l_break_uom_code,
12635                       	  l_setup_value_from,  -- before conversion
12636                       	  l_value_temp,  -- after conversion
12637                       	  l_status_code,
12638                       	  l_status_text);
12639                   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12640                     raise E_INVALID_UOM_CONVERSION;
12641                   END IF;
12642 
12643                   -- 4061138 continuous breaks
12644                   IF l_gap = 0 THEN
12645                     l_continuous_flag := TRUE;
12646                     l_setup_value_from := l_value_temp;
12647                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12648                       engine_debug(l_routine||' * continuous price break');
12649                     END IF;
12650                   ELSE
12651                     l_setup_value_from := trunc(l_value_temp);
12652                   END IF;
12653 
12654                 end if; -- if l_gap = 1
12655 
12656                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12657                   engine_debug(l_routine||' l_setup_value_from = '|| l_setup_value_from);
12658                 END IF;
12659 
12660                 l_prev_setup_to_value := l_value_to;
12661 
12662       	        convert_uom(l_passed_break_uom,
12663                           l_break_uom_code,
12664                       	  l_value_to,  -- before conversion
12665                       	  l_value_temp,  -- after conversion
12666                       	  l_status_code,
12667                       	  l_status_text);
12668                 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12669                   raise E_INVALID_UOM_CONVERSION;
12670                 END IF;
12671 
12672                 l_value_to := l_value_temp;
12673                 IF l_continuous_flag <> TRUE THEN -- 4061138
12674                   l_value_to := trunc(l_value_to);
12675                 END IF;
12676 
12677                 l_prev_prorated_to_value := l_value_to; -- store the prorated to value to determine prorated value from for next break if setup gap is 1
12678                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12679                   engine_debug(l_routine||' l_value_to = '|| l_value_to);
12680                 END IF;
12681               end if; -- if l_first_time_flag
12682 
12683             end if; -- OKS profile
12684 
12685           exception
12686             when no_data_found then
12687               -- if proration attribute is not passed, then no proration
12688               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12689                 engine_debug(l_routine||' no proration attribute passed ');
12690               END IF;
12691               null;
12692 
12693             when others then
12694               -- if proration attribute is not passed, then no proration
12695               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12696                 engine_debug(l_routine||' others exception, trying to find whether proration attr passed');
12697               END IF;
12698               null;
12699           end;
12700 
12701         end if; --l_break_uom_code is not null
12702      end if;
12703      /* Proration Changes END  */
12704 
12705      --pricing engine shd insert child lines for auth call even if no qty passed
12706      --if atleast one range is satisfied for RANGE break then only insert the chld lines
12707      -- for RANGE break bug# 2723612
12708      -- note for 4061138 continuous breaks: at this point, l_value_to has not
12709      -- been remapped with the next break's l_setup_value_from, so the between
12710      -- check may erroneously fail.  Further down the code during remapping
12711      -- the check if performed again.
12712      IF ((ABS(l_quantity) BETWEEN l_setup_value_from AND l_value_to) OR  -- for POINT--bug#15895472
12713          (l_h_price_break_type_code_tbl(i) = G_RANGE_BREAK AND ABS(l_quantity) >= l_setup_value_from) OR  -- for RANGE  --bug#15895472
12714          (l_h_usage_pricing_type_tbl(i) = G_AUTHORING_TYPE) OR -- for AUTHORING call
12715          (nvl(l_net_amount_flag, 'N') <> 'N')) --[julin/4671446] all net amount breaks pass here, to be qualified during calculation
12716      THEN
12717          l_VALID_PBH_FLAG := G_YES;
12718          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12719          engine_debug('In price break detail');
12720          END IF;
12721      END IF;
12722 
12723      -- Invariably insert the line details as we need all the line details even for POINT BREAK
12724      --IF (l_VALID_PBH_FLAG = G_YES) THEN
12725          -- julin [3805113]: table of records replaced by record of tables for bulk operations
12726          /*
12727          l_line_detail_tbl(N).list_header_id      := l_h_list_header_id_tbl(i);
12728          l_line_detail_tbl(N).list_line_id        := l_h_list_line_id_tbl(i);
12729          l_line_detail_tbl(N).list_line_type_code := l_h_list_line_type_code_tbl(i);
12730          l_line_detail_tbl(N).operand_calculation_code := l_h_arithmetic_operator_tbl(i);
12731          l_line_detail_tbl(N).operand_value       := l_h_operand_tbl(i);
12732          l_line_detail_tbl(N).list_price          := l_h_list_price_tbl(i);
12733          l_line_detail_tbl(N).pricing_group_sequence := l_h_pricing_group_sequence_tbl(i);
12734          l_line_detail_tbl(N).price_break_type_code  := l_h_price_break_type_code_tbl(i);
12735          l_line_detail_tbl(N).pricing_phase_id       := l_h_pricing_phase_id_tbl(i);
12736          l_line_detail_tbl(N).modifier_level_code    := l_h_modifier_level_code_tbl(i);
12737          l_line_detail_tbl(N).benefit_qty            := l_h_benefit_qty_tbl(i);
12738          l_line_detail_tbl(N).benefit_uom_code       := l_h_benefit_uom_code_tbl(i);
12739          l_line_detail_tbl(N).list_line_no           := l_h_list_line_no_tbl(i);
12740          l_line_detail_tbl(N).accrual_flag           := l_h_accrual_flag_tbl(i);
12741          l_line_detail_tbl(N).accrual_conversion_rate:= l_h_accrual_conv_rate_tbl(i);
12742          l_line_detail_tbl(N).estim_accrual_rate     := l_h_estim_accrual_rate_tbl(i);
12743          l_line_detail_tbl(N).recurring_value        := l_h_recurring_value_tbl(i); -- block pricing
12744          l_line_attrs_tbl(N).pricing_context         := l_h_pricing_attr_context_tbl(i);
12745          l_line_attrs_tbl(N).pricing_attribute       := l_h_pricing_attribute_tbl(i);
12746 
12747          l_line_detail_tbl(N).automatic_flag         := l_h_automatic_flag_tbl(i);
12748          l_line_detail_tbl(N).override_flag          := l_h_override_flag_tbl(i);
12749          l_line_detail_tbl(N).print_on_invoice_flag  := l_h_print_on_invoice_flag_tbl(i);
12750          l_line_detail_tbl(N).formula_id             := l_h_price_by_formula_id_tbl(i);
12751          l_line_detail_tbl(N).rounding_factor        := l_h_rounding_factor_tbl(i); /* Vivek /
12752          l_line_detail_tbl(N).currency_detail_id     := l_h_currency_detail_id_tbl(i); /* Vivek /
12753          l_line_detail_tbl(N).currency_header_id     := l_h_currency_header_id_tbl(i); /* Vivek /
12754          l_line_detail_tbl(N).selling_rounding_factor := l_h_selling_round_factor_tbl(i); /* Vivek /
12755          l_line_detail_tbl(N).order_currency         := l_h_order_currency_tbl(i); /* Vivek /
12756          l_line_detail_tbl(N).pricing_effective_date := l_h_pricing_effective_date_tbl(i); /* Vivek /
12757          l_line_detail_tbl(N).base_currency_code     := l_h_base_currency_code_tbl(i); /* Vivek /
12758          */
12759          /* Proration START */
12760          if l_proration_processed = 'Y' then
12761            l_h_pricing_attr_val_from_tbl(i) := qp_number.number_to_canonical(l_setup_value_from);
12762            l_h_pricing_attr_val_to_tbl(i) := qp_number.number_to_canonical(l_value_to);
12763            if l_continuous_flag = TRUE then
12764              -- 4061138
12765              l_h_pricing_attr_val_to_tbl(i-1) := l_h_pricing_attr_val_from_tbl(i);
12766              -- here, we do the aforementioned BETWEEN check again to catch the
12767              -- corner case where it failed because l_value_to was not remapped
12768              IF l_VALID_PBH_FLAG = G_NO and i>1 THEN
12769                -- only need to recheck the POINT break condition
12770                IF (l_quantity BETWEEN l_h_pricing_attr_val_from_tbl(i-1)
12771                    AND l_h_pricing_attr_val_to_tbl(i-1))
12772                THEN
12773                  l_VALID_PBH_FLAG := G_YES;
12774                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12775                    engine_debug(l_routine||' * passed between check after continuous break remapping');
12776                  END IF;
12777                END IF;
12778              END IF;
12779            end if;
12780          else
12781            l_h_pricing_attr_val_to_tbl(i) := nvl(l_h_pricing_attr_val_to_tbl(i),l_value_to);
12782          end if;
12783          --l_line_attrs_tbl(N).pricing_attr_value_from := l_h_pricing_attr_val_from_tbl(i);
12784          --l_line_attrs_tbl(N).pricing_attr_value_to   := nvl(l_h_pricing_attr_val_to_tbl(i),l_value_to);
12785          /* Proration END */
12786 
12787          N:=N+1;
12788      --END IF;
12789          l_first_time_flag := 'N';
12790 
12791          l_l_line_detail_index_tbl(i) := GET_LINE_DETAIL_INDEX;
12792 
12793          --VALIDATE price_break_type_code
12794          IF  (l_h_price_break_type_code_tbl(i) IS NULL) OR
12795              (l_h_price_break_type_code_tbl(i) NOT IN(G_RANGE_BREAK,G_POINT_BREAK))
12796          THEN
12797            --Data error, ignore this goto the end of loop
12798            RAISE E_INVALID_PRICE_BREAK_TYPE;
12799          END IF;
12800 
12801          l_l_selected_volume_attr_tbl(i)   := l_selected_volume_attr;
12802          l_l_G_CHILD_DETAIL_TYPE_tbl(i)    := G_CHILD_DETAIL_TYPE;
12803          l_l_p_line_index_tbl(i)           := p_line_index;
12804          l_l_G_STATUS_NEW_tbl(i)           := G_STATUS_NEW;
12805          l_l_G_NOT_PROCESSED_tbl(i)        := G_NOT_PROCESSED;
12806          l_l_group_quantity_tbl(i)         := p_group_quantity;
12807          l_l_group_amount_tbl(i)           := p_group_amount;
12808          l_l_list_type_code_tbl(i)         := p_list_type_code;
12809          l_l_G_DETAIL_LEVEL_tbl(i)         := G_DETAIL_LEVEL;
12810          l_l_G_PRICING_TYPE_tbl(i)         := G_PRICING_TYPE;
12811          l_l_G_BY_PBH_tbl(i)               := G_BY_PBH;
12812          l_l_G_OPERATOR_BETWEEN_tbl(i)     := G_OPERATOR_BETWEEN;
12813          l_l_p_list_line_id_tbl(i)         := p_list_line_id;
12814          l_l_G_PBH_LINE_tbl(i)             := G_PBH_LINE;
12815          l_l_G_PROCESSED_tbl(i)            := G_PROCESSED;
12816          l_l_quantity_tbl(i)               := l_quantity;
12817          l_l_p_line_detail_index_tbl(i)    := p_line_detail_index;
12818 
12819          -- julin [3805113]: storing to be used in call_calculation_engine()
12820          G_CHILD_VALUE_FROM_TBL(l_l_line_detail_index_tbl(i)) := l_h_pricing_attr_val_from_tbl(i);
12821          G_CHILD_VALUE_TO_TBL(l_l_line_detail_index_tbl(i)) := l_h_pricing_attr_val_to_tbl(i);
12822          G_PARENT_LINE_DETAIL_INDEX_TBL(l_l_line_detail_index_tbl(i)) := l_l_p_line_detail_index_tbl(i);
12823          -- 4061138
12824          if l_continuous_flag = TRUE then
12825            G_CHILD_VALUE_TO_TBL(l_l_line_detail_index_tbl(i-1)) := l_h_pricing_attr_val_from_tbl(i);
12826          end if;
12827 
12828          l_continuous_flag := FALSE; -- reset every break
12829 END IF;--bug#6896139
12830 END LOOP;
12831 END IF; -- l_h_list_line_id_tbl.COUNT > 0
12832 
12833   --after checking each break line, if any one of the break lines satified, insert all
12834   --the break lines to qp_npreq_ldets_tmp table and qp_npreq_rltd_lines_tmp table
12835   --and do not delete the parent line
12836   -- This flag tells that either it was a range break or atleast one of the break lines was satisfied in case of point break
12837   IF (l_VALID_PBH_FLAG = G_YES) THEN
12838     --FOR J IN 1..N-1 LOOP
12839 
12840 
12841                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12842                 engine_debug('Inserting line_detail');
12843                 END IF;
12844 
12845     -- julin [3805113]: bulk insert into qp_npreq_ldets_tmp
12846     IF (l_l_p_line_index_tbl.COUNT > 0) THEN
12847       FORALL i in l_l_p_line_index_tbl.FIRST..l_l_p_line_index_tbl.LAST
12848         INSERT INTO qp_npreq_ldets_tmp
12849                 (LINE_DETAIL_INDEX,
12850                  LINE_DETAIL_TYPE_CODE,
12851                  PRICE_BREAK_TYPE_CODE,
12852                  LINE_INDEX,
12853                  CREATED_FROM_LIST_HEADER_ID,
12854                  CREATED_FROM_LIST_LINE_ID,
12855                  CREATED_FROM_LIST_LINE_TYPE,
12856                  CREATED_FROM_LIST_TYPE_CODE,
12857                  PRICING_GROUP_SEQUENCE,
12858                  PRICING_PHASE_ID,
12859                  OPERAND_CALCULATION_CODE,
12860                  OPERAND_VALUE,
12861                  PRICE_FORMULA_ID,
12862                  PRICING_STATUS_CODE,
12863                  PROCESSED_FLAG,
12864                  AUTOMATIC_FLAG,
12865                  OVERRIDE_FLAG,
12866                  PRINT_ON_INVOICE_FLAG,
12867                  MODIFIER_LEVEL_CODE,
12868                  BENEFIT_QTY,
12869                  BENEFIT_UOM_CODE,
12870 		 SERVICE_DURATION,  -- service project
12871 		 SERVICE_PERIOD,  -- service project
12872                  LIST_LINE_NO,
12873                  ACCRUAL_FLAG,
12874                  ACCRUAL_CONVERSION_RATE,
12875                  ESTIM_ACCRUAL_RATE,
12876                  RECURRING_VALUE,
12877                  SELECTED_VOLUME_ATTR,
12878                  GROUP_QUANTITY,
12879                  GROUP_AMOUNT,
12880                  ROUNDING_FACTOR,
12881                  CURRENCY_DETAIL_ID,
12882                  CURRENCY_HEADER_ID,
12883                  SELLING_ROUNDING_FACTOR,
12884                  ORDER_CURRENCY,
12885                  PRICING_EFFECTIVE_DATE,
12886                  BASE_CURRENCY_CODE
12887                  )
12888         VALUES (l_l_line_detail_index_tbl(i),
12889               l_l_G_CHILD_DETAIL_TYPE_tbl(i),
12890               l_h_price_break_type_code_tbl(i),
12891               l_l_p_line_index_tbl(i),
12892               l_h_list_header_id_tbl(i),
12893               l_h_list_line_id_tbl(i),
12894               l_h_list_line_type_code_tbl(i),
12895               l_l_list_type_code_tbl(i),
12896               l_h_pricing_group_sequence_tbl(i),
12897               l_h_pricing_phase_id_tbl(i),
12898               l_h_arithmetic_operator_tbl(i),
12899               l_h_operand_tbl(i),
12900               l_h_price_by_formula_id_tbl(i),
12901               l_l_G_STATUS_NEW_tbl(i),
12902               l_l_G_NOT_PROCESSED_tbl(i),
12903               l_h_automatic_flag_tbl(i),
12904               l_h_override_flag_tbl(i),
12905               l_h_print_on_invoice_flag_tbl(i),
12906               l_h_modifier_level_code_tbl(i),
12907               l_h_BENEFIT_QTY_tbl(i),
12908               l_h_BENEFIT_UOM_CODE_tbl(i),
12909 	      l_h_service_duration_tbl(i),  -- service project
12910 	      l_h_service_period_tbl(i),  -- service project
12911               l_h_LIST_LINE_NO_tbl(i),
12912               l_h_ACCRUAL_FLAG_tbl(i),
12913               l_h_accrual_conv_rate_tbl(i),
12914               l_h_ESTIM_ACCRUAL_RATE_tbl(i),
12915               l_h_RECURRING_VALUE_tbl(i), -- block pricing
12916               l_l_selected_volume_attr_tbl(i),
12917               l_l_group_quantity_tbl(i),
12918               l_l_group_amount_tbl(i),
12919               l_h_ROUNDING_FACTOR_tbl(i),
12920               l_h_CURRENCY_DETAIL_ID_tbl(i),
12921               l_h_CURRENCY_HEADER_ID_tbl(i),
12922               l_h_selling_round_factor_tbl(i),
12923               l_h_ORDER_CURRENCY_tbl(i),
12924               l_h_PRICING_EFFECTIVE_DATE_tbl(i),
12925               l_h_BASE_CURRENCY_CODE_tbl(i)
12926              );
12927     END IF;
12928 
12929      --set the parents PBH type. PBH can be either discount break or price list break
12930      --also set the processed_flag to indicate that this parent have been processed.
12931 
12932 /*
12933 INDX,QP_PREQ_GRP.handle_break.upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
12934 */
12935     UPDATE qp_npreq_ldets_tmp  --upd3
12936     SET processed_flag = G_PROCESSED -- indicates that this PBH is processed
12937     WHERE line_detail_index = p_line_detail_index;
12938 
12939     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12940      engine_debug('#L1');
12941     END IF;
12942 
12943     -- julin [3805113]: bulk insert into qp_npreq_line_attrs_tmp
12944     IF (l_l_p_line_index_tbl.COUNT > 0) THEN
12945       FORALL J IN l_l_p_line_index_tbl.first..l_l_p_line_index_tbl.last
12946         INSERT INTO qp_npreq_line_attrs_tmp
12947          (LINE_INDEX,
12948           LINE_DETAIL_INDEX,
12949           ATTRIBUTE_LEVEL,
12950           ATTRIBUTE_TYPE,
12951           CONTEXT,
12952           ATTRIBUTE,
12953           VALUE_FROM,
12954           VALUE_TO,
12955           SETUP_VALUE_FROM,
12956           SETUP_VALUE_TO,
12957           PROCESSED_CODE,
12958           COMPARISON_OPERATOR_TYPE_CODE,
12959           PRICING_STATUS_CODE
12960          )
12961         VALUES (l_l_p_line_index_tbl(J),
12962               l_l_line_detail_index_tbl(J),
12963               l_l_G_DETAIL_LEVEL_tbl(J),
12964               l_l_G_PRICING_TYPE_tbl(J),
12965               l_h_pricing_attr_context_tbl(J),
12966               l_h_pricing_attribute_tbl(J),
12967               l_h_pricing_attr_val_from_tbl(J),
12968               l_h_pricing_attr_val_to_tbl(J),
12969               l_h_pricing_attr_val_from_tbl(J),
12970               l_h_pricing_attr_val_to_tbl(J),
12971               l_l_G_BY_PBH_tbl(J),
12972               l_l_G_OPERATOR_BETWEEN_tbl(J),
12973               l_l_G_STATUS_NEW_tbl(J)
12974             );
12975     END IF;
12976 
12977     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12978      engine_debug('#L2');
12979     END IF;
12980 
12981     -- julin [3805113]: bulk insert into qp_npreq_rltd_lines_tmp
12982     IF (l_l_p_line_index_tbl.COUNT > 0) THEN
12983       FORALL J IN l_l_p_line_index_tbl.first..l_l_p_line_index_tbl.last
12984         INSERT INTO qp_npreq_rltd_lines_tmp
12985           (LINE_INDEX,
12986            LINE_DETAIL_INDEX,
12987            RELATIONSHIP_TYPE_CODE,
12988            RELATED_LINE_INDEX,
12989            RELATED_LINE_DETAIL_INDEX,
12990            PRICING_STATUS_CODE,
12991            PRICING_STATUS_TEXT,
12992            LIST_LINE_ID,
12993            RELATED_LIST_LINE_ID,
12994            RELATED_LIST_LINE_TYPE,
12995            OPERAND_CALCULATION_CODE,
12996            OPERAND,
12997            PRICING_GROUP_SEQUENCE,
12998            RELATIONSHIP_TYPE_DETAIL,
12999            SETUP_VALUE_FROM,
13000            SETUP_VALUE_TO,
13001            QUALIFIER_VALUE
13002           )
13003         VALUES (l_l_p_line_index_tbl(J),
13004                 l_l_p_line_detail_index_tbl(J),
13005                 l_l_G_PBH_LINE_tbl(J),
13006                 l_l_p_line_index_tbl(J),
13007                 l_l_line_detail_index_tbl(J),
13008                 l_l_G_STATUS_NEW_tbl(J),
13009                 l_l_G_PROCESSED_tbl(J),
13010                 l_l_p_list_line_id_tbl(J),
13011                 l_h_list_line_id_tbl(J),
13012                 l_h_list_line_type_code_tbl(J),
13013                 l_h_arithmetic_operator_tbl(J),
13014                 l_h_operand_tbl(J),
13015                 l_h_pricing_group_sequence_tbl(J),
13016                 l_h_price_break_type_code_tbl(J),
13017                 qp_number.canonical_to_number(l_h_pricing_attr_val_from_tbl(J)),
13018                 qp_number.canonical_to_number(l_h_pricing_attr_val_to_tbl(J)),
13019                 l_l_quantity_tbl(J));
13020     END IF;
13021 
13022      IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
13023       engine_debug('#L3');
13024      END IF;
13025     --END LOOP;  --END J LOOP
13026 
13027     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
13028      engine_debug('#L4');
13029     END IF;
13030   ELSE
13031     --None of the child price break statifies, hence parent is disqualified
13032    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13033    engine_debug(l_routine||' CHILD LINES ARE NOT SATISFIED');
13034 
13035    END IF;
13036    x_is_break_satisfy := FALSE;
13037 
13038   END IF;
13039 
13040     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
13041      engine_debug('#L5');
13042     END IF;
13043 
13044   l_VALID_PBH_FLAG := 'N';
13045   l_total_item_quantity := NULL; -- shu, reset
13046   l_quantity := NULL; --shu, reset
13047 
13048 EXCEPTION
13049   WHEN E_INVALID_PRICE_BREAK_TYPE THEN
13050     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13051      engine_debug('PRICE BREAK TYPE CODE IS NULL OR INVALID');
13052     END IF;
13053       SET_STATUS_CODE(G_STATUS_OTHER_ERRORS,
13054                       'PRICE BREAK TYPE CODE IS EITHER NULL OR INVALID: '||l_h_price_break_type_code_tbl(J)||'list_line_id: '|| l_h_list_line_id_tbl(J),
13055                        P_LINE_INDEX,
13056                        NULL,
13057                       'LINES',
13058                        l_status_code,
13059                        l_status_text);
13060   WHEN E_INVALID_UOM_CONVERSION THEN-- shulin
13061    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13062   	engine_debug('INVALID UOM CONVERSION FOR TOTAL_ITEM_QUANTITY');
13063    END IF;
13064       	SET_STATUS_CODE(G_STATUS_OTHER_ERRORS,
13065                       'INVALID UOM CONVERSION FOR TOTAL_ITEM_QUANTITY : '||l_status_text,
13066                        P_LINE_INDEX,
13067                        NULL,
13068                       'LINES',
13069                        l_status_code,
13070                        l_status_text);
13071   -- Proration Start
13072   WHEN e_proration_fac_oks_error then
13073    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13074   	engine_debug('Error while calling oks api to get proration factor');
13075    END IF;
13076       	SET_STATUS_CODE(G_STATUS_OTHER_ERRORS,
13077                       'Error while calling oks api to get proration factor',
13078                        P_LINE_INDEX,
13079                        NULL,
13080                       'LINES',
13081                        l_status_code,
13082                        l_status_text);
13083 
13084   -- Proration End
13085 
13086   WHEN OTHERS THEN
13087      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13088       engine_debug('#Exception L6');
13089       engine_debug(l_routine || ' ' || SQLERRM);
13090      END IF;
13091      x_status_code := FND_API.G_RET_STS_ERROR;
13092      x_status_text := l_routine||': '||SQLERRM;
13093 
13094 END Handle_Break; --end procedure
13095 
13096 /*+------------------------------------------------------------
13097   |delete children pbh lines if the parent fails
13098   +-----------------------------------------------------------
13099 */
13100 
13101 PROCEDURE Delete_Invalid_PBH_Children(p_line_index IN PLS_INTEGER,
13102                                       p_pricing_phase_id NUMBER,
13103                                       x_status_code OUT NOCOPY VARCHAR2,
13104                                       x_status_text OUT NOCOPY VARCHAR2) AS
13105 /*
13106 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
13107 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
13108 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
13109 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
13110 */
13111 CURSOR l_check_deleted_pbh_cur(p_line_index IN PLS_INTEGER) IS
13112 SELECT line_detail_index
13113 FROM   qp_npreq_ldets_tmp
13114 WHERE  created_from_list_line_type = G_PRICE_BREAK_TYPE
13115 AND   line_index = p_line_index
13116 AND   pricing_phase_id = p_pricing_phase_id
13117 AND   pricing_status_code <> G_STATUS_NEW
13118 AND   nvl(updated_flag,'N') = 'N'; -- to not delete passed adj by the calling app since updated_flag='Y'
13119 
13120 l_routine VARCHAR2(240):='QP_PREQ_GRP.Delete_invalid_PBH_Children';
13121 BEGIN
13122   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13123   engine_debug('in Delete_Invalid_PBH_Children');
13124   END IF;
13125   FOR I IN l_check_deleted_pbh_cur(p_line_index) LOOP
13126 /*
13127 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.delete_invalid_pbh_children_upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13128 */
13129 /*
13130 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.delete_invalid_pbh_children_sel1,-No Index Used-,NA,NA
13131 */
13132     UPDATE qp_npreq_ldets_tmp a
13133     SET PRICING_STATUS_CODE = G_DELETED_PARENT_FAILS
13134     WHERE line_detail_index IN
13135     (SELECT related_line_detail_index
13136      FROM qp_npreq_rltd_lines_tmp
13137      WHERE line_detail_index = I.line_detail_index);
13138 /*
13139 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.upd2,-No Index Used-,NA,NA
13140 */
13141     UPDATE qp_npreq_rltd_lines_tmp --upd2
13142     SET PRICING_STATUS_CODE = G_DELETED_PARENT_FAILS
13143     WHERE line_detail_index = I.line_detail_index;
13144 
13145   END LOOP;
13146 
13147 EXCEPTION
13148   WHEN OTHERS THEN
13149    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13150    engine_debug(l_routine||' '||SQLERRM);
13151    END IF;
13152    x_status_code := FND_API.G_RET_STS_ERROR;
13153    x_status_text := l_routine||': '||SQLERRM;
13154 END Delete_Invalid_PBH_Children;
13155 
13156 /*+------------------------------------------------------------
13157  |GET_ELIGIBLE_PRICE_BREAK
13158  +--------------------------------------------------------------
13159 */
13160 
13161 PROCEDURE GET_ELIGIBLE_PRICE_BREAK(p_pricing_phase_id NUMBER,
13162                                    p_line_index NUMBER := NULL,
13163                                    x_status_code OUT NOCOPY VARCHAR2,
13164                                    x_status_text OUT NOCOPY VARCHAR2)
13165 AS
13166 --Index Certificate
13167 /*
13168 Can use N2 instead of N4
13169 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
13170 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
13171 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,LINE_INDEX,3
13172 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,CREATED_FROM_LIST_LINE_TYPE,4
13173 */
13174 -- Do price break processing only for unprocessed lines(line_index) in a phase bug 2386934
13175 -- without the not exists clause price break processing was hapenning 2 times if there is an
13176 -- order line where in price list is not passed and there is an order line where price list was passed and
13177 -- price break processing was done for the passed price list line. Price break processing is hapenning again
13178 -- when big search is done for the line where price list not passed.
13179 -- process only the price break lines that are not processed -- Bug #2717117
13180 CURSOR l_price_break_parent_cur IS
13181      SELECT /*+ index(a qp_npreq_ldets_tmp_N2) */ --bug 9362867
13182 	    created_from_list_header_id list_header_id , created_from_list_line_id list_line_id,
13183             group_quantity ,group_amount, line_detail_index, line_index, line_quantity -- 2388011, pbh_grp_lines
13184             , created_from_list_type_code
13185      FROM   qp_npreq_ldets_tmp  a
13186      WHERE  created_from_list_line_type = G_PRICE_BREAK_TYPE
13187      AND    pricing_status_code = G_STATUS_NEW
13188      AND    pricing_phase_id = p_pricing_phase_id
13189      AND    nvl(processed_flag,G_NOT_PROCESSED) = G_NOT_PROCESSED;
13190      --AND    line_index > 0
13191      --AND    not exists (select 'X'
13192      --                   from qp_npreq_rltd_lines_tmp b
13193      --                   where a.line_index = b.line_index
13194      --                   and  a.created_from_list_line_id = b.list_line_id
13195      --                   and  b.relationship_type_code = G_PBH_LINE
13196      --                   and  nvl(b.pricing_status_text,G_NOT_PROCESSED) <> G_PROCESSED);
13197 
13198      --AND    line_index = nvl(p_line_index,line_index);
13199 
13200 l_routine VARCHAR2(240):='Routine: QP_PREQ_GRP.GET_ELIGIBLE_PRICE_BREAK';
13201 l_is_break_satisfy Boolean:=TRUE;
13202 G_LIST_HEADER_ID_TBL_G    NUMBER_TYPE;
13203 G_LIST_LINE_ID_TBL_G      NUMBER_TYPE;
13204 G_GROUP_QUANTITY_TBL_G    NUMBER_TYPE;
13205 G_GROUP_AMOUNT_TBL_G      NUMBER_TYPE;
13206 G_LINE_DETAIL_INDEX_TBL_G NUMBER_TYPE;
13207 G_LINE_INDEX_TBL_G        NUMBER_TYPE;
13208 G_LINE_QUANTITY_TBL_G     NUMBER_TYPE;
13209 G_LIST_TYPE_CODE_TBL_G    VARCHAR_TYPE;
13210 g_failed_ld_tbl_g         NUMBER_TYPE;
13211 v_count                   PLS_INTEGER := 1;
13212 l_status_code             VARCHAR2(30);
13213 l_status_text             VARCHAR2(240);
13214 
13215 nROWS CONSTANT NUMBER := 1000;
13216 E_ROUTINE_ERRORS EXCEPTION;
13217 
13218 BEGIN
13219 qp_debug_util.tstart('GET_ELIGIBLE_PRICE_BREAK','Procedure GET_ELIGIBLE_PRICE_BREAK');
13220  OPEN l_price_break_parent_cur;
13221 
13222  LOOP
13223 
13224   G_LIST_HEADER_ID_TBL_G.delete;
13225   G_LIST_LINE_ID_TBL_G.delete;
13226   G_GROUP_QUANTITY_TBL_G.delete;
13227   G_GROUP_AMOUNT_TBL_G.delete;
13228   G_LINE_DETAIL_INDEX_TBL_G.delete;
13229   G_LINE_INDEX_TBL_G.delete;
13230   G_LINE_QUANTITY_TBL_G.delete;
13231   G_LIST_TYPE_CODE_TBL_G.delete;
13232 
13233  FETCH l_price_break_parent_cur BULK COLLECT INTO
13234     G_LIST_HEADER_ID_TBL_G
13235   , G_LIST_LINE_ID_TBL_G
13236   , G_GROUP_QUANTITY_TBL_G
13237   , G_GROUP_AMOUNT_TBL_G
13238   , G_LINE_DETAIL_INDEX_TBL_G
13239   , G_LINE_INDEX_TBL_G
13240   , G_LINE_QUANTITY_TBL_G
13241   , G_LIST_TYPE_CODE_TBL_G LIMIT nROWS;
13242  EXIT WHEN G_LINE_INDEX_TBL_G.COUNT = 0;
13243 
13244  IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
13245   FOR I in G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
13246   LOOP
13247 
13248      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13249       engine_debug('Checking break for: '||g_list_line_id_tbl_g(i) || ' Line Index : ' || g_line_index_tbl_g(i));
13250      END IF;
13251 
13252      l_is_break_satisfy := TRUE;
13253 
13254      HANDLE_BREAK(p_list_header_id    => g_list_header_id_tbl_g(i),
13255                   p_list_line_id      => g_list_line_id_tbl_g(i),
13256                   p_pricing_phase_id  => p_pricing_phase_id,
13257                   p_line_detail_index => g_line_detail_index_tbl_g(i),
13258                   p_line_index        => g_line_index_tbl_g(i),
13259                   p_group_quantity    => g_group_quantity_tbl_g(i),
13260                   --p_group_amount      => I.group_amount,
13261                   p_group_amount      => g_line_quantity_tbl_g(i), -- 2388011
13262                   p_list_type_code      => g_list_type_code_tbl_g(i),
13263                   x_is_break_satisfy  => l_is_break_satisfy,
13264                   x_status_code       => l_status_code,
13265                   x_status_text       => l_status_text);
13266 	 IF l_status_code=FND_API.G_RET_STS_ERROR THEN
13267 	   RAISE E_ROUTINE_ERRORS;
13268 	 END IF;
13269 
13270      IF(l_is_break_satisfy = FALSE) THEN
13271        v_count := v_count + 1;
13272        g_failed_ld_tbl_g(v_count) := g_line_detail_index_tbl_g(i);
13273      END IF;
13274 
13275   END LOOP;
13276  END IF;
13277    --END LOOP;
13278  END LOOP;
13279  CLOSE l_price_break_parent_cur;
13280 
13281  IF (g_failed_ld_tbl_g.count > 0) THEN
13282   FORALL i in g_failed_ld_tbl_g.first .. g_failed_ld_tbl_g.last
13283    UPDATE qp_npreq_ldets_tmp
13284    SET PRICING_STATUS_CODE = G_DELETED_PBH
13285    WHERE LINE_DETAIL_INDEX = g_failed_ld_tbl_g(i);
13286  END IF;
13287 
13288  -- if price break price lists are deleted at this point , then mark the status on the line for
13289  -- secondary or big search. Do this only for pricing phase
13290  IF (g_failed_ld_tbl_g.count > 0 and p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
13291   -- To make sure lines which did not get the price and do not have a record in qp_npreq_ldets_tmp get picked up
13292   UPDATE qp_npreq_lines_tmp a
13293   SET    processed_code = G_STS_LHS_NOT_FOUND
13294   WHERE  NOT EXISTS (SELECT 'x'
13295                 FROM   qp_npreq_ldets_tmp b
13296                 WHERE a.line_index = b.line_index
13297                 AND   b.pricing_status_code = G_STATUS_NEW
13298                 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
13299   AND   line_type_code <> G_ORDER_LEVEL;
13300 
13301  END IF;
13302 qp_debug_util.tstop('GET_ELIGIBLE_PRICE_BREAK');
13303 EXCEPTION
13304   WHEN E_ROUTINE_ERRORS THEN
13305     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13306       engine_debug(l_routine || ': ' ||l_status_text);
13307      END IF;
13308      x_status_code := FND_API.G_RET_STS_ERROR;
13309      x_status_text := l_routine || ': ' ||l_status_text;
13310      qp_debug_util.tstop('GET_ELIGIBLE_PRICE_BREAK');
13311   WHEN OTHERS THEN
13312      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13313       engine_debug(l_routine || ' ' || SQLERRM);
13314      END IF;
13315      x_status_code := FND_API.G_RET_STS_ERROR;
13316      x_status_text := l_routine||' '||SQLERRM;
13317 	qp_debug_util.tstop('GET_ELIGIBLE_PRICE_BREAK');
13318 END Get_Eligible_Price_Break;
13319 
13320 /*+--------------------------------------------------------
13321   | PROCEDURE PERFORM_GROUPING
13322   +--------------------------------------------------------
13323 */
13324 PROCEDURE PERFORM_GROUPING(p_pricing_phase_id NUMBER,
13325                            p_line_index NUMBER := NULL,
13326                            x_status_code OUT NOCOPY VARCHAR2,
13327                            x_status_text OUT NOCOPY VARCHAR2) AS
13328 
13329 -- Header Level Quals Passed
13330 -- We need to include the records deleted in NOT= and Between Processing here , otherwise the cursor
13331 -- would not fetch any records and grouping would be successful .
13332 -- Even when deleted in NOT= and Between processing they need to go thru grouping and get deleted
13333 
13334 /*
13335 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
13336 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
13337 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
13338 
13339 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13340 
13341 */
13342 
13343 --Pricing Phase Change
13344 CURSOR header_level_qual_attrs_cur IS
13345 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) header_level_qual_attrs_cur */
13346        a.LIST_HEADER_ID,
13347        a.LIST_LINE_ID,
13348        a.LINE_INDEX,
13349        a.GROUPING_NUMBER,
13350        a.LINE_DETAIL_INDEX,
13351        COUNT(distinct CONTEXT || ATTRIBUTE || SETUP_VALUE_FROM ) NO_OF_QUALIFIERS_IN_GRP --#bug1761272
13352 FROM   qp_npreq_line_attrs_tmp a,qp_npreq_ldets_tmp b
13353 WHERE  a.PRICING_PHASE_ID = p_pricing_phase_id
13354 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13355 AND    a.QUALIFIER_TYPE = G_HEADER_QUALIFIER
13356 AND    a.LINE_DETAIL_INDEX = b.LINE_DETAIL_INDEX
13357 AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
13358 AND    a.PRICING_STATUS_CODE IN (G_STATUS_NEW,G_DELETED_EXCLUDER,G_DELETED_BETWEEN)
13359 GROUP  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER
13360 ORDER  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER ;
13361 
13362 -- Index Certificate
13363 --Pricing Phase Change
13364 /*
13365 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
13366 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
13367 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
13368 
13369 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13370 
13371 */
13372 
13373 CURSOR line_level_qual_attrs_cur2 IS
13374 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) line_level_qual_attrs_cur2 */
13375        a.LIST_HEADER_ID,
13376        a.LIST_LINE_ID,
13377        a.LINE_INDEX,
13378        a.GROUPING_NUMBER,
13379        a.LINE_DETAIL_INDEX,
13380        COUNT(distinct CONTEXT || ATTRIBUTE || SETUP_VALUE_FROM ) NO_OF_QUALIFIERS_IN_GRP --#bug1761272
13381 FROM   qp_npreq_line_attrs_tmp a,qp_npreq_ldets_tmp b
13382 WHERE  a.PRICING_PHASE_ID = p_pricing_phase_id
13383 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13384 AND    a.QUALIFIER_TYPE = G_LINE_QUALIFIER
13385 AND    a.PRICING_STATUS_CODE IN (G_STATUS_NEW,G_DELETED_EXCLUDER,G_DELETED_BETWEEN)
13386 AND    a.LINE_DETAIL_INDEX = b.LINE_DETAIL_INDEX
13387 AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
13388 GROUP  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER
13389 ORDER  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER ;
13390 
13391 -- Get the count of records where Price list is a qualifier(for secondary price lists only)
13392 /*
13393 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13394 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13395 
13396 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_pl_quals_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
13397 */
13398 CURSOR hdr_lvl_setup_pl_quals_cur(p_list_header_id  NUMBER) IS
13399 SELECT /*+ ORDERED index(a QP_QUALIFIERS_N1) */ COUNT(*) NO_OF_QUALIFIERS_IN_GRP  --bug 12867791
13400 FROM   QP_QUALIFIERS a , QP_LIST_HEADERS_B b
13401 WHERE  a.LIST_HEADER_ID = p_list_header_id
13402 AND    a.list_line_id = -1
13403 AND    a.QUALIFIER_CONTEXT = 'MODLIST'
13404 AND    a.QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE4'
13405 AND    a.LIST_HEADER_ID = b.LIST_HEADER_ID
13406 AND    b.LIST_TYPE_CODE IN ('AGR', 'PRL') ;
13407 
13408 -- Get the count of records where Price list is a qualifier(for secondary price lists only)
13409 /*
13410 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13411 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13412 
13413 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_pl_quals_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
13414 */
13415 
13416 CURSOR line_level_setup_pl_quals_cur(p_list_header_id  NUMBER,
13417 							  p_list_line_id    NUMBER) IS
13418 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13419 FROM   QP_QUALIFIERS a , QP_LIST_HEADERS_B b
13420 WHERE  a.LIST_HEADER_ID = p_list_header_id
13421 AND    a.list_line_id = p_list_line_id
13422 AND    a.QUALIFIER_CONTEXT = 'MODLIST'
13423 AND    a.QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE4'
13424 AND    a.LIST_HEADER_ID = b.LIST_HEADER_ID
13425 AND    b.LIST_TYPE_CODE IN ('AGR', 'PRL') ;
13426 
13427 
13428 /*
13429 INDX,QP_PREQ_GRP.perform_grouping.header_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13430 INDX,QP_PREQ_GRP.perform_grouping.header_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13431 INDX,QP_PREQ_GRP.perform_grouping.header_level_setup_quals_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13432 */
13433 CURSOR header_level_setup_quals_cur(p_list_header_id  NUMBER,
13434                                     p_grouping_number NUMBER) IS
13435 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13436 FROM   QP_QUALIFIERS a
13437 WHERE  a.LIST_HEADER_ID = p_list_header_id
13438 AND    a.list_line_id = -1
13439 AND    a.qualifier_grouping_no = p_grouping_number ;
13440 --AND    COMPARISON_OPERATOR_CODE <> 'NOT =';
13441 
13442 --Null grouping number under same list_header_id is also an 'AND' condition
13443 --for all groups that share the same list_header_id.
13444 --That is, it need to present for a modifier/price list to get selected. Hence
13445 --it need to be condisered when counting number of  qualifier in group
13446 
13447 /*
13448 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13449 */
13450 CURSOR header_setup_null_group_cur(p_list_header_id NUMBER) IS
13451 SELECT count(*)
13452 FROM   qp_qualifiers
13453 WHERE  list_header_id = p_list_header_id
13454 AND    qualifier_grouping_no = -1
13455 AND    list_line_id = -1;
13456 --AND    comparison_operator_code <> 'NOT =';
13457 
13458 --count including null and not null group
13459 /*
13460 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13461 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13462 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur2,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
13463 */
13464 CURSOR header_setup_null_group_cur2(p_list_header_id NUMBER) IS
13465 SELECT count(*)
13466 FROM   qp_qualifiers
13467 WHERE  list_header_id = p_list_header_id
13468 AND    list_line_id = -1
13469 AND    comparison_operator_code <> 'NOT =';
13470 
13471 
13472 /*
13473 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13474 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13475 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13476 */
13477 CURSOR line_setup_null_group_cur(p_list_header_id NUMBER,
13478                                  p_list_line_id   NUMBER) IS
13479 SELECT count(*)
13480 FROM   qp_qualifiers
13481 WHERE  list_header_id = p_list_header_id
13482 AND    list_line_id   = p_list_line_id
13483 AND    qualifier_grouping_no = -1;
13484 --AND    comparison_operator_code <> 'NOT =';
13485 
13486 --count including null and not null group for line level qualifier
13487 /*
13488 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13489 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13490 */
13491 CURSOR line_setup_null_group_cur2(p_list_header_id NUMBER,p_list_line_id NUMBER) IS
13492 SELECT count(*)
13493 FROM   qp_qualifiers
13494 WHERE  list_header_id = p_list_header_id
13495 AND    list_line_id = p_list_line_id;
13496 --AND    comparison_operator_code <> 'NOT =';
13497 
13498 /*
13499 -- Can use N2 instead of N6 , but a better index is needed for this query
13500 */
13501 CURSOR line_level_qual_attrs_cur(p_list_header_id NUMBER,
13502                                  p_list_line_id   NUMBER) IS
13503 SELECT LIST_HEADER_ID,
13504        LIST_LINE_ID ,
13505        LINE_INDEX,
13506        GROUPING_NUMBER,
13507        LINE_DETAIL_INDEX,
13508        COUNT(distinct CONTEXT || ATTRIBUTE || SETUP_VALUE_FROM ) NO_OF_QUALIFIERS_IN_GRP --#bug1761272
13509 FROM   qp_npreq_line_attrs_tmp
13510 WHERE  ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13511 AND    QUALIFIER_TYPE = G_LINE_QUALIFIER
13512 AND    PRICING_STATUS_CODE IN (G_STATUS_NEW,G_DELETED_EXCLUDER,G_DELETED_BETWEEN)
13513 AND    LIST_HEADER_ID = p_list_header_id
13514 AND    LIST_LINE_ID = p_list_line_id
13515 --AND    LINE_INDEX = nvl(p_line_index,LINE_INDEX)
13516 GROUP  BY LIST_HEADER_ID,LIST_LINE_ID,LINE_INDEX,LINE_DETAIL_INDEX,GROUPING_NUMBER
13517 ORDER  BY LIST_HEADER_ID,LIST_LINE_ID,LINE_INDEX,LINE_DETAIL_INDEX,GROUPING_NUMBER ;
13518 
13519 /*
13520 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13521 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13522 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_quals_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13523 */
13524 CURSOR line_level_setup_quals_cur(p_list_header_id NUMBER,
13525                                   p_list_line_id   NUMBER,
13526                                   p_grouping_no    NUMBER) IS
13527 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13528 FROM   QP_QUALIFIERS a
13529 WHERE  a.LIST_HEADER_ID = p_list_header_id
13530 AND    a.list_line_id   = p_list_line_id
13531 AND    a.qualifier_grouping_no = p_grouping_no;
13532 --AND    COMPARISON_OPERATOR_CODE <> 'NOT =';
13533 
13534 --check if there is header_level_qual passed in at all
13535 /*
13536 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13537 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13538 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13539 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13540 -- Change
13541 */
13542 CURSOR header_level_quals_exist_cur(p_list_header_id NUMBER,p_line_index PLS_INTEGER) IS
13543 SELECT 'X'
13544 FROM   qp_npreq_line_attrs_tmp
13545 WHERE  list_header_id = p_list_header_id
13546 AND    line_index     = p_line_index
13547 AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13548 AND    QUALIFIER_TYPE = G_HEADER_QUALIFIER
13549 AND    PRICING_STATUS_CODE = G_STATUS_NEW;
13550 
13551 /*
13552 INDX,QP_PREQ_GRP.perform_grouping.line_lvl_setup_exist_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13553 INDX,QP_PREQ_GRP.perform_grouping.line_lvl_setup_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13554 */
13555 CURSOR line_lvl_setup_exist_cur(p_list_header_id NUMBER,
13556                                 p_list_line_id   NUMBER) IS
13557 SELECT 'X'
13558 FROM   qp_qualifiers
13559 WHERE  list_header_id = p_list_header_id
13560 AND    list_line_id = p_list_line_id;
13561 
13562 /*
13563 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_quals_exist_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13564 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_quals_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13565 */
13566 CURSOR hdr_lvl_setup_quals_exist_cur(p_list_header_id NUMBER) IS
13567 SELECT 'X'
13568 FROM qp_qualifiers
13569 WHERE LIST_HEADER_ID = p_list_header_id
13570 AND   list_line_id = -1;
13571 
13572 -- volume attributes that are sourced in engine , we do not want to look at these attrs when doing product grouping
13573 -- Quantity Attribute and Line Amount Attribute
13574 -- Need not actually look at Pricing attribute , because there is always a product associated with it
13575 -- When looking at pricing attributes , we need to get distinct pricing attributes as , a same pricing attribute for the
13576 -- same list line id and line index can be there in the temp table more than once. Combination of Context and Attribute's
13577 -- distinctness is what is looked for
13578 
13579 /*
13580 INDX,QP_PREQ_GRP.perform_grouping.product_level_attrs_cur,QP_RLTD_MODIFIERS_N2,TO_RLTD_MODIFIER_ID,1
13581 */
13582 
13583 /*
13584 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
13585 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
13586 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
13587 
13588 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13589 
13590 */
13591 --Pricing Phase Change
13592 CURSOR product_level_attrs_cur IS
13593 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) index(b QP_PREQ_LDETS_TMP_U1) product_level_attrs_cur */   --5658579
13594        a.LIST_HEADER_ID , a.LIST_LINE_ID , a.LINE_INDEX,
13595        SUM(distinct(decode(a.attribute_type,G_PRODUCT_TYPE,1,0))) +
13596        COUNT(distinct(decode(a.attribute_type,G_PRICING_TYPE, a.context || ' ' || a.attribute || ' ' || setup_value_from ,NULL)))
13597 										NO_OF_PATTS_IN_GRP -- Bug No: 7129919
13598 FROM   qp_npreq_line_attrs_tmp a  , qp_npreq_ldets_tmp b
13599 WHERE  a.PRICING_PHASE_ID = p_pricing_phase_id
13600 AND    a.CONTEXT <> G_PRIC_VOLUME_CONTEXT
13601 AND    a.ATTRIBUTE_TYPE in ( G_PRICING_TYPE,G_PRODUCT_TYPE)
13602 AND    a.PRICING_STATUS_CODE = G_STATUS_NEW
13603 AND    a.LINE_DETAIL_INDEX = b.LINE_DETAIL_INDEX
13604 AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
13605 AND    NOT EXISTS (SELECT 'X'
13606 	           FROM QP_RLTD_MODIFIERS b
13607 	           WHERE a.LIST_LINE_ID = b.TO_RLTD_MODIFIER_ID
13608                    and b.rltd_modifier_grp_type <> 'COUPON') -- 5439022
13609 GROUP  BY a.LIST_HEADER_ID , a.LIST_LINE_ID,a.LINE_INDEX;
13610 
13611 /*
13612 INDX,QP_PREQ_GRP.perform_grouping.product_level_setup_attrs_cur,QP_PRICING_ATTRIBUTES_N2,LIST_LINE_ID,1
13613 INDX,QP_PREQ_GRP.perform_grouping.product_level_setup_attrs_cur,QP_PRICING_ATTRIBUTES_N2,EXCLUDER_FLAG,2
13614 */
13615 CURSOR product_level_setup_attrs_cur(p_list_line_id NUMBER) IS
13616 SELECT COUNT(*) NO_OF_PATTS_IN_GRP
13617 FROM   QP_PRICING_ATTRIBUTES a
13618 WHERE  a.LIST_LINE_ID = p_list_line_id
13619 AND    a.EXCLUDER_FLAG <> G_YES;
13620 --AND    a.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
13621 --GROUP  BY LIST_LINE_ID,ATTRIBUTE_GROUPING_NO;
13622 
13623 /*
13624 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13625 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13626 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13627 */
13628 CURSOR is_not_null_grp_exists (p_list_header_id NUMBER ,p_list_line_id NUMBER) IS
13629 SELECT 'X'
13630 FROM   qp_qualifiers
13631 WHERE  list_header_id = p_list_header_id
13632 AND    list_line_id   = p_list_line_id
13633 AND    qualifier_grouping_no <> -1;
13634 
13635 /*
13636 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13637 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13638 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13639 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13640 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
13641 -- This query is tuned for performance , expect some issues here with functionality
13642 */
13643 CURSOR is_not_null_grp_passed (p_line_index PLS_INTEGER ,p_list_line_id NUMBER,p_list_header_id NUMBER) IS
13644 SELECT 'X'
13645 FROM   qp_npreq_line_attrs_tmp
13646 WHERE  line_index = p_line_index
13647 AND    list_line_id   = p_list_line_id
13648 AND    list_header_id = p_list_header_id
13649 AND    attribute_type = G_QUALIFIER_TYPE
13650 AND    qualifier_type = G_LINE_QUALIFIER
13651 AND    pricing_status_code = G_STATUS_NEW -- Expect a bug with this join condition
13652 AND    grouping_number <> -1;
13653 
13654 /*
13655 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13656 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists2,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13657 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists2,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13658 */
13659 CURSOR is_not_null_grp_exists2 (p_list_header_id NUMBER) IS
13660 SELECT 'X'
13661 FROM   qp_qualifiers
13662 WHERE  list_header_id = p_list_header_id
13663 AND    list_line_id = -1
13664 AND    qualifier_grouping_no <> -1;
13665 
13666 /*
13667 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed2,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13668 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13669 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13670 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed2,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13671 -- Change
13672 */
13673 CURSOR is_not_null_grp_passed2 (p_line_index PLS_INTEGER ,p_list_header_id NUMBER) IS
13674 SELECT 'X'
13675 FROM   qp_npreq_line_attrs_tmp
13676 WHERE  line_index = p_line_index
13677 AND    list_header_id   = p_list_header_id
13678 AND    attribute_type = G_QUALIFIER_TYPE
13679 AND    qualifier_type   = G_HEADER_QUALIFIER
13680 AND    pricing_status_code = G_STATUS_NEW -- Expect a bug with this join condition
13681 AND    grouping_number <> -1;
13682 
13683 -- This cursor would get the count of records that got deleted as part of NOT= and Between for
13684 -- header level qualifiers. This count is deleted from the actual passed in qualifier count
13685 -- Then the resulting count of qualifiers is compared with the count in the setup
13686 
13687 /*
13688 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13689 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13690 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13691 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13692 */
13693 CURSOR get_excluded_hdr_quals(p_line_index PLS_INTEGER,
13694 						p_list_header_id PLS_INTEGER ,
13695 						p_grouping_no PLS_INTEGER) IS
13696 SELECT COUNT(*)
13697 FROM   qp_npreq_line_attrs_tmp
13698 WHERE  LINE_INDEX = p_line_index
13699 AND    LIST_HEADER_ID = p_list_header_id
13700 AND    nvl(GROUPING_NUMBER,0) = nvl(p_grouping_no,0)
13701 AND    PRICING_STATUS_CODE IN (G_DELETED_EXCLUDER , G_DELETED_BETWEEN)
13702 AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13703 AND    QUALIFIER_TYPE = G_HEADER_QUALIFIER;
13704 
13705 -- This cursor would get the count of records that got deleted as part of NOT= and Between for
13706 -- line level qualifiers
13707 
13708 /*
13709 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13710 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13711 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13712 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13713 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
13714 */
13715 CURSOR get_excluded_line_quals(p_line_index PLS_INTEGER,
13716 						 p_list_header_id PLS_INTEGER ,
13717 						 p_list_line_id PLS_INTEGER,
13718                                p_grouping_no PLS_INTEGER) IS
13719 SELECT COUNT(*)
13720 FROM   qp_npreq_line_attrs_tmp
13721 WHERE  LINE_INDEX = p_line_index
13722 AND    LIST_HEADER_ID = p_list_header_id
13723 AND    LIST_LINE_ID = p_list_line_id
13724 AND    nvl(GROUPING_NUMBER,0) = nvl(p_grouping_no,0)
13725 AND    PRICING_STATUS_CODE IN (G_DELETED_EXCLUDER , G_DELETED_BETWEEN)
13726 AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13727 AND    QUALIFIER_TYPE = G_LINE_QUALIFIER;
13728 
13729 -- This cursor would get the count of records that got deleted as part of Between for product (Volume based
13730 -- discounts like ITEM_QUANTITY and ITEM_AMOUNT)
13731 
13732 /*
13733 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13734 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13735 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13736 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13737 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
13738 */
13739 --[julin/4744915/5139512] modified sql
13740 CURSOR get_excluded_prods_between(p_line_index PLS_INTEGER,
13741 					 p_list_header_id PLS_INTEGER,
13742 					 p_list_line_id PLS_INTEGER) IS
13743 SELECT 1
13744 FROM DUAL
13745 WHERE EXISTS
13746 (SELECT /*+ index(QP_PREQ_LINE_ATTRS_TMP QP_PREQ_LINE_ATTRS_TMP_N10) */ 'x'  --9679930
13747 FROM   QP_PREQ_LINE_ATTRS_TMP
13748 WHERE  LINE_INDEX = p_line_index
13749 AND    LIST_HEADER_ID = p_list_header_id
13750 AND    LIST_LINE_ID = p_list_line_id
13751 AND    PRICING_STATUS_CODE = G_DELETED_BETWEEN
13752 AND    ATTRIBUTE_TYPE = G_PRICING_TYPE);
13753 
13754 /*
13755 SELECT COUNT(*)
13756 FROM   qp_npreq_line_attrs_tmp
13757 WHERE  LINE_INDEX = p_line_index
13758 AND    LIST_HEADER_ID = p_list_header_id
13759 AND    LIST_LINE_ID = p_list_line_id
13760 AND    PRICING_STATUS_CODE = G_DELETED_BETWEEN
13761 AND    ATTRIBUTE_TYPE = G_PRICING_TYPE;
13762 */
13763 
13764 v_list_header_id 	 		NUMBER;
13765 v_list_hdr_id				NUMBER;
13766 v_list_line_id		          NUMBER;
13767 v_line_index				NUMBER;
13768 v_grouping_number			NUMBER;
13769 v_line_detail_index			NUMBER;
13770 v_no_of_qualifiers_in_grp	NUMBER;
13771 v_setup_list_header_id   	NUMBER;
13772 v_passed_line_level_quals_flag	VARCHAR2(30):= 'FALSE';
13773 v_price_list_count              NUMBER;
13774 l_dummy                         VARCHAR2(1);
13775 l_setup_null_grp_cnt         PLS_INTEGER:=0;
13776 l_null_grp_cnt               PLS_INTEGER:=0;
13777 l_diff_list_header_id        NUMBER;
13778 l_diff_line_index            PLS_INTEGER;
13779 l_diff_line_detail_index     PLS_INTEGER;
13780 l_setup_grp_count            PLS_INTEGER;
13781 l_excluded_count             PLS_INTEGER;
13782 l_null_excl_count            PLS_INTEGER;
13783 l_null_excl_count1           PLS_INTEGER;
13784 l_null_excl_count2           PLS_INTEGER;
13785 l_excl_prod_count            PLS_INTEGER;
13786 l_excl_prod_count1           PLS_INTEGER;
13787 
13788 l_setup_null_grp_cnt2        PLS_INTEGER:=0;
13789 l_null_grp_cnt2              PLS_INTEGER:=0;
13790 l_diff_list_header_id2       NUMBER;
13791 l_diff_list_line_id2         NUMBER;
13792 l_diff_line_index2           PLS_INTEGER;
13793 l_diff_line_detail_index2    PLS_INTEGER;
13794 l_setup_grp_count2           PLS_INTEGER;
13795 l_has_setup_line_lvl         BOOLEAN:= FALSE;
13796 l_has_passed_in_line_lvl     BOOLEAN:= FALSE;
13797 l_deleted_flag               BOOLEAN:= FALSE;
13798 l_passed_in_cnt              PLS_INTEGER;
13799 l_passed_in_cnt2             PLS_INTEGER;
13800 l_passed_in_cnt3             PLS_INTEGER;
13801 l_del_tbl                    PLS_INTEGER_TYPE;
13802 l_success_tbl                PLS_INTEGER_TYPE;
13803 l_ind                        BINARY_INTEGER:=0;
13804 l_success_ind                BINARY_INTEGER:=0;
13805 l_success_ind_flag           VARCHAR2(1);
13806 l_index                      BINARY_INTEGER:=0;
13807 l_status_text                VARCHAR2(240);
13808 nROWS                        CONSTANT NUMBER := 1000;
13809 E_ROUTINE_ERRORS EXCEPTION;
13810 
13811 BEGIN
13812 
13813   qp_debug_util.tstart('PERFORM_GROUPING','Perform Grouping');
13814   x_status_code := FND_API.G_RET_STS_SUCCESS;
13815 
13816   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13817   engine_debug('Grouping begin');
13818   engine_debug('Pricing phase id: ' || p_pricing_phase_id);
13819 
13820   END IF;
13821   -- Header Level Qualifiers Grouping
13822   --grouping for the records with header level qualifies
13823   -- +/- line level qualifiers.
13824 
13825   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13826     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13827     engine_debug('In grouping');
13828     END IF;
13829     FOR i IN header_level_qual_attrs_cur LOOP
13830     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13831     engine_debug('-----------------------');
13832     engine_debug('list_header_id:'||i.list_header_id);
13833     engine_debug('list_line_id:'||i.list_line_id);
13834     engine_debug('line_index:'||i.line_index);
13835     engine_debug('grouping no:'||i.grouping_number);
13836     engine_debug('line detail index:'||i.line_detail_index);
13837     engine_debug('Qualifiers in Grp:'||i.NO_OF_QUALIFIERS_IN_GRP);
13838     END IF;
13839     END LOOP;
13840   END IF;
13841 
13842 l_status_text := '#1';
13843 
13844 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
13845 
13846   FOR i IN header_level_qual_attrs_cur LOOP
13847 	v_line_index := i.LINE_INDEX;
13848      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13849      engine_debug('Header Level Qualifier Attributes Passed');
13850 
13851      END IF;
13852         --this group is an AND condition for all qualifiers under the same header
13853         IF i.GROUPING_NUMBER = -1 THEN
13854           l_null_excl_count := 0;
13855           l_null_grp_cnt := i.NO_OF_QUALIFIERS_IN_GRP;
13856           l_passed_in_cnt := i.NO_OF_QUALIFIERS_IN_GRP;
13857           l_diff_list_header_id := i.list_header_id;
13858           l_diff_line_index     := i.line_index;
13859           l_diff_line_detail_index := i.line_detail_index;
13860         ELSIF (i.list_header_id = l_diff_list_header_id)
13861           AND (i.line_index = l_diff_line_index)
13862           AND (i.line_detail_index = l_diff_line_detail_index) THEN
13863           l_passed_in_cnt := l_null_grp_cnt + i.NO_OF_QUALIFIERS_IN_GRP;
13864           NULL;
13865           --If no change then
13866           --do nothing, l_null_grp_cnt from prveious loop is still good
13867         ELSE   --list header has changed, reset the count and previous list_header_id etc
13868           l_null_grp_cnt := 0;
13869           l_null_excl_count := 0;
13870           l_diff_list_header_id    := -1975;
13871           l_diff_line_index        := -1975;
13872           l_diff_line_detail_index := -1975;
13873           l_passed_in_cnt :=  i.NO_OF_QUALIFIERS_IN_GRP;
13874         END IF;
13875 
13876      --Now working on setup grp count
13877      IF i.grouping_number = -1 THEN
13878        OPEN header_setup_null_group_cur(i.LIST_HEADER_ID);
13879        FETCH  header_setup_null_group_cur INTO l_setup_null_grp_cnt;
13880        CLOSE  header_setup_null_group_cur;
13881        l_setup_grp_count:=l_setup_null_grp_cnt;
13882      ELSE
13883        OPEN header_level_setup_quals_cur(i.LIST_HEADER_ID,i.grouping_number);
13884        FETCH  header_level_setup_quals_cur INTO l_setup_grp_count;
13885        CLOSE header_level_setup_quals_cur;
13886 
13887        OPEN header_setup_null_group_cur(i.LIST_HEADER_ID);
13888        FETCH header_setup_null_group_cur INTO l_setup_null_grp_cnt;
13889        CLOSE header_setup_null_group_cur;
13890 
13891        l_setup_grp_count:= l_setup_grp_count + l_setup_null_grp_cnt;
13892 
13893      END IF;
13894 
13895 	   -- Delete the no of quals where pl is a qualifier(for price lists only)
13896 	   OPEN  hdr_lvl_setup_pl_quals_cur(i.list_header_id);
13897 	   FETCH hdr_lvl_setup_pl_quals_cur INTO v_price_list_count;
13898 	   CLOSE hdr_lvl_setup_pl_quals_cur;
13899 
13900      l_setup_grp_count:= l_setup_grp_count -  v_price_list_count ;
13901 
13902      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13903      engine_debug('Checking header lvl qualifier count');
13904      engine_debug('Header Level Qualifiers in setup: '||l_setup_grp_count);
13905 
13906      END IF;
13907 	-- Init
13908 	l_excluded_count :=0;
13909 	--l_null_excl_count := 0;
13910 
13911 	-- Determine actual passed in count
13912 	OPEN get_excluded_hdr_quals(i.line_index,i.list_header_id,i.grouping_number);
13913 	FETCH get_excluded_hdr_quals into l_excluded_count;
13914 	CLOSE get_excluded_hdr_quals;
13915 
13916      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13917      engine_debug('Excluded quals : '||l_excluded_count || '  Grouping Number:' || i.grouping_number);
13918 
13919      END IF;
13920 	-- l_null_excl_count is applicable when NOT= , or BETWEEN is there on the NULL grouping number
13921 	-- and that gets D_EXCL or D_BETWEEN.
13922 	-- Then the actual passed in count will be other grp count(ex:grp no 1 ) + null_grp_count -
13923 	-- l_null_excl_count
13924 	-- l_excluded_count is for getting the excluded records for that particular grp no
13925 
13926 	IF (i.grouping_number = -1) THEN
13927 	 l_null_excl_count := l_excluded_count;
13928 	 l_passed_in_cnt := l_passed_in_cnt - nvl(l_excluded_count,0);
13929      ELSE
13930 	 l_passed_in_cnt := l_passed_in_cnt - nvl(l_excluded_count,0) - nvl(l_null_excl_count,0);
13931 	END IF;
13932 
13933      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13934      engine_debug('Null Excluded quals : '||l_null_excl_count);
13935      engine_debug('Header Level Qualifiers passsed in: '||l_passed_in_cnt);
13936 
13937      END IF;
13938      IF (l_passed_in_cnt >= l_setup_grp_count) THEN
13939        --l_success_ind := l_success_ind+1;
13940        --l_success_tbl(l_success_ind):= i.LINE_DETAIL_INDEX;
13941 
13942        l_deleted_flag := FALSE;
13943 	  l_success_ind_flag := G_NO;
13944        IF i.grouping_number = -1 THEN
13945           --check if this is a pure null grp
13946                OPEN is_not_null_grp_exists2(i.list_header_id);
13947                FETCH is_not_null_grp_exists2 into l_dummy;
13948                IF is_not_null_grp_exists2%FOUND THEN
13949                    --is not a pure null grp, then check if any other grp passed in
13950                    OPEN is_not_null_grp_passed2(i.line_index,i.list_header_id);
13951                    FETCH is_not_null_grp_passed2 into l_dummy;
13952                    IF is_not_null_grp_passed2%NOTFOUND THEN
13953                      -- other required grp is not passed
13954                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13955                        engine_debug('Update #7');
13956                        END IF;
13957                       l_deleted_flag := TRUE;
13958                       l_ind := l_ind+1;
13959                       l_del_tbl(l_ind):= i.LINE_DETAIL_INDEX;
13960                    END IF;
13961                    CLOSE is_not_null_grp_passed2;
13962                ELSE
13963                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13964                 engine_debug ('Successful on Header Level Quals Success Flag');
13965                 END IF;
13966 			 l_success_ind_flag := G_YES; -- Mark it as success , for line level quals evaluation
13967        		  --l_success_ind := l_success_ind+1;
13968        		  --l_success_tbl(l_success_ind):= i.LINE_DETAIL_INDEX;
13969                END IF; --is a pure null grp
13970                CLOSE is_not_null_grp_exists2;
13971        ELSE
13972         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13973         engine_debug ('Successful on Header Level Quals Success Flag Not null Group');
13974         END IF;
13975 	   l_success_ind_flag := G_YES;
13976         --l_success_ind := l_success_ind+1;
13977         --l_success_tbl(l_success_ind):= i.LINE_DETAIL_INDEX;
13978        END IF;
13979 
13980    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13981 	  engine_debug('Line Level Quals LH Id :' || i.list_header_id);
13982 	  engine_debug('Line Level Quals LL Id :' || i.list_line_id);
13983 
13984    END IF;
13985        OPEN line_lvl_setup_exist_cur(i.LIST_HEADER_ID,i.list_line_id);
13986        FETCH line_lvl_setup_exist_cur INTO l_dummy;
13987        l_has_setup_line_lvl := FALSE;
13988        l_has_passed_in_line_lvl := FALSE;
13989 
13990        IF line_lvl_setup_exist_cur%FOUND AND l_deleted_flag = FALSE THEN      --has line level qualifiers
13991   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13992 		engine_debug('Has Line Level Qualifiers');
13993   END IF;
13994           l_has_setup_line_lvl := TRUE;
13995           FOR k IN line_level_qual_attrs_cur(i.LIST_HEADER_ID,i.list_line_id) LOOP
13996             l_has_passed_in_line_lvl := TRUE;
13997             IF k.GROUPING_NUMBER = -1 THEN
13998               l_null_grp_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
13999               l_null_excl_count1 := 0;
14000               l_passed_in_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
14001               l_diff_list_header_id2 := k.list_header_id;
14002               l_diff_list_line_id2   := k.list_line_id;
14003               l_diff_line_index2     := k.line_index;
14004               l_diff_line_detail_index2 := k.line_detail_index;
14005             ELSIF (k.list_header_id = l_diff_list_header_id2)
14006                   AND (k.list_line_id = l_diff_list_line_id2)
14007                   AND (k.line_index = l_diff_line_index2)
14008                   AND (k.line_detail_index = l_diff_line_detail_index2) THEN
14009                   NULL;
14010                   l_passed_in_cnt2 :=  k.NO_OF_QUALIFIERS_IN_GRP + l_null_grp_cnt2;
14011             ELSE
14012               l_passed_in_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
14013               l_null_grp_cnt2:= 0;
14014               l_null_excl_count1 := 0;
14015               l_diff_list_header_id2 := -1975;
14016               l_diff_list_line_id2   := -1975;
14017               l_diff_line_index2     := -1975;
14018               l_diff_line_detail_index2 := -1975;
14019             END IF;
14020 
14021         IF k.grouping_number = -1 THEN
14022           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
14023           FETCH line_setup_null_group_cur INTO l_setup_grp_count2;
14024           CLOSE line_setup_null_group_cur;
14025           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14026           engine_debug('Setup grp null cnt: '||l_setup_grp_count2);
14027           END IF;
14028         ELSE
14029           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
14030           FETCH line_setup_null_group_cur INTO l_setup_null_grp_cnt2;
14031           CLOSE line_setup_null_group_cur;
14032 
14033           OPEN line_level_setup_quals_cur(K.list_header_id,K.list_line_id,K.grouping_number);
14034           FETCH line_level_setup_quals_cur INTO l_setup_grp_count2;
14035           CLOSE line_level_setup_quals_cur;
14036 
14037           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14038           engine_debug('setup grp cnt: '||l_setup_grp_count2);
14039           END IF;
14040           l_setup_grp_count2 := l_setup_grp_count2 + l_setup_null_grp_cnt2;
14041         END IF;
14042 
14043 	      -- Delete the no of quals where pl is a qualifier(for price lists only)
14044 	      OPEN  line_level_setup_pl_quals_cur(K.list_header_id,K.list_line_id);
14045 	      FETCH line_level_setup_pl_quals_cur INTO v_price_list_count;
14046 	      CLOSE line_level_setup_pl_quals_cur;
14047 
14048         l_setup_grp_count2 := l_setup_grp_count2 - v_price_list_count;
14049 
14050          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14051          engine_debug('Null Line Level Quals count in Setup: '||l_setup_null_grp_cnt2);
14052          engine_debug('Passed in null line level quals count: '|| l_null_grp_cnt2);
14053 
14054          END IF;
14055 	    -- Init
14056 	    l_excluded_count :=0;
14057 	    --l_null_excl_count1 := 0;
14058 
14059 	    -- Determine actual passed in count
14060 	    OPEN  get_excluded_line_quals(k.line_index,k.list_header_id,k.list_line_id,k.grouping_number);
14061 	    FETCH get_excluded_line_quals into l_excluded_count;
14062 	    CLOSE get_excluded_line_quals;
14063 
14064          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14065          engine_debug('Excluded Line quals : '||l_excluded_count);
14066 
14067          END IF;
14068 	    IF (i.grouping_number = -1) THEN
14069 	     l_null_excl_count1 := l_excluded_count;
14070 	     l_passed_in_cnt2 := l_passed_in_cnt2 - nvl(l_excluded_count,0);
14071             ELSE
14072 	     l_passed_in_cnt2 := l_passed_in_cnt2 - nvl(l_excluded_count,0) - nvl(l_null_excl_count1,0);
14073 	    END IF;
14074 
14075          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14076          engine_debug('Passed in line lvl count: '||l_passed_in_cnt2);
14077          engine_debug('Line Level Quals count in Setup: '||l_setup_grp_count2);
14078 
14079          END IF;
14080          IF(l_passed_in_cnt2 >= l_setup_grp_count2) THEN
14081              IF k.grouping_number = -1 THEN
14082                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14083                engine_debug('Line Level Quals #123');
14084                END IF;
14085                 --check if this is a pure null grp, if no, and other
14086                OPEN is_not_null_grp_exists(k.list_header_id,k.list_line_id);
14087                FETCH is_not_null_grp_exists into l_dummy;
14088                IF is_not_null_grp_exists%FOUND THEN
14089                    --is not a pure null grp, then check if any other grp passed in
14090                    OPEN is_not_null_grp_passed(k.line_index,k.list_line_id,k.list_header_id);
14091                    FETCH is_not_null_grp_passed into l_dummy;
14092                    IF is_not_null_grp_passed%NOTFOUND THEN
14093                      --no other required grp passed
14094                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14095                        engine_debug('Update #7');
14096                        END IF;
14097                       l_ind := l_ind+1;
14098                       l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14099                    END IF;
14100                    CLOSE is_not_null_grp_passed;
14101                ELSE
14102                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14103                  engine_debug('Pure Null Line Level Quals #124');
14104                  END IF;
14105    	            l_success_ind := l_success_ind+1;
14106                  l_success_tbl(l_success_ind):= i.line_detail_index;
14107                END IF; --is a pure null grp
14108                CLOSE is_not_null_grp_exists;
14109              ELSE  -- not a null group approve the line
14110        		l_success_ind := l_success_ind+1;
14111        	     l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14112              END IF;
14113          ELSE -- Count did not match
14114              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14115              engine_debug ('Not successful on the Line Level Qualifiers Count Mismatch: ' || k.LIST_LINE_ID);
14116              engine_debug('The whole List Line is getting deleted');
14117              engine_debug('Update #1');
14118              END IF;
14119              l_ind := l_ind+1;
14120              l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14121          END IF;
14122       END LOOP; --end K loop
14123        --we need to delete lists that has line lvl qualifier but not passed in.
14124        IF (l_has_passed_in_line_lvl = FALSE) THEN
14125             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14126             engine_debug ('Fails in line lvl bcause exists in Setup but Not Passed');
14127             engine_debug('List header id that has line level qualifier:'|| i.list_header_id);
14128             engine_debug('The whole List Line is getting deleted#1');
14129             engine_debug('Update #2');
14130             END IF;
14131             l_ind := l_ind+1;
14132             l_del_tbl(l_ind):= i.LINE_DETAIL_INDEX;
14133        END IF;
14134     ELSE
14135      -- No line level qualifiers exist , but header level quals satisfied
14136      IF(l_success_ind_flag = G_YES) THEN
14137        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14138        engine_debug('Header Level Quals satisfied and no line level quals exist');
14139        END IF;
14140    	  l_success_ind := l_success_ind+1;
14141        l_success_tbl(l_success_ind):= i.line_detail_index;
14142      END IF;
14143     END IF;  -- end if for line_lvl_setup_exist_cur%FOUND
14144     CLOSE line_lvl_setup_exist_cur;
14145   ELSE  --else for if (i.NO_OF_QUALIFIER_IN_GRP + l_null_grp_cnt >= l_setup_grp_count)
14146      --grouping count did not match for header level qualifier
14147      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14148      engine_debug('Header lvl qualifier doesn''t match');
14149      engine_debug('Update #3');
14150      END IF;
14151      l_ind := l_ind+1;
14152      l_del_tbl(l_ind):= i.LINE_DETAIL_INDEX;
14153   END IF; --end if for if (i.NO_OF_QUALIFIER_IN_GRP + l_null_grp_cnt >= l_setup_grp_count)
14154  END LOOP; --end i loop
14155  l_status_text := '#2';
14156 
14157  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14158  engine_debug('Deleted Line Details in Table');
14159  END IF;
14160  FOR i in 1..l_del_tbl.count
14161  LOOP
14162    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14163    engine_debug('Line Detail Index: ' || l_del_tbl(i));
14164    END IF;
14165  END LOOP;
14166 
14167  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14168  engine_debug('Successful Line Details in Table');
14169  END IF;
14170  FOR i in 1..l_success_tbl.count
14171  LOOP
14172    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14173    engine_debug('Line Detail Index: ' || l_success_tbl(i));
14174    END IF;
14175  END LOOP;
14176 
14177  IF l_del_tbl.FIRST IS NOT NULL THEN
14178    FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
14179 /*
14180 INDX,QP_PREQ_GRP.perform_grouping.upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
14181 */
14182 --bug 14464004
14183    UPDATE /*+ index(qp_npreq_ldets_tmp QP_PREQ_LDETS_TMP_U1) */ qp_npreq_ldets_tmp --upd1
14184    SET PRICING_STATUS_CODE = G_DELETED_GRP,
14185        PRICING_STATUS_TEXT = 'Deleted in header+/-line grouping'
14186    WHERE line_detail_index = l_del_tbl(i);
14187 
14188    /* FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
14189    UPDATE qp_npreq_line_attrs_tmp
14190    SET    PRICING_STATUS_CODE = G_DELETED_GRP,
14191           PRICING_STATUS_TEXT = 'Deleted in header +/- line grouping'
14192    WHERE line_detail_index = l_del_tbl(i)
14193    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
14194 
14195  END IF;
14196 
14197  IF l_success_tbl.FIRST IS NOT NULL THEN
14198    FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
14199 /*
14200 INDX,QP_PREQ_GRP.perform_grouping.upd2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
14201 */
14202    UPDATE qp_npreq_ldets_tmp --upd2
14203    SET PRICING_STATUS_CODE = G_STATUS_NEW
14204    WHERE line_detail_index = l_success_tbl(i);
14205 
14206    /* FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
14207    UPDATE qp_npreq_line_attrs_tmp
14208    SET    PRICING_STATUS_CODE = G_STATUS_NEW
14209    WHERE line_detail_index = l_success_tbl(i)
14210    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
14211 
14212  END IF;
14213 
14214  l_del_tbl.delete;
14215  l_success_tbl.delete;
14216  l_ind:=0;
14217  l_success_ind:=0;
14218  l_status_text :='#3';
14219 
14220   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14221     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14222     engine_debug('In Pure Line Level grouping');
14223     END IF;
14224     FOR k IN line_level_qual_attrs_cur2 LOOP
14225     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14226     engine_debug('-----------------------');
14227     engine_debug('list_header_id:'||k.list_header_id);
14228     engine_debug('list_line_id:'||k.list_line_id);
14229     engine_debug('line_index:'||k.line_index);
14230     engine_debug('grouping no:'||k.grouping_number);
14231     engine_debug('line detail index:'||k.line_detail_index);
14232     engine_debug('Qualifiers in Grp:'||k.NO_OF_QUALIFIERS_IN_GRP);
14233     END IF;
14234     END LOOP;
14235   END IF;
14236 
14237   --grouping for the records with ONLY line level qualifies
14238   FOR k in line_level_qual_attrs_cur2 LOOP
14239       IF k.GROUPING_NUMBER = -1 THEN
14240               l_null_grp_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
14241               l_null_excl_count2 := 0;
14242               l_passed_in_cnt3 :=  k.NO_OF_QUALIFIERS_IN_GRP;
14243               l_diff_list_header_id2 := k.list_header_id;
14244               l_diff_list_line_id2   := k.list_line_id;
14245               l_diff_line_index2     := k.line_index;
14246               l_diff_line_detail_index2 := k.line_detail_index;
14247             ELSIF (k.list_header_id = l_diff_list_header_id2)
14248                   AND (k.list_line_id = l_diff_list_line_id2)
14249                   AND (k.line_index = l_diff_line_index2)
14250                   AND (k.line_detail_index = l_diff_line_detail_index2) THEN
14251                   NULL;
14252                   --if l_null_grp_cnt2 set by previous loop then add that
14253                   l_passed_in_cnt3 := k.NO_OF_QUALIFIERS_IN_GRP + l_null_grp_cnt2;
14254             ELSE
14255               l_null_grp_cnt2:= 0;
14256               l_null_excl_count2 := 0;
14257               l_diff_list_header_id2 := -1976;
14258               l_diff_list_line_id2   := -1976;
14259               l_diff_line_index2     := -1976;
14260               l_diff_line_detail_index2 := -1976;
14261               l_passed_in_cnt3 := k.NO_OF_QUALIFIERS_IN_GRP;
14262             END IF;
14263 
14264         --now working on setup grouping
14265          IF k.grouping_number = -1 THEN
14266           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
14267           FETCH line_setup_null_group_cur INTO l_setup_grp_count2;
14268           CLOSE line_setup_null_group_cur;
14269         ELSE
14270           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
14271           FETCH line_setup_null_group_cur INTO l_setup_null_grp_cnt2;
14272           CLOSE line_setup_null_group_cur;
14273 
14274           OPEN line_level_setup_quals_cur(K.list_header_id,K.list_line_id,K.grouping_number);
14275           FETCH line_level_setup_quals_cur INTO l_setup_grp_count2;
14276           CLOSE line_level_setup_quals_cur;
14277 
14278           l_setup_grp_count2 := l_setup_grp_count2 + l_setup_null_grp_cnt2;
14279         END IF;
14280 
14281 	      -- Delete the no of quals where pl is a qualifier(for price lists only)
14282 	      OPEN  line_level_setup_pl_quals_cur(K.list_header_id,K.list_line_id);
14283 	      FETCH line_level_setup_pl_quals_cur INTO v_price_list_count;
14284 	      CLOSE line_level_setup_pl_quals_cur;
14285 
14286         l_setup_grp_count2 := l_setup_grp_count2 - v_price_list_count;
14287 
14288 	   -- Init
14289 	   l_excluded_count :=0;
14290 	   --l_null_excl_count2 := 0;
14291 
14292 	   -- Determine actual passed in count
14293 	   OPEN get_excluded_line_quals(k.line_index,k.list_header_id,k.list_line_id,k.grouping_number);
14294 	   FETCH get_excluded_line_quals into l_excluded_count;
14295 	   CLOSE get_excluded_line_quals;
14296 
14297         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14298         engine_debug('Excluded Pure Line Level quals : '||l_excluded_count);
14299 
14300         END IF;
14301 	   -- l_null_excl_count is applicable when NOT= is there on the NULL grouping number and that gets D_EXCL
14302 	   -- Then the actual passed in count will be other grp count(ex:grp no 1 ) +
14303 	   -- null_grp_count - l_null_excl_count
14304 
14305 	   IF (k.grouping_number = -1 ) THEN
14306 	    l_null_excl_count2 := l_excluded_count;
14307 	    l_passed_in_cnt3 := l_passed_in_cnt3 - nvl(l_excluded_count,0);
14308         ELSE
14309 	    l_passed_in_cnt3 := l_passed_in_cnt3 - nvl(l_excluded_count,0) - nvl(l_null_excl_count2,0);
14310 	   END IF;
14311 
14312          IF(l_passed_in_cnt3 >= l_setup_grp_count2) THEN
14313 
14314              --check if this is a pure null grp, if no, and other
14315              --not null grps are not passed then delete them.
14316              --if yes, then approve this line (do nothing).
14317 
14318              IF k.grouping_number = -1 THEN
14319                OPEN is_not_null_grp_exists(k.list_header_id,k.list_line_id);
14320                FETCH is_not_null_grp_exists into l_dummy;
14321                IF is_not_null_grp_exists%FOUND THEN
14322                    --is not a pure null grp, then check if any other grp passed in
14323                    OPEN is_not_null_grp_passed(k.line_index,k.list_line_id,k.list_header_id);
14324                    FETCH is_not_null_grp_passed into l_dummy;
14325                    IF is_not_null_grp_passed%NOTFOUND THEN
14326                      --no other required grp passed
14327                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14328                        engine_debug('Update #6');
14329                        END IF;
14330                        l_ind := l_ind+1;
14331                        l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14332                    END IF;
14333                    CLOSE is_not_null_grp_passed;
14334                ELSE
14335        		    l_success_ind := l_success_ind+1;
14336        	         l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14337                END IF;
14338                CLOSE is_not_null_grp_exists;
14339              ELSE
14340                    OPEN hdr_lvl_setup_quals_exist_cur(k.list_header_id);
14341                    FETCH hdr_lvl_setup_quals_exist_cur into l_dummy;
14342                    IF hdr_lvl_setup_quals_exist_cur%FOUND THEN
14343                      OPEN header_level_quals_exist_cur(K.list_header_id,K.line_index);
14344                      FETCH  header_level_quals_exist_cur INTO l_dummy;
14345                      --If in setup it has header level qualifier, it must fullfill the header grouping first
14346                      --if this is the case, the pricing_status_code should have been updated by
14347                      --previous header_level +/- line level check operation. It didn't get updated
14348                      --that means no header level qualifier has passed in, hence we need to eliminate this
14349                      --list line
14350                      IF header_level_quals_exist_cur%NOTFOUND THEN
14351                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14352                        engine_debug('--------------------------------------');
14353                        engine_debug('Deleting list line id:'||K.list_line_id);
14354                        engine_debug('Update #4');
14355                        END IF;
14356                        l_ind := l_ind+1;
14357                        l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14358                      ELSE
14359        		        l_success_ind := l_success_ind+1;
14360        	             l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14361                      END IF;
14362                      CLOSE  header_level_quals_exist_cur;
14363                    ELSE
14364        		      l_success_ind := l_success_ind+1;
14365        	           l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14366                    END IF;
14367                  CLOSE hdr_lvl_setup_quals_exist_cur;
14368              END IF;
14369 
14370          ELSE -- Count did not match
14371              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14372              engine_debug ('Not successful on the Line Level Qualifiers Count Mismatch: ' || k.LIST_LINE_ID);
14373              engine_debug('The whole List Line is getting deleted');
14374                engine_debug('Update #5');
14375 
14376              END IF;
14377               l_ind := l_ind+1;
14378               l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14379 
14380          END IF;
14381       END LOOP; --end K loop
14382  l_status_text := '#4';
14383 
14384  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14385  engine_debug('Deleted Line Details in Pure Line Grouping Table');
14386  END IF;
14387  FOR i in 1..l_del_tbl.count
14388  LOOP
14389    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14390    engine_debug('Line Detail Index: ' || l_del_tbl(i));
14391    END IF;
14392  END LOOP;
14393 
14394  IF l_del_tbl.FIRST IS NOT NULL THEN
14395    FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
14396 /*
14397 INDX,QP_PREQ_GRP.perform_grouping.upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
14398 */
14399    UPDATE qp_npreq_ldets_tmp --upd3
14400    SET PRICING_STATUS_CODE = G_DELETED_GRP,
14401        PRICING_STATUS_TEXT = 'Deleted in pure line grouping'
14402    WHERE line_detail_index = l_del_tbl(i);
14403 
14404    /* FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
14405    UPDATE qp_npreq_line_attrs_tmp
14406    SET    PRICING_STATUS_CODE = G_DELETED_GRP,
14407           PRICING_STATUS_TEXT = 'Deleted in pure line grouping'
14408    WHERE line_detail_index = l_del_tbl(i)
14409    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
14410 
14411  END IF;
14412 
14413  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14414  engine_debug('Successful Line Details in Pure Line Grouping Table');
14415  END IF;
14416  FOR i in 1..l_success_tbl.count
14417  LOOP
14418    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14419    engine_debug('Line Detail Index: ' || l_success_tbl(i));
14420    END IF;
14421  END LOOP;
14422 
14423  IF l_success_tbl.FIRST IS NOT NULL THEN
14424    FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
14425 /*
14426 INDX,QP_PREQ_GRP.perform_grouping.upd4,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
14427 */
14428    UPDATE qp_npreq_ldets_tmp --upd4
14429    SET PRICING_STATUS_CODE = G_STATUS_NEW
14430    WHERE line_detail_index = l_success_tbl(i);
14431 
14432    /* FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
14433    UPDATE qp_npreq_line_attrs_tmp
14434    SET    PRICING_STATUS_CODE = G_STATUS_NEW
14435    WHERE line_detail_index = l_success_tbl(i)
14436    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
14437 
14438  END IF;
14439 
14440  l_del_tbl.delete;
14441  l_success_tbl.delete;
14442  l_ind:=0;
14443  l_success_ind:=0;
14444 
14445 END IF;
14446 
14447  l_status_text := '#5';
14448   -- product grouping
14449 
14450 OPEN product_level_attrs_cur;
14451 
14452 LOOP
14453   G_LIST_HEADER_ID_TBL_G.delete;
14454   G_LIST_LINE_ID_TBL_G.delete;
14455   G_LINE_INDEX_TBL_G.delete;
14456   G_NO_OF_PATTS_IN_GRP_TBL_G.delete;
14457 
14458 FETCH product_level_attrs_cur BULK COLLECT INTO
14459     G_LIST_HEADER_ID_TBL_G
14460   , G_LIST_LINE_ID_TBL_G
14461   , G_LINE_INDEX_TBL_G
14462   , G_NO_OF_PATTS_IN_GRP_TBL_G LIMIT nROWS;
14463 EXIT WHEN G_LINE_INDEX_TBL_G.COUNT = 0;
14464 
14465  IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
14466   FOR I in G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
14467   LOOP
14468    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14469    engine_debug('Went into product grouping');
14470 
14471    END IF;
14472    OPEN  get_excluded_prods_between(G_LINE_INDEX_TBL_G(I),G_LIST_HEADER_ID_TBL_G(I),G_LIST_LINE_ID_TBL_G(I));
14473    FETCH get_excluded_prods_between INTO l_excl_prod_count;
14474    CLOSE get_excluded_prods_between;
14475 
14476    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14477    engine_debug('Product list line id:'||G_LIST_LINE_ID_TBL_G(I));
14478    engine_debug('Product Between Exclude Count:'||l_excl_prod_count);
14479 
14480    END IF;
14481    -- If this line already got deleted as part of between , then delete this line
14482    IF (l_excl_prod_count > 0 ) THEN
14483        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14484        engine_debug('Getting Deleted in Product Grouping');
14485 
14486        END IF;
14487 /*
14488 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
14489 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
14490 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
14491 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
14492 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
14493 */
14494        UPDATE qp_npreq_ldets_tmp --upd5
14495        SET PRICING_STATUS_CODE = G_DELETED_GRP
14496        WHERE PRICING_PHASE_ID = p_pricing_phase_id
14497        AND   PRICING_STATUS_CODE = G_STATUS_NEW
14498        AND   CREATED_FROM_LIST_HEADER_ID = G_LIST_HEADER_ID_TBL_G(I)
14499        AND   CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14500        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I);
14501 
14502        /* UPDATE qp_npreq_ldets_tmp
14503        SET PRICING_STATUS_CODE = G_DELETED_GRP
14504        WHERE CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14505        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14506 
14507        /* UPDATE qp_npreq_line_attrs_tmp
14508        SET PRICING_STATUS_CODE = G_DELETED_GRP
14509        WHERE LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14510        AND LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14511 
14512    ELSE
14513     FOR j IN product_level_setup_attrs_cur(G_LIST_LINE_ID_TBL_G(I))
14514     LOOP
14515 
14516      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14517      engine_debug('product level attrs no '||g_no_of_patts_in_grp_tbl_g(I));
14518      engine_debug('product level set up attrs no '||j.no_of_patts_in_grp);
14519 
14520      END IF;
14521      IF (G_NO_OF_PATTS_IN_GRP_TBL_G(I) = j.NO_OF_PATTS_IN_GRP) THEN
14522        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14523        engine_debug ('Successful on the product grouping: ' || G_LIST_LINE_ID_TBL_G(I));
14524        END IF;
14525      ELSE
14526        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14527        engine_debug('Getting Deleted in Product Grouping');
14528        END IF;
14529 /*
14530 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
14531 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
14532 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
14533 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
14534 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
14535 */
14536        UPDATE qp_npreq_ldets_tmp --upd6
14537        SET PRICING_STATUS_CODE = G_DELETED_GRP
14538        WHERE PRICING_PHASE_ID = p_pricing_phase_id
14539        AND   PRICING_STATUS_CODE = G_STATUS_NEW
14540        AND   CREATED_FROM_LIST_HEADER_ID = G_LIST_HEADER_ID_TBL_G(I)
14541        AND   CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14542        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I);
14543 
14544        /* UPDATE qp_npreq_ldets_tmp
14545        SET PRICING_STATUS_CODE = G_DELETED_GRP
14546        WHERE CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14547        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14548 
14549        /* UPDATE qp_npreq_line_attrs_tmp
14550        SET PRICING_STATUS_CODE = G_DELETED_GRP
14551        WHERE LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14552        AND LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14553 
14554      END IF;
14555     END LOOP;
14556    END IF;
14557   END LOOP;
14558  END IF;
14559 
14560 END LOOP;
14561 CLOSE product_level_attrs_cur;
14562 
14563   -- Update all the records with pricing_status_code= 'T' to 'N'
14564   /* UPDATE qp_npreq_line_attrs_tmp
14565   SET PRICING_STATUS_CODE = G_STATUS_NEW
14566   WHERE PRICING_STATUS_CODE = G_STATUS_NEW
14567   AND   LINE_INDEX = nvl(p_line_index,LINE_INDEX);
14568 
14569   --Update all the line details records with pricing_status_code = 'T' to 'N'
14570   UPDATE qp_npreq_ldets_tmp a
14571   SET PRICING_STATUS_CODE = G_STATUS_NEW
14572   WHERE   PRICING_PHASE_ID = p_pricing_phase_id
14573   AND PRICING_STATUS_CODE = G_STATUS_NEW
14574   AND   LINE_INDEX = nvl(p_line_index,LINE_INDEX); */
14575   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14576   engine_debug('grouping ends');
14577   END IF;
14578   qp_debug_util.tstop('PERFORM_GROUPING');
14579 EXCEPTION
14580 WHEN OTHERS THEN
14581   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14582   engine_debug(SQLERRM);
14583   END IF;
14584   x_status_code:= FND_API.G_RET_STS_ERROR;
14585   x_status_text:= 'In perform grouping '||SQLERRM||' '||l_status_text;
14586 END PERFORM_GROUPING;
14587 
14588 /*+--------------------------------------------------------
14589   | PROCEDURE Update_Price_List_Information
14590   +--------------------------------------------------------
14591 */
14592 
14593 PROCEDURE Update_Price_List_Information(
14594   p_freeze_override_flag IN VARCHAR2,
14595   x_status_code OUT NOCOPY VARCHAR2,
14596   x_status_text OUT NOCOPY VARCHAR2) AS
14597 
14598   l_routine VARCHAR2(240):='QP_PREQ_GRP.Update_Price_List_Information';
14599 
14600 BEGIN
14601 
14602 --Update The Request Lines That Have
14603 --No List Header Passed , so that big search can look at it
14604 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14605   engine_debug ('In Procedure Update_Price_List_Information...');
14606 END IF;
14607 /*
14608 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel1,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
14609 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel1,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
14610 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel1,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
14611 */
14612 IF (G_PRICE_PHASE_FLAG = TRUE ) THEN -- Ravi
14613 UPDATE /*+ dynamic_sampling(1) */ qp_npreq_lines_tmp a
14614 SET    processed_code = G_NO_LIST_PASSED,
14615        validated_flag = G_NO
14616 WHERE  not exists (SELECT 'x'
14617                    FROM qp_npreq_line_attrs_tmp b
14618                    WHERE a.line_index = b.line_index
14619 		   AND   b.context in (G_LIST_HEADER_CONTEXT,G_LIST_LINE_CONTEXT)
14620 		   AND   b.attribute_type = G_QUALIFIER_TYPE
14621 		   AND   b.pricing_status_code  = G_STATUS_UNCHANGED)
14622 AND   nvl(PROCESSED_CODE,'X') <> G_BY_ENGINE
14623 AND  (price_flag = G_YES OR --[julin/4708044]
14624       (price_flag = G_PHASE AND p_freeze_override_flag = G_YES));
14625 END IF;
14626 
14627 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14628   engine_debug ('after update1...');
14629 END IF;
14630 
14631 /*
14632 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_upd3,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
14633 */
14634 /*
14635 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
14636 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14637 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14638 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14639 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14640 */
14641 
14642 IF (G_PRICE_PHASE_FLAG = TRUE ) THEN -- Ravi
14643 
14644 --[julin/pricebook] added hint
14645 --[julin/5223502] price_list_header_id directly passed in via lines_tmp has precedence over sourced value
14646 UPDATE /*+ dynamic_sampling(1) */ qp_npreq_lines_tmp  a
14647 SET  (price_list_header_id,validated_flag)  =
14648 (SELECT /*+ index(b QP_PREQ_LINE_ATTRS_TMP_N2) */ distinct
14649         CASE WHEN (a.PRICE_LIST_HEADER_ID < 0) THEN qp_number.canonical_to_number(value_from)
14650              ELSE a.PRICE_LIST_HEADER_ID
14651         END price_list_header_id,
14652         validated_flag
14653  FROM qp_npreq_line_attrs_tmp b
14654  WHERE a.line_index = b.line_index
14655  AND context = G_LIST_HEADER_CONTEXT
14656  AND attribute = G_PRICELIST_ATTRIBUTE
14657  AND attribute_type = G_QUALIFIER_TYPE
14658  AND pricing_status_code = G_STATUS_UNCHANGED); -- bug 3668963 - commented following 2 lines
14659  --AND a.PRICE_LIST_HEADER_ID < 0 )
14660 --WHERE a.PRICE_LIST_HEADER_ID < 0;
14661 END IF;
14662 
14663 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14664 engine_debug ('after update2');
14665 END IF;
14666 
14667 -- To clear the unit_price if the call is from public API
14668 IF (G_PUBLIC_API_CALL_FLAG = G_YES) THEN
14669  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14670  engine_debug('Call from Public API , Update_Price_List_Information');
14671  END IF;
14672  IF (G_PRICE_PHASE_FLAG = TRUE AND G_MANUAL_ADJUSTMENTS_CALL_FLAG = G_NO) THEN
14673   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14674   engine_debug('Trying to Update Unit Price To Null');
14675   END IF;
14676   UPDATE qp_npreq_lines_tmp a
14677   SET    unit_price = NULL
14678   WHERE (price_flag = G_YES
14679             OR
14680        (price_flag = G_PHASE
14681        AND p_freeze_override_flag = G_YES))
14682   AND   line_type_code <> G_ORDER_LEVEL
14683   AND   list_price_override_flag = 'N';
14684  END IF;
14685 END IF;
14686 
14687 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14688   engine_debug ('after update3');
14689 END IF;
14690 
14691 /*
14692 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_upd4,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
14693 */
14694 /*
14695 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel3,QP_QUALIFIERS_N7,QUALIFIER_CONTEXT,1
14696 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel3,QP_QUALIFIERS_N7,QUALIFIER_ATTRIBUTE,2
14697 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel3,QP_QUALIFIERS_N7,LIST_HEADER_ID,3
14698 */
14699 IF (G_PRICE_PHASE_FLAG = TRUE) THEN -- Ravi,
14700 UPDATE qp_npreq_lines_tmp a
14701 SET   qualifiers_exist_flag = G_YES
14702 WHERE price_list_header_id IS NOT NULL
14703 AND   validated_flag = G_NO
14704 AND   EXISTS (SELECT 'x'
14705               FROM QP_QUALIFIERS
14706               WHERE LIST_HEADER_ID = a.PRICE_LIST_HEADER_ID
14707               AND   QUALIFIER_CONTEXT <> 'MODLIST'
14708               AND   QUALIFIER_ATTRIBUTE <> 'QUALIFIER_ATTRIBUTE4'
14709               AND   ROWNUM = 1);
14710 /*
14711 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel4,QP_PRICING_ATTRIBUTES_N6,LIST_HEADER_ID,1
14712 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel4,QP_PRICING_ATTRIBUTES_N6,QUALIFICATION_IND,2
14713 */
14714 
14715 UPDATE qp_npreq_lines_tmp a
14716 SET   pricing_attrs_exist_flag = G_YES
14717 WHERE price_list_header_id IS NOT NULL
14718 AND   EXISTS
14719 (SELECT 'x'
14720  FROM QP_PRICING_ATTRIBUTES
14721  WHERE LIST_HEADER_ID = a.PRICE_LIST_HEADER_ID
14722  AND   QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
14723  AND   ROWNUM = 1) ;
14724 END IF;
14725 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14726   engine_debug ('after update4');
14727 END IF;
14728 
14729 EXCEPTION
14730 
14731  WHEN OTHERS THEN
14732   x_status_code:= FND_API.G_RET_STS_ERROR;
14733   x_status_text:= 'QP_PREQ_GRP.Update_Price_List_Information: '||SQLERRM;
14734   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14735     engine_debug(l_routine||' '||SQLERRM);
14736   END IF;
14737 
14738 END Update_Price_List_Information;
14739 
14740 /*+--------------------------------------------------------
14741   | PROCEDURE Update_Sec_Price_List_Info
14742   +--------------------------------------------------------
14743 */
14744 PROCEDURE Update_Sec_Price_List_Info( x_status_code OUT NOCOPY VARCHAR2,
14745                                       x_status_text OUT NOCOPY VARCHAR2) AS
14746 
14747   l_routine VARCHAR2(240):='QP_PREQ_GRP.Update_Sec_Price_List_Info';
14748 BEGIN
14749 
14750 /*
14751 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_upd1,-No Index Used-,NA,NA
14752 */
14753 /*
14754 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
14755 
14756 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
14757 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14758 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14759 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14760 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14761 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
14762 */
14763 UPDATE qp_npreq_lines_tmp c
14764 SET primary_qualifiers_match_flag = 'Y'
14765 WHERE EXISTS(
14766 SELECT /*+ index(a QP_QUALIFIERS_N7) */ 'x' --bug#11924681
14767 FROM  QP_QUALIFIERS a,
14768       qp_npreq_line_attrs_tmp b
14769 WHERE b.CONTEXT = a.QUALIFIER_CONTEXT
14770 AND   b.ATTRIBUTE = a.QUALIFIER_ATTRIBUTE
14771 AND   b.VALUE_FROM = a.QUALIFIER_ATTR_VALUE
14772 AND   b.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14773 AND   a.COMPARISON_OPERATOR_CODE = '='
14774 AND   b.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14775 AND   trunc(c.pricing_effective_date) BETWEEN trunc(NVL(a.START_DATE_ACTIVE, c.pricing_effective_date))
14776                                       AND     trunc(NVL(a.END_DATE_ACTIVE,c.pricing_effective_date))
14777 AND   a.LIST_HEADER_ID = c.PRICE_LIST_HEADER_ID
14778 AND   a.ACTIVE_FLAG = G_YES
14779 AND   b.LINE_INDEX = c.LINE_INDEX
14780 AND   c.VALIDATED_FLAG = G_NO)
14781 AND   c.VALIDATED_FLAG = G_NO;
14782 
14783 /*
14784 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_upd2,-No Index Used-,NA,NA
14785 */
14786 /*
14787 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
14788 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
14789 
14790 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
14791 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14792 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14793 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14794 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14795 */
14796 UPDATE qp_npreq_lines_tmp c
14797 SET primary_qualifiers_match_flag = 'Y'
14798 WHERE EXISTS(
14799 SELECT 'x'
14800 FROM   qp_npreq_line_attrs_tmp b ,QP_QUALIFIERS a
14801 WHERE b.CONTEXT = a.QUALIFIER_CONTEXT
14802 AND   b.ATTRIBUTE = a.QUALIFIER_ATTRIBUTE
14803 AND   a.COMPARISON_OPERATOR_CODE = 'BETWEEN'
14804 AND   b.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14805 AND   b.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14806 AND   trunc(c.pricing_effective_date) BETWEEN NVL(a.START_DATE_ACTIVE, trunc(c.pricing_effective_date))
14807                                       AND     NVL(a.END_DATE_ACTIVE,trunc(c.pricing_effective_date))
14808 AND   a.LIST_HEADER_ID = c.PRICE_LIST_HEADER_ID
14809 AND   a.ACTIVE_FLAG = G_YES
14810 AND   b.LINE_INDEX = c.LINE_INDEX
14811 AND   c.VALIDATED_FLAG = G_NO)
14812 AND   c.VALIDATED_FLAG = G_NO ;
14813 
14814 UPDATE qp_npreq_lines_tmp c
14815 SET primary_qualifiers_match_flag = 'Y'
14816 WHERE EXISTS(
14817 SELECT 'x'
14818 FROM   qp_npreq_line_attrs_tmp b ,QP_QUALIFIERS a
14819 WHERE b.CONTEXT = a.QUALIFIER_CONTEXT
14820 AND   b.ATTRIBUTE = a.QUALIFIER_ATTRIBUTE
14821 AND   b.VALUE_FROM <> a.QUALIFIER_ATTR_VALUE
14822 AND   a.COMPARISON_OPERATOR_CODE = 'NOT ='
14823 AND   b.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14824 AND   b.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14825 AND   trunc(c.pricing_effective_date) BETWEEN NVL(a.START_DATE_ACTIVE, trunc(c.pricing_effective_date))
14826                                       AND     NVL(a.END_DATE_ACTIVE,trunc(c.pricing_effective_date))
14827 AND   a.LIST_HEADER_ID = c.PRICE_LIST_HEADER_ID
14828 AND   a.ACTIVE_FLAG = G_YES
14829 AND   b.LINE_INDEX = c.LINE_INDEX
14830 AND   c.VALIDATED_FLAG = G_NO)
14831 AND   c.VALIDATED_FLAG = G_NO ;
14832 
14833 EXCEPTION
14834  WHEN OTHERS THEN
14835   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14836    engine_debug(l_routine||' '||SQLERRM);
14837   END IF;
14838   x_status_code := FND_API.G_RET_STS_ERROR;
14839   x_status_text := 'Error in '||l_routine||SQLERRM;
14840 END Update_Sec_Price_List_Info;
14841 
14842 /*+--------------------------------------------------------
14843   | PROCEDURE Perform_Secondary_Search
14844   +--------------------------------------------------------
14845 */
14846 
14847 PROCEDURE Perform_Secondary_Search(P_FREEZE_OVERRIDE_FLAG        VARCHAR2,
14848                                    p_control_rec                 CONTROL_RECORD_TYPE,
14849 		                   x_status_code            OUT NOCOPY   VARCHAR2,
14850 		                   x_status_text            OUT NOCOPY   VARCHAR2)
14851 AS
14852 
14853 /*
14854 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_QUALIFIERS_N4,QUALIFIER_CONTEXT,1
14855 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTRIBUTE,2
14856 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTR_VALUE,3
14857 
14858 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
14859 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14860 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14861 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14862 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14863 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
14864 
14865 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
14866 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
14867 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
14868 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
14869 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
14870 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
14871 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
14872 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
14873 
14874 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
14875 
14876 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
14877 
14878 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
14879 
14880 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_LIST_HEADERS_B_PK,LINE_TYPE_CODE,2
14881 
14882 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
14883 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
14884 
14885 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
14886 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
14887 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
14888 */
14889 CURSOR L_SEC_LIST_CUR IS
14890 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPL QPH) INDEX(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n2) l_sec_list_cur */
14891                    QPLAT_PROD.LINE_INDEX,
14892                    QPL.LIST_LINE_ID,
14893                    QPL.ARITHMETIC_OPERATOR,
14894                    QPL.OPERAND,
14895                    QPL.PRICING_GROUP_SEQUENCE,
14896                    QPL.LIST_LINE_TYPE_CODE,
14897                    QPL.PRICING_PHASE_ID,
14898                    QPL.AUTOMATIC_FLAG,
14899                    QPL.INCOMPATIBILITY_GRP_CODE,
14900                    QPL.PRICE_BY_FORMULA_ID,
14901                    QPL.PRODUCT_PRECEDENCE,
14902                    QPL.PRIMARY_UOM_FLAG,
14903                    QPL.MODIFIER_LEVEL_CODE,
14904                    QPL.LIST_LINE_NO,
14905                    QPA.PRODUCT_UOM_CODE,
14906                    QPA.EXCLUDER_FLAG,
14907                    QPH.LIST_TYPE_CODE,
14908                    QPH.ROUNDING_FACTOR,
14909                    QPLAT_PROD.LINE_DETAIL_INDEX,
14910                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
14911                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
14912                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
14913                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
14914                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
14915                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
14916                    QPLAT_PROD.APPLIED_FLAG,
14917                    NULL                      PRODUCT_OPERATOR_TYPE,
14918                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
14919                    NULL                      PRICING_ATTRIBUTE,
14920                    NULL                      PRICING_ATTR_VALUE_FROM,
14921                    NULL                      PRICING_SETUP_VALUE_FROM,
14922                    NULL                      PRICING_SETUP_VALUE_TO,
14923                    NULL                      PRICING_ATTRIBUTE_LEVEL,
14924                    NULL                      PRICING_ATTRIBUTE_TYPE,
14925                    NULL                      PRICING_OPERATOR_TYPE,
14926                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
14927                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
14928                    NULL                      QUALIFIER_ATTRIBUTE,
14929                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
14930                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
14931                    to_number(NULL)           QUALIFIER_GROUPING_NO,
14932                    NULL                      QUALIFIER_DATATYPE,
14933                    NULL                      SETUP_VALUE_FROM,
14934                    NULL                      SETUP_VALUE_TO,
14935                    NULL                      QUALIFIER_OPERATOR_TYPE,
14936                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE
14937                   ,QPL.BREAK_UOM_CODE /* Proration */
14938                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
14939                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
14940                   ,NULL QUALIFIER_TYPE -- 3863226
14941                   ,QPLAT_PROD.DERIVED_QUALIFIER_FLAG  -- Added for TCA
14942    FROM
14943          qp_npreq_lines_tmp QPLINES,
14944          QP_QUALIFIERS QPQ,
14945 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
14946          QP_PRICING_ATTRIBUTES QPA,
14947          QP_LIST_LINES QPL,
14948          QP_LIST_HEADERS_B QPH,
14949          --QP_PRICE_REQ_SOURCES QPRS
14950          QP_PRICE_REQ_SOURCES_V QPRS /*yangli*/
14951    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
14952    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
14953    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
14954    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
14955    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
14956    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
14957    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14958    AND   QPA.QUALIFICATION_IND IN ( QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_IND)
14959    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
14960    AND   (QPLINES.PRICE_FLAG = G_YES
14961           OR
14962          (QPLINES.PRICE_FLAG = G_PHASE
14963           AND
14964           P_FREEZE_OVERRIDE_FLAG = G_YES))
14965    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
14966    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
14967    AND   (QPLINES.VALIDATED_FLAG = G_YES                 --9443496
14968              OR
14969          ((QPLINES.VALIDATED_FLAG = G_NO AND             --9443496
14970          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
14971              OR
14972          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
14973          (G_QUALIFY_SECONDARY = G_NO
14974           OR
14975           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
14976          ))
14977    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
14978    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
14979    AND   QPA.EXCLUDER_FLAG = G_NO
14980    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
14981    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
14982 --added for moac -- commented references to security profile
14983 --security will be built into qp_list_headers_b
14984 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
14985 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
14986 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
14987    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14988            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14989            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14990    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14991            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14992            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14993    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
14994    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
14995    --       OR
14996    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
14997    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
14998    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
14999    AND   QPH.ACTIVE_FLAG = G_YES
15000    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15001    AND   QPQ.ACTIVE_FLAG = G_YES
15002    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15003          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15004          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15005    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15006    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15007    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15008    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15009    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15010 UNION ALL
15011 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n2) index(qplat_pric qp_preq_line_attrs_tmp_n2) l_sec_list_cur */
15012                    QPLAT_PROD.LINE_INDEX,
15013                    QPL.LIST_LINE_ID,
15014                    QPL.ARITHMETIC_OPERATOR,
15015                    QPL.OPERAND,
15016                    QPL.PRICING_GROUP_SEQUENCE,
15017                    QPL.LIST_LINE_TYPE_CODE,
15018                    QPL.PRICING_PHASE_ID,
15019                    QPL.AUTOMATIC_FLAG,
15020                    QPL.INCOMPATIBILITY_GRP_CODE,
15021                    QPL.PRICE_BY_FORMULA_ID,
15022                    QPL.PRODUCT_PRECEDENCE,
15023                    QPL.PRIMARY_UOM_FLAG,
15024                    QPL.MODIFIER_LEVEL_CODE,
15025                    QPL.LIST_LINE_NO,
15026                    QPA.PRODUCT_UOM_CODE,
15027                    QPA.EXCLUDER_FLAG,
15028                    QPH.LIST_TYPE_CODE,
15029                    QPH.ROUNDING_FACTOR,
15030                    QPLAT_PROD.LINE_DETAIL_INDEX,
15031                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15032                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15033                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15034                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15035                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15036                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15037                    QPLAT_PROD.APPLIED_FLAG,
15038                    NULL                            PRODUCT_OPERATOR_TYPE,
15039                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
15040                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
15041                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
15042                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
15043                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
15044                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
15045                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
15046                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
15047                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
15048                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
15049                    NULL                      QUALIFIER_ATTRIBUTE,
15050                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
15051                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
15052                    to_number(NULL)           QUALIFIER_GROUPING_NO,
15053                    NULL                      QUALIFIER_DATATYPE,
15054                    NULL                      SETUP_VALUE_FROM,
15055                    NULL                      SETUP_VALUE_TO,
15056                    NULL                      QUALIFIER_OPERATOR_TYPE,
15057                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE
15058                   ,QPL.BREAK_UOM_CODE /* Proration */
15059                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15060                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15061                   ,NULL QUALIFIER_TYPE -- 3863226
15062                   ,QPLAT_PRIC.DERIVED_QUALIFIER_FLAG  -- Added for TCA
15063    FROM
15064          qp_npreq_lines_tmp qplines,
15065          QP_QUALIFIERS qpq,
15066          qp_npreq_line_attrs_tmp qplat_prod,
15067          QP_PRICING_ATTRIBUTES qpa,
15068          qp_npreq_line_attrs_tmp qplat_pric,
15069          QP_LIST_LINES qpl,
15070          QP_LIST_HEADERS_B qph,
15071          --QP_PRICE_REQ_SOURCES qprs
15072          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
15073    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15074    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15075    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15076    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15077    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15078    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15079    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
15080    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15081    AND   (QPLINES.PRICE_FLAG = G_YES
15082           OR
15083          (QPLINES.PRICE_FLAG = G_PHASE
15084           AND
15085           P_FREEZE_OVERRIDE_FLAG = G_YES))
15086    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15087    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15088    AND   ((QPLINES.VALIDATED_FLAG = G_YES
15089              OR
15090          (QPLINES.VALIDATED_FLAG = G_NO AND
15091          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
15092              OR
15093          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
15094          (G_QUALIFY_SECONDARY = G_NO
15095           OR
15096           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
15097          ))
15098    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15099    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15100    AND   QPA.EXCLUDER_FLAG = G_NO
15101    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15102    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
15103    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
15104    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
15105           OR
15106           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
15107    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
15108    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15109    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
15110    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
15111    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15112    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
15113 --added for moac -- commented references to security profile
15114 --security will be built into qp_list_headers_b
15115 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15116 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15117 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15118    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15119            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15120            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15121    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15122            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15123            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15124    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
15125    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15126    --       OR
15127    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15128    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15129    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15130    AND   QPH.ACTIVE_FLAG = G_YES
15131    AND   QPQ.ACTIVE_FLAG = G_YES
15132    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15133    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15134    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15135    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15136    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15137 UNION ALL
15138 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPL QPH) INDEX(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n2) l_sec_list_cur */
15139                    QPLAT_PROD.LINE_INDEX,
15140                    QPL.LIST_LINE_ID,
15141                    QPL.ARITHMETIC_OPERATOR,
15142                    QPL.OPERAND,
15143                    QPL.PRICING_GROUP_SEQUENCE,
15144                    QPL.LIST_LINE_TYPE_CODE,
15145                    QPL.PRICING_PHASE_ID,
15146                    QPL.AUTOMATIC_FLAG,
15147                    QPL.INCOMPATIBILITY_GRP_CODE,
15148                    QPL.PRICE_BY_FORMULA_ID,
15149                    QPL.PRODUCT_PRECEDENCE,
15150                    QPL.PRIMARY_UOM_FLAG,
15151                    QPL.MODIFIER_LEVEL_CODE,
15152                    QPL.LIST_LINE_NO,
15153                    QPA.PRODUCT_UOM_CODE,
15154                    QPA.EXCLUDER_FLAG,
15155                    QPH.LIST_TYPE_CODE,
15156                    QPH.ROUNDING_FACTOR,
15157                    QPLAT_PROD.LINE_DETAIL_INDEX,
15158                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15159                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15160                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15161                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15162                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15163                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15164                    QPLAT_PROD.APPLIED_FLAG,
15165                    NULL                      PRODUCT_OPERATOR_TYPE,
15166                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
15167                    NULL                      PRICING_ATTRIBUTE,
15168                    NULL                      PRICING_ATTR_VALUE_FROM,
15169                    NULL                      PRICING_SETUP_VALUE_FROM,
15170                    NULL                      PRICING_SETUP_VALUE_TO,
15171                    NULL                      PRICING_ATTRIBUTE_LEVEL,
15172                    NULL                      PRICING_ATTRIBUTE_TYPE,
15173                    NULL                      PRICING_OPERATOR_TYPE,
15174                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
15175                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
15176                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
15177                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
15178                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
15179                    QPSQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
15180                    QPSQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
15181                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
15182                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
15183                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
15184                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE
15185                   ,QPL.BREAK_UOM_CODE /* Proration */
15186                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15187                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15188                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  -- 3863226
15189                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
15190    FROM
15191          qp_npreq_lines_tmp QPLINES,
15192          QP_QUALIFIERS QPQ,
15193          QP_QUALIFIERS QPSQ,
15194 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
15195          qp_npreq_line_attrs_tmp QPLAT_Q,
15196          QP_PRICING_ATTRIBUTES QPA,
15197          QP_LIST_LINES QPL,
15198          QP_LIST_HEADERS_B QPH,
15199          --QP_PRICE_REQ_SOURCES QPRS
15200          QP_PRICE_REQ_SOURCES_V QPRS /*yangli*/
15201    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15202    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15203    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15204    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15205    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15206    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
15207    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15208    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
15209    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15210    AND   (QPLINES.PRICE_FLAG = G_YES
15211           OR
15212          (QPLINES.PRICE_FLAG = G_PHASE
15213           AND
15214           P_FREEZE_OVERRIDE_FLAG = G_YES))
15215    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15216    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15217    AND   QPLINES.VALIDATED_FLAG = G_NO
15218    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
15219           OR
15220           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
15221          )
15222    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15223    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15224    AND   QPA.EXCLUDER_FLAG = G_NO
15225    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15226    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
15227 --added for moac -- commented references to security profile
15228 --security will be built into qp_list_headers_b
15229 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15230 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15231 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15232    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15233            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15234            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15235    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15236            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15237            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15238    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
15239    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15240    --       OR
15241    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15242    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15243    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15244    AND   QPH.ACTIVE_FLAG = G_YES
15245    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15246    AND   QPQ.ACTIVE_FLAG = G_YES
15247    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15248          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15249          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15250    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15251    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15252    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15253    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15254    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15255 -- 3594459, context and attribute OR'd together
15256    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
15257           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
15258    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
15259    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
15260    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
15261    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
15262    AND   QPSQ.ACTIVE_FLAG = G_YES
15263    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
15264                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
15265            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
15266                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
15267            OR
15268           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
15269    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
15270    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15271          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15272          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15273    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
15274    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15275    AND   G_QUALIFY_SECONDARY = G_YES
15276    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
15277          OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
15278 UNION ALL
15279 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n2) index(qplat_pric qp_preq_line_attrs_tmp_n2) l_sec_list_cur */
15280                    QPLAT_PROD.LINE_INDEX,
15281                    QPL.LIST_LINE_ID,
15282                    QPL.ARITHMETIC_OPERATOR,
15283                    QPL.OPERAND,
15284                    QPL.PRICING_GROUP_SEQUENCE,
15285                    QPL.LIST_LINE_TYPE_CODE,
15286                    QPL.PRICING_PHASE_ID,
15287                    QPL.AUTOMATIC_FLAG,
15288                    QPL.INCOMPATIBILITY_GRP_CODE,
15289                    QPL.PRICE_BY_FORMULA_ID,
15290                    QPL.PRODUCT_PRECEDENCE,
15291                    QPL.PRIMARY_UOM_FLAG,
15292                    QPL.MODIFIER_LEVEL_CODE,
15293                    QPL.LIST_LINE_NO,
15294                    QPA.PRODUCT_UOM_CODE,
15295                    QPA.EXCLUDER_FLAG,
15296                    QPH.LIST_TYPE_CODE,
15297                    QPH.ROUNDING_FACTOR,
15298                    QPLAT_PROD.LINE_DETAIL_INDEX,
15299                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15300                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15301                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15302                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15303                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15304                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15305                    QPLAT_PROD.APPLIED_FLAG,
15306                    NULL                            PRODUCT_OPERATOR_TYPE,
15307                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
15308                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
15309                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
15310                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
15311                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
15312                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
15313                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
15314                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
15315                    QPA.PRICING_ATTRIBUTE_DATATYPE  PRICING_ATTRIBUTE_DATATYPE,
15316                    QPLAT_Q.CONTEXT              QUALIFIER_ATTRIBUTE_CONTEXT,
15317                    QPLAT_Q.ATTRIBUTE            QUALIFIER_ATTRIBUTE,
15318                    QPLAT_Q.VALUE_FROM           QUALIFIER_ATTR_VALUE_FROM,
15319                    QPLAT_Q.PRICING_ATTR_FLAG    QUALIFIER_PRICING_ATTR_FLAG,
15320                    QPSQ.QUALIFIER_GROUPING_NO   QUALIFIER_GROUPING_NO,
15321                    QPSQ.QUALIFIER_DATATYPE      QUALIFIER_DATATYPE,
15322                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
15323                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
15324                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
15325                    QPQ.QUALIFIER_PRECEDENCE      QUALIFIER_PRECEDENCE
15326                   ,QPL.BREAK_UOM_CODE /* Proration */
15327                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15328                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15329                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  -- 3863226
15330                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15331    FROM
15332          qp_npreq_lines_tmp qplines,
15333          QP_QUALIFIERS qpq,
15334          QP_QUALIFIERS qpsq,
15335          qp_npreq_line_attrs_tmp qplat_prod,
15336          QP_PRICING_ATTRIBUTES qpa,
15337          qp_npreq_line_attrs_tmp qplat_pric,
15338          qp_npreq_line_attrs_tmp qplat_q,
15339          QP_LIST_LINES qpl,
15340          QP_LIST_HEADERS_B qph,
15341          --QP_PRICE_REQ_SOURCES qprs
15342          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
15343    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15344    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15345    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15346    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15347    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15348    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15349    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
15350    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15351    AND   (QPLINES.PRICE_FLAG = G_YES
15352           OR
15353          (QPLINES.PRICE_FLAG = G_PHASE
15354           AND
15355           P_FREEZE_OVERRIDE_FLAG = G_YES))
15356    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15357    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15358    AND   QPLINES.VALIDATED_FLAG = G_NO
15359    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
15360           OR
15361           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
15362           )
15363    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15364    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15365    AND   QPA.EXCLUDER_FLAG = G_NO
15366    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15367    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
15368    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
15369    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
15370           OR
15371           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
15372    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
15373    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15374    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
15375    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
15376    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15377    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
15378 --added for moac -- commented references to security profile
15379 --security will be built into qp_list_headers_b
15380 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15381 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15382 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15383    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15384            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15385            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15386    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15387            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15388            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15389    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
15390    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15391    --       OR
15392    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15393    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15394    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15395    AND   QPH.ACTIVE_FLAG = G_YES
15396    AND   QPQ.ACTIVE_FLAG = G_YES
15397    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15398    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
15399    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15400    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15401    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15402    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15403 -- 3594459, context and attribute OR'd together
15404    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
15405           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
15406    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
15407    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
15408    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
15409    AND   QPSQ.ACTIVE_FLAG = G_YES
15410    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
15411                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
15412            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
15413                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
15414            OR
15415           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
15416    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
15417    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15418          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15419          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15420    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
15421    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15422    AND   G_QUALIFY_SECONDARY = G_YES
15423     AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
15424           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
15425    ORDER BY 1,2;
15426 
15427 -- vivek
15428 --[julin/4865213] using qp_list_headers_b_n7 instead of qp_list_headers_b_n2
15429 CURSOR L_SEC_LIST_CUR_CURRENCY IS
15430 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPL QPH) INDEX(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n7) l_sec_list_cur */
15431                    QPLAT_PROD.LINE_INDEX,
15432                    QPL.LIST_LINE_ID,
15433                    QPL.ARITHMETIC_OPERATOR,
15434                    QPL.OPERAND,
15435                    QPL.PRICING_GROUP_SEQUENCE,
15436                    QPL.LIST_LINE_TYPE_CODE,
15437                    QPL.PRICING_PHASE_ID,
15438                    QPL.AUTOMATIC_FLAG,
15439                    QPL.INCOMPATIBILITY_GRP_CODE,
15440                    QPL.PRICE_BY_FORMULA_ID,
15441                    QPL.PRODUCT_PRECEDENCE,
15442                    QPL.PRIMARY_UOM_FLAG,
15443                    QPL.MODIFIER_LEVEL_CODE,
15444                    QPL.LIST_LINE_NO,
15445                    QPA.PRODUCT_UOM_CODE,
15446                    QPA.EXCLUDER_FLAG,
15447                    QPH.LIST_TYPE_CODE,
15448    /* vivek        QPH.ROUNDING_FACTOR,  */
15449                    QCDT.ROUNDING_FACTOR, /* vivek */
15450                    QPLAT_PROD.LINE_DETAIL_INDEX,
15451                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15452                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15453                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15454                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15455                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15456                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15457                    QPLAT_PROD.APPLIED_FLAG,
15458                    NULL                      PRODUCT_OPERATOR_TYPE,
15459                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
15460                    NULL                      PRICING_ATTRIBUTE,
15461                    NULL                      PRICING_ATTR_VALUE_FROM,
15462                    NULL                      PRICING_SETUP_VALUE_FROM,
15463                    NULL                      PRICING_SETUP_VALUE_TO,
15464                    NULL                      PRICING_ATTRIBUTE_LEVEL,
15465                    NULL                      PRICING_ATTRIBUTE_TYPE,
15466                    NULL                      PRICING_OPERATOR_TYPE,
15467                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
15468                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
15469                    NULL                      QUALIFIER_ATTRIBUTE,
15470                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
15471                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
15472                    to_number(NULL)           QUALIFIER_GROUPING_NO,
15473                    NULL                      QUALIFIER_DATATYPE,
15474                    NULL                      SETUP_VALUE_FROM,
15475                    NULL                      SETUP_VALUE_TO,
15476                    NULL                      QUALIFIER_OPERATOR_TYPE,
15477                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15478                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15479                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15480                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15481                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15482                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15483                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15484                   ,QPL.BREAK_UOM_CODE /* Proration */
15485                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15486                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15487                   ,NULL QUALIFIER_TYPE -- 3863226
15488                   ,QPLAT_PROD.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15489    FROM
15490          qp_npreq_lines_tmp QPLINES,
15491          QP_QUALIFIERS QPQ,
15492 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
15493          QP_PRICING_ATTRIBUTES QPA,
15494          QP_LIST_LINES QPL,
15495          QP_LIST_HEADERS_B QPH,
15496          --QP_PRICE_REQ_SOURCES QPRS,
15497          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
15498          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15499    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15500    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15501    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15502    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15503    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15504    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
15505    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15506    AND   QPA.QUALIFICATION_IND IN ( QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_IND)
15507    AND   QPA.EXCLUDER_FLAG = G_NO
15508    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15509    AND   (QPLINES.PRICE_FLAG = G_YES
15510           OR
15511          (QPLINES.PRICE_FLAG = G_PHASE
15512           AND
15513           P_FREEZE_OVERRIDE_FLAG = G_YES))
15514    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15515    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15516    AND   ((QPLINES.VALIDATED_FLAG = G_YES
15517              OR
15518          (QPLINES.VALIDATED_FLAG = G_NO AND
15519          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
15520              OR
15521          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
15522          (G_QUALIFY_SECONDARY = G_NO
15523           OR
15524           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
15525          ))
15526    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15527    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15528    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15529    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
15530 --added for moac -- commented references to security profile
15531 --security will be built into qp_list_headers_b
15532 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15533 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15534 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15535    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15536            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15537            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15538    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15539            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15540            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15541 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15542             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15543             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15544             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15545                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15546                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15547    AND (   /* Vivek */
15548         (qcdt.curr_attribute_context is null   /* Vivek */
15549          and not exists   /* Vivek */
15550              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15551 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15552                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15553 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15554                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15555                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15556                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15557                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15558                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15559                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15560                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15561                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15562                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15563                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15564              )   /* Vivek */
15565         )   /* Vivek */
15566         OR   /* Vivek */
15567         (qcdt.curr_attribute_context is not null   /* Vivek */
15568          and qcdt.currency_detail_id =   /* Vivek */
15569              (select qcdt3.currency_detail_id
15570 	       from qp_currency_details qcdt3  /* Vivek */
15571                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15572                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15573                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15574                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15575                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15576                  and  qcdt3.precedence =
15577              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15578 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15579                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15580 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15581                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15582                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15583                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15584                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15585                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15586                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15587                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15588                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15589                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15590                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15591              ))   /* Vivek */
15592         )   /* Vivek */
15593        )   /* Vivek */
15594    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15595    --       OR
15596    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15597    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15598    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15599    AND   QPH.ACTIVE_FLAG = G_YES
15600    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15601    AND   QPQ.ACTIVE_FLAG = G_YES
15602    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15603          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15604          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15605    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15606    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15607    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15608    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15609    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15610 UNION ALL
15611 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n7) index(qplat_pric qp_preq_line_attrs_tmp_n2) l_sec_list_cur */
15612                    QPLAT_PROD.LINE_INDEX,
15613                    QPL.LIST_LINE_ID,
15614                    QPL.ARITHMETIC_OPERATOR,
15615                    QPL.OPERAND,
15616                    QPL.PRICING_GROUP_SEQUENCE,
15617                    QPL.LIST_LINE_TYPE_CODE,
15618                    QPL.PRICING_PHASE_ID,
15619                    QPL.AUTOMATIC_FLAG,
15620                    QPL.INCOMPATIBILITY_GRP_CODE,
15621                    QPL.PRICE_BY_FORMULA_ID,
15622                    QPL.PRODUCT_PRECEDENCE,
15623                    QPL.PRIMARY_UOM_FLAG,
15624                    QPL.MODIFIER_LEVEL_CODE,
15625                    QPL.LIST_LINE_NO,
15626                    QPA.PRODUCT_UOM_CODE,
15627                    QPA.EXCLUDER_FLAG,
15628                    QPH.LIST_TYPE_CODE,
15629    /* vivek        QPH.ROUNDING_FACTOR,  */
15630                    QCDT.ROUNDING_FACTOR, /* vivek */
15631                    QPLAT_PROD.LINE_DETAIL_INDEX,
15632                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15633                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15634                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15635                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15636                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15637                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15638                    QPLAT_PROD.APPLIED_FLAG,
15639                    NULL                            PRODUCT_OPERATOR_TYPE,
15640                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
15641                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
15642                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
15643                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
15644                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
15645                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
15646                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
15647                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
15648                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
15649                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
15650                    NULL                      QUALIFIER_ATTRIBUTE,
15651                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
15652                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
15653                    to_number(NULL)           QUALIFIER_GROUPING_NO,
15654                    NULL                      QUALIFIER_DATATYPE,
15655                    NULL                      SETUP_VALUE_FROM,
15656                    NULL                      SETUP_VALUE_TO,
15657                    NULL                      QUALIFIER_OPERATOR_TYPE,
15658                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15659                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15660                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15661                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15662                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15663                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15664                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15665                   ,QPL.BREAK_UOM_CODE /* Proration */
15666                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15667                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15668                   ,NULL QUALIFIER_TYPE -- 3863226
15669                   ,QPLAT_PRIC.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15670    FROM
15671          qp_npreq_lines_tmp qplines,
15672          QP_QUALIFIERS qpq,
15673          qp_npreq_line_attrs_tmp qplat_prod,
15674          QP_PRICING_ATTRIBUTES qpa,
15675          qp_npreq_line_attrs_tmp qplat_pric,
15676          QP_LIST_LINES qpl,
15677          QP_LIST_HEADERS_B qph,
15678          --QP_PRICE_REQ_SOURCES qprs,
15679          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
15680          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15681    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15682    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15683    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15684    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15685    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15686    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15687    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
15688    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15689    AND   (QPLINES.PRICE_FLAG = G_YES
15690           OR
15691          (QPLINES.PRICE_FLAG = G_PHASE
15692           AND
15693           P_FREEZE_OVERRIDE_FLAG = G_YES))
15694    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15695    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15696    AND   ((QPLINES.VALIDATED_FLAG = G_YES
15697              OR
15698          (QPLINES.VALIDATED_FLAG = G_NO AND
15699          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
15700              OR
15701          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
15702          (G_QUALIFY_SECONDARY = G_NO
15703           OR
15704           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
15705          ))
15706    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15707    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15708    AND   QPA.EXCLUDER_FLAG = G_NO
15709    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15710    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
15711    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
15712    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
15713           OR
15714           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
15715    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
15716    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15717    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
15718    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
15719    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15720    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
15721 --added for moac -- commented references to security profile
15722 --security will be built into qp_list_headers_b
15723 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15724 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15725 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15726    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15727            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15728            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15729    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15730            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15731            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15732 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15733             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15734             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15735             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15736                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15737                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15738    AND (   /* Vivek */
15739         (qcdt.curr_attribute_context is null   /* Vivek */
15740          and not exists   /* Vivek */
15741              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15742 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15743                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15744 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15745                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15746                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15747                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15748                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15749                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15750                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15751                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15752                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15753                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15754                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15755              )   /* Vivek */
15756         )   /* Vivek */
15757         OR   /* Vivek */
15758         (qcdt.curr_attribute_context is not null   /* Vivek */
15759          and qcdt.currency_detail_id =   /* Vivek */
15760              (select qcdt3.currency_detail_id
15761 	       from qp_currency_details qcdt3  /* Vivek */
15762                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15763                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15764                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15765                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15766                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15767                  and  qcdt3.precedence =
15768              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15769 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15770                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15771 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15772                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15773                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15774                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15775                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15776                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15777                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15778                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15779                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15780                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15781                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15782              ))   /* Vivek */
15783         )   /* Vivek */
15784        )   /* Vivek */
15785    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15786    --       OR
15787    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15788    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15789    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15790    AND   QPH.ACTIVE_FLAG = G_YES
15791    AND   QPQ.ACTIVE_FLAG = G_YES
15792    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15793    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15794    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15795    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15796    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15797 UNION ALL
15798 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPL QPH) INDEX(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n7) l_sec_list_cur */
15799                    QPLAT_PROD.LINE_INDEX,
15800                    QPL.LIST_LINE_ID,
15801                    QPL.ARITHMETIC_OPERATOR,
15802                    QPL.OPERAND,
15803                    QPL.PRICING_GROUP_SEQUENCE,
15804                    QPL.LIST_LINE_TYPE_CODE,
15805                    QPL.PRICING_PHASE_ID,
15806                    QPL.AUTOMATIC_FLAG,
15807                    QPL.INCOMPATIBILITY_GRP_CODE,
15808                    QPL.PRICE_BY_FORMULA_ID,
15809                    QPL.PRODUCT_PRECEDENCE,
15810                    QPL.PRIMARY_UOM_FLAG,
15811                    QPL.MODIFIER_LEVEL_CODE,
15812                    QPL.LIST_LINE_NO,
15813                    QPA.PRODUCT_UOM_CODE,
15814                    QPA.EXCLUDER_FLAG,
15815                    QPH.LIST_TYPE_CODE,
15816    /* vivek        QPH.ROUNDING_FACTOR,  */
15817                    QCDT.ROUNDING_FACTOR, /* vivek */
15818                    QPLAT_PROD.LINE_DETAIL_INDEX,
15819                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15820                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15821                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15822                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15823                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15824                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15825                    QPLAT_PROD.APPLIED_FLAG,
15826                    NULL                      PRODUCT_OPERATOR_TYPE,
15827                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
15828                    NULL                      PRICING_ATTRIBUTE,
15829                    NULL                      PRICING_ATTR_VALUE_FROM,
15830                    NULL                      PRICING_SETUP_VALUE_FROM,
15831                    NULL                      PRICING_SETUP_VALUE_TO,
15832                    NULL                      PRICING_ATTRIBUTE_LEVEL,
15833                    NULL                      PRICING_ATTRIBUTE_TYPE,
15834                    NULL                      PRICING_OPERATOR_TYPE,
15835                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
15836                    QPLAT_Q.CONTEXT              QUALIFIER_ATTRIBUTE_CONTEXT,
15837                    QPLAT_Q.ATTRIBUTE            QUALIFIER_ATTRIBUTE,
15838                    QPLAT_Q.VALUE_FROM           QUALIFIER_ATTR_VALUE_FROM,
15839                    QPLAT_Q.PRICING_ATTR_FLAG    QUALIFIER_PRICING_ATTR_FLAG,
15840                    QPSQ.QUALIFIER_GROUPING_NO   QUALIFIER_GROUPING_NO,
15841                    QPSQ.QUALIFIER_DATATYPE      QUALIFIER_DATATYPE,
15842                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
15843                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
15844                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
15845                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15846                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15847                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15848                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15849                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15850                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15851                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15852                   ,QPL.BREAK_UOM_CODE /* Proration */
15853                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15854                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15855                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  --3863226
15856                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15857    FROM
15858          qp_npreq_lines_tmp QPLINES,
15859          QP_QUALIFIERS QPQ,
15860          QP_QUALIFIERS QPSQ,
15861 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
15862          qp_npreq_line_attrs_tmp  QPLAT_Q,
15863          QP_PRICING_ATTRIBUTES QPA,
15864          QP_LIST_LINES QPL,
15865          QP_LIST_HEADERS_B QPH,
15866          --QP_PRICE_REQ_SOURCES QPRS,
15867          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
15868          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15869    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15870    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15871    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15872    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15873    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15874    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
15875    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15876    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
15877    AND   QPA.EXCLUDER_FLAG = G_NO
15878    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15879    AND   (QPLINES.PRICE_FLAG = G_YES
15880           OR
15881          (QPLINES.PRICE_FLAG = G_PHASE
15882           AND
15883           P_FREEZE_OVERRIDE_FLAG = G_YES))
15884    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15885    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15886    AND   QPLINES.VALIDATED_FLAG = G_NO
15887    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
15888           OR
15889           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
15890           )
15891    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15892    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15893    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15894    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
15895 --added for moac -- commented references to security profile
15896 --security will be built into qp_list_headers_b
15897 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15898 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15899 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15900    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15901            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15902            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15903    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15904            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15905            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15906 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15907             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15908             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15909             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15910                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15911                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15912    AND (   /* Vivek */
15913         (qcdt.curr_attribute_context is null   /* Vivek */
15914          and not exists   /* Vivek */
15915              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15916 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15917                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15918 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15919                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15920                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15921                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15922                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15923                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15924                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15925                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15926                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15927                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15928                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15929              )   /* Vivek */
15930         )   /* Vivek */
15931         OR   /* Vivek */
15932         (qcdt.curr_attribute_context is not null   /* Vivek */
15933          and qcdt.currency_detail_id =   /* Vivek */
15934              (select qcdt3.currency_detail_id
15935 	       from qp_currency_details qcdt3  /* Vivek */
15936                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15937                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15938                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15939                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15940                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15941                  and  qcdt3.precedence =
15942              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15943 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15944                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15945 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15946                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15947                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15948                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15949                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15950                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15951                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15952                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15953                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15954                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15955                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15956              ))   /* Vivek */
15957         )   /* Vivek */
15958        )   /* Vivek */
15959    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15960    --       OR
15961    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15962    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15963    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15964    AND   QPH.ACTIVE_FLAG = G_YES
15965    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15966    AND   QPQ.ACTIVE_FLAG = G_YES
15967    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15968          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15969          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15970    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15971    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15972    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15973    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15974    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15975    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
15976 -- 3594459, context and attribute OR'd together
15977    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
15978           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
15979    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
15980    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
15981    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
15982    AND   QPSQ.ACTIVE_FLAG = G_YES
15983    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
15984                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
15985            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
15986                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
15987            OR
15988           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
15989    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
15990    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15991          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15992          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15993    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
15994    AND   QPLAT_Q.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15995    AND   G_QUALIFY_SECONDARY = G_YES
15996    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
15997           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
15998 UNION ALL
15999 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n7) index(qplat_pric qp_preq_line_attrs_tmp_n2) l_sec_list_cur */
16000                    QPLAT_PROD.LINE_INDEX,
16001                    QPL.LIST_LINE_ID,
16002                    QPL.ARITHMETIC_OPERATOR,
16003                    QPL.OPERAND,
16004                    QPL.PRICING_GROUP_SEQUENCE,
16005                    QPL.LIST_LINE_TYPE_CODE,
16006                    QPL.PRICING_PHASE_ID,
16007                    QPL.AUTOMATIC_FLAG,
16008                    QPL.INCOMPATIBILITY_GRP_CODE,
16009                    QPL.PRICE_BY_FORMULA_ID,
16010                    QPL.PRODUCT_PRECEDENCE,
16011                    QPL.PRIMARY_UOM_FLAG,
16012                    QPL.MODIFIER_LEVEL_CODE,
16013                    QPL.LIST_LINE_NO,
16014                    QPA.PRODUCT_UOM_CODE,
16015                    QPA.EXCLUDER_FLAG,
16016                    QPH.LIST_TYPE_CODE,
16017    /* vivek        QPH.ROUNDING_FACTOR,  */
16018                    QCDT.ROUNDING_FACTOR, /* vivek */
16019                    QPLAT_PROD.LINE_DETAIL_INDEX,
16020                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
16021                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
16022                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
16023                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
16024                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
16025                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
16026                    QPLAT_PROD.APPLIED_FLAG,
16027                    NULL                            PRODUCT_OPERATOR_TYPE,
16028                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
16029                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
16030                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
16031                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
16032                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
16033                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
16034                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
16035                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
16036                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
16037                    QPLAT_Q.CONTEXT              QUALIFIER_ATTRIBUTE_CONTEXT,
16038                    QPLAT_Q.ATTRIBUTE            QUALIFIER_ATTRIBUTE,
16039                    QPLAT_Q.VALUE_FROM           QUALIFIER_ATTR_VALUE_FROM,
16040                    QPLAT_Q.PRICING_ATTR_FLAG    QUALIFIER_PRICING_ATTR_FLAG,
16041                    QPSQ.QUALIFIER_GROUPING_NO   QUALIFIER_GROUPING_NO,
16042                    QPSQ.QUALIFIER_DATATYPE      QUALIFIER_DATATYPE,
16043                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
16044                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
16045                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
16046                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
16047                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
16048                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
16049                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
16050                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
16051                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
16052                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
16053                   ,QPL.BREAK_UOM_CODE /* Proration */
16054                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
16055                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
16056                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  --3863226
16057                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG   -- Added for TCA
16058    FROM
16059          qp_npreq_lines_tmp qplines,
16060          QP_QUALIFIERS qpq,
16061          QP_QUALIFIERS qpsq,
16062          qp_npreq_line_attrs_tmp qplat_prod,
16063          QP_PRICING_ATTRIBUTES qpa,
16064          qp_npreq_line_attrs_tmp qplat_pric,
16065          qp_npreq_line_attrs_tmp qplat_q,
16066          QP_LIST_LINES qpl,
16067          QP_LIST_HEADERS_B qph,
16068          --QP_PRICE_REQ_SOURCES qprs,
16069          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
16070          QP_CURRENCY_DETAILS QCDT   /* Vivek */
16071    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
16072    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
16073    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
16074    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
16075    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
16076    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
16077    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
16078    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
16079    AND   (QPLINES.PRICE_FLAG = G_YES
16080           OR
16081          (QPLINES.PRICE_FLAG = G_PHASE
16082           AND
16083           P_FREEZE_OVERRIDE_FLAG = G_YES))
16084    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
16085    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
16086    AND   QPLINES.VALIDATED_FLAG = G_NO
16087    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
16088           OR
16089           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
16090           )
16091    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
16092    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
16093    AND   QPA.EXCLUDER_FLAG = G_NO
16094    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16095    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
16096    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
16097    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
16098           OR
16099           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
16100    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
16101    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16102    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
16103    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
16104    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
16105    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
16106 --added for moac -- commented references to security profile
16107 --security will be built into qp_list_headers_b
16108 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
16109 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
16110 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
16111    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
16112            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16113            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16114    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
16115            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16116            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16117 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
16118             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
16119             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
16120             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
16121                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16122                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16123    AND (   /* Vivek */
16124         (qcdt.curr_attribute_context is null   /* Vivek */
16125          and not exists   /* Vivek */
16126              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
16127 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
16128                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
16129 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
16130                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
16131                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
16132                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
16133                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
16134                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
16135                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
16136                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
16137                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
16138                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16139                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16140              )   /* Vivek */
16141         )   /* Vivek */
16142         OR   /* Vivek */
16143         (qcdt.curr_attribute_context is not null   /* Vivek */
16144          and qcdt.currency_detail_id =   /* Vivek */
16145              (select qcdt3.currency_detail_id
16146 	       from qp_currency_details qcdt3  /* Vivek */
16147                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
16148                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
16149                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
16150                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16151                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16152                  and  qcdt3.precedence =
16153              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
16154 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
16155                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
16156 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
16157                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
16158                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
16159                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
16160                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
16161                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
16162                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
16163                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
16164                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
16165                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16166                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
16167              ))   /* Vivek */
16168         )   /* Vivek */
16169        )   /* Vivek */
16170    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
16171    --       OR
16172    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
16173    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
16174    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
16175    AND   QPH.ACTIVE_FLAG = G_YES
16176    AND   QPQ.ACTIVE_FLAG = G_YES
16177    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
16178    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
16179    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16180    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
16181    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
16182    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
16183 -- 3594459, context and attribute OR'd together
16184    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
16185           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
16186    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
16187    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
16188    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
16189    AND   QPSQ.ACTIVE_FLAG = G_YES
16190    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
16191                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
16192            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
16193                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
16194            OR
16195           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
16196    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
16197    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
16198          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
16199          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
16200    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
16201    AND   QPLAT_Q.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16202    AND   G_QUALIFY_SECONDARY = G_YES
16203    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
16204           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
16205    ORDER BY 1,2;
16206 
16207 /*
16208 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
16209 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
16210 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
16211 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
16212 */
16213 CURSOR l_chk_deleted_pbh_cur(p_line_index IN PLS_INTEGER,
16214 					    p_pricing_phase_id NUMBER) IS
16215 SELECT /*+ INDEX(qp_npreq_ldets_tmp QP_PREQ_LDETS_TMP_N2) */  'X' --bug 14464004
16216 FROM qp_npreq_ldets_tmp
16217 WHERE created_from_list_line_type = G_PRICE_BREAK_TYPE
16218 AND   line_index = p_line_index
16219 AND   pricing_phase_id = p_pricing_phase_id
16220 AND   pricing_status_code <> G_STATUS_NEW;
16221 
16222 l_h_line_index_tbl NUMBER_TYPE;
16223 l_h_list_line_id_tbl NUMBER_TYPE;
16224 l_h_arithmetic_operator_tbl VARCHAR_30_TYPE;
16225 l_h_operand_tbl NUMBER_TYPE;
16226 l_h_pric_group_sequence_tbl NUMBER_TYPE;
16227 l_h_list_line_type_code_tbl VARCHAR_30_TYPE;
16228 l_h_pric_phase_id_tbl NUMBER_TYPE;
16229 l_h_automatic_flag_tbl FLAG_TYPE;
16230 l_h_incompat_grp_code_tbl VARCHAR_30_TYPE;
16231 l_h_price_by_formula_id_tbl NUMBER_TYPE;
16232 l_h_prod_precedence_tbl NUMBER_TYPE;
16233 l_h_primary_uom_flag_tbl FLAG_TYPE;
16234 l_h_modifier_level_code_tbl VARCHAR_30_TYPE;
16235 l_h_list_line_no_tbl VARCHAR_30_TYPE;
16236 l_h_prod_uom_code_tbl VARCHAR_30_TYPE;
16237 l_h_excluder_flag_tbl FLAG_TYPE;
16238 l_h_list_type_code_tbl VARCHAR_30_TYPE;
16239 l_h_rounding_factor_tbl NUMBER_TYPE;
16240 l_h_line_detail_index_tbl NUMBER_TYPE;
16241 l_h_list_header_id_tbl NUMBER_TYPE;
16242 l_h_prod_attr_context_tbl VARCHAR_30_TYPE;
16243 l_h_prod_attr_tbl VARCHAR_30_TYPE;
16244 l_h_prod_attr_val_from_tbl VARCHAR_TYPE;
16245 l_h_prod_attr_level_tbl VARCHAR_30_TYPE;
16246 l_h_prod_attr_type_tbl VARCHAR_30_TYPE;
16247 l_h_applied_flag_tbl FLAG_TYPE;
16248 l_h_prod_operator_type_tbl VARCHAR_30_TYPE;
16249 l_h_pric_attr_context_tbl VARCHAR_30_TYPE;
16250 l_h_pric_attr_tbl VARCHAR_30_TYPE;
16251 l_h_pric_attr_value_from_tbl VARCHAR_TYPE;
16252 l_h_pric_setup_value_from_tbl VARCHAR_TYPE;
16253 l_h_pric_setup_value_to_tbl VARCHAR_TYPE;
16254 l_h_pric_attr_level_tbl VARCHAR_30_TYPE;
16255 l_h_pric_attr_type_tbl VARCHAR_30_TYPE;
16256 l_h_pric_operator_type_tbl VARCHAR_30_TYPE;
16257 l_h_pric_attr_datatype_tbl VARCHAR_30_TYPE;
16258 l_h_qual_attr_context_tbl VARCHAR_30_TYPE;
16259 l_h_qual_attr_tbl VARCHAR_30_TYPE;
16260 l_h_qual_attr_value_from_tbl VARCHAR_TYPE;
16261 l_h_qual_pric_attr_flag_tbl FLAG_TYPE;
16262 l_h_qual_grouping_no_tbl NUMBER_TYPE;
16263 l_h_qual_datatype_tbl VARCHAR_30_TYPE;
16264 l_h_setup_value_from_tbl VARCHAR_TYPE;
16265 l_h_setup_value_to_tbl VARCHAR_TYPE;
16266 l_h_qual_operator_type_tbl VARCHAR_30_TYPE;
16267 l_h_qual_precedence_tbl NUMBER_TYPE;
16268 l_h_break_uom_code_tbl VARCHAR_30_TYPE; /* proration */
16269 l_h_break_uom_context_tbl VARCHAR_30_TYPE; /* proration */
16270 l_h_break_uom_attr_tbl VARCHAR_30_TYPE; /* proration */
16271 l_h_qual_type_tbl VARCHAR_30_TYPE; -- 3863226
16272 l_h_derived_qualifier_flag_tbl   FLAG_TYPE; -- Added for TCA
16273 
16274 l_h_currency_detail_id_tbl NUMBER_TYPE;
16275 l_h_currency_header_id_tbl NUMBER_TYPE;
16276 l_h_sell_rounding_factor_tbl NUMBER_TYPE;
16277 l_h_order_currency_tbl VARCHAR_30_TYPE;
16278 l_h_pric_effective_date_tbl DATE_TYPE;
16279 l_h_base_currency_code_tbl VARCHAR_30_TYPE;
16280 
16281 l_loop_count          NUMBER := 0;
16282 l_list_price          NUMBER;
16283 l_percent_price       NUMBER;
16284 l_list_line_type_code VARCHAR2(30);
16285 v_list_header_id      NUMBER;
16286 l_line_detail_index   NUMBER;
16287 l_status_code         VARCHAR2(30);
16288 l_status_text         VARCHAR2(240);
16289 l_list_line_id        NUMBER;
16290 l_dummy               VARCHAR2(1);
16291 l_routine VARCHAR2(240):='QP_PREQ_GRP.SECONDARY_LIST_HEADER_SEARCH';
16292 M PLS_INTEGER:=1;
16293 D PLS_INTEGER:=1;
16294 ls_line_index         NUMBER := -9999;
16295 ls_list_line_id       NUMBER := -9999;
16296 
16297 l_use_multi_currency VARCHAR2(1);
16298 
16299 E_ROUTINE_ERRORS       EXCEPTION;
16300 BEGIN
16301 qp_debug_util.tstart('PERFORM_SECONDARY_SEARCH','Performing Secondary Price List Search');
16302 -- G_QUALIFY_SECONDARY := NVL(FND_PROFILE.VALUE('QP_QUALIFY_SECONDARY_PRICE_LISTS'),'N');--profile option
16303  -- Update the price list id , validated flag , and primary_qualifiers_match flag for sec search
16304  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN  --4033618
16305     engine_debug ('QP_QUALIFY_SECONDARY_PRICE_LISTS:' || G_QUALIFY_SECONDARY);
16306  END IF;
16307 
16308 
16309  Update_Sec_Price_List_Info(l_status_code,l_status_text);
16310  IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
16311   RAISE E_ROUTINE_ERRORS;
16312  END IF;
16313 
16314   -- julin [3805113]: prepare global tables for INSERT_LDETS2
16315   G_LINE_DETAIL_INDEX_TBL.delete;
16316   G_LINE_DETAIL_TYPE_CODE_TBL.delete;
16317   G_LINE_INDEX_TBL.delete;
16318   G_LIST_HEADER_ID_TBL.delete;
16319   G_LIST_LINE_ID_TBL.delete;
16320   G_LIST_LINE_TYPE_TBL.delete;
16321   G_CREATED_FROM_SQL_TBL.delete;
16322   G_PRICING_GROUP_SEQUENCE_TBL.delete;
16323   G_OPERAND_CALCULATION_CODE_TBL.delete;
16324   G_OPERAND_VALUE_TBL.delete;
16325   G_PRICING_PHASE_ID_TBL.delete;
16326   G_LIST_TYPE_CODE_TBL.delete;
16327   G_PRICING_STATUS_CODE_TBL.delete;
16328   G_PROCESSED_FLAG_TBL.delete;
16329   G_AUTOMATIC_FLAG_TBL.delete;
16330   G_MODIFIER_LEVEL_CODE_TBL.delete;
16331   G_LIST_LINE_NO_TBL.delete;
16332   G_INCOMP_GRP_CODE_TBL.delete;
16333   G_PRICE_FORMULA_ID_TBL.delete;
16334   G_PRODUCT_PRECEDENCE_TBL.delete;
16335   G_PRIMARY_UOM_FLAG_TBL.delete;
16336   G_ROUNDING_FACTOR_TBL.delete;
16337   G_SECONDARY_PRICELIST_IND_TBL.delete;
16338   G_CURRENCY_DETAIL_ID_TBL.delete;
16339   G_CURRENCY_HEADER_ID_TBL.delete;
16340   G_SELLING_ROUNDING_TBL.delete;
16341   G_ORDER_CURRENCY_TBL.delete;
16342   G_PRICING_EFFECTIVE_DATE_TBL.delete;
16343   G_BASE_CURRENCY_CODE_TBL.delete;
16344   G_BREAK_UOM_TBL.delete;
16345   G_BREAK_CONTEXT_TBL.delete;
16346   G_BREAK_ATTRIBUTE_TBL.delete;
16347 
16348   -- julin [3805113]: prepare global tables for INSERT_PRICE_LIST_ATTRS
16349   G_LINE_INDEX_TBL_A.delete;
16350   G_LINE_DETAIL_INDEX_TBL_A.delete;
16351   G_ATTRIBUTE_LEVEL_tbl.delete;
16352   G_ATTRIBUTE_TYPE_tbl.delete;
16353   G_LIST_HEADER_ID_TBL_A.delete;
16354   G_LIST_LINE_ID_TBL_A.delete;
16355   G_CONTEXT_tbl.delete;
16356   G_ATTRIBUTE_tbl.delete;
16357   G_VALUE_FROM_tbl.delete;
16358   G_SETUP_VALUE_FROM_tbl.delete;
16359   G_SETUP_VALUE_TO_tbl.delete;
16360   G_GROUPING_NUMBER_tbl.delete;
16361   G_COMPARISON_OPERATOR_TYPE_tbl.delete;
16362   G_VALIDATED_FLAG_tbl.delete;
16363   G_APPLIED_FLAG_tbl.delete;
16364   G_PRICING_STATUS_CODE_TBL_Q.delete;
16365   G_PRICING_STATUS_TEXT_tbl.delete;
16366   G_QUALIFIER_PRECEDENCE_TBL.delete;
16367   G_DATATYPE_tbl.delete;
16368   G_PRICING_ATTR_FLAG_tbl.delete;
16369   G_QUALIFIER_TYPE_TBL.delete;
16370   G_PRODUCT_UOM_CODE_TBL.delete;
16371   G_EXCLUDER_FLAG_TBL.delete;
16372   G_PRICING_PHASE_ID_TBL_A.delete;
16373   G_INCOMP_GRP_CODE_TBL_A.delete;
16374   G_LINE_DETAIL_TYPE_CODE_TBL_A.delete;
16375   G_MODIFIER_LEVEL_CODE_TBL_A.delete;
16376   G_PRIMARY_UOM_FLAG_TBL_A.delete;
16377 
16378   -- julin [3805113]: bulk fetch
16379   IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
16380     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16381     engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
16382     END IF;
16383     l_use_multi_currency := 'Y';
16384     qp_debug_util.tstart('L_SEC_LIST_CUR_CURRENCY','CURSOR LOOP L_SEC_LIST_CUR_CURRENCY');
16385     OPEN l_sec_list_cur_currency;
16386   ELSE
16387     qp_debug_util.tstart('L_USE_MULTI_CURRENCY','CURSOR LOOP L_USE_MULTI_CURRENCY');
16388     l_use_multi_currency := 'N';
16389     OPEN l_sec_list_cur;
16390   END IF;
16391   qp_debug_util.tstart('L_SEC_LIST_CUR/CURRENCY_FETCH','CURSOR LOOP L_SEC_LIST_CUR/CURRENCY_FETCH');
16392   LOOP
16393     IF l_use_multi_currency = 'Y' THEN
16394       FETCH l_sec_list_cur_currency BULK COLLECT INTO
16395          l_h_line_index_tbl,
16396          l_h_list_line_id_tbl,
16397          l_h_arithmetic_operator_tbl,
16398          l_h_operand_tbl,
16399          l_h_pric_group_sequence_tbl,
16400          l_h_list_line_type_code_tbl,
16401          l_h_pric_phase_id_tbl,
16402          l_h_automatic_flag_tbl,
16403          l_h_incompat_grp_code_tbl,
16404          l_h_price_by_formula_id_tbl,
16405          l_h_prod_precedence_tbl,
16406          l_h_primary_uom_flag_tbl,
16407          l_h_modifier_level_code_tbl,
16408          l_h_list_line_no_tbl,
16409          l_h_prod_uom_code_tbl,
16410          l_h_excluder_flag_tbl,
16411          l_h_list_type_code_tbl,
16412          l_h_rounding_factor_tbl,
16413          l_h_line_detail_index_tbl,
16414          l_h_list_header_id_tbl,
16415          l_h_prod_attr_context_tbl,
16416          l_h_prod_attr_tbl,
16417          l_h_prod_attr_val_from_tbl,
16418          l_h_prod_attr_level_tbl,
16419          l_h_prod_attr_type_tbl,
16420          l_h_applied_flag_tbl,
16421          l_h_prod_operator_type_tbl,
16422          l_h_pric_attr_context_tbl,
16423          l_h_pric_attr_tbl,
16424          l_h_pric_attr_value_from_tbl,
16425          l_h_pric_setup_value_from_tbl,
16426          l_h_pric_setup_value_to_tbl,
16427          l_h_pric_attr_level_tbl,
16428          l_h_pric_attr_type_tbl,
16429          l_h_pric_operator_type_tbl,
16430          l_h_pric_attr_datatype_tbl,
16431          l_h_qual_attr_context_tbl,
16432          l_h_qual_attr_tbl,
16433          l_h_qual_attr_value_from_tbl,
16434          l_h_qual_pric_attr_flag_tbl,
16435          l_h_qual_grouping_no_tbl,
16436          l_h_qual_datatype_tbl,
16437          l_h_setup_value_from_tbl,
16438          l_h_setup_value_to_tbl,
16439          l_h_qual_operator_type_tbl,
16440          l_h_qual_precedence_tbl,
16441          l_h_currency_detail_id_tbl,
16442          l_h_currency_header_id_tbl,
16443          l_h_sell_rounding_factor_tbl,
16444          l_h_order_currency_tbl,
16445          l_h_pric_effective_date_tbl,
16446          l_h_base_currency_code_tbl,
16447          l_h_break_uom_code_tbl,
16448          l_h_break_uom_context_tbl,
16449          l_h_break_uom_attr_tbl,
16450          l_h_qual_type_tbl,
16451          l_h_derived_qualifier_flag_tbl    -- Added for TCA
16452          LIMIT G_BATCH_SIZE_1;
16453       EXIT WHEN l_h_line_index_tbl.COUNT = 0;
16454 
16455       FOR I in l_h_line_index_tbl.first .. l_h_line_index_tbl.last
16456       LOOP
16457         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16458           engine_debug('item found in secondary list');
16459         END IF;
16460         IF (ls_line_index <> l_h_line_index_tbl(I) OR ls_list_line_id <> l_h_list_line_id_tbl(I)) THEN
16461           l_line_detail_index := GET_LINE_DETAIL_INDEX;
16462           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16463             engine_debug('Inserting Secondary Price List Detail');
16464           END IF;
16465           G_LINE_DETAIL_INDEX_TBL(D)           := l_line_detail_index;
16466           G_LINE_DETAIL_TYPE_CODE_TBL(D)       := 'NULL';
16467           G_LINE_INDEX_TBL(D)                  := l_h_LINE_INDEX_tbl(I);
16468           G_LIST_HEADER_ID_TBL(D)              := l_h_LIST_HEADER_ID_tbl(I);
16469           G_LIST_LINE_ID_TBL(D)                := l_h_LIST_LINE_ID_tbl(I);
16470           G_LIST_LINE_TYPE_TBL(D)              := l_h_LIST_LINE_TYPE_CODE_tbl(I);
16471           G_CREATED_FROM_SQL_TBL(D)            := 'LHS_SECONDARY_PRICE_LIST'  ; -- nth sec price list
16472           G_PRICING_GROUP_SEQUENCE_TBL(D)      := l_h_pric_GROUP_SEQUENCE_tbl(I);
16473           G_OPERAND_CALCULATION_CODE_TBL(D)    := l_h_ARITHMETIC_OPERATOR_tbl(I);
16474           G_OPERAND_VALUE_TBL(D)               := l_h_OPERAND_tbl(I);
16475           G_PRICING_PHASE_ID_TBL(D)            := l_h_pric_PHASE_ID_tbl(I);
16476           G_LIST_TYPE_CODE_TBL(D)              := l_h_LIST_TYPE_CODE_tbl(I);
16477           G_PRICING_STATUS_CODE_TBL(D)         := G_STATUS_NEW;
16478           G_PROCESSED_FLAG_TBL(D)              := G_NOT_PROCESSED;
16479           G_AUTOMATIC_FLAG_TBL(D)              := l_h_AUTOMATIC_FLAG_tbl(I);
16480           G_MODIFIER_LEVEL_CODE_TBL(D)         := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16481           G_LIST_LINE_NO_TBL(D)                := l_h_LIST_LINE_NO_tbl(I);
16482           G_INCOMP_GRP_CODE_TBL(D)             := l_h_INCOMPAT_GRP_CODE_tbl(I);
16483           G_PRICE_FORMULA_ID_TBL(D)            := l_h_PRICE_BY_FORMULA_ID_tbl(I);
16484           G_PRODUCT_PRECEDENCE_TBL(D)          := l_h_prod_PRECEDENCE_tbl(I);
16485           G_PRIMARY_UOM_FLAG_TBL(D)            := l_h_PRIMARY_UOM_FLAG_tbl(I);
16486           G_ROUNDING_FACTOR_TBL(D)             := l_h_ROUNDING_FACTOR_tbl(I);
16487           G_SECONDARY_PRICELIST_IND_TBL(D)     := G_YES;
16488           G_CURRENCY_DETAIL_ID_TBL(D)          := l_h_CURRENCY_DETAIL_ID_tbl(I); /*vivek */
16489           G_CURRENCY_HEADER_ID_TBL(D)          := l_h_CURRENCY_HEADER_ID_tbl(I); /*vivek */
16490           G_SELLING_ROUNDING_TBL(D)            := l_h_SELL_ROUNDING_FACTOR_tbl(I); /*vivek */
16491           G_ORDER_CURRENCY_TBL(D)              := l_h_ORDER_CURRENCY_tbl(I); /*vivek */
16492           G_PRICING_EFFECTIVE_DATE_TBL(D)      := l_h_pric_EFFECTIVE_DATE_tbl(I);/*vivek */
16493           G_BASE_CURRENCY_CODE_TBL(D)          := l_h_BASE_CURRENCY_CODE_tbl(I);/*vivek */
16494           G_BREAK_UOM_TBL(D)                   := l_h_BREAK_UOM_CODE_tbl(I); /* Proration */
16495           G_BREAK_CONTEXT_TBL(D)               := l_h_BREAK_UOM_CONTEXT_tbl(I); /* Proration */
16496           G_BREAK_ATTRIBUTE_TBL(D)             := l_h_BREAK_UOM_ATTR_tbl(I); /* Proration */
16497           D := D + 1;
16498 
16499           ls_line_index := l_h_line_index_tbl(I);
16500           ls_list_line_id := l_h_list_line_id_tbl(I);
16501         END IF;
16502 
16503         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16504           engine_debug('----BEFORE INSERTING SECONDARY PRODUCT ATTRS -------');
16505           engine_debug('Qualifier Precedence : ' || l_h_qual_precedence_tbl(I));
16506         END IF;
16507 
16508         --INSERT PRODUCT ATTRIBUTES
16509         G_LINE_INDEX_TBL_A(M)              := l_h_LINE_INDEX_tbl(I);
16510         G_LINE_DETAIL_INDEX_TBL_A(M)       := L_LINE_DETAIL_INDEX;
16511         G_ATTRIBUTE_LEVEL_tbl(M)           := l_h_prod_ATTR_LEVEL_tbl(I);
16512         G_ATTRIBUTE_TYPE_tbl(M)            := l_h_prod_ATTR_TYPE_tbl(I);
16513         G_LIST_HEADER_ID_TBL_A(M)            := l_h_LIST_HEADER_ID_tbl(I);
16514         G_LIST_LINE_ID_TBL_A(M)              := l_h_LIST_LINE_ID_tbl(I);
16515         G_CONTEXT_tbl(M)                   := l_h_prod_ATTR_CONTEXT_tbl(I);
16516         G_ATTRIBUTE_tbl(M)                 := l_h_prod_ATTR_tbl(I);
16517         G_VALUE_FROM_tbl(M)                := l_h_prod_attr_val_from_tbl(I);
16518         G_SETUP_VALUE_FROM_tbl(M)          := NULL;
16519         G_SETUP_VALUE_TO_tbl(M)            := NULL;
16520         G_GROUPING_NUMBER_tbl(M)           := NULL;
16521         G_COMPARISON_OPERATOR_TYPE_tbl(M)  := l_h_prod_OPERATOR_TYPE_tbl(I);
16522         G_VALIDATED_FLAG_tbl(M)            := NULL;
16523         G_APPLIED_FLAG_tbl(M)              := l_h_APPLIED_FLAG_tbl(I);
16524         G_PRICING_STATUS_CODE_TBL_Q(M)     := G_STATUS_NEW;
16525         G_PRICING_STATUS_TEXT_tbl(M)       := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16526         G_QUALIFIER_PRECEDENCE_TBL(M)      := l_h_qual_PRECEDENCE_tbl(I);
16527         G_DATATYPE_tbl(M)                  := NULL;
16528         G_PRICING_ATTR_FLAG_tbl(M)         := NULL;
16529         G_QUALIFIER_TYPE_TBL(M)            := NULL;
16530         G_PRODUCT_UOM_CODE_TBL(M)          := l_h_prod_UOM_CODE_tbl(I);
16531         G_EXCLUDER_FLAG_TBL(M)             := l_h_EXCLUDER_FLAG_tbl(I);
16532         G_PRICING_PHASE_ID_TBL_A(M)        := l_h_pric_PHASE_ID_tbl(I);
16533         G_INCOMP_GRP_CODE_TBL_A(M)         := l_h_INCOMPAT_GRP_CODE_tbl(I);
16534         G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
16535         G_MODIFIER_LEVEL_CODE_TBL_A(M)     := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16536         G_PRIMARY_UOM_FLAG_TBL_A(M)        := l_h_PRIMARY_UOM_FLAG_tbl(I);
16537         M:= M+1;
16538 
16539         --INSERT PRICING ATTRIBUTES
16540         IF (l_h_pric_ATTR_CONTEXT_tbl(I) IS NOT NULL) THEN
16541           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16542             engine_debug('----BEFORE INSERTING SECONDARY PRICING ATTRS -------');
16543           END IF;
16544           G_LINE_INDEX_TBL_A(M)            := l_h_LINE_INDEX_tbl(I);
16545           G_LINE_DETAIL_INDEX_TBL_A(M)     := L_LINE_DETAIL_INDEX;
16546           G_ATTRIBUTE_LEVEL_tbl(M)         := l_h_pric_ATTR_LEVEL_tbl(I);
16547           G_ATTRIBUTE_TYPE_tbl(M)          := l_h_pric_ATTR_TYPE_tbl(I);
16548           G_LIST_HEADER_ID_TBL_A(M)          := l_h_LIST_HEADER_ID_tbl(I);
16549           G_LIST_LINE_ID_TBL_A(M)            := l_h_LIST_LINE_ID_tbl(I);
16550           G_CONTEXT_tbl(M)                 := l_h_pric_ATTR_CONTEXT_tbl(I);
16551           G_ATTRIBUTE_tbl(M)               := l_h_pric_ATTR_tbl(I);
16552           G_VALUE_FROM_tbl(M)              := l_h_pric_ATTR_VALUE_FROM_tbl(I);
16553           G_SETUP_VALUE_FROM_tbl(M)        := l_h_pric_SETUP_VALUE_FROM_tbl(I);
16554           G_SETUP_VALUE_TO_tbl(M)          := l_h_pric_SETUP_VALUE_TO_tbl(I);
16555           G_GROUPING_NUMBER_tbl(M)         := NULL;
16556           G_COMPARISON_OPERATOR_TYPE_tbl(M):= l_h_pric_OPERATOR_TYPE_tbl(I);
16557           G_VALIDATED_FLAG_tbl(M)          := NULL;
16558           G_APPLIED_FLAG_tbl(M)            := l_h_APPLIED_FLAG_tbl(I);
16559           G_PRICING_STATUS_CODE_TBL_Q(M)   := G_STATUS_NEW;
16560           G_PRICING_STATUS_TEXT_tbl(M)     := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16561           G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
16562           G_DATATYPE_tbl(M)                := l_h_pric_ATTR_DATATYPE_tbl(I);
16563           G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
16564           G_QUALIFIER_TYPE_TBL(M)          := NULL;
16565           G_PRODUCT_UOM_CODE_TBL(M)        := l_h_prod_UOM_CODE_tbl(I);
16566           G_EXCLUDER_FLAG_TBL(M)           := l_h_EXCLUDER_FLAG_tbl(I);
16567           G_PRICING_PHASE_ID_TBL_A(M)      := l_h_pric_PHASE_ID_tbl(I);
16568           G_INCOMP_GRP_CODE_TBL_A(M)       := l_h_INCOMPAT_GRP_CODE_tbl(I);
16569           G_LINE_DETAIL_TYPE_CODE_TBL_A(M) := 'NULL';
16570           G_MODIFIER_LEVEL_CODE_TBL_A(M)   := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16571           G_PRIMARY_UOM_FLAG_TBL_A(M)      := l_h_PRIMARY_UOM_FLAG_tbl(I);
16572           M:= M+1;
16573         END IF;
16574 
16575         --INSERT QUALIFIER ATTRIBUTES
16576         IF (l_h_qual_ATTR_CONTEXT_tbl(I) IS NOT NULL) AND (G_QUALIFY_SECONDARY = G_YES) THEN
16577           G_LINE_INDEX_TBL_A(M)            := l_h_LINE_INDEX_tbl(I);
16578           G_LINE_DETAIL_INDEX_TBL_A(M)     := L_LINE_DETAIL_INDEX;
16579           G_ATTRIBUTE_LEVEL_tbl(M)         := NVL(l_h_prod_ATTR_LEVEL_tbl(I),'X');
16580           G_ATTRIBUTE_TYPE_tbl(M)          := G_QUALIFIER_TYPE;
16581           G_CONTEXT_tbl(M)                 := l_h_qual_ATTR_CONTEXT_tbl(I);
16582           G_ATTRIBUTE_tbl(M)               := l_h_qual_ATTR_tbl(I);
16583           G_VALUE_FROM_tbl(M)              := l_h_qual_ATTR_VALUE_FROM_tbl(I);
16584           G_COMPARISON_OPERATOR_TYPE_tbl(M):= l_h_qual_operator_type_tbl(I);
16585           G_APPLIED_FLAG_tbl(M)            := l_h_APPLIED_FLAG_tbl(I);
16586           G_PRICING_STATUS_CODE_TBL_Q(M)   := G_STATUS_NEW;
16587           G_LIST_HEADER_ID_tbl_A(M)          := l_h_LIST_HEADER_ID_tbl(I);
16588           G_LIST_LINE_ID_tbl_A(M)            := l_h_LIST_LINE_ID_tbl(I);
16589           G_SETUP_VALUE_FROM_tbl(M)        := l_h_SETUP_VALUE_FROM_tbl(I);
16590           G_SETUP_VALUE_TO_tbl(M)          := l_h_SETUP_VALUE_TO_tbl(I);
16591           G_GROUPING_NUMBER_tbl(M)         := l_h_qual_GROUPING_NO_tbl(I);
16592           G_PRICING_STATUS_TEXT_tbl(M)     := 'INSERTED IN L_SEC_LIST_CUR_CURRENCY';
16593           G_QUALIFIER_PRECEDENCE_tbl(M)    := l_h_qual_PRECEDENCE_tbl(I);
16594           G_DATATYPE_tbl(M)                := l_h_qual_DATATYPE_tbl(I);
16595           G_EXCLUDER_FLAG_TBL(M)           := l_h_EXCLUDER_FLAG_tbl(I);
16596           G_PRODUCT_UOM_CODE_TBL(M)        := l_h_prod_UOM_CODE_tbl(I);
16597           G_QUALIFIER_TYPE_TBL(M)          := l_h_qual_TYPE_tbl(I);
16598           G_VALIDATED_FLAG_tbl(M)          := G_NO;
16599           G_PRICING_ATTR_FLAG_tbl(M)       := G_NO;
16600           G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
16601           G_VALUE_TO_tbl(M)                := NULL;
16602           G_PRICING_PHASE_ID_TBL_A(M)      := l_h_pric_PHASE_ID_tbl(I);
16603           G_INCOMP_GRP_CODE_TBL_A(M)       := l_h_INCOMPAT_GRP_CODE_tbl(I);
16604           G_LINE_DETAIL_TYPE_CODE_TBL_A(M) := 'NULL';
16605           G_MODIFIER_LEVEL_CODE_TBL_A(M)   := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16606           G_PRIMARY_UOM_FLAG_TBL_A(M)      := l_h_PRIMARY_UOM_FLAG_tbl(I);
16607           M:= M+1;
16608         END IF;
16609 
16610         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16611           engine_debug('AFTER END IF SECONDARY PRICE_LIST');
16612         END IF;
16613         l_loop_count := l_loop_count +1;
16614       END LOOP; -- K
16615 
16616     else -- vivek, multi currency not installed, not used
16617 
16618       -- julin [3805113]: bulk fetch
16619       FETCH l_sec_list_cur BULK COLLECT INTO
16620          l_h_line_index_tbl,
16621          l_h_list_line_id_tbl,
16622          l_h_arithmetic_operator_tbl,
16623          l_h_operand_tbl,
16624          l_h_pric_group_sequence_tbl,
16625          l_h_list_line_type_code_tbl,
16626          l_h_pric_phase_id_tbl,
16627          l_h_automatic_flag_tbl,
16628          l_h_incompat_grp_code_tbl,
16629          l_h_price_by_formula_id_tbl,
16630          l_h_prod_precedence_tbl,
16631          l_h_primary_uom_flag_tbl,
16632          l_h_modifier_level_code_tbl,
16633          l_h_list_line_no_tbl,
16634          l_h_prod_uom_code_tbl,
16635          l_h_excluder_flag_tbl,
16636          l_h_list_type_code_tbl,
16637          l_h_rounding_factor_tbl,
16638          l_h_line_detail_index_tbl,
16639          l_h_list_header_id_tbl,
16640          l_h_prod_attr_context_tbl,
16641          l_h_prod_attr_tbl,
16642          l_h_prod_attr_val_from_tbl,
16643          l_h_prod_attr_level_tbl,
16644          l_h_prod_attr_type_tbl,
16645          l_h_applied_flag_tbl,
16646          l_h_prod_operator_type_tbl,
16647          l_h_pric_attr_context_tbl,
16648          l_h_pric_attr_tbl,
16649          l_h_pric_attr_value_from_tbl,
16650          l_h_pric_setup_value_from_tbl,
16651          l_h_pric_setup_value_to_tbl,
16652          l_h_pric_attr_level_tbl,
16653          l_h_pric_attr_type_tbl,
16654          l_h_pric_operator_type_tbl,
16655          l_h_pric_attr_datatype_tbl,
16656          l_h_qual_attr_context_tbl,
16657          l_h_qual_attr_tbl,
16658          l_h_qual_attr_value_from_tbl,
16659          l_h_qual_pric_attr_flag_tbl,
16660          l_h_qual_grouping_no_tbl,
16661          l_h_qual_datatype_tbl,
16662          l_h_setup_value_from_tbl,
16663          l_h_setup_value_to_tbl,
16664          l_h_qual_operator_type_tbl,
16665          l_h_qual_precedence_tbl,
16666          l_h_break_uom_code_tbl,
16667          l_h_break_uom_context_tbl,
16668          l_h_break_uom_attr_tbl,
16669          l_h_qual_type_tbl,
16670          l_h_derived_qualifier_flag_tbl    -- Added for TCA
16671          LIMIT G_BATCH_SIZE_1;
16672       EXIT WHEN l_h_line_index_tbl.COUNT = 0;
16673 
16674       FOR I in l_h_line_index_tbl.first .. l_h_line_index_tbl.last
16675       LOOP
16676         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16677           engine_debug('item found in secondary list');
16678         END IF;
16679 
16680         IF (ls_line_index <> l_h_line_index_tbl(I) OR ls_list_line_id <> l_h_list_line_id_tbl(I)) THEN
16681           l_line_detail_index := GET_LINE_DETAIL_INDEX;
16682           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16683             engine_debug('Inserting Secondary Price List Detail');
16684           END IF;
16685           G_LINE_DETAIL_INDEX_TBL(D)           := l_line_detail_index;
16686           G_LINE_DETAIL_TYPE_CODE_TBL(D)       := 'NULL';
16687           G_LINE_INDEX_TBL(D)                  := l_h_LINE_INDEX_tbl(I);
16688           G_LIST_HEADER_ID_TBL(D)              := l_h_LIST_HEADER_ID_tbl(I);
16689           G_LIST_LINE_ID_TBL(D)                := l_h_LIST_LINE_ID_tbl(I);
16690           G_LIST_LINE_TYPE_TBL(D)              := l_h_LIST_LINE_TYPE_CODE_tbl(I);
16691           G_CREATED_FROM_SQL_TBL(D)            := 'LHS_SECONDARY_PRICE_LIST'  ; -- nth sec price list
16692           G_PRICING_GROUP_SEQUENCE_TBL(D)      := l_h_pric_GROUP_SEQUENCE_tbl(I);
16693           G_OPERAND_CALCULATION_CODE_TBL(D)    := l_h_ARITHMETIC_OPERATOR_tbl(I);
16694           G_OPERAND_VALUE_TBL(D)               := l_h_OPERAND_tbl(I);
16695           G_PRICING_PHASE_ID_TBL(D)            := l_h_pric_PHASE_ID_tbl(I);
16696           G_LIST_TYPE_CODE_TBL(D)              := l_h_LIST_TYPE_CODE_tbl(I);
16697           G_PRICING_STATUS_CODE_TBL(D)         := G_STATUS_NEW;
16698           G_PROCESSED_FLAG_TBL(D)              := G_NOT_PROCESSED;
16699           G_AUTOMATIC_FLAG_TBL(D)              := l_h_AUTOMATIC_FLAG_tbl(I);
16700           G_MODIFIER_LEVEL_CODE_TBL(D)         := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16701           G_LIST_LINE_NO_TBL(D)                := l_h_LIST_LINE_NO_tbl(I);
16702           G_INCOMP_GRP_CODE_TBL(D)             := l_h_INCOMPAT_GRP_CODE_tbl(I);
16703           G_PRICE_FORMULA_ID_TBL(D)            := l_h_PRICE_BY_FORMULA_ID_tbl(I);
16704           G_PRODUCT_PRECEDENCE_TBL(D)          := l_h_prod_PRECEDENCE_tbl(I);
16705           G_PRIMARY_UOM_FLAG_TBL(D)            := l_h_PRIMARY_UOM_FLAG_tbl(I);
16706           G_ROUNDING_FACTOR_TBL(D)             := l_h_ROUNDING_FACTOR_tbl(I);
16707           G_SECONDARY_PRICELIST_IND_TBL(D)     := G_YES;
16708           G_CURRENCY_DETAIL_ID_TBL(D)          := null;
16709           G_CURRENCY_HEADER_ID_TBL(D)          := null;
16710           G_SELLING_ROUNDING_TBL(D)            := null;
16711           G_ORDER_CURRENCY_TBL(D)              := null;
16712           G_PRICING_EFFECTIVE_DATE_TBL(D)      := null;
16713           G_BASE_CURRENCY_CODE_TBL(D)          := null;
16714           G_BREAK_UOM_TBL(D)                   := l_h_BREAK_UOM_CODE_tbl(I); /* Proration */
16715           G_BREAK_CONTEXT_TBL(D)               := l_h_BREAK_UOM_CONTEXT_tbl(I); /* Proration */
16716           G_BREAK_ATTRIBUTE_TBL(D)             := l_h_BREAK_UOM_ATTR_tbl(I); /* Proration */
16717           D := D + 1;
16718 
16719           ls_line_index := l_h_line_index_tbl(I);
16720           ls_list_line_id := l_h_list_line_id_tbl(I);
16721         END IF;
16722 
16723 
16724         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16725           engine_debug('----BEFORE INSERTING SECONDARY PRODUCT ATTRS -------');
16726           engine_debug('Qualifier Precedence : ' || l_h_qual_precedence_tbl(I));
16727         END IF;
16728 
16729         --INSERT PRODUCT ATTRIBUTES
16730         G_LINE_INDEX_TBL_A(M)              := l_h_LINE_INDEX_tbl(I);
16731         G_LINE_DETAIL_INDEX_TBL_A(M)       := L_LINE_DETAIL_INDEX;
16732         G_ATTRIBUTE_LEVEL_tbl(M)           := l_h_prod_ATTR_LEVEL_tbl(I);
16733         G_ATTRIBUTE_TYPE_tbl(M)            := l_h_prod_ATTR_TYPE_tbl(I);
16734         G_LIST_HEADER_ID_TBL_A(M)            := l_h_LIST_HEADER_ID_tbl(I);
16735         G_LIST_LINE_ID_TBL_A(M)              := l_h_LIST_LINE_ID_tbl(I);
16736         G_CONTEXT_tbl(M)                   := l_h_prod_ATTR_CONTEXT_tbl(I);
16737         G_ATTRIBUTE_tbl(M)                 := l_h_prod_ATTR_tbl(I);
16738         G_VALUE_FROM_tbl(M)                := l_h_prod_attr_val_from_tbl(I);
16739         G_SETUP_VALUE_FROM_tbl(M)          := NULL;
16740         G_SETUP_VALUE_TO_tbl(M)            := NULL;
16741         G_GROUPING_NUMBER_tbl(M)           := NULL;
16742         G_COMPARISON_OPERATOR_TYPE_tbl(M)  := l_h_prod_OPERATOR_TYPE_tbl(I);
16743         G_VALIDATED_FLAG_tbl(M)            := NULL;
16744         G_APPLIED_FLAG_tbl(M)              := l_h_APPLIED_FLAG_tbl(I);
16745         G_PRICING_STATUS_CODE_TBL_Q(M)     := G_STATUS_NEW;
16746         G_PRICING_STATUS_TEXT_tbl(M)       := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16747         G_QUALIFIER_PRECEDENCE_TBL(M)      := l_h_qual_PRECEDENCE_tbl(I);
16748         G_DATATYPE_tbl(M)                  := NULL;
16749         G_PRICING_ATTR_FLAG_tbl(M)         := NULL;
16750         G_QUALIFIER_TYPE_TBL(M)            := NULL;
16751         G_PRODUCT_UOM_CODE_TBL(M)          := l_h_prod_UOM_CODE_tbl(I);
16752         G_EXCLUDER_FLAG_TBL(M)             := l_h_EXCLUDER_FLAG_tbl(I);
16753         G_PRICING_PHASE_ID_TBL_A(M)        := l_h_pric_PHASE_ID_tbl(I);
16754         G_INCOMP_GRP_CODE_TBL_A(M)         := l_h_INCOMPAT_GRP_CODE_tbl(I);
16755         G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
16756         G_MODIFIER_LEVEL_CODE_TBL_A(M)     := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16757         G_PRIMARY_UOM_FLAG_TBL_A(M)        := l_h_PRIMARY_UOM_FLAG_tbl(I);
16758         M:= M+1;
16759 
16760         --INSERT PRICING ATTRIBUTES
16761         IF (l_h_pric_ATTR_CONTEXT_tbl(I) IS NOT NULL) THEN
16762           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16763             engine_debug('----BEFORE INSERTING SECONDARY PRICING ATTRS -------');
16764           END IF;
16765           G_LINE_INDEX_TBL_A(M)              := l_h_LINE_INDEX_tbl(I);
16766           G_LINE_DETAIL_INDEX_TBL_A(M)       := L_LINE_DETAIL_INDEX;
16767           G_ATTRIBUTE_LEVEL_tbl(M)           := l_h_pric_ATTR_LEVEL_tbl(I);
16768           G_ATTRIBUTE_TYPE_tbl(M)            := l_h_pric_ATTR_TYPE_tbl(I);
16769           G_LIST_HEADER_ID_TBL_A(M)            := l_h_LIST_HEADER_ID_tbl(I);
16770           G_LIST_LINE_ID_TBL_A(M)              := l_h_LIST_LINE_ID_tbl(I);
16771           G_CONTEXT_tbl(M)                   := l_h_pric_ATTR_CONTEXT_tbl(I);
16772           G_ATTRIBUTE_tbl(M)                 := l_h_pric_ATTR_tbl(I);
16773           G_VALUE_FROM_tbl(M)                := l_h_pric_ATTR_VALUE_FROM_tbl(I);
16774           G_SETUP_VALUE_FROM_tbl(M)          := l_h_pric_SETUP_VALUE_FROM_tbl(I);
16775           G_SETUP_VALUE_TO_tbl(M)            := l_h_pric_SETUP_VALUE_TO_tbl(I);
16776           G_COMPARISON_OPERATOR_TYPE_tbl(M)  := l_h_pric_OPERATOR_TYPE_tbl(I);
16777           G_VALIDATED_FLAG_tbl(M)            := NULL;
16778           G_APPLIED_FLAG_tbl(M)              := l_h_APPLIED_FLAG_tbl(I);
16779           G_PRICING_STATUS_CODE_TBL_Q(M)     := G_STATUS_NEW;
16780           G_PRICING_STATUS_TEXT_tbl(M)       := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16781           G_QUALIFIER_PRECEDENCE_tbl(M)      := NULL;
16782           G_DATATYPE_tbl(M)                  := l_h_pric_ATTR_DATATYPE_tbl(I);
16783           G_PRICING_ATTR_FLAG_tbl(M)         := NULL;
16784           G_QUALIFIER_TYPE_TBL(M)            := NULL;
16785           G_PRODUCT_UOM_CODE_TBL(M)          := l_h_prod_UOM_CODE_tbl(I);
16786           G_EXCLUDER_FLAG_TBL(M)             := l_h_EXCLUDER_FLAG_tbl(I);
16787           G_GROUPING_NUMBER_tbl(M)           := NULL;
16788           G_PRICING_PHASE_ID_TBL_A(M)        := l_h_pric_PHASE_ID_tbl(I);
16789           G_INCOMP_GRP_CODE_TBL_A(M)         := l_h_INCOMPAT_GRP_CODE_tbl(I);
16790           G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
16791           G_MODIFIER_LEVEL_CODE_TBL_A(M)     := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16792           G_PRIMARY_UOM_FLAG_TBL_A(M)        := l_h_PRIMARY_UOM_FLAG_tbl(I);
16793           M:= M+1;
16794         END IF;
16795 
16796         --INSERT QUALIFIER ATTRIBUTES
16797         IF (l_h_qual_ATTR_CONTEXT_tbl(I) IS NOT NULL) AND (G_QUALIFY_SECONDARY = G_YES) THEN
16798           G_LINE_INDEX_TBL_A(M)            := l_h_LINE_INDEX_tbl(I);
16799           G_LINE_DETAIL_INDEX_TBL_A(M)     := L_LINE_DETAIL_INDEX;
16800           G_ATTRIBUTE_LEVEL_tbl(M)         := NVL(l_h_prod_ATTR_LEVEL_tbl(I),'X');
16801           G_ATTRIBUTE_TYPE_tbl(M)          := G_QUALIFIER_TYPE;
16802           G_CONTEXT_tbl(M)                 := l_h_qual_ATTR_CONTEXT_tbl(I);
16803           G_ATTRIBUTE_tbl(M)               := l_h_qual_ATTR_tbl(I);
16804           G_VALUE_FROM_tbl(M)              := l_h_qual_ATTR_VALUE_FROM_tbl(I);
16805           G_COMPARISON_OPERATOR_TYPE_tbl(M):= l_h_qual_operator_type_tbl(I);
16806           G_APPLIED_FLAG_tbl(M)            := l_h_APPLIED_FLAG_tbl(I);
16807           G_PRICING_STATUS_CODE_TBL_Q(M)   := G_STATUS_NEW;
16808           G_LIST_HEADER_ID_tbl_A(M)          := l_h_LIST_HEADER_ID_tbl(I);
16809           G_LIST_LINE_ID_tbl_A(M)            := l_h_LIST_LINE_ID_tbl(I);
16810           G_SETUP_VALUE_FROM_tbl(M)        := l_h_SETUP_VALUE_FROM_tbl(I);
16811           G_SETUP_VALUE_TO_tbl(M)          := l_h_SETUP_VALUE_TO_tbl(I);
16812           G_GROUPING_NUMBER_tbl(M)         := l_h_qual_GROUPING_NO_tbl(I);
16813           G_PRICING_STATUS_TEXT_tbl(M)     := 'INSERTED IN L_SEC_LIST_CUR';
16814           G_QUALIFIER_PRECEDENCE_tbl(M)    := l_h_qual_PRECEDENCE_tbl(I);
16815           G_DATATYPE_tbl(M)                := l_h_qual_DATATYPE_tbl(I);
16816           G_EXCLUDER_FLAG_TBL(M)           := l_h_EXCLUDER_FLAG_tbl(I);
16817           G_PRODUCT_UOM_CODE_TBL(M)        := l_h_prod_UOM_CODE_tbl(I);
16818           G_QUALIFIER_TYPE_TBL(M)          := l_h_qual_TYPE_tbl(I);
16819           G_VALIDATED_FLAG_tbl(M)          := G_NO;
16820           G_PRICING_ATTR_FLAG_tbl(M)       := G_NO;
16821           G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
16822           G_VALUE_TO_tbl(M)                := NULL;
16823           G_PRICING_PHASE_ID_TBL_A(M)      := l_h_pric_PHASE_ID_tbl(I);
16824           G_INCOMP_GRP_CODE_TBL_A(M)       := l_h_INCOMPAT_GRP_CODE_tbl(I);
16825           G_LINE_DETAIL_TYPE_CODE_TBL_A(M) := 'NULL';
16826           G_MODIFIER_LEVEL_CODE_TBL_A(M)   := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16827           G_PRIMARY_UOM_FLAG_TBL_A(M)      := l_h_PRIMARY_UOM_FLAG_tbl(I);
16828           M:= M+1;
16829         END IF;
16830 
16831         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16832           engine_debug('AFTER END IF SECONDARY PRICE_LIST');
16833         END IF;
16834         l_loop_count := l_loop_count +1;
16835       END LOOP; -- K
16836 
16837     end if; -- vivek, multi currency installed
16838 
16839     -- julin [3805113]: bulk insert into qp_npreq_ldets_tmp
16840     IF (D>1) THEN
16841     qp_debug_util.tstart('QP_NPREQ_LDETS_TMP','Inserting into ldets QP_NPREQ_LDETS_TMP');
16842       FORALL i in G_line_index_tbl.FIRST..G_line_index_tbl.LAST
16843         INSERT INTO qp_npreq_ldets_tmp
16844                 (LINE_DETAIL_INDEX,
16845                  LINE_DETAIL_TYPE_CODE,
16846                  LINE_INDEX,
16847                  CREATED_FROM_LIST_HEADER_ID,
16848                  CREATED_FROM_LIST_LINE_ID,
16849                  CREATED_FROM_LIST_LINE_TYPE,
16850                  CREATED_FROM_SQL,
16851                  PRICING_GROUP_SEQUENCE,
16852                  OPERAND_CALCULATION_CODE,
16853                  OPERAND_VALUE,
16854                  PRICING_PHASE_ID,
16855                  CREATED_FROM_LIST_TYPE_CODE,
16856                  PRICING_STATUS_CODE,
16857                  PROCESSED_FLAG,
16858                  AUTOMATIC_FLAG,
16859                  MODIFIER_LEVEL_CODE,
16860                  LIST_LINE_NO,
16861                  INCOMPATABILITY_GRP_CODE,
16862                  PRICE_FORMULA_ID,
16863                  PRODUCT_PRECEDENCE,
16864                  PRIMARY_UOM_FLAG,
16865                  ROUNDING_FACTOR,
16866                  SECONDARY_PRICELIST_IND,
16867                  CURRENCY_DETAIL_ID,
16868                  CURRENCY_HEADER_ID,
16869                  SELLING_ROUNDING_FACTOR,
16870                  ORDER_CURRENCY,
16871                  PRICING_EFFECTIVE_DATE,
16872                  BASE_CURRENCY_CODE,
16873                  BREAK_UOM_CODE,
16874                  BREAK_UOM_CONTEXT,
16875                  BREAK_UOM_ATTRIBUTE
16876                  )
16877         VALUES (   G_line_detail_index_tbl(i),
16878                  G_LINE_DETAIL_TYPE_CODE_TBL(I),
16879                  G_LINE_INDEX_tbl(i),
16880                  G_LIST_HEADER_ID_tbl(i),
16881                  G_LIST_LINE_ID_tbl(i),
16882                  G_LIST_LINE_TYPE_tbl(i),
16883                  G_CREATED_FROM_SQL_TBL(I), -- nth sec price list
16884                  G_PRICING_GROUP_SEQUENCE_tbl(i),
16885                  G_OPERAND_CALCULATION_CODE_tbl(i),
16886                  G_OPERAND_VALUE_tbl(i),
16887                  G_PRICING_PHASE_ID_tbl(i),
16888                  G_LIST_TYPE_CODE_tbl(i),
16889                  G_PRICING_STATUS_CODE_TBL(I),
16890                  G_NOT_PROCESSED,
16891                  G_AUTOMATIC_FLAG_tbl(i),
16892                  G_MODIFIER_LEVEL_CODE_tbl(i),
16893                  G_LIST_LINE_NO_tbl(i),
16894                  G_INCOMP_GRP_CODE_tbl(i),
16895                  G_PRICE_FORMULA_ID_tbl(i),
16896                  G_PRODUCT_PRECEDENCE_tbl(i),
16897                  G_PRIMARY_UOM_FLAG_tbl(i),
16898                  G_ROUNDING_FACTOR_tbl(i),
16899                  G_SECONDARY_PRICELIST_IND_TBL(I),
16900                  G_CURRENCY_DETAIL_ID_tbl(i),
16901                  G_CURRENCY_HEADER_ID_tbl(i),
16902                  G_SELLING_ROUNDING_tbl(i),
16903                  G_ORDER_CURRENCY_tbl(i),
16904                  G_PRICING_EFFECTIVE_DATE_tbl(i),
16905                  G_BASE_CURRENCY_CODE_tbl(i),
16906                  G_BREAK_UOM_tbl(i), /* Proration */
16907                  G_BREAK_CONTEXT_tbl(i), /* Proration */
16908                  G_BREAK_ATTRIBUTE_tbl(i) /* Proration */
16909         );
16910 qp_debug_util.tstop('QP_NPREQ_LDETS_TMP');
16911     END IF;
16912 
16913     IF (M>1) THEN
16914     qp_debug_util.tstart('INSERT_PRICE_LIST_ATTRS','Inserting into lin attrs INSERT_PRICE_LIST_ATTRS');
16915       INSERT_PRICE_LIST_ATTRS
16916    (    p_LINE_INDEX_tbl                =>G_LINE_INDEX_TBL_A,
16917         p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_TBL_A,
16918         p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
16919         p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
16920         p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl_A,
16921         p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl_A,
16922         p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
16923         p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
16924         p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
16925         p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
16926         p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
16927         p_GROUPING_NUMBER_tbl           =>G_GROUPING_NUMBER_tbl,
16928         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
16929         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
16930         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
16931         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_TBL_Q,
16932         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
16933         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
16934         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
16935         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
16936         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
16937         p_PRODUCT_UOM_CODE_TBL          =>G_PRODUCT_UOM_CODE_TBL,
16938         p_EXCLUDER_FLAG_TBL             =>G_EXCLUDER_FLAG_TBL,
16939         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
16940         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
16941         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
16942         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
16943         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
16944         x_status_code                   =>l_status_code,
16945         x_status_text                   =>l_status_text);
16946 qp_debug_util.tstop('INSERT_PRICE_LIST_ATTRS');
16947     END IF;
16948 
16949   END LOOP;
16950    qp_debug_util.tstop('L_SEC_LIST_CUR/CURRENCY_FETCH');
16951   IF l_use_multi_currency = 'Y' THEN
16952   qp_debug_util.tstop('L_SEC_LIST_CUR_CURRENCY');
16953     CLOSE l_sec_list_cur_currency;
16954   ELSE
16955 qp_debug_util.tstop('L_USE_MULTI_CURRENCY');
16956     CLOSE l_sec_list_cur;
16957   END IF;
16958 
16959 IF (l_loop_count <> 0) THEN
16960 
16961       --Evaluating between operator for both qualifiers and pricing attributes
16962       Evaluate_Between(G_PRICE_LIST_PHASE_ID,NULL,NULL,l_status_code,l_status_text);
16963 
16964       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16965        RAISE E_ROUTINE_ERRORS;
16966       END IF;
16967 
16968       -- Check for multiple item categories and customer classes
16969       Eliminate_Multiple_Hierarchies(G_PRICE_LIST_PHASE_ID,l_status_code,l_status_text);
16970 
16971       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16972        RAISE E_ROUTINE_ERRORS;
16973       END IF;
16974 
16975       --Handle_Excluder(G_PRICE_LIST_PHASE_ID,NULL,l_status_code,l_status_text);
16976 
16977       Perform_Grouping(G_PRICE_LIST_PHASE_ID, NULL, l_status_code, l_status_text);
16978 
16979       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16980        RAISE E_ROUTINE_ERRORS;
16981       END IF;
16982 
16983      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16984      engine_debug('Secondary Price List Grouping Return Status : ' || l_status_code);
16985 
16986 
16987      END IF;
16988      QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
16989 				(p_line_index        => NULL,
16990  				 p_order_uom_code    => NULL,
16991 				 p_order_qty         => NULL,
16992 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID, -- pricing_phase_id,
16993                                  p_call_big_search   => FALSE,
16994 				 x_list_line_id	     => l_list_line_id,
16995 				 x_return_status     => l_status_code,
16996 				 x_return_status_txt => l_status_text);
16997 
16998       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16999        RAISE E_ROUTINE_ERRORS;
17000       END IF;
17001 
17002      -- 3773652
17003      -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
17004      begin
17005        select 'x' into l_dummy
17006        from qp_npreq_lines_tmp
17007        where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
17008        and (PRICE_FLAG = G_YES
17009             or
17010        PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
17011        and rownum = 1;
17012 
17013        Evaluate_Between(G_PRICE_LIST_PHASE_ID,NULL,NULL,l_status_code,l_status_text);
17014      exception
17015        when no_data_found then
17016          null;
17017      end;
17018 
17019      -- Update the request line status for lines which got valid price list
17020      Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,l_status_code,l_status_text);  --[julin/4708044]
17021 
17022      IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
17023       RAISE E_ROUTINE_ERRORS;
17024      END IF;
17025 
17026      --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
17027      --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
17028      --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
17029      --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
17030      --By doing this we will get the right price in the PRICE event on change of UOM on the order line
17031      --for price based on price break
17032      Get_Eligible_Price_Break(G_PRICE_LIST_PHASE_ID,NULL,l_status_code,l_status_text);
17033 
17034      IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
17035       RAISE E_ROUTINE_ERRORS;
17036      END IF;
17037 
17038 
17039       --delete children lines of PBH if the parent PBH line get eliminated in
17040       --QP_Resolve_Incompatability_PVT
17041 
17042       /* OPEN l_chk_deleted_pbh_cur(l_line_index,G_PRICE_LIST_PHASE_ID);
17043       FETCH l_chk_deleted_pbh_cur INTO l_dummy;
17044       IF l_chk_deleted_pbh_cur%FOUND THEN
17045        Delete_Invalid_PBH_Children(l_line_index,G_PRICE_LIST_PHASE_ID);
17046       END IF;
17047       CLOSE l_chk_deleted_pbh_cur; */
17048 ELSE
17049    -- Update the request line status for lines which got valid price list
17050    Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,l_status_code,l_status_text);  --[juiln/4708044]
17051    IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
17052     RAISE E_ROUTINE_ERRORS;
17053    END IF;
17054 END IF; --l_loop_count <> 0
17055 
17056 qp_debug_util.tstop('PERFORM_SECONDARY_SEARCH');
17057 
17058 EXCEPTION
17059  WHEN E_ROUTINE_ERRORS THEN
17060    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
17061      engine_debug(l_routine||': '||l_status_text);
17062      END IF;
17063      x_status_code := FND_API.G_RET_STS_ERROR;
17064      x_status_text := l_routine||': '||l_status_text;
17065  WHEN OTHERS THEN
17066      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
17067      engine_debug(SQLERRM);
17068      END IF;
17069      x_status_code := FND_API.G_RET_STS_ERROR;
17070      x_status_text := l_routine||' '||SQLERRM;
17071 
17072 END Perform_Secondary_Search;
17073 
17074 /*+-----------------------------------------------------------
17075   | PROCEDURE LIST_HEADER_SEARCH
17076   | SEARCH lines for the phase that has search_flag='N'
17077   | The list headers were passed in as qualifiers. Only for the lines that have
17078   | MODLIST and list_lines as their context only will be included
17079   | These lines were not selected by the big union
17080   | select statement at all. Instead, they were populated by populate_temp_table
17081   | This routine has not hadled the case where a price break
17082   | list is passed in as qualifier...
17083   +-------------------------------------------------------------
17084 */
17085 
17086 PROCEDURE LIST_HEADER_SEARCH (
17087 		       p_pricing_phase_id     IN NUMBER,
17088                        p_is_price_list        IN BOOLEAN,
17089                        p_freeze_override_flag IN VARCHAR2,
17090                        p_control_rec          IN CONTROL_RECORD_TYPE,
17091                        p_list_mode            IN VARCHAR2,   --Modifier or Price list Mode
17092                        x_further_search       OUT NOCOPY VARCHAR2,
17093                        x_status_code          OUT NOCOPY VARCHAR2,
17094                        x_status_text          OUT NOCOPY VARCHAR2)
17095 AS
17096 /*
17097 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
17098 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_lines_tmp_N3,QUALIFIERS_EXIST_FLAG,2
17099 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_lines_tmp_N3,PRICING_ATTRS_EXIST_FLAG,3
17100 
17101 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
17102 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
17103 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
17104 
17105 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
17106 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
17107 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
17108 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
17109 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
17110 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
17111 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
17112 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
17113 
17114 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
17115 
17116 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
17117 
17118 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
17119 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
17120 */
17121 CURSOR L_LIST_CUR  IS
17122 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) dynamic_sampling(1) l_list_cur */
17123                    QPLAT_PROD.LINE_INDEX,
17124                    QPL.LIST_LINE_ID,
17125                    QPL.ARITHMETIC_OPERATOR,
17126                    QPL.OPERAND,
17127                    QPL.PRICING_GROUP_SEQUENCE,
17128                    QPL.LIST_LINE_TYPE_CODE,
17129                    QPL.PRICING_PHASE_ID,
17130                    QPL.AUTOMATIC_FLAG,
17131                    QPL.INCOMPATIBILITY_GRP_CODE,
17132                    QPL.PRICE_BY_FORMULA_ID,
17133                    QPL.PRODUCT_PRECEDENCE,
17134                    QPL.PRIMARY_UOM_FLAG,
17135                    QPL.MODIFIER_LEVEL_CODE,
17136                    QPL.LIST_LINE_NO,
17137                    QPA.PRODUCT_UOM_CODE,
17138                    QPA.EXCLUDER_FLAG,
17139                    QPH.LIST_TYPE_CODE,
17140                    QPH.ROUNDING_FACTOR,
17141                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17142                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17143                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17144                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17145                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17146                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17147                    QPLAT_PROD.APPLIED_FLAG,
17148                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17149                    NULL                      PRICING_ATTRIBUTE,
17150                    NULL                      PRICING_ATTR_VALUE_FROM,
17151                    NULL                      PRICING_SETUP_VALUE_FROM,
17152                    NULL                      PRICING_SETUP_VALUE_TO,
17153                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17154                    NULL                      PRICING_ATTRIBUTE_TYPE,
17155                    NULL                      PRICING_OPERATOR_TYPE,
17156                    NULL                      PRICING_ATTRIBUTE_DATATYPE
17157                   ,QPL.BREAK_UOM_CODE /* Proration */
17158                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17159                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17160                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17161    FROM
17162          qp_npreq_lines_tmp QPLINES,
17163          qp_npreq_line_attrs_tmp qplat_prod,
17164          QP_PRICING_ATTRIBUTES QPA,
17165          QP_LIST_LINES QPL,
17166          QP_LIST_HEADERS_B QPH,
17167          --QP_PRICE_REQ_SOURCES qprs
17168          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
17169    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17170    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
17171    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17172    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17173    AND   (QPLINES.PRICE_FLAG = G_YES
17174           OR
17175          (QPLINES.PRICE_FLAG = G_PHASE
17176           AND
17177           P_FREEZE_OVERRIDE_FLAG = G_YES))
17178    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17179    AND   QPLINES.VALIDATED_FLAG = G_YES
17180    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
17181    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17182    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17183    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17184    AND   QPA.EXCLUDER_FLAG = G_NO
17185    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17186    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17187 --added for moac -- commented references to security profile
17188 --security will be built into qp_list_headers_b
17189 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR --begin security
17190 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17191 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17192    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17193    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17194    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
17195    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17196            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17197            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17198    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17199            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17200                TRUNC(SYSDATE) )) AND
17201            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17202                TRUNC(SYSDATE) ))
17203    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17204            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17205                TRUNC(SYSDATE) )) AND
17206            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17207                TRUNC(SYSDATE) ))
17208    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17209                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17210    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17211                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17212    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17213            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17214            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17215    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17216    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17217    --       OR
17218    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17219    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17220    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17221    AND   QPH.ACTIVE_FLAG = G_YES
17222    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17223    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17224    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17225    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17226 UNION ALL
17227 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5)  index(qplat_pric qp_preq_line_attrs_tmp_N2) dynamic_sampling(1) l_list_cur */
17228                    QPLAT_PROD.LINE_INDEX,
17229                    QPL.LIST_LINE_ID,
17230                    QPL.ARITHMETIC_OPERATOR,
17231                    QPL.OPERAND,
17232                    QPL.PRICING_GROUP_SEQUENCE,
17233                    QPL.LIST_LINE_TYPE_CODE,
17234                    QPL.PRICING_PHASE_ID,
17235                    QPL.AUTOMATIC_FLAG,
17236                    QPL.INCOMPATIBILITY_GRP_CODE,
17237                    QPL.PRICE_BY_FORMULA_ID,
17238                    QPL.PRODUCT_PRECEDENCE,
17239                    QPL.PRIMARY_UOM_FLAG,
17240                    QPL.MODIFIER_LEVEL_CODE,
17241                    QPL.LIST_LINE_NO,
17242                    QPA.PRODUCT_UOM_CODE,
17243                    QPA.EXCLUDER_FLAG,
17244                    QPH.LIST_TYPE_CODE,
17245                    QPH.ROUNDING_FACTOR,
17246                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
17247                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17248                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17249                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17250                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17251                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17252                    QPLAT_PROD.APPLIED_FLAG,
17253                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
17254                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
17255                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
17256                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
17257                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
17258                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
17259                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
17260                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
17261                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE
17262                   ,QPL.BREAK_UOM_CODE /* Proration */
17263                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17264                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17265                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17266    FROM
17267          qp_npreq_lines_tmp qplines,
17268          qp_npreq_line_attrs_tmp qplat_prod,
17269          QP_PRICING_ATTRIBUTES qpa,
17270          qp_npreq_line_attrs_tmp qplat_pric,
17271          QP_LIST_LINES qpl,
17272          QP_LIST_HEADERS_B qph,
17273          --QP_PRICE_REQ_SOURCES qprs
17274          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
17275    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17276    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17277    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17278    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17279    AND   (QPLINES.PRICE_FLAG = G_YES
17280           OR
17281          (QPLINES.PRICE_FLAG = G_PHASE
17282           AND
17283           P_FREEZE_OVERRIDE_FLAG = G_YES))
17284    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17285    AND   QPLINES.VALIDATED_FLAG = G_YES
17286    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
17287    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
17288    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17289    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17290    AND   QPA.EXCLUDER_FLAG = G_NO
17291    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17292    AND   QPA.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
17293    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
17294    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
17295    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
17296           OR
17297           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
17298    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
17299    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17300    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
17301    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17302 --added for moac -- commented references to security profile
17303 --security will be built into qp_list_headers_b
17304 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17305 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17306 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17307    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17308    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17309    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17310    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17311            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17312            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17313    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17314            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17315                TRUNC(SYSDATE) )) AND
17316            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17317                TRUNC(SYSDATE) ))
17318    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17319            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17320                TRUNC(SYSDATE) )) AND
17321            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17322                TRUNC(SYSDATE) ))
17323    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17324                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17325    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17326                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17327    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17328            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17329            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17330    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17331    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17332    --       OR
17333    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17334    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17335    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17336    AND   QPH.ACTIVE_FLAG = G_YES
17337    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17338    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17339    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17340    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17341    ORDER BY 1,2; --ORDER BY LINE_INDEX AND LIST LINE ID
17342 
17343 -- vivek
17344 CURSOR L_LIST_CUR_CURRENCY  IS
17345 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5)
17346 	index(qplat_prod qp_preq_line_attrs_tmp_n1) index(QPLINES QP_PREQ_LINES_TMP_N2) l_list_cur */ -- 9362867
17347                    QPLAT_PROD.LINE_INDEX,
17348                    QPL.LIST_LINE_ID,
17349                    QPL.ARITHMETIC_OPERATOR,
17350                    QPL.OPERAND,
17351                    QPL.PRICING_GROUP_SEQUENCE,
17352                    QPL.LIST_LINE_TYPE_CODE,
17353                    QPL.PRICING_PHASE_ID,
17354                    QPL.AUTOMATIC_FLAG,
17355                    QPL.INCOMPATIBILITY_GRP_CODE,
17356                    QPL.PRICE_BY_FORMULA_ID,
17357                    QPL.PRODUCT_PRECEDENCE,
17358                    QPL.PRIMARY_UOM_FLAG,
17359                    QPL.MODIFIER_LEVEL_CODE,
17360                    QPL.LIST_LINE_NO,
17361                    QPA.PRODUCT_UOM_CODE,
17362                    QPA.EXCLUDER_FLAG,
17363                    QPH.LIST_TYPE_CODE,
17364    /* vivek        QPH.ROUNDING_FACTOR,  */
17365                    QCDT.ROUNDING_FACTOR, /* vivek */
17366                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17367                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17368                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17369                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17370                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17371                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17372                    QPLAT_PROD.APPLIED_FLAG,
17373                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17374                    NULL                      PRICING_ATTRIBUTE,
17375                    NULL                      PRICING_ATTR_VALUE_FROM,
17376                    NULL                      PRICING_SETUP_VALUE_FROM,
17377                    NULL                      PRICING_SETUP_VALUE_TO,
17378                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17379                    NULL                      PRICING_ATTRIBUTE_TYPE,
17380                    NULL                      PRICING_OPERATOR_TYPE,
17381                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
17382                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
17383                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
17384                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
17385                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
17386                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
17387                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
17388                   ,QPL.BREAK_UOM_CODE /* Proration */
17389                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17390                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17391                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17392    FROM
17393          qp_npreq_lines_tmp QPLINES,
17394          qp_npreq_line_attrs_tmp qplat_prod,
17395          QP_PRICING_ATTRIBUTES QPA,
17396          QP_LIST_LINES QPL,
17397          QP_LIST_HEADERS_B QPH,
17398          --QP_PRICE_REQ_SOURCES qprs,
17399          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
17400          QP_CURRENCY_DETAILS QCDT   /* Vivek */
17401    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17402    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
17403    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17404    AND   (QPLINES.PRICE_FLAG = G_YES
17405           OR
17406          (QPLINES.PRICE_FLAG = G_PHASE
17407           AND
17408           P_FREEZE_OVERRIDE_FLAG = G_YES))
17409    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17410    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17411    AND   QPLINES.VALIDATED_FLAG = G_YES
17412    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
17413    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17414    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17415    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17416    AND   QPA.EXCLUDER_FLAG = G_NO
17417    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17418    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17419 --added for moac -- commented references to security profile
17420 --security will be built into qp_list_headers_b
17421 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17422 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17423 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17424    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17425    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17426    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
17427    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17428            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17429            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17430    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17431            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17432                TRUNC(SYSDATE) )) AND
17433            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17434                TRUNC(SYSDATE) ))
17435    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17436            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17437                TRUNC(SYSDATE) )) AND
17438            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17439                TRUNC(SYSDATE) ))
17440    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17441                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17442    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17443                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17444    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17445            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17446            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17447 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
17448             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
17449             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
17450             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17451                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17452                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17453    AND (   /* Vivek */
17454         (qcdt.curr_attribute_context is null   /* Vivek */
17455          and not exists   /* Vivek */
17456              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
17457 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
17458                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
17459 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
17460                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
17461                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
17462                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
17463                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
17464                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
17465                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17466                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
17467                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17468                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17469                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17470              )   /* Vivek */
17471         )   /* Vivek */
17472         OR   /* Vivek */
17473         (qcdt.curr_attribute_context is not null   /* Vivek */
17474          and qcdt.precedence =
17475              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
17476 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
17477                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
17478 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
17479                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
17480                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
17481                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
17482                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
17483                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
17484                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17485                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
17486                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17487                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17488                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17489              )   /* Vivek */
17490         )   /* Vivek */
17491        )   /* Vivek */
17492    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17493    --       OR
17494    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17495    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17496    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17497    AND   QPH.ACTIVE_FLAG = G_YES
17498    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17499    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17500    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17501    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17502 UNION ALL
17503 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5)  index(qplat_pric qp_preq_line_attrs_tmp_N2) l_list_cur */
17504                    QPLAT_PROD.LINE_INDEX,
17505                    QPL.LIST_LINE_ID,
17506                    QPL.ARITHMETIC_OPERATOR,
17507                    QPL.OPERAND,
17508                    QPL.PRICING_GROUP_SEQUENCE,
17509                    QPL.LIST_LINE_TYPE_CODE,
17510                    QPL.PRICING_PHASE_ID,
17511                    QPL.AUTOMATIC_FLAG,
17512                    QPL.INCOMPATIBILITY_GRP_CODE,
17513                    QPL.PRICE_BY_FORMULA_ID,
17514                    QPL.PRODUCT_PRECEDENCE,
17515                    QPL.PRIMARY_UOM_FLAG,
17516                    QPL.MODIFIER_LEVEL_CODE,
17517                    QPL.LIST_LINE_NO,
17518                    QPA.PRODUCT_UOM_CODE,
17519                    QPA.EXCLUDER_FLAG,
17520                    QPH.LIST_TYPE_CODE,
17521    /* vivek        QPH.ROUNDING_FACTOR,  */
17522                    QCDT.ROUNDING_FACTOR, /* vivek */
17523                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
17524                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17525                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17526                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17527                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17528                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17529                    QPLAT_PROD.APPLIED_FLAG,
17530                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
17531                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
17532                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
17533                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
17534                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
17535                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
17536                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
17537                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
17538                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
17539                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
17540                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
17541                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
17542                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
17543                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
17544                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
17545                   ,QPL.BREAK_UOM_CODE /* Proration */
17546                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17547                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17548                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17549    FROM
17550          qp_npreq_lines_tmp qplines,
17551          qp_npreq_line_attrs_tmp qplat_prod,
17552          QP_PRICING_ATTRIBUTES qpa,
17553          qp_npreq_line_attrs_tmp qplat_pric,
17554          QP_LIST_LINES qpl,
17555          QP_LIST_HEADERS_B qph,
17556          --QP_PRICE_REQ_SOURCES qprs,
17557          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
17558          QP_CURRENCY_DETAILS QCDT   /* Vivek */
17559    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17560    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17561    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17562    AND   (QPLINES.PRICE_FLAG = G_YES
17563           OR
17564          (QPLINES.PRICE_FLAG = G_PHASE
17565           AND
17566           P_FREEZE_OVERRIDE_FLAG = G_YES))
17567    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17568    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17569    AND   QPLINES.VALIDATED_FLAG = G_YES
17570    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
17571    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
17572    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17573    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17574    AND   QPA.EXCLUDER_FLAG = G_NO
17575    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17576    AND   QPA.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
17577    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
17578    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
17579    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
17580           OR
17581           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
17582    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
17583    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17584    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
17585    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17586 --added for moac -- commented references to security profile
17587 --security will be built into qp_list_headers_b
17588 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17589 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17590 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17591    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17592    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17593    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17594    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17595            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17596            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17597    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17598            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17599                TRUNC(SYSDATE) )) AND
17600            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17601                TRUNC(SYSDATE) ))
17602    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17603            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17604                TRUNC(SYSDATE) )) AND
17605            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17606                TRUNC(SYSDATE) ))
17607    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17608                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17609    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17610                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17611    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17612            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17613            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17614 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
17615             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
17616             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
17617             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17618                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17619                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17620    AND (   /* Vivek */
17621         (qcdt.curr_attribute_context is null   /* Vivek */
17622          and not exists   /* Vivek */
17623              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
17624 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
17625                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
17626 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
17627                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
17628                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
17629                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
17630                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
17631                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
17632                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17633                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
17634                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17635                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17636                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17637              )   /* Vivek */
17638         )   /* Vivek */
17639         OR   /* Vivek */
17640         (qcdt.curr_attribute_context is not null   /* Vivek */
17641          and qcdt.precedence =
17642              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
17643 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
17644                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
17645 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
17646                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
17647                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
17648                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
17649                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
17650                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
17651                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17652                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
17653                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17654                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17655                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17656              )   /* Vivek */
17657         )   /* Vivek */
17658        )   /* Vivek */
17659    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17660    --       OR
17661    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17662    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17663    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17664    AND   QPH.ACTIVE_FLAG = G_YES
17665    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17666    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17667    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17668    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17669    ORDER BY 1,2; --ORDER BY LINE_INDEX AND LIST LINE ID
17670 
17671 
17672 /*
17673 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
17674 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_lines_tmp_N3,QUALIFIERS_EXIST_FLAG,2
17675 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_lines_tmp_N3,PRICING_ATTRS_EXIST_FLAG,3
17676 
17677 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
17678 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
17679 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_QUALIFIERS_N1,ACTIVE_FLAG,6
17680 
17681 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
17682 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
17683 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
17684 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
17685 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
17686 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
17687 
17688 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,LIST_HEADER_ID,1
17689 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,QUALIFICATION_IND,2
17690 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,PRICING_PHASE_ID,3
17691 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,LIST_LINE_ID,4
17692 
17693 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
17694 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
17695 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
17696 
17697 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
17698 
17699 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
17700 
17701 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
17702 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
17703 
17704 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
17705 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
17706 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
17707 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
17708 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
17709 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
17710 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
17711 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
17712 */
17713 CURSOR L_LIST_QUAL_CUR  IS
17714 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_Q QPLAT_PROD QPA QPL QPH) INDEX(QPQ QP_QUALIFIERS_N1) INDEX(QPLAT_Q qp_preq_line_attrs_tmp_N2) INDEX(QPA QP_PRICING_ATTRIBUTES_N5) dynamic_sampling(1) l_list_qual_cur */
17715                    QPLAT_PROD.LINE_INDEX,
17716                    QPL.LIST_LINE_ID,
17717                    QPL.ARITHMETIC_OPERATOR,
17718                    QPL.OPERAND,
17719                    QPL.PRICING_GROUP_SEQUENCE,
17720                    QPL.LIST_LINE_TYPE_CODE,
17721                    QPL.PRICING_PHASE_ID,
17722                    QPL.AUTOMATIC_FLAG,
17723                    QPL.INCOMPATIBILITY_GRP_CODE,
17724                    QPL.PRICE_BY_FORMULA_ID,
17725                    QPL.PRODUCT_PRECEDENCE,
17726                    QPL.PRIMARY_UOM_FLAG,
17727                    QPL.MODIFIER_LEVEL_CODE,
17728                    QPL.LIST_LINE_NO,
17729                    QPA.PRODUCT_UOM_CODE,
17730                    QPA.EXCLUDER_FLAG,
17731                    QPH.LIST_TYPE_CODE,
17732                    QPH.ROUNDING_FACTOR,
17733                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17734                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17735                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17736                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17737                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17738                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17739                    QPLAT_PROD.APPLIED_FLAG,
17740                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17741                    NULL                      PRICING_ATTRIBUTE,
17742                    NULL                      PRICING_ATTR_VALUE_FROM,
17743                    NULL                      PRICING_SETUP_VALUE_FROM,
17744                    NULL                      PRICING_SETUP_VALUE_TO,
17745                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17746                    NULL                      PRICING_ATTRIBUTE_TYPE,
17747                    NULL                      PRICING_OPERATOR_TYPE,
17748                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
17749                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
17750                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
17751                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
17752                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
17753                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
17754                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
17755                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
17756                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
17757                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
17758                    NULL                         PRICING_ATTRIBUTE_DATATYPE,
17759                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE
17760                   ,QPL.BREAK_UOM_CODE /* Proration */
17761                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17762                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17763                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17764                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17765    FROM
17766          qp_npreq_lines_tmp QPLINES,
17767          QP_QUALIFIERS QPQ,
17768          qp_npreq_line_attrs_tmp QPLAT_Q,
17769 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
17770          QP_PRICING_ATTRIBUTES QPA,
17771          QP_LIST_LINES QPL,
17772          QP_LIST_HEADERS_B QPH,
17773          --QP_PRICE_REQ_SOURCES QPRS
17774          QP_PRICE_REQ_SOURCES_V QPRS /* yangli */
17775    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17776    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
17777    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17778    AND   (QPLINES.PRICE_FLAG = G_YES
17779           OR
17780          (QPLINES.PRICE_FLAG = G_PHASE
17781           AND
17782           P_FREEZE_OVERRIDE_FLAG = G_YES))
17783    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17784    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17785    AND   QPLINES.VALIDATED_FLAG = G_NO
17786    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
17787    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17788    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17789    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17790    AND   QPA.EXCLUDER_FLAG = G_NO
17791    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
17792 --added for moac -- commented references to security profile
17793 --security will be built into qp_list_headers_b
17794 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17795 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17796 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17797    --AND   QPL.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
17798    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17799    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17800    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17801            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17802            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17803    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17804            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17805            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17806    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17807    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17808    --       OR
17809    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17810    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17811    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17812    AND   QPH.ACTIVE_FLAG = G_YES
17813    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17814    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
17815 -- 3594459, context and attribute OR'd together
17816    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
17817           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
17818    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
17819    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
17820    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
17821    AND   QPQ.ACTIVE_FLAG = G_YES
17822    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
17823                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
17824            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
17825                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
17826            OR
17827           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
17828    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
17829    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17830          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
17831          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
17832    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
17833    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17834    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17835    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17836    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17837    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
17838           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
17839 UNION ALL
17840  SELECT /*+ ORDERED USE_NL(QPLINES QPQ QPLAT_Q QPLAT_PROD QPA QPLAT_PRIC QPL QPH) INDEX(QPQ QP_QUALIFIERS_N1) INDEX(QPLAT_Q qp_preq_line_attrs_tmp_N2)
17841  INDEX(QPA QP_PRICING_ATTRIBUTES_N5) INDEX(QPLAT_PRIC qp_preq_line_attrs_tmp_N2) dynamic_sampling(1) l_list_qual_cur */
17842                    QPLAT_PROD.LINE_INDEX,
17843                    QPL.LIST_LINE_ID,
17844                    QPL.ARITHMETIC_OPERATOR,
17845                    QPL.OPERAND,
17846                    QPL.PRICING_GROUP_SEQUENCE,
17847                    QPL.LIST_LINE_TYPE_CODE,
17848                    QPL.PRICING_PHASE_ID,
17849                    QPL.AUTOMATIC_FLAG,
17850                    QPL.INCOMPATIBILITY_GRP_CODE,
17851                    QPL.PRICE_BY_FORMULA_ID,
17852                    QPL.PRODUCT_PRECEDENCE,
17853                    QPL.PRIMARY_UOM_FLAG,
17854                    QPL.MODIFIER_LEVEL_CODE,
17855                    QPL.LIST_LINE_NO,
17856                    QPA.PRODUCT_UOM_CODE,
17857                    QPA.EXCLUDER_FLAG,
17858                    QPH.LIST_TYPE_CODE,
17859                    QPH.ROUNDING_FACTOR,
17860                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
17861                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17862                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17863                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17864                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17865                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17866                    QPLAT_PROD.APPLIED_FLAG,
17867                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
17868                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
17869                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
17870                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
17871                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
17872                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
17873                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
17874                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
17875                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
17876                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
17877                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
17878                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
17879                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
17880                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
17881                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
17882                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
17883                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
17884                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
17885                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
17886                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE
17887                   ,QPL.BREAK_UOM_CODE /* Proration */
17888                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17889                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17890                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17891                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17892    FROM
17893          qp_npreq_lines_tmp QPLINES,
17894          QP_QUALIFIERS QPQ,
17895          qp_npreq_line_attrs_tmp QPLAT_Q,
17896 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
17897          QP_PRICING_ATTRIBUTES QPA,
17898          qp_npreq_line_attrs_tmp QPLAT_PRIC,
17899          QP_LIST_LINES QPL,
17900          QP_LIST_HEADERS_B QPH,
17901          --QP_PRICE_REQ_SOURCES QPRS
17902          QP_PRICE_REQ_SOURCES_V QPRS /* yangli */
17903    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17904    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
17905    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17906    AND   (QPLINES.PRICE_FLAG = G_YES
17907           OR
17908          (QPLINES.PRICE_FLAG = G_PHASE
17909           AND
17910           P_FREEZE_OVERRIDE_FLAG = G_YES))
17911    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17912    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17913    AND   QPLINES.VALIDATED_FLAG = G_NO
17914    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
17915    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
17916    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17917    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17918    AND   QPA.EXCLUDER_FLAG = G_NO
17919    --AND   QPA.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
17920    AND    QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
17921           AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
17922           AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
17923                OR
17924                QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
17925           AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
17926           AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17927           AND QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
17928    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17929 --added for moac -- commented references to security profile
17930 --security will be built into qp_list_headers_b
17931 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17932 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17933 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17934    --AND   QPL.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
17935    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17936    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17937    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17938            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17939            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17940    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17941            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17942            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17943    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17944    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17945    --       OR
17946    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17947    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17948    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17949    AND   QPH.ACTIVE_FLAG = G_YES
17950    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17951    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
17952 -- 3594459, context and attribute OR'd together
17953    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
17954           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
17955    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
17956    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
17957    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
17958    AND   QPQ.ACTIVE_FLAG = G_YES
17959    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
17960                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
17961            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
17962                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
17963            OR
17964           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
17965    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
17966    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17967             NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
17968    AND     NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
17969    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17970    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17971    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17972    AND   QPLAT_Q.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17973    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17974    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
17975           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
17976    UNION ALL
17977    SELECT /*+ ORDERED USE_NL(QPLINES QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) dynamic_sampling(1) l_list_cur */
17978                    QPLAT_PROD.LINE_INDEX,
17979                    QPL.LIST_LINE_ID,
17980                    QPL.ARITHMETIC_OPERATOR,
17981                    QPL.OPERAND,
17982                    QPL.PRICING_GROUP_SEQUENCE,
17983                    QPL.LIST_LINE_TYPE_CODE,
17984                    QPL.PRICING_PHASE_ID,
17985                    QPL.AUTOMATIC_FLAG,
17986                    QPL.INCOMPATIBILITY_GRP_CODE,
17987                    QPL.PRICE_BY_FORMULA_ID,
17988                    QPL.PRODUCT_PRECEDENCE,
17989                    QPL.PRIMARY_UOM_FLAG,
17990                    QPL.MODIFIER_LEVEL_CODE,
17991                    QPL.LIST_LINE_NO,
17992                    QPA.PRODUCT_UOM_CODE,
17993                    QPA.EXCLUDER_FLAG,
17994                    QPH.LIST_TYPE_CODE,
17995                    QPH.ROUNDING_FACTOR,
17996                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17997                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17998                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17999                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18000                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18001                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18002                    QPLAT_PROD.APPLIED_FLAG,
18003                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
18004                    NULL                      PRICING_ATTRIBUTE,
18005                    NULL                      PRICING_ATTR_VALUE_FROM,
18006                    NULL                      PRICING_SETUP_VALUE_FROM,
18007                    NULL                      PRICING_SETUP_VALUE_TO,
18008                    NULL                      PRICING_ATTRIBUTE_LEVEL,
18009                    NULL                      PRICING_ATTRIBUTE_TYPE,
18010                    NULL                      PRICING_OPERATOR_TYPE,
18011                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
18012                    NULL                      QUALIFIER_ATTRIBUTE,
18013                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
18014                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
18015                    -9999                     QUALIFIER_GROUPING_NO,
18016                    5000                      QUALIFIER_PRECEDENCE,
18017                    NULL                      QUALIFIER_DATATYPE,
18018                    NULL                      SETUP_VALUE_FROM,
18019                    NULL                      SETUP_VALUE_TO,
18020                    NULL                      QUALIFIER_OPERATOR_TYPE,
18021                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
18022                    NULL                      QUALIFIER_TYPE
18023                   ,QPL.BREAK_UOM_CODE /* Proration */
18024                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18025                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18026                   ,qplat_prod.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18027                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18028    FROM
18029          qp_npreq_lines_tmp QPLINES,
18030          qp_npreq_line_attrs_tmp qplat_prod,
18031          QP_PRICING_ATTRIBUTES QPA,
18032          QP_LIST_LINES QPL,
18033          QP_LIST_HEADERS_B QPH,
18034          --QP_PRICE_REQ_SOURCES qprs
18035          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
18036    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18037    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
18038    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18039    AND   (QPLINES.PRICE_FLAG = G_YES
18040           OR
18041          (QPLINES.PRICE_FLAG = G_PHASE
18042           AND
18043           P_FREEZE_OVERRIDE_FLAG = G_YES))
18044    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18045    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18046    AND   QPLINES.VALIDATED_FLAG = G_NO
18047    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
18048    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
18049    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18050    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18051    AND   QPA.EXCLUDER_FLAG = G_NO
18052    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18053    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
18054 --added for moac -- commented references to security profile
18055 --security will be built into qp_list_headers_b
18056 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18057 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18058 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18059    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18060    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18061    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18062            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18063            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18064    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18065            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18066            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18067    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
18068    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18069    --       OR
18070    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18071    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18072    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18073    AND   QPH.ACTIVE_FLAG = G_YES
18074    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18075    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18076    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18077    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18078 UNION ALL
18079 SELECT /*+ ORDERED USE_NL(QPLINES QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) INDEX(QPLAT_PRIC qp_preq_line_attrs_tmp_N2) dynamic_sampling(1) l_list_cur */
18080                    QPLAT_PROD.LINE_INDEX,
18081                    QPL.LIST_LINE_ID,
18082                    QPL.ARITHMETIC_OPERATOR,
18083                    QPL.OPERAND,
18084                    QPL.PRICING_GROUP_SEQUENCE,
18085                    QPL.LIST_LINE_TYPE_CODE,
18086                    QPL.PRICING_PHASE_ID,
18087                    QPL.AUTOMATIC_FLAG,
18088                    QPL.INCOMPATIBILITY_GRP_CODE,
18089                    QPL.PRICE_BY_FORMULA_ID,
18090                    QPL.PRODUCT_PRECEDENCE,
18091                    QPL.PRIMARY_UOM_FLAG,
18092                    QPL.MODIFIER_LEVEL_CODE,
18093                    QPL.LIST_LINE_NO,
18094                    QPA.PRODUCT_UOM_CODE,
18095                    QPA.EXCLUDER_FLAG,
18096                    QPH.LIST_TYPE_CODE,
18097                    QPH.ROUNDING_FACTOR,
18098                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
18099                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18100                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18101                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18102                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18103                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18104                    QPLAT_PROD.APPLIED_FLAG,
18105                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
18106                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
18107                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
18108                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
18109                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
18110                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
18111                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
18112                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
18113                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
18114                    NULL                      QUALIFIER_ATTRIBUTE,
18115                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
18116                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
18117                    -9999                     QUALIFIER_GROUPING_NO,
18118                    5000                      QUALIFIER_PRECEDENCE,
18119                    NULL                      QUALIFIER_DATATYPE,
18120                    NULL                      SETUP_VALUE_FROM,
18121                    NULL                      SETUP_VALUE_TO,
18122                    NULL                      QUALIFIER_OPERATOR_TYPE,
18123                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
18124                    NULL                      QUALIFIER_TYPE
18125                   ,QPL.BREAK_UOM_CODE /* Proration */
18126                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18127                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18128                   ,qplat_pric.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18129                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18130    FROM
18131          qp_npreq_lines_tmp qplines,
18132          qp_npreq_line_attrs_tmp qplat_prod,
18133          QP_PRICING_ATTRIBUTES qpa,
18134          qp_npreq_line_attrs_tmp qplat_pric,
18135          QP_LIST_LINES qpl,
18136          QP_LIST_HEADERS_B qph,
18137          --QP_PRICE_REQ_SOURCES qprs
18138          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
18139    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18140    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
18141    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18142    AND   (QPLINES.PRICE_FLAG = G_YES
18143           OR
18144          (QPLINES.PRICE_FLAG = G_PHASE
18145           AND
18146           P_FREEZE_OVERRIDE_FLAG = G_YES))
18147    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18148    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18149    AND   QPLINES.VALIDATED_FLAG = G_NO
18150    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
18151    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
18152    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18153    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18154    AND   QPA.EXCLUDER_FLAG = G_NO
18155    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18156    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
18157    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
18158    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
18159           OR
18160           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
18161    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
18162    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18163    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
18164    AND   QPH.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18165 --added for moac -- commented references to security profile
18166 --security will be built into qp_list_headers_b
18167 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18168 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18169 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18170    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18171    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18172    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18173            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18174            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18175    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18176            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18177            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18178    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
18179    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18180    --       OR
18181    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18182    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18183    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18184    AND   QPH.ACTIVE_FLAG = G_YES
18185    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18186    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18187    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18188    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18189    ORDER BY 1,2;
18190 
18191 -- vivek
18192 CURSOR L_LIST_QUAL_CUR_CURRENCY  IS
18193 SELECT /*+ ORDERED USE_NL(QPQ QPLAT_Q QPLAT_PROD QPA QPL QPH) INDEX(QPQ QP_QUALIFIERS_N1) INDEX(QPLAT_Q qp_preq_line_attrs_tmp_N2) l_list_qual_cur */
18194                    QPLAT_PROD.LINE_INDEX,
18195                    QPL.LIST_LINE_ID,
18196                    QPL.ARITHMETIC_OPERATOR,
18197                    QPL.OPERAND,
18198                    QPL.PRICING_GROUP_SEQUENCE,
18199                    QPL.LIST_LINE_TYPE_CODE,
18200                    QPL.PRICING_PHASE_ID,
18201                    QPL.AUTOMATIC_FLAG,
18202                    QPL.INCOMPATIBILITY_GRP_CODE,
18203                    QPL.PRICE_BY_FORMULA_ID,
18204                    QPL.PRODUCT_PRECEDENCE,
18205                    QPL.PRIMARY_UOM_FLAG,
18206                    QPL.MODIFIER_LEVEL_CODE,
18207                    QPL.LIST_LINE_NO,
18208                    QPA.PRODUCT_UOM_CODE,
18209                    QPA.EXCLUDER_FLAG,
18210                    QPH.LIST_TYPE_CODE,
18211    /* vivek        QPH.ROUNDING_FACTOR,  */
18212                    QCDT.ROUNDING_FACTOR, /* vivek */
18213                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
18214                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18215                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18216                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18217                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18218                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18219                    QPLAT_PROD.APPLIED_FLAG,
18220                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
18221                    NULL                      PRICING_ATTRIBUTE,
18222                    NULL                      PRICING_ATTR_VALUE_FROM,
18223                    NULL                      PRICING_SETUP_VALUE_FROM,
18224                    NULL                      PRICING_SETUP_VALUE_TO,
18225                    NULL                      PRICING_ATTRIBUTE_LEVEL,
18226                    NULL                      PRICING_ATTRIBUTE_TYPE,
18227                    NULL                      PRICING_OPERATOR_TYPE,
18228                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
18229                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
18230                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
18231                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
18232                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
18233                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
18234                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
18235                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
18236                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
18237                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
18238                    NULL                         PRICING_ATTRIBUTE_DATATYPE,
18239                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
18240                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18241                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18242                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18243                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18244                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18245                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18246                   ,QPL.BREAK_UOM_CODE /* Proration */
18247                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18248                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18249                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18250                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18251    FROM
18252          qp_npreq_lines_tmp QPLINES,
18253          QP_QUALIFIERS QPQ,
18254          qp_npreq_line_attrs_tmp QPLAT_Q,
18255 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
18256          QP_PRICING_ATTRIBUTES QPA,
18257          QP_LIST_LINES QPL,
18258          QP_LIST_HEADERS_B QPH,
18259          --QP_PRICE_REQ_SOURCES QPRS,
18260          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
18261          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18262    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18263    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
18264    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18265    AND   (QPLINES.PRICE_FLAG = G_YES
18266           OR
18267          (QPLINES.PRICE_FLAG = G_PHASE
18268           AND
18269           P_FREEZE_OVERRIDE_FLAG = G_YES))
18270    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18271    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18272    AND   QPLINES.VALIDATED_FLAG = G_NO
18273    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
18274    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
18275    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18276    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18277    AND   QPA.EXCLUDER_FLAG = G_NO
18278    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
18279    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18280    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18281    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18282            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18283            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18284    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18285            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18286            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18287 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18288             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18289 --added for moac -- commented references to security profile
18290 --security will be built into qp_list_headers_b
18291 --            AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18292 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18293 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18294             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18295             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18296                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18297                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18298    AND (   /* Vivek */
18299         (qcdt.curr_attribute_context is null   /* Vivek */
18300          and not exists   /* Vivek */
18301              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18302 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18303                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18304 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18305                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18306                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18307                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18308                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18309                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18310                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18311                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18312                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18313                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18314                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18315              )   /* Vivek */
18316         )   /* Vivek */
18317         OR   /* Vivek */
18318         (qcdt.curr_attribute_context is not null   /* Vivek */
18319          and qcdt.currency_detail_id =   /* Vivek */
18320              (select qcdt3.currency_detail_id
18321 	       from qp_currency_details qcdt3  /* Vivek */
18322                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18323                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18324                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18325                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18326                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18327                  and  qcdt3.precedence =
18328              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18329 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18330                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18331 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18332                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18333                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18334                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18335                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18336                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18337                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18338                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18339                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18340                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18341                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18342              ))   /* Vivek */
18343         )   /* Vivek */
18344        )   /* Vivek */
18345    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18346    --       OR
18347    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18348    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18349    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18350    AND   QPH.ACTIVE_FLAG = G_YES
18351    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18352    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
18353 -- 3594459, context and attribute OR'd together
18354    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
18355           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
18356    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
18357    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
18358    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
18359    AND   QPQ.ACTIVE_FLAG = G_YES
18360    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
18361                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
18362            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
18363                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
18364            OR
18365           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
18366    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
18367    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18368          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
18369          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
18370    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
18371    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18372    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18373    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18374    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18375     AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
18376           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
18377 UNION ALL
18378  SELECT /*+ ORDERED USE_NL(QPLINES QPQ QPLAT_Q QPLAT_PROD QPA QPLAT_PRIC QPL QPH) INDEX(QPQ QP_QUALIFIERS_N1) INDEX(QPLAT_Q qp_preq_line_attrs_tmp_N2) INDEX(QPA QP_PRICING_ATTRIBUTES_N5) INDEX(QPLAT_PRIC qp_preq_line_attrs_tmp_N2) l_list_qual_cur */
18379                    QPLAT_PROD.LINE_INDEX,
18380                    QPL.LIST_LINE_ID,
18381                    QPL.ARITHMETIC_OPERATOR,
18382                    QPL.OPERAND,
18383                    QPL.PRICING_GROUP_SEQUENCE,
18384                    QPL.LIST_LINE_TYPE_CODE,
18385                    QPL.PRICING_PHASE_ID,
18386                    QPL.AUTOMATIC_FLAG,
18387                    QPL.INCOMPATIBILITY_GRP_CODE,
18388                    QPL.PRICE_BY_FORMULA_ID,
18389                    QPL.PRODUCT_PRECEDENCE,
18390                    QPL.PRIMARY_UOM_FLAG,
18391                    QPL.MODIFIER_LEVEL_CODE,
18392                    QPL.LIST_LINE_NO,
18393                    QPA.PRODUCT_UOM_CODE,
18394                    QPA.EXCLUDER_FLAG,
18395                    QPH.LIST_TYPE_CODE,
18396    /* vivek        QPH.ROUNDING_FACTOR,  */
18397                    QCDT.ROUNDING_FACTOR, /* vivek */
18398                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
18399                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18400                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18401                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18402                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18403                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18404                    QPLAT_PROD.APPLIED_FLAG,
18405                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
18406                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
18407                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
18408                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
18409                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
18410                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
18411                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
18412                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
18413                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
18414                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
18415                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
18416                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
18417                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
18418                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
18419                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
18420                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
18421                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
18422                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
18423                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
18424                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
18425                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18426                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18427                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18428                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18429                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18430                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18431                   ,QPL.BREAK_UOM_CODE /* Proration */
18432                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18433                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18434                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18435                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18436    FROM
18437          qp_npreq_lines_tmp QPLINES,
18438          QP_QUALIFIERS QPQ,
18439          qp_npreq_line_attrs_tmp QPLAT_Q,
18440 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
18441          QP_PRICING_ATTRIBUTES QPA,
18442          qp_npreq_line_attrs_tmp QPLAT_PRIC,
18443          QP_LIST_LINES QPL,
18444          QP_LIST_HEADERS_B QPH,
18445          --QP_PRICE_REQ_SOURCES QPRS,
18446          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
18447          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18448    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18449    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
18450    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18451    AND   (QPLINES.PRICE_FLAG = G_YES
18452           OR
18453          (QPLINES.PRICE_FLAG = G_PHASE
18454           AND
18455           P_FREEZE_OVERRIDE_FLAG = G_YES))
18456    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18457    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18458    AND   QPLINES.VALIDATED_FLAG = G_NO
18459    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
18460    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
18461    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18462    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18463    AND   QPA.EXCLUDER_FLAG = G_NO
18464    AND    QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
18465           AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
18466           AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
18467                OR
18468                QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
18469           AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
18470           AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18471           AND QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
18472    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
18473    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18474    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18475    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18476            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18477            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18478    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18479            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18480            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18481 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18482             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18483             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18484             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18485                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18486                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18487    AND (   /* Vivek */
18488         (qcdt.curr_attribute_context is null   /* Vivek */
18489          and not exists   /* Vivek */
18490              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18491 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18492                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18493 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18494                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18495                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18496                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18497                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18498                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18499                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18500                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18501                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18502                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18503                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18504              )   /* Vivek */
18505         )   /* Vivek */
18506         OR   /* Vivek */
18507         (qcdt.curr_attribute_context is not null   /* Vivek */
18508          and qcdt.currency_detail_id =   /* Vivek */
18509              (select qcdt3.currency_detail_id
18510 	       from qp_currency_details qcdt3  /* Vivek */
18511                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18512                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18513                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18514                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18515                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18516                  and  qcdt3.precedence =
18517              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18518 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18519                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18520 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18521                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18522                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18523                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18524                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18525                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18526                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18527                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18528                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18529                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18530                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18531              ))   /* Vivek */
18532         )   /* Vivek */
18533        )   /* Vivek */
18534    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18535    --       OR
18536    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18537    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18538    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18539    AND   QPH.ACTIVE_FLAG = G_YES
18540    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18541    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
18542 -- 3594459, context and attribute OR'd together
18543    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
18544           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
18545    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
18546    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
18547    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
18548 --added for moac -- commented references to security profile
18549 --security will be built into qp_list_headers_b
18550 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18551 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18552 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18553    AND   QPQ.ACTIVE_FLAG = G_YES
18554    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
18555                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
18556            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
18557                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
18558            OR
18559           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
18560    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
18561    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18562             NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
18563    AND     NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
18564    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18565    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18566    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18567    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18568    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18569    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
18570           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
18571    UNION ALL
18572    SELECT /*+ ORDERED USE_NL(QPLINES QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) l_list_cur */
18573                    QPLAT_PROD.LINE_INDEX,
18574                    QPL.LIST_LINE_ID,
18575                    QPL.ARITHMETIC_OPERATOR,
18576                    QPL.OPERAND,
18577                    QPL.PRICING_GROUP_SEQUENCE,
18578                    QPL.LIST_LINE_TYPE_CODE,
18579                    QPL.PRICING_PHASE_ID,
18580                    QPL.AUTOMATIC_FLAG,
18581                    QPL.INCOMPATIBILITY_GRP_CODE,
18582                    QPL.PRICE_BY_FORMULA_ID,
18583                    QPL.PRODUCT_PRECEDENCE,
18584                    QPL.PRIMARY_UOM_FLAG,
18585                    QPL.MODIFIER_LEVEL_CODE,
18586                    QPL.LIST_LINE_NO,
18587                    QPA.PRODUCT_UOM_CODE,
18588                    QPA.EXCLUDER_FLAG,
18589                    QPH.LIST_TYPE_CODE,
18590    /* vivek        QPH.ROUNDING_FACTOR,  */
18591                    QCDT.ROUNDING_FACTOR, /* vivek */
18592                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
18593                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18594                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18595                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18596                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18597                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18598                    QPLAT_PROD.APPLIED_FLAG,
18599                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
18600                    NULL                      PRICING_ATTRIBUTE,
18601                    NULL                      PRICING_ATTR_VALUE_FROM,
18602                    NULL                      PRICING_SETUP_VALUE_FROM,
18603                    NULL                      PRICING_SETUP_VALUE_TO,
18604                    NULL                      PRICING_ATTRIBUTE_LEVEL,
18605                    NULL                      PRICING_ATTRIBUTE_TYPE,
18606                    NULL                      PRICING_OPERATOR_TYPE,
18607                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
18608                    NULL                      QUALIFIER_ATTRIBUTE,
18609                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
18610                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
18611                    -9999                     QUALIFIER_GROUPING_NO,
18612                    5000                      QUALIFIER_PRECEDENCE,
18613                    NULL                      QUALIFIER_DATATYPE,
18614                    NULL                      SETUP_VALUE_FROM,
18615                    NULL                      SETUP_VALUE_TO,
18616                    NULL                      QUALIFIER_OPERATOR_TYPE,
18617                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
18618                    NULL                      QUALIFIER_TYPE,
18619                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18620                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18621                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18622                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18623                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18624                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18625                   ,QPL.BREAK_UOM_CODE /* Proration */
18626                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18627                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18628                   ,qplat_prod.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18629                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18630    FROM
18631          qp_npreq_lines_tmp QPLINES,
18632          qp_npreq_line_attrs_tmp qplat_prod,
18633          QP_PRICING_ATTRIBUTES QPA,
18634          QP_LIST_LINES QPL,
18635          QP_LIST_HEADERS_B QPH,
18636          --QP_PRICE_REQ_SOURCES qprs,
18637          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
18638          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18639    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18640    --AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
18641    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
18642    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18643    AND   (QPLINES.PRICE_FLAG = G_YES
18644           OR
18645          (QPLINES.PRICE_FLAG = G_PHASE
18646           AND
18647           P_FREEZE_OVERRIDE_FLAG = G_YES))
18648    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18649    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18650    AND   QPLINES.VALIDATED_FLAG = G_NO
18651    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
18652    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
18653    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18654    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18655    AND   QPA.EXCLUDER_FLAG = G_NO
18656    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18657    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
18658 --added for moac -- commented references to security profile
18659 --security will be built into qp_list_headers_b
18660 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18661 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18662 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18663    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18664    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18665    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18666            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18667            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18668    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18669            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18670            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18671 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18672             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18673             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18674             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18675                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18676                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18677    AND (   /* Vivek */
18678         (qcdt.curr_attribute_context is null   /* Vivek */
18679          and not exists   /* Vivek */
18680              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18681 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18682                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18683 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18684                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18685                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18686                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18687                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18688                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18689                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18690                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18691                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18692                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18693                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18694              )   /* Vivek */
18695         )   /* Vivek */
18696         OR   /* Vivek */
18697         (qcdt.curr_attribute_context is not null   /* Vivek */
18698          and qcdt.currency_detail_id =   /* Vivek */
18699              (select qcdt3.currency_detail_id
18700 	       from qp_currency_details qcdt3  /* Vivek */
18701                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18702                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18703                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18704                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18705                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18706                  and  qcdt3.precedence =
18707              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18708 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18709                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18710 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18711                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18712                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18713                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18714                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18715                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18716                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18717                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18718                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18719                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18720                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18721              ))   /* Vivek */
18722         )   /* Vivek */
18723        )   /* Vivek */
18724    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18725    --       OR
18726    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18727    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18728    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18729    AND   QPH.ACTIVE_FLAG = G_YES
18730    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18731    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18732    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18733    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18734 UNION ALL
18735 SELECT /*+ ORDERED USE_NL(QPLINES QPLAT_PROD QPA QPLAT_PRIC QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) INDEX(QPLAT_PRIC qp_preq_line_attrs_tmp_N2) l_list_cur */
18736                    QPLAT_PROD.LINE_INDEX,
18737                    QPL.LIST_LINE_ID,
18738                    QPL.ARITHMETIC_OPERATOR,
18739                    QPL.OPERAND,
18740                    QPL.PRICING_GROUP_SEQUENCE,
18741                    QPL.LIST_LINE_TYPE_CODE,
18742                    QPL.PRICING_PHASE_ID,
18743                    QPL.AUTOMATIC_FLAG,
18744                    QPL.INCOMPATIBILITY_GRP_CODE,
18745                    QPL.PRICE_BY_FORMULA_ID,
18746                    QPL.PRODUCT_PRECEDENCE,
18747                    QPL.PRIMARY_UOM_FLAG,
18748                    QPL.MODIFIER_LEVEL_CODE,
18749                    QPL.LIST_LINE_NO,
18750                    QPA.PRODUCT_UOM_CODE,
18751                    QPA.EXCLUDER_FLAG,
18752                    QPH.LIST_TYPE_CODE,
18753    /* vivek        QPH.ROUNDING_FACTOR,  */
18754                    QCDT.ROUNDING_FACTOR, /* vivek */
18755                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
18756                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18757                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18758                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18759                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18760                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18761                    QPLAT_PROD.APPLIED_FLAG,
18762                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
18763                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
18764                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
18765                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
18766                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
18767                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
18768                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
18769                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
18770                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
18771                    NULL                      QUALIFIER_ATTRIBUTE,
18772                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
18773                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
18774                    -9999                     QUALIFIER_GROUPING_NO,
18775                    5000                      QUALIFIER_PRECEDENCE,
18776                    NULL                      QUALIFIER_DATATYPE,
18777                    NULL                      SETUP_VALUE_FROM,
18778                    NULL                      SETUP_VALUE_TO,
18779                    NULL                      QUALIFIER_OPERATOR_TYPE,
18780                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
18781                    NULL                      QUALIFIER_TYPE,
18782                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18783                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18784                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18785                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18786                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18787                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18788                   ,QPL.BREAK_UOM_CODE /* Proration */
18789                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18790                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18791                   ,qplat_pric.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18792                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18793    FROM
18794          qp_npreq_lines_tmp qplines,
18795          qp_npreq_line_attrs_tmp qplat_prod,
18796          QP_PRICING_ATTRIBUTES qpa,
18797          qp_npreq_line_attrs_tmp qplat_pric,
18798          QP_LIST_LINES qpl,
18799          QP_LIST_HEADERS_B qph,
18800          --QP_PRICE_REQ_SOURCES qprs,
18801          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
18802          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18803    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18804    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
18805    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18806    AND   (QPLINES.PRICE_FLAG = G_YES
18807           OR
18808          (QPLINES.PRICE_FLAG = G_PHASE
18809           AND
18810           P_FREEZE_OVERRIDE_FLAG = G_YES))
18811    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18812    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18813    AND   QPLINES.VALIDATED_FLAG = G_NO
18814    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
18815    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
18816    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18817    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18818    AND   QPA.EXCLUDER_FLAG = G_NO
18819    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18820    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
18821    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
18822    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
18823           OR
18824           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
18825    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
18826    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18827    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
18828    AND   QPH.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18829 --added for moac -- commented references to security profile
18830 --security will be built into qp_list_headers_b
18831 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18832 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18833 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18834    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18835    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18836    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18837            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18838            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18839    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18840            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18841            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18842 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18843             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18844             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18845             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18846                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18847                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18848    AND (   /* Vivek */
18849         (qcdt.curr_attribute_context is null   /* Vivek */
18850          and not exists   /* Vivek */
18851              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18852 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18853                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18854 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18855                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18856                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18857                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18858                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18859                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18860                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18861                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18862                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18863                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18864                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18865              )   /* Vivek */
18866         )   /* Vivek */
18867         OR   /* Vivek */
18868         (qcdt.curr_attribute_context is not null   /* Vivek */
18869          and qcdt.currency_detail_id =   /* Vivek */
18870              (select qcdt3.currency_detail_id
18871 	       from qp_currency_details qcdt3  /* Vivek */
18872                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18873                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18874                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18875                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18876                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18877                  and  qcdt3.precedence =
18878              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18879 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18880                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18881 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18882                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18883                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18884                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18885                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18886                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18887                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18888                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18889                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18890                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18891                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18892              ))   /* Vivek */
18893         )   /* Vivek */
18894        )   /* Vivek */
18895    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18896    --       OR
18897    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18898    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18899    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18900    AND   QPH.ACTIVE_FLAG = G_YES
18901    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18902    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18903    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18904    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18905    ORDER BY 1,2;
18906 
18907 /*
18908 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
18909 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
18910 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
18911 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
18912 
18913 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_lines_tmp_U1,LINE_INDEX,1
18914 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_lines_tmp_U1,LINE_TYPE_CODE,2
18915 */
18916 
18917 CURSOR l_validated_cur IS
18918   SELECT  /*+ dynamic_sampling(1) */ LINE_INDEX,
18919           LINE_DETAIL_INDEX,
18920           ATTRIBUTE_LEVEL,
18921           ATTRIBUTE_TYPE,
18922           CONTEXT,
18923           ATTRIBUTE,
18924           VALUE_FROM,
18925           VALUE_TO,
18926           PRODUCT_UOM_CODE,
18927           COMPARISON_OPERATOR_TYPE_CODE COMPARISON_OPERATOR_TYPE
18928   FROM  qp_npreq_line_attrs_tmp a
18929   WHERE PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18930   AND   VALIDATED_FLAG = G_VALIDATED
18931   AND   CONTEXT = G_LIST_HEADER_CONTEXT
18932   AND   ATTRIBUTE IN (G_PROMOTION_ATTRIBUTE,G_QUAL_ATTRIBUTE2)
18933   AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
18934   AND   EXISTS
18935   (Select /*+ dynamic_sampling(1) */ 'X'
18936    FROM  qp_npreq_lines_tmp b
18937    WHERE b.line_index = a.line_index
18938    AND   (b.price_flag = G_YES
18939           OR
18940           (b.price_flag = G_PHASE
18941            AND
18942            p_freeze_override_flag = G_YES)
18943           )
18944    AND  b.line_type_code <> G_ORDER_LEVEL
18945   );
18946 
18947 --THE DIFFERENT BETWEEN THIS SEARCH AND PRICE LIST SEARCH
18948 --IS THIS SEARCH CHECKS FOR LINE LEVEL QUALIFIER ALSO
18949 /*
18950 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
18951 
18952 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
18953 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
18954 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
18955 
18956 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
18957 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_lines_tmp_N1,LINE_TYPE_CODE,2
18958 
18959 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
18960 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
18961 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
18962 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
18963 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
18964 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
18965 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
18966 
18967 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
18968 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
18969 
18970 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
18971 
18972 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE_CONTEXT,1
18973 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE,2
18974 */
18975 
18976 CURSOR L_OTHER_LIST_CUR (L_LINE_INDEX PLS_INTEGER,
18977                         L_LIST_HEADER_ID NUMBER,
18978                         P_FREEZE_OVERRIDE_FLAG VARCHAR2)IS
18979 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPH QPL QPRS) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n7) l_other_list_cur */
18980                    QPLINES.LINE_INDEX,
18981                    QPL.LIST_LINE_ID,
18982                    QPL.ARITHMETIC_OPERATOR,
18983                    QPL.OPERAND,
18984                    QPL.PRICING_GROUP_SEQUENCE,
18985                    QPL.LIST_LINE_TYPE_CODE,
18986                    QPL.LIST_PRICE,
18987                    QPL.LIST_PRICE_UOM_CODE,
18988                    QPL.PERCENT_PRICE,
18989                    QPL.PRICING_PHASE_ID,
18990                    QPL.AUTOMATIC_FLAG,
18991                    QPL.OVERRIDE_FLAG,
18992                    QPL.PRINT_ON_INVOICE_FLAG,
18993                    QPL.MODIFIER_LEVEL_CODE,
18994                    QPL.BENEFIT_QTY,
18995                    QPL.BENEFIT_UOM_CODE,
18996 		   QPL.SERVICE_DURATION,  -- service project
18997 		   QPL.SERVICE_PERIOD,  -- service project
18998                    QPL.LIST_LINE_NO,
18999                    QPL.ACCRUAL_FLAG,
19000                    QPL.ACCRUAL_CONVERSION_RATE,
19001                    QPL.ESTIM_ACCRUAL_RATE,
19002                    QPL.RECURRING_FLAG,
19003                    QPL.INCOMPATIBILITY_GRP_CODE,
19004                    QPL.PRICE_BY_FORMULA_ID,
19005                    QPL.PRODUCT_PRECEDENCE,
19006                    QPL.PRIMARY_UOM_FLAG,
19007                    QPA.PRODUCT_UOM_CODE,
19008                    QPA.EXCLUDER_FLAG,
19009                    QPH.ASK_FOR_FLAG,
19010                    QPH.LIST_TYPE_CODE,
19011                    QPH.ROUNDING_FACTOR,
19012                    QPLAT_PROD.LINE_DETAIL_INDEX,
19013                    L_LIST_HEADER_ID           LIST_HEADER_ID,
19014                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
19015                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
19016                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
19017                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
19018                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
19019                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
19020                    QPL.AUTOMATIC_FLAG APPLIED_FLAG,  	-- shu fix bug 1915355
19021                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
19022                    NULL                            PRICING_ATTRIBUTE_CONTEXT,
19023                    NULL                            PRICING_ATTRIBUTE,
19024                    NULL                            PRICING_ATTR_VALUE_FROM,
19025                    NULL                            PRICING_SETUP_VALUE_FROM,
19026                    NULL                            PRICING_SETUP_VALUE_TO,
19027                    NULL                            PRICING_ATTRIBUTE_LEVEL,
19028                    NULL                            PRICING_ATTRIBUTE_TYPE,
19029                    NULL                            PRICING_OPERATOR_TYPE,
19030                    NULL                            PRICING_ATTRIBUTE_DATATYPE
19031    FROM
19032          qp_npreq_lines_tmp QPLINES,
19033          qp_npreq_line_attrs_tmp QPLAT_PROD,
19034          QP_PRICING_ATTRIBUTES QPA,
19035          QP_LIST_HEADERS_B QPH,
19036 	 QP_LIST_LINES QPL,
19037          QP_PRICE_REQ_SOURCES_V QPRS
19038    WHERE QPA.PRICING_PHASE_ID = P_PRICING_PHASE_ID
19039    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
19040                                    QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
19041    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
19042    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
19043    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
19044    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
19045    AND   (QPLINES.PRICE_FLAG = G_YES
19046              OR
19047              (QPLINES.PRICE_FLAG = G_PHASE
19048               AND
19049               P_FREEZE_OVERRIDE_FLAG = G_YES))
19050    AND QPH.LIST_HEADER_ID = L_LIST_HEADER_ID
19051 --added for moac -- commented references to security profile
19052 --security will be built into qp_list_headers_b
19053 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
19054 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
19055 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
19056    AND   QPH.ASK_FOR_FLAG = G_YES
19057    AND   QPA.LIST_HEADER_ID = L_LIST_HEADER_ID
19058    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
19059    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
19060    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
19061    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
19062    --                                QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
19063    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
19064    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
19065    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19066            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19067            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19068     AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
19069            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19070                TRUNC(SYSDATE) )) AND
19071            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19072                TRUNC(SYSDATE) ))
19073    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
19074            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19075                TRUNC(SYSDATE) )) AND
19076            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19077                TRUNC(SYSDATE) ))
19078    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
19079                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
19080    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
19081                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
19082    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19083            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19084            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19085    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
19086           OR
19087           QPH.CURRENCY_CODE IS NULL) -- optional currency
19088    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
19089           OR
19090           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
19091    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
19092    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
19093    AND   QPH.ACTIVE_FLAG = G_YES
19094    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19095   UNION ALL
19096 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPLAT_PRIC QPH QPL QPRS) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qplat_pric qp_preq_line_attrs_tmp_N2) index(qph qp_list_headers_b_n7) l_other_list_cur */
19097                    QPLINES.LINE_INDEX,
19098                    QPL.LIST_LINE_ID,
19099                    QPL.ARITHMETIC_OPERATOR,
19100                    QPL.OPERAND,
19101                    QPL.PRICING_GROUP_SEQUENCE,
19102                    QPL.LIST_LINE_TYPE_CODE,
19103                    QPL.LIST_PRICE,
19104                    QPL.LIST_PRICE_UOM_CODE,
19105                    QPL.PERCENT_PRICE,
19106                    QPL.PRICING_PHASE_ID,
19107                    QPL.AUTOMATIC_FLAG,
19108                    QPL.OVERRIDE_FLAG,
19109                    QPL.PRINT_ON_INVOICE_FLAG,
19110                    QPL.MODIFIER_LEVEL_CODE,
19111                    QPL.BENEFIT_QTY,
19112                    QPL.BENEFIT_UOM_CODE,
19113 		   QPL.SERVICE_DURATION,  -- service project
19114 		   QPL.SERVICE_PERIOD,  -- service project
19115                    QPL.LIST_LINE_NO,
19116                    QPL.ACCRUAL_FLAG,
19117                    QPL.ACCRUAL_CONVERSION_RATE,
19118                    QPL.ESTIM_ACCRUAL_RATE,
19119                    QPL.RECURRING_FLAG,
19120                    QPL.INCOMPATIBILITY_GRP_CODE,
19121                    QPL.PRICE_BY_FORMULA_ID,
19122                    QPL.PRODUCT_PRECEDENCE,
19123                    QPL.PRIMARY_UOM_FLAG,
19124                    QPA.PRODUCT_UOM_CODE,
19125                    QPA.EXCLUDER_FLAG,
19126                    QPH.ASK_FOR_FLAG,
19127                    QPH.LIST_TYPE_CODE,
19128                    QPH.ROUNDING_FACTOR,
19129                    QPLAT_PROD.LINE_DETAIL_INDEX,
19130                    L_LIST_HEADER_ID           LIST_HEADER_ID,
19131                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
19132                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
19133                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
19134                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
19135                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
19136                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
19137                    QPL.AUTOMATIC_FLAG APPLIED_FLAG, -- shu fix bug 1915355
19138                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
19139                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
19140                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
19141                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
19142                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
19143                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
19144                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
19145                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
19146                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
19147                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE
19148    FROM
19149          qp_npreq_lines_tmp QPLINES,
19150          qp_npreq_line_attrs_tmp QPLAT_PROD,
19151          QP_PRICING_ATTRIBUTES QPA,
19152          qp_npreq_line_attrs_tmp QPLAT_PRIC,
19153          QP_LIST_HEADERS_B QPH,
19154 	 QP_LIST_LINES QPL,
19155          QP_PRICE_REQ_SOURCES QPRS
19156    WHERE QPA.PRICING_PHASE_ID = p_pricing_phase_id
19157    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
19158                               QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
19159    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
19160    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
19161    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
19162    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
19163    AND   (QPLINES.PRICE_FLAG = G_YES
19164              OR
19165              (QPLINES.PRICE_FLAG = G_PHASE
19166               AND
19167               P_FREEZE_OVERRIDE_FLAG = G_YES))
19168    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
19169          AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
19170          AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
19171                OR
19172                QPA.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
19173    AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
19174    AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19175    AND QPLAT_PROD.LINE_INDEX = QPLAT_PRIC.LINE_INDEX
19176    AND QPH.LIST_HEADER_ID = L_LIST_HEADER_ID
19177    AND   QPH.ASK_FOR_FLAG = G_YES
19178    AND   QPA.LIST_HEADER_ID = L_LIST_HEADER_ID
19179 --added for moac -- commented references to security profile
19180 --security will be built into qp_list_headers_b
19181 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
19182 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
19183 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
19184    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
19185    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
19186    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
19187    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
19188    --                                QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
19189    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
19190    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
19191    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19192            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19193            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19194    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
19195            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19196                TRUNC(SYSDATE) )) AND
19197            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19198                TRUNC(SYSDATE) ))
19199    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
19200            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19201                TRUNC(SYSDATE) )) AND
19202            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19203                TRUNC(SYSDATE) ))
19204    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
19205                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
19206    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
19207                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
19208    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19209            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19210            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19211    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
19212           OR
19213           QPH.CURRENCY_CODE IS NULL) -- optional currency
19214    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
19215           OR
19216           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
19217    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
19218    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
19219    AND   QPH.ACTIVE_FLAG = G_YES
19220    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19221    ORDER BY 1,2;
19222 
19223 
19224 CURSOR L_OTHER_LIST_LINE_CUR (L_LINE_INDEX PLS_INTEGER,
19225                               L_LIST_LINE_ID NUMBER,
19226                               P_FREEZE_OVERRIDE_FLAG VARCHAR2)IS
19227 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPL QPH ) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qph qp_list_headers_b_n7) l_other_list_line_cur */
19228                    QPLINES.LINE_INDEX,
19229                    QPL.LIST_LINE_ID,
19230                    QPL.ARITHMETIC_OPERATOR,
19231                    QPL.OPERAND,
19232                    QPL.PRICING_GROUP_SEQUENCE,
19233                    QPL.LIST_LINE_TYPE_CODE,
19234                    QPL.LIST_PRICE,
19235                    QPL.LIST_PRICE_UOM_CODE,
19236                    QPL.PERCENT_PRICE,
19237                    QPL.PRICING_PHASE_ID,
19238                    QPL.AUTOMATIC_FLAG,
19239                    QPL.OVERRIDE_FLAG,
19240                    QPL.PRINT_ON_INVOICE_FLAG,
19241                    QPL.MODIFIER_LEVEL_CODE,
19242                    QPL.BENEFIT_QTY,
19243                    QPL.BENEFIT_UOM_CODE,
19244 		   QPL.SERVICE_DURATION,  -- service project
19245 		   QPL.SERVICE_PERIOD,  -- service project
19246                    QPL.LIST_LINE_NO,
19247                    QPL.ACCRUAL_FLAG,
19248                    QPL.ACCRUAL_CONVERSION_RATE,
19249                    QPL.ESTIM_ACCRUAL_RATE,
19250                    QPL.RECURRING_FLAG,
19251                    QPL.INCOMPATIBILITY_GRP_CODE,
19252                    QPL.PRICE_BY_FORMULA_ID,
19253                    QPL.PRODUCT_PRECEDENCE,
19254                    QPL.PRIMARY_UOM_FLAG,
19255                    QPA.PRODUCT_UOM_CODE,
19256                    QPA.EXCLUDER_FLAG,
19257                    QPH.ASK_FOR_FLAG,
19258                    QPH.LIST_TYPE_CODE,
19259                    QPH.ROUNDING_FACTOR,
19260                    QPLAT_PROD.LINE_DETAIL_INDEX,
19261                    QPL.LIST_HEADER_ID         LIST_HEADER_ID,
19262                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
19263                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
19264                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
19265                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
19266                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
19267                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
19268                    QPL.AUTOMATIC_FLAG APPLIED_FLAG, -- fix bug 1915355
19269                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
19270                    NULL                            PRICING_ATTRIBUTE_CONTEXT,
19271                    NULL                            PRICING_ATTRIBUTE,
19272                    NULL                            PRICING_ATTR_VALUE_FROM,
19273                    NULL                            PRICING_SETUP_VALUE_FROM,
19274                    NULL                            PRICING_SETUP_VALUE_TO,
19275                    NULL                            PRICING_ATTRIBUTE_LEVEL,
19276                    NULL                            PRICING_ATTRIBUTE_TYPE,
19277                    NULL                            PRICING_OPERATOR_TYPE,
19278                    NULL                            PRICING_ATTRIBUTE_DATATYPE
19279    FROM
19280          qp_npreq_lines_tmp QPLINES,
19281          qp_npreq_line_attrs_tmp QPLAT_PROD,
19282          QP_PRICING_ATTRIBUTES QPA,
19283          QP_LIST_HEADERS_B QPH,
19284          QP_LIST_LINES QPL,
19285          QP_PRICE_REQ_SOURCES QPRS
19286    WHERE QPA.PRICING_PHASE_ID = P_PRICING_PHASE_ID
19287    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
19288                                    QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
19289    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
19290    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
19291    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
19292    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
19293    AND   (QPLINES.PRICE_FLAG = G_YES
19294              OR
19295              (QPLINES.PRICE_FLAG = G_PHASE
19296               AND
19297               P_FREEZE_OVERRIDE_FLAG = G_YES))
19298    AND   QPH.LIST_HEADER_ID = QPA.LIST_HEADER_ID
19299 --added for moac -- commented references to security profile
19300 --security will be built into qp_list_headers_b
19301 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
19302 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
19303 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
19304    AND   QPH.ASK_FOR_FLAG = G_YES
19305    AND   QPA.LIST_LINE_ID = L_LIST_LINE_ID
19306    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
19307    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
19308    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
19309    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
19310    --                                QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
19311    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
19312    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
19313    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19314            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19315            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19316     AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
19317            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19318                TRUNC(SYSDATE) )) AND
19319            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19320                TRUNC(SYSDATE) ))
19321    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
19322            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19323                TRUNC(SYSDATE) )) AND
19324            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19325                TRUNC(SYSDATE) ))
19326    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
19327                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
19328    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
19329                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
19330    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19331            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19332            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19333    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
19334           OR
19335           QPH.CURRENCY_CODE IS NULL) -- optional currency
19336    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
19337           OR
19338           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
19339    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
19340    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
19341    AND   QPH.ACTIVE_FLAG = G_YES
19342    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19343   UNION ALL
19344   SELECT /*+ ORDERED USE_NL(QPLATP_PROD QPA QPLAT_PRIC QPH QPL QPRS) index(QPA QP_PRICING_ATTRIBUTES_N5) index(qplat_pric qp_preq_line_attrs_tmp_N2) index(qph qp_list_headers_b_n7) l_other_list_line_cur */
19345                    QPLINES.LINE_INDEX,
19346                    QPL.LIST_LINE_ID,
19347                    QPL.ARITHMETIC_OPERATOR,
19348                    QPL.OPERAND,
19349                    QPL.PRICING_GROUP_SEQUENCE,
19350                    QPL.LIST_LINE_TYPE_CODE,
19351                    QPL.LIST_PRICE,
19352                    QPL.LIST_PRICE_UOM_CODE,
19353                    QPL.PERCENT_PRICE,
19354                    QPL.PRICING_PHASE_ID,
19355                    QPL.AUTOMATIC_FLAG,
19356                    QPL.OVERRIDE_FLAG,
19357                    QPL.PRINT_ON_INVOICE_FLAG,
19358                    QPL.MODIFIER_LEVEL_CODE,
19359                    QPL.BENEFIT_QTY,
19360                    QPL.BENEFIT_UOM_CODE,
19361 		   QPL.SERVICE_DURATION,  -- service project
19362 		   QPL.SERVICE_PERIOD,  -- service project
19363                    QPL.LIST_LINE_NO,
19364                    QPL.ACCRUAL_FLAG,
19365                    QPL.ACCRUAL_CONVERSION_RATE,
19366                    QPL.ESTIM_ACCRUAL_RATE,
19367                    QPL.RECURRING_FLAG,
19368                    QPL.INCOMPATIBILITY_GRP_CODE,
19369                    QPL.PRICE_BY_FORMULA_ID,
19370                    QPL.PRODUCT_PRECEDENCE,
19371                    QPL.PRIMARY_UOM_FLAG,
19372                    QPA.PRODUCT_UOM_CODE,
19373                    QPA.EXCLUDER_FLAG,
19374                    QPH.ASK_FOR_FLAG,
19375                    QPH.LIST_TYPE_CODE,
19376                    QPH.ROUNDING_FACTOR,
19377                    QPLAT_PROD.LINE_DETAIL_INDEX,
19378                    QPL.LIST_HEADER_ID         LIST_HEADER_ID,
19379                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
19380                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
19381                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
19382                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
19383                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
19384                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
19385                    QPL.AUTOMATIC_FLAG APPLIED_FLAG, -- shu fix bug 1915355
19386                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
19387                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
19388                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
19389                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
19390                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
19391                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
19392                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
19393                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
19394                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
19395                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE
19396    FROM
19397          qp_npreq_lines_tmp QPLINES,
19398          qp_npreq_line_attrs_tmp QPLAT_PROD,
19399          QP_PRICING_ATTRIBUTES QPA,
19400          qp_npreq_line_attrs_tmp QPLAT_PRIC,
19401          QP_LIST_HEADERS_B QPH,
19402          QP_LIST_LINES QPL,
19403          QP_PRICE_REQ_SOURCES QPRS
19404    WHERE QPA.PRICING_PHASE_ID = p_pricing_phase_id
19405    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
19406                             QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
19407    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
19408    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
19409    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
19410    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
19411    AND   (QPLINES.PRICE_FLAG = G_YES
19412              OR
19413              (QPLINES.PRICE_FLAG = G_PHASE
19414               AND
19415               P_FREEZE_OVERRIDE_FLAG = G_YES))
19416    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
19417          AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
19418          AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
19419                OR
19420                QPA.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
19421    AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
19422    AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19423    AND QPLAT_PROD.LINE_INDEX = QPLAT_PRIC.LINE_INDEX
19424    AND QPH.LIST_HEADER_ID = QPA.LIST_HEADER_ID
19425 --added for moac -- commented references to security profile
19426 --security will be built into qp_list_headers_b
19427 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
19428 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
19429 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
19430    AND   QPH.ASK_FOR_FLAG = G_YES
19431    AND   QPA.LIST_LINE_ID = L_LIST_LINE_ID
19432    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
19433    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
19434    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
19435    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
19436    --                                QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
19437    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
19438    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
19439    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19440            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19441            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19442    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
19443            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19444                TRUNC(SYSDATE) )) AND
19445            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19446                TRUNC(SYSDATE) ))
19447    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
19448            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19449                TRUNC(SYSDATE) )) AND
19450            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19451                TRUNC(SYSDATE) ))
19452    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
19453                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
19454    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
19455                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
19456    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19457            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19458            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19459    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
19460           OR
19461           QPH.CURRENCY_CODE IS NULL) -- optional currency
19462    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
19463           OR
19464           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
19465    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
19466    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
19467    AND   QPH.ACTIVE_FLAG = G_YES
19468    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19469    ORDER BY 1,2;
19470 
19471 /*
19472 INDX,QP_PREQ_GRP.list_header_search.l_check_no_list_passed,- No Index Used-,NA,NA
19473 */
19474 CURSOR L_CHECK_NO_LIST_PASSED IS
19475 SELECT 'X'
19476 FROM   qp_npreq_lines_tmp A
19477 WHERE  PROCESSED_CODE IN (G_NO_LIST_PASSED,G_STS_LHS_NOT_FOUND)
19478 AND    LINE_TYPE_CODE <> G_ORDER_LEVEL
19479 AND (instr(PROCESS_STATUS,'FREEGOOD')=0); -- bug 2693700
19480 
19481 /*
19482 INDX,QP_PREQ_GRP.list_header_search.l_check_secondary_search,- No Index Used-,NA,NA
19483 */
19484 CURSOR l_check_secondary_search IS
19485 SELECT 'X'
19486 FROM   qp_npreq_lines_tmp
19487 WHERE  PROCESSED_CODE = G_STS_LHS_NOT_FOUND
19488 AND    LINE_TYPE_CODE <> G_ORDER_LEVEL
19489 AND (instr(PROCESS_STATUS,'FREEGOOD')=0); -- bug 2693700
19490 
19491 /*
19492 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
19493 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
19494 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
19495 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
19496 */
19497 CURSOR l_chk_deleted_pbh_cur(p_line_index IN PLS_INTEGER,
19498                              p_pricing_phase_id NUMBER) IS
19499 SELECT/*+ INDEX(qp_npreq_ldets_tmp QP_PREQ_LDETS_TMP_N2) */  'X' --bug 14464004
19500 FROM qp_npreq_ldets_tmp
19501 WHERE created_from_list_line_type = G_PRICE_BREAK_TYPE
19502 AND   line_index = p_line_index
19503 AND   pricing_phase_id = p_pricing_phase_id
19504 AND   pricing_status_code <> G_STATUS_NEW;
19505 
19506 L_LINE_DETAIL_INDEX PLS_INTEGER;
19507 L_OPERAND_CALCULATION_CODE VARCHAR2(30);
19508 L_OPERAND_VALUE VARCHAR2(30);
19509 L_PRICING_GROUP_SEQUENCE PLS_INTEGER;
19510 L_STATUS_CODE VARCHAR2(30);
19511 L_STATUS_TEXT VARCHAR2(240);
19512 L_LIST_HEADER_ID NUMBER;
19513 L_LIST_LINE_ID NUMBER;
19514 l_incomp_list_line_id NUMBER;
19515 l_incomp_return_status VARCHAR2(30);
19516 l_price_list_line_id  NUMBER;
19517 l_sec_price_list_line_id   NUMBER;
19518 l_sec_incomp_list_line_id      NUMBER;
19519 l_sec_incomp_return_status VARCHAR2(30);
19520 L_LIST_LINE_TYPE_CODE VARCHAR2(30);
19521 L_LIST_PRICE NUMBER;
19522 L_LIST_PRICE_UOM_CODE VARCHAR2(30);
19523 L_PERCENT_PRICE NUMBER;
19524 L_RESULT_FLAG VARCHAR(1):='N';
19525 L_LOOP_COUNT PLS_INTEGER := 0;
19526 x_loop_count PLS_INTEGER := 0;
19527 L_ROUTINE VARCHAR2(240):='ROUTINE:QP_PREQ_GRP.LIST_HEADER_SEARCH';
19528 L_SECONDARY_LIST VARCHAR2(30);
19529 E_NO_LIST_FOUND      EXCEPTION;
19530 E_SEARCH_FLAG_ERROR  EXCEPTION;
19531 L_DUMMY VARCHAR2(1);
19532 L_ERROR_LINE_INDEX PLS_INTEGER;
19533 L_HAVE_NOT_VALIDATED VARCHAR2(30):= G_NO;
19534 L_EX_LINE_INDEX PLS_INTEGER:=-1;
19535 L_EX_PRECEDENCE PLS_INTEGER:=99999999;
19536 L_EX_LIST_LINE_ID PLS_INTEGER:=-1;
19537 L_BAD_LIST_LINE_ID NUMBER:=-1;
19538 L_FURTHER_SEARCH_SWITCH VARCHAR2(3):='OFF';
19539 PERFORM_SEC_PL_SEARCH BOOLEAN := FALSE;
19540 QUALIFIER_EXISTS_FLAG BOOLEAN := FALSE;
19541 v_list_header_id	       NUMBER;
19542 v_sec_list_header_id	  NUMBER;
19543 v_sec_list_line_id	       NUMBER;
19544 l_pricing_effective_date DATE;
19545 q BINARY_INTEGER:=NULL;
19546 l_line_quantity            NUMBER;
19547 l_line_uom_code            VARCHAR2(30);
19548 x_list_line_id             NUMBER;
19549 l_return_status            VARCHAR2(240);
19550 x_return_status            VARCHAR2(240);
19551 x_return_status_txt        VARCHAR2(240);
19552 l_error_status_code        VARCHAR2(30);
19553 l_error_status_txt         VARCHAR2(240);
19554 K PLS_INTEGER:=1;
19555 M PLS_INTEGER:=1;
19556 nROWS                      CONSTANT NUMBER := 5000;
19557 
19558 lq_line_index              NUMBER := -9999;
19559 lq_list_line_id            NUMBER := -9999;
19560 
19561 E_ROUTINE_ERRORS       EXCEPTION;
19562 BEGIN
19563 
19564 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19565 engine_debug('IN '|| L_ROUTINE);
19566 
19567 END IF;
19568 
19569 x_status_code := FND_API.G_RET_STS_SUCCESS;
19570 
19571 IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN -- Only for modifiers ask for list headers/lines
19572 
19573 IF (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES) THEN -- price book
19574 -- Validated List Headers / List Lines
19575 
19576 qp_debug_util.tstart('L_VALIDATED_CUR_EXT','Cursor Loop L_VALIDATED_CUR exterior');
19577 
19578 FOR J IN L_VALIDATED_CUR LOOP
19579 
19580 
19581      IF (J.ATTRIBUTE = G_PROMOTION_ATTRIBUTE) THEN
19582 
19583       lq_line_index              := -9999;
19584       lq_list_line_id            := -9999;
19585 
19586       L_LIST_HEADER_ID := TO_NUMBER(J.VALUE_FROM);
19587       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19588       ENGINE_DEBUG('Asked For List Header ID:'||L_LIST_HEADER_ID || 'Line : ' || J.LINE_INDEX);
19589       END IF;
19590 
19591            qp_debug_util.tstart('L_OTHER_LIST_CUR','Cursor Loop L_OTHER_LIST_CUR');
19592 
19593 
19594            FOR K IN L_OTHER_LIST_CUR (J.LINE_INDEX,
19595                                       L_LIST_HEADER_ID,
19596                                       P_FREEZE_OVERRIDE_FLAG)
19597            LOOP
19598             IF (lq_line_index <> j.line_index OR lq_list_line_id <> k.list_line_id) THEN
19599 
19600               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19601               engine_debug('List line id selected from asked for prom l_other_list_cur : '||K.list_line_id );
19602               END IF;
19603               L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
19604 		qp_debug_util.tstart('INSERT_LDETS','Inserting the ldets INSERT_LDETS');
19605               INSERT_LDETS(P_LINE_DETAIL_INDEX   => L_LINE_DETAIL_INDEX,
19606                    P_LINE_DETAIL_TYPE_CODE       => 'NULL',
19607                    P_LINE_INDEX                  => J.LINE_INDEX,
19608                    P_CREATED_FROM_LIST_HEADER_ID => L_LIST_HEADER_ID,
19609                    P_CREATED_FROM_LIST_LINE_ID   => K.LIST_LINE_ID,
19610                    P_CREATED_FROM_LIST_TYPE_CODE => K.LIST_TYPE_CODE,
19611                    P_CREATED_FROM_SQL            => 'LHS_MODIFIER ',
19612                    P_PRICING_PHASE_ID            => K.PRICING_PHASE_ID,
19613                    P_CREATED_FROM_LIST_LINE_TYPE => K.LIST_LINE_TYPE_CODE,
19614                    P_PRICING_GROUP_SEQUENCE      => K.PRICING_GROUP_SEQUENCE,
19615                    P_OPERAND_CALCULATION_CODE    => K.ARITHMETIC_OPERATOR,
19616                    P_OPERAND_VALUE               => K.OPERAND,
19617                    P_PRICING_STATUS_CODE         => G_STATUS_NEW,
19618                    P_PROCESSED_FLAG              => G_NOT_PROCESSED,
19619                    P_AUTOMATIC_FLAG              => K.AUTOMATIC_FLAG,
19620                    P_APPLIED_FLAG                => K.APPLIED_FLAG, -- fix bug 1915355
19621                    P_OVERRIDE_FLAG               => K.OVERRIDE_FLAG,
19622                    P_PRINT_ON_INVOICE_FLAG       => K.PRINT_ON_INVOICE_FLAG,
19623                    P_MODIFIER_LEVEL_CODE         => K.MODIFIER_LEVEL_CODE,
19624                    P_BENEFIT_QTY                 => K.BENEFIT_QTY,
19625                    P_BENEFIT_UOM_CODE            => K.BENEFIT_UOM_CODE,
19626 		   P_SERVICE_DURATION            => K.SERVICE_DURATION, -- service project
19627 		   P_SERVICE_PERIOD              => K.SERVICE_PERIOD, -- service project
19628                    P_LIST_LINE_NO                => K.LIST_LINE_NO,
19629                    P_ACCRUAL_FLAG                => K.ACCRUAL_FLAG,
19630                    P_ACCRUAL_CONVERSION_RATE     => K.ACCRUAL_CONVERSION_RATE,
19631                    P_ESTIM_ACCRUAL_RATE          => K.ESTIM_ACCRUAL_RATE,
19632                    P_RECURRING_FLAG              => K.RECURRING_FLAG,
19633                    P_INCOMPATABLILITY_GRP_CODE   => K.INCOMPATIBILITY_GRP_CODE,
19634                    P_PRICE_FORMULA_ID            => K.PRICE_BY_FORMULA_ID,
19635                    P_PRODUCT_PRECEDENCE          => K.PRODUCT_PRECEDENCE,
19636                    P_PRIMARY_UOM_FLAG            => K.PRIMARY_UOM_FLAG,
19637                    P_ASK_FOR_FLAG                => K.ASK_FOR_FLAG,
19638                    P_ROUNDING_FACTOR             => K.ROUNDING_FACTOR,
19639                    X_STATUS_CODE                 => L_STATUS_CODE,
19640                    X_STATUS_TEXT                 => L_STATUS_TEXT);
19641 		qp_debug_util.tstop('INSERT_LDETS');
19642                    lq_line_index := j.line_index;
19643                    lq_list_line_id := k.list_line_id;
19644 
19645                END IF;
19646 
19647                --INSERT PRODUCT ATTRIBUTES
19648                G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19649                G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19650                G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRODUCT_ATTRIBUTE_LEVEL;
19651                G_ATTRIBUTE_TYPE_tbl(M)          := K.PRODUCT_ATTRIBUTE_TYPE;
19652                G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19653                G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19654                G_CONTEXT_tbl(M)                 := K.PRODUCT_ATTRIBUTE_CONTEXT;
19655                G_ATTRIBUTE_tbl(M)               := K.PRODUCT_ATTRIBUTE;
19656                G_VALUE_FROM_tbl(M)              := K.PRODUCT_ATTR_VALUE_FROM;
19657                G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRODUCT_OPERATOR_TYPE;
19658                G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19659                G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19660                G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19661                G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19662                G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19663                G_VALIDATED_FLAG_tbl(M)          := NULL;
19664                G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19665                G_SETUP_VALUE_FROM_tbl(M)        := NULL;
19666                G_SETUP_VALUE_TO_tbl(M)          := NULL;
19667                G_GROUPING_NUMBER_tbl(M)         := NULL;
19668                G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19669                G_DATATYPE_tbl(M)                := NULL;
19670                G_QUALIFIER_TYPE_TBL(M)          := NULL;
19671                G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19672                G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19673                G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19674                G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19675                G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19676                M:= M+1;
19677 
19678 
19679                IF (K.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL) THEN
19680                 --INSERT PRICING ATTRIBUTES
19681                 G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19682                 G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19683                 G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRICING_ATTRIBUTE_LEVEL;
19684                 G_ATTRIBUTE_TYPE_tbl(M)          := K.PRICING_ATTRIBUTE_TYPE;
19685                 G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19686                 G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19687                 G_CONTEXT_tbl(M)                 := K.PRICING_ATTRIBUTE_CONTEXT;
19688                 G_ATTRIBUTE_tbl(M)               := K.PRICING_ATTRIBUTE;
19689                 G_VALUE_FROM_tbl(M)              := K.PRICING_ATTR_VALUE_FROM;
19690                 G_SETUP_VALUE_FROM_tbl(M)        := K.PRICING_SETUP_VALUE_FROM;
19691                 G_SETUP_VALUE_TO_tbl(M)          := K.PRICING_SETUP_VALUE_TO;
19692                 G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRICING_OPERATOR_TYPE;
19693                 G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19694                 G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19695                 G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19696                 G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19697                 G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19698                 G_VALIDATED_FLAG_tbl(M)          := NULL;
19699                 G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19700                 G_GROUPING_NUMBER_tbl(M)         := NULL;
19701                 G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19702                 G_DATATYPE_tbl(M)                := K.PRICING_ATTRIBUTE_DATATYPE;
19703                 G_QUALIFIER_TYPE_TBL(M)          := NULL;
19704                 G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19705                 G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19706                 G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19707                 G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19708                 G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19709                 M:= M+1;
19710                END IF;
19711                l_loop_count := l_loop_count +1;
19712            END LOOP;
19713 
19714 	   qp_debug_util.tstop('L_OTHER_LIST_CUR');
19715 
19716       ELSE -- Asked for list line
19717 
19718         lq_line_index              := -9999;
19719         lq_list_line_id            := -9999;
19720 
19721         L_LIST_LINE_ID := to_number(J.VALUE_FROM);
19722         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19723         ENGINE_DEBUG('Asked For List Line ID:'||L_LIST_LINE_ID || 'Line : ' || J.LINE_INDEX);
19724         ENGINE_DEBUG('Pricing Phase Id:'||p_pricing_phase_id );
19725 
19726         END IF;
19727 
19728 	   qp_debug_util.tstart('L_OTHER_LIST_LINE_CUR','Cursor Loop L_OTHER_LIST_LINE_CUR');
19729 
19730            FOR K IN L_OTHER_LIST_LINE_CUR (J.LINE_INDEX,
19731                                            L_LIST_LINE_ID,
19732                                            P_FREEZE_OVERRIDE_FLAG)
19733            LOOP
19734             IF (lq_line_index <> j.line_index OR lq_list_line_id <> k.list_line_id) THEN
19735              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19736              engine_debug('List line id selected from asked for prom l_other_list_cur : '||K.list_line_id );
19737              END IF;
19738               L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
19739 		qp_debug_util.tstart('INSERT_LDETS','Inserting the ldets INSERT_LDETS');
19740               INSERT_LDETS(P_LINE_DETAIL_INDEX   => L_LINE_DETAIL_INDEX,
19741                    P_LINE_DETAIL_TYPE_CODE       => 'NULL',
19742                    P_LINE_INDEX                  => J.LINE_INDEX,
19743                    P_CREATED_FROM_LIST_HEADER_ID => K.LIST_HEADER_ID,
19744                    P_CREATED_FROM_LIST_LINE_ID   => K.LIST_LINE_ID,
19745                    P_CREATED_FROM_LIST_TYPE_CODE => K.LIST_TYPE_CODE,
19746                    P_CREATED_FROM_SQL            => 'LHS_MODIFIER ',
19747                    P_PRICING_PHASE_ID            => K.PRICING_PHASE_ID,
19748                    P_CREATED_FROM_LIST_LINE_TYPE => K.LIST_LINE_TYPE_CODE,
19749                    P_PRICING_GROUP_SEQUENCE      => K.PRICING_GROUP_SEQUENCE,
19750                    P_OPERAND_CALCULATION_CODE    => K.ARITHMETIC_OPERATOR,
19751                    P_OPERAND_VALUE               => K.OPERAND,
19752                    P_PRICING_STATUS_CODE         => G_STATUS_NEW,
19753                    P_PROCESSED_FLAG              => G_NOT_PROCESSED,
19754                    P_AUTOMATIC_FLAG              => K.AUTOMATIC_FLAG,
19755                    P_APPLIED_FLAG                => K.APPLIED_FLAG,
19756                    P_OVERRIDE_FLAG               => K.OVERRIDE_FLAG,
19757                    P_PRINT_ON_INVOICE_FLAG       => K.PRINT_ON_INVOICE_FLAG,
19758                    P_MODIFIER_LEVEL_CODE         => K.MODIFIER_LEVEL_CODE,
19759                    P_BENEFIT_QTY                 => K.BENEFIT_QTY,
19760                    P_BENEFIT_UOM_CODE            => K.BENEFIT_UOM_CODE,
19761 		   P_SERVICE_DURATION            => K.SERVICE_DURATION, -- service project
19762 		   P_SERVICE_PERIOD              => K.SERVICE_PERIOD, -- service project
19763                    P_LIST_LINE_NO                => K.LIST_LINE_NO,
19764                    P_ACCRUAL_FLAG                => K.ACCRUAL_FLAG,
19765                    P_ACCRUAL_CONVERSION_RATE     => K.ACCRUAL_CONVERSION_RATE,
19766                    P_ESTIM_ACCRUAL_RATE          => K.ESTIM_ACCRUAL_RATE,
19767                    P_RECURRING_FLAG              => K.RECURRING_FLAG,
19768                    P_INCOMPATABLILITY_GRP_CODE   => K.INCOMPATIBILITY_GRP_CODE,
19769                    P_PRICE_FORMULA_ID            => K.PRICE_BY_FORMULA_ID,
19770                    P_PRODUCT_PRECEDENCE          => K.PRODUCT_PRECEDENCE,
19771                    P_PRIMARY_UOM_FLAG            => K.PRIMARY_UOM_FLAG,
19772                    P_ASK_FOR_FLAG                => K.ASK_FOR_FLAG,
19773                    P_ROUNDING_FACTOR             => K.ROUNDING_FACTOR,
19774                    X_STATUS_CODE                 => L_STATUS_CODE,
19775                    X_STATUS_TEXT                 => L_STATUS_TEXT);
19776 		qp_debug_util.tstop('INSERT_LDETS');
19777                    lq_line_index := j.line_index;
19778                    lq_list_line_id := k.list_line_id;
19779 
19780                END IF;
19781 
19782                --INSERT PRODUCT ATTRIBUTES
19783                G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19784                G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19785                G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRODUCT_ATTRIBUTE_LEVEL;
19786                G_ATTRIBUTE_TYPE_tbl(M)          := K.PRODUCT_ATTRIBUTE_TYPE;
19787                G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19788                G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19789                G_CONTEXT_tbl(M)                 := K.PRODUCT_ATTRIBUTE_CONTEXT;
19790                G_ATTRIBUTE_tbl(M)               := K.PRODUCT_ATTRIBUTE;
19791                G_VALUE_FROM_tbl(M)              := K.PRODUCT_ATTR_VALUE_FROM;
19792                G_VALUE_TO_tbl(M)                := K.PRODUCT_ATTR_VALUE_TO;
19793                G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRODUCT_OPERATOR_TYPE;
19794                G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19795                G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19796                G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19797                G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19798                G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19799                G_VALIDATED_FLAG_tbl(M)          := NULL;
19800                G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19801                G_SETUP_VALUE_FROM_tbl(M)        := NULL;
19802                G_SETUP_VALUE_TO_tbl(M)          := NULL;
19803                G_GROUPING_NUMBER_tbl(M)         := NULL;
19804                G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
19805                G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19806                G_DATATYPE_tbl(M)                := NULL;
19807                G_QUALIFIER_TYPE_TBL(M)          := NULL;
19808                G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19809                G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19810                G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19811                G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19812                G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19813                M:= M+1;
19814 
19815 
19816                IF (K.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL) THEN
19817                 --INSERT PRICING ATTRIBUTES
19818                 G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19819                 G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19820                 G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRICING_ATTRIBUTE_LEVEL;
19821                 G_ATTRIBUTE_TYPE_tbl(M)          := K.PRICING_ATTRIBUTE_TYPE;
19822                 G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19823                 G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19824                 G_CONTEXT_tbl(M)                 := K.PRICING_ATTRIBUTE_CONTEXT;
19825                 G_ATTRIBUTE_tbl(M)               := K.PRICING_ATTRIBUTE;
19826                 G_VALUE_FROM_tbl(M)              := K.PRICING_ATTR_VALUE_FROM;
19827                 G_SETUP_VALUE_FROM_tbl(M)        := K.PRICING_SETUP_VALUE_FROM;
19828                 G_SETUP_VALUE_TO_tbl(M)          := K.PRICING_SETUP_VALUE_TO;
19829                 G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRICING_OPERATOR_TYPE;
19830                 G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19831                 G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19832                 G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19833                 G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19834                 G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19835                 G_VALIDATED_FLAG_tbl(M)          := NULL;
19836                 G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19837                 G_GROUPING_NUMBER_tbl(M)         := NULL;
19838                 G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
19839                 G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19840                 G_DATATYPE_tbl(M)                := K.PRICING_ATTRIBUTE_DATATYPE;
19841                 G_QUALIFIER_TYPE_TBL(M)          := NULL;
19842                 G_VALUE_TO_tbl(M)                := NULL;
19843                 G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19844                 G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19845                 G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19846                 G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19847                 G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19848                 M:= M+1;
19849                END IF;
19850                l_loop_count := l_loop_count +1;
19851            END LOOP;
19852 
19853            qp_debug_util.tstop('L_OTHER_LIST_LINE_CUR');
19854 
19855 
19856       END IF; -- IF j.attribute = G_PROMOTION_ATTRIBUTE
19857 
19858            IF (M>1) THEN
19859 		qp_debug_util.tstart('INSERT_LINE_ATTRS2','Inserting the line attrs INSERT_LINE_ATTRS2');
19860             INSERT_LINE_ATTRS2
19861             (p_LINE_INDEX_tbl                =>G_LINE_INDEX_tbl,
19862              p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_tbl,
19863              p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
19864              p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
19865              p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl,
19866              p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl,
19867              p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
19868              p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
19869              p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
19870              p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
19871              p_VALUE_TO_tbl                  =>G_VALUE_TO_tbl,
19872              p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
19873              p_GROUPING_NUMBER_tbl           => G_GROUPING_NUMBER_tbl,
19874              p_NO_QUALIFIERS_IN_GRP_tbl      =>G_NO_QUALIFIERS_IN_GRP_tbl,
19875              p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
19876              p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
19877              p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
19878              p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
19879              p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
19880              p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
19881              p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
19882              p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
19883              p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
19884              p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
19885              p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
19886              p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
19887              p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
19888              p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
19889              p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
19890              p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
19891              x_status_code                   =>l_status_code,
19892              x_status_text                   =>l_status_text);
19893 		qp_debug_util.tstop('INSERT_LINE_ATTRS2');
19894            IF l_status_code = FND_API.G_RET_STS_ERROR THEN
19895                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19896            END IF;
19897 
19898            END IF;
19899 	   M:=1;
19900 
19901 END LOOP;
19902 qp_debug_util.tstop('L_VALIDATED_CUR_EXT');
19903 -- End Validated List Headers / List Lines
19904 END IF; -- if not price book
19905 
19906 ELSE -- is a price list phase
19907 lq_line_index              := -9999;
19908 lq_list_line_id            := -9999;
19909 
19910 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19911   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19912   engine_debug('cursor open l_list_cur_currency-multi-currency TRUE');
19913 
19914   END IF;
19915 OPEN l_list_cur_currency;
19916 qp_debug_util.tstart('L_LIST_CUR_CURRENCY','Cursor Loop l_list_cur_currency');
19917 else -- vivek, multi currency not installed, not used
19918 OPEN l_list_cur;
19919 qp_debug_util.tstart('L_LIST_CUR','Cursor Loop l_list_cur');
19920 end if; -- vivek, multi currency installed
19921 qp_debug_util.tstart('L_LIST_CUR/CURRENCY_FETCH','Cursor Loop L_LIST_CUR/CURRENCY_FETCH');
19922 LOOP
19923   G_LINE_INDEX_TBL_P.delete;
19924   G_LIST_LINE_ID_TBL_P.delete;
19925   G_LIST_HEADER_ID_TBL_P.delete;
19926   G_OPER_CALCULATION_CODE_TBL_P.delete;
19927   G_OPERAND_VALUE_TBL_P.delete;
19928   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
19929   G_LIST_LINE_TYPE_TBL_P.delete;
19930   G_PRICING_PHASE_ID_TBL_P.delete;
19931   G_AUTOMATIC_FLAG_TBL_P.delete;
19932   G_INCOMP_GRP_CODE_TBL_P.delete;
19933   G_PRICE_FORMULA_ID_TBL_P.delete;
19934   G_PRODUCT_PRECEDENCE_TBL_P.delete;
19935   G_PRIMARY_UOM_FLAG_TBL_P.delete;
19936   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
19937   G_LIST_LINE_NO_TBL_P.delete;
19938   G_PRODUCT_UOM_CODE_TBL_P.delete;
19939   G_EXCLUDER_FLAG_TBL_P.delete;
19940   G_LIST_TYPE_CODE_TBL_P.delete;
19941   G_ROUNDING_FACTOR_TBL_P.delete;
19942   G_CONTEXT_TBL_P.delete;
19943   G_ATTRIBUTE_TBL_P.delete;
19944   G_VALUE_FROM_TBL_P.delete;
19945   G_ATTRIBUTE_LEVEL_TBL_P.delete;
19946   G_ATTRIBUTE_TYPE_TBL_P.delete;
19947   G_APPLIED_FLAG_TBL_P.delete;
19948   G_CONTEXT_TBL_PR.delete;
19949   G_ATTRIBUTE_TBL_PR.delete;
19950   G_VALUE_FROM_TBL_PR.delete;
19951   G_SETUP_VALUE_FROM_TBL_PR.delete;
19952   G_SETUP_VALUE_TO_TBL_PR.delete;
19953   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
19954   G_ATTRIBUTE_TYPE_TBL_PR.delete;
19955   G_OPERATOR_TYPE_TBL_PR.delete;
19956   G_DATATYPE_TBL_PR.delete;
19957   G_BREAK_UOM_TBL_P.delete; /* Proration */
19958   G_BREAK_CONTEXT_TBL_P.delete; /* Proration */
19959   G_BREAK_ATTRIBUTE_TBL_P.delete; /* Proration */
19960   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;    -- Added for TCA
19961   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
19962 
19963 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19964   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19965   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - delete tables');
19966   END IF;
19967   G_CURRENCY_DETAIL_ID_TBL_P.delete; /* sunilpandey */
19968   G_CURRENCY_HEADER_ID_TBL_P.delete; /* vivek */
19969   G_SELLING_ROUNDING_TBL_P.delete; /* vivek */
19970   G_ORDER_CURRENCY_TBL_P.delete; /* vivek */
19971   G_PRICING_EFFECTIVE_DATE_TBL_P.delete; /* vivek */
19972   G_BASE_CURRENCY_CODE_TBL_P.delete; /* vivek */
19973 end if; /* vivek */
19974 
19975 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19976   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19977   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - bulk fetch');
19978 
19979   END IF;
19980 
19981 FETCH l_list_cur_currency BULK COLLECT INTO
19982     G_LINE_INDEX_TBL_P
19983   , G_LIST_LINE_ID_TBL_P
19984   , G_OPER_CALCULATION_CODE_TBL_P
19985   , G_OPERAND_VALUE_TBL_P
19986   , G_PRICING_GROUP_SEQUENCE_TBL_P
19987   , G_LIST_LINE_TYPE_TBL_P
19988   , G_PRICING_PHASE_ID_TBL_P
19989   , G_AUTOMATIC_FLAG_TBL_P
19990   , G_INCOMP_GRP_CODE_TBL_P
19991   , G_PRICE_FORMULA_ID_TBL_P
19992   , G_PRODUCT_PRECEDENCE_TBL_P
19993   , G_PRIMARY_UOM_FLAG_TBL_P
19994   , G_MODIFIER_LEVEL_CODE_TBL_P
19995   , G_LIST_LINE_NO_TBL_P
19996   , G_PRODUCT_UOM_CODE_TBL_P
19997   , G_EXCLUDER_FLAG_TBL_P
19998   , G_LIST_TYPE_CODE_TBL_P
19999   , G_ROUNDING_FACTOR_TBL_P
20000   , G_LIST_HEADER_ID_TBL_P
20001   , G_CONTEXT_TBL_P
20002   , G_ATTRIBUTE_TBL_P
20003   , G_VALUE_FROM_TBL_P
20004   , G_ATTRIBUTE_LEVEL_TBL_P
20005   , G_ATTRIBUTE_TYPE_TBL_P
20006   , G_APPLIED_FLAG_TBL_P
20007   , G_CONTEXT_TBL_PR
20008   , G_ATTRIBUTE_TBL_PR
20009   , G_VALUE_FROM_TBL_PR
20010   , G_SETUP_VALUE_FROM_TBL_PR
20011   , G_SETUP_VALUE_TO_TBL_PR
20012   , G_ATTRIBUTE_LEVEL_TBL_PR
20013   , G_ATTRIBUTE_TYPE_TBL_PR
20014   , G_OPERATOR_TYPE_TBL_PR
20015   , G_DATATYPE_TBL_PR
20016   , G_CURRENCY_DETAIL_ID_TBL_P /* sunilpandey */
20017   , G_CURRENCY_HEADER_ID_TBL_P /* vivek */
20018   , G_SELLING_ROUNDING_TBL_P /* vivek */
20019   , G_ORDER_CURRENCY_TBL_P /* vivek */
20020   , G_PRICING_EFFECTIVE_DATE_TBL_P /* vivek */
20021   , G_BASE_CURRENCY_CODE_TBL_P
20022   , G_BREAK_UOM_TBL_P /* Proration */
20023   , G_BREAK_CONTEXT_TBL_P /* Proration */
20024   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
20025   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
20026      LIMIT nROWS;/* vivek */
20027    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
20028 else -- vivek, multi currency not installed, not used
20029 FETCH l_list_cur BULK COLLECT INTO
20030     G_LINE_INDEX_TBL_P
20031   , G_LIST_LINE_ID_TBL_P
20032   , G_OPER_CALCULATION_CODE_TBL_P
20033   , G_OPERAND_VALUE_TBL_P
20034   , G_PRICING_GROUP_SEQUENCE_TBL_P
20035   , G_LIST_LINE_TYPE_TBL_P
20036   , G_PRICING_PHASE_ID_TBL_P
20037   , G_AUTOMATIC_FLAG_TBL_P
20038   , G_INCOMP_GRP_CODE_TBL_P
20039   , G_PRICE_FORMULA_ID_TBL_P
20040   , G_PRODUCT_PRECEDENCE_TBL_P
20041   , G_PRIMARY_UOM_FLAG_TBL_P
20042   , G_MODIFIER_LEVEL_CODE_TBL_P
20043   , G_LIST_LINE_NO_TBL_P
20044   , G_PRODUCT_UOM_CODE_TBL_P
20045   , G_EXCLUDER_FLAG_TBL_P
20046   , G_LIST_TYPE_CODE_TBL_P
20047   , G_ROUNDING_FACTOR_TBL_P
20048   , G_LIST_HEADER_ID_TBL_P
20049   , G_CONTEXT_TBL_P
20050   , G_ATTRIBUTE_TBL_P
20051   , G_VALUE_FROM_TBL_P
20052   , G_ATTRIBUTE_LEVEL_TBL_P
20053   , G_ATTRIBUTE_TYPE_TBL_P
20054   , G_APPLIED_FLAG_TBL_P
20055   , G_CONTEXT_TBL_PR
20056   , G_ATTRIBUTE_TBL_PR
20057   , G_VALUE_FROM_TBL_PR
20058   , G_SETUP_VALUE_FROM_TBL_PR
20059   , G_SETUP_VALUE_TO_TBL_PR
20060   , G_ATTRIBUTE_LEVEL_TBL_PR
20061   , G_ATTRIBUTE_TYPE_TBL_PR
20062   , G_OPERATOR_TYPE_TBL_PR
20063   , G_DATATYPE_TBL_PR
20064   , G_BREAK_UOM_TBL_P /* Proration */
20065   , G_BREAK_CONTEXT_TBL_P /* Proration */
20066   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
20067   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
20068     LIMIT nROWS;
20069    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
20070 end if; -- vivek, multi currency installed
20071 
20072  IF (G_LINE_INDEX_TBL_P.COUNT > 0 ) THEN
20073 
20074   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
20075 
20076             IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
20077 
20078               L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
20079 
20080                     G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
20081                     G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
20082                     G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
20083                     G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
20084                     G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
20085                     G_PRICING_STATUS_TEXT_LD_TBL(M)       :='INSERTED IN L_LIST_CUR';
20086                     G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
20087                     G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
20088                     G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
20089                     G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I); --[julin] for price book
20090                     G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
20091                     G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
20092                     G_CREATED_FROM_SQL_TBL(M)             :='INSERTED IN L_LIST_CUR';
20093                     G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
20094                     G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
20095                     G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
20096                     G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
20097                     G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
20098                     G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
20099                     G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
20100                     G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
20101                     G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20102                     G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20103                     G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
20104                     G_ROUNDING_FACTOR_TBL(M)              :=G_ROUNDING_FACTOR_TBL_P(I);
20105                     G_BREAK_UOM_TBL(M)                    :=G_BREAK_UOM_TBL_P(I); /* Proration */
20106                     G_BREAK_CONTEXT_TBL(M)                :=G_BREAK_CONTEXT_TBL_P(I); /* Proration */
20107                     G_BREAK_ATTRIBUTE_TBL(M)              :=G_BREAK_ATTRIBUTE_TBL_P(I); /* Proration */
20108                if G_MULTI_CURRENCY_PROFILE = 'Y' and
20109                   G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20110   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20111   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - populate tables');
20112   END IF;
20113                     G_CURRENCY_DETAIL_ID_TBL(M)          := G_CURRENCY_DETAIL_ID_TBL_P(I); /* sunilpandey */
20114                     G_CURRENCY_HEADER_ID_TBL(M)          := G_CURRENCY_HEADER_ID_TBL_P(I); /* vivek */
20115                     G_SELLING_ROUNDING_TBL(M)     := G_SELLING_ROUNDING_TBL_P(I); /* vivek */
20116                     G_ORDER_CURRENCY_TBL(M)              := G_ORDER_CURRENCY_TBL_P(I); /* vivek */
20117                     G_PRICING_EFFECTIVE_DATE_TBL(M)      := G_PRICING_EFFECTIVE_DATE_TBL_P(I); /* vivek */
20118                     G_BASE_CURRENCY_CODE_TBL(M)          := G_BASE_CURRENCY_CODE_TBL_P(I); /* vivek */
20119                end if;  /* vivek */
20120                     M := M + 1;
20121                     lq_line_index := g_line_index_tbl_p(I);
20122                     lq_list_line_id := g_list_line_id_tbl_p(I);
20123                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20124                     engine_debug('Rounding Factor: ' || g_rounding_factor_tbl_p(i));
20125                     END IF;
20126             END IF;
20127 
20128                   --INSERT PRODUCT ATTRIBUTES
20129                    G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
20130                    G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
20131                    G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
20132                    G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_P(I);
20133                    G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_P(I);
20134                    G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_P(I);
20135                    G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
20136                    G_VALIDATED_FLAG_tbl(K)          :=G_NO;
20137                    G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
20138                    G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
20139                    G_PRICING_ATTR_FLAG_tbl(K)       :=G_NO;
20140                    G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
20141                    G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
20142                    G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
20143                    G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
20144                    G_SETUP_VALUE_TO_tbl(K)          :=NULL;
20145                    G_GROUPING_NUMBER_tbl(K)         :=NULL;
20146                    G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_CUR';
20147                    G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
20148                    G_DATATYPE_tbl(K)                :=NULL;
20149                    G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
20150                    G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
20151                    G_QUALIFIER_TYPE_TBL(K)          :=NULL;
20152                    G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
20153                    G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
20154                    G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
20155                    G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20156                    G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20157                    K:= K+1;
20158 
20159                    --INSERT PRICING ATTRIBUTES
20160                    IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
20161                     G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
20162                     G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
20163                     G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
20164                     G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
20165                     G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
20166                     G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
20167                     G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
20168                     G_VALIDATED_FLAG_tbl(K)          :=G_NO;
20169                     G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
20170                     G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
20171                     G_PRICING_ATTR_FLAG_tbl(K)       :=NULL;
20172                     G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
20173                     G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
20174                     G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
20175                     G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
20176                     G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
20177                     G_GROUPING_NUMBER_tbl(K)         :=NULL;
20178                     G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_CUR';
20179                     G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
20180                     G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
20181                     G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
20182                     G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
20183                     G_QUALIFIER_TYPE_TBL(K)          :=NULL;
20184                     G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
20185                     G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
20186                     G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
20187                     G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20188                     G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20189                     K:= K+1;
20190                   END IF;
20191 
20192                 l_loop_count := l_loop_count +1;
20193                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20194                 engine_debug('Primary List Validated Search Count : ' || l_loop_count);
20195                 END IF;
20196    END LOOP;
20197  END IF ;
20198 
20199 END LOOP;
20200 qp_debug_util.tstop('L_LIST_CUR/CURRENCY_FETCH');
20201 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20202   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20203   engine_debug('cursor close l_list_cur_currency-multi-currency TRUE');
20204   END IF;
20205 CLOSE l_list_cur_currency;
20206 
20207 qp_debug_util.tstop('L_LIST_CUR_CURRENCY');
20208 else -- vivek, multi currency not installed, not used
20209 CLOSE l_list_cur;
20210 qp_debug_util.tstop('L_LIST_CUR');
20211 end if; -- vivek, multi currency installed
20212 
20213 END IF; -- p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID
20214 
20215 IF M > 1 THEN
20216 qp_debug_util.tstart('INSERT_LDETS_PRICE_LIST_MULT/NON_MULTI','Inserting INSERT_LDETS_PRICE_LIST_MULT/NON_MULTI');
20217  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20218   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20219   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - insert_ldets2');
20220   END IF;
20221   INSERT_LDETS_PRICE_LIST_MULT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
20222                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
20223                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
20224                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
20225                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
20226                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
20227                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
20228                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
20229                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
20230                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
20231                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
20232                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
20233                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
20234                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
20235                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
20236                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
20237                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
20238                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
20239                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
20240                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
20241                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
20242                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
20243                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
20244                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
20245                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
20246                  P_CURRENCY_DETAIL_ID          =>G_CURRENCY_DETAIL_ID_TBL, /* sunilpandey */
20247                  P_CURRENCY_HEADER_ID          =>G_CURRENCY_HEADER_ID_TBL, /* vivek */
20248                  P_SELLING_ROUNDING_FACTOR          =>G_SELLING_ROUNDING_TBL, /* vivek */
20249                  P_ORDER_CURRENCY              =>G_ORDER_CURRENCY_TBL, /* vivek */
20250                  P_PRICING_EFFECTIVE_DATE      =>G_PRICING_EFFECTIVE_DATE_TBL, /* vivek */
20251                  P_BASE_CURRENCY_CODE          =>G_BASE_CURRENCY_CODE_TBL, /* vivek */
20252                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
20253                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
20254                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
20255                  x_status_code                  =>l_status_code,
20256                  x_status_text                  =>l_status_text
20257                  );
20258  else -- vivek, multi currency not installed, not used
20259   INSERT_LDETS_PRICE_LIST_PVT(
20260                  p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
20261                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
20262                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
20263                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
20264                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
20265                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
20266                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
20267                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
20268                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
20269                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
20270                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
20271                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
20272                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
20273                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
20274                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
20275                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
20276                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
20277                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
20278                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
20279                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
20280                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
20281                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
20282                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
20283                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
20284                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
20285                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
20286                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
20287                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
20288                  x_status_code                  =>l_status_code,
20289                  x_status_text                  =>l_status_text
20290                  );
20291  end if; -- vivek, multi currency installed
20292  qp_debug_util.tstop('INSERT_LDETS_PRICE_LIST_MULT/NON_MULTI');
20293 END IF;
20294 M := 1;
20295 
20296 
20297 
20298   IF (K>1) THEN
20299   qp_debug_util.tstart('INSERT_PRICE_LIST_ATTRS','Inserting INSERT_PRICE_LIST_ATTRS');
20300    INSERT_PRICE_LIST_ATTRS
20301    (    p_LINE_INDEX_tbl                =>G_LINE_INDEX_tbl,
20302         p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_tbl,
20303         p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
20304         p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
20305         p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl,
20306         p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl,
20307         p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
20308         p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
20309         p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
20310         p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
20311         p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
20312         p_GROUPING_NUMBER_tbl           => G_GROUPING_NUMBER_tbl,
20313         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
20314         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
20315         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
20316         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
20317         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
20318         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
20319         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
20320         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
20321         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
20322         p_PRODUCT_UOM_CODE_TBL          =>G_PRODUCT_UOM_CODE_TBL,
20323         p_EXCLUDER_FLAG_TBL             =>G_EXCLUDER_FLAG_TBL,
20324         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
20325         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
20326         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
20327         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
20328         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
20329         x_status_code                   =>l_status_code,
20330         x_status_text                   =>l_status_text);
20331 	qp_debug_util.tstop('INSERT_PRICE_LIST_ATTRS');
20332   END IF;
20333   K:=1;
20334 
20335 
20336 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20337 engine_debug('#100');
20338 
20339 END IF;
20340 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
20341 
20342 lq_line_index := -9999;
20343 lq_list_line_id := -9999;
20344 
20345 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20346   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20347   engine_debug('cursor open l_list_qual_cur_currency-multi-currency TRUE');
20348   END IF;
20349 OPEN l_list_qual_cur_currency;
20350 qp_debug_util.tstart('L_LIST_QUAL_CUR_CURRENCY','Cursor Loop  l_list_qual_cur_currency');
20351 else -- vivek, multi currency not installed, not used
20352 OPEN l_list_qual_cur;
20353 qp_debug_util.tstart('L_LIST_QUAL_CUR','Cursor Loop l_list_qual_cur');
20354 end if; -- vivek, multi currency installed
20355 qp_debug_util.tstart('L_LIST_QUAL_CUR_CURRENCY_FETCH','Cursor Loop L_LIST_QUAL_CUR_CURRENCY_FETCH');
20356 LOOP
20357   G_LINE_INDEX_TBL_P.delete;
20358   G_LIST_LINE_ID_TBL_P.delete;
20359   G_OPER_CALCULATION_CODE_TBL_P.delete;
20360   G_OPERAND_VALUE_TBL_P.delete;
20361   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
20362   G_LIST_LINE_TYPE_TBL_P.delete;
20363   G_PRICING_PHASE_ID_TBL_P.delete;
20364   G_AUTOMATIC_FLAG_TBL_P.delete;
20365   G_OVERRIDE_FLAG_TBL_P.delete;
20366   G_PRINT_ON_INVOICE_FLAG_TBL_P.delete;
20367   G_INCOMP_GRP_CODE_TBL_P.delete;
20368   G_PRICE_FORMULA_ID_TBL_P.delete;
20369   G_PRODUCT_PRECEDENCE_TBL_P.delete;
20370   G_PRIMARY_UOM_FLAG_TBL_P.delete;
20371   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
20372   G_LIST_LINE_NO_TBL_P.delete;
20373   G_PRODUCT_UOM_CODE_TBL_P.delete;
20374   G_EXCLUDER_FLAG_TBL_P.delete;
20375   G_LIST_TYPE_CODE_TBL_P.delete;
20376   G_ROUNDING_FACTOR_TBL_P.delete;
20377   G_LIST_HEADER_ID_TBL_P.delete;
20378   G_CONTEXT_TBL_P.delete;
20379   G_ATTRIBUTE_TBL_P.delete;
20380   G_VALUE_FROM_TBL_P.delete;
20381   G_ATTRIBUTE_LEVEL_TBL_P.delete;
20382   G_ATTRIBUTE_TYPE_TBL_P.delete;
20383   G_APPLIED_FLAG_TBL_P.delete;
20384   G_CONTEXT_TBL_PR.delete;
20385   G_ATTRIBUTE_TBL_PR.delete;
20386   G_VALUE_FROM_TBL_PR.delete;
20387   G_SETUP_VALUE_FROM_TBL_PR.delete;
20388   G_SETUP_VALUE_TO_TBL_PR.delete;
20389   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
20390   G_ATTRIBUTE_TYPE_TBL_PR.delete;
20391   G_OPERATOR_TYPE_TBL_PR.delete;
20392   G_CONTEXT_TBL_Q.delete;
20393   G_ATTRIBUTE_TBL_Q.delete;
20394   G_VALUE_FROM_TBL_Q.delete;
20395   G_PRICING_ATTR_FLAG_TBL_Q.delete;
20396   G_GROUPING_NO_TBL_Q.delete;
20397   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
20398   G_DATATYPE_TBL_Q.delete;
20399   G_SETUP_VALUE_FROM_TBL_Q.delete;
20400   G_SETUP_VALUE_TO_TBL_Q.delete;
20401   G_OPERATOR_TYPE_TBL_Q .delete;
20402   G_DATATYPE_TBL_PR.delete;
20403   G_QUALIFIER_TYPE_TBL_Q.delete;
20404   G_BREAK_UOM_TBL_P.delete; /* Proration */
20405   G_BREAK_CONTEXT_TBL_P.delete; /* Proration */
20406   G_BREAK_ATTRIBUTE_TBL_P.delete; /* Proration */
20407   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete; --[julin] for price book
20408 
20409  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20410   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20411   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - delete tables');
20412   END IF;
20413   G_CURRENCY_DETAIL_ID_TBL_P.delete; /* sunilpandey */
20414   G_CURRENCY_HEADER_ID_TBL_P.delete; /* vivek */
20415   G_SELLING_ROUNDING_TBL_P.delete; /* vivek */
20416   G_ORDER_CURRENCY_TBL_P.delete; /* vivek */
20417   G_PRICING_EFFECTIVE_DATE_TBL_P.delete; /* vivek */
20418   G_BASE_CURRENCY_CODE_TBL_P.delete; /* vivek */
20419  end if; /* vivek */
20420 
20421 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20422   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20423   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - bulk collect');
20424 
20425   END IF;
20426 FETCH l_list_qual_cur_currency BULK COLLECT INTO
20427     G_LINE_INDEX_TBL_P
20428   , G_LIST_LINE_ID_TBL_P
20429   , G_OPER_CALCULATION_CODE_TBL_P
20430   , G_OPERAND_VALUE_TBL_P
20431   , G_PRICING_GROUP_SEQUENCE_TBL_P
20432   , G_LIST_LINE_TYPE_TBL_P
20433   , G_PRICING_PHASE_ID_TBL_P
20434   , G_AUTOMATIC_FLAG_TBL_P
20435   , G_INCOMP_GRP_CODE_TBL_P
20436   , G_PRICE_FORMULA_ID_TBL_P
20437   , G_PRODUCT_PRECEDENCE_TBL_P
20438   , G_PRIMARY_UOM_FLAG_TBL_P
20439   , G_MODIFIER_LEVEL_CODE_TBL_P
20440   , G_LIST_LINE_NO_TBL_P
20441   , G_PRODUCT_UOM_CODE_TBL_P
20442   , G_EXCLUDER_FLAG_TBL_P
20443   , G_LIST_TYPE_CODE_TBL_P
20444   , G_ROUNDING_FACTOR_TBL_P
20445   , G_LIST_HEADER_ID_TBL_P
20446   , G_CONTEXT_TBL_P
20447   , G_ATTRIBUTE_TBL_P
20448   , G_VALUE_FROM_TBL_P
20449   , G_ATTRIBUTE_LEVEL_TBL_P
20450   , G_ATTRIBUTE_TYPE_TBL_P
20451   , G_APPLIED_FLAG_TBL_P
20452   , G_CONTEXT_TBL_PR
20453   , G_ATTRIBUTE_TBL_PR
20454   , G_VALUE_FROM_TBL_PR
20455   , G_SETUP_VALUE_FROM_TBL_PR
20456   , G_SETUP_VALUE_TO_TBL_PR
20457   , G_ATTRIBUTE_LEVEL_TBL_PR
20458   , G_ATTRIBUTE_TYPE_TBL_PR
20459   , G_OPERATOR_TYPE_TBL_PR
20460   , G_CONTEXT_TBL_Q
20461   , G_ATTRIBUTE_TBL_Q
20462   , G_VALUE_FROM_TBL_Q
20463   , G_PRICING_ATTR_FLAG_TBL_Q
20464   , G_GROUPING_NO_TBL_Q
20465   , G_QUALIFIER_PRECEDENCE_TBL_Q
20466   , G_DATATYPE_TBL_Q
20467   , G_SETUP_VALUE_FROM_TBL_Q
20468   , G_SETUP_VALUE_TO_TBL_Q
20469   , G_OPERATOR_TYPE_TBL_Q
20470   , G_DATATYPE_TBL_PR
20471   , G_QUALIFIER_TYPE_TBL_Q
20472   , G_CURRENCY_DETAIL_ID_TBL_P /* sunilpandey */
20473   , G_CURRENCY_HEADER_ID_TBL_P /* vivek */
20474   , G_SELLING_ROUNDING_TBL_P /* vivek */
20475   , G_ORDER_CURRENCY_TBL_P /* vivek */
20476   , G_PRICING_EFFECTIVE_DATE_TBL_P /* vivek */
20477   , G_BASE_CURRENCY_CODE_TBL_P
20478   , G_BREAK_UOM_TBL_P /* Proration */
20479   , G_BREAK_CONTEXT_TBL_P /* Proration */
20480   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
20481   , G_DERIVED_QUALIFIER_FLAG_TBL_Q    --- Added for TCA
20482   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
20483     LIMIT nROWS;/* vivek */
20484    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
20485 else -- vivek, multi currency not installed, not used
20486 FETCH l_list_qual_cur BULK COLLECT INTO
20487     G_LINE_INDEX_TBL_P
20488   , G_LIST_LINE_ID_TBL_P
20489   , G_OPER_CALCULATION_CODE_TBL_P
20490   , G_OPERAND_VALUE_TBL_P
20491   , G_PRICING_GROUP_SEQUENCE_TBL_P
20492   , G_LIST_LINE_TYPE_TBL_P
20493   , G_PRICING_PHASE_ID_TBL_P
20494   , G_AUTOMATIC_FLAG_TBL_P
20495   , G_INCOMP_GRP_CODE_TBL_P
20496   , G_PRICE_FORMULA_ID_TBL_P
20497   , G_PRODUCT_PRECEDENCE_TBL_P
20498   , G_PRIMARY_UOM_FLAG_TBL_P
20499   , G_MODIFIER_LEVEL_CODE_TBL_P
20500   , G_LIST_LINE_NO_TBL_P
20501   , G_PRODUCT_UOM_CODE_TBL_P
20502   , G_EXCLUDER_FLAG_TBL_P
20503   , G_LIST_TYPE_CODE_TBL_P
20504   , G_ROUNDING_FACTOR_TBL_P
20505   , G_LIST_HEADER_ID_TBL_P
20506   , G_CONTEXT_TBL_P
20507   , G_ATTRIBUTE_TBL_P
20508   , G_VALUE_FROM_TBL_P
20509   , G_ATTRIBUTE_LEVEL_TBL_P
20510   , G_ATTRIBUTE_TYPE_TBL_P
20511   , G_APPLIED_FLAG_TBL_P
20512   , G_CONTEXT_TBL_PR
20513   , G_ATTRIBUTE_TBL_PR
20514   , G_VALUE_FROM_TBL_PR
20515   , G_SETUP_VALUE_FROM_TBL_PR
20516   , G_SETUP_VALUE_TO_TBL_PR
20517   , G_ATTRIBUTE_LEVEL_TBL_PR
20518   , G_ATTRIBUTE_TYPE_TBL_PR
20519   , G_OPERATOR_TYPE_TBL_PR
20520   , G_CONTEXT_TBL_Q
20521   , G_ATTRIBUTE_TBL_Q
20522   , G_VALUE_FROM_TBL_Q
20523   , G_PRICING_ATTR_FLAG_TBL_Q
20524   , G_GROUPING_NO_TBL_Q
20525   , G_QUALIFIER_PRECEDENCE_TBL_Q
20526   , G_DATATYPE_TBL_Q
20527   , G_SETUP_VALUE_FROM_TBL_Q
20528   , G_SETUP_VALUE_TO_TBL_Q
20529   , G_OPERATOR_TYPE_TBL_Q
20530   , G_DATATYPE_TBL_PR
20531   , G_QUALIFIER_TYPE_TBL_Q
20532   , G_BREAK_UOM_TBL_P /* Proration */
20533   , G_BREAK_CONTEXT_TBL_P /* Proration */
20534   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
20535   , G_DERIVED_QUALIFIER_FLAG_TBL_Q
20536   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
20537     LIMIT nROWS;
20538    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
20539 end if; -- vivek, multi currency installed
20540 
20541 IF (G_LINE_INDEX_TBL_P.COUNT > 0 ) THEN
20542 
20543   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
20544 
20545                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20546                   engine_debug('#101');
20547 
20548                   engine_debug('List Line Id : ' || g_list_line_id_tbl_p(I));
20549                   engine_debug('Line Index : ' || g_line_index_tbl_P(I));
20550 
20551                   END IF;
20552                   IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
20553 
20554                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20555                     engine_debug('Inserting List Line #102');
20556 
20557                     END IF;
20558                     L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
20559                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20560                     engine_debug('Line Detail Index : ' || l_line_detail_index);
20561 
20562                     END IF;
20563                     G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
20564                     G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
20565                     G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
20566                     G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
20567                     G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
20568                     G_PRICING_STATUS_TEXT_LD_TBL(M)       :='INSERTED IN L_LIST_QUAL_CUR';
20569                     G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
20570                     G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
20571                     G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
20572                     G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I); --[julin] for price book
20573                     G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
20574                     G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
20575                     G_CREATED_FROM_SQL_TBL(M)             :='INSERTED_IN_L_LIST_QUAL_CUR';
20576                     G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
20577                     G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
20578                     G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
20579                     G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
20580                     G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
20581                     G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
20582                     G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
20583                     G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
20584                     G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20585                     G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20586                     G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
20587                     G_ROUNDING_FACTOR_TBL(M)              :=G_ROUNDING_FACTOR_TBL_P(I);
20588                     G_BREAK_UOM_TBL(M)                    :=G_BREAK_UOM_TBL_P(I); /* Proration */
20589                     G_BREAK_CONTEXT_TBL(M)                :=G_BREAK_CONTEXT_TBL_P(I); /* Proration */
20590                     G_BREAK_ATTRIBUTE_TBL(M)              :=G_BREAK_ATTRIBUTE_TBL_P(I); /* Proration */
20591                if G_MULTI_CURRENCY_PROFILE = 'Y' and
20592                   G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20593   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20594   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - populate tables');
20595   END IF;
20596                     G_CURRENCY_DETAIL_ID_TBL(M)          := G_CURRENCY_DETAIL_ID_TBL_P(I); /* sunilpandey */
20597                     G_CURRENCY_HEADER_ID_TBL(M)          := G_CURRENCY_HEADER_ID_TBL_P(I); /* vivek */
20598                     G_SELLING_ROUNDING_TBL(M)     := G_SELLING_ROUNDING_TBL_P(I); /* vivek */
20599                     G_ORDER_CURRENCY_TBL(M)              := G_ORDER_CURRENCY_TBL_P(I); /* vivek */
20600                     G_PRICING_EFFECTIVE_DATE_TBL(M)      := G_PRICING_EFFECTIVE_DATE_TBL_P(I); /* vivek */
20601                     G_BASE_CURRENCY_CODE_TBL(M)          := G_BASE_CURRENCY_CODE_TBL_P(I); /* vivek */
20602                end if;  /* vivek */
20603                     M := M+1;
20604                     lq_line_index := g_line_index_tbl_p(I);
20605                     lq_list_line_id := g_list_line_id_tbl_p(I);
20606                   END IF;
20607 
20608                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20609                   engine_debug('#103');
20610                   END IF;
20611                  IF (G_CONTEXT_TBL_Q(I) IS NOT NULL) THEN
20612                   --Qualifiers attributes
20613                   G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
20614                   G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
20615                   G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(I),'X');
20616                   G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
20617                   G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(I);
20618                   G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(I);
20619                   G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(I);
20620                   G_COMPARISON_OPERATOR_TYPE_tbl(K):= G_OPERATOR_TYPE_TBL_Q(I);
20621                   G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
20622                   G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
20623                   G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(I);
20624                   G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(I);
20625                   G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(I);
20626                   G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(I);
20627                   G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(I);
20628                   G_PRICING_STATUS_TEXT_tbl(K)     := 'INSERTED IN L_LIST_QUAL_CUR';
20629                   G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(I);
20630                   G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(I);
20631                   G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(I);
20632                   G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(I);
20633                   G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(I);
20634                   G_VALIDATED_FLAG_tbl(K)          := G_NO;
20635                   G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
20636                   G_PRICING_PHASE_ID_TBL_A(K)        := G_PRICING_PHASE_ID_TBL_P(I);
20637                   G_INCOMP_GRP_CODE_TBL_A(K)         := G_INCOMP_GRP_CODE_TBL_P(I);
20638                   G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   := 'NULL';
20639                   G_MODIFIER_LEVEL_CODE_TBL_A(K)     := G_MODIFIER_LEVEL_CODE_TBL_P(I);
20640                   G_PRIMARY_UOM_FLAG_TBL_A(K)        := G_PRIMARY_UOM_FLAG_TBL_P(I);
20641                   K:= K+1;
20642                 END IF;
20643 
20644                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20645                   engine_debug('#1031');
20646 
20647                   END IF;
20648                   --INSERT PRODUCT ATTRIBUTES
20649                    G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
20650                    G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
20651                    G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
20652                    G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_P(I);
20653                    G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_P(I);
20654                    G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_P(I);
20655                    G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
20656                    G_VALIDATED_FLAG_tbl(K)          :=G_NO;
20657                    G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
20658                    G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
20659                    G_PRICING_ATTR_FLAG_tbl(K)       :=G_NO;
20660                    G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
20661                    G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
20662                    G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
20663                    G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
20664                    G_SETUP_VALUE_TO_tbl(K)          :=NULL;
20665                    G_GROUPING_NUMBER_tbl(K)         :=NULL;
20666                    G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_QUAL_CUR';
20667                    G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
20668                    G_DATATYPE_tbl(K)                :=NULL;
20669                    G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
20670                    G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
20671                    G_QUALIFIER_TYPE_TBL(K)          :=NULL;
20672                    G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
20673                    G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
20674                    G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
20675                    G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20676                    G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20677                    K:= K+1;
20678 
20679                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20680                   engine_debug('#105');
20681                   END IF;
20682 
20683                    --INSERT PRICING ATTRIBUTES
20684                    IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
20685                     G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
20686                     G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
20687                     G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
20688                     G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
20689                     G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
20690                     G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
20691                     G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
20692                     G_VALIDATED_FLAG_tbl(K)          :=G_NO;
20693                     G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
20694                     G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
20695                     G_PRICING_ATTR_FLAG_tbl(K)       :=NULL;
20696                     G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
20697                     G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
20698                     G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
20699                     G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
20700                     G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
20701                     G_GROUPING_NUMBER_tbl(K)         :=NULL;
20702                     G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_QUAL_CUR';
20703                     G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
20704                     G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
20705                     G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
20706                     G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
20707                     G_QUALIFIER_TYPE_TBL(K)          :=NULL;
20708                     G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
20709                     G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
20710                     G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
20711                     G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20712                     G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20713                     K:= K+1;
20714                    END IF;
20715 
20716                   l_loop_count := l_loop_count +1;
20717                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20718                   engine_debug('Primary List Non Validated Search Count : ' || l_loop_count);
20719                   END IF;
20720   END LOOP;
20721  END IF;
20722 
20723 END LOOP;
20724 qp_debug_util.tstop('L_LIST_QUAL_CUR_CURRENCY_FETCH');
20725 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20726   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20727   engine_debug('cursor close l_list_qual_cur_currency-multi-currency TRUE');
20728   END IF;
20729 CLOSE l_list_qual_cur_currency;
20730 qp_debug_util.tstop('L_LIST_QUAL_CUR_CURRENCY');
20731 else -- vivek, multi currency not installed, not used
20732 CLOSE l_list_qual_cur;
20733 
20734 qp_debug_util.tstop('L_LIST_QUAL_CUR');
20735 
20736 end if; -- vivek, multi currency installed
20737 
20738 END IF; -- p_pricing_phase_id = G_PRICE_LIST_PHASE_ID
20739 
20740 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20741 engine_debug('#106');
20742 
20743 END IF;
20744 IF M > 1 THEN
20745 qp_debug_util.tstart('INSERT_LDETS_PRICE_LIST_MULT_NON_MULTI','Inserting ldets INSERT_LDETS_PRICE_LIST_MULT_NON_MULTI');
20746  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20747   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20748   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - insert_ldets2');
20749 
20750   END IF;
20751   INSERT_LDETS_PRICE_LIST_MULT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
20752                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
20753                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
20754                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
20755                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
20756                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
20757                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
20758                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
20759                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
20760                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
20761                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
20762                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
20763                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
20764                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
20765                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
20766                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
20767                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
20768                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
20769                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
20770                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
20771                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
20772                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
20773                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
20774                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
20775                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
20776                  P_CURRENCY_DETAIL_ID          =>G_CURRENCY_DETAIL_ID_TBL, /* sunilpandey */
20777                  P_CURRENCY_HEADER_ID          =>G_CURRENCY_HEADER_ID_TBL, /* vivek */
20778                  P_SELLING_ROUNDING_FACTOR     =>G_SELLING_ROUNDING_TBL, /* vivek */
20779                  P_ORDER_CURRENCY              =>G_ORDER_CURRENCY_TBL, /* vivek */
20780                  P_PRICING_EFFECTIVE_DATE      =>G_PRICING_EFFECTIVE_DATE_TBL, /* vivek */
20781                  P_BASE_CURRENCY_CODE          =>G_BASE_CURRENCY_CODE_TBL, /* vivek */
20782                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
20783                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
20784                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
20785                  x_status_code                  =>l_status_code,
20786                  x_status_text                  =>l_status_text
20787                  );
20788 else -- vivek, multi currency not installed, not used
20789   INSERT_LDETS_PRICE_LIST_PVT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
20790                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
20791                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
20792                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
20793                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
20794                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
20795                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
20796                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
20797                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
20798                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
20799                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
20800                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
20801                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
20802                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
20803                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
20804                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
20805                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
20806                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
20807                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
20808                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
20809                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
20810                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
20811                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
20812                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
20813                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
20814                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
20815                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
20816                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
20817                  x_status_code                  =>l_status_code,
20818                  x_status_text                  =>l_status_text
20819                  );
20820  end if; -- vivek, multi currency installed
20821  qp_debug_util.tstop('INSERT_LDETS_PRICE_LIST_MULT_NON_MULTI');
20822 END IF;
20823 M :=1;
20824 
20825 
20826 IF (K>1) THEN
20827 qp_debug_util.tstart('INSERT_PRICE_LIST_ATTRS','Inserting line attrs INSERT_PRICE_LIST_ATTRS');
20828               INSERT_PRICE_LIST_ATTRS
20829               ( p_LINE_INDEX_tbl                =>G_LINE_INDEX_tbl,
20830                 p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_tbl,
20831                 p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
20832                 p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
20833                 p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl,
20834                 p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl,
20835                 p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
20836                 p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
20837                 p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
20838                 p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
20839                 p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
20840                 p_GROUPING_NUMBER_tbl           => G_GROUPING_NUMBER_tbl,
20841                 p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
20842                 p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
20843                 p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
20844                 p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
20845                 p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
20846                 p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
20847                 p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
20848                 p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
20849                 p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
20850                 p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
20851                 p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
20852                 p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
20853                 p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
20854                 p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
20855                 p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
20856                 p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
20857                 x_status_code                   =>l_status_code,
20858                 x_status_text                   =>l_status_text);
20859 qp_debug_util.tstop('INSERT_PRICE_LIST_ATTRS');
20860 END IF;
20861 K:=1;
20862 
20863 
20864 -- Determine Pricing UOM and Qty
20865 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
20866  IF (l_loop_count <> 0 ) THEN
20867 
20868            Evaluate_Between(p_pricing_phase_id,NULL,NULL,l_return_status , l_status_text);
20869 
20870            IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20871             RAISE E_ROUTINE_ERRORS;
20872            END IF;
20873 
20874             -- Check for multiple item categories and customer classes
20875             Eliminate_Multiple_Hierarchies(p_pricing_phase_id,l_return_status,l_status_text);
20876 
20877             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20878              RAISE E_ROUTINE_ERRORS;
20879             END IF;
20880 
20881             --Handle_Excluder(p_pricing_phase_id,NULL,l_return_status,l_status_text);
20882 
20883             Perform_Grouping(p_pricing_phase_id, NULL, l_return_status, l_status_text);
20884             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20885              RAISE E_ROUTINE_ERRORS;
20886             END IF;
20887 
20888             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20889             engine_debug('Non Validated Price List Grouping Return Status : ' || l_return_status);
20890 
20891 
20892             engine_debug('Calling Incomp Routine in Non Validated Price List');
20893 
20894             END IF;
20895  	    QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
20896 				(p_line_index        => NULL,
20897  				 p_order_uom_code    => NULL,
20898 				 p_order_qty         => NULL,
20899 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID,
20900                                  p_call_big_search   => FALSE,
20901 				 x_list_line_id	 =>     l_list_line_id,
20902 				 x_return_status     => l_return_status,
20903 				 x_return_status_txt => l_status_text);
20904 
20905            IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20906             RAISE E_ROUTINE_ERRORS;
20907            END IF;
20908 
20909             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20910             engine_debug('Incomp Return Status Non Validated QP_PREQ_GRP: ' || l_return_status);
20911 
20912             END IF;
20913 
20914             -- 3773652
20915             -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
20916             begin
20917               select 'x' into l_dummy
20918               from qp_npreq_lines_tmp
20919               where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
20920               and (PRICE_FLAG = G_YES
20921                    or
20922                    PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
20923               and rownum = 1;
20924 
20925               Evaluate_Between(p_pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
20926             exception
20927               when no_data_found then
20928                 null;
20929             end;
20930 
20931         -- Update the request line status for lines which got valid price list
20932             Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
20933 
20934             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20935              RAISE E_ROUTINE_ERRORS;
20936             END IF;
20937 
20938          --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
20939          --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
20940          --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
20941          --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
20942          --By doing this we will get the right price in the PRICE event on change of UOM on the order line
20943          --for price based on price break
20944          Get_Eligible_Price_Break(p_pricing_phase_id,NULL,l_return_status,l_status_text);
20945          IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20946           RAISE E_ROUTINE_ERRORS;
20947          END IF;
20948 
20949 
20950             OPEN l_check_secondary_search;
20951             FETCH l_check_secondary_search INTO l_dummy;
20952 
20953             IF l_check_secondary_search%FOUND  THEN
20954              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20955              engine_debug('Trying to Perform Secondary Search ');
20956              END IF;
20957              Perform_Secondary_Search(p_freeze_override_flag,p_control_rec,l_return_status,l_status_text);
20958             END IF;
20959             CLOSE l_check_secondary_search;
20960 
20961             --delete children lines of PBH if the parent PBH line get eliminated in QP_Resolve_Incompatability_PVT
20962 
20963       	       /*OPEN l_chk_deleted_pbh_cur(J.line_index,G_PRICE_LIST_PHASE_ID);
20964       	       FETCH l_chk_deleted_pbh_cur INTO l_dummy;
20965       	       IF l_chk_deleted_pbh_cur%FOUND THEN
20966        	        Delete_Invalid_PBH_Children(J.line_index,G_PRICE_LIST_PHASE_ID);
20967                END IF;
20968                CLOSE l_chk_deleted_pbh_cur;*/
20969  ELSE
20970     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20971     engine_debug('LOOOOOOOOOOOP Count : ' || l_loop_count);
20972     END IF;
20973     -- Update the request line status for lines which got valid price list
20974     Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
20975     IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20976      RAISE E_ROUTINE_ERRORS;
20977     END IF;
20978 
20979     OPEN l_check_secondary_search;
20980     FETCH l_check_secondary_search INTO l_dummy;
20981 
20982     IF l_check_secondary_search%FOUND  THEN
20983       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20984       engine_debug('Trying to Perform Secondary Search ');
20985       END IF;
20986       Perform_Secondary_Search(p_freeze_override_flag,p_control_rec,l_return_status,l_status_text);
20987       IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20988        RAISE E_ROUTINE_ERRORS;
20989       END IF;
20990     END IF;
20991     CLOSE l_check_secondary_search;
20992  END IF; --l_loop_count <> 0
20993 END IF;
20994 
20995 --If there are request lines that don't have price list passed
20996 --or not validated, the return further_search_flag=Yes to caller
20997 
20998 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
20999  OPEN l_check_no_list_passed;
21000  FETCH l_check_no_list_passed INTO l_dummy;
21001 
21002  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21003  engine_debug('DUMMMMMMMMMMMMMMY: ' || l_dummy);
21004 
21005  END IF;
21006  IF l_check_no_list_passed%FOUND  THEN
21007   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21008   engine_debug('DUMMMMMMMMMMMMMMY1000: ' || l_dummy);
21009   END IF;
21010   x_further_search := G_YES;
21011  ELSE
21012   x_further_search := G_NO;
21013  END IF;
21014 
21015  CLOSE l_check_no_list_passed;
21016 END IF; --p_pricing_phase_id = G_PRICE_LIST_PHASE_ID
21017 
21018 --Reset_all_tbls;
21019 Reset_All_Tbls(l_return_status ,l_status_text );
21020 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
21021  RAISE E_ROUTINE_ERRORS;
21022 END IF;
21023 
21024 EXCEPTION
21025   WHEN E_ROUTINE_ERRORS THEN
21026     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21027     engine_debug(l_routine||': '||l_status_text);
21028     END IF;
21029     x_status_code := FND_API.G_RET_STS_ERROR;
21030     x_status_text := l_routine||': '||l_status_text;
21031   WHEN E_NO_LIST_FOUND THEN
21032     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21033     engine_debug('No list found for a given item even after secondary fetch');
21034     END IF;
21035   WHEN TOO_MANY_ROWS THEN
21036     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21037     engine_debug('In LIST_HEADER_SEARCH procedure');
21038     engine_debug('Conflict in price list detected');
21039     engine_debug(SQLERRM);
21040     END IF;
21041     null;
21042   WHEN NO_DATA_FOUND THEN
21043     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21044     engine_debug('In LIST_HEADER_SEARCH  procedure');
21045     engine_debug('Item is not in the price list');
21046     END IF;
21047     null;
21048   WHEN OTHERS THEN
21049     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21050     engine_debug(l_routine||' '||SQLERRM);
21051     END IF;
21052     x_status_code := FND_API.G_RET_STS_ERROR;
21053     x_status_text := l_routine||' '||SQLERRM;
21054 END LIST_HEADER_SEARCH;
21055 
21056 
21057 --skattama
21058 PROCEDURE PERFORM_SECONDARY_PATRN_SEARCH(P_FREEZE_OVERRIDE_FLAG        VARCHAR2,
21059 				   p_search_path		NUMBER,
21060 				   p_control_rec                 CONTROL_RECORD_TYPE,
21061 		                   x_status_code            OUT NOCOPY   VARCHAR2,
21062 		                   x_status_text            OUT NOCOPY   VARCHAR2)
21063 AS
21064 
21065 CURSOR L_SEC_LST_HDR_P1_QLFY_SEC_Y IS
21066 	SELECT
21067 		 /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N3)
21068 		 index(qplines QP_PREQ_LINES_TMP_U1)
21069 		 index(qprs qp_pte_source_systems_u2)
21070 		 L_SEC_LST_HDR_P1_QLFY_SEC_Y */
21071 		  atrgrps.list_header_id,
21072 		  atrgrps.list_line_id list_line_id,
21073 		  qplines.line_index line_index,
21074 		  atrgrps.pattern_id matched_pattrn_id,
21075 		  G_PRICE_LIST_PHASE_ID,
21076 		  atrgrps.hash_key matched_hash_key,
21077 		  G_STAGE_CACHE_SEC_PL_HDR_SRCH stage,
21078 		  G_STATUS_UNCHANGED,
21079 		  atrgrps.source_system_code,
21080 		  atrgrps.header_quals_exist_flag,
21081 		  atrgrps.grouping_no grouping_no,
21082 		  atrgrps.eq_flag,
21083 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21084 		   G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21085 		  atrgrps.other_oprt_count,
21086 		  atrgrps.null_other_oprt_count,
21087                   atrgrps.LIST_TYPE_CODE,
21088                   atrgrps.ASK_FOR_FLAG,
21089                   atrgrps.HEADER_LIMIT_EXISTS,
21090                   atrgrps.LINE_LIMIT_EXISTS,
21091 		  NULL, --QCDT.CURRENCY_DETAIL_ID,
21092        		  NULL, --QCDT.CURRENCY_HEADER_ID,
21093        		  NULL, --QCDT.SELLING_ROUNDING_FACTOR,
21094        		  atrgrps.CURRENCY_CODE   BASE_CURRENCY_CODE,
21095        		  qplines.pricing_effective_date,
21096 		  qpq.qualifier_precedence,
21097                   atrgrps.descendents_quals_exist
21098    FROM
21099          qp_npreq_lines_tmp qplines,
21100 	 qp_npreq_line_patrns_tmp qppattmp,
21101          QP_QUALIFIERS qpq,
21102 	 qp_secu_attr_groups_v atrgrps,
21103          --qp_attribute_groups atrgrps,
21104 	 --QP_PRICE_REQ_SOURCES_V qprs /* yangli */
21105 	 qp_pte_source_systems qprs
21106    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
21107    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
21108    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
21109    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
21110    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3917802
21111    AND   atrgrps.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21112    AND   QPQ.LIST_HEADER_ID = atrgrps.LIST_HEADER_ID
21113    AND   atrgrps.list_line_id = -1 -- Filter
21114    AND   atrgrps.pte_code = G_PTE_CODE
21115 --   AND   qppattmp.pattern_id = atrgrps.pattern_id -- Match  --13035945 13522077
21116 --   AND   qppattmp.hash_key = atrgrps.hash_key -- Match  --13035945 13522077
21117 AND   (QPLINES.VALIDATED_FLAG = G_YES OR (QPLINES.VALIDATED_FLAG = G_NO
21118 						AND   qppattmp.pattern_id = atrgrps.pattern_id -- Match
21119 						AND   qppattmp.hash_key = atrgrps.hash_key -- Match
21120 						)
21121 	)--13035945 13522077
21122    AND   qppattmp.line_index = qplines.line_index --Join
21123    AND   (QPLINES.PRICE_FLAG = G_YES
21124           OR
21125          (QPLINES.PRICE_FLAG = G_PHASE
21126           AND
21127           P_FREEZE_OVERRIDE_FLAG = G_YES))
21128    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21129    AND   atrgrps.ACTIVE_FLAG = G_YES
21130    --AND   atrgrps.source_system_code = qprs.source_system_code --join
21131    --AND   qprs.request_type_code = g_request_type_code
21132    AND   qprs.APPLICATION_SHORT_NAME = atrgrps.source_system_code
21133    AND   qprs.pte_code = G_PTE_CODE
21134    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
21135    AND   atrgrps.CURRENCY_CODE = QPLINES.CURRENCY_CODE
21136 --   AND   QPLINES.VALIDATED_FLAG = G_NO --13035945 13522077
21137    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
21138           OR
21139           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
21140          )
21141    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21142    AND  (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21143    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21144 		   NVL(TRUNC(atrgrps.START_DATE_ACTIVE_H),QPLINES.PRICING_EFFECTIVE_DATE)
21145 			   AND NVL(TRUNC(atrgrps.END_DATE_ACTIVE_H),QPLINES.PRICING_EFFECTIVE_DATE)
21146    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21147 		   NVL(TRUNC(atrgrps.START_DATE_ACTIVE_Q),QPLINES.PRICING_EFFECTIVE_DATE)
21148 			   AND NVL(TRUNC(atrgrps.END_DATE_ACTIVE_Q),QPLINES.PRICING_EFFECTIVE_DATE)
21149   ORDER BY 1,2;
21150 
21151 CURSOR L_SEC_LST_LIN_P1_QLFY_SEC_Y IS
21152 	SELECT
21153 		 /*+ ORDERED index(qpl QP_LIST_LINES_N16)
21154 		      index(qplines QP_PREQ_LINES_TMP_U1)
21155 		      index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
21156                       index(qppqual QP_PREQ_PATRN_QUAL_T_N2)
21157 		      L_SEC_LST_LIN_P1_QLFY_SEC_Y */
21158 		 DISTINCT qpl.list_header_id,
21159 		  qpl.list_line_id list_line_id,
21160 		  qplines.line_index line_index,
21161 		  qpl.pattern_id matched_pattrn_id,
21162 		  G_PRICE_LIST_PHASE_ID,
21163 		  qpl.hash_key matched_hash_key,
21164 		  G_STAGE_CACHE_SEC_PL_LIN_SRCH stage,
21165 		  G_STATUS_UNCHANGED,
21166 		  qppqual.source_system_code,
21167 		  decode(qpl.QUALIFICATION_IND,6,'Y',22,'Y',2,'Y','N'),--qpq.header_quals_exist_flag,
21168 		  -1 grouping_no,
21169 		  qpl.eq_flag, ---to be discusseed
21170 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21171 		  G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21172 		  0 other_oprt_count,
21173 		  qpl.null_other_oprt_count,
21174 		  qppqual.list_type_code,
21175 		  qppqual.ask_for_flag,
21176 		  decode(qppqual.HEADER_LIMIT_EXISTS,'Y','Y',decode(qpl.limit_exists_flag,'Y','Y','N')), -- HEADER_LIMIT_EXISTS
21177 		  qpl.limit_exists_flag,
21178 		  qpl.BREAK_UOM_CODE,
21179 		  qpl.BREAK_UOM_CONTEXT,
21180 		  qpl.BREAK_UOM_ATTRIBUTE,
21181 		  QPLINES.CURRENCY_CODE ORDER_CURRENCY,
21182 		  qplines.pricing_effective_date,
21183 		  qppqual.qualifier_precedence,
21184                   'N' descendents_quals_exist,
21185 		  qpl.PRICE_BREAK_TYPE_CODE
21186    FROM   qp_npreq_lines_tmp qplines,
21187 	  qp_npreq_line_patrns_tmp qppattmp,
21188 	  qp_preq_patrn_qual_tmp qppqual,
21189 	  qp_list_lines qpl
21190    WHERE  qppattmp.LINE_INDEX = qplines.LINE_INDEX
21191    AND   qppqual.LINE_INDEX = qplines.LINE_INDEX
21192    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21193    AND   qpl.pattern_id = qppattmp.pattern_id
21194    AND   qpl.hash_key = qppattmp.hash_key
21195    AND    QPL.LIST_HEADER_ID = qppqual.LIST_HEADER_ID
21196    AND    qppqual.stage = G_STAGE_CACHE_SEC_PL_HDR_SRCH
21197    AND   (QPLINES.PRICE_FLAG = G_YES
21198           OR
21199          (QPLINES.PRICE_FLAG = G_PHASE
21200           AND
21201           P_FREEZE_OVERRIDE_FLAG = G_YES))
21202    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21203    AND   QPLINES.LINE_TYPE_CODE = QPLINES.LINE_TYPE_CODE
21204    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21205 		   NVL(TRUNC(qpl.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21206 			   AND NVL(TRUNC(qpl.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21207    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21208    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21209    ORDER BY 1,2;
21210 
21211 CURSOR L_SEC_LST_HDR_P1_QLFY_Y_CURR IS
21212 	SELECT
21213 		 /*+ ORDERED index(qcdt QP_CURRENCY_DETAILS_N2)
21214 		 index(atrgrps QP_ATTRIBUTE_GROUPS_N3)
21215 		 index(qplines QP_PREQ_LINES_TMP_U1)
21216 		 index(qprs qp_pte_source_systems_u2)
21217 		 L_SEC_LST_HDR_P1_QLFY_Y_CURR */
21218 		 DISTINCT atrgrps.list_header_id,
21219 		  atrgrps.list_line_id list_line_id,
21220 		  qplines.line_index line_index,
21221 		  atrgrps.pattern_id matched_pattrn_id,
21222 		  G_PRICE_LIST_PHASE_ID,
21223 		  atrgrps.hash_key matched_hash_key,
21224 		  G_STAGE_CACHE_SEC_PL_HDR_SRCH stage,
21225 		  G_STATUS_UNCHANGED,
21226 		  atrgrps.source_system_code,
21227 		  atrgrps.header_quals_exist_flag,
21228 		  atrgrps.grouping_no grouping_no,
21229 		  atrgrps.eq_flag,
21230 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21231 		   G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21232 		  atrgrps.other_oprt_count,
21233 		  atrgrps.null_other_oprt_count,
21234                   atrgrps.LIST_TYPE_CODE,
21235                   atrgrps.ASK_FOR_FLAG,
21236                   atrgrps.HEADER_LIMIT_EXISTS,
21237                   atrgrps.LINE_LIMIT_EXISTS,
21238 		  QCDT.CURRENCY_DETAIL_ID,
21239 	       	  QCDT.CURRENCY_HEADER_ID,
21240 	       	  QCDT.SELLING_ROUNDING_FACTOR,
21241 	       	  atrgrps.CURRENCY_CODE   BASE_CURRENCY_CODE,
21242 	          qplines.pricing_effective_date,
21243 		  qpq.qualifier_precedence,
21244                   atrgrps.descendents_quals_exist
21245    FROM
21246          qp_npreq_lines_tmp qplines,
21247 	 qp_npreq_line_patrns_tmp qppattmp,
21248          QP_QUALIFIERS qpq,
21249 	 qp_secu_attr_groups_v atrgrps,
21250          --qp_attribute_groups atrgrps,
21251 	 --QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
21252          qp_pte_source_systems qprs,
21253 	 qp_currency_details qcdt
21254    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
21255    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
21256    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
21257    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
21258    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3917802
21259    AND   atrgrps.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21260    AND   QPQ.LIST_HEADER_ID = atrgrps.LIST_HEADER_ID
21261    AND   atrgrps.list_line_id = -1 -- Filter
21262    AND   atrgrps.pte_code = G_PTE_CODE
21263  --  AND   qppattmp.pattern_id = atrgrps.pattern_id -- Match --13035945 13522077
21264  --  AND   qppattmp.hash_key = atrgrps.hash_key -- Match --13035945 13522077
21265  AND   (QPLINES.VALIDATED_FLAG = G_YES OR (QPLINES.VALIDATED_FLAG = G_NO
21266 						AND   qppattmp.pattern_id = atrgrps.pattern_id -- Match
21267 						AND   qppattmp.hash_key = atrgrps.hash_key -- Match
21268 						)
21269 	)  --13035945 13522077
21270    AND   qppattmp.line_index = qplines.line_index --Join
21271    AND   (QPLINES.PRICE_FLAG = G_YES
21272           OR
21273          (QPLINES.PRICE_FLAG = G_PHASE
21274           AND
21275           P_FREEZE_OVERRIDE_FLAG = G_YES))
21276    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21277    AND   atrgrps.ACTIVE_FLAG = G_YES
21278    --AND   atrgrps.source_system_code = qprs.source_system_code --join
21279    --AND   qprs.request_type_code = g_request_type_code
21280    AND   qprs.APPLICATION_SHORT_NAME = atrgrps.source_system_code
21281    AND   qprs.pte_code = G_PTE_CODE
21282    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
21283    AND   atrgrps.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
21284    AND   QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
21285    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21286                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21287                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21288    AND (
21289         (qcdt.curr_attribute_context is null
21290          and not exists
21291              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
21292 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
21293                where qcdt1.curr_attribute_context IS NOT NULL
21294 		 and qcdt1.curr_attribute_context = pa_tmp.context
21295                  and qcdt1.curr_attribute = pa_tmp.attribute
21296                  and qcdt1.curr_attribute_value = pa_tmp.value_from
21297                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
21298                  and qcdt1.to_currency_code = qcdt.to_currency_code
21299                  and qcdt1.currency_header_id = qcdt.currency_header_id
21300                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
21301                  and pa_tmp.line_index = qplines.line_index
21302                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21303                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21304                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21305              )
21306         )
21307         OR
21308         (qcdt.curr_attribute_context is not null
21309          and qcdt.currency_detail_id =
21310              (select qcdt3.currency_detail_id
21311 	       from qp_currency_details qcdt3
21312                  where qcdt3.to_currency_code = qcdt.to_currency_code
21313                  and qcdt3.currency_header_id = qcdt.currency_header_id
21314                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21315                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21316                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21317                  and  qcdt3.precedence =
21318              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */ min(qcdt2.precedence)
21319 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
21320                where qcdt2.curr_attribute_context IS NOT NULL
21321 		 and qcdt2.curr_attribute_context = pa_tmp1.context
21322                  and qcdt2.curr_attribute = pa_tmp1.attribute
21323                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
21324                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
21325                  and qcdt2.to_currency_code = qcdt.to_currency_code
21326                  and qcdt2.currency_header_id = qcdt.currency_header_id
21327                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
21328                  and pa_tmp1.line_index = qplines.line_index
21329                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21330                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21331                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21332              ))
21333         )
21334        )
21335   -- AND   QPLINES.VALIDATED_FLAG = G_NO  --13035945 13522077
21336    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
21337           OR
21338           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
21339          )
21340    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21341    AND  (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21342    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21343 		   NVL(TRUNC(atrgrps.START_DATE_ACTIVE_H),QPLINES.PRICING_EFFECTIVE_DATE)
21344 			   AND NVL(TRUNC(atrgrps.END_DATE_ACTIVE_H),QPLINES.PRICING_EFFECTIVE_DATE)
21345    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21346 		   NVL(TRUNC(atrgrps.START_DATE_ACTIVE_Q),QPLINES.PRICING_EFFECTIVE_DATE)
21347 			   AND NVL(TRUNC(atrgrps.END_DATE_ACTIVE_Q),QPLINES.PRICING_EFFECTIVE_DATE)
21348    ORDER BY 1,2;
21349 
21350 CURSOR L_SEC_LST_LIN_P1_QLFY_Y_CURR IS
21351 	SELECT
21352                  /*+ ORDERED index(qpl QP_LIST_LINES_N16)
21353 		  index(qplines QP_PREQ_LINES_TMP_U1)
21354 		  index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
21355                   index(qppqual QP_PREQ_PATRN_QUAL_T_N2)
21356 		 L_SEC_LST_LIN_P1_QLFY_Y_CURR */
21357 		 DISTINCT qpl.list_header_id,
21358 		  qpl.list_line_id list_line_id,
21359 		  qplines.line_index line_index,
21360 		  qpl.pattern_id matched_pattrn_id,
21361 		  G_PRICE_LIST_PHASE_ID,
21362 		  qpl.hash_key matched_hash_key,
21363 		  G_STAGE_CACHE_SEC_PL_LIN_SRCH stage,
21364 		  G_STATUS_UNCHANGED,
21365 		  qppqual.source_system_code,
21366 		  decode(qpl.QUALIFICATION_IND,6,'Y',22,'Y',2,'Y','N'),--qpq.header_quals_exist_flag,
21367 		  -1 grouping_no,
21368 		  qpl.eq_flag, ---to be discusseed
21369 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21370 		  G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21371 		  0 other_oprt_count,
21372 		  qpl.null_other_oprt_count,
21373 		  qppqual.list_type_code,
21374 		  qppqual.ask_for_flag,
21375 		  decode(qppqual.HEADER_LIMIT_EXISTS,'Y','Y',decode(qpl.limit_exists_flag,'Y','Y','N')), -- HEADER_LIMIT_EXISTS
21376 		  qpl.limit_exists_flag,
21377 		  qpl.BREAK_UOM_CODE,
21378 		  qpl.BREAK_UOM_CONTEXT,
21379 		  qpl.BREAK_UOM_ATTRIBUTE,
21380 		  QPLINES.CURRENCY_CODE ORDER_CURRENCY,
21381 		  qplines.pricing_effective_date,
21382 		  qppqual.CURRENCY_DETAIL_ID,
21383 		  qppqual.CURRENCY_HEADER_ID,
21384 		  qppqual.SELLING_ROUNDING_FACTOR,
21385 		  qppqual.BASE_CURRENCY_CODE,
21386 		  qppqual.qualifier_precedence,
21387                   'N' descendents_quals_exist,
21388 		  qpl.PRICE_BREAK_TYPE_CODE
21389    FROM   qp_npreq_lines_tmp qplines,
21390 	  qp_npreq_line_patrns_tmp qppattmp,
21391 	  qp_preq_patrn_qual_tmp qppqual,
21392 	  qp_list_lines qpl
21393    WHERE qppattmp.LINE_INDEX = qplines.LINE_INDEX
21394    AND   qppqual.LINE_INDEX = qplines.LINE_INDEX
21395    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21396    AND   qpl.pattern_id = qppattmp.pattern_id
21397    AND   qpl.hash_key = qppattmp.hash_key
21398    AND   QPL.LIST_HEADER_ID = qppqual.LIST_HEADER_ID
21399    AND    qppqual.stage = G_STAGE_CACHE_SEC_PL_HDR_SRCH
21400    AND   (QPLINES.PRICE_FLAG = G_YES
21401           OR
21402          (QPLINES.PRICE_FLAG = G_PHASE
21403           AND
21404           P_FREEZE_OVERRIDE_FLAG = G_YES))
21405    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21406    AND   QPLINES.LINE_TYPE_CODE = QPLINES.LINE_TYPE_CODE
21407    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21408 		   NVL(TRUNC(qpl.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21409 			   AND NVL(TRUNC(qpl.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21410    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21411    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21412    ORDER BY 1,2;
21413 
21414 CURSOR L_SEC_LST_HDR_P1_QLFY_N_CURR IS
21415 	SELECT
21416 		 /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_U1)
21417 		     index(qcdt QP_CURRENCY_DETAILS_N2)
21418                      index(qprs qp_pte_source_systems_u2)
21419 		 L_SEC_LST_HDR_P1_QLFY_N_CURR */
21420 		 DISTINCT qph.list_header_id,
21421 		  -1 list_line_id,
21422 		  qplines.line_index line_index,
21423 		  -2 matched_pattrn_id,
21424 		  G_PRICE_LIST_PHASE_ID,
21425 		  NULL matched_hash_key,
21426 		  G_STAGE_CACHE_SEC_PL_HDR_SRCH stage,
21427 		  G_STATUS_UNCHANGED,
21428 		  qph.source_system_code,
21429 		  'N',--qpq.header_quals_exist_flag,
21430 		  -1 grouping_no,
21431 		  'Y' eq_flag,
21432 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21433 		   G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21434 		  0 other_oprt_count,
21435 		  0 null_other_oprt_count,
21436                   qph.LIST_TYPE_CODE,
21437                   qph.ASK_FOR_FLAG,
21438                   qph.LIMIT_EXISTS_FLAG,
21439                   NULL LINE_LIMIT_EXISTS,
21440 		  QCDT.CURRENCY_DETAIL_ID,
21441        		  QCDT.CURRENCY_HEADER_ID,
21442 	       	  QCDT.SELLING_ROUNDING_FACTOR,
21443 	          qph.CURRENCY_CODE   BASE_CURRENCY_CODE,
21444        		  qplines.pricing_effective_date,
21445 		  qpq.qualifier_precedence,
21446                   'N' descendents_quals_exist
21447    FROM
21448          qp_npreq_lines_tmp qplines,
21449          QP_QUALIFIERS qpq,
21450 	 qp_list_headers_b qph,
21451          qp_pte_source_systems qprs,
21452          --QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
21453 	 qp_currency_details qcdt
21454    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
21455    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
21456    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
21457    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
21458    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3917802
21459    AND   QPQ.LIST_HEADER_ID = qph.LIST_HEADER_ID
21460    AND   (QPLINES.PRICE_FLAG = G_YES
21461           OR
21462          (QPLINES.PRICE_FLAG = G_PHASE
21463           AND
21464           P_FREEZE_OVERRIDE_FLAG = G_YES))
21465    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21466    AND   qph.ACTIVE_FLAG = G_YES
21467    AND   qph.pte_code = G_PTE_CODE
21468    --AND   qph.source_system_code = qprs.source_system_code --join
21469    --AND   qprs.request_type_code = g_request_type_code
21470    AND   qprs.APPLICATION_SHORT_NAME = qph.source_system_code
21471    AND   qprs.pte_code = G_PTE_CODE
21472    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
21473    AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
21474    AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
21475    AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21476                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21477                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21478    AND (
21479         (qcdt.curr_attribute_context is null
21480          and not exists
21481              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
21482 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
21483                where qcdt1.curr_attribute_context IS NOT NULL
21484 		 and qcdt1.curr_attribute_context = pa_tmp.context
21485                  and qcdt1.curr_attribute = pa_tmp.attribute
21486                  and qcdt1.curr_attribute_value = pa_tmp.value_from
21487                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
21488                  and qcdt1.to_currency_code = qcdt.to_currency_code
21489                  and qcdt1.currency_header_id = qcdt.currency_header_id
21490                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
21491                  and pa_tmp.line_index = qplines.line_index
21492                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21493                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21494                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21495              )
21496         )
21497         OR
21498         (qcdt.curr_attribute_context is not null
21499          and qcdt.currency_detail_id =
21500              (select qcdt3.currency_detail_id
21501 	       from qp_currency_details qcdt3
21502                  where qcdt3.to_currency_code = qcdt.to_currency_code
21503                  and qcdt3.currency_header_id = qcdt.currency_header_id
21504                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21505                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21506                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21507                  and  qcdt3.precedence =
21508              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */ min(qcdt2.precedence)
21509 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
21510                where qcdt2.curr_attribute_context IS NOT NULL
21511 		 and qcdt2.curr_attribute_context = pa_tmp1.context
21512                  and qcdt2.curr_attribute = pa_tmp1.attribute
21513                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
21514                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
21515                  and qcdt2.to_currency_code = qcdt.to_currency_code
21516                  and qcdt2.currency_header_id = qcdt.currency_header_id
21517                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
21518                  and pa_tmp1.line_index = qplines.line_index
21519                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21520                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21521                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21522              ))
21523         )
21524        )
21525    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
21526 		OR
21527 		QPLINES.QUALIFIERS_EXIST_FLAG = 'N')
21528    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21529    AND  (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21530    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21531 		   NVL(TRUNC(qph.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21532 			   AND NVL(TRUNC(qph.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21533    ORDER BY 1,2;
21534 
21535 CURSOR L_SEC_LST_LIN_P1_QLFY_N_CURR IS
21536 	SELECT
21537 		 /*+ ORDERED index(qpl QP_LIST_LINES_N16)
21538 		     index(qplines QP_PREQ_LINES_TMP_U1)
21539                      index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
21540                      index(qppqual QP_PREQ_PATRN_QUAL_T_N2)
21541 		      L_SEC_LST_LIN_P1_QLFY_N_CURR */
21542 		 DISTINCT qpl.list_header_id,
21543 		  qpl.list_line_id list_line_id,
21544 		  qplines.line_index line_index,
21545 		  qpl.pattern_id matched_pattrn_id,
21546 		  G_PRICE_LIST_PHASE_ID,
21547 		  qpl.hash_key matched_hash_key,
21548 		  G_STAGE_CACHE_SEC_PL_LIN_SRCH stage,
21549 		  G_STATUS_UNCHANGED,
21550 		  qppqual.source_system_code,
21551 		  decode(qpl.QUALIFICATION_IND,6,'Y',22,'Y',2,'Y','N'),--qpq.header_quals_exist_flag,
21552 		  -1 grouping_no,
21553 		  qpl.eq_flag, ---to be discusseed
21554 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21555 		  G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21556 		  0 other_oprt_count,
21557 		  qpl.null_other_oprt_count,
21558 		  qppqual.list_type_code,
21559 		  qppqual.ask_for_flag,
21560 		  decode(qppqual.HEADER_LIMIT_EXISTS,'Y','Y',decode(qpl.limit_exists_flag,'Y','Y','N')), -- HEADER_LIMIT_EXISTS
21561 		  qpl.limit_exists_flag,
21562 		  qpl.BREAK_UOM_CODE,
21563 		  qpl.BREAK_UOM_CONTEXT,
21564 		  qpl.BREAK_UOM_ATTRIBUTE,
21565 		  QPLINES.CURRENCY_CODE ORDER_CURRENCY,
21566 		  qplines.pricing_effective_date,
21567 		  qppqual.CURRENCY_DETAIL_ID,
21568 		  qppqual.CURRENCY_HEADER_ID,
21569 		  qppqual.SELLING_ROUNDING_FACTOR,
21570 		  qppqual.BASE_CURRENCY_CODE,
21571 		  qppqual.qualifier_precedence,
21572                   'N' descendents_quals_exist,
21573   		  qpl.PRICE_BREAK_TYPE_CODE
21574    FROM   qp_npreq_lines_tmp qplines,
21575 	  qp_npreq_line_patrns_tmp qppattmp,
21576           qp_preq_patrn_qual_tmp qppqual,
21577 	  qp_list_lines qpl
21578    WHERE qppattmp.LINE_INDEX = qplines.LINE_INDEX
21579    AND   qppqual.LINE_INDEX = qplines.LINE_INDEX
21580    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21581    AND   qpl.pattern_id = qppattmp.pattern_id
21582    AND   qpl.hash_key = qppattmp.hash_key
21583    AND   QPL.LIST_HEADER_ID = qppqual.LIST_HEADER_ID
21584    AND   qppqual.stage = G_STAGE_CACHE_SEC_PL_HDR_SRCH
21585    AND   (QPLINES.PRICE_FLAG = G_YES
21586           OR
21587          (QPLINES.PRICE_FLAG = G_PHASE
21588           AND
21589           P_FREEZE_OVERRIDE_FLAG = G_YES))
21590    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21591    AND   QPLINES.LINE_TYPE_CODE = QPLINES.LINE_TYPE_CODE
21592    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21593 		   NVL(TRUNC(qpl.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21594 			   AND NVL(TRUNC(qpl.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21595    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21596    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21597    ORDER BY 1,2;
21598 
21599 CURSOR L_SEC_LST_HDR_P1_QLFY_SEC_N IS
21600 	SELECT
21601 		 /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_U1)
21602 		     index(qprs qp_pte_source_systems_u2)
21603    		     L_SEC_LST_HDR_P1_QLFY_SEC_N */
21604 		 DISTINCT qph.list_header_id,
21605 		  -1 list_line_id,
21606 		  qplines.line_index line_index,
21607 		  NULL matched_pattrn_id,
21608 		  G_PRICE_LIST_PHASE_ID,
21609 		  NULL matched_hash_key,
21610 		  G_STAGE_CACHE_SEC_PL_HDR_SRCH stage,
21611 		  G_STATUS_UNCHANGED,
21612 		  qph.source_system_code,
21613 		  NULL,--qpq.header_quals_exist_flag,
21614 		  -1 grouping_no,
21615 		  'Y' eq_flag,
21616 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21617 		   G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21618 		  0 other_oprt_count,
21619 		  0 null_other_oprt_count,
21620                   qph.LIST_TYPE_CODE,
21621                   qph.ASK_FOR_FLAG,
21622                   qph.LIMIT_EXISTS_FLAG,
21623                   NULL LINE_LIMIT_EXISTS,
21624 		  NULL, --QCDT.CURRENCY_DETAIL_ID,
21625        		  NULL, --QCDT.CURRENCY_HEADER_ID,
21626        		  NULL, --QCDT.SELLING_ROUNDING_FACTOR,
21627        		  qph.CURRENCY_CODE   BASE_CURRENCY_CODE,
21628 	       	  qplines.pricing_effective_date,
21629 		  qpq.qualifier_precedence,
21630                   'N' descendents_quals_exist
21631    FROM
21632          qp_npreq_lines_tmp qplines,
21633 	 QP_QUALIFIERS qpq,
21634          qp_list_headers_b qph,
21635 	 qp_pte_source_systems qprs
21636          --QP_PRICE_REQ_SOURCES_V qprs /* yangli */
21637    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
21638    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
21639    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
21640    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
21641    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3917802
21642    AND   QPQ.LIST_HEADER_ID = qph.LIST_HEADER_ID
21643    AND   (QPLINES.PRICE_FLAG = G_YES
21644           OR
21645          (QPLINES.PRICE_FLAG = G_PHASE
21646           AND
21647           P_FREEZE_OVERRIDE_FLAG = G_YES))
21648    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21649    AND   qph.ACTIVE_FLAG = G_YES
21650    AND   qph.pte_code = G_PTE_CODE
21651    --AND   qph.source_system_code = qprs.source_system_code --join
21652    --AND   qprs.request_type_code = g_request_type_code
21653    AND   qprs.APPLICATION_SHORT_NAME = qph.source_system_code
21654    AND   qprs.pte_code = G_PTE_CODE
21655    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
21656    AND   qph.CURRENCY_CODE = QPLINES.CURRENCY_CODE
21657    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
21658 		OR QPLINES.QUALIFIERS_EXIST_FLAG = 'N')
21659    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21660    AND  (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21661    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21662 		   NVL(TRUNC(qph.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21663 			   AND NVL(TRUNC(qph.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21664    ORDER BY 1,2;
21665 
21666 CURSOR L_SEC_LST_LIN_P1_QLFY_SEC_N IS
21667 	SELECT
21668 		/*+ ORDERED index(qpl QP_LIST_LINES_N16)
21669 		     index(qplines QP_PREQ_LINES_TMP_U1)
21670                      index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
21671                      index(qppqual QP_PREQ_PATRN_QUAL_T_N2)
21672 		      L_SEC_LST_LIN_P1_QLFY_SEC_N */
21673 		 DISTINCT qpl.list_header_id,
21674 		  qpl.list_line_id list_line_id,
21675 		  qplines.line_index line_index,
21676 		  qpl.pattern_id matched_pattrn_id,
21677 		  G_PRICE_LIST_PHASE_ID,
21678 		  qpl.hash_key matched_hash_key,
21679 		  G_STAGE_CACHE_SEC_PL_LIN_SRCH stage,
21680 		  G_STATUS_UNCHANGED,
21681 		  qppqual.source_system_code,
21682 		  decode(qpl.QUALIFICATION_IND,6,'Y',22,'Y',2,'Y','N'),--qpq.header_quals_exist_flag,
21683 		  -1 grouping_no,
21684 		  qpl.eq_flag, ---to be discusseed
21685 		  QPLINES.VALIDATED_FLAG,  -- VALIDATED_FLAG
21686 		  G_LINE_LEVEL,--MODIFIER_LEVEL_CODE,
21687 		  0 other_oprt_count,
21688 		  qpl.null_other_oprt_count,
21689 		  qppqual.list_type_code,
21690 		  qppqual.ask_for_flag,
21691 		  decode(qppqual.HEADER_LIMIT_EXISTS,'Y','Y',decode(qpl.limit_exists_flag,'Y','Y','N')), -- HEADER_LIMIT_EXISTS
21692 		  qpl.limit_exists_flag,
21693 		  qpl.BREAK_UOM_CODE,
21694 		  qpl.BREAK_UOM_CONTEXT,
21695 		  qpl.BREAK_UOM_ATTRIBUTE,
21696 		  QPLINES.CURRENCY_CODE ORDER_CURRENCY,
21697 		  qplines.pricing_effective_date,
21698 		  qppqual.qualifier_precedence,
21699 		  'N' descendents_quals_exist,
21700   		  qpl.PRICE_BREAK_TYPE_CODE
21701    FROM   qp_npreq_lines_tmp qplines,
21702 	  qp_npreq_line_patrns_tmp qppattmp,
21703           qp_preq_patrn_qual_tmp qppqual,
21704 	  qp_list_lines qpl
21705    WHERE qppattmp.LINE_INDEX = qplines.LINE_INDEX
21706    AND   qppqual.LINE_INDEX = qplines.LINE_INDEX
21707    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21708    AND   qpl.pattern_id = qppattmp.pattern_id
21709    AND   qpl.hash_key = qppattmp.hash_key
21710    AND   QPL.LIST_HEADER_ID = qppqual.LIST_HEADER_ID
21711    AND   qppqual.stage = G_STAGE_CACHE_SEC_PL_HDR_SRCH
21712    AND   (QPLINES.PRICE_FLAG = G_YES
21713           OR
21714          (QPLINES.PRICE_FLAG = G_PHASE
21715           AND
21716           P_FREEZE_OVERRIDE_FLAG = G_YES))
21717    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21718    AND   QPLINES.LINE_TYPE_CODE = QPLINES.LINE_TYPE_CODE
21719    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21720 		   NVL(TRUNC(qpl.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21721 			   AND NVL(TRUNC(qpl.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21722    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21723    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
21724    ORDER BY 1,2;
21725 
21726 /****************************/
21727 CURSOR L_SEC_SRCH_BOTH_P2_QLFY_N IS
21728 
21729    SELECT /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_U1)
21730 	index(QPQ QP_QUALIFIERS_N4)
21731        index(qpl QP_LIST_LINES_N17)
21732        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
21733        index(qpatrgrp QP_ATTRIBUTE_GROUPS_N1)
21734        index(qprs qp_pte_source_systems_u2)
21735        L_SEC_SRCH_BOTH_P2_QLFY_N */
21736       DISTINCT
21737          qpl.LIST_HEADER_ID,
21738          qpl.LIST_LINE_ID,
21739          qplines.LINE_INDEX,
21740          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
21741 	 NULL  AG_MATCHED_PATTRN_ID,
21742          G_PRICE_LIST_PHASE_ID,
21743          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
21744          NULL  AG_MATCHED_HASH_KEY,
21745 	 G_STAGE_CACHE_SEC_PL_LIN_SRCH2 STAGE,
21746 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
21747          qpatrgrp.source_system_code,
21748          --decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
21749 	 --DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
21750 	 DECODE(qpatrgrp.EQ_FLAG,'N','Y',DECODE(qpatrgrp.descendents_quals_exist,'Y','Y','N')) HEADER_QUALS_EXIST_FLAG,
21751          -1 qpl_grpng_num,
21752          qpatrgrp.GROUPING_NO ag_grpng_num,
21753          qpl.EQ_FLAG QPL_EQFLAG,
21754 	 qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
21755          qplines.VALIDATED_FLAG,
21756          qpl.MODIFIER_LEVEL_CODE,
21757          qpl.null_other_oprt_count qpl_other_oprt_cnt,
21758          qpatrgrp.other_oprt_count ag_other_oprt_cnt,
21759          qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
21760 	 qpatrgrp.LIST_TYPE_CODE,
21761          qpatrgrp.ASK_FOR_FLAG,
21762          qpatrgrp.HEADER_LIMIT_EXISTS,
21763          qpatrgrp.LINE_LIMIT_EXISTS,
21764 	 NULL CURRENCY_DETAIL_ID,
21765          NULL CURRENCY_HEADER_ID,
21766          NULL SELLING_ROUNDING_FACTOR,
21767          qpatrgrp.CURRENCY_CODE   BASE_CURRENCY_CODE,
21768          qplines.pricing_effective_date,
21769          qpl.BREAK_UOM_CODE,
21770          qpl.BREAK_UOM_CONTEXT,
21771          qpl.BREAK_UOM_ATTRIBUTE,
21772          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
21773 	 qpq.qualifier_precedence,
21774 	 'N' descendents_quals_exist,
21775 	 qpl.PRICE_BREAK_TYPE_CODE
21776    FROM qp_npreq_lines_tmp qplines,
21777 	QP_QUALIFIERS QPQ,
21778         qp_npreq_line_patrns_tmp qppattmp1,
21779 	qp_list_lines qpl,
21780 	qp_secu_attr_groups_v qpatrgrp,
21781 	--qp_attribute_groups qpatrgrp,
21782         qp_pte_source_systems qprs
21783         --qp_price_req_sources_v qprs
21784    WHERE qppattmp1.line_index = qplines.line_index
21785    AND   QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
21786    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
21787    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
21788    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
21789    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3917802
21790    AND   QPQ.LIST_HEADER_ID = QPL.LIST_HEADER_ID
21791    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21792    AND   (QPLINES.PRICE_FLAG = G_YES
21793           OR
21794          (QPLINES.PRICE_FLAG = G_PHASE
21795           AND
21796           P_FREEZE_OVERRIDE_FLAG = G_YES))
21797    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21798    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
21799    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
21800              OR
21801          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
21802 	  )
21803    AND   qppattmp1.pattern_id = qpl.pattern_id
21804    AND   qppattmp1.hash_key = qpl.hash_key
21805    AND   qpl.pte_code = G_PTE_CODE
21806    AND   QPQ.ACTIVE_FLAG = G_YES
21807    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21808    AND qpl.pricing_phase_id = G_PRICE_LIST_PHASE_ID
21809      AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
21810           BETWEEN nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21811 	   AND nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21812      AND qpatrgrp.list_header_id = qpl.list_header_id
21813      AND qpatrgrp.pricing_phase_id = G_PRICE_LIST_PHASE_ID
21814      AND qpatrgrp.active_flag = G_YES
21815      AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = qpatrgrp.orig_org_id) OR -- begin security
21816          (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(qpatrgrp.global_flag,'Y') = 'Y') OR
21817          nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
21818      AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
21819           BETWEEN nvl(qpatrgrp.START_DATE_ACTIVE_H,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21820           AND nvl(qpatrgrp.END_DATE_ACTIVE_H,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21821      AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
21822          BETWEEN NVL(TRUNC(qpatrgrp.START_DATE_ACTIVE_Q),nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21823          AND NVL(TRUNC(qpatrgrp.END_DATE_ACTIVE_Q),nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21824      --AND qprs.source_system_code = qpatrgrp.source_system_code
21825      --AND qprs.request_type_code = qplines.request_type_code -- check it
21826      AND qprs.APPLICATION_SHORT_NAME = qpatrgrp.source_system_code
21827      AND qprs.pte_code = G_PTE_CODE
21828      AND qpatrgrp.currency_code = qplines.currency_code
21829      AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
21830 
21831 CURSOR L_SEC_SRCH_BOTH_P2_QLFY_N_CURR IS
21832 
21833    SELECT /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_U1)
21834 	index(QPQ QP_QUALIFIERS_N4)
21835        index(qpl QP_LIST_LINES_N16)
21836        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
21837        index(qpatrgrp QP_ATTRIBUTE_GROUPS_N1)
21838        index(qcdt QP_CURRENCY_DETAILS_N2)
21839        index(qprs qp_pte_source_systems_u2)
21840        L_SEC_SRCH_BOTH_P2_QLFY_N_CURR */
21841       DISTINCT
21842          qpl.LIST_HEADER_ID,
21843          qpl.LIST_LINE_ID,
21844          qplines.LINE_INDEX,
21845          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
21846 	 NULL  AG_MATCHED_PATTRN_ID,
21847          G_PRICE_LIST_PHASE_ID,
21848          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
21849          NULL  AG_MATCHED_HASH_KEY,
21850 	 G_STAGE_CACHE_SEC_PL_LIN_SRCH2 STAGE,
21851 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
21852          qpatrgrp.source_system_code,
21853          --decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
21854 	 --DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
21855 	 DECODE(qpatrgrp.EQ_FLAG,'N','Y',DECODE(qpatrgrp.descendents_quals_exist,'Y','Y','N')) HEADER_QUALS_EXIST_FLAG,
21856          -1 qpl_grpng_num,
21857          qpatrgrp.GROUPING_NO ag_grpng_num,
21858          qpl.EQ_FLAG QPL_EQFLAG,
21859 	 qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
21860          qplines.VALIDATED_FLAG,
21861          qpl.MODIFIER_LEVEL_CODE,
21862          qpl.null_other_oprt_count qpl_other_oprt_cnt,
21863          qpatrgrp.other_oprt_count ag_other_oprt_cnt,
21864          qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
21865 	 qpatrgrp.LIST_TYPE_CODE,
21866          qpatrgrp.ASK_FOR_FLAG,
21867          qpatrgrp.HEADER_LIMIT_EXISTS,
21868          qpatrgrp.LINE_LIMIT_EXISTS,
21869 	 NULL CURRENCY_DETAIL_ID,
21870          NULL CURRENCY_HEADER_ID,
21871          NULL SELLING_ROUNDING_FACTOR,
21872          qpatrgrp.CURRENCY_CODE   BASE_CURRENCY_CODE,
21873          qplines.pricing_effective_date,
21874          qpl.BREAK_UOM_CODE,
21875          qpl.BREAK_UOM_CONTEXT,
21876          qpl.BREAK_UOM_ATTRIBUTE,
21877          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
21878 	 qpq.qualifier_precedence,
21879 	 'N' descendents_quals_exist,
21880   	 qpl.PRICE_BREAK_TYPE_CODE
21881    FROM qp_npreq_lines_tmp qplines,
21882 	QP_QUALIFIERS QPQ,
21883         qp_npreq_line_patrns_tmp qppattmp1,
21884 	qp_list_lines qpl,
21885 	qp_secu_attr_groups_v qpatrgrp,
21886 	--qp_attribute_groups qpatrgrp,
21887         qp_pte_source_systems qprs,
21888         --qp_price_req_sources_v qprs,
21889 	QP_CURRENCY_DETAILS QCDT
21890    WHERE qppattmp1.line_index = qplines.line_index
21891    AND   QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
21892    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
21893    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
21894    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
21895    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3917802
21896    AND   QPQ.LIST_HEADER_ID = QPL.LIST_HEADER_ID
21897    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
21898    AND   (QPLINES.PRICE_FLAG = G_YES
21899           OR
21900          (QPLINES.PRICE_FLAG = G_PHASE
21901           AND
21902           P_FREEZE_OVERRIDE_FLAG = G_YES))
21903    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
21904    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
21905    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
21906              OR
21907          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
21908 	  )
21909    AND   qppattmp1.pattern_id = qpl.pattern_id
21910    AND   qppattmp1.hash_key = qpl.hash_key
21911    AND   qpl.pte_code = G_PTE_CODE
21912    AND   QPQ.ACTIVE_FLAG = G_YES
21913    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
21914    AND qpl.pricing_phase_id = G_PRICE_LIST_PHASE_ID
21915      AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
21916           BETWEEN nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21917 	   AND nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21918      AND qpatrgrp.list_header_id = qpl.list_header_id
21919      AND qpatrgrp.pricing_phase_id = G_PRICE_LIST_PHASE_ID
21920      AND qpatrgrp.active_flag = G_YES
21921      AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = qpatrgrp.orig_org_id) OR -- begin security
21922          (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(qpatrgrp.global_flag,'Y') = 'Y') OR
21923          nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
21924      AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
21925           BETWEEN nvl(qpatrgrp.START_DATE_ACTIVE_H,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21926           AND nvl(qpatrgrp.END_DATE_ACTIVE_H,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21927      AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
21928          BETWEEN NVL(TRUNC(qpatrgrp.START_DATE_ACTIVE_Q),nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21929          AND NVL(TRUNC(qpatrgrp.END_DATE_ACTIVE_Q),nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
21930      --AND qprs.source_system_code = qpatrgrp.source_system_code
21931      --AND qprs.request_type_code = qplines.request_type_code -- check it
21932      AND qprs.APPLICATION_SHORT_NAME = qpatrgrp.source_system_code
21933      AND qprs.pte_code = G_PTE_CODE
21934 --     AND atrgrps.currency_code = qplines.currency_code
21935      AND qpatrgrp.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
21936      AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
21937      AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21938                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21939                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21940    AND (
21941         (qcdt.curr_attribute_context is null
21942          and not exists
21943              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
21944 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
21945                where qcdt1.curr_attribute_context IS NOT NULL
21946 		 and qcdt1.curr_attribute_context = pa_tmp.context
21947                  and qcdt1.curr_attribute = pa_tmp.attribute
21948                  and qcdt1.curr_attribute_value = pa_tmp.value_from
21949                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
21950                  and qcdt1.to_currency_code = qcdt.to_currency_code
21951                  and qcdt1.currency_header_id = qcdt.currency_header_id
21952                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
21953                  and pa_tmp.line_index = qplines.line_index
21954                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21955                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21956                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21957              )
21958         )
21959         OR
21960         (qcdt.curr_attribute_context is not null
21961          and qcdt.currency_detail_id =
21962              (select qcdt3.currency_detail_id
21963 	       from qp_currency_details qcdt3
21964                  where qcdt3.to_currency_code = qcdt.to_currency_code
21965                  and qcdt3.currency_header_id = qcdt.currency_header_id
21966                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21967                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21968                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21969                  and  qcdt3.precedence =
21970              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */ min(qcdt2.precedence)
21971 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
21972                where qcdt2.curr_attribute_context IS NOT NULL
21973 		 and qcdt2.curr_attribute_context = pa_tmp1.context
21974                  and qcdt2.curr_attribute = pa_tmp1.attribute
21975                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
21976                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
21977                  and qcdt2.to_currency_code = qcdt.to_currency_code
21978                  and qcdt2.currency_header_id = qcdt.currency_header_id
21979                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
21980                  and pa_tmp1.line_index = qplines.line_index
21981                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
21982                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21983                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
21984              ))
21985         )
21986        )
21987      AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
21988 
21989 /****************************/
21990 
21991 l_limit NUMBER := 5000;
21992 l_stage varchar2(300);
21993 
21994   TYPE l_number IS TABLE OF NUMBER INDEX BY pls_integer;
21995   l_list_header_id_tbl l_number;
21996   l_list_line_id_tbl l_number;
21997   l_matched_pattrn_id_tbl l_number;
21998   l_ag_matched_pat_id_tbl l_number;
21999   l_line_index_tbl l_number;
22000   l_pricing_phase_id_tbl l_number;
22001   l_grouping_no l_number;
22002   l_ag_grpng_no l_number;
22003   l_other_oprt_count l_number;
22004   l_ag_othr_oprt_cnt l_number;
22005   l_null_other_oprt_count l_number;
22006   l_curr_det_id l_number;
22007   l_curr_hdr_id l_number;
22008   L_SELLNG_ROUND_FTR l_number;
22009   L_qualifier_precedence l_number;
22010 
22011   TYPE l_string IS TABLE OF VARCHAR2(2000) INDEX BY pls_integer;
22012   l_matched_hash_key_tbl l_string;
22013   l_ag_mtchd_hash_key_tbl l_string;
22014   l_stage_tbl l_string;
22015   l_pricing_status_code_tbl l_string;
22016   l_ssc l_string;
22017   l_header_quals_exist_flag l_string;
22018   l_eq_flag l_string;
22019   l_ag_eq_flag l_string;
22020   l_validated_flag l_string;
22021   l_modf_lvl_code l_string;
22022   l_list_type_code l_string;
22023   l_ask_for_flag l_string;
22024   l_hdr_lmt_exists l_string;
22025   l_line_lmt_exists l_string;
22026   l_order_curr l_string;
22027   l_base_curr_code l_string;
22028   l_brk_uom_code l_string;
22029   l_brk_uom_ctxt l_string;
22030   l_brk_uom_attr l_string;
22031   l_curr_code l_string;
22032   l_descnt_quals_exist l_string;
22033   l_PRICE_BREAK_TYPE_CODE l_string;
22034 
22035   TYPE l_date IS TABLE OF DATE INDEX BY pls_integer;
22036 
22037   l_prcng_effctve_dt l_date;
22038 
22039 l_routine VARCHAR2(40) := 'PERFORM_SECONDARY_PATRN_SEARCH';
22040 E_ROUTINE_ERRORS EXCEPTION;
22041 l_list_line_id        NUMBER;
22042 
22043 l_loop_count          NUMBER := 0;
22044 l_dummy varchar2(200);
22045 
22046 
22047 BEGIN
22048 
22049 --G_CURRENT_USER_OP_UNIT   := NVL(p_control_rec.PRICING_ORG_ID, FND_PROFILE.VALUE('ORG_ID')); -- security
22050    x_status_code := fnd_api.g_ret_sts_success;
22051 
22052  qp_debug_util.tstart('PERFORM_SECONDARY_PAT_SEARCH','Performing Secondary Price List Pattern Search', false, true);
22053 
22054 Update_Sec_Price_List_Info(x_status_code,x_status_text);
22055 
22056   IF g_debug_engine = fnd_api.g_true THEN
22057 	engine_debug('Entering into pattern PERFORM_SECONDARY_SEARCH');
22058   END IF;
22059 
22060  -- Update the price list id , validated flag , and primary_qualifiers_match flag for sec search
22061  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN   --bug 4103259
22062     engine_debug ('QP_QUALIFY_SECONDARY_PRICE_LISTS:' || G_QUALIFY_SECONDARY);
22063  END IF;
22064 
22065 
22066 
22067  IF (x_status_code = FND_API.G_RET_STS_ERROR) THEN
22068   RAISE E_ROUTINE_ERRORS;
22069  END IF;
22070 
22071 
22072 IF G_QUALIFY_SECONDARY = G_YES THEN
22073 	if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
22074 	  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22075 	  engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
22076 	  END IF;
22077 
22078 		OPEN L_SEC_LST_HDR_P1_QLFY_Y_CURR;
22079 		qp_debug_util.tstart('L_SEC_LST_HDR_P1_QLFY_Y_CURR',   'L_SEC_LST_HDR_P1_QLFY_Y_CURR');
22080 	ELSE
22081 	 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22082 	  engine_debug('cursor l_sec_list_cur   multi-currency FALSE');
22083 	  END IF;
22084 
22085 		OPEN L_SEC_LST_HDR_P1_QLFY_SEC_Y;
22086 		qp_debug_util.tstart('L_SEC_LST_HDR_P1_QLFY_SEC_Y',   'L_SEC_LST_HDR_P1_QLFY_SEC_Y');
22087 
22088 	END IF;
22089 
22090 	    LOOP
22091 	      l_list_header_id_tbl.DELETE;
22092 	      l_list_line_id_tbl.DELETE;
22093 	      l_line_index_tbl.DELETE;
22094 	      l_matched_pattrn_id_tbl.DELETE;
22095               l_ag_matched_pat_id_tbl.DELETE;
22096 	      l_pricing_phase_id_tbl.DELETE;
22097 	      l_matched_hash_key_tbl.DELETE;
22098 	      l_ag_mtchd_hash_key_tbl.DELETE;
22099 	      l_stage_tbl.DELETE;
22100 	      l_pricing_status_code_tbl.DELETE;
22101 	      l_ssc.DELETE;
22102 	      l_header_quals_exist_flag.DELETE;
22103 	      l_grouping_no.DELETE;
22104 	      l_ag_grpng_no.DELETE;
22105 	      l_eq_flag.DELETE;
22106 	      l_ag_eq_flag.DELETE;
22107 	      l_validated_flag.DELETE;
22108 	      l_modf_lvl_code.DELETE;
22109               l_other_oprt_count.DELETE;
22110 	      l_ag_othr_oprt_cnt.DELETE;
22111 	      l_null_other_oprt_count.DELETE;
22112               l_list_type_code.DELETE;
22113 	      l_ask_for_flag.DELETE;
22114 	      l_hdr_lmt_exists.DELETE;
22115 	      l_line_lmt_exists.DELETE;
22116 	      l_curr_det_id.DELETE;
22117 	      l_curr_hdr_id.DELETE;
22118 	      L_SELLNG_ROUND_FTR.DELETE;
22119               l_base_curr_code.DELETE;
22120 	      l_prcng_effctve_dt.DELETE;
22121               l_brk_uom_code.DELETE;
22122               l_brk_uom_ctxt.DELETE;
22123               l_brk_uom_attr.DELETE;
22124               l_order_curr.DELETE;
22125 	      L_qualifier_precedence.DELETE;
22126 	      l_curr_det_id.DELETE;
22127 	      l_curr_hdr_id.DELETE;
22128 	      L_SELLNG_ROUND_FTR.DELETE;
22129               l_base_curr_code.DELETE;
22130               l_descnt_quals_exist.DELETE;
22131               l_PRICE_BREAK_TYPE_CODE.DELETE;
22132 
22133 		if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
22134 
22135 				FETCH L_SEC_LST_HDR_P1_QLFY_Y_CURR BULK COLLECT
22136 				INTO l_list_header_id_tbl,
22137 				l_list_line_id_tbl,
22138 				l_line_index_tbl,
22139 				l_matched_pattrn_id_tbl,
22140 				l_pricing_phase_id_tbl,
22141 				l_matched_hash_key_tbl,
22142 				l_stage_tbl,
22143 				l_pricing_status_code_tbl,
22144 				l_ssc,
22145 				l_header_quals_exist_flag,
22146 				l_grouping_no,
22147 				l_eq_flag,
22148 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
22149 				l_list_type_code,
22150 				l_ask_for_flag,
22151 				l_hdr_lmt_exists,
22152 				l_line_lmt_exists,
22153 				l_curr_det_id,
22154 				l_curr_hdr_id,
22155 				L_SELLNG_ROUND_FTR,
22156 				l_curr_code,
22157 				l_prcng_effctve_dt,
22158 				L_qualifier_precedence,
22159                                 l_descnt_quals_exist
22160 				limit l_limit;
22161 
22162 		ELSE
22163 				FETCH L_SEC_LST_HDR_P1_QLFY_SEC_Y BULK COLLECT
22164 				INTO l_list_header_id_tbl,
22165 				l_list_line_id_tbl,
22166 				l_line_index_tbl,
22167 				l_matched_pattrn_id_tbl,
22168 				l_pricing_phase_id_tbl,
22169 				l_matched_hash_key_tbl,
22170 				l_stage_tbl,
22171 				l_pricing_status_code_tbl,
22172 				l_ssc,
22173 				l_header_quals_exist_flag,
22174 				l_grouping_no,
22175 				l_eq_flag,
22176 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
22177 				l_list_type_code,
22178 				l_ask_for_flag,
22179 				l_hdr_lmt_exists,
22180 				l_line_lmt_exists,
22181 				l_curr_det_id,
22182 				l_curr_hdr_id,
22183 				L_SELLNG_ROUND_FTR,
22184 				l_curr_code,
22185 				l_prcng_effctve_dt,
22186 				L_qualifier_precedence,
22187                                 l_descnt_quals_exist
22188 				limit l_limit;
22189 
22190 		END IF;
22191 
22192 	      EXIT WHEN l_list_header_id_tbl.COUNT = 0;
22193 
22194 	    forall i IN 1 .. l_list_header_id_tbl.COUNT
22195 	    INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
22196 					list_line_id,
22197 					line_index,
22198 					matched_pattrn_id,
22199 					pricing_phase_id,
22200 					matched_hash_key,
22201 					stage,
22202 					pricing_status_code,
22203 					source_system_code,
22204 					header_quals_exist_flag,
22205 					grouping_no,
22206 					eq_flag,
22207 					validated_flag,
22208 					MODIFIER_LEVEL_CODE,
22209 					other_oprt_count,
22210 					null_other_oprt_count,
22211    					LIST_TYPE_CODE,
22212 					ASK_FOR_FLAG,
22213 					HEADER_LIMIT_EXISTS,
22214 					LINE_LIMIT_EXISTS,
22215 					CURRENCY_DETAIL_ID,
22216 					CURRENCY_HEADER_ID,
22217 					SELLING_ROUNDING_FACTOR,
22218 					BASE_CURRENCY_CODE,
22219 					PRICING_EFFECTIVE_DATE,
22220 					qualifier_precedence,
22221 					descendents_quals_exist
22222 					)
22223 			    VALUES(l_list_header_id_tbl(i),
22224 					l_list_line_id_tbl(i),
22225 					l_line_index_tbl(i),
22226 					l_matched_pattrn_id_tbl(i),
22227 					l_pricing_phase_id_tbl(i),
22228 					l_matched_hash_key_tbl(i),
22229 					l_stage_tbl(i),
22230 					l_pricing_status_code_tbl(i),
22231 					l_ssc(i),
22232 					l_header_quals_exist_flag(i),
22233 					l_grouping_no(i),
22234 					l_eq_flag(i),
22235 					l_validated_flag(i),
22236 					l_modf_lvl_code(i),
22237 					l_other_oprt_count(i),
22238 					l_null_other_oprt_count(i),
22239 					l_list_type_code(i),
22240 					l_ask_for_flag(i),
22241 					l_hdr_lmt_exists(i),
22242 					l_line_lmt_exists(i),
22243 					l_curr_det_id(i),
22244 					l_curr_hdr_id(i),
22245 					L_SELLNG_ROUND_FTR(i),
22246 					l_curr_code(i),
22247 					l_prcng_effctve_dt(i),
22248 					L_qualifier_precedence(i),
22249 					l_descnt_quals_exist(i)
22250 					);
22251 
22252 		l_loop_count:=l_loop_count+1;
22253 	    --exit when l_header_cache_cur%rowcount < l_limit;
22254 	  END LOOP;
22255 	   if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
22256 		IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22257 			engine_debug('cursor close l_list_cur_currency-multi-currency TRUE');
22258 		END IF;
22259 
22260 			CLOSE L_SEC_LST_HDR_P1_QLFY_Y_CURR;
22261 			qp_debug_util.tstop('L_SEC_LST_HDR_P1_QLFY_Y_CURR');
22262 	else
22263 			CLOSE L_SEC_LST_HDR_P1_QLFY_SEC_Y;
22264 			qp_debug_util.tstop('L_SEC_LST_HDR_P1_QLFY_SEC_Y');
22265 	end if;
22266 
22267 ELSE ----profile no
22268 	if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
22269 	  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22270 	  engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
22271 	  END IF;
22272 		IF p_search_path = 1 THEN
22273 	  		OPEN L_SEC_LST_HDR_P1_QLFY_N_CURR;
22274 			qp_debug_util.tstart('L_SEC_LST_HDR_P1_QLFY_N_CURR',   'L_SEC_LST_HDR_P1_QLFY_N_CURR');
22275 		ELSE
22276 			OPEN L_SEC_SRCH_BOTH_P2_QLFY_N_CURR;
22277 			qp_debug_util.tstart('L_SEC_SRCH_BOTH_P2_QLFY_N_CURR',   'L_SEC_SRCH_BOTH_P2_QLFY_N_CURR');
22278 		END IF;
22279 	ELSE
22280 	 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22281 	  engine_debug('cursor l_sec_list_cur   multi-currency FALSE');
22282 	  END IF;
22283 		IF p_search_path = 1 THEN
22284 			OPEN L_SEC_LST_HDR_P1_QLFY_SEC_N;
22285 			qp_debug_util.tstart('L_SEC_LST_HDR_P1_QLFY_SEC_N',   'L_SEC_LST_HDR_P1_QLFY_SEC_N');
22286 		ELSE
22287 			OPEN L_SEC_SRCH_BOTH_P2_QLFY_N;
22288 			qp_debug_util.tstart('L_SEC_SRCH_BOTH_P2_QLFY_N',   'L_SEC_SRCH_BOTH_P2_QLFY_N');
22289 		END IF;
22290 	END IF;
22291 
22292 	    LOOP
22293 	      l_list_header_id_tbl.DELETE;
22294 	      l_list_line_id_tbl.DELETE;
22295 	      l_line_index_tbl.DELETE;
22296 	      l_matched_pattrn_id_tbl.DELETE;
22297               l_ag_matched_pat_id_tbl.DELETE;
22298 	      l_pricing_phase_id_tbl.DELETE;
22299 	      l_matched_hash_key_tbl.DELETE;
22300 	      l_ag_mtchd_hash_key_tbl.DELETE;
22301 	      l_stage_tbl.DELETE;
22302 	      l_pricing_status_code_tbl.DELETE;
22303 	      l_ssc.DELETE;
22304 	      l_header_quals_exist_flag.DELETE;
22305 	      l_grouping_no.DELETE;
22306 	      l_ag_grpng_no.DELETE;
22307 	      l_eq_flag.DELETE;
22308 	      l_ag_eq_flag.DELETE;
22309 	      l_validated_flag.DELETE;
22310 	      l_modf_lvl_code.DELETE;
22311               l_other_oprt_count.DELETE;
22312 	      l_ag_othr_oprt_cnt.DELETE;
22313 	      l_null_other_oprt_count.DELETE;
22314               l_list_type_code.DELETE;
22315 	      l_ask_for_flag.DELETE;
22316 	      l_hdr_lmt_exists.DELETE;
22317 	      l_line_lmt_exists.DELETE;
22318 	      l_curr_det_id.DELETE;
22319 	      l_curr_hdr_id.DELETE;
22320 	      L_SELLNG_ROUND_FTR.DELETE;
22321               l_base_curr_code.DELETE;
22322 	      l_prcng_effctve_dt.DELETE;
22323               l_brk_uom_code.DELETE;
22324               l_brk_uom_ctxt.DELETE;
22325               l_brk_uom_attr.DELETE;
22326               l_order_curr.DELETE;
22327 	      L_qualifier_precedence.DELETE;
22328               l_descnt_quals_exist.DELETE;
22329               l_PRICE_BREAK_TYPE_CODE.DELETE;
22330 
22331 		if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
22332 			IF p_search_path = 1 THEN
22333 				FETCH L_SEC_LST_HDR_P1_QLFY_N_CURR BULK COLLECT
22334 				INTO l_list_header_id_tbl,
22335 				l_list_line_id_tbl,
22336 				l_line_index_tbl,
22337 				l_matched_pattrn_id_tbl,
22338 				l_pricing_phase_id_tbl,
22339 				l_matched_hash_key_tbl,
22340 				l_stage_tbl,
22341 				l_pricing_status_code_tbl,
22342 				l_ssc,
22343 				l_header_quals_exist_flag,
22344 				l_grouping_no,
22345 				l_eq_flag,
22346 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
22347 				l_list_type_code,
22348 				l_ask_for_flag,
22349 				l_hdr_lmt_exists,
22350 				l_line_lmt_exists,
22351 				l_curr_det_id,
22352 				l_curr_hdr_id,
22353 				L_SELLNG_ROUND_FTR,
22354 				l_curr_code,
22355 				l_prcng_effctve_dt,
22356 				L_qualifier_precedence,
22357 				l_descnt_quals_exist
22358 				limit l_limit;
22359 			ELSE
22360 				FETCH L_SEC_SRCH_BOTH_P2_QLFY_N_CURR BULK COLLECT
22361 				INTO l_list_header_id_tbl,
22362 				      l_list_line_id_tbl,
22363 				      l_line_index_tbl,
22364 				      l_matched_pattrn_id_tbl,
22365 				      l_ag_matched_pat_id_tbl,
22366 				      l_pricing_phase_id_tbl,
22367 				      l_matched_hash_key_tbl,
22368 				      l_ag_mtchd_hash_key_tbl,
22369 				      l_stage_tbl,
22370 				      l_pricing_status_code_tbl,
22371 				      l_ssc,
22372 				      l_header_quals_exist_flag,
22373 				      l_grouping_no,
22374 				      l_ag_grpng_no,
22375 				      l_eq_flag,
22376 				      l_ag_eq_flag,
22377 				      l_validated_flag,
22378 				      l_modf_lvl_code,
22379 				      l_other_oprt_count,
22380 				      l_ag_othr_oprt_cnt,
22381 				      l_null_other_oprt_count,
22382 				      l_list_type_code,
22383 				      l_ask_for_flag,
22384 				      l_hdr_lmt_exists,
22385 				      l_line_lmt_exists,
22386 				      l_curr_det_id,
22387 				      l_curr_hdr_id,
22388 				      L_SELLNG_ROUND_FTR,
22389 				      l_base_curr_code,
22390 				      l_prcng_effctve_dt,
22391 				      l_brk_uom_code,
22392 				      l_brk_uom_ctxt,
22393 				      l_brk_uom_attr,
22394 				      l_order_curr,
22395 				      L_qualifier_precedence,
22396   				      l_descnt_quals_exist,
22397 				      l_PRICE_BREAK_TYPE_CODE
22398 				limit l_limit;
22399 			END IF;
22400 		ELSE
22401 			IF p_search_path = 1 THEN
22402 				FETCH L_SEC_LST_HDR_P1_QLFY_SEC_N BULK COLLECT
22403 				INTO l_list_header_id_tbl,
22404 				l_list_line_id_tbl,
22405 				l_line_index_tbl,
22406 				l_matched_pattrn_id_tbl,
22407 				l_pricing_phase_id_tbl,
22408 				l_matched_hash_key_tbl,
22409 				l_stage_tbl,
22410 				l_pricing_status_code_tbl,
22411 				l_ssc,
22412 				l_header_quals_exist_flag,
22413 				l_grouping_no,
22414 				l_eq_flag,
22415 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
22416 				l_list_type_code,
22417 				l_ask_for_flag,
22418 				l_hdr_lmt_exists,
22419 				l_line_lmt_exists,
22420 				l_curr_det_id,
22421 				l_curr_hdr_id,
22422 				L_SELLNG_ROUND_FTR,
22423 				l_curr_code,
22424 				l_prcng_effctve_dt,
22425 				L_qualifier_precedence,
22426 				l_descnt_quals_exist
22427 				limit l_limit;
22428 			ELSE
22429 				FETCH L_SEC_SRCH_BOTH_P2_QLFY_N BULK COLLECT
22430 				INTO  l_list_header_id_tbl,
22431 				      l_list_line_id_tbl,
22432 				      l_line_index_tbl,
22433 				      l_matched_pattrn_id_tbl,
22434 				      l_ag_matched_pat_id_tbl,
22435 				      l_pricing_phase_id_tbl,
22436 				      l_matched_hash_key_tbl,
22437 				      l_ag_mtchd_hash_key_tbl,
22438 				      l_stage_tbl,
22439 				      l_pricing_status_code_tbl,
22440 				      l_ssc,
22441 				      l_header_quals_exist_flag,
22442 				      l_grouping_no,
22443 				      l_ag_grpng_no,
22444 				      l_eq_flag,
22445 				      l_ag_eq_flag,
22446 				      l_validated_flag,
22447 				      l_modf_lvl_code,
22448 				      l_other_oprt_count,
22449 				      l_ag_othr_oprt_cnt,
22450 				      l_null_other_oprt_count,
22451 				      l_list_type_code,
22452 				      l_ask_for_flag,
22453 				      l_hdr_lmt_exists,
22454 				      l_line_lmt_exists,
22455 				      l_curr_det_id,
22456 				      l_curr_hdr_id,
22457 				      L_SELLNG_ROUND_FTR,
22458 				      l_base_curr_code,
22459 				      l_prcng_effctve_dt,
22460 				      l_brk_uom_code,
22461 				      l_brk_uom_ctxt,
22462 				      l_brk_uom_attr,
22463 				      l_order_curr,
22464 				      L_qualifier_precedence,
22465   				      l_descnt_quals_exist,
22466 				      l_PRICE_BREAK_TYPE_CODE
22467 				limit l_limit;
22468 			END IF;
22469 		END IF;
22470 	      EXIT WHEN l_list_header_id_tbl.COUNT = 0;
22471 	IF p_search_path = 1 THEN
22472 	    forall i IN 1 .. l_list_header_id_tbl.COUNT
22473 	    INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
22474 					list_line_id,
22475 					line_index,
22476 					matched_pattrn_id,
22477 					pricing_phase_id,
22478 					matched_hash_key,
22479 					stage,
22480 					pricing_status_code,
22481 					source_system_code,
22482 					header_quals_exist_flag,
22483 					grouping_no,
22484 					eq_flag,
22485 					validated_flag,
22486 					MODIFIER_LEVEL_CODE,
22487 					other_oprt_count,
22488 					null_other_oprt_count,
22489    					LIST_TYPE_CODE,
22490 					ASK_FOR_FLAG,
22491 					HEADER_LIMIT_EXISTS,
22492 					LINE_LIMIT_EXISTS,
22493 					CURRENCY_DETAIL_ID,
22494 					CURRENCY_HEADER_ID,
22495 					SELLING_ROUNDING_FACTOR,
22496 					BASE_CURRENCY_CODE,
22497 					PRICING_EFFECTIVE_DATE,
22498 					qualifier_precedence,
22499 					descendents_quals_exist
22500 					)
22501 			    VALUES(l_list_header_id_tbl(i),
22502 					l_list_line_id_tbl(i),
22503 					l_line_index_tbl(i),
22504 					l_matched_pattrn_id_tbl(i),
22505 					l_pricing_phase_id_tbl(i),
22506 					l_matched_hash_key_tbl(i),
22507 					l_stage_tbl(i),
22508 					l_pricing_status_code_tbl(i),
22509 					l_ssc(i),
22510 					l_header_quals_exist_flag(i),
22511 					l_grouping_no(i),
22512 					l_eq_flag(i),
22513 					l_validated_flag(i),
22514 					l_modf_lvl_code(i),
22515 					l_other_oprt_count(i),
22516 					l_null_other_oprt_count(i),
22517 					l_list_type_code(i),
22518 					l_ask_for_flag(i),
22519 					l_hdr_lmt_exists(i),
22520 					l_line_lmt_exists(i),
22521 					l_curr_det_id(i),
22522 					l_curr_hdr_id(i),
22523 					L_SELLNG_ROUND_FTR(i),
22524 					l_curr_code(i),
22525 					l_prcng_effctve_dt(i),
22526 					L_qualifier_precedence(i),
22527 					l_descnt_quals_exist(i)
22528 					);
22529 		ELSE
22530 
22531 		     forall i IN 1 .. l_list_header_id_tbl.COUNT
22532 			 INSERT
22533 			    INTO qp_preq_patrn_qual_tmp(list_header_id,
22534 							list_line_id,
22535 							line_index,
22536 							matched_pattrn_id,
22537 							pricing_phase_id,
22538 							matched_hash_key,
22539 							stage,
22540 							pricing_status_code,
22541 							source_system_code,
22542 							header_quals_exist_flag,
22543 							grouping_no,
22544 							eq_flag,
22545 							validated_flag,
22546 							MODIFIER_LEVEL_CODE,
22547 							other_oprt_count,
22548 							null_other_oprt_count,
22549 							LIST_TYPE_CODE,
22550 							ASK_FOR_FLAG,
22551 							HEADER_LIMIT_EXISTS,
22552 							LINE_LIMIT_EXISTS,
22553 							BREAK_UOM_CODE,
22554 							BREAK_UOM_CONTEXT,
22555 							BREAK_UOM_ATTRIBUTE,
22556 							ORDER_CURRENCY,
22557 							CURRENCY_DETAIL_ID,
22558 							CURRENCY_HEADER_ID,
22559 							SELLING_ROUNDING_FACTOR,
22560 							BASE_CURRENCY_CODE,
22561 							pricing_effective_date,
22562 							qualifier_precedence,
22563 							PRICE_BREAK_TYPE_CODE
22564 							)
22565 					    SELECT DISTINCT l_list_header_id_tbl(i),
22566 							l_list_line_id_tbl(i),
22567 							l_line_index_tbl(i),
22568 							l_matched_pattrn_id_tbl(i),
22569 							l_pricing_phase_id_tbl(i),
22570 							l_matched_hash_key_tbl(i),
22571 							l_stage_tbl(i),
22572 							l_pricing_status_code_tbl(i),
22573 							l_ssc(i),
22574 							l_header_quals_exist_flag(i),
22575 							l_grouping_no(i),
22576 							l_eq_flag(i),
22577 							l_validated_flag(i),
22578 							l_modf_lvl_code(i),
22579 							l_other_oprt_count(i),
22580 							l_other_oprt_count(i),
22581 							l_list_type_code(i),
22582 							l_ask_for_flag(i),
22583 							l_hdr_lmt_exists(i),
22584 							l_line_lmt_exists(i),
22585 							l_brk_uom_code(i),
22586 							l_brk_uom_ctxt(i),
22587 							l_brk_uom_attr(i),
22588 							l_order_curr(i),
22589 							l_curr_det_id(i),
22590 							l_curr_hdr_id(i),
22591 							L_SELLNG_ROUND_FTR(i),
22592 							l_base_curr_code(i),
22593 							l_prcng_effctve_dt(i),
22594 							L_qualifier_precedence(i),
22595 							l_PRICE_BREAK_TYPE_CODE(i)
22596 						FROM dual;
22597 
22598 
22599 			     forall i IN 1 .. l_list_header_id_tbl.COUNT
22600 			     INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
22601 							list_line_id,
22602 							line_index,
22603 							pricing_phase_id,
22604 							stage,
22605 							pricing_status_code,
22606 							source_system_code,
22607 							header_quals_exist_flag,
22608 							grouping_no,
22609 							eq_flag,
22610 							validated_flag,
22611 							MODIFIER_LEVEL_CODE,
22612 							other_oprt_count,
22613 							null_other_oprt_count,
22614 							descendents_quals_exist
22615 							)
22616 					    SELECT DISTINCT l_list_header_id_tbl(i),
22617 							-1, -- List line id,
22618 							l_line_index_tbl(i),
22619 							l_pricing_phase_id_tbl(i),
22620 							l_stage_tbl(i),
22621 							l_pricing_status_code_tbl(i),
22622 							l_ssc(i),
22623 							l_header_quals_exist_flag(i), -- Header Quals Exist,
22624 							l_ag_grpng_no(i),
22625 							l_ag_eq_flag(i),
22626 							l_validated_flag(i),
22627 							l_modf_lvl_code(i),
22628 							l_ag_othr_oprt_cnt(i),
22629 							l_null_other_oprt_count(i),
22630 							l_descnt_quals_exist(i)
22631 						FROM dual
22632 						WHERE l_ag_eq_flag(i) = 'N'
22633 						OR l_descnt_quals_exist(i) = 'Y';
22634 
22635 		END IF;
22636 		l_loop_count:=l_loop_count+1;
22637 	    --exit when l_header_cache_cur%rowcount < l_limit;
22638 	  END LOOP;
22639 	    if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
22640 			IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22641 				engine_debug('cursor close l_list_cur_currency-multi-currency TRUE');
22642 			END IF;
22643 			IF p_search_path = 1 THEN
22644 				CLOSE L_SEC_LST_HDR_P1_QLFY_N_CURR;
22645 				qp_debug_util.tstop('L_SEC_LST_HDR_P1_QLFY_N_CURR');
22646 			ELSE
22647 				CLOSE L_SEC_SRCH_BOTH_P2_QLFY_N_CURR;
22648 				qp_debug_util.tstop('L_SEC_SRCH_BOTH_P2_QLFY_N_CURR');
22649 			END IF;
22650 		else
22651 			IF p_search_path = 1 THEN
22652 				CLOSE L_SEC_LST_HDR_P1_QLFY_SEC_N;
22653 				qp_debug_util.tstop('L_SEC_LST_HDR_P1_QLFY_SEC_N');
22654 			ELSE
22655 				CLOSE L_SEC_SRCH_BOTH_P2_QLFY_N;
22656 				qp_debug_util.tstop('L_SEC_SRCH_BOTH_P2_QLFY_N');
22657 			END IF;
22658 		end if;
22659 END IF;
22660 	IF G_QUALIFY_SECONDARY = G_YES THEN
22661 		l_stage :=G_STAGE_CACHE_SEC_PL_HDR_SRCH;
22662 	ELSE
22663 		  IF p_search_path=1 THEN
22664 			l_stage :=G_STAGE_CACHE_SEC_PL_HDR_SRCH;
22665 		  ELSE
22666 			/*l_stage :=G_STAGE_CACHE_SEC_PL_LIN_SRCH;*/
22667 			l_stage := G_STAGE_CACHE_SEC_PL_LIN_SRCH2;
22668 		  END IF;
22669 	END IF;
22670 
22671    qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_SEC_LIST_CUR',   'Populate_Temp_Tables_NEQ_BTW_SEC_LIST_CUR');
22672    Populate_Temp_Tables_NEQ_BTW(
22673 			    G_PRICE_LIST_PHASE_ID ,
22674 			    l_stage ,
22675 			    x_status_code ,
22676 			    x_status_text );
22677     IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
22678 	RAISE E_ROUTINE_ERRORS;
22679     END IF;
22680 
22681     qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_SEC_LIST_CUR');
22682     qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_SEC_LIST_CUR',   'QP_EVALUATE_OTHER_OPERATORS_SEC_LIST_CUR');
22683 
22684 	QP_EVALUATE_OTHER_OPERATORS(
22685 			 G_PRICE_LIST_PHASE_ID ,
22686 			  l_stage,
22687 			    x_status_code ,
22688 			    x_status_text );
22689 
22690 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
22691 		RAISE E_ROUTINE_ERRORS;
22692         END IF;
22693 
22694 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_SEC_LIST_CUR');
22695 
22696        qp_debug_util.tstart('SEC_SRCH_PATRN_LIST_CUR_DEL_HDR_TCA',   'Header deletion for TCA');
22697 
22698 	UPDATE qp_preq_patrn_qual_tmp a
22699 	SET pricing_status_code = G_DELETED_TCA
22700 	WHERE pricing_status_code = g_status_unchanged
22701 	 AND a.descendents_quals_exist = 'Y'
22702          and a.pricing_phase_id = G_PRICE_LIST_PHASE_ID
22703          and a.stage = l_stage
22704 	 AND EXISTS (
22705 	    SELECT 1
22706 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
22707 	    WHERE b.list_header_id = a.list_header_id
22708 	      AND b.list_line_id = a.list_line_id
22709 	      AND (b.qualifier_grouping_no = a.grouping_no
22710                    or
22711                    b.qualifier_grouping_no = -1
22712                   )
22713 	      AND b.qualify_hier_descendents_flag = 'N'
22714 	      AND c.segment_id = b.segment_id
22715 	      AND c.line_index = a.line_index
22716 	      AND c.derived_qualifier_flag = 'Y');
22717 
22718         qp_debug_util.tstop('SEC_SRCH_PATRN_LIST_CUR_DEL_HDR_TCA');
22719 
22720      IF l_stage = G_STAGE_CACHE_SEC_PL_LIN_SRCH2 THEN
22721         -- Deleting line if headers is not qualified in not=/Between evaluation
22722        -- header_quals_exist_flag will be Y only if Not=/Bet header level
22723        -- qualifiers are present for that line.
22724        qp_debug_util.tstart('SEC_SRCH_PATRN_LIST_CUR_DEL_HDR',   'Line deletion');
22725 
22726        UPDATE qp_preq_patrn_qual_tmp a
22727        SET pricing_status_code = G_DELETED_LINE
22728         WHERE pricing_phase_id = G_PRICE_LIST_PHASE_ID
22729          AND pricing_status_code = g_status_unchanged
22730          AND list_line_id <> -1
22731          AND nvl(header_quals_exist_flag,   'N') = 'Y'
22732 	 AND a.stage = l_stage
22733          AND NOT EXISTS
22734          (SELECT /*+ index(b QP_PREQ_PATRN_QUAL_T_N2) */ 'x'
22735         FROM qp_preq_patrn_qual_tmp b
22736         WHERE b.list_header_id = a.list_header_id
22737 	AND b.line_index = a.line_index
22738         AND b.list_line_id = -1
22739         AND b.pricing_phase_id = a.pricing_phase_id
22740         AND pricing_status_code = g_status_unchanged
22741 	AND b.stage = l_stage );
22742 
22743 
22744         qp_debug_util.tstop('SEC_SRCH_PATRN_LIST_CUR_DEL_HDR');
22745 
22746     END IF;
22747 
22748 /************/
22749 IF (p_search_path = 1) OR (p_search_path = 2 AND G_QUALIFY_SECONDARY = G_YES) THEN
22750 IF G_QUALIFY_SECONDARY = G_YES THEN
22751 	if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
22752 	  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22753 	  engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
22754 	  END IF;
22755 
22756 	  	OPEN L_SEC_LST_LIN_P1_QLFY_Y_CURR;
22757 		qp_debug_util.tstart('L_SEC_LST_LIN_P1_QLFY_Y_CURR',   'L_SEC_LST_LIN_P1_QLFY_Y_CURR');
22758 
22759 	ELSE
22760 	 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
22761 	  engine_debug('cursor l_sec_list_cur   multi-currency FALSE');
22762 	  END IF;
22763 
22764 		OPEN L_SEC_LST_LIN_P1_QLFY_SEC_Y;
22765 		qp_debug_util.tstart('L_SEC_LST_LIN_P1_QLFY_SEC_Y',   'L_SEC_LST_LIN_P1_QLFY_SEC_Y');
22766 	END IF;
22767 
22768 	    LOOP
22769 	      l_list_header_id_tbl.DELETE;
22770 	      l_list_line_id_tbl.DELETE;
22771 	      l_line_index_tbl.DELETE;
22772 	      l_matched_pattrn_id_tbl.DELETE;
22773 	      l_pricing_phase_id_tbl.DELETE;
22774 	      l_stage_tbl.DELETE;
22775 	      l_matched_hash_key_tbl.DELETE;
22776 	      l_pricing_status_code_tbl.DELETE;
22777 	      l_ssc.DELETE;
22778 	      l_header_quals_exist_flag.DELETE;
22779 	      l_grouping_no.DELETE;
22780 	      l_eq_flag.DELETE;
22781 	      l_validated_flag.DELETE;
22782 	      l_modf_lvl_code.DELETE;
22783 	      l_other_oprt_count.DELETE;
22784 	      l_null_other_oprt_count.DELETE;
22785 	      l_list_type_code.DELETE;
22786 	      l_ask_for_flag.DELETE;
22787 	      l_hdr_lmt_exists.DELETE;
22788 	      l_line_lmt_exists.DELETE;
22789 	      l_curr_code.DELETE;
22790 		l_brk_uom_code.DELETE;
22791 		l_brk_uom_ctxt.DELETE;
22792 		l_brk_uom_attr.DELETE;
22793 		l_prcng_effctve_dt.DELETE;
22794 		l_curr_det_id.DELETE;
22795 	      l_curr_hdr_id.DELETE;
22796 	      L_SELLNG_ROUND_FTR.DELETE;
22797               l_base_curr_code.DELETE;
22798 	      L_qualifier_precedence.DELETE;
22799               l_descnt_quals_exist.DELETE;
22800               l_PRICE_BREAK_TYPE_CODE.DELETE;
22801 
22802 		if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
22803 
22804 				FETCH L_SEC_LST_LIN_P1_QLFY_Y_CURR BULK COLLECT
22805 				INTO l_list_header_id_tbl,
22806 				l_list_line_id_tbl,
22807 				l_line_index_tbl,
22808 				l_matched_pattrn_id_tbl,
22809 				l_pricing_phase_id_tbl,
22810 				l_matched_hash_key_tbl,
22811 				l_stage_tbl,
22812 				l_pricing_status_code_tbl,
22813 				l_ssc,
22814 				l_header_quals_exist_flag,
22815 				l_grouping_no,
22816 				l_eq_flag,
22817 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
22818 				l_list_type_code,
22819 				l_ask_for_flag,
22820 				l_hdr_lmt_exists,
22821 				l_line_lmt_exists,
22822 				l_brk_uom_code,
22823 				l_brk_uom_ctxt,
22824 				l_brk_uom_attr,
22825 				l_curr_code,
22826 				l_prcng_effctve_dt,
22827 				l_curr_det_id,
22828 				l_curr_hdr_id,
22829 				L_SELLNG_ROUND_FTR,
22830 				l_base_curr_code,
22831 				L_qualifier_precedence,
22832   		                l_descnt_quals_exist,
22833                                 l_PRICE_BREAK_TYPE_CODE
22834 				limit l_limit;
22835 
22836 		ELSE
22837 				FETCH L_SEC_LST_LIN_P1_QLFY_SEC_Y BULK COLLECT
22838 				INTO l_list_header_id_tbl,
22839 				l_list_line_id_tbl,
22840 				l_line_index_tbl,
22841 				l_matched_pattrn_id_tbl,
22842 				l_pricing_phase_id_tbl,
22843 				l_matched_hash_key_tbl,
22844 				l_stage_tbl,
22845 				l_pricing_status_code_tbl,
22846 				l_ssc,
22847 				l_header_quals_exist_flag,
22848 				l_grouping_no,
22849 				l_eq_flag,
22850 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
22851 				l_list_type_code,
22852 				l_ask_for_flag,
22853 				l_hdr_lmt_exists,
22854 				l_line_lmt_exists,
22855 				l_brk_uom_code,
22856 				l_brk_uom_ctxt,
22857 				l_brk_uom_attr,
22858 				l_curr_code,
22859 				l_prcng_effctve_dt,
22860 				L_qualifier_precedence,
22861   		                l_descnt_quals_exist,
22862                                 l_PRICE_BREAK_TYPE_CODE
22863 				limit l_limit;
22864 		END IF;
22865 
22866 	      EXIT WHEN l_list_header_id_tbl.COUNT = 0;
22867 
22868 
22869 
22870 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
22871 	    forall i IN 1 .. l_list_header_id_tbl.COUNT
22872 	    INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
22873 					list_line_id,
22874 					line_index,
22875 					matched_pattrn_id,
22876 					pricing_phase_id,
22877 					matched_hash_key,
22878 					stage,
22879 					pricing_status_code,
22880 					source_system_code,
22881 					header_quals_exist_flag,
22882 					grouping_no,
22883 					eq_flag,
22884 					validated_flag,
22885 					MODIFIER_LEVEL_CODE,
22886 					other_oprt_count,
22887 					null_other_oprt_count,
22888    					LIST_TYPE_CODE,
22889 					ASK_FOR_FLAG,
22890 					HEADER_LIMIT_EXISTS,
22891 					LINE_LIMIT_EXISTS,
22892 					BREAK_UOM_CODE,
22893 					BREAK_UOM_CONTEXT,
22894 					BREAK_UOM_ATTRIBUTE,
22895 					ORDER_CURRENCY,
22896 					PRICING_EFFECTIVE_DATE,
22897 					CURRENCY_DETAIL_ID,
22898 					CURRENCY_HEADER_ID,
22899 					SELLING_ROUNDING_FACTOR,
22900 					BASE_CURRENCY_CODE,
22901 					qualifier_precedence,
22902 					descendents_quals_exist,
22903                                         PRICE_BREAK_TYPE_CODE
22904 					)
22905 			    VALUES(l_list_header_id_tbl(i),
22906 					l_list_line_id_tbl(i),
22907 					l_line_index_tbl(i),
22908 					l_matched_pattrn_id_tbl(i),
22909 					l_pricing_phase_id_tbl(i),
22910 					l_matched_hash_key_tbl(i),
22911 					l_stage_tbl(i),
22912 					l_pricing_status_code_tbl(i),
22913 					l_ssc(i),
22914 					l_header_quals_exist_flag(i),
22915 					l_grouping_no(i),
22916 					l_eq_flag(i),
22917 					l_validated_flag(i),
22918 					l_modf_lvl_code(i),
22919 					l_other_oprt_count(i),
22920 					l_null_other_oprt_count(i),
22921 					l_list_type_code(i),
22922 					l_ask_for_flag(i),
22923 					l_hdr_lmt_exists(i),
22924 					l_line_lmt_exists(i),
22925 					l_brk_uom_code(i),
22926 					l_brk_uom_ctxt(i),
22927 					l_brk_uom_attr(i),
22928 					l_curr_code(i),
22929 					l_prcng_effctve_dt(i),
22930 					l_curr_det_id(i),
22931 					l_curr_hdr_id(i),
22932 					L_SELLNG_ROUND_FTR(i),
22933 					l_base_curr_code(i),
22934 					L_qualifier_precedence(i),
22935 	 		                l_descnt_quals_exist(i),
22936 		                        l_PRICE_BREAK_TYPE_CODE(i)
22937 					);
22938 
22939 ELSE
22940 	    forall i IN 1 .. l_list_header_id_tbl.COUNT
22941 	    INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
22942 					list_line_id,
22943 					line_index,
22944 					matched_pattrn_id,
22945 					pricing_phase_id,
22946 					matched_hash_key,
22947 					stage,
22948 					pricing_status_code,
22949 					source_system_code,
22950 					header_quals_exist_flag,
22951 					grouping_no,
22952 					eq_flag,
22953 					validated_flag,
22954 					MODIFIER_LEVEL_CODE,
22955 					other_oprt_count,
22956 					null_other_oprt_count,
22957    					LIST_TYPE_CODE,
22958 					ASK_FOR_FLAG,
22959 					HEADER_LIMIT_EXISTS,
22960 					LINE_LIMIT_EXISTS,
22961 					BREAK_UOM_CODE,
22962 					BREAK_UOM_CONTEXT,
22963 					BREAK_UOM_ATTRIBUTE,
22964 					ORDER_CURRENCY,
22965 					PRICING_EFFECTIVE_DATE,
22966 					qualifier_precedence,
22967 					descendents_quals_exist,
22968                                         PRICE_BREAK_TYPE_CODE
22969 					)
22970 			    VALUES(l_list_header_id_tbl(i),
22971 					l_list_line_id_tbl(i),
22972 					l_line_index_tbl(i),
22973 					l_matched_pattrn_id_tbl(i),
22974 					l_pricing_phase_id_tbl(i),
22975 					l_matched_hash_key_tbl(i),
22976 					l_stage_tbl(i),
22977 					l_pricing_status_code_tbl(i),
22978 					l_ssc(i),
22979 					l_header_quals_exist_flag(i),
22980 					l_grouping_no(i),
22981 					l_eq_flag(i),
22982 					l_validated_flag(i),
22983 					l_modf_lvl_code(i),
22984 					l_other_oprt_count(i),
22985 					l_null_other_oprt_count(i),
22986 					l_list_type_code(i),
22987 					l_ask_for_flag(i),
22988 					l_hdr_lmt_exists(i),
22989 					l_line_lmt_exists(i),
22990 					l_brk_uom_code(i),
22991 					l_brk_uom_ctxt(i),
22992 					l_brk_uom_attr(i),
22993 					l_curr_code(i),
22994 					l_prcng_effctve_dt(i),
22995 					L_qualifier_precedence(i),
22996 	 		                l_descnt_quals_exist(i),
22997 		                        l_PRICE_BREAK_TYPE_CODE(i)
22998 					);
22999 
23000 END IF;
23001 
23002 
23003 		l_loop_count:=l_loop_count+1;
23004 	    --exit when l_header_cache_cur%rowcount < l_limit;
23005 	  END LOOP;
23006 	   if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
23007 		IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23008 			engine_debug('cursor close l_list_cur_currency-multi-currency TRUE');
23009 		END IF;
23010 
23011 			CLOSE L_SEC_LST_LIN_P1_QLFY_Y_CURR;
23012 			qp_debug_util.tstop('L_SEC_LST_LIN_P1_QLFY_Y_CURR');
23013 	else
23014 			CLOSE L_SEC_LST_LIN_P1_QLFY_SEC_Y;
23015 			qp_debug_util.tstop('L_SEC_LST_LIN_P1_QLFY_SEC_Y');
23016 	end if;
23017 
23018 ELSE ----profile no
23019 	if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
23020 	  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23021 	  engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
23022 	  END IF;
23023 
23024 			OPEN L_SEC_LST_LIN_P1_QLFY_N_CURR;
23025 			qp_debug_util.tstart('L_SEC_LST_LIN_P1_QLFY_N_CURR',   'L_SEC_LST_LIN_P1_QLFY_N_CURR');
23026 	ELSE
23027 	 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23028 	  engine_debug('cursor l_sec_list_cur   multi-currency FALSE');
23029 	  END IF;
23030 
23031 			OPEN L_SEC_LST_LIN_P1_QLFY_SEC_N;
23032 			qp_debug_util.tstart('L_SEC_LST_LIN_P1_QLFY_SEC_N',   'L_SEC_LST_LIN_P1_QLFY_SEC_N');
23033 	END IF;
23034 
23035 	    LOOP
23036 	      l_list_header_id_tbl.DELETE;
23037 	      l_list_line_id_tbl.DELETE;
23038 	      l_line_index_tbl.DELETE;
23039 	      l_matched_pattrn_id_tbl.DELETE;
23040 	      l_pricing_phase_id_tbl.DELETE;
23041 	      l_stage_tbl.DELETE;
23042 	      l_matched_hash_key_tbl.DELETE;
23043 	      l_pricing_status_code_tbl.DELETE;
23044 	      l_ssc.DELETE;
23045 	      l_header_quals_exist_flag.DELETE;
23046 	      l_grouping_no.DELETE;
23047 	      l_eq_flag.DELETE;
23048 	      l_validated_flag.DELETE;
23049 	      l_modf_lvl_code.DELETE;
23050 	      l_other_oprt_count.DELETE;
23051 	      l_null_other_oprt_count.DELETE;
23052 	      l_list_type_code.DELETE;
23053 	      l_ask_for_flag.DELETE;
23054 	      l_hdr_lmt_exists.DELETE;
23055 	      l_line_lmt_exists.DELETE;
23056 	      l_curr_code.DELETE;
23057 		l_brk_uom_code.DELETE;
23058 		l_brk_uom_ctxt.DELETE;
23059 		l_brk_uom_attr.DELETE;
23060 		l_prcng_effctve_dt.DELETE;
23061 		l_curr_det_id.DELETE;
23062 	      l_curr_hdr_id.DELETE;
23063 	      L_SELLNG_ROUND_FTR.DELETE;
23064               l_base_curr_code.DELETE;
23065 	      L_qualifier_precedence.DELETE;
23066               l_descnt_quals_exist.DELETE;
23067               l_PRICE_BREAK_TYPE_CODE.DELETE;
23068 
23069 		if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
23070 
23071 				FETCH L_SEC_LST_LIN_P1_QLFY_N_CURR BULK COLLECT
23072 				INTO l_list_header_id_tbl,
23073 				l_list_line_id_tbl,
23074 				l_line_index_tbl,
23075 				l_matched_pattrn_id_tbl,
23076 				l_pricing_phase_id_tbl,
23077 				l_matched_hash_key_tbl,
23078 				l_stage_tbl,
23079 				l_pricing_status_code_tbl,
23080 				l_ssc,
23081 				l_header_quals_exist_flag,
23082 				l_grouping_no,
23083 				l_eq_flag,
23084 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
23085 				l_list_type_code,
23086 				l_ask_for_flag,
23087 				l_hdr_lmt_exists,
23088 				l_line_lmt_exists,
23089 				l_brk_uom_code,
23090 				l_brk_uom_ctxt,
23091 				l_brk_uom_attr,
23092 				l_curr_code,
23093 				l_prcng_effctve_dt,
23094 				l_curr_det_id,
23095 				l_curr_hdr_id,
23096 				L_SELLNG_ROUND_FTR,
23097 				l_base_curr_code,
23098 				L_qualifier_precedence,
23099         	                l_descnt_quals_exist,
23100                                 l_PRICE_BREAK_TYPE_CODE
23101 				limit l_limit;
23102 		ELSE
23103 				FETCH L_SEC_LST_LIN_P1_QLFY_SEC_N BULK COLLECT
23104 				INTO l_list_header_id_tbl,
23105 				l_list_line_id_tbl,
23106 				l_line_index_tbl,
23107 				l_matched_pattrn_id_tbl,
23108 				l_pricing_phase_id_tbl,
23109 				l_matched_hash_key_tbl,
23110 				l_stage_tbl,
23111 				l_pricing_status_code_tbl,
23112 				l_ssc,
23113 				l_header_quals_exist_flag,
23114 				l_grouping_no,
23115 				l_eq_flag,
23116 				l_validated_flag,l_modf_lvl_code,l_other_oprt_count,l_null_other_oprt_count,
23117 				l_list_type_code,
23118 				l_ask_for_flag,
23119 				l_hdr_lmt_exists,
23120 				l_line_lmt_exists,
23121 				l_brk_uom_code,
23122 				l_brk_uom_ctxt,
23123 				l_brk_uom_attr,
23124 				l_curr_code,
23125 				l_prcng_effctve_dt,
23126 				L_qualifier_precedence,
23127         	                l_descnt_quals_exist,
23128                                 l_PRICE_BREAK_TYPE_CODE
23129 				limit l_limit;
23130 		END IF;
23131 	      EXIT WHEN l_list_header_id_tbl.COUNT = 0;
23132 
23133 IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
23134 	    forall i IN 1 .. l_list_header_id_tbl.COUNT
23135 	    INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
23136 					list_line_id,
23137 					line_index,
23138 					matched_pattrn_id,
23139 					pricing_phase_id,
23140 					matched_hash_key,
23141 					stage,
23142 					pricing_status_code,
23143 					source_system_code,
23144 					header_quals_exist_flag,
23145 					grouping_no,
23146 					eq_flag,
23147 					validated_flag,
23148 					MODIFIER_LEVEL_CODE,
23149 					other_oprt_count,
23150 					null_other_oprt_count,
23151    					LIST_TYPE_CODE,
23152 					ASK_FOR_FLAG,
23153 					HEADER_LIMIT_EXISTS,
23154 					LINE_LIMIT_EXISTS,
23155 					BREAK_UOM_CODE,
23156 					BREAK_UOM_CONTEXT,
23157 					BREAK_UOM_ATTRIBUTE,
23158 					ORDER_CURRENCY,
23159 					PRICING_EFFECTIVE_DATE,
23160 					CURRENCY_DETAIL_ID,
23161 					CURRENCY_HEADER_ID,
23162 					SELLING_ROUNDING_FACTOR,
23163 					BASE_CURRENCY_CODE,
23164 					qualifier_precedence,
23165 					descendents_quals_exist,
23166                                         PRICE_BREAK_TYPE_CODE
23167 					)
23168 			    VALUES(l_list_header_id_tbl(i),
23169 					l_list_line_id_tbl(i),
23170 					l_line_index_tbl(i),
23171 					l_matched_pattrn_id_tbl(i),
23172 					l_pricing_phase_id_tbl(i),
23173 					l_matched_hash_key_tbl(i),
23174 					l_stage_tbl(i),
23175 					l_pricing_status_code_tbl(i),
23176 					l_ssc(i),
23177 					l_header_quals_exist_flag(i),
23178 					l_grouping_no(i),
23179 					l_eq_flag(i),
23180 					l_validated_flag(i),
23181 					l_modf_lvl_code(i),
23182 					l_other_oprt_count(i),
23183 					l_null_other_oprt_count(i),
23184 					l_list_type_code(i),
23185 					l_ask_for_flag(i),
23186 					l_hdr_lmt_exists(i),
23187 					l_line_lmt_exists(i),
23188 					l_brk_uom_code(i),
23189 					l_brk_uom_ctxt(i),
23190 					l_brk_uom_attr(i),
23191 					l_curr_code(i),
23192 					l_prcng_effctve_dt(i),
23193 					l_curr_det_id(i),
23194 				        l_curr_hdr_id(i),
23195 				        L_SELLNG_ROUND_FTR(i),
23196 				        l_base_curr_code(i),
23197 					L_qualifier_precedence(i),
23198 	        	                l_descnt_quals_exist(i),
23199                                         l_PRICE_BREAK_TYPE_CODE(i));
23200 ELSE
23201 	    forall i IN 1 .. l_list_header_id_tbl.COUNT
23202 	    INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
23203 					list_line_id,
23204 					line_index,
23205 					matched_pattrn_id,
23206 					pricing_phase_id,
23207 					matched_hash_key,
23208 					stage,
23209 					pricing_status_code,
23210 					source_system_code,
23211 					header_quals_exist_flag,
23212 					grouping_no,
23213 					eq_flag,
23214 					validated_flag,
23215 					MODIFIER_LEVEL_CODE,
23216 					other_oprt_count,
23217 					null_other_oprt_count,
23218    					LIST_TYPE_CODE,
23219 					ASK_FOR_FLAG,
23220 					HEADER_LIMIT_EXISTS,
23221 					LINE_LIMIT_EXISTS,
23222 					BREAK_UOM_CODE,
23223 					BREAK_UOM_CONTEXT,
23224 					BREAK_UOM_ATTRIBUTE,
23225 					ORDER_CURRENCY,
23226 					PRICING_EFFECTIVE_DATE,
23227 					qualifier_precedence,
23228 					descendents_quals_exist,
23229                                         PRICE_BREAK_TYPE_CODE
23230 					)
23231 			    VALUES(l_list_header_id_tbl(i),
23232 					l_list_line_id_tbl(i),
23233 					l_line_index_tbl(i),
23234 					l_matched_pattrn_id_tbl(i),
23235 					l_pricing_phase_id_tbl(i),
23236 					l_matched_hash_key_tbl(i),
23237 					l_stage_tbl(i),
23238 					l_pricing_status_code_tbl(i),
23239 					l_ssc(i),
23240 					l_header_quals_exist_flag(i),
23241 					l_grouping_no(i),
23242 					l_eq_flag(i),
23243 					l_validated_flag(i),
23244 					l_modf_lvl_code(i),
23245 					l_other_oprt_count(i),
23246 					l_null_other_oprt_count(i),
23247 					l_list_type_code(i),
23248 					l_ask_for_flag(i),
23249 					l_hdr_lmt_exists(i),
23250 					l_line_lmt_exists(i),
23251 					l_brk_uom_code(i),
23252 					l_brk_uom_ctxt(i),
23253 					l_brk_uom_attr(i),
23254 					l_curr_code(i),
23255 					l_prcng_effctve_dt(i),
23256 					L_qualifier_precedence(i),
23257 					l_descnt_quals_exist(i),
23258                                         l_PRICE_BREAK_TYPE_CODE(i));
23259 END IF;
23260 
23261 
23262 
23263 		l_loop_count:=l_loop_count+1;
23264 	    --exit when l_header_cache_cur%rowcount < l_limit;
23265 	  END LOOP;
23266 	    if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
23267 			IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23268 				engine_debug('cursor close l_list_cur_currency-multi-currency TRUE');
23269 			END IF;
23270 
23271 				CLOSE L_SEC_LST_LIN_P1_QLFY_N_CURR;
23272 				qp_debug_util.tstop('L_SEC_LST_LIN_P1_QLFY_N_CURR');
23273 		else
23274 				CLOSE L_SEC_LST_LIN_P1_QLFY_SEC_N;
23275 				qp_debug_util.tstop('L_SEC_LST_LIN_P1_QLFY_SEC_N');
23276 		end if;
23277 END IF;
23278 
23279 	l_stage :=G_STAGE_CACHE_SEC_PL_LIN_SRCH;
23280 
23281    qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_SEC_LIST_CUR',   'Populate_Temp_Tables_NEQ_BTW_SEC_LIST_CUR');
23282    Populate_Temp_Tables_NEQ_BTW(
23283 			    G_PRICE_LIST_PHASE_ID ,
23284 			    l_stage ,
23285 			    x_status_code ,
23286 			    x_status_text );
23287     IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23288 	RAISE E_ROUTINE_ERRORS;
23289     END IF;
23290 
23291     qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_SEC_LIST_CUR');
23292     qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_SEC_LIST_CUR',   'QP_EVALUATE_OTHER_OPERATORS_SEC_LIST_CUR');
23293 
23294 	QP_EVALUATE_OTHER_OPERATORS(
23295 			 G_PRICE_LIST_PHASE_ID ,
23296 			  l_stage,
23297 			    x_status_code ,
23298 			    x_status_text );
23299 
23300 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23301 		RAISE E_ROUTINE_ERRORS;
23302         END IF;
23303 
23304 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_SEC_LIST_CUR');
23305 
23306        qp_debug_util.tstart('SEC_SRCH_PATRN_LIST_CUR_DEL_LIN_TCA',   'Line deletion for TCA');
23307 
23308        UPDATE qp_preq_patrn_qual_tmp a
23309 	SET pricing_status_code = G_DELETED_TCA
23310 	WHERE pricing_status_code = g_status_unchanged
23311 	 AND a.descendents_quals_exist = 'Y'
23312          and a.pricing_phase_id = G_PRICE_LIST_PHASE_ID
23313          and a.stage = l_stage
23314 	 AND EXISTS (
23315 	    SELECT 1
23316 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
23317 	    WHERE b.list_header_id = a.list_header_id
23318 	      AND b.list_line_id = a.list_line_id
23319 	      AND (b.qualifier_grouping_no = a.grouping_no
23320                    or
23321                    b.qualifier_grouping_no = -1
23322                   )
23323 	      AND b.qualify_hier_descendents_flag = 'N'
23324 	      AND c.segment_id = b.segment_id
23325 	      AND c.line_index = a.line_index
23326 	      AND c.derived_qualifier_flag = 'Y');
23327 
23328         qp_debug_util.tstop('SEC_SRCH_PATRN_LIST_CUR_DEL_LIN_TCA');
23329 
23330 	qp_debug_util.tstart('PATRN_SEC_LIST_CUR_POPULATE_PAT_TEMP_TABLES',   'Populate_Pat_Temp_Tables');
23331 
23332 	Populate_Pat_Temp_Tables(G_PRICE_LIST_PHASE_ID,
23333 				G_STAGE_CACHE_SEC_PL_LIN_SRCH,
23334 				x_status_code,
23335 				x_status_text);
23336 
23337 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23338 		RAISE E_ROUTINE_ERRORS;
23339         END IF;
23340 
23341 	qp_debug_util.tstop('PATRN_SEC_LIST_CUR_POPULATE_PAT_TEMP_TABLES');
23342 
23343 	IF g_debug_engine = fnd_api.g_true THEN
23344 		engine_debug('x_status_code-' || x_status_code);
23345 		engine_debug('x_status_text-' || x_status_text);
23346 	END IF;
23347 ELSE
23348 	qp_debug_util.tstart('PATRN_SEC_LIST_CUR_POPULATE_PAT_TEMP_TABLES',   'Populate_Pat_Temp_Tables');
23349 	/*IF G_QUALIFY_SECONDARY = G_YES THEN
23350 		l_stage :=G_STAGE_CACHE_SEC_PL_HDR_SRCH;
23351 	ELSE
23352 		l_stage := G_STAGE_CACHE_SEC_PL_LIN_SRCH2;
23353 	END IF;*/
23354 	Populate_Pat_Temp_Tables(G_PRICE_LIST_PHASE_ID,
23355 				G_STAGE_CACHE_SEC_PL_LIN_SRCH2,
23356 				x_status_code,
23357 				x_status_text);
23358 
23359 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23360 		RAISE E_ROUTINE_ERRORS;
23361         END IF;
23362 
23363 	qp_debug_util.tstop('PATRN_SEC_LIST_CUR_POPULATE_PAT_TEMP_TABLES');
23364 
23365 END IF;	---path = 1
23366 IF l_loop_count <> 0 THEN
23367      QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
23368 				(p_line_index        => NULL,
23369  				 p_order_uom_code    => NULL,
23370 				 p_order_qty         => NULL,
23371 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID, -- pricing_phase_id,
23372                                  p_call_big_search   => FALSE,
23373 				 x_list_line_id	     => l_list_line_id,
23374 				 x_return_status     => x_status_code,
23375 				 x_return_status_txt => x_status_text);
23376 
23377       IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
23378        RAISE E_ROUTINE_ERRORS;
23379       END IF;
23380 
23381      -- 3773652
23382      -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
23383      begin
23384        select 'x' into l_dummy
23385        from qp_npreq_lines_tmp
23386        where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
23387        and (PRICE_FLAG = G_YES
23388             or
23389        PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
23390        and rownum = 1;
23391 
23392        Evaluate_Between(G_PRICE_LIST_PHASE_ID,NULL,NULL,x_status_code,x_status_text);
23393 
23394 	IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
23395 		RAISE E_ROUTINE_ERRORS;
23396 	END IF;
23397 
23398      exception
23399        when no_data_found then
23400          null;
23401      end;
23402 
23403      -- Update the request line status for lines which got valid price list
23404      Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,x_status_code,x_status_text);  --[julin/4708044]
23405 
23406      IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
23407       RAISE E_ROUTINE_ERRORS;
23408      END IF;
23409 
23410      --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
23411      --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
23412      --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
23413      --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
23414      --By doing this we will get the right price in the PRICE event on change of UOM on the order line
23415      --for price based on price break
23416        Get_Eligible_Price_Break(G_PRICE_LIST_PHASE_ID,NULL,x_status_code,x_status_text);
23417 
23418      IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
23419       RAISE E_ROUTINE_ERRORS;
23420      END IF;
23421 ELSE
23422 	   -- Update the request line status for lines which got valid price list
23423 	   Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,x_status_code,x_status_text);  --[juiln/4708044]
23424 	   IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
23425 	    RAISE E_ROUTINE_ERRORS;
23426 	   END IF;
23427 END IF;
23428 
23429 qp_debug_util.tstop('PERFORM_SECONDARY_PAT_SEARCH');
23430 
23431 EXCEPTION
23432  WHEN E_ROUTINE_ERRORS THEN
23433    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23434      engine_debug(l_routine||': '||x_status_text);
23435      END IF;
23436      x_status_code := FND_API.G_RET_STS_ERROR;
23437      x_status_text := l_routine||': '||x_status_text;
23438 
23439 	     IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
23440 		     IF L_SEC_LST_HDR_P1_QLFY_Y_CURR%ISOPEN THEN
23441 			CLOSE L_SEC_LST_HDR_P1_QLFY_Y_CURR;
23442 		     END if;
23443 
23444 		     IF L_SEC_LST_HDR_P1_QLFY_N_CURR%ISOPEN THEN
23445 			CLOSE L_SEC_LST_HDR_P1_QLFY_N_CURR;
23446 		     END if;
23447 
23448 		     IF L_SEC_LST_LIN_P1_QLFY_N_CURR%ISOPEN THEN
23449 			CLOSE L_SEC_LST_LIN_P1_QLFY_N_CURR;
23450 		     END if;
23451 
23452 		     IF L_SEC_LST_LIN_P1_QLFY_Y_CURR%ISOPEN THEN
23453 			CLOSE L_SEC_LST_LIN_P1_QLFY_Y_CURR;
23454 		     END if;
23455 
23456 		     IF L_SEC_SRCH_BOTH_P2_QLFY_N_CURR%ISOPEN THEN
23457 			CLOSE L_SEC_SRCH_BOTH_P2_QLFY_N_CURR;
23458 		     END if;
23459 	     ELSE
23460 		      IF L_SEC_LST_HDR_P1_QLFY_SEC_Y%ISOPEN THEN
23461 			CLOSE L_SEC_LST_HDR_P1_QLFY_SEC_Y;
23462 		     END if;
23463 
23464 		     IF L_SEC_LST_LIN_P1_QLFY_SEC_Y%ISOPEN THEN
23465 			CLOSE L_SEC_LST_LIN_P1_QLFY_SEC_Y;
23466 		     END if;
23467 
23468 		      IF L_SEC_LST_HDR_P1_QLFY_SEC_N%ISOPEN THEN
23469 			CLOSE L_SEC_LST_HDR_P1_QLFY_SEC_N;
23470 		     END if;
23471 
23472 		     IF L_SEC_LST_LIN_P1_QLFY_SEC_N%ISOPEN THEN
23473 			CLOSE L_SEC_LST_LIN_P1_QLFY_SEC_N;
23474 		     END if;
23475 
23476 		     IF L_SEC_SRCH_BOTH_P2_QLFY_N%ISOPEN THEN
23477 			CLOSE L_SEC_SRCH_BOTH_P2_QLFY_N;
23478 		     END if;
23479 
23480 	     END IF;
23481 
23482 
23483  WHEN OTHERS THEN
23484      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23485      engine_debug(SQLERRM);
23486      END IF;
23487      x_status_code := FND_API.G_RET_STS_ERROR;
23488      x_status_text := l_routine||' '||SQLERRM;
23489 
23490      IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
23491 		     IF L_SEC_LST_HDR_P1_QLFY_Y_CURR%ISOPEN THEN
23492 			CLOSE L_SEC_LST_HDR_P1_QLFY_Y_CURR;
23493 		     END if;
23494 
23495 		     IF L_SEC_LST_HDR_P1_QLFY_N_CURR%ISOPEN THEN
23496 			CLOSE L_SEC_LST_HDR_P1_QLFY_N_CURR;
23497 		     END if;
23498 
23499 		     IF L_SEC_LST_LIN_P1_QLFY_N_CURR%ISOPEN THEN
23500 			CLOSE L_SEC_LST_LIN_P1_QLFY_N_CURR;
23501 		     END if;
23502 
23503 		     IF L_SEC_LST_LIN_P1_QLFY_Y_CURR%ISOPEN THEN
23504 			CLOSE L_SEC_LST_LIN_P1_QLFY_Y_CURR;
23505 		     END if;
23506 
23507 		     IF L_SEC_SRCH_BOTH_P2_QLFY_N_CURR%ISOPEN THEN
23508 			CLOSE L_SEC_SRCH_BOTH_P2_QLFY_N_CURR;
23509 		     END if;
23510 
23511 	     ELSE
23512 		      IF L_SEC_LST_HDR_P1_QLFY_SEC_Y%ISOPEN THEN
23513 			CLOSE L_SEC_LST_HDR_P1_QLFY_SEC_Y;
23514 		     END if;
23515 
23516 		     IF L_SEC_LST_LIN_P1_QLFY_SEC_Y%ISOPEN THEN
23517 			CLOSE L_SEC_LST_LIN_P1_QLFY_SEC_Y;
23518 		     END if;
23519 
23520 		      IF L_SEC_LST_HDR_P1_QLFY_SEC_N%ISOPEN THEN
23521 			CLOSE L_SEC_LST_HDR_P1_QLFY_SEC_N;
23522 		     END if;
23523 
23524 		     IF L_SEC_LST_LIN_P1_QLFY_SEC_N%ISOPEN THEN
23525 			CLOSE L_SEC_LST_LIN_P1_QLFY_SEC_N;
23526 		     END if;
23527 
23528 		     IF L_SEC_SRCH_BOTH_P2_QLFY_N%ISOPEN THEN
23529 			CLOSE L_SEC_SRCH_BOTH_P2_QLFY_N;
23530 		     END if;
23531 
23532 	     END IF;
23533 
23534 END PERFORM_SECONDARY_PATRN_SEARCH;
23535 
23536 
23537 PROCEDURE LIST_HEADER_PATTERN_SEARCH (
23538 		       p_pricing_phase_id     IN NUMBER,
23539 		       p_freeze_override_flag IN VARCHAR2,
23540 		       p_control_rec          IN CONTROL_RECORD_TYPE,
23541                        x_status_code          OUT NOCOPY VARCHAR2,
23542                        x_status_text          OUT NOCOPY VARCHAR2) AS
23543 
23544 
23545    CURSOR l_pat_cache_both IS
23546 
23547    SELECT /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_N3)
23548        index(qpl QP_LIST_LINES_N16)
23549        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
23550        index(qpatrgrp QP_ATTRIBUTE_GROUPS_N1)
23551        index(qppattmp2 QP_NPREQ_LINE_PATRNS_T_N1)
23552        index(qprs qp_pte_source_systems_u2)
23553        l_pat_cache_both */
23554       DISTINCT
23555          qpl.LIST_HEADER_ID,
23556          qpl.LIST_LINE_ID,
23557          qplines.LINE_INDEX,
23558          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
23559 	 qpatrgrp.pattern_id  AG_MATCHED_PATTRN_ID,
23560          p_pricing_phase_id,
23561          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
23562          qpatrgrp.HASH_KEY  AG_MATCHED_HASH_KEY,
23563 	 G_STAGE_CACHE_LST_HDR_LIN_SRCH STAGE,
23564 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
23565          qpatrgrp.source_system_code,
23566          --decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
23567 	 DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
23568          -1 qpl_grpng_num,
23569          qpatrgrp.GROUPING_NO ag_grpng_num,
23570          qpl.EQ_FLAG QPL_EQFLAG,
23571 	 qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
23572          qplines.VALIDATED_FLAG,
23573          qpl.MODIFIER_LEVEL_CODE,
23574          qpl.null_other_oprt_count qpl_other_oprt_cnt,
23575          qpatrgrp.other_oprt_count ag_other_oprt_cnt,
23576          qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
23577 	 --qpl.other_oprt_count,
23578          --qpl.null_other_oprt_count,
23579          qpatrgrp.LIST_TYPE_CODE,
23580          qpatrgrp.ASK_FOR_FLAG,
23581          qpatrgrp.HEADER_LIMIT_EXISTS,
23582          qpatrgrp.LINE_LIMIT_EXISTS,
23583 	 NULL CURRENCY_DETAIL_ID,
23584          qpatrgrp.CURRENCY_HEADER_ID,
23585          NULL SELLING_ROUNDING_FACTOR,
23586          qpatrgrp.CURRENCY_CODE   BASE_CURRENCY_CODE,
23587          qplines.pricing_effective_date,
23588          qpl.BREAK_UOM_CODE,
23589          qpl.BREAK_UOM_CONTEXT,
23590          qpl.BREAK_UOM_ATTRIBUTE,
23591          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
23592 	 qpatrgrp.descendents_quals_exist,
23593 	 QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
23594    FROM qp_npreq_lines_tmp qplines,
23595         qp_npreq_line_patrns_tmp qppattmp1,
23596 	qp_list_lines qpl,
23597         qp_secu_attr_groups_v qpatrgrp,
23598 	--qp_attribute_groups qpatrgrp,
23599         qp_pte_source_systems qprs,
23600         --qp_price_req_sources_v qprs,
23601         qp_npreq_line_patrns_tmp qppattmp2
23602    WHERE QPLINES.VALIDATED_FLAG = G_NO
23603      AND (qplines.price_flag = G_YES OR
23604           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
23605      AND qplines.list_price_override_flag in ('N', 'O') -- po integration
23606      AND qppattmp1.line_index = qplines.line_index
23607      AND qpl.pricing_phase_id = p_pricing_phase_id
23608      AND qpl.list_header_id = QPLINES.PRICE_LIST_HEADER_ID
23609      AND qpl.pattern_id = qppattmp1.pattern_id
23610      AND qpl.hash_key = qppattmp1.hash_key
23611      AND qpl.pte_code = G_PTE_CODE
23612      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
23613           BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23614 	   AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23615      AND qpatrgrp.list_header_id = qpl.list_header_id
23616      AND qpatrgrp.pricing_phase_id = p_pricing_phase_id
23617      AND qpatrgrp.active_flag = G_YES
23618      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
23619           BETWEEN TRUNC(nvl(qpatrgrp.START_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,sysdate)))
23620           AND TRUNC(nvl(qpatrgrp.END_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,   sysdate)))
23621      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
23622          BETWEEN TRUNC(NVL(qpatrgrp.START_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,sysdate)))
23623          AND TRUNC(NVL(qpatrgrp.END_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,   sysdate)))
23624      --AND qprs.source_system_code = qpatrgrp.source_system_code
23625      --AND qprs.request_type_code = qplines.request_type_code -- check it
23626      AND   qprs.APPLICATION_SHORT_NAME = qpatrgrp.source_system_code
23627      AND   qprs.pte_code = G_PTE_CODE
23628      AND qppattmp2.line_index = qplines.line_index
23629      AND qppattmp2.pattern_id = qpatrgrp.pattern_id
23630      AND qppattmp2.hash_key = qpatrgrp.hash_key
23631      AND qpatrgrp.CURRENCY_CODE = QPLINES.CURRENCY_CODE
23632      AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0)
23633        UNION ALL
23634       SELECT /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_N3)
23635        index(qpl QP_LIST_LINES_N16)
23636        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
23637        index(qprs qp_pte_source_systems_u2)
23638        l_pat_cache_both */
23639       DISTINCT
23640          qpl.LIST_HEADER_ID,
23641          qpl.LIST_LINE_ID,
23642          qplines.LINE_INDEX,
23643          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
23644 	 null, --qpatrgrp.pattern_id  AG_MATCHED_PATTRN_ID,
23645          p_pricing_phase_id,
23646          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
23647          null, --qpatrgrp.HASH_KEY  AG_MATCHED_HASH_KEY,
23648 	 G_STAGE_CACHE_LST_HDR_LIN_SRCH STAGE,
23649 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
23650          qph.source_system_code,
23651 	 'N' ,-- DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
23652          -1 qpl_grpng_num,
23653          null, --qpatrgrp.GROUPING_NO ag_grpng_num,
23654          qpl.EQ_FLAG QPL_EQFLAG,
23655 	 null, --qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
23656          qplines.VALIDATED_FLAG,
23657          qpl.MODIFIER_LEVEL_CODE,
23658          qpl.null_other_oprt_count qpl_other_oprt_cnt,
23659          0, --qpatrgrp.other_oprt_count ag_other_oprt_cnt,
23660          0, --qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
23661          qph.LIST_TYPE_CODE,
23662          qph.ASK_FOR_FLAG,
23663          qph.LIMIT_EXISTS_FLAG,
23664          qpl.LIMIT_EXISTS_FLAG,
23665 	 NULL CURRENCY_DETAIL_ID,
23666          qph.CURRENCY_HEADER_ID,
23667          NULL SELLING_ROUNDING_FACTOR,
23668          qph.CURRENCY_CODE   BASE_CURRENCY_CODE,
23669          qplines.pricing_effective_date,
23670          qpl.BREAK_UOM_CODE,
23671          qpl.BREAK_UOM_CONTEXT,
23672          qpl.BREAK_UOM_ATTRIBUTE,
23673          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
23674  	 'N' descendents_quals_exist,
23675 	 QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
23676    FROM qp_npreq_lines_tmp qplines,
23677         qp_npreq_line_patrns_tmp qppattmp1,
23678 	qp_list_lines qpl,
23679 	qp_list_headers_b qph,
23680 	qp_pte_source_systems qprs
23681         --qp_price_req_sources_v qprs
23682    WHERE QPLINES.VALIDATED_FLAG = G_YES
23683      AND (qplines.price_flag = G_YES OR
23684           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
23685      AND qplines.list_price_override_flag in ('N', 'O') -- po integration
23686      AND qppattmp1.line_index = qplines.line_index
23687      AND qpl.pricing_phase_id = p_pricing_phase_id
23688      AND qpl.list_header_id = QPLINES.PRICE_LIST_HEADER_ID
23689      AND qpl.pattern_id = qppattmp1.pattern_id
23690      AND qpl.hash_key = qppattmp1.hash_key
23691      AND qpl.pte_code = G_PTE_CODE
23692      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
23693           BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23694 	   AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23695      AND qph.list_header_id = qpl.list_header_id
23696      AND qph.active_flag = G_YES
23697      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
23698           BETWEEN TRUNC(nvl(qph.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23699           AND TRUNC(nvl(qph.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,   sysdate)))
23700      --AND qprs.source_system_code = qph.source_system_code
23701      --AND qprs.request_type_code = qplines.request_type_code -- check it
23702      AND   qprs.APPLICATION_SHORT_NAME = qph.source_system_code
23703      AND   qprs.pte_code = G_PTE_CODE
23704      AND qph.CURRENCY_CODE = QPLINES.CURRENCY_CODE
23705      AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
23706 
23707  CURSOR l_pat_cache_both_curr IS
23708 
23709    SELECT /*+ ORDERED index(QCDT QP_CURRENCY_DETAILS_N2)
23710        index(qplines QP_PREQ_LINES_TMP_N3)
23711        index(qpl QP_LIST_LINES_N16)
23712        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
23713        index(qpatrgrp QP_ATTRIBUTE_GROUPS_N1)
23714        index(qppattmp2 QP_NPREQ_LINE_PATRNS_T_N1)
23715        index(qprs qp_pte_source_systems_u2)
23716        l_pat_cache_both_curr */
23717       DISTINCT
23718          qpl.LIST_HEADER_ID,
23719          qpl.LIST_LINE_ID,
23720          qplines.LINE_INDEX,
23721          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
23722 	 qpatrgrp.pattern_id  AG_MATCHED_PATTRN_ID,
23723          p_pricing_phase_id,
23724          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
23725          qpatrgrp.HASH_KEY  AG_MATCHED_HASH_KEY,
23726 	 G_STAGE_CACHE_LST_HDR_LIN_SRCH STAGE,
23727 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
23728          qpatrgrp.source_system_code,
23729          --decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
23730 	 DECODE(qpatrgrp.EQ_FLAG,'N','Y',DECODE(qpatrgrp.descendents_quals_exist,'Y','Y','N')) HEADER_QUALS_EXIST_FLAG,
23731          -1 qpl_grpng_num,
23732          qpatrgrp.GROUPING_NO ag_grpng_num,
23733          qpl.EQ_FLAG QPL_EQFLAG,
23734 	 qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
23735          qplines.VALIDATED_FLAG,
23736          qpl.MODIFIER_LEVEL_CODE,
23737          qpl.null_other_oprt_count qpl_other_oprt_cnt,
23738          qpatrgrp.other_oprt_count ag_other_oprt_cnt,
23739          qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
23740          qpatrgrp.LIST_TYPE_CODE,
23741          qpatrgrp.ASK_FOR_FLAG,
23742          qpatrgrp.HEADER_LIMIT_EXISTS,
23743          qpatrgrp.LINE_LIMIT_EXISTS,
23744 	 QCDT.CURRENCY_DETAIL_ID,
23745          QCDT.CURRENCY_HEADER_ID,
23746          QCDT.SELLING_ROUNDING_FACTOR,
23747          qpatrgrp.CURRENCY_CODE   BASE_CURRENCY_CODE,
23748          qplines.pricing_effective_date,
23749          qpl.BREAK_UOM_CODE,
23750          qpl.BREAK_UOM_CONTEXT,
23751          qpl.BREAK_UOM_ATTRIBUTE,
23752          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
23753  	 qpatrgrp.descendents_quals_exist,
23754 	 QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
23755    FROM qp_npreq_lines_tmp qplines,
23756         qp_npreq_line_patrns_tmp qppattmp1,
23757 	qp_list_lines qpl,
23758 	qp_secu_attr_groups_v qpatrgrp,
23759 	--qp_attribute_groups qpatrgrp,
23760         qp_pte_source_systems qprs,
23761         --qp_price_req_sources_v qprs,
23762         qp_npreq_line_patrns_tmp qppattmp2,
23763 	QP_CURRENCY_DETAILS QCDT
23764    WHERE QPLINES.VALIDATED_FLAG = G_NO
23765      AND (qplines.price_flag = G_YES OR
23766           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
23767      AND qplines.list_price_override_flag in ('N', 'O') -- po integration
23768      AND qppattmp1.line_index = qplines.line_index
23769      AND qpl.pricing_phase_id = p_pricing_phase_id
23770      AND qpl.list_header_id = QPLINES.PRICE_LIST_HEADER_ID
23771      AND qpl.pattern_id = qppattmp1.pattern_id
23772      AND qpl.hash_key = qppattmp1.hash_key
23773      AND qpl.pte_code = G_PTE_CODE
23774      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
23775           BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23776 	   AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23777      AND qpatrgrp.list_header_id = qpl.list_header_id
23778      AND qpatrgrp.pricing_phase_id = p_pricing_phase_id
23779      AND qpatrgrp.active_flag = G_YES
23780      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
23781           BETWEEN TRUNC(nvl(qpatrgrp.START_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,sysdate)))
23782           AND TRUNC(nvl(qpatrgrp.END_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,   sysdate)))
23783      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
23784          BETWEEN TRUNC(NVL(qpatrgrp.START_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,sysdate)))
23785          AND TRUNC(NVL(qpatrgrp.END_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,   sysdate)))
23786      --AND qprs.source_system_code = qpatrgrp.source_system_code
23787      --AND qprs.request_type_code = qplines.request_type_code -- check it
23788      AND qprs.APPLICATION_SHORT_NAME = qpatrgrp.source_system_code
23789      AND qprs.pte_code = G_PTE_CODE
23790      AND qppattmp2.line_index = qplines.line_index
23791      AND qppattmp2.pattern_id = qpatrgrp.pattern_id
23792      AND qppattmp2.hash_key = qpatrgrp.hash_key
23793      AND qpatrgrp.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
23794      AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
23795      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23796 		TRUNC(NVL(QCDT.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23797 			AND TRUNC(NVL(QCDT.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23798      AND (
23799         (qcdt.curr_attribute_context is null
23800          and not exists
23801              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
23802 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
23803                where qcdt1.curr_attribute_context IS NOT NULL
23804 		 and qcdt1.curr_attribute_context = pa_tmp.context
23805                  and qcdt1.curr_attribute = pa_tmp.attribute
23806                  and qcdt1.curr_attribute_value = pa_tmp.value_from
23807                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
23808                  and qcdt1.to_currency_code = qcdt.to_currency_code
23809                  and qcdt1.currency_header_id = qcdt.currency_header_id
23810                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
23811                  and pa_tmp.line_index = qplines.line_index
23812                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23813 		         TRUNC(NVL(QCDT1.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23814 			AND TRUNC(NVL(QCDT1.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23815              )
23816         )
23817         OR
23818         (qcdt.curr_attribute_context is not null
23819          and qcdt.currency_detail_id =
23820              (select qcdt3.currency_detail_id
23821 	       from qp_currency_details qcdt3
23822                  where qcdt3.to_currency_code = qcdt.to_currency_code
23823                  and qcdt3.currency_header_id = qcdt.currency_header_id
23824                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23825    		        TRUNC(NVL(QCDT3.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23826 			AND TRUNC(NVL(QCDT3.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23827                  and  qcdt3.precedence =
23828              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */
23829 	       min(qcdt2.precedence)
23830 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
23831                where qcdt2.curr_attribute_context IS NOT NULL
23832 		 and qcdt2.curr_attribute_context = pa_tmp1.context
23833                  and qcdt2.curr_attribute = pa_tmp1.attribute
23834                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
23835                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
23836                  and qcdt2.to_currency_code = qcdt.to_currency_code
23837                  and qcdt2.currency_header_id = qcdt.currency_header_id
23838                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
23839                  and pa_tmp1.line_index = qplines.line_index
23840                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23841    		        TRUNC(NVL(QCDT2.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23842 			AND TRUNC(NVL(QCDT2.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23843              ))
23844         )
23845        )
23846        AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0)
23847        UNION
23848       SELECT /*+ ORDERED index(QCDT QP_CURRENCY_DETAILS_N2)
23849        index(qplines QP_PREQ_LINES_TMP_N3)
23850        index(qpl QP_LIST_LINES_N16)
23851        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
23852        index(qprs qp_pte_source_systems_u2)
23853        l_pat_cache_both_curr */
23854       DISTINCT
23855          qpl.LIST_HEADER_ID,
23856          qpl.LIST_LINE_ID,
23857          qplines.LINE_INDEX,
23858          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
23859 	 null, --qpatrgrp.pattern_id  AG_MATCHED_PATTRN_ID,
23860          p_pricing_phase_id,
23861          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
23862          null, --qpatrgrp.HASH_KEY  AG_MATCHED_HASH_KEY,
23863 	 G_STAGE_CACHE_LST_HDR_LIN_SRCH STAGE,
23864 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
23865          qph.source_system_code,
23866          --decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
23867 	 'N' ,-- DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
23868          -1 qpl_grpng_num,
23869          null, --qpatrgrp.GROUPING_NO ag_grpng_num,
23870          qpl.EQ_FLAG QPL_EQFLAG,
23871 	 null, --qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
23872          qplines.VALIDATED_FLAG,
23873          qpl.MODIFIER_LEVEL_CODE,
23874          qpl.null_other_oprt_count qpl_other_oprt_cnt,
23875          0, --qpatrgrp.other_oprt_count ag_other_oprt_cnt,
23876          0, --qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
23877          qph.LIST_TYPE_CODE,
23878          qph.ASK_FOR_FLAG,
23879          qph.LIMIT_EXISTS_FLAG,
23880          qpl.LIMIT_EXISTS_FLAG,
23881 	 QCDT.CURRENCY_DETAIL_ID,
23882          QCDT.CURRENCY_HEADER_ID,
23883          QCDT.SELLING_ROUNDING_FACTOR,
23884          qph.CURRENCY_CODE   BASE_CURRENCY_CODE,
23885          qplines.pricing_effective_date,
23886          qpl.BREAK_UOM_CODE,
23887          qpl.BREAK_UOM_CONTEXT,
23888          qpl.BREAK_UOM_ATTRIBUTE,
23889          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
23890  	 'N' descendents_quals_exist,
23891 	 QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
23892    FROM qp_npreq_lines_tmp qplines,
23893         qp_npreq_line_patrns_tmp qppattmp1,
23894 	qp_list_lines qpl,
23895 	qp_list_headers_b qph,
23896         --qp_price_req_sources_v qprs,
23897 	qp_pte_source_systems qprs,
23898 	QP_CURRENCY_DETAILS QCDT
23899    WHERE QPLINES.VALIDATED_FLAG = G_YES
23900      AND (qplines.price_flag = G_YES OR
23901           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
23902      AND qplines.list_price_override_flag in ('N', 'O') -- po integration
23903      AND qppattmp1.line_index = qplines.line_index
23904      AND qpl.pricing_phase_id = p_pricing_phase_id
23905      AND qpl.list_header_id = QPLINES.PRICE_LIST_HEADER_ID
23906      AND qpl.pattern_id = qppattmp1.pattern_id
23907      AND qpl.hash_key = qppattmp1.hash_key
23908      AND qpl.pte_code = G_PTE_CODE
23909      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
23910           BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23911 	   AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
23912      AND qph.list_header_id = qpl.list_header_id
23913      AND qph.active_flag = G_YES
23914      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
23915           BETWEEN TRUNC(nvl(qph.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23916           AND TRUNC(nvl(qph.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,   sysdate)))
23917      --AND qprs.source_system_code = qph.source_system_code
23918      --AND qprs.request_type_code = qplines.request_type_code -- check it
23919      AND qprs.APPLICATION_SHORT_NAME = qph.source_system_code
23920      AND qprs.pte_code = G_PTE_CODE
23921      AND qph.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
23922      AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
23923      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23924 		TRUNC(NVL(QCDT.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23925 			AND TRUNC(NVL(QCDT.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23926      AND (
23927         (qcdt.curr_attribute_context is null
23928          and not exists
23929              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
23930 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
23931                where qcdt1.curr_attribute_context IS NOT NULL
23932 		 and qcdt1.curr_attribute_context = pa_tmp.context
23933                  and qcdt1.curr_attribute = pa_tmp.attribute
23934                  and qcdt1.curr_attribute_value = pa_tmp.value_from
23935                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
23936                  and qcdt1.to_currency_code = qcdt.to_currency_code
23937                  and qcdt1.currency_header_id = qcdt.currency_header_id
23938                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
23939                  and pa_tmp.line_index = qplines.line_index
23940                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23941 		         TRUNC(NVL(QCDT1.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23942 			AND TRUNC(NVL(QCDT1.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23943              )
23944         )
23945         OR
23946         (qcdt.curr_attribute_context is not null
23947          and qcdt.currency_detail_id =
23948              (select qcdt3.currency_detail_id
23949 	       from qp_currency_details qcdt3
23950                  where qcdt3.to_currency_code = qcdt.to_currency_code
23951                  and qcdt3.currency_header_id = qcdt.currency_header_id
23952                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23953    		        TRUNC(NVL(QCDT3.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23954 			AND TRUNC(NVL(QCDT3.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23955                  and  qcdt3.precedence =
23956              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */
23957 	       min(qcdt2.precedence)
23958 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
23959                where qcdt2.curr_attribute_context IS NOT NULL
23960 		 and qcdt2.curr_attribute_context = pa_tmp1.context
23961                  and qcdt2.curr_attribute = pa_tmp1.attribute
23962                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
23963                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
23964                  and qcdt2.to_currency_code = qcdt.to_currency_code
23965                  and qcdt2.currency_header_id = qcdt.currency_header_id
23966                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
23967                  and pa_tmp1.line_index = qplines.line_index
23968                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
23969    		        TRUNC(NVL(QCDT2.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23970 			AND TRUNC(NVL(QCDT2.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
23971              ))
23972         )
23973        )
23974        AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
23975 
23976 l_limit NUMBER := 5000;
23977 p_stage varchar2(300);
23978 
23979 TYPE l_number IS TABLE OF NUMBER INDEX BY pls_integer;
23980   l_list_header_id_tbl l_number;
23981   l_list_line_id_tbl l_number;
23982   l_matched_pattrn_id_tbl l_number;
23983   l_ag_matched_pat_id_tbl l_number;
23984   l_line_index_tbl l_number;
23985   l_pricing_phase_id_tbl l_number;
23986   l_grouping_no l_number;
23987   l_ag_grpng_no l_number;
23988   l_other_oprt_count l_number;
23989   l_ag_othr_oprt_cnt l_number;
23990   l_null_other_oprt_count l_number;
23991   l_curr_det_id l_number;
23992   l_curr_hdr_id l_number;
23993   L_SELLNG_ROUND_FTR l_number;
23994 
23995   TYPE l_string IS TABLE OF VARCHAR2(2000) INDEX BY pls_integer;
23996   l_matched_hash_key_tbl l_string;
23997   l_ag_mtchd_hash_key_tbl l_string;
23998   l_stage_tbl l_string;
23999   l_pricing_status_code_tbl l_string;
24000   l_ssc l_string;
24001   l_header_quals_exist_flag l_string;
24002   l_eq_flag l_string;
24003   l_ag_eq_flag l_string;
24004   l_validated_flag l_string;
24005   l_modf_lvl_code l_string;
24006   l_list_type_code l_string;
24007   l_ask_for_flag l_string;
24008   l_hdr_lmt_exists l_string;
24009   l_line_lmt_exists l_string;
24010   l_order_curr l_string;
24011   l_base_curr_code l_string;
24012   l_brk_uom_code l_string;
24013   l_brk_uom_ctxt l_string;
24014   l_brk_uom_attr l_string;
24015   l_PRICE_BREAK_TYPE_CODE l_string;
24016   l_descnt_quals_exist l_string;
24017 
24018 
24019 TYPE l_date IS TABLE OF DATE INDEX BY pls_integer;
24020 
24021 l_prcng_effctve_dt l_date;
24022 
24023 
24024 l_return_status            VARCHAR2(240);
24025 L_STATUS_CODE VARCHAR2(30);
24026 L_STATUS_TEXT VARCHAR2(240);
24027 L_LIST_LINE_ID NUMBER;
24028 
24029 l_routine VARCHAR2(40) := 'LIST_HEADER_PATTERN_SEARCH';
24030 E_ROUTINE_ERRORS EXCEPTION;
24031 l_search_path NUMBER(1);
24032 
24033 l_loop_count          NUMBER := 0;
24034 L_DUMMY VARCHAR2(1);
24035 
24036 BEGIN
24037 
24038   x_status_code := fnd_api.g_ret_sts_success;
24039 
24040   qp_debug_util.tstart('LIST_HEADER_PATTERN_SEARCH',   'List Header Search Pattern', false, true);
24041 
24042   IF g_debug_engine = fnd_api.g_true THEN
24043 	engine_debug('L_LIST_CUR');
24044   END IF;
24045 -- Line Cache Start
24046 
24047 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
24048   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24049   engine_debug('cursor L_LIST_CUR_CURRENCY TRUE');
24050   END IF;
24051 
24052    qp_debug_util.tstart('PAT_LST_LIN_SRCH_1',   'List Header Search - Cursor L_LIN_CACHE_CURR');
24053 
24054    OPEN l_pat_cache_both_curr;
24055 ELSE
24056  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24057   engine_debug('cursor l_sec_list_cur   multi-currency FALSE');
24058   END IF;
24059 
24060    qp_debug_util.tstart('PAT_LST_LIN_SRCH_1',   'List Header Search - Cursor L_LIN_CACHE');
24061 
24062    OPEN l_pat_cache_both;
24063 END IF;
24064 
24065      LOOP
24066               l_list_header_id_tbl.DELETE;
24067 	      l_list_line_id_tbl.DELETE;
24068 	      l_line_index_tbl.DELETE;
24069 	      l_matched_pattrn_id_tbl.DELETE;
24070               l_ag_matched_pat_id_tbl.DELETE;
24071 	      l_pricing_phase_id_tbl.DELETE;
24072 	      l_matched_hash_key_tbl.DELETE;
24073 	      l_ag_mtchd_hash_key_tbl.DELETE;
24074 	      l_stage_tbl.DELETE;
24075 	      l_pricing_status_code_tbl.DELETE;
24076 	      l_ssc.DELETE;
24077 	      l_header_quals_exist_flag.DELETE;
24078 	      l_grouping_no.DELETE;
24079 	      l_ag_grpng_no.DELETE;
24080 	      l_eq_flag.DELETE;
24081 	      l_ag_eq_flag.DELETE;
24082 	      l_validated_flag.DELETE;
24083 	      l_modf_lvl_code.DELETE;
24084               l_other_oprt_count.DELETE;
24085 	      l_ag_othr_oprt_cnt.DELETE;
24086 	      l_null_other_oprt_count.DELETE;
24087               l_list_type_code.DELETE;
24088 	      l_ask_for_flag.DELETE;
24089 	      l_hdr_lmt_exists.DELETE;
24090 	      l_line_lmt_exists.DELETE;
24091 	      l_curr_det_id.DELETE;
24092 	      l_curr_hdr_id.DELETE;
24093 	      L_SELLNG_ROUND_FTR.DELETE;
24094               l_base_curr_code.DELETE;
24095 	      l_prcng_effctve_dt.DELETE;
24096               l_brk_uom_code.DELETE;
24097               l_brk_uom_ctxt.DELETE;
24098               l_brk_uom_attr.DELETE;
24099               l_order_curr.DELETE;
24100 	      l_descnt_quals_exist.DELETE;
24101 	      l_PRICE_BREAK_TYPE_CODE.DELETE;
24102 
24103 
24104 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
24105 
24106         FETCH l_pat_cache_both_curr bulk collect
24107         INTO
24108 	      l_list_header_id_tbl,
24109 	      l_list_line_id_tbl,
24110 	      l_line_index_tbl,
24111 	      l_matched_pattrn_id_tbl,
24112               l_ag_matched_pat_id_tbl,
24113 	      l_pricing_phase_id_tbl,
24114 	      l_matched_hash_key_tbl,
24115 	      l_ag_mtchd_hash_key_tbl,
24116 	      l_stage_tbl,
24117 	      l_pricing_status_code_tbl,
24118 	      l_ssc,
24119 	      l_header_quals_exist_flag,
24120 	      l_grouping_no,
24121 	      l_ag_grpng_no,
24122 	      l_eq_flag,
24123 	      l_ag_eq_flag,
24124 	      l_validated_flag,
24125 	      l_modf_lvl_code,
24126               l_other_oprt_count,
24127 	      l_ag_othr_oprt_cnt,
24128 	      l_null_other_oprt_count,
24129               l_list_type_code,
24130 	      l_ask_for_flag,
24131 	      l_hdr_lmt_exists,
24132 	      l_line_lmt_exists,
24133 	      l_curr_det_id,
24134 	      l_curr_hdr_id,
24135 	      L_SELLNG_ROUND_FTR,
24136               l_base_curr_code,
24137 	      l_prcng_effctve_dt,
24138               l_brk_uom_code,
24139               l_brk_uom_ctxt,
24140               l_brk_uom_attr,
24141               l_order_curr,
24142 	      l_descnt_quals_exist,
24143 	      l_PRICE_BREAK_TYPE_CODE
24144 	      limit l_limit;
24145       EXIT
24146     WHEN l_list_header_id_tbl.COUNT = 0;
24147   ELSE
24148         FETCH l_pat_cache_both bulk collect
24149         INTO
24150 	      l_list_header_id_tbl,
24151 	      l_list_line_id_tbl,
24152 	      l_line_index_tbl,
24153 	      l_matched_pattrn_id_tbl,
24154               l_ag_matched_pat_id_tbl,
24155 	      l_pricing_phase_id_tbl,
24156 	      l_matched_hash_key_tbl,
24157 	      l_ag_mtchd_hash_key_tbl,
24158 	      l_stage_tbl,
24159 	      l_pricing_status_code_tbl,
24160 	      l_ssc,
24161 	      l_header_quals_exist_flag,
24162 	      l_grouping_no,
24163 	      l_ag_grpng_no,
24164 	      l_eq_flag,
24165 	      l_ag_eq_flag,
24166 	      l_validated_flag,
24167 	      l_modf_lvl_code,
24168               l_other_oprt_count,
24169 	      l_ag_othr_oprt_cnt,
24170 	      l_null_other_oprt_count,
24171               l_list_type_code,
24172 	      l_ask_for_flag,
24173 	      l_hdr_lmt_exists,
24174 	      l_line_lmt_exists,
24175 	      l_curr_det_id,
24176 	      l_curr_hdr_id,
24177 	      L_SELLNG_ROUND_FTR,
24178               l_base_curr_code,
24179 	      l_prcng_effctve_dt,
24180               l_brk_uom_code,
24181               l_brk_uom_ctxt,
24182               l_brk_uom_attr,
24183               l_order_curr,
24184 	      l_descnt_quals_exist,
24185 	      l_PRICE_BREAK_TYPE_CODE
24186 	      limit l_limit;
24187 
24188       EXIT
24189     WHEN l_list_header_id_tbl.COUNT = 0;
24190 END IF;
24191 
24192 
24193 
24194     engine_debug('L_LINE_CACHE-l_list_header_id_tbl.COUNT-'||l_list_header_id_tbl.COUNT);
24195 
24196        forall i IN 1 .. l_list_header_id_tbl.COUNT
24197          INSERT
24198 	    INTO qp_preq_patrn_qual_tmp(list_header_id,
24199 					list_line_id,
24200 					line_index,
24201 					matched_pattrn_id,
24202 					pricing_phase_id,
24203 					matched_hash_key,
24204 					stage,
24205 					pricing_status_code,
24206 					source_system_code,
24207 					header_quals_exist_flag,
24208 					grouping_no,
24209 					eq_flag,
24210 					validated_flag,
24211 					MODIFIER_LEVEL_CODE,
24212 					other_oprt_count,
24213 					null_other_oprt_count,
24214 					LIST_TYPE_CODE,
24215 					ASK_FOR_FLAG,
24216 					HEADER_LIMIT_EXISTS,
24217 					LINE_LIMIT_EXISTS,
24218 					BREAK_UOM_CODE,
24219 				        BREAK_UOM_CONTEXT,
24220 				        BREAK_UOM_ATTRIBUTE,
24221 				        ORDER_CURRENCY,
24222 				        CURRENCY_DETAIL_ID,
24223 				        CURRENCY_HEADER_ID,
24224 				        SELLING_ROUNDING_FACTOR,
24225 				        BASE_CURRENCY_CODE,
24226 					pricing_effective_date,
24227 					price_break_type_code
24228 					)
24229 			    SELECT DISTINCT l_list_header_id_tbl(i),
24230 					l_list_line_id_tbl(i),
24231 					l_line_index_tbl(i),
24232 					l_matched_pattrn_id_tbl(i),
24233 					l_pricing_phase_id_tbl(i),
24234 					l_matched_hash_key_tbl(i),
24235 					l_stage_tbl(i),
24236 					l_pricing_status_code_tbl(i),
24237 					l_ssc(i),
24238 					l_header_quals_exist_flag(i),
24239 					l_grouping_no(i),
24240 					l_eq_flag(i),
24241 					l_validated_flag(i),
24242 					l_modf_lvl_code(i),
24243 					l_other_oprt_count(i),
24244 					l_other_oprt_count(i),
24245 					l_list_type_code(i),
24246 					l_ask_for_flag(i),
24247 					l_hdr_lmt_exists(i),
24248 					l_line_lmt_exists(i),
24249 			                l_brk_uom_code(i),
24250 			                l_brk_uom_ctxt(i),
24251 			                l_brk_uom_attr(i),
24252 			                l_order_curr(i),
24253 				        l_curr_det_id(i),
24254 			                l_curr_hdr_id(i),
24255 			                L_SELLNG_ROUND_FTR(i),
24256 			                l_base_curr_code(i),
24257 			                l_prcng_effctve_dt(i),
24258 					l_PRICE_BREAK_TYPE_CODE(i)
24259 				FROM dual;
24260 
24261 
24262              forall i IN 1 .. l_list_header_id_tbl.COUNT
24263              INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
24264 					list_line_id,
24265 					line_index,
24266 					pricing_phase_id,
24267 					stage,
24268 					pricing_status_code,
24269 					source_system_code,
24270 					header_quals_exist_flag,
24271 					grouping_no,
24272 					eq_flag,
24273 					validated_flag,
24274 					MODIFIER_LEVEL_CODE,
24275 					other_oprt_count,
24276 					null_other_oprt_count,
24277 					descendents_quals_exist,
24278 					matched_pattrn_id, --bug 10216430
24279                                         matched_hash_key --bug 10216430
24280 					)
24281 			    SELECT DISTINCT l_list_header_id_tbl(i),
24282 					-1, -- List line id,
24283 					l_line_index_tbl(i),
24284 					l_pricing_phase_id_tbl(i),
24285 					l_stage_tbl(i),
24286 					l_pricing_status_code_tbl(i),
24287 					l_ssc(i),
24288 					l_header_quals_exist_flag(i), -- Header Quals Exist,
24289 					l_ag_grpng_no(i),
24290 					l_ag_eq_flag(i),
24291 					l_validated_flag(i),
24292 					l_modf_lvl_code(i),
24293 					l_ag_othr_oprt_cnt(i),
24294 					l_null_other_oprt_count(i),
24295 					l_descnt_quals_exist(i),
24296        				        l_ag_matched_pat_id_tbl(i), -- bug 10216430
24297                                         l_ag_mtchd_hash_key_tbl(i)  -- bug 10216430
24298 				FROM dual
24299 				WHERE l_ag_eq_flag(i) = 'N'
24300 				  OR l_descnt_quals_exist(i) = 'Y'
24301 				  OR l_ag_mtchd_hash_key_tbl(i)<>'BLIND';  -- bug 10216430
24302 
24303 	l_loop_count := l_loop_count + 1;
24304     --exit when l_header_cache_cur%rowcount < l_limit;
24305   END LOOP;
24306 
24307 
24308   if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
24309   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24310   engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
24311   END IF;
24312 
24313    CLOSE l_pat_cache_both_curr;
24314 
24315    qp_debug_util.tstop('PAT_LST_LIN_SRCH_1');
24316 ELSE
24317  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24318   engine_debug('cursor l_sec_list_cur   multi-currency FALSE');
24319   END IF;
24320 
24321    CLOSE l_pat_cache_both;
24322 
24323    qp_debug_util.tstop('PAT_LST_LIN_SRCH_1');
24324 END IF;
24325 
24326    qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_AFT_LIN',   'Populate_Temp_Tables_NEQ_BTW After Line Cache');
24327    Populate_Temp_Tables_NEQ_BTW(
24328 			    p_pricing_phase_id ,
24329 			    G_STAGE_CACHE_LST_HDR_LIN_SRCH,
24330 			    x_status_code ,
24331 			    x_status_text );
24332     IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
24333 	RAISE E_ROUTINE_ERRORS;
24334     END IF;
24335 
24336 
24337     qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_AFT_LIN');
24338     qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_AFT_LIN',   'QP_EVALUATE_OTHER_OPERATORS After Line Cache');
24339 
24340 	QP_EVALUATE_OTHER_OPERATORS(
24341 			 p_pricing_phase_id ,
24342 			  G_STAGE_CACHE_LST_HDR_LIN_SRCH,
24343 			    x_status_code ,
24344 			    x_status_text );
24345 
24346 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
24347 		RAISE E_ROUTINE_ERRORS;
24348         END IF;
24349 
24350 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_AFT_LIN');
24351 
24352 
24353 
24354         -- Deleting modifiers line picked up because of TCA
24355 
24356        qp_debug_util.tstart('PATRN_LIST_CUR_DEL_LIN_TCA',   'Line deletion for TCA');
24357 
24358 	UPDATE qp_preq_patrn_qual_tmp a
24359 	SET pricing_status_code = G_DELETED_TCA
24360 	WHERE pricing_status_code = g_status_unchanged
24361 	 AND a.descendents_quals_exist = 'Y'
24362          and a.pricing_phase_id = p_pricing_phase_id
24363          and a.stage =  G_STAGE_CACHE_LST_HDR_LIN_SRCH
24364 	 AND EXISTS (
24365 	    SELECT 1
24366 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
24367 	    WHERE b.list_header_id = a.list_header_id
24368 	      AND b.list_line_id = a.list_line_id
24369               AND (b.qualifier_grouping_no = a.grouping_no
24370                    or
24371                    b.qualifier_grouping_no = -1
24372                   )
24373 	      AND b.qualify_hier_descendents_flag = 'N'
24374 	      AND c.segment_id = b.segment_id
24375 	      AND c.line_index = a.line_index
24376 	      AND c.derived_qualifier_flag = 'Y');
24377 
24378         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_LIN_TCA');
24379 
24380 
24381        -- Deleting line if headers is not qualified in not=/Between evaluation
24382        -- header_quals_exist_flag will be Y only if Not=/Bet header level
24383        -- qualifiers are present for that line.
24384       qp_debug_util.tstart('PATRN_LIST_CUR_DEL_HDR',   'Line deletion');
24385 
24386     UPDATE qp_preq_patrn_qual_tmp a
24387     SET pricing_status_code = G_DELETED_LINE
24388       WHERE pricing_phase_id = p_pricing_phase_id
24389        AND pricing_status_code = g_status_unchanged
24390        AND list_line_id <> -1
24391        AND nvl(header_quals_exist_flag,   'N') = 'Y'
24392        AND a.stage =  G_STAGE_CACHE_LST_HDR_LIN_SRCH
24393        AND NOT EXISTS
24394        (SELECT /*+ index(b QP_PREQ_PATRN_QUAL_T_N2) */ 'x'
24395         FROM qp_preq_patrn_qual_tmp b
24396         WHERE b.list_header_id = a.list_header_id
24397 	AND b.line_index = a.line_index
24398         AND b.list_line_id = -1
24399         AND b.pricing_phase_id = a.pricing_phase_id
24400         AND pricing_status_code = g_status_unchanged
24401 	AND b.stage =  G_STAGE_CACHE_LST_HDR_LIN_SRCH);
24402 
24403 
24404         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_HDR');
24405 
24406 	qp_debug_util.tstart('PATRN_LIST_CUR_POPULATE_PAT_TEMP_TABLES',   'Populate_Pat_Temp_Tables');
24407 
24408 	Populate_Pat_Temp_Tables(p_pricing_phase_id,
24409 				G_STAGE_CACHE_LST_HDR_LIN_SRCH,
24410 				x_status_code,
24411 				x_status_text);
24412 
24413 
24414 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
24415 		RAISE E_ROUTINE_ERRORS;
24416         END IF;
24417 
24418 	qp_debug_util.tstop('PATRN_LIST_CUR_POPULATE_PAT_TEMP_TABLES');
24419 
24420 	IF g_debug_engine = fnd_api.g_true THEN
24421 		engine_debug('x_status_code-' || x_status_code);
24422 		engine_debug('x_status_text-' || x_status_text);
24423 	END IF;
24424 
24425 IF l_loop_count <> 0 THEN
24426 
24427 	QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
24428 				(p_line_index        => NULL,
24429  				 p_order_uom_code    => NULL,
24430 				 p_order_qty         => NULL,
24431 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID,
24432                                  p_call_big_search   => FALSE,
24433 				 x_list_line_id	 =>     l_list_line_id,
24434 				 x_return_status     => l_return_status,
24435 				 x_return_status_txt => l_status_text);
24436 
24437            IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
24438             RAISE E_ROUTINE_ERRORS;
24439            END IF;
24440 
24441             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24442             engine_debug('Incomp Return Status Non Validated QP_PREQ_GRP: ' || l_return_status);
24443 
24444             END IF;
24445 
24446             -- 3773652
24447             -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
24448             begin
24449               select 'x' into l_dummy
24450               from qp_npreq_lines_tmp
24451               where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
24452               and (PRICE_FLAG = G_YES
24453                    or
24454                    PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
24455               and rownum = 1;
24456 
24457               Evaluate_Between(p_pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
24458             exception
24459               when no_data_found then
24460                 null;
24461             end;
24462 
24463 
24464            Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
24465 
24466             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
24467              RAISE E_ROUTINE_ERRORS;
24468             END IF;
24469 
24470          --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
24471          --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
24472          --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
24473          --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
24474          --By doing this we will get the right price in the PRICE event on change of UOM on the order line
24475          --for price based on price break
24476 
24477          Get_Eligible_Price_Break(p_pricing_phase_id,NULL,l_return_status,l_status_text);
24478          IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
24479           RAISE E_ROUTINE_ERRORS;
24480          END IF;
24481 ELSE
24482 
24483   -- Update the request line status for lines which got valid price list
24484 	   Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,x_status_code,x_status_text);  --[juiln/4708044]
24485 	   IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
24486 	    RAISE E_ROUTINE_ERRORS;
24487 	   END IF;
24488 END IF;
24489 
24490 qp_debug_util.tstop('LIST_HEADER_PATTERN_SEARCH');
24491 
24492 EXCEPTION
24493  WHEN E_ROUTINE_ERRORS THEN
24494 
24495     qp_debug_util.tstop('LIST_HEADER_PATTERN_SEARCH');
24496 
24497      x_status_code := FND_API.G_RET_STS_ERROR;
24498      x_status_text := 'Expected Error in ' || l_routine || sqlerrm;
24499 
24500      IF g_debug_engine = fnd_api.g_true THEN
24501 	engine_debug(x_status_text);
24502      END IF;
24503 
24504      IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
24505 
24506         IF l_pat_cache_both_curr%ISOPEN THEN
24507            CLOSE l_pat_cache_both_curr;
24508         END if;
24509 
24510      ELSE
24511 
24512         IF l_pat_cache_both%ISOPEN THEN
24513            CLOSE l_pat_cache_both_curr;
24514         END if;
24515 
24516      END IF;
24517 
24518 WHEN OTHERS THEN
24519     qp_debug_util.tstop('LIST_HEADER_PATTERN_SEARCH');
24520 
24521      IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
24522 
24523         IF l_pat_cache_both_curr%ISOPEN THEN
24524            CLOSE l_pat_cache_both_curr;
24525         END if;
24526 
24527      ELSE
24528 
24529         IF l_pat_cache_both%ISOPEN THEN
24530            CLOSE l_pat_cache_both_curr;
24531         END if;
24532 
24533      END IF;
24534 
24535     IF g_debug_engine = fnd_api.g_true THEN
24536 	engine_debug(l_routine || ' ' || sqlerrm);
24537     END IF;
24538 
24539 x_status_code := fnd_api.g_ret_sts_error;
24540 x_status_text := 'Error in ' || l_routine || sqlerrm;
24541 
24542 END LIST_HEADER_PATTERN_SEARCH;
24543 
24544 --skattama
24545 
24546 /*+--------------------------------------------------------
24547   | PROCEDURE QUALIFIER_GROUPING
24548   +--------------------------------------------------------
24549 */
24550 PROCEDURE Perform_Qualifier_Grouping(p_line_index_based_flag VARCHAR2,
24551                                      p_pricing_phase_id NUMBER,
24552                                      x_status_code OUT NOCOPY VARCHAR2,
24553                                      x_status_text OUT NOCOPY VARCHAR2) AS
24554 
24555 /*
24556 INDX,QP_PREQ_GRP.perform_qualifier_grouping.header_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
24557 INDX,QP_PREQ_GRP.perform_qualifier_grouping.header_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
24558 */
24559 CURSOR header_level_qual_attrs_cur IS
24560 SELECT a.LIST_HEADER_ID,
24561        a.QUALIFIER_GROUPING_NO,
24562        a.QUALIFIER_GROUP_CNT,
24563        a.UNIQUE_KEY,
24564        COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24565        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24566        1  --7038849
24567 FROM   QP_PREQ_QUAL_TMP a
24568 WHERE  a.LIST_LINE_ID = -1
24569 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24570 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24571 AND    a.QUALIFIER_GROUPING_NO = -1  --7038849
24572 GROUP  BY a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
24573 UNION ALL -- 7038849
24574 SELECT a.LIST_HEADER_ID,
24575        a.QUALIFIER_GROUPING_NO,
24576        a.QUALIFIER_GROUP_CNT,
24577        a.UNIQUE_KEY,
24578        COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24579        -- COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24580        2  --7038849
24581 FROM   QP_PREQ_QUAL_TMP a
24582 WHERE  a.LIST_LINE_ID = -1
24583 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24584 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24585 AND    a.QUALIFIER_GROUPING_NO <> -1  --7038849
24586 GROUP  BY a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
24587 ORDER  BY 1,6; --7038849
24588 
24589 /*
24590 INDX,QP_PREQ_GRP.perform_qualifier_grouping.hdr_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
24591 INDX,QP_PREQ_GRP.perform_qualifier_grouping.hdr_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
24592 INDX,QP_PREQ_GRP.perform_qualifier_grouping.hdr_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LINE_INDEX,3
24593 */
24594 CURSOR hdr_lvl_qual_attrs_req_line IS
24595 SELECT a.LINE_INDEX,
24596        a.LIST_HEADER_ID,
24597        a.QUALIFIER_GROUPING_NO,
24598        a.QUALIFIER_GROUP_CNT,
24599        a.UNIQUE_KEY,
24600         COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24601        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24602        1 -- 7038849
24603 FROM   QP_PREQ_QUAL_TMP a
24604 WHERE  a.LIST_LINE_ID = -1
24605 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24606 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24607 --AND    a.LINE_INDEX > 0
24608 AND    a.QUALIFIER_GROUPING_NO = -1 --7038849
24609 GROUP  BY a.LINE_INDEX , a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
24610 UNION ALL   --7038849
24611 SELECT a.LINE_INDEX,
24612        a.LIST_HEADER_ID,
24613        a.QUALIFIER_GROUPING_NO,
24614        a.QUALIFIER_GROUP_CNT,
24615        a.UNIQUE_KEY,
24616        COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24617        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24618        2 -- 7038849
24619 FROM   QP_PREQ_QUAL_TMP a
24620 WHERE  a.LIST_LINE_ID = -1
24621 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24622 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24623 --AND    a.LINE_INDEX > 0
24624 AND    a.QUALIFIER_GROUPING_NO <> -1 --7038849
24625 GROUP  BY a.LINE_INDEX , a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
24626 ORDER  BY 1,2,7;  --7038849
24627 
24628 /*
24629 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
24630 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N5,LIST_LINE_ID,4
24631 */
24632 CURSOR line_level_qual_attrs_cur IS
24633 SELECT a.LIST_HEADER_ID,
24634        a.LIST_LINE_ID,
24635        a.QUALIFIER_GROUPING_NO,
24636        a.QUALIFIER_GROUP_CNT,
24637        a.HEADER_QUALS_EXIST_FLAG,
24638        a.UNIQUE_KEY,
24639        COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24640        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24641        1  --7038849
24642 FROM   QP_PREQ_QUAL_TMP a
24643 WHERE  a.LIST_LINE_ID  > 0
24644 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24645 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24646 AND    a.QUALIFIER_GROUPING_NO = -1  --7038849
24647 GROUP  BY a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,
24648 		a.UNIQUE_KEY
24649 UNION ALL   -- 7038849
24650 SELECT a.LIST_HEADER_ID,
24651        a.LIST_LINE_ID,
24652        a.QUALIFIER_GROUPING_NO,
24653        a.QUALIFIER_GROUP_CNT,
24654        a.HEADER_QUALS_EXIST_FLAG,
24655        a.UNIQUE_KEY,
24656         COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24657        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24658        2  --7038849
24659 FROM   QP_PREQ_QUAL_TMP a
24660 WHERE  a.LIST_LINE_ID  > 0
24661 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24662 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24663 AND    a.QUALIFIER_GROUPING_NO <> -1  --7038849
24664 GROUP  BY a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,
24665 		a.UNIQUE_KEY
24666 ORDER  BY 1,2,8;  --7038849
24667 
24668 /*
24669 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
24670 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
24671 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LINE_INDEX,3
24672 */
24673 CURSOR line_lvl_qual_attrs_req_line IS
24674 SELECT /*+ INDEX (a QP_PREQ_QUAL_TMP_N1) */ a.LINE_INDEX,
24675        a.LIST_HEADER_ID,
24676        a.LIST_LINE_ID,
24677        a.QUALIFIER_GROUPING_NO,
24678        a.QUALIFIER_GROUP_CNT,
24679        a.HEADER_QUALS_EXIST_FLAG,
24680        a.UNIQUE_KEY,
24681        COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24682        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24683        1
24684 FROM   QP_PREQ_QUAL_TMP a
24685 WHERE  LIST_LINE_ID  > 0
24686 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24687 --AND    a.LINE_INDEX > 0
24688 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24689 AND    a.QUALIFIER_GROUPING_NO = -1  --7038849
24690 GROUP  BY a.LINE_INDEX, a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,
24691 		a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,a.UNIQUE_KEY
24692 UNION ALL  --7038849
24693 SELECT /*+ INDEX (a QP_PREQ_QUAL_TMP_N1) */ a.LINE_INDEX,
24694        a.LIST_HEADER_ID,
24695        a.LIST_LINE_ID,
24696        a.QUALIFIER_GROUPING_NO,
24697        a.QUALIFIER_GROUP_CNT,
24698        a.HEADER_QUALS_EXIST_FLAG,
24699        a.UNIQUE_KEY,
24700        COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --bug 8359587
24701        --COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP, --[julin/3527596,4274099]
24702        2
24703 FROM   QP_PREQ_QUAL_TMP a
24704 WHERE  LIST_LINE_ID  > 0
24705 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24706 --AND    a.LINE_INDEX > 0
24707 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
24708 AND    a.QUALIFIER_GROUPING_NO <> -1  --7038849
24709 GROUP  BY a.LINE_INDEX, a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,
24710 		a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,a.UNIQUE_KEY
24711 ORDER  BY 1,2,3,9;  --7038849
24712 
24713 /*
24714 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
24715 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
24716 */
24717 CURSOR check_hdr_quals_cur(p_list_header_id NUMBER)  IS
24718 SELECT LIST_HEADER_ID
24719 FROM   QP_PREQ_QUAL_TMP
24720 WHERE  LIST_HEADER_ID = p_list_header_id
24721 AND    LIST_LINE_ID = -1
24722 AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24723 AND    PRICING_PHASE_ID = p_pricing_phase_id
24724 AND    ROWNUM = 1;
24725 
24726 /*
24727 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur_req_line,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
24728 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur_req_line,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
24729 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur_req_line,QP_PREQ_QUAL_TMP_N1,LINE_INDEX,3
24730 */
24731 CURSOR check_hdr_quals_cur_req_line(p_list_header_id NUMBER,
24732                                     p_line_index NUMBER)  IS
24733 SELECT LIST_HEADER_ID
24734 FROM   QP_PREQ_QUAL_TMP
24735 WHERE  LIST_HEADER_ID = p_list_header_id
24736 AND    LINE_INDEX = p_line_index
24737 AND    LIST_LINE_ID = -1
24738 AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24739 AND    PRICING_PHASE_ID = p_pricing_phase_id
24740 AND    ROWNUM = 1;
24741 
24742 
24743 /*
24744 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_hdr_quals_exist_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
24745 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_hdr_quals_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
24746 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_hdr_quals_exist_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
24747 */
24748 CURSOR chk_other_hdr_quals_exist_cur(p_list_header_id NUMBER) IS
24749 SELECT LIST_HEADER_ID
24750 FROM   QP_QUALIFIERS
24751 WHERE  LIST_HEADER_ID = p_list_header_id
24752 AND    LIST_LINE_ID = -1
24753 AND    QUALIFIER_GROUPING_NO <> -1;
24754 
24755 /*
24756 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_line_quals_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
24757 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_line_quals_exist_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
24758 */
24759 CURSOR chk_other_line_quals_exist_cur(p_list_line_id NUMBER) IS
24760 SELECT LIST_LINE_ID
24761 FROM   QP_QUALIFIERS
24762 WHERE  LIST_LINE_ID = p_list_line_id
24763 AND    QUALIFIER_GROUPING_NO <> -1;
24764 
24765 
24766 l_hdr_del_tbl                VARCHAR_TYPE;
24767 l_hdr_success_tbl            NUMBER_TYPE;
24768 l_line_del_tbl               VARCHAR_TYPE;
24769 l_line_success_tbl           NUMBER_TYPE;
24770 l_hdr_del_ind                BINARY_INTEGER:=0;
24771 l_hdr_success_ind            BINARY_INTEGER:=0;
24772 l_line_del_ind               BINARY_INTEGER:=0;
24773 l_line_success_ind           BINARY_INTEGER:=0;
24774 v_list_header_id             NUMBER;
24775 v_header_null_grp_count      NUMBER := 0;
24776 v_line_null_grp_count        NUMBER := 0;
24777 l_line_level_quals_satisfied BOOLEAN := FALSE;
24778 l_other_list_header_id       NUMBER;
24779 l_other_list_line_id       NUMBER;
24780 l_list_header_id             NUMBER := -9999;
24781 l_list_line_id               NUMBER := -9999;
24782 l_line_index                 NUMBER := -9999;
24783 l_other_grp_exists_flag      BOOLEAN := FALSE;
24784 l_other_grp_satisfied_flag   BOOLEAN := FALSE;
24785 l_null_unique_key            VARCHAR2(2000);
24786 
24787 BEGIN
24788 
24789 x_status_code := FND_API.G_RET_STS_SUCCESS;
24790 
24791 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24792 engine_debug('Qualifier Grouping begin');
24793 
24794 END IF;
24795 IF (p_line_index_based_flag = G_NO) THEN
24796 
24797   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24798   engine_debug('#QG1 Phase');
24799 
24800   END IF;
24801   FOR i IN header_level_qual_attrs_cur LOOP
24802 
24803    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24804    engine_debug('Header Qualifier Grouping No: ' || i.QUALIFIER_GROUPING_NO);
24805    engine_debug('Passed Hdr Quals : '||i.no_of_qualifiers_in_grp||'Hdr id : '||i.list_header_id);
24806    engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
24807 
24808    END IF;
24809    IF (i.LIST_HEADER_ID <> l_list_header_id ) THEN
24810 
24811     v_header_null_grp_count := 0;
24812     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header
24813     IF (l_other_grp_exists_flag = TRUE) THEN
24814      IF (l_other_grp_satisfied_flag = FALSE) THEN
24815       IF (l_null_unique_key IS NOT NULL) THEN
24816        l_hdr_del_ind := l_hdr_del_ind + 1;
24817        l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
24818       END IF;
24819      END IF;
24820     END IF;
24821     l_other_grp_exists_flag := FALSE;
24822     l_other_grp_satisfied_flag := FALSE;
24823    END IF;
24824 
24825    IF (i.QUALIFIER_GROUPING_NO = -1) THEN
24826     l_null_unique_key := i.unique_key;
24827     IF (i.NO_OF_QUALIFIERS_IN_GRP  < i.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
24828      l_other_list_header_id:=NULL;
24829      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
24830      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
24831      CLOSE chk_other_hdr_quals_exist_cur;
24832 
24833      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24834      engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
24835 
24836      END IF;
24837      -- If there are no other groups , then it is a failure on pure null group,else it is not
24838      IF (l_other_list_header_id IS NULL)  THEN
24839       l_other_grp_exists_flag := FALSE;
24840       l_null_unique_key := NULL;
24841       l_hdr_del_ind := l_hdr_del_ind + 1;
24842       l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
24843       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24844       engine_debug('Deleted Hdr id : '||i.list_header_id||' Unique Key : ' || i.unique_key);
24845       END IF;
24846      ELSE
24847       --l_null_unique_key := i.unique_key;
24848       l_other_grp_exists_flag := TRUE;
24849      END IF;
24850         /* Added for 3259922 */
24851     ELSE
24852      l_other_list_header_id:=NULL;
24853      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
24854      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
24855      CLOSE chk_other_hdr_quals_exist_cur;
24856 
24857      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24858                 engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
24859      END IF;
24860 
24861      IF (l_other_list_header_id IS NOT NULL)  THEN
24862      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24863                 engine_debug('Other groups exist');
24864      END IF; -- 4033618
24865                 l_other_grp_exists_flag := TRUE;
24866      END IF; -- end 3259922
24867     END IF;
24868 
24869     v_header_null_grp_count := i.NO_OF_QUALIFIERS_IN_GRP;
24870 
24871     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24872     engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
24873 
24874     END IF;
24875    ELSE
24876 
24877     -- 4043768/4261138, changed <> to < condition
24878     IF (i.NO_OF_QUALIFIERS_IN_GRP + v_header_null_grp_count < i.QUALIFIER_GROUP_CNT) THEN
24879      --l_other_grp_satisfied_flag := FALSE; do not make it false if it is already TRUE because some grp is satisfied
24880      l_hdr_del_ind := l_hdr_del_ind + 1;
24881      l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
24882      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24883      engine_debug('Deleted Hdr id : '||i.list_header_id|| ' Unique Key : ' || i.unique_key);
24884      END IF;
24885     ELSE
24886      l_other_grp_satisfied_flag := TRUE;
24887     END IF;
24888 
24889    END IF;
24890 
24891    l_list_header_id := i.LIST_HEADER_ID;
24892 
24893   END LOOP;
24894 
24895   -- This code is to delete the -1 group if none of the other groups are satisfied for the last list header
24896   IF (l_other_grp_exists_flag = TRUE) THEN
24897        IF (l_other_grp_satisfied_flag = FALSE) THEN
24898          IF (l_null_unique_key IS NOT NULL) THEN
24899           l_hdr_del_ind := l_hdr_del_ind + 1;
24900           l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
24901          END IF;
24902        END IF;
24903    END IF;
24904 
24905   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24906   engine_debug('#QG2');
24907 
24908   END IF;
24909   IF (l_hdr_del_tbl.count > 0) THEN
24910    FOR m in 1 .. l_hdr_del_tbl.count LOOP
24911     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24912     engine_debug('Deleted Headers : ' || l_hdr_del_tbl(m));
24913     END IF;
24914    END LOOP;
24915   END IF;
24916 
24917   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24918   engine_debug('#QG3');
24919 
24920   END IF;
24921   IF (l_hdr_del_tbl.count > 0) THEN
24922    FORALL i in l_hdr_del_tbl.FIRST..l_hdr_del_tbl.LAST
24923 /*
24924 INDX,QP_PREQ_GRP.perform_qualifier_grouping.upd1,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
24925 INDX,QP_PREQ_GRP.perform_qualifier_grouping.upd1,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
24926 */
24927     UPDATE QP_PREQ_QUAL_TMP --upd1
24928     SET   PRICING_STATUS_CODE = G_DELETED_GRP
24929     WHERE UNIQUE_KEY = l_hdr_del_tbl(i)
24930     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
24931     AND   PRICING_PHASE_ID = p_pricing_phase_id;
24932   END IF;
24933 
24934   l_hdr_del_tbl.delete;
24935   l_hdr_del_ind:=0;
24936 
24937   l_other_grp_exists_flag := FALSE;
24938   l_other_grp_satisfied_flag := FALSE;
24939 
24940   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24941   engine_debug('#QG4');
24942 
24943   END IF;
24944   FOR j IN line_level_qual_attrs_cur LOOP
24945 
24946    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24947    engine_debug('Line Qualifier Grouping No: ' || j.QUALIFIER_GROUPING_NO || ' List Header Id : ' || j.list_header_id);
24948    engine_debug('Passed Line Quals : ' || j.no_of_qualifiers_in_grp || 'List Line id : ' || j.list_line_id);
24949    engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
24950 
24951    END IF;
24952    IF (j.LIST_HEADER_ID <> l_list_header_id or j.LIST_LINE_ID <> l_list_line_id) THEN
24953 
24954     v_line_null_grp_count := 0;
24955 
24956     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header or list line
24957     IF (l_other_grp_exists_flag = TRUE) THEN
24958      IF (l_other_grp_satisfied_flag = FALSE) THEN
24959       IF (l_null_unique_key IS NOT NULL) THEN
24960        l_line_del_ind := l_line_del_ind + 1;
24961        l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
24962       END IF;
24963      END IF;
24964     END IF;
24965     l_other_grp_exists_flag := FALSE;
24966     l_other_grp_satisfied_flag := FALSE;
24967    END IF;
24968 
24969    IF (j.QUALIFIER_GROUPING_NO = -1) THEN
24970     l_null_unique_key := j.unique_key;
24971     IF (j.NO_OF_QUALIFIERS_IN_GRP < j.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
24972 
24973      OPEN chk_other_line_quals_exist_cur(j.list_line_id);
24974      FETCH chk_other_line_quals_exist_cur INTO l_other_list_line_id;
24975      CLOSE chk_other_line_quals_exist_cur;
24976 
24977      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24978      engine_debug('Other Groups Exist in this Line id : '||l_other_list_line_id);
24979 
24980      END IF;
24981      -- If there are no other groups , then it is a failure on pure null group,else it is not
24982      IF (l_other_list_line_id IS NULL) THEN
24983       l_other_grp_exists_flag := FALSE;
24984       l_null_unique_key := NULL;
24985       l_line_del_ind := l_line_del_ind + 1;
24986       l_line_del_tbl(l_line_del_ind) := j.unique_key;
24987       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24988       engine_debug('Deleted Line id : '||j.list_line_id|| ' Unique Key : ' || j.unique_key);
24989       END IF;
24990      ELSE
24991       l_other_grp_exists_flag := TRUE;
24992      END IF;
24993     ELSE
24994      l_line_level_quals_satisfied := TRUE;
24995      --l_null_unique_key := j.unique_key;
24996     END IF;
24997 
24998      v_line_null_grp_count := j.NO_OF_QUALIFIERS_IN_GRP;
24999      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25000      engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
25001 
25002      END IF;
25003    ELSE
25004 
25005     -- 4043768/4261138, changed <> to < condition
25006     IF (j.NO_OF_QUALIFIERS_IN_GRP + v_line_null_grp_count < j.QUALIFIER_GROUP_CNT) THEN
25007      --l_other_grp_satisfied_flag := FALSE;
25008      l_line_del_ind := l_line_del_ind + 1;
25009      l_line_del_tbl(l_line_del_ind) := j.unique_key;
25010      --l_line_del_tbl(l_line_del_ind) := j.list_line_id;
25011      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25012      engine_debug('Deleted Line id : '||j.list_line_id|| ' Unique Key : ' || j.unique_key);
25013      END IF;
25014     ELSE
25015      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25016      engine_debug('Line Quals for : ' || j.list_header_id || ' ' || j.list_line_id );
25017      END IF;
25018      l_line_level_quals_satisfied := TRUE;
25019      l_other_grp_satisfied_flag := TRUE;
25020     END IF;
25021 
25022    END IF;
25023 
25024   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25025   engine_debug('#QG5');
25026 
25027   END IF;
25028    -- Check if header level quals are satisfied.If there is a hdr lvl qualifier in setup and it is not selected
25029    IF (l_line_level_quals_satisfied = TRUE) THEN
25030 
25031     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25032     engine_debug('Line Level Quals Satisfied , but checking whether header level qual satisfied');
25033 
25034     END IF;
25035     IF (j.HEADER_QUALS_EXIST_FLAG = G_YES) THEN
25036       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25037       engine_debug('Header level quals exist' );
25038       END IF;
25039       v_list_header_id := NULL;
25040 
25041       OPEN check_hdr_quals_cur(j.LIST_HEADER_ID);
25042       FETCH check_hdr_quals_cur INTO v_list_header_id;
25043       CLOSE check_hdr_quals_cur;
25044 
25045       IF (v_list_header_id IS NULL) THEN
25046        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25047        engine_debug('Line Level Quals Not Satisfied , as Header Id is : ' || nvl(v_list_header_id,-99999));
25048        END IF;
25049        l_line_del_ind := l_line_del_ind + 1;
25050        l_line_del_tbl(l_line_del_ind) := j.unique_key;
25051        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25052        engine_debug('Deleted Line id : '||j.list_line_id|| ' Unique Key : ' || j.unique_key);
25053        END IF;
25054       ELSE
25055        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25056        engine_debug('Line Level Quals Satisfied , Header Id : ' || nvl(v_list_header_id,-99999));
25057        END IF;
25058       END IF;
25059     ELSE
25060       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25061       engine_debug('Header level quals do not exist' );
25062       END IF;
25063     END IF;
25064 
25065    END IF;
25066 
25067    l_line_level_quals_satisfied := FALSE;
25068    l_list_header_id := j.LIST_HEADER_ID;
25069    l_list_line_id := j.LIST_LINE_ID;
25070 
25071   END LOOP;
25072 
25073   -- This code is to delete the -1 group if none of the other groups are satisfied on last list header or list line
25074   IF (l_other_grp_exists_flag = TRUE) THEN
25075      IF (l_other_grp_satisfied_flag = FALSE) THEN
25076       IF (l_null_unique_key IS NOT NULL) THEN
25077        l_line_del_ind := l_line_del_ind + 1;
25078        l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
25079       END IF;
25080      END IF;
25081   END IF;
25082 
25083   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25084   engine_debug('#QG6');
25085 
25086   END IF;
25087   IF (l_line_del_tbl.count > 0 ) THEN
25088    FOR m in 1 .. l_line_del_tbl.count LOOP
25089    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25090    engine_debug('Deleted Lines : ' || l_line_del_tbl(m));
25091    END IF;
25092    END LOOP;
25093   END IF;
25094 
25095   IF (l_line_del_tbl.count > 0 ) THEN
25096    FORALL i in l_line_del_tbl.FIRST..l_line_del_tbl.LAST
25097 /*
25098 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd2,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
25099 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd2,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
25100 */
25101     UPDATE QP_PREQ_QUAL_TMP --upd2
25102     SET   PRICING_STATUS_CODE = G_DELETED_GRP
25103     WHERE UNIQUE_KEY  = l_line_del_tbl(i)
25104     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
25105     AND   PRICING_PHASE_ID = p_pricing_phase_id;
25106   END IF;
25107 
25108   l_line_del_tbl.delete;
25109   l_line_del_ind:=0;
25110 
25111 ELSIF (p_line_index_based_flag = G_YES) THEN
25112 
25113   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25114   engine_debug('#QG1');
25115 
25116   END IF;
25117   FOR i IN hdr_lvl_qual_attrs_req_line LOOP
25118 
25119    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25120    engine_debug('Header Qualifier Grouping No: ' || i.QUALIFIER_GROUPING_NO);
25121    engine_debug('Passed Hdr Quals : '||i.no_of_qualifiers_in_grp||'Hdr id : '||i.list_header_id||' Line Indx: '||i.line_index);
25122    engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
25123 
25124    END IF;
25125 
25126    --[julin/4227338,4261116] IF (i.LIST_HEADER_ID <> l_list_header_id or i.LINE_INDEX <> l_line_index) THEN
25127    IF (i.LIST_HEADER_ID <> l_list_header_id or nvl(i.LINE_INDEX, -88888) <> nvl(l_line_index,-88888)) THEN
25128 
25129     v_header_null_grp_count := 0;
25130 
25131     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header or line index
25132     IF (l_other_grp_exists_flag = TRUE) THEN
25133      IF (l_other_grp_satisfied_flag = FALSE) THEN
25134       IF (l_null_unique_key IS NOT NULL) THEN
25135        l_hdr_del_ind := l_hdr_del_ind + 1;
25136        l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
25137       END IF;
25138      END IF;
25139     END IF;
25140     l_other_grp_exists_flag := FALSE;
25141     l_other_grp_satisfied_flag := FALSE;
25142    END IF;
25143 
25144    IF (i.QUALIFIER_GROUPING_NO = -1) THEN
25145     l_null_unique_key := i.unique_key;    --added for bug number 3273669
25146     IF (i.NO_OF_QUALIFIERS_IN_GRP < i.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
25147      l_other_list_header_id:=NULL;
25148      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
25149      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
25150      CLOSE chk_other_hdr_quals_exist_cur;
25151 
25152      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25153      engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
25154 
25155      END IF;
25156      -- If there are no other groups , then it is a failure on pure null group,else it is not
25157      IF (l_other_list_header_id IS NULL)  THEN
25158       l_other_grp_exists_flag := FALSE;
25159       l_null_unique_key := NULL;
25160       l_hdr_del_ind := l_hdr_del_ind + 1;
25161       l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
25162       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25163       engine_debug('Deleted Hdr id : '||i.list_header_id||' Line Indx: '||i.line_index || ' Unique Key : ' || i.unique_key);
25164       END IF;
25165      ELSE
25166       l_null_unique_key := i.unique_key;
25167       l_other_grp_exists_flag := TRUE;
25168      END IF;
25169        /* Added for 3273669 */
25170     ELSE
25171      l_other_list_header_id:=NULL;
25172      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
25173      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
25174      CLOSE chk_other_hdr_quals_exist_cur;
25175 
25176      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25177                 engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
25178      END IF;
25179 
25180      IF (l_other_list_header_id IS NOT NULL)  THEN
25181      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25182                 engine_debug('Other groups exist');
25183      END IF; -- 4033618
25184                 l_other_grp_exists_flag := TRUE;
25185      END IF; -- end 3273669
25186 
25187     END IF;
25188 
25189     v_header_null_grp_count := i.NO_OF_QUALIFIERS_IN_GRP;
25190 
25191     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25192     engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
25193 
25194     END IF;
25195    ELSE
25196     -- 4043768/4261138, changed <> to < condition
25197     IF (i.NO_OF_QUALIFIERS_IN_GRP + v_header_null_grp_count < i.QUALIFIER_GROUP_CNT) THEN
25198      --l_other_grp_satisfied_flag := FALSE;
25199      l_hdr_del_ind := l_hdr_del_ind + 1;
25200      l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
25201      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25202      engine_debug('Deleted Hdr id : '||i.list_header_id||' Line Indx: '||i.line_index || ' Unique Key : ' || i.unique_key);
25203      END IF;
25204     ELSE
25205      l_other_grp_satisfied_flag := TRUE;
25206     END IF;
25207 
25208    END IF;
25209 
25210    l_list_header_id := i.LIST_HEADER_ID;
25211    l_line_index := i.LINE_INDEX;
25212 
25213   END LOOP;
25214 
25215   -- This code is to delete the -1 group if none of the other groups are satisfied on last list header or line index
25216   IF (l_other_grp_exists_flag = TRUE) THEN
25217    IF (l_other_grp_satisfied_flag = FALSE) THEN
25218       IF (l_null_unique_key IS NOT NULL) THEN
25219        l_hdr_del_ind := l_hdr_del_ind + 1;
25220        l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
25221       END IF;
25222    END IF;
25223   END IF;
25224 
25225   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25226   engine_debug('#QG2');
25227 
25228   END IF;
25229   IF (l_hdr_del_tbl.count > 0) THEN
25230    FOR m in 1 .. l_hdr_del_tbl.count LOOP
25231     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25232     engine_debug('Deleted Headers : ' || l_hdr_del_tbl(m));
25233     END IF;
25234    END LOOP;
25235   END IF;
25236 
25237   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25238   engine_debug('#QG3');
25239 
25240   END IF;
25241   IF (l_hdr_del_tbl.count > 0) THEN
25242    FORALL i in l_hdr_del_tbl.FIRST..l_hdr_del_tbl.LAST
25243 /*
25244 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd3,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
25245 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd3,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
25246 */
25247     UPDATE QP_PREQ_QUAL_TMP --upd3
25248     SET   PRICING_STATUS_CODE = G_DELETED_GRP
25249     WHERE UNIQUE_KEY = l_hdr_del_tbl(i)
25250     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
25251     AND   PRICING_PHASE_ID = p_pricing_phase_id;
25252   END IF;
25253 
25254   l_hdr_del_tbl.delete;
25255   l_hdr_del_ind:=0;
25256 
25257   l_other_grp_exists_flag := FALSE;
25258   l_other_grp_satisfied_flag := FALSE;
25259 
25260   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25261   engine_debug('#QG4');
25262 
25263   END IF;
25264   FOR j IN line_lvl_qual_attrs_req_line LOOP
25265 
25266    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25267    engine_debug('Line Qualifier Grouping No: ' || j.QUALIFIER_GROUPING_NO || ' List Header Id : ' || j.list_header_id);
25268    engine_debug('Passed Line Quals : ' || j.no_of_qualifiers_in_grp || 'List Line id : ' || j.list_line_id);
25269    engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
25270 
25271    END IF;
25272    IF (j.LIST_HEADER_ID <> l_list_header_id or j.LINE_INDEX <> l_line_index or j.LIST_LINE_ID <> l_list_line_id) THEN
25273 
25274     v_line_null_grp_count := 0;
25275 
25276     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header or list line or line index
25277     IF (l_other_grp_exists_flag = TRUE) THEN
25278      IF (l_other_grp_satisfied_flag = FALSE) THEN
25279       IF (l_null_unique_key IS NOT NULL) THEN
25280        l_line_del_ind := l_line_del_ind + 1;
25281        l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
25282       END IF;
25283      END IF;
25284     END IF;
25285     l_other_grp_exists_flag := FALSE;
25286     l_other_grp_satisfied_flag := FALSE;
25287    END IF;
25288 
25289    IF (j.QUALIFIER_GROUPING_NO = -1) THEN
25290     l_null_unique_key := j.unique_key;    --	6913520
25291     IF (j.NO_OF_QUALIFIERS_IN_GRP < j.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
25292      l_other_list_line_id:=null;  --	6913520
25293 
25294      OPEN chk_other_line_quals_exist_cur(j.list_line_id);
25295      FETCH chk_other_line_quals_exist_cur INTO l_other_list_line_id;
25296      CLOSE chk_other_line_quals_exist_cur;
25297 
25298      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25299      engine_debug('Other Groups Exist in this Line id : '||l_other_list_line_id);
25300 
25301      END IF;
25302      -- If there are no other groups , then it is a failure on pure null group,else it is not
25303      IF (l_other_list_line_id IS NULL) THEN
25304       l_other_grp_exists_flag := FALSE;
25305       l_null_unique_key := NULL;
25306       l_line_del_ind := l_line_del_ind + 1;
25307       l_line_del_tbl(l_line_del_ind) := j.unique_key;
25308       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25309       engine_debug('Deleted Line id : '||j.list_line_id||' Line Indx: '||j.line_index || ' Unique Key : ' || j.unique_key);
25310       END IF;
25311      ELSE
25312       l_other_grp_exists_flag := TRUE;
25313      END IF;
25314     ELSE
25315      l_line_level_quals_satisfied := TRUE;
25316      l_null_unique_key := j.unique_key;
25317     END IF;
25318 
25319      v_line_null_grp_count := j.NO_OF_QUALIFIERS_IN_GRP;
25320      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25321      engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
25322 
25323      END IF;
25324    ELSE
25325     -- 4043768/4261138, changed <> to < condition
25326     IF (j.NO_OF_QUALIFIERS_IN_GRP + v_line_null_grp_count < j.QUALIFIER_GROUP_CNT) THEN
25327      --l_other_grp_satisfied_flag := FALSE;
25328      l_line_del_ind := l_line_del_ind + 1;
25329      l_line_del_tbl(l_line_del_ind) := j.unique_key;
25330      --l_line_del_tbl(l_line_del_ind) := j.list_line_id;
25331      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25332      engine_debug('Deleted Line id : '||j.list_line_id||' Line Indx: '||j.line_index || ' Unique Key : ' || j.unique_key);
25333      END IF;
25334     ELSE
25335      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25336      engine_debug('Line Quals for : ' || j.list_header_id || ' ' || j.list_line_id );
25337      END IF;
25338      l_line_level_quals_satisfied := TRUE;
25339      l_other_grp_satisfied_flag := TRUE;
25340     END IF;
25341 
25342    END IF;
25343 
25344   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25345   engine_debug('#QG5');
25346 
25347   END IF;
25348    -- Check if header level quals are satisfied.If there is a hdr lvl qualifier in setup and it is not selected
25349    IF (l_line_level_quals_satisfied = TRUE) THEN
25350 
25351     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25352     engine_debug('Line Level Quals Satisfied , but checking whether header level qual satisfied');
25353 
25354     END IF;
25355     IF (j.HEADER_QUALS_EXIST_FLAG = G_YES) THEN
25356       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25357       engine_debug('Header level quals exist' );
25358       END IF;
25359       v_list_header_id := NULL;
25360 
25361       OPEN check_hdr_quals_cur_req_line(j.LIST_HEADER_ID,j.LINE_INDEX);
25362       FETCH check_hdr_quals_cur_req_line INTO v_list_header_id;
25363       CLOSE check_hdr_quals_cur_req_line;
25364 
25365       IF (v_list_header_id IS NULL) THEN
25366        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25367        engine_debug('Line Level Quals Not Satisfied , as Header Id is : ' || nvl(v_list_header_id,-99999));
25368        END IF;
25369        l_line_del_ind := l_line_del_ind + 1;
25370        l_line_del_tbl(l_line_del_ind) := j.unique_key;
25371        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25372        engine_debug('Deleted Line id : '||j.list_line_id||' Line Indx: '||j.line_index || ' Unique Key : ' || j.unique_key);
25373        END IF;
25374       ELSE
25375        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25376        engine_debug('Line Level Quals Satisfied , Header Id : ' || nvl(v_list_header_id,-99999));
25377        END IF;
25378       END IF;
25379 
25380     ELSE
25381       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25382       engine_debug('Header level quals do not exist' );
25383       END IF;
25384     END IF;
25385 
25386    END IF;
25387 
25388    l_line_level_quals_satisfied := FALSE;
25389    l_list_header_id := j.LIST_HEADER_ID;
25390    l_line_index := j.LINE_INDEX;
25391    l_list_line_id := j.LIST_LINE_ID;
25392 
25393   END LOOP;
25394 
25395     -- This code is to delete the -1 group if none of the other groups are satisfied on last list header or list line or line index
25396 
25397     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25398     engine_debug ('#1000');
25399     END IF;
25400     IF (l_other_grp_exists_flag = TRUE) THEN
25401         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25402         engine_debug ('#1001');
25403         END IF;
25404         IF (l_other_grp_satisfied_flag = FALSE) THEN
25405          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25406          engine_debug ('#1002');
25407          END IF;
25408          IF (l_null_unique_key IS NOT NULL) THEN
25409           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25410           engine_debug ('#1003');
25411           engine_debug ('Null Unique Key : ' || l_null_unique_key);
25412           END IF;
25413           l_line_del_ind := l_line_del_ind + 1;
25414           l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
25415          END IF;
25416         END IF;
25417     END IF;
25418 
25419 
25420   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25421   engine_debug('#QG6');
25422 
25423   END IF;
25424   IF (l_line_del_tbl.count > 0 ) THEN
25425    FOR m in 1 .. l_line_del_tbl.count LOOP
25426    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25427    engine_debug('Deleted Lines : ' || l_line_del_tbl(m));
25428    END IF;
25429    END LOOP;
25430   END IF;
25431 
25432   IF (l_line_del_tbl.count > 0 ) THEN
25433    FORALL i in l_line_del_tbl.FIRST..l_line_del_tbl.LAST
25434 /*
25435 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd4,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
25436 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd4,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
25437 */
25438     UPDATE QP_PREQ_QUAL_TMP --upd4
25439     SET   PRICING_STATUS_CODE = G_DELETED_GRP
25440     WHERE UNIQUE_KEY  = l_line_del_tbl(i)
25441     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
25442     AND   PRICING_PHASE_ID = p_pricing_phase_id;
25443   END IF;
25444 
25445   l_line_del_tbl.delete;
25446   l_line_del_ind:=0;
25447 
25448 END IF;
25449 
25450 EXCEPTION
25451  WHEN OTHERS THEN
25452   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25453   engine_debug(SQLERRM);
25454   END IF;
25455   x_status_code:= FND_API.G_RET_STS_ERROR;
25456   x_status_text:= 'In perform qualifier grouping '||SQLERRM;
25457 END Perform_Qualifier_Grouping;
25458 
25459 /*+----------------------------------------------------------
25460   |PROCEDURE SELECT_MODIFIERS
25461   +----------------------------------------------------------
25462 */
25463 PROCEDURE SELECT_MODIFIERS(p_pricing_phase_id     IN  NUMBER,
25464                            p_freeze_override_flag IN  VARCHAR2,
25465                            x_status_code          OUT NOCOPY VARCHAR2,
25466                            x_status_text          OUT NOCOPY VARCHAR2)
25467 AS
25468 /*
25469 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
25470 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
25471 
25472 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,LIST_HEADER_ID,1
25473 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,QUALIFICATION_IND,2
25474 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,PRICING_PHASE_ID,3
25475 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,LIST_LINE_ID,4
25476 
25477 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
25478 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
25479 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
25480 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
25481 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
25482 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
25483 
25484 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
25485 
25486 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
25487 */
25488 
25489 CURSOR l_prod_qual_cur (p_pricing_phase_id NUMBER, p_list_header_id NUMBER, p_list_line_id NUMBER, p_line_index NUMBER) IS
25490 -- Product and Qualifier Only. No pricing
25491 select /*+ ORDERED USE_NL(QPPROD QPLATPR QPL ) index(QPPROD QP_PRICING_ATTRIBUTES_N7) index(qplatpr qp_preq_line_attrs_tmp_n2) l_prod_qual_cur_mod */
25492        qpl.list_header_id,
25493        qpl.list_line_id,
25494        qpl.list_line_type_code,
25495        qplatpr.line_index,
25496        qplatpr.validated_flag,
25497        qplatpr.applied_flag,
25498        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
25499        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
25500        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
25501        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
25502        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
25503        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
25504        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
25505        qpprod.product_uom_code               PRODUCT_UOM_CODE,
25506        qpprod.excluder_flag,
25507        qpl.automatic_flag,
25508        qpl.modifier_level_code,
25509        qpl.primary_uom_flag,
25510        qpl.arithmetic_operator operand_calculation_code,
25511        qpl.operand             operand_value,
25512        qpl.net_amount_flag,  --IT net_amount 2720717
25513        qpl.pricing_group_sequence,
25514        qpl.pricing_phase_id,
25515        qpl.price_break_type_code,
25516        qpl.incompatibility_grp_code,
25517        qpl.price_by_formula_id,
25518        qpl.product_precedence,
25519        qpl.override_flag,
25520        qpl.benefit_qty,
25521        qpl.benefit_uom_code,
25522        qpl.service_duration, -- service project
25523        qpl.service_period, -- service project
25524        qpl.list_line_no,
25525        qpl.accrual_flag,
25526        qpl.accrual_conversion_rate,
25527        qpl.estim_accrual_rate,
25528        qpq.ask_for_flag,
25529        qpq.created_from_list_type,
25530        qpq.header_limit_exists,
25531        qpl.limit_exists_flag line_limit_exists,
25532        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,   --HQ is header level qualifier
25533        qpl.charge_type_code,
25534        qpl.charge_subtype_code,
25535        qpl.accum_context,           -- accum range break
25536        qpl.accum_attribute,         -- accum range break
25537        qpl.accum_attr_run_src_flag  -- accum range break
25538 from
25539        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
25540         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
25541         from qp_preq_qual_tmp qpqq
25542         where pricing_status_code = G_STATUS_UNCHANGED
25543         and pricing_phase_id = p_pricing_phase_id
25544         and search_ind = 1
25545         and list_line_id > 0 ) qpq,
25546        qp_pricing_attributes qpprod,
25547        qp_npreq_line_attrs_tmp qplatpr,
25548        qp_list_lines qpl,
25549        qp_npreq_lines_tmp qplines
25550 where
25551       qpprod.list_header_id = qpq.list_header_id
25552 and   qpprod.list_line_id = qpq.list_line_id
25553 and   qpl.list_line_id   = qpprod.list_line_id
25554 and   (qpl.modifier_level_code = qplines.line_type_code
25555        OR
25556        (qpl.modifier_level_code = G_LINE_GROUP and
25557         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
25558 and   TRUNC(qplines.pricing_effective_date) BETWEEN
25559          nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
25560            and nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
25561 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
25562 and   qpprod.pricing_phase_id = p_pricing_phase_id
25563 and   qpprod.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,
25564 						  QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
25565 and   qpprod.product_attribute_context = qplatpr.context
25566 and   qpprod.product_attribute = qplatpr.attribute
25567 and   qpprod.product_attr_value = qplatpr.value_from
25568 and   qpprod.excluder_flag = G_NO
25569 and   qplines.line_index = qplatpr.line_index
25570 and   qplatpr.line_index = qpq.line_index
25571 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
25572 --and   qpq.search_ind = 1
25573 and   qplatpr.attribute_type='PRODUCT'
25574 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25575 -- price book
25576 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
25577        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
25578                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
25579        or
25580        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
25581 union all
25582 select /*+ ORDERED USE_NL(QPLATPR QPPROD QPL) index(QPPROD QP_PRICING_ATTRIBUTES_N5) index(qplatpr qp_preq_line_attrs_tmp_n1) l_prod_qual_cur_mod */
25583        qpl.list_header_id,
25584        qpl.list_line_id,
25585        qpl.list_line_type_code,
25586        qplatpr.line_index,
25587        qplatpr.validated_flag,
25588        qplatpr.applied_flag,
25589        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
25590        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
25591        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
25592        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
25593        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
25594        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
25595        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
25596        qpprod.product_uom_code               PRODUCT_UOM_CODE,
25597        qpprod.excluder_flag,
25598        qpl.automatic_flag,
25599        qpl.modifier_level_code,
25600        qpl.primary_uom_flag,
25601        qpl.arithmetic_operator operand_calculation_code,
25602        qpl.operand             operand_value,
25603        qpl.net_amount_flag,  --IT net_amount 2720717
25604        qpl.pricing_group_sequence,
25605        qpl.pricing_phase_id,
25606        qpl.price_break_type_code,
25607        qpl.incompatibility_grp_code,
25608        qpl.price_by_formula_id,
25609        qpl.product_precedence,
25610        qpl.override_flag,
25611        qpl.benefit_qty,
25612        qpl.benefit_uom_code,
25613        qpl.service_duration, -- service project
25614        qpl.service_period, -- service project
25615        qpl.list_line_no,
25616        qpl.accrual_flag,
25617        qpl.accrual_conversion_rate,
25618        qpl.estim_accrual_rate,
25619        qpq.ask_for_flag,
25620        qpq.created_from_list_type,
25621        qpq.header_limit_exists,
25622        qpl.limit_exists_flag line_limit_exists,
25623        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,   --HQ is header level qualifier
25624        qpl.charge_type_code,
25625        qpl.charge_subtype_code,
25626        qpl.accum_context,           -- accum range break
25627        qpl.accum_attribute,         -- accum range break
25628        qpl.accum_attr_run_src_flag  -- accum range break
25629 from
25630        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
25631         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
25632         from qp_preq_qual_tmp qpqq
25633         where pricing_status_code = G_STATUS_UNCHANGED
25634         and pricing_phase_id = p_pricing_phase_id
25635         and search_ind = 1
25636         and list_line_id < 0 ) qpq,
25637        qp_npreq_line_attrs_tmp qplatpr,
25638        qp_pricing_attributes qpprod,
25639        qp_list_lines qpl,
25640        qp_npreq_lines_tmp qplines
25641 where
25642       qpprod.list_header_id = qpq.list_header_id
25643 and   qpl.list_line_id   = qpprod.list_line_id
25644 and   (qpl.modifier_level_code = qplines.line_type_code
25645        OR
25646        (qpl.modifier_level_code = G_LINE_GROUP and
25647         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
25648 and   TRUNC(qplines.pricing_effective_date) BETWEEN
25649          nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
25650            and nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
25651 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
25652 and   qpprod.pricing_phase_id = p_pricing_phase_id
25653 and   qpprod.QUALIFICATION_IND =  QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
25654 and   qpprod.product_attribute_context = qplatpr.context
25655 and   qpprod.product_attribute = qplatpr.attribute
25656 and   qpprod.product_attr_value = qplatpr.value_from
25657 and   qpprod.excluder_flag = G_NO
25658 and   qplines.line_index = qplatpr.line_index
25659 and   qplatpr.line_index = qpq.line_index
25660 and   qplatpr.attribute_type='PRODUCT'
25661 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25662 --and   qpq.pricing_status_code=G_STATUS_UNCHANGED
25663 --and   qpq.search_ind = 1
25664 -- price book
25665 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
25666        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
25667                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
25668        or
25669        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
25670 order by 4,2;
25671 
25672 /*
25673 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
25674 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
25675 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
25676 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
25677 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
25678 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
25679 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
25680 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
25681 
25682 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
25683 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
25684 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,LIST_HEADER_ID,3
25685 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,LIST_LINE_ID,4
25686 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,LINE_INDEX,5
25687 
25688 -- Used for qplatpr and qplatpc
25689 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
25690 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
25691 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
25692 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
25693 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
25694 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
25695 
25696 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_LIST_LINES_PK,LIST_LINE_ID,1
25697 
25698 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_lines_tmp_U1,LINE_INDEX,1
25699 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_lines_tmp_U1,LINE_TYPE_CODE,2
25700 
25701 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
25702 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
25703 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PREQ_QUAL_TMP_N5,LINE_INDEX,5
25704 
25705 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,LIST_HEADER_ID,1
25706 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,QUALIFICATION_IND,2
25707 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,PRICING_PHASE_ID,3
25708 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,LIST_LINE_ID,4
25709 
25710 -- Used for qplatpr and qplatpc
25711 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
25712 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
25713 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
25714 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
25715 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
25716 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
25717 
25718 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_LIST_LINES_PK,LIST_LINE_ID,1
25719 
25720 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,qp_npreq_lines_tmp_U1,LINE_INDEX,1
25721 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,qp_npreq_lines_tmp_U1,LINE_TYPE_CODE,2
25722 */
25723 CURSOR l_prod_qual_pric_cur(p_pricing_phase_id NUMBER, p_list_header_id NUMBER, p_list_line_id NUMBER,
25724 					   p_line_index NUMBER) IS
25725 --Product+Qualifiers+Pricing
25726 select /*+ ORDERED USE_NL(QPPROD QPLATPR QPLATPC QPL ) index(QPPROD QP_PRICING_ATTRIBUTES_N7) index(qplatpr qp_preq_line_attrs_tmp_N2) index(qplatpc qp_preq_line_attrs_tmp_N2) l_prod_qual_pric_cur_mod */
25727        qpl.list_header_id,
25728        qpl.list_line_id,
25729        qpl.list_line_type_code,
25730        qplatpr.line_index,
25731        qplatpr.validated_flag,
25732        qplatpr.applied_flag,
25733 --for product attrs
25734        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
25735        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
25736        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
25737        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
25738        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
25739        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
25740        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
25741        qpprod.product_uom_code               PRODUCT_UOM_CODE,
25742        qpprod.excluder_flag,
25743 --for pricing attrs
25744        qplatpc.attribute_level               PRICING_ATTRIBUTE_LEVEL,
25745        qplatpc.attribute_type                PRICING_ATTRIBUTE_TYPE,
25746        qplatpc.context                       PRICING_ATTRIBUTE_CONTEXT,
25747        qplatpc.attribute                     PRICING_ATTRIBUTE,
25748        qplatpc.value_from                    PRICING_ATTR_VALUE,
25749        qpprod.pricing_attr_value_from        PRICING_SETUP_VALUE_FROM,
25750        qpprod.pricing_attr_value_to          PRICING_SETUP_VALUE_TO,
25751        qpprod.comparison_operator_code       PRICING_COMPARISON_OPERATOR,
25752        qpprod.pricing_attribute_datatype     PRICING_DATATYPE,
25753        qpl.automatic_flag,
25754        qpl.modifier_level_code,
25755        qpl.primary_uom_flag,
25756        qpl.arithmetic_operator operand_calculation_code,
25757        qpl.operand             operand_value,
25758        qpl.net_amount_flag,  --IT net_amount 2720717
25759        qpl.pricing_group_sequence,
25760        qpl.pricing_phase_id,
25761        qpl.price_break_type_code,
25762        qpl.incompatibility_grp_code,
25763        qpl.price_by_formula_id,
25764        qpl.product_precedence,
25765        qpl.override_flag,
25766        qpl.benefit_qty,
25767        qpl.benefit_uom_code,
25768        qpl.service_duration, -- service project
25769        qpl.service_period, -- service project
25770        qpl.list_line_no,
25771        qpl.accrual_flag,
25772        qpl.accrual_conversion_rate,
25773        qpl.estim_accrual_rate,
25774        qpq.ask_for_flag,
25775        qpq.created_from_list_type,
25776        qpq.header_limit_exists,
25777        qpl.limit_exists_flag line_limit_exists,
25778        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
25779        qpl.charge_type_code,
25780        qpl.charge_subtype_code,
25781        qpl.accum_context,           -- accum range break
25782        qpl.accum_attribute,         -- accum range break
25783        qpl.accum_attr_run_src_flag  -- accum range break
25784 from
25785        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
25786         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
25787         from qp_preq_qual_tmp qpqq
25788         where pricing_status_code = G_STATUS_UNCHANGED
25789         and pricing_phase_id = p_pricing_phase_id
25790         and search_ind = 1
25791         and list_line_id > 0 ) qpq,
25792        QP_PRICING_ATTRIBUTES qpprod ,
25793        qp_npreq_line_attrs_tmp qplatpr,
25794        qp_npreq_line_attrs_tmp qplatpc,
25795        qp_list_lines qpl ,
25796        qp_npreq_lines_tmp qplines
25797 where
25798       qpprod.list_header_id = qpq.list_header_id
25799 and   qpprod.list_line_id = qpq.list_line_id
25800 and   qpl.list_line_id   = qpprod.list_line_id
25801 and   (qpl.modifier_level_code = qplines.line_type_code
25802        OR
25803        (qpl.modifier_level_code = G_LINE_GROUP and
25804         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
25805 and   TRUNC(qplines.pricing_effective_date) BETWEEN
25806          nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
25807       AND nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
25808 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
25809 and   qpl.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,
25810 						  QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
25811 and qpl.list_line_type_code <> 'PLL'
25812 and   qpprod.pricing_phase_id = p_pricing_phase_id
25813 and   qpprod.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,
25814 						  QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
25815 and    qpprod.product_attribute_context = qplatpr.context
25816 and    qpprod.product_attribute = qplatpr.attribute
25817 and    qpprod.product_attr_value = qplatpr.value_from
25818 and 	qpprod.excluder_flag = G_NO
25819 and    qpprod.pricing_attribute_context = qplatpc.context
25820 and    qpprod.pricing_attribute = qplatpc.attribute
25821 and    (qpprod.pricing_attr_value_from = qplatpc.value_from
25822         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
25823         --or qpl.price_break_type_code = G_RECURRING_BREAK)
25824 and   qpl.pricing_phase_id = p_pricing_phase_id
25825 and qplines.line_index = qpq.line_index
25826 and   qplatpr.line_index = qpq.line_index
25827 and   qplatpc.line_index = qplatpr.line_index
25828 and qplatpr.attribute_type='PRODUCT'
25829 and qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25830 and qplatpc.attribute_type = 'PRICING'
25831 and qplatpc.pricing_status_code = G_STATUS_UNCHANGED
25832 --and qpq.pricing_status_code = G_STATUS_UNCHANGED
25833 --and   qpq.search_ind = 1
25834 -- price book
25835 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
25836        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
25837                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
25838        or
25839        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
25840 union all
25841 select /*+ ORDERED USE_NL(QPLATPR QPPROD QPLATPC QPL ) index(QPPROD QP_PRICING_ATTRIBUTES_N5) index(qplatpr qp_preq_line_attrs_tmp_N1) index(qplatpc qp_preq_line_attrs_tmp_N2) l_prod_qual_pric_cur_mod */
25842        qpl.list_header_id,
25843        qpl.list_line_id,
25844        qpl.list_line_type_code,
25845        qplatpr.line_index,
25846        qplatpr.validated_flag,
25847        qplatpr.applied_flag,
25848 --for product attrs
25849        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
25850        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
25851        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
25852        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
25853        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
25854        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
25855        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
25856        qpprod.product_uom_code               PRODUCT_UOM_CODE,
25857        qpprod.excluder_flag,
25858 --for pricing attrs
25859        qplatpc.attribute_level               PRICING_ATTRIBUTE_LEVEL,
25860        qplatpc.attribute_type                PRICING_ATTRIBUTE_TYPE,
25861        qplatpc.context                       PRICING_ATTRIBUTE_CONTEXT,
25862        qplatpc.attribute                     PRICING_ATTRIBUTE,
25863        qplatpc.value_from                    PRICING_ATTR_VALUE,
25864        qpprod.pricing_attr_value_from        PRICING_SETUP_VALUE_FROM,
25865        qpprod.pricing_attr_value_to          PRICING_SETUP_VALUE_TO,
25866        qpprod.comparison_operator_code       PRICING_COMPARISON_OPERATOR,
25867        qpprod.pricing_attribute_datatype     PRICING_DATATYPE,
25868        qpl.automatic_flag,
25869        qpl.modifier_level_code,
25870        qpl.primary_uom_flag,
25871        qpl.arithmetic_operator operand_calculation_code,
25872        qpl.operand             operand_value,
25873        qpl.net_amount_flag,  --IT net_amount 2720717
25874        qpl.pricing_group_sequence,
25875        qpl.pricing_phase_id,
25876        qpl.price_break_type_code,
25877        qpl.incompatibility_grp_code,
25878        qpl.price_by_formula_id,
25879        qpl.product_precedence,
25880        qpl.override_flag,
25881        qpl.benefit_qty,
25882        qpl.benefit_uom_code,
25883        qpl.service_duration, -- service project
25884        qpl.service_period, -- service project
25885        qpl.list_line_no,
25886        qpl.accrual_flag,
25887        qpl.accrual_conversion_rate,
25888        qpl.estim_accrual_rate,
25889        qpq.ask_for_flag,
25890        qpq.created_from_list_type,
25891        qpq.header_limit_exists,
25892        qpl.limit_exists_flag line_limit_exists,
25893        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
25894        qpl.charge_type_code,
25895        qpl.charge_subtype_code,
25896        qpl.accum_context,           -- accum range break
25897        qpl.accum_attribute,         -- accum range break
25898        qpl.accum_attr_run_src_flag  -- accum range break
25899 from
25900        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
25901         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
25902         from qp_preq_qual_tmp qpqq
25903         where pricing_status_code = G_STATUS_UNCHANGED
25904         and pricing_phase_id = p_pricing_phase_id
25905         and search_ind = 1
25906         and list_line_id < 0 ) qpq,
25907        qp_npreq_line_attrs_tmp qplatpr,
25908        QP_PRICING_ATTRIBUTES qpprod ,
25909        qp_npreq_line_attrs_tmp qplatpc,
25910        qp_list_lines qpl ,
25911        qp_npreq_lines_tmp qplines
25912 where
25913        qpprod.list_header_id = qpq.list_header_id
25914 and    qpl.list_line_id   = qpprod.list_line_id
25915 and   (qpl.modifier_level_code = qplines.line_type_code
25916        OR
25917        (qpl.modifier_level_code = G_LINE_GROUP and
25918         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
25919 and   TRUNC(qplines.pricing_effective_date) BETWEEN
25920          nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
25921       AND nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
25922 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
25923 and   qpl.QUALIFICATION_IND =  QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
25924 and   qpl.list_line_type_code <> 'PLL'
25925 and   qpprod.pricing_phase_id = p_pricing_phase_id
25926 and   qpprod.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
25927 and   qpprod.product_attribute_context = qplatpr.context
25928 and   qpprod.product_attribute = qplatpr.attribute
25929 and   qpprod.product_attr_value = qplatpr.value_from
25930 and   qpprod.excluder_flag = G_NO
25931 and   qpprod.pricing_attribute_context = qplatpc.context
25932 and   qpprod.pricing_attribute = qplatpc.attribute
25933 and    (qpprod.pricing_attr_value_from = qplatpc.value_from
25934         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
25935 and   qpl.pricing_phase_id = p_pricing_phase_id
25936 and   qplines.line_index = qpq.line_index
25937 and   qplatpr.line_index = qpq.line_index
25938 and   qplatpc.line_index = qplatpr.line_index
25939 and   qplatpr.attribute_type='PRODUCT'
25940 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25941 and   qplatpc.attribute_type = 'PRICING'
25942 and   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
25943 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
25944 --and   qpq.search_ind = 1
25945 -- price book
25946 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
25947        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
25948                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
25949        or
25950        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
25951 order by 4,2;
25952 
25953 /*
25954 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
25955 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
25956 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,list_header_id,3
25957 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,list_line_id,4
25958 
25959 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_LIST_LINES_N5,PRICING_PHASE_ID,1
25960 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_LIST_LINES_N5,QUALIFICATION_IND,2
25961 */
25962 CURSOR l_INNER_QUAL_CUR(p_pricing_phase_id NUMBER,
25963 				    p_list_header_id NUMBER,
25964 				    p_list_line_id NUMBER,
25965 				    p_line_index NUMBER,
25966 				    p_pricing_effective_date DATE,
25967 				    p_start_date_active_first DATE,
25968 				    p_start_date_active_second DATE,
25969 				    p_line_type_code VARCHAR2) IS
25970 -- Qualifier Only
25971 -- 5092968, qp_list_lines_n6 replaced with qp_list_lines_pk
25972 select /*+ ORDERED INDEX(qpl,QP_LIST_LINES_PK) l_inner_qual_cur */
25973        qpl.list_header_id,
25974        qpl.list_line_id,
25975        qpl.list_line_type_code,
25976        qpq.line_index,
25977        qpl.automatic_flag,
25978        qpl.modifier_level_code,
25979        qpl.primary_uom_flag,
25980        qpl.arithmetic_operator operand_calculation_code,
25981        qpl.operand             operand_value,
25982        qpl.net_amount_flag,  --IT net_amount 2720717
25983        qpl.pricing_group_sequence,
25984        qpl.pricing_phase_id,
25985        qpl.price_break_type_code,
25986        qpl.incompatibility_grp_code,
25987        qpl.price_by_formula_id,
25988        qpl.product_precedence,
25989        qpl.override_flag,
25990        qpl.benefit_qty,
25991        qpl.benefit_uom_code,
25992        qpl.service_duration, -- service project
25993        qpl.service_period, -- service project
25994        qpl.list_line_no,
25995        qpl.accrual_flag,
25996        qpl.accrual_conversion_rate,
25997        qpl.estim_accrual_rate,
25998        qpq.ask_for_flag,
25999        qpq.created_from_list_type,
26000        qpq.header_limit_exists,
26001        qpl.limit_exists_flag line_limit_exists,
26002        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
26003        qpl.charge_type_code,
26004        qpl.charge_subtype_code,
26005        qpl.accum_context,           -- accum range break
26006        qpl.accum_attribute,         -- accum range break
26007        qpl.accum_attr_run_src_flag  -- accum range break
26008 from
26009        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
26010         distinct line_index, line_type_code,pricing_effective_date,list_header_id, list_line_id,
26011                  ask_for_flag, created_from_list_type,header_limit_exists
26012         from qp_preq_qual_tmp qpqq
26013         where pricing_status_code = G_STATUS_UNCHANGED
26014         and pricing_phase_id = p_pricing_phase_id
26015         and search_ind = 1
26016         and list_line_id > 0 ) qpq,
26017        qp_list_lines qpl
26018 where
26019       qpl.list_header_id = qpq.list_header_id
26020 and   qpl.list_line_id = qpq.list_line_id
26021 and   (qpl.modifier_level_code = qpq.line_type_code
26022        OR
26023        (qpl.modifier_level_code = G_LINE_GROUP and
26024         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
26025 and   qpq.pricing_effective_date BETWEEN
26026          nvl(TRUNC(qpl.start_date_active), qpq.pricing_effective_date)
26027       AND nvl(TRUNC(qpl.end_date_active),qpq.pricing_effective_date)
26028 and   qpl.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_HDR_LINE_QUAL_IND)
26029 and   qpl.list_line_type_code <>'PLL'
26030 and   qpl.pricing_phase_id       = p_pricing_phase_id
26031 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
26032 --and   qpq.search_ind = 1
26033 -- price book
26034 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
26035        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
26036                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
26037        or
26038        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
26039 union all
26040 select /*+ ORDERED INDEX(qpl,QP_LIST_LINES_N5) l_inner_qual_cur */
26041        qpl.list_header_id,
26042        qpl.list_line_id,
26043        qpl.list_line_type_code,
26044        qpq.line_index,
26045        qpl.automatic_flag,
26046        qpl.modifier_level_code,
26047        qpl.primary_uom_flag,
26048        qpl.arithmetic_operator operand_calculation_code,
26049        qpl.operand             operand_value,
26050        qpl.net_amount_flag,  --IT net_amount 2720717
26051        qpl.pricing_group_sequence,
26052        qpl.pricing_phase_id,
26053        qpl.price_break_type_code,
26054        qpl.incompatibility_grp_code,
26055        qpl.price_by_formula_id,
26056        qpl.product_precedence,
26057        qpl.override_flag,
26058        qpl.benefit_qty,
26059        qpl.benefit_uom_code,
26060        qpl.service_duration, -- service project
26061        qpl.service_period, -- service project
26062        qpl.list_line_no,
26063        qpl.accrual_flag,
26064        qpl.accrual_conversion_rate,
26065        qpl.estim_accrual_rate,
26066        qpq.ask_for_flag,
26067        qpq.created_from_list_type,
26068        qpq.header_limit_exists,
26069        qpl.limit_exists_flag line_limit_exists,
26070        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
26071        qpl.charge_type_code,
26072        qpl.charge_subtype_code,
26073        qpl.accum_context,           -- accum range break
26074        qpl.accum_attribute,         -- accum range break
26075        qpl.accum_attr_run_src_flag  -- accum range break
26076 from
26077        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
26078         distinct line_index, line_type_code,pricing_effective_date,list_header_id, list_line_id,
26079                  ask_for_flag, created_from_list_type,header_limit_exists
26080         from qp_preq_qual_tmp qpqq
26081         where pricing_status_code = G_STATUS_UNCHANGED
26082         and pricing_phase_id = p_pricing_phase_id
26083         and search_ind = 1
26084         and list_line_id < 0 ) qpq,
26085         qp_list_lines qpl
26086 where
26087       qpl.list_header_id = qpq.list_header_id
26088 and   (qpl.modifier_level_code = qpq.line_type_code
26089        OR
26090        (qpl.modifier_level_code = G_LINE_GROUP and
26091         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
26092 and   qpq.pricing_effective_date BETWEEN
26093          nvl(TRUNC(qpl.start_date_active), qpq.pricing_effective_date)
26094       AND nvl(TRUNC(qpl.end_date_active),qpq.pricing_effective_date)
26095 and   qpl.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_HDR_QUAL_IND
26096 and   qpl.list_line_type_code <>'PLL'
26097 and   qpl.pricing_phase_id       = p_pricing_phase_id
26098 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
26099 --and   qpq.search_ind = 1
26100 -- price book
26101 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
26102        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
26103                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
26104        or
26105        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
26106 order by 4,2;
26107 
26108 
26109 /*
26110 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
26111 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
26112 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
26113 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
26114 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
26115 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
26116 
26117 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
26118 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
26119 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
26120 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
26121 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
26122 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
26123 
26124 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
26125 
26126 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
26127 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_lines_tmp_N1,LINE_TYPE_CODE,2
26128 
26129 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
26130 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
26131 */
26132 CURSOR l_PROD_CUR (p_pricing_phase_id NUMBER) IS
26133 -- Only Product attributes
26134 select /*+ NO_EXPAND ORDERED USE_NL(QPLATPR QPPROD QPH QPL QPRS) INDEX(QPLINES)  INDEX(QPLATPR) index(QPPROD QP_PRICING_ATTRIBUTES_N5 ) index(qph QP_LIST_HEADERS_B_N7)  */  --5658579
26135 /* ORDERED USE_NL(QPLATPR QPPROD QPH QPL QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) index(QPPROD QP_PRICING_ATTRIBUTES_N5)  index(qph qp_list_headers_b_n7) l_prod_cur_mod */
26136        qpl.list_header_id,
26137        qpl.list_line_id,
26138        qpl.list_line_type_code,
26139        qplatpr.line_index,
26140        qplatpr.validated_flag,
26141        qplatpr.applied_flag,
26142 --for product
26143        qplatpr.attribute_level PRODUCT_ATTRIBUTE_LEVEL,
26144        qplatpr.attribute_type  PRODUCT_ATTRIBUTE_TYPE,
26145        qplatpr.context         PRODUCT_ATTRIBUTE_CONTEXT,
26146        qplatpr.attribute       PRODUCT_ATTRIBUTE,
26147        qplatpr.value_from      PRODUCT_ATTR_VALUE,
26148        qpprod.product_attr_value PRODUCT_SETUP_VALUE,
26149        qplatpr.pricing_attr_flag PRODUCT_PRICING_ATTR_FLAG,
26150        qpprod.product_uom_code  PRODUCT_UOM_CODE,
26151        qpprod.excluder_flag,
26152        NULL              QUALIFIER_GROUPING_NO,
26153        NULL              QUALIFIER_PRECEDENCE,
26154        qpl.automatic_flag,
26155        qpl.modifier_level_code,
26156        qpl.primary_uom_flag,
26157        qpl.arithmetic_operator OPERAND_CALCULATION_CODE,
26158        qpl.operand             OPERAND_VALUE,
26159        qpl.net_amount_flag,  --IT net_amount 2720717
26160        qpl.pricing_group_sequence,
26161        qph.ask_for_flag,
26162        qph.list_type_code CREATED_FROM_LIST_TYPE,
26163        qpl.pricing_phase_id,
26164        qpl.price_break_type_code,
26165        qpl.incompatibility_grp_code,
26166        qpl.price_by_formula_id,
26167        qpl.product_precedence,
26168        qpl.override_flag,
26169        qpl.benefit_qty,
26170        qpl.benefit_uom_code,
26171        qpl.service_duration, -- service project
26172        qpl.service_period, -- service project
26173        qpl.list_line_no,
26174        qpl.accrual_flag,
26175        qpl.accrual_conversion_rate,
26176        qpl.estim_accrual_rate,
26177        qph.limit_exists_flag header_limit_exists,
26178        qpl.limit_exists_flag line_limit_exists,
26179        'NQ' QUALIFIER_TYPE,  --NQ IS NO QUALIFIER
26180        qpl.charge_type_code,
26181        qpl.charge_subtype_code,
26182        qpl.accum_context,           -- accum range break
26183        qpl.accum_attribute,         -- accum range break
26184        qpl.accum_attr_run_src_flag  -- accum range break
26185 FROM
26186 	qp_npreq_lines_tmp QPLINES,
26187 	qp_npreq_line_attrs_tmp qplatpr,
26188 	QP_PRICING_ATTRIBUTES QPPROD ,
26189 	QP_LIST_HEADERS_B  QPH ,
26190 	QP_LIST_LINES QPL ,
26191 	--QP_PRICE_REQ_SOURCES QPRS
26192 	QP_PRICE_REQ_SOURCES_V QPRS /* yangli */
26193 WHERE
26194    (qplines.price_flag = G_YES
26195        OR
26196        (qplines.price_flag = G_PHASE
26197         AND
26198         p_freeze_override_flag = G_YES))
26199 AND 	QPH.LIST_HEADER_ID = QPPROD.LIST_HEADER_ID
26200 --added for moac -- commented references to security profile
26201 --security will be built into qp_list_headers_b
26202 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26203 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26204 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26205 and   ((qph.currency_code is not null and qph.currency_code = qplines.currency_code)
26206        or
26207        qph.currency_code is null) -- optional currency
26208 --AND   qph.currency_code IN (qplines.currency_code , G_ANY_CURRENCY_CODE) --shu, allow currency_code being ANY for modifiers
26209 and   (qplines.unit_price is not null
26210         or
26211        qplines.usage_pricing_type = G_AUTHORING_TYPE
26212 	or
26213        qplines.line_type_code = G_ORDER_LEVEL)
26214 and   (qpl.modifier_level_code = qplines.line_type_code
26215        OR
26216        (qpl.modifier_level_code = G_LINE_GROUP and
26217         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
26218 and   qph.active_flag = G_YES
26219 AND   ((qph.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
26220                                              FROM qp_npreq_line_attrs_tmp la
26221                                              WHERE attribute_type = 'QUALIFIER'
26222                                              AND pricing_status_code = G_STATUS_UNCHANGED
26223                                              AND validated_flag = G_NO
26224                                              AND list_header_id = qph.list_header_id
26225                                              AND line_index = qplines.line_index))
26226         OR qph.ask_for_flag = G_NO)
26227 AND 	QPL.LIST_LINE_ID = QPPROD.LIST_LINE_ID
26228 and  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) BETWEEN
26229        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) AND
26230        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
26231 and   nvl(qplines.start_date_active_first,TRUNC(SYSDATE)) BETWEEN
26232        nvl(qph.start_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
26233       AND
26234        nvl(qph.end_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
26235 and   nvl(qplines.start_date_active_second,TRUNC(SYSDATE)) BETWEEN
26236        nvl(qph.start_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
26237       AND
26238        nvl(qph.end_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
26239 and   nvl(qplines.active_date_first_type,'X') =
26240                 nvl(qph.active_date_first_type,nvl(qplines.active_date_first_type,'X'))
26241 and   nvl(qplines.active_date_second_type,'X') =
26242                 nvl(qph.active_date_second_type,nvl(qplines.active_date_second_type,'X'))
26243 and  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) BETWEEN                           --bug7307625
26244        nvl(qpl.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) AND
26245        nvl(qpl.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
26246 /*and   qplines.pricing_effective_date BETWEEN
26247          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
26248       AND nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)*/
26249 and  qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
26250 and  qpprod.pricing_phase_id = p_pricing_phase_id
26251 and  qpprod.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
26252 and 	qpprod.product_attribute_context = qplatpr.context
26253 and 	qpprod.product_attribute = qplatpr.attribute
26254 and   qpprod.product_attr_value = qplatpr.value_from
26255 and 	qpprod.excluder_flag = G_NO
26256 and   qph.source_system_code = qprs.source_system_code
26257 and   qplines.request_type_code   = qprs.request_type_code
26258 AND   QPLATPR.LINE_INDEX = QPLINES.LINE_INDEX
26259 and   qplatpr.attribute_type='PRODUCT'
26260 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26261 -- price book
26262 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
26263        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
26264                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
26265        or
26266        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
26267 order by 4,2;
26268 
26269 /*
26270 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
26271 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
26272 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
26273 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
26274 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
26275 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
26276 
26277 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
26278 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
26279 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
26280 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
26281 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
26282 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
26283 
26284 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
26285 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
26286 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
26287 
26288 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
26289 
26290 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
26291 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_lines_tmp_N1,LINE_TYPE_CODE,2
26292 
26293 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
26294 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
26295 */
26296 
26297 CURSOR l_PROD_PRIC_CUR (p_pricing_phase_id NUMBER) IS
26298 --PRODUCT and PRICING attributes
26299 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPLATPC QPH QPL QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) index(QPPROD QP_PRICING_ATTRIBUTES_N5) index(qplatpc qp_preq_line_attrs_tmp_N2) index(qph qp_list_headers_b_n7) l_prod_pric_cur_mod */
26300        qpl.list_header_id,
26301        qpl.list_line_id,
26302        qpl.list_line_type_code,
26303        qplatpr.line_index,
26304        qplatpr.validated_flag,
26305        qplatpr.applied_flag,
26306 --FOR PRODUCT
26307        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
26308        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
26309        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
26310        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
26311        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
26312        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
26313        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
26314        qpprod.product_uom_code               PRODUCT_UOM_CODE,
26315        qpprod.excluder_flag,
26316 --FOR PRICING
26317        qplatpc.attribute_level               PRICING_ATTRIBUTE_LEVEL,
26318        qplatpc.attribute_type                PRICING_ATTRIBUTE_TYPE,
26319        qplatpc.context                       PRICING_ATTRIBUTE_CONTEXT,
26320        qplatpc.attribute                     PRICING_ATTRIBUTE,
26321        qplatpc.value_from                    PRICING_ATTR_VALUE,
26322        qpprod.pricing_attr_value_from        PRICING_SETUP_VALUE_FROM,
26323        qpprod.pricing_attr_value_to          PRICING_SETUP_VALUE_TO,
26324        qpprod.comparison_operator_code       PRICING_COMPARISON_OPERATOR,
26325        qpprod.pricing_attribute_datatype     PRICING_DATATYPE,
26326        NULL              qualifier_grouping_no,
26327        NULL              qualifier_precedence,
26328        qpl.automatic_flag,
26329        qpl.modifier_level_code,
26330        qpl.primary_uom_flag,
26331        qpl.arithmetic_operator OPERAND_CALCULATION_CODE,
26332        qpl.operand             OPERAND_VALUE,
26333        qpl.net_amount_flag,  --IT net_amount 2720717
26334        qpl.pricing_group_sequence,
26335        qph.ask_for_flag,
26336        qph.list_type_code      CREATED_FROM_LIST_TYPE,
26337        qpl.pricing_phase_id,
26338        qpl.price_break_type_code,
26339        qpl.incompatibility_grp_code,
26340        qpl.price_by_formula_id,
26341        qpl.product_precedence,
26342        qpl.override_flag,
26343        qpl.benefit_qty,
26344        qpl.benefit_uom_code,
26345        qpl.service_duration, -- service project
26346        qpl.service_period, -- service project
26347        qpl.list_line_no,
26348        qpl.accrual_flag,
26349        qpl.accrual_conversion_rate,
26350        qpl.estim_accrual_rate,
26351        qph.limit_exists_flag header_limit_exists,
26352        qpl.limit_exists_flag line_limit_exists,
26353        'NQ'                     QUALIFIER_TYPE,
26354        qpl.charge_type_code,
26355        qpl.charge_subtype_code,
26356        qpl.accum_context,           -- accum range break
26357        qpl.accum_attribute,         -- accum range break
26358        qpl.accum_attr_run_src_flag  -- accum range break
26359 FROM
26360        qp_npreq_lines_tmp QPLINES,
26361        qp_npreq_line_attrs_tmp qplatpr,
26362        QP_PRICING_ATTRIBUTES QPPROD ,
26363        qp_npreq_line_attrs_tmp qplatpc,
26364        QP_LIST_HEADERS_B  QPH  ,
26365        QP_LIST_LINES QPL ,
26366        --QP_PRICE_REQ_SOURCES qprs
26367        QP_PRICE_REQ_SOURCES_V qprs /* yangli */
26368 WHERE
26369    (qplines.price_flag = G_YES
26370        OR
26371       (qplines.price_flag = G_PHASE
26372        AND
26373         p_freeze_override_flag = G_YES))
26374 and   ((qph.currency_code is not null and qph.currency_code = qplines.currency_code)
26375        OR
26376        qph.currency_code is null) -- optional currency
26377 --AND   qph.currency_code IN (qplines.currency_code , G_ANY_CURRENCY_CODE) --shu, allow currency_code being ANY for modifiers
26378 and   (qplines.unit_price is not null
26379         or
26380        qplines.usage_pricing_type = G_AUTHORING_TYPE
26381 	or
26382        qplines.line_type_code = G_ORDER_LEVEL)
26383 and   (qpl.modifier_level_code = qplines.line_type_code
26384        OR
26385        (qpl.modifier_level_code = G_LINE_GROUP and
26386         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
26387 and  qph.active_flag = G_YES
26388 AND   ((qph.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
26389                                              FROM qp_npreq_line_attrs_tmp la
26390                                              WHERE attribute_type = 'QUALIFIER'
26391                                              AND pricing_status_code = G_STATUS_UNCHANGED
26392                                              AND validated_flag = G_NO
26393                                              AND list_header_id = qph.list_header_id
26394                                              AND line_index = qplines.line_index))
26395         OR qph.ask_for_flag = G_NO)
26396 AND 	QPH.LIST_HEADER_ID = QPPROD.LIST_HEADER_ID
26397 --added for moac -- commented references to security profile
26398 --security will be built into qp_list_headers_b
26399 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26400 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26401 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26402 AND 	QPL.LIST_LINE_ID = QPPROD.LIST_LINE_ID
26403 AND  QPPROD.PRICING_PHASE_ID = P_PRICING_PHASE_ID
26404 and  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) BETWEEN
26405        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) AND
26406        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
26407 and   nvl(qplines.start_date_active_first,TRUNC(SYSDATE)) BETWEEN
26408        nvl(qph.start_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
26409       AND
26410        nvl(qph.end_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
26411 and   nvl(qplines.start_date_active_second,TRUNC(SYSDATE)) BETWEEN
26412        nvl(qph.start_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
26413       AND
26414        nvl(qph.end_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
26415 and   nvl(qplines.active_date_first_type,'X') =
26416                 nvl(qph.active_date_first_type,nvl(qplines.active_date_first_type,'X'))
26417 and   nvl(qplines.active_date_second_type,'X') =
26418                 nvl(qph.active_date_second_type,nvl(qplines.active_date_second_type,'X'))
26419 and   TRUNC(qplines.pricing_effective_date) BETWEEN
26420          nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
26421       AND nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
26422 and  qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
26423 and  qpprod.pricing_phase_id = p_pricing_phase_id
26424 and  qpprod.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
26425 and 	qpprod.product_attribute_context = qplatpr.context
26426 and 	qpprod.product_attribute = qplatpr.attribute
26427 and 	qpprod.product_attr_value = qplatpr.value_from
26428 and 	qpprod.pricing_attribute_context = qplatpc.context
26429 and 	qpprod.pricing_attribute = qplatpc.attribute
26430 and 	(qpprod.pricing_attr_value_from = qplatpc.value_from
26431          or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
26432          --or qpl.price_break_type_code = G_RECURRING_BREAK)
26433 and  qpprod.excluder_flag = G_NO
26434 and  qplatpc.line_index = qplatpr.line_index
26435 and  qplatpr.line_index = qplines.line_index
26436 and  qph.source_system_code = qprs.source_system_code
26437 and  qplines.request_type_code   = qprs.request_type_code
26438 and 	qplatpc.pricing_attr_flag = G_YES
26439 and  qplatpr.attribute_type='PRODUCT'
26440 and  qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26441 and  qplatpc.attribute_type = 'PRICING'
26442 and  qplatpc.pricing_status_code = G_STATUS_UNCHANGED
26443 -- price book
26444 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
26445        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
26446                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
26447        or
26448        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
26449 order by 4,2;
26450 
26451 /*
26452 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_LINES_N5,PRICING_PHASE_ID,1
26453 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_LINES_N5,QUALIFICATION_IND,2
26454 
26455 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
26456 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_HEADERS_B_N2,ACTIVE_FLAG,2
26457 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_HEADERS_B_N2,CURRENCY_CODE,3
26458 
26459 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
26460 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
26461 */
26462 cursor l_CUR (p_pricing_phase_id NUMBER) IS
26463 -- NO PRODUCTS AND NO QUALIFIERS
26464 SELECT /*+ NO_EXPAND ORDERED USE_NL(QPL QPH QPRS) index(QPL QP_LIST_LINES_N5) index(qph qp_list_headers_b_n7) l_cur_mod */
26465        qpl.list_header_id,
26466        qpl.list_line_id,
26467        qpl.list_line_type_code,
26468        qplines.line_index,
26469        qpl.automatic_flag,
26470        qpl.modifier_level_code,
26471        qpl.primary_uom_flag,
26472        qpl.arithmetic_operator operand_calculation_code,
26473        qpl.operand             operand_value,
26474        qpl.net_amount_flag,  --IT net_amount 2720717
26475        qpl.pricing_group_sequence,
26476        qph.ask_for_flag,
26477        qph.list_type_code created_from_list_type,
26478        qpl.pricing_phase_id,
26479        qpl.price_break_type_code,
26480        qpl.incompatibility_grp_code,
26481        qpl.price_by_formula_id,
26482        qpl.product_precedence,
26483        qpl.override_flag,
26484        qpl.benefit_qty,
26485        qpl.benefit_uom_code,
26486        qpl.service_duration, -- service project
26487        qpl.service_period, -- service project
26488        qpl.list_line_no,
26489        qpl.accrual_flag,
26490        qpl.accrual_conversion_rate,
26491        qpl.estim_accrual_rate,
26492        qph.limit_exists_flag header_limit_exists,
26493        qpl.limit_exists_flag line_limit_exists,
26494        qpl.charge_type_code,
26495        qpl.charge_subtype_code,
26496        qpl.accum_context,           -- accum range break
26497        qpl.accum_attribute,         -- accum range break
26498        qpl.accum_attr_run_src_flag  -- accum range break
26499 from
26500        qp_npreq_lines_tmp qplines,
26501        qp_list_lines qpl,
26502        qp_list_headers_b qph,
26503        --qp_price_req_sources qprs
26504        qp_price_req_sources_v qprs /* yangli */
26505 where qph.list_header_id = qpl.list_header_id
26506 --added for moac -- commented references to security profile
26507 --security will be built into qp_list_headers_b
26508 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26509 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26510 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26511 and   qph.active_flag=G_YES
26512 AND   ((qph.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
26513                                              FROM qp_npreq_line_attrs_tmp la
26514                                              WHERE attribute_type = 'QUALIFIER'
26515                                              AND pricing_status_code = G_STATUS_UNCHANGED
26516                                              AND validated_flag = G_NO
26517                                              AND list_header_id = qph.list_header_id
26518                                              AND line_index = qplines.line_index))
26519         OR qph.ask_for_flag = G_NO)
26520 and   qpl.pricing_phase_id=p_pricing_phase_id
26521 and   qpl.QUALIFICATION_IND = QP_PREQ_GRP.G_BLIND_DISCOUNT_IND
26522 and   (qplines.price_flag = G_YES
26523        OR
26524        (qplines.price_flag = G_PHASE
26525         AND
26526         p_freeze_override_flag = G_YES))
26527 and   ((qph.currency_code is not null and qph.currency_code = qplines.currency_code)
26528        OR
26529        qph.currency_code is null) -- optional currency
26530 --  AND   qph.currency_code IN (qplines.currency_code , G_ANY_CURRENCY_CODE) --shu, allow currency_code being ANY for modifiers
26531 and   (qplines.unit_price is not null
26532         or
26533        qplines.usage_pricing_type = G_AUTHORING_TYPE
26534 	or
26535        qplines.line_type_code = G_ORDER_LEVEL)
26536 and   (qpl.modifier_level_code = qplines.line_type_code
26537        OR
26538        (qpl.modifier_level_code = G_LINE_GROUP and
26539         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
26540 and  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) BETWEEN
26541        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) AND
26542        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
26543 and   nvl(qplines.start_date_active_first,TRUNC(SYSDATE)) BETWEEN
26544        nvl(qph.start_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
26545       AND
26546        nvl(qph.end_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
26547 and   nvl(qplines.start_date_active_second,TRUNC(SYSDATE)) BETWEEN
26548        nvl(qph.start_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
26549       AND
26550        nvl(qph.end_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
26551 and   nvl(qplines.active_date_first_type,'X') =
26552                 nvl(qph.active_date_first_type,nvl(qplines.active_date_first_type,'X'))
26553 and   nvl(qplines.active_date_second_type,'X') =
26554                 nvl(qph.active_date_second_type,nvl(qplines.active_date_second_type,'X'))
26555 and   TRUNC(qplines.pricing_effective_date) BETWEEN
26556          nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
26557       AND nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
26558 and   qph.source_system_code = qprs.source_system_code
26559 and   qplines.request_type_code   = qprs.request_type_code
26560 -- price book
26561 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
26562        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
26563                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
26564        or
26565        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
26566 order by 4,2;
26567 
26568 /*
26569 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
26570 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
26571 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
26572 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
26573 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
26574 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
26575 
26576 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
26577 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
26578 
26579 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
26580 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
26581 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
26582 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
26583 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
26584 
26585 
26586 
26587 -- Pricing Phase Change
26588 CURSOR l_get_excluded_prods_cur(p_pricing_phase_id NUMBER) IS
26589 SELECT /+ ORDERED USE_NL(b a) INDEX(c qp_preq_line_attrs_tmp_N2) index(b qp_pricing_attributes_n5) l_get_excluded_prods_cur /
26590         b.list_header_id,
26591         b.list_line_id,
26592         c.line_index,
26593         c.validated_flag,
26594         c.applied_flag,
26595         c.attribute_level,
26596         G_PRICING_TYPE attribute_type,
26597         c.context,
26598         c.attribute,
26599         c.value_from,
26600         b.product_attr_value setup_value_from,
26601         G_NO pricing_attr_flag,
26602         b.product_uom_code,
26603         b.excluder_flag,
26604         -1   qualifier_precedence,
26605         a.line_detail_index
26606  FROM
26607         qp_npreq_line_attrs_tmp c,
26608         qp_pricing_attributes b,
26609         qp_npreq_line_attrs_tmp a
26610  WHERE  b.pricing_phase_id = p_pricing_phase_id
26611  AND    b.qualification_ind in (G_YES_PROD_IND,G_YES_PROD_HDR_QUAL_IND,G_YES_PROD_LINE_QUAL_IND,G_YES_PROD_HDR_LINE_QUAL_IND)
26612  AND    b.product_attribute_context = c.context
26613  AND    b.product_attribute = c.attribute
26614  AND    b.product_attr_value = c.value_from
26615  AND    b.excluder_flag = G_YES
26616  AND    c.attribute_type = G_PRODUCT_TYPE
26617  AND    c.pricing_status_code = G_STATUS_UNCHANGED
26618  AND    a.list_header_id = b.list_header_id
26619  AND    a.list_line_id = b.list_line_id
26620  AND    a.line_index = c.line_index
26621  AND    a.attribute_type = G_PRODUCT_TYPE
26622  AND    a.pricing_status_code = G_STATUS_NEW;
26623 
26624 */
26625 
26626 
26627 /*
26628 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_details,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
26629 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_details,QP_PREQ_QUAL_TMP_N5,LINE_INDEX,5
26630 */
26631 CURSOR l_get_line_index_details IS
26632 SELECT distinct
26633        c.LIST_HEADER_ID,
26634        c.LIST_LINE_ID,
26635        c.CREATED_FROM_LIST_TYPE,
26636        c.ASK_FOR_FLAG,
26637        c.LINE_INDEX,
26638        c.PRICING_EFFECTIVE_DATE,
26639        c.START_DATE_ACTIVE_FIRST,
26640        c.START_DATE_ACTIVE_SECOND,
26641        c.LINE_TYPE_CODE
26642 FROM   QP_PREQ_QUAL_TMP c
26643 WHERE  c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26644 AND    c.LINE_INDEX > 0
26645 ORDER  BY c.LINE_INDEX;
26646 
26647 /*
26648 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
26649 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
26650 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
26651 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
26652 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
26653 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
26654 
26655 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
26656 
26657 -- Full table scan on qp_npreq_lines_tmp
26658 */
26659 
26660 --hw
26661 
26662 CURSOR l_get_line_index_for_quals IS
26663 SELECT /*+ ORDERED USE_NL(c a) index(a qp_preq_line_attrs_tmp_n2) l_get_line_index_for_quals */distinct
26664        c.LIST_HEADER_ID,
26665        c.LIST_LINE_ID,
26666        c.QUALIFIER_ATTRIBUTE_CONTEXT,
26667        c.QUALIFIER_ATTRIBUTE,
26668        c.QUALIFIER_ATTRIBUTE_VALUE,
26669        c.CREATED_FROM_LIST_TYPE,
26670        c.ASK_FOR_FLAG,
26671        c.QUALIFIER_GROUPING_NO,
26672        c.QUALIFIER_GROUP_CNT,
26673        c.OTHERS_GROUP_CNT,
26674        c.HEADER_QUALS_EXIST_FLAG,
26675        c.SEARCH_IND,
26676        c.VALIDATED_FLAG,
26677        c.APPLIED_FLAG,
26678        c.QUALIFIER_ATTRIBUTE_LEVEL,
26679        c.QUALIFIER_ATTRIBUTE_TYPE,
26680        c.QUALIFIER_PRECEDENCE,
26681        c.QUALIFIER_DATATYPE,
26682        c.QUALIFIER_TYPE,
26683        c.SETUP_VALUE_FROM,
26684        c.SETUP_VALUE_TO,
26685        c.QUALIFIER_PRICING_ATTR_FLAG,
26686        c.QUALIFIER_OPERATOR_TYPE ,
26687        c.START_DATE_ACTIVE,
26688        c.END_DATE_ACTIVE,
26689        b.LINE_INDEX,
26690        b.PRICING_EFFECTIVE_DATE,
26691        b.START_DATE_ACTIVE_FIRST,
26692        b.START_DATE_ACTIVE_SECOND,
26693        b.LINE_TYPE_CODE,
26694        c.PRICING_STATUS_CODE,
26695        p_pricing_phase_id PRICING_PHASE_ID,
26696        b.LINE_INDEX || '-' || c.LIST_HEADER_ID || '-' || c.LIST_LINE_ID || '-' || c.QUALIFIER_GROUPING_NO UNIQUE_KEY,
26697        NULL START_DATE_ACTIVE_H,
26698        NULL END_DATE_ACTIVE_H,
26699        NULL START_DATE_ACTIVE_SECOND_S,
26700        NULL END_DATE_ACTIVE_SECOND_S,
26701        NULL ACTIVE_DATE_FIRST_TYPE,
26702        NULL ACTIVE_DATE_SECOND_TYPE,
26703        c.HEADER_LIMIT_EXISTS,
26704        a.DERIVED_QUALIFIER_FLAG   -- Added for TCA
26705 FROM   qp_npreq_lines_tmp b,
26706        QP_PREQ_QUAL_TMP c  ,
26707        qp_npreq_line_attrs_tmp a
26708 WHERE  a.CONTEXT = c.QUALIFIER_ATTRIBUTE_CONTEXT
26709 AND    a.ATTRIBUTE = c.QUALIFIER_ATTRIBUTE
26710 AND    a.VALUE_FROM = c.QUALIFIER_ATTRIBUTE_VALUE
26711 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
26712 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26713 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26714 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
26715 AND    a.LINE_INDEX = b.LINE_INDEX
26716 AND   ((c.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
26717                                              FROM qp_npreq_line_attrs_tmp la
26718                                              WHERE attribute_type = 'QUALIFIER'
26719                                              AND pricing_status_code = G_STATUS_UNCHANGED
26720                                              AND validated_flag = G_NO
26721                                              AND list_header_id = c.list_header_id
26722                                              AND line_index = b.line_index))
26723         OR c.ASK_FOR_FLAG = G_NO)
26724 AND    (b.UNIT_PRICE is not null
26725           or
26726         b.usage_pricing_type = G_AUTHORING_TYPE
26727 	or
26728         b.LINE_TYPE_CODE = G_ORDER_LEVEL)
26729 AND    (b.PRICE_FLAG = G_YES
26730         OR
26731        (b.PRICE_FLAG = G_PHASE
26732         AND
26733         p_freeze_override_flag = G_YES))
26734 AND   TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
26735       TRUNC(nvl(c.START_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --qualifier start date
26736       TRUNC(nvl(c.END_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND     --qualifier end date
26737       TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
26738       TRUNC(nvl(c.START_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND --list header start date
26739       TRUNC(nvl(c.END_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --list header end date
26740       TRUNC(nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
26741       BETWEEN
26742       TRUNC(nvl(c.START_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND -- Order Date
26743       TRUNC(nvl(c.END_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND
26744       TRUNC(nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
26745       BETWEEN
26746       TRUNC(nvl(c.START_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND --Ship Date
26747       TRUNC(nvl(c.END_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))))
26748 AND   nvl(b.ACTIVE_DATE_FIRST_TYPE,'X')  = nvl(c.ACTIVE_DATE_FIRST_TYPE,nvl(b.ACTIVE_DATE_FIRST_TYPE,'X'))    -- ORD
26749 AND   nvl(b.ACTIVE_DATE_SECOND_TYPE,'X') = nvl(c.ACTIVE_DATE_SECOND_TYPE,nvl(b.ACTIVE_DATE_SECOND_TYPE,'X')) -- SHIP
26750 ORDER BY 1,2,3 ;
26751 
26752 /*join cursor for l_get_line_index_for_quals and perform_qualifier_grouping
26753 CURSOR l_get_line_index_for_quals_n IS
26754 SELECT /* ORDERED USE_NL(c a) index(a qp_npreq_line_attrs_tmp_n2) l_get_line_index_for_quals /
26755 distinct
26756        c.LIST_HEADER_ID,
26757        c.LIST_LINE_ID,
26758        c.QUALIFIER_ATTRIBUTE_CONTEXT,
26759        c.QUALIFIER_ATTRIBUTE,
26760        c.QUALIFIER_ATTRIBUTE_VALUE,
26761        c.CREATED_FROM_LIST_TYPE,
26762        c.ASK_FOR_FLAG,
26763        c.QUALIFIER_GROUPING_NO,
26764        c.QUALIFIER_GROUP_CNT,
26765        c.OTHERS_GROUP_CNT,
26766        c.HEADER_QUALS_EXIST_FLAG,
26767        c.SEARCH_IND,
26768        c.VALIDATED_FLAG,
26769        c.APPLIED_FLAG,
26770        c.QUALIFIER_ATTRIBUTE_LEVEL,
26771        c.QUALIFIER_ATTRIBUTE_TYPE,
26772        c.QUALIFIER_PRECEDENCE,
26773        c.QUALIFIER_DATATYPE,
26774        c.QUALIFIER_TYPE,
26775        c.SETUP_VALUE_FROM,
26776        c.SETUP_VALUE_TO,
26777        c.QUALIFIER_PRICING_ATTR_FLAG,
26778        c.QUALIFIER_OPERATOR_TYPE ,
26779        c.START_DATE_ACTIVE,
26780        c.END_DATE_ACTIVE,
26781        b.LINE_INDEX,
26782        b.PRICING_EFFECTIVE_DATE,
26783        b.START_DATE_ACTIVE_FIRST,
26784        b.START_DATE_ACTIVE_SECOND,
26785        b.LINE_TYPE_CODE,
26786        c.PRICING_STATUS_CODE,
26787        p_pricing_phase_id PRICING_PHASE_ID,
26788        b.LINE_INDEX || '-' || c.LIST_HEADER_ID || '-' || c.LIST_LINE_ID || '-' || c.QUALIFIER_GROUPING_NO UNIQUE_KEY,
26789        NULL START_DATE_ACTIVE_H,
26790        NULL END_DATE_ACTIVE_H,
26791        NULL START_DATE_ACTIVE_SECOND_S,
26792        NULL END_DATE_ACTIVE_SECOND_S,
26793        NULL ACTIVE_DATE_FIRST_TYPE,
26794        NULL ACTIVE_DATE_SECOND_TYPE,
26795        c.HEADER_LIMIT_EXISTS
26796 FROM   qp_npreq_lines_tmp b,
26797        QP_PREQ_QUAL_TMP c  ,
26798        qp_npreq_line_attrs_tmp a
26799 WHERE  a.CONTEXT = c.QUALIFIER_ATTRIBUTE_CONTEXT
26800 AND    a.ATTRIBUTE = c.QUALIFIER_ATTRIBUTE
26801 AND    a.VALUE_FROM = c.QUALIFIER_ATTRIBUTE_VALUE
26802 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
26803 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26804 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26805 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
26806 and    c.qualifier_grouping_no <> -1
26807 and    c.other_group_cnt + c.null_group_cnt = c.qualifier_group_cnt
26808 AND    a.LINE_INDEX = b.LINE_INDEX
26809 AND   ((c.ASK_FOR_FLAG = G_YES and
26810         (c.LIST_HEADER_ID,b.LINE_INDEX) IN  (SELECT list_header_id,line_index
26811                                              FROM qp_npreq_line_attrs_tmp
26812                                              WHERE attribute_type = 'QUALIFIER'
26813                                              AND pricing_status_code = G_STATUS_UNCHANGED
26814                                              AND validated_flag = G_NO
26815                                              AND list_header_id IS NOT NULL))
26816         OR c.ASK_FOR_FLAG = G_NO)
26817 AND    (b.UNIT_PRICE is not null
26818           or
26819         b.usage_pricing_type = G_AUTHORING_TYPE
26820 	or
26821         b.LINE_TYPE_CODE = G_ORDER_LEVEL)
26822 AND    (b.PRICE_FLAG = G_YES
26823         OR
26824        (b.PRICE_FLAG = G_PHASE
26825         AND
26826         p_freeze_override_flag = G_YES))
26827 AND   TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
26828       TRUNC(nvl(c.START_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --qualifier start date
26829       TRUNC(nvl(c.END_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND     --qualifier end date
26830       TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
26831       TRUNC(nvl(c.START_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND --list header start date
26832       TRUNC(nvl(c.END_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --list header end date
26833       TRUNC(nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
26834       BETWEEN
26835       TRUNC(nvl(c.START_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND -- Order Date
26836       TRUNC(nvl(c.END_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND
26837       TRUNC(nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
26838       BETWEEN
26839       TRUNC(nvl(c.START_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND --Ship Date
26840       TRUNC(nvl(c.END_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))))
26841 AND   nvl(b.ACTIVE_DATE_FIRST_TYPE,'X')  = nvl(c.ACTIVE_DATE_FIRST_TYPE,nvl(b.ACTIVE_DATE_FIRST_TYPE,'X'))    -- ORD
26842 AND   nvl(b.ACTIVE_DATE_SECOND_TYPE,'X') = nvl(c.ACTIVE_DATE_SECOND_TYPE,nvl(b.ACTIVE_DATE_SECOND_TYPE,'X')) -- SHIP
26843 union all
26844 SELECT /* ORDERED USE_NL(c a) index(a qp_npreq_line_attrs_tmp_n2) l_get_line_index_for_quals /
26845 distinct
26846        c.LIST_HEADER_ID,
26847        c.LIST_LINE_ID,
26848        c.QUALIFIER_ATTRIBUTE_CONTEXT,
26849        c.QUALIFIER_ATTRIBUTE,
26850        c.QUALIFIER_ATTRIBUTE_VALUE,
26851        c.CREATED_FROM_LIST_TYPE,
26852        c.ASK_FOR_FLAG,
26853        c.QUALIFIER_GROUPING_NO,
26854        c.QUALIFIER_GROUP_CNT,
26855        c.OTHERS_GROUP_CNT,
26856        c.HEADER_QUALS_EXIST_FLAG,
26857        c.SEARCH_IND,
26858        c.VALIDATED_FLAG,
26859        c.APPLIED_FLAG,
26860        c.QUALIFIER_ATTRIBUTE_LEVEL,
26861        c.QUALIFIER_ATTRIBUTE_TYPE,
26862        c.QUALIFIER_PRECEDENCE,
26863        c.QUALIFIER_DATATYPE,
26864        c.QUALIFIER_TYPE,
26865        c.SETUP_VALUE_FROM,
26866        c.SETUP_VALUE_TO,
26867        c.QUALIFIER_PRICING_ATTR_FLAG,
26868        c.QUALIFIER_OPERATOR_TYPE ,
26869        c.START_DATE_ACTIVE,
26870        c.END_DATE_ACTIVE,
26871        b.LINE_INDEX,
26872        b.PRICING_EFFECTIVE_DATE,
26873        b.START_DATE_ACTIVE_FIRST,
26874        b.START_DATE_ACTIVE_SECOND,
26875        b.LINE_TYPE_CODE,
26876        c.PRICING_STATUS_CODE,
26877        p_pricing_phase_id PRICING_PHASE_ID,
26878        b.LINE_INDEX || '-' || c.LIST_HEADER_ID || '-' || c.LIST_LINE_ID || '-' || c.QUALIFIER_GROUPING_NO UNIQUE_KEY,
26879        NULL START_DATE_ACTIVE_H,
26880        NULL END_DATE_ACTIVE_H,
26881        NULL START_DATE_ACTIVE_SECOND_S,
26882        NULL END_DATE_ACTIVE_SECOND_S,
26883        NULL ACTIVE_DATE_FIRST_TYPE,
26884        NULL ACTIVE_DATE_SECOND_TYPE,
26885        c.HEADER_LIMIT_EXISTS
26886 FROM   qp_npreq_lines_tmp b,
26887        QP_PREQ_QUAL_TMP c  ,
26888        qp_npreq_line_attrs_tmp a
26889 WHERE  a.CONTEXT = c.QUALIFIER_ATTRIBUTE_CONTEXT
26890 AND    a.ATTRIBUTE = c.QUALIFIER_ATTRIBUTE
26891 AND    a.VALUE_FROM = c.QUALIFIER_ATTRIBUTE_VALUE
26892 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
26893 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26894 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26895 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
26896 and    c.qualifier_grouping_no = -1
26897 and    c.null_group_cnt = c.qualifier_group_cnt
26898 and    nvl(c.others_group_cnt,0) = 0  -- to indicate that there are no other groups(coming from qp_qualifiers table)
26899 AND    a.LINE_INDEX = b.LINE_INDEX
26900 AND   ((c.ASK_FOR_FLAG = G_YES and
26901         (c.LIST_HEADER_ID,b.LINE_INDEX) IN  (SELECT list_header_id,line_index
26902                                              FROM qp_npreq_line_attrs_tmp
26903                                              WHERE attribute_type = 'QUALIFIER'
26904                                              AND pricing_status_code = G_STATUS_UNCHANGED
26905                                              AND validated_flag = G_NO
26906                                              AND list_header_id IS NOT NULL))
26907         OR c.ASK_FOR_FLAG = G_NO)
26908 AND    (b.UNIT_PRICE is not null
26909           or
26910         b.usage_pricing_type = G_AUTHORING_TYPE
26911 	or
26912         b.LINE_TYPE_CODE = G_ORDER_LEVEL)
26913 AND    (b.PRICE_FLAG = G_YES
26914         OR
26915        (b.PRICE_FLAG = G_PHASE
26916         AND
26917         p_freeze_override_flag = G_YES))
26918 AND   TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
26919       TRUNC(nvl(c.START_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --qualifier start date
26920       TRUNC(nvl(c.END_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND     --qualifier end date
26921       TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
26922       TRUNC(nvl(c.START_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND --list header start date
26923       TRUNC(nvl(c.END_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --list header end date
26924       TRUNC(nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
26925       BETWEEN
26926       TRUNC(nvl(c.START_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND -- Order Date
26927       TRUNC(nvl(c.END_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND
26928       TRUNC(nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
26929       BETWEEN
26930       TRUNC(nvl(c.START_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND --Ship Date
26931       TRUNC(nvl(c.END_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))))
26932 AND   nvl(b.ACTIVE_DATE_FIRST_TYPE,'X')  = nvl(c.ACTIVE_DATE_FIRST_TYPE,nvl(b.ACTIVE_DATE_FIRST_TYPE,'X'))    -- ORD
26933 AND   nvl(b.ACTIVE_DATE_SECOND_TYPE,'X') = nvl(c.ACTIVE_DATE_SECOND_TYPE,nvl(b.ACTIVE_DATE_SECOND_TYPE,'X')); -- SHIP
26934 */
26935 
26936 /*
26937 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,LINE_INDEX,1
26938 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,PRICING_PHASE_ID,2
26939 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,PRICING_STATUS_CODE,3
26940 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,LIST_HEADER_ID,4
26941 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,LIST_LINE_ID,5
26942 */
26943 CURSOR l_get_satisfied_quals(p_list_header_id NUMBER , p_list_line_id NUMBER, p_line_index NUMBER)  IS
26944 SELECT /*+ INDEX(c QP_PREQ_QUAL_TMP_N1) l_get_satisfied_quals */
26945        c.LIST_HEADER_ID,
26946        c.LIST_LINE_ID,
26947        c.QUALIFIER_GROUP_CNT,
26948        c.HEADER_QUALS_EXIST_FLAG,
26949        c.SEARCH_IND,
26950        c.VALIDATED_FLAG,
26951        c.APPLIED_FLAG,
26952        c.QUALIFIER_ATTRIBUTE_LEVEL,
26953        c.QUALIFIER_ATTRIBUTE_TYPE,
26954        c.QUALIFIER_ATTRIBUTE_CONTEXT,
26955        c.QUALIFIER_ATTRIBUTE,
26956        c.QUALIFIER_ATTRIBUTE_VALUE,
26957        c.QUALIFIER_GROUPING_NO ,
26958        c.QUALIFIER_PRECEDENCE,
26959        c.QUALIFIER_DATATYPE,
26960        c.SETUP_VALUE_FROM,
26961        c.SETUP_VALUE_TO,
26962        c.QUALIFIER_PRICING_ATTR_FLAG,
26963        c.QUALIFIER_OPERATOR_TYPE ,
26964        c.CREATED_FROM_LIST_TYPE,
26965        decode(c.LIST_LINE_ID,-1,'HQ','LQ') QUALIFIER_TYPE
26966 FROM   QP_PREQ_QUAL_TMP c
26967 WHERE  c.LIST_HEADER_ID = p_list_header_id
26968 AND    c.LIST_LINE_ID IN (p_list_line_id,-1)
26969 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
26970 AND    c.LINE_INDEX = p_line_index
26971 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
26972 UNION
26973 -- To get the -1 group qualifiers for non -1 groups only
26974 -- non -1 groups = OTHERS_GROUP_CNT <> 0
26975 SELECT /*+ INDEX(c QP_PREQ_QUAL_TMP_N1) l_get_satisfied_quals */
26976        c.LIST_HEADER_ID,
26977        c.LIST_LINE_ID,
26978        c.QUALIFIER_GROUP_CNT,
26979        c.HEADER_QUALS_EXIST_FLAG,
26980        c.SEARCH_IND,
26981        c.VALIDATED_FLAG,
26982        c.APPLIED_FLAG,
26983        c.QUALIFIER_ATTRIBUTE_LEVEL,
26984        c.QUALIFIER_ATTRIBUTE_TYPE,
26985        c.QUALIFIER_ATTRIBUTE_CONTEXT,
26986        c.QUALIFIER_ATTRIBUTE,
26987        c.QUALIFIER_ATTRIBUTE_VALUE,
26988        c.QUALIFIER_GROUPING_NO ,
26989        c.QUALIFIER_PRECEDENCE,
26990        c.QUALIFIER_DATATYPE,
26991        c.SETUP_VALUE_FROM,
26992        c.SETUP_VALUE_TO,
26993        c.QUALIFIER_PRICING_ATTR_FLAG,
26994        c.QUALIFIER_OPERATOR_TYPE ,
26995        c.CREATED_FROM_LIST_TYPE,
26996        decode(c.LIST_LINE_ID,-1,'HQ','LQ') QUALIFIER_TYPE
26997 FROM   QP_PREQ_QUAL_TMP c
26998 WHERE  c.LIST_HEADER_ID = p_list_header_id
26999 AND    c.LIST_LINE_ID IN (p_list_line_id,-1)
27000 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
27001 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
27002 AND    c.NULL_GROUP_CNT <> 0
27003 AND    c.OTHERS_GROUP_CNT <> 0 -- meaning there are other groups for which this cursor selects the -1 group qualifiers in perf path
27004 AND    c.QUALIFIER_GROUPING_NO = -1;
27005 
27006 -- 3520634 start
27007 -- get rows with search ind 2
27008 CURSOR get_list_headers_with_ind2 IS
27009 SELECT/*+ ORDERED */ 'x'
27010 FROM  qp_qualifiers b
27011 WHERE b.search_ind = 2
27012 and b.list_header_id in (select distinct a.list_header_id from qp_preq_qual_tmp a
27013                          where a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
27014                          and a.search_ind = 1
27015                          and a.pricing_phase_id = p_pricing_phase_id)
27016 AND   rownum = 1;
27017 -- 3520634 end
27018 
27019 J PLS_INTEGER:=1;
27020 N PLS_INTEGER:=1;
27021 M PLS_INTEGER:=1;
27022 K PLS_INTEGER:=1;
27023 
27024 l_status VARCHAR2(30);
27025 l_status_code VARCHAR2(30);
27026 l_status_text VARCHAR2(240);
27027 l_list_line_id NUMBER := 0 ;
27028 l_line_index PLS_INTEGER := 0 ;
27029 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.SELECT_MODIFIERS';
27030 l_blind_discount VARCHAR2(30);
27031 
27032 l_line_detail_index PLS_INTEGER;
27033 l_prod_qual_count PLS_INTEGER := 0;
27034 l_prod_cur_count PLS_INTEGER := 0;
27035 v_qualifiers_satisfied BOOLEAN;
27036 
27037 l_list_header_id NUMBER := -9999;
27038 l_lst_line_id    NUMBER := -9999;
27039 l_line_indx      NUMBER := -9999;
27040 l_line_detail_indx NUMBER := -9999;
27041 l_qualifier_type VARCHAR2(20);
27042 l_satisfied_qualifier_type VARCHAR2(20);
27043 l_satisfied_list_header_id NUMBER := -9999;
27044 l_satisfied_lst_line_id    NUMBER := -9999;
27045 l_satisfied_line_indx      NUMBER := -9999;
27046 l_satisfied_line_detail_indx NUMBER := -9999;
27047 l_satisfied_incomp_code VARCHAR2(30);
27048 l_satisfied_modifier_lvl_code VARCHAR2(30);
27049 l_satisfied_primary_uom_flag VARCHAR2(30);
27050 l_exe_count NUMBER := 0;
27051 lq_line_index              NUMBER := -9999;
27052 lq_list_line_id            NUMBER := -9999;
27053 l_dummy VARCHAR2(1); -- 3520634
27054 
27055 l_satis_quals_opt	VARCHAR2(1);
27056 --l_perf_pvt_enabled      VARCHAR2(1) := nvl(QP_PERF_PVT.enabled,G_NO);
27057 
27058 E_ROUTINE_ERRORS         EXCEPTION;
27059 
27060 nROWS CONSTANT NUMBER := 1000;
27061 
27062 BEGIN
27063 
27064    x_status_code := FND_API.G_RET_STS_SUCCESS;
27065    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27066    engine_debug('Before Big Select');
27067 
27068    END IF;
27069    --hw
27070    l_satis_quals_opt := nvl(fnd_profile.value('QP_SATIS_QUALS_OPT'), 'Y');
27071    --[julin/pricebook]
27072    IF nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES THEN
27073      l_satis_quals_opt := 'N';
27074    END IF;
27075 
27076    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27077    engine_debug('QP_SATIS_QUALS_OPT: ' || l_satis_quals_opt);
27078 
27079    END IF;
27080    --l_prod_qual_count := 0;
27081    l_prod_cur_count := 0;
27082 
27083    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27084    engine_debug('Caching Header Qualifiers for phase : ' || p_pricing_phase_id);
27085    END IF;
27086    qp_debug_util.tstart('CACHE_HEADER_QUALIFIERS','Caching the header qualifiers');
27087    Cache_Header_Qualifiers(p_pricing_phase_id,l_status_code,l_status_text);
27088    qp_debug_util.tstop('CACHE_HEADER_QUALIFIERS');
27089    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27090      RAISE E_ROUTINE_ERRORS;
27091    END IF;
27092 
27093    --Added call for 3520634
27094    qp_debug_util.tstart('DELETE_HDRS_WITH_NO_PRODATTR','Deleting the headers with no product attribute');
27095    Delete_Hdrs_With_No_ProdAttr(p_pricing_phase_id,l_status_code,l_status_text);
27096    qp_debug_util.tstop('DELETE_HDRS_WITH_NO_PRODATTR');
27097    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27098      RAISE E_ROUTINE_ERRORS;
27099    END IF;
27100 
27101 
27102    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27103    engine_debug('Caching Line Qualifiers for satisfied headers and pure line quals for phase : ' || p_pricing_phase_id);
27104    END IF;
27105    qp_debug_util.tstart('CACHE_LINE_QUALIFIERS','Caching the Line qualifiers');
27106    Cache_Line_Qualifiers(p_pricing_phase_id,l_status_code,l_status_text);
27107    qp_debug_util.tstop('CACHE_LINE_QUALIFIERS');
27108    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27109      RAISE E_ROUTINE_ERRORS;
27110    END IF;
27111 
27112  IF (G_QUALIFIER_TEMP <> 'E' OR G_LINE_QUALIFIER_TEMP <> 'E') THEN
27113    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27114    engine_debug('Caching Qualifiers for phase : ' || p_pricing_phase_id || ' Successful');
27115    END IF;
27116   -- For each primary search list header , list line and qualifier grouping no
27117 /*
27118 INDX,QP_PREQ_GRP.select_modifiers.select_modifiers_sel1,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
27119 */
27120   /*  FOR c1 in (select list_header_id , list_line_id , qualifier_grouping_no
27121 		   from  qp_preq_qual_tmp
27122 		   where pricing_status_code = G_STATUS_UNCHANGED
27123 		   and   pricing_phase_id = p_pricing_phase_id
27124 		   order by list_header_id,list_line_id,qualifier_grouping_no) LOOP
27125    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27126    engine_debug('Executing Mini Caching Qualifiers for phase : ' || p_pricing_phase_id ||
27127 			 'List Header id : ' || c1.list_header_id || ' List Line Id : ' || c1.list_line_id ||
27128 			 'Grouping No: ' || c1.qualifier_grouping_no);
27129    END IF;
27130    Mini_Cache_Qualifiers(c1.list_header_id , c1.list_line_id , c1.qualifier_grouping_no,
27131 					p_pricing_phase_id,l_status_code,l_status_text);
27132    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27133      RAISE E_ROUTINE_ERRORS;
27134    END IF;
27135    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27136    engine_debug('Executing Mini Caching Qualifiers for phase : ' || p_pricing_phase_id || ' Successful');
27137    END IF;
27138   END LOOP;  */
27139 
27140   -- Added for 3520634. Mini_Cache_Qualifiers is meant to search qualifiers with search_ind=2.
27141   --Call to Mini_Cache_Qualifiers can be saved if there is no header level qualifier with
27142   -- search_ind=2 for list_headers_ids selected by engine so far.
27143 
27144   OPEN  get_list_headers_with_ind2;
27145   FETCH get_list_headers_with_ind2 INTO l_dummy;
27146   CLOSE get_list_headers_with_ind2;
27147 
27148   IF (l_dummy = 'x') THEN  --Added if clause for 3520634
27149   	qp_debug_util.tstart('MINI_CACHE_QUALIFIERS','Caching the qualifiers with search_ind=2');
27150   	Mini_Cache_Qualifiers(-999 , -999 , -999, p_pricing_phase_id,l_status_code,l_status_text);
27151 	qp_debug_util.tstop('MINI_CACHE_QUALIFIERS');
27152   	IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27153      		RAISE E_ROUTINE_ERRORS;
27154   	END IF;
27155   	IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27156   		engine_debug('Executing Mini Caching Qualifiers for phase : ' || p_pricing_phase_id || ' Successful');
27157 
27158   	END IF;
27159   END IF;
27160   -- Qualifier Grouping
27161   qp_debug_util.tstart('MINI_CACHE_QUALIFIERS', 'Performing the Qualifier Grouping');
27162   Perform_Qualifier_Grouping(G_NO,p_pricing_phase_id,l_status_code,l_status_text);
27163   qp_debug_util.tstop('MINI_CACHE_QUALIFIERS');
27164 
27165   IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27166      RAISE E_ROUTINE_ERRORS;
27167   END IF;
27168 
27169 	--hw
27170 	--if QP_PERF_PVT.enabled = 'Y' then
27171 	--if l_perf_pvt_enabled = 'Y' then
27172 /*
27173 
27174  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27175 	engine_debug('hw: l_get_line_index_for_quals_n path');
27176 
27177  END IF;
27178 	-- update null group count
27179 	--update qp_preq_qual_tmp qpqt1
27180         --set qpqt1.null_group_cnt = (select count(*)
27181                                     from qp_preq_qual_tmp qpqt2
27182                                     where qpqt2.list_header_id = qpqt1.list_header_id
27183                                     and qpqt2.list_line_id = qpqt1.list_line_id
27184                                     and qpqt2.qualifier_grouping_no = -1
27185                                     and qpqt2.pricing_status_code <> G_DELETED_GRP
27186                                     and qpqt2.pricing_phase_id = p_pricing_phase_id
27187                                     and qpqt2.pricing_status_code = G_STATUS_UNCHANGED)
27188         where qpqt1.pricing_phase_id = p_pricing_phase_id
27189         and   qpqt1.pricing_status_code = G_STATUS_UNCHANGED;
27190 
27191 	--and qpqt1.qualifier_grouping_no = -1; -- should update all groups and not just -1 groups
27192         -- as it is used as null_group_count + other_group_cnt = qualifier_group_cnt
27193 
27194 	-- update other group count
27195 	--update qp_preq_qual_tmp qpqt1
27196         --set qpqt1.other_group_cnt = (select count(*)
27197                                      from qp_preq_qual_tmp qpqt2
27198                                      where qpqt2.list_header_id = qpqt1.list_header_id
27199                                      and qpqt2.list_line_id = qpqt1.list_line_id
27200                                      and qpqt2.qualifier_grouping_no <> -1
27201                                      and qpqt2.pricing_status_code <> G_DELETED_GRP
27202                                      and qpqt2.pricing_phase_id = p_pricing_phase_id
27203                                      and qpqt1.qualifier_grouping_no = qpqt2.qualifier_grouping_no
27204                                      and qpqt2.pricing_status_code = G_STATUS_UNCHANGED)
27205         where qpqt1.pricing_phase_id = p_pricing_phase_id
27206         and   qpqt1.pricing_status_code = G_STATUS_UNCHANGED
27207         and   qpqt1.qualifier_grouping_no <> -1;
27208 
27209  IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
27210   for i in (select list_header_id,list_line_id,qualifier_grouping_no,null_group_cnt,other_group_cnt,search_ind,
27211             qualifier_group_cnt,others_group_cnt,qualifier_attribute_context,qualifier_attribute,qualifier_attribute_value
27212             from qp_preq_qual_tmp
27213             where pricing_phase_id = p_pricing_phase_id
27214             and pricing_status_code = 'X'
27215             order by 1,2,3)
27216   loop
27217    QP_PREQ_GRP.engine_debug('List Header Id: ' || i.list_header_id);
27218    QP_PREQ_GRP.engine_debug('List Line Id: ' || i.list_line_id);
27219    QP_PREQ_GRP.engine_debug('Grouping No: ' || i.qualifier_grouping_no);
27220    QP_PREQ_GRP.engine_debug('Null Group Cnt: ' || i.null_group_cnt);
27221    QP_PREQ_GRP.engine_debug('Other Group Cnt: ' || i.other_group_cnt);
27222    QP_PREQ_GRP.engine_debug('Satisfied Group Cnt: ' || i.qualifier_group_cnt);
27223    QP_PREQ_GRP.engine_debug('Search Ind: ' || i.search_ind);
27224    QP_PREQ_GRP.engine_debug('Others group cnt: ' || i.others_group_cnt);
27225    QP_PREQ_GRP.engine_debug('Qualifier Context: ' || i.qualifier_attribute_context);
27226    QP_PREQ_GRP.engine_debug('Qualifier Attribute: ' || i.qualifier_attribute);
27227    QP_PREQ_GRP.engine_debug('Qualifier Value: ' || i.qualifier_attribute_value);
27228   end loop;
27229  END IF;
27230 
27231   OPEN l_get_line_index_for_quals_n;
27232 
27233   LOOP
27234    G_LIST_HEADER_ID_TBL_Q.delete;
27235    G_LIST_LINE_ID_TBL_Q.delete;
27236    G_CONTEXT_TBL_Q.delete;
27237    G_ATTRIBUTE_TBL_Q.delete;
27238    G_VALUE_FROM_TBL_Q.delete;
27239    G_LIST_TYPE_CODE_TBL_Q.delete;
27240    G_ASK_FOR_FLAG_TBL_Q.delete;
27241    G_GROUPING_NO_TBL_Q.delete;
27242    G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
27243    G_OTHERS_GROUP_CNT_TBL_Q.delete;
27244    G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
27245    G_SEARCH_IND_TBL_Q.delete;
27246    G_VALIDATED_FLAG_TBL_Q.delete;
27247    G_APPLIED_FLAG_TBL_Q.delete;
27248    G_ATTRIBUTE_LEVEL_TBL_Q.delete;
27249    G_ATTRIBUTE_TYPE_TBL_Q.delete;
27250    G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
27251    G_DATATYPE_TBL_Q.delete;
27252    G_QUALIFIER_TYPE_TBL_Q.delete;
27253    G_SETUP_VALUE_FROM_TBL_Q.delete;
27254    G_SETUP_VALUE_TO_TBL_Q.delete;
27255    G_PRICING_ATTR_FLAG_TBL_Q.delete;
27256    G_OPERATOR_TYPE_TBL_Q.delete;
27257    G_LINE_INDEX_TBL_Q.delete;
27258    G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
27259    G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
27260    G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
27261    G_LINE_TYPE_CODE_TBL_Q.delete;
27262    G_PRICING_STATUS_CODE_TBL_Q.delete;
27263    G_PRICING_PHASE_ID_TBL_Q.delete;
27264    G_UNIQUE_KEY_TBL_Q.delete;
27265    G_START_DATE_ACTIVE_TBL_H_Q.delete;
27266    G_END_DATE_ACTIVE_TBL_H_Q.delete;
27267    G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
27268    G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
27269    G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
27270    G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
27271    G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
27272 
27273   FETCH l_get_line_index_for_quals_n
27274   BULK COLLECT INTO
27275      G_LIST_HEADER_ID_TBL_Q
27276    , G_LIST_LINE_ID_TBL_Q
27277    , G_CONTEXT_TBL_Q
27278    , G_ATTRIBUTE_TBL_Q
27279    , G_VALUE_FROM_TBL_Q
27280    , G_LIST_TYPE_CODE_TBL_Q
27281    , G_ASK_FOR_FLAG_TBL_Q
27282    , G_GROUPING_NO_TBL_Q
27283    , G_QUALIFIER_GROUP_CNT_TBL_Q
27284    , G_OTHERS_GROUP_CNT_TBL_Q
27285    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
27286    , G_SEARCH_IND_TBL_Q
27287    , G_VALIDATED_FLAG_TBL_Q
27288    , G_APPLIED_FLAG_TBL_Q
27289    , G_ATTRIBUTE_LEVEL_TBL_Q
27290    , G_ATTRIBUTE_TYPE_TBL_Q
27291    , G_QUALIFIER_PRECEDENCE_TBL_Q
27292    , G_DATATYPE_TBL_Q
27293    , G_QUALIFIER_TYPE_TBL_Q
27294    , G_SETUP_VALUE_FROM_TBL_Q
27295    , G_SETUP_VALUE_TO_TBL_Q
27296    , G_PRICING_ATTR_FLAG_TBL_Q
27297    , G_OPERATOR_TYPE_TBL_Q
27298    , G_START_DATE_ACTIVE_TBL_Q
27299    , G_END_DATE_ACTIVE_TBL_Q
27300    , G_LINE_INDEX_TBL_Q
27301    , G_PRICING_EFFECTIVE_DATE_TBL_Q
27302    , G_START_DATE_ACTIVE_FIR_TBL_Q
27303    , G_END_DATE_ACTIVE_FIR_TBL_Q
27304    , G_LINE_TYPE_CODE_TBL_Q
27305    , G_PRICING_STATUS_CODE_TBL_Q
27306    , G_PRICING_PHASE_ID_TBL_Q
27307    , G_UNIQUE_KEY_TBL_Q
27308    , G_START_DATE_ACTIVE_TBL_H_Q
27309    , G_END_DATE_ACTIVE_TBL_H_Q
27310    , G_START_DATE_ACTIVE_SEC_TBL_Q
27311    , G_END_DATE_ACTIVE_SEC_TBL_Q
27312    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
27313    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
27314    , G_HEADER_LIMIT_EXISTS_TBL_Q LIMIT nROWS;
27315    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
27316 
27317    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27318    engine_debug('Inserting no rows into qp_preq_qual_tmp for each line index');
27319    END IF;
27320    IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
27321 
27322      --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_UPDATED;
27323      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27324      engine_debug('Inserting rows into qp_preq_qual_tmp for each line index: ' || G_LIST_HEADER_ID_TBL_Q.COUNT);
27325 
27326      END IF;
27327       INSERT_QUAL(
27328        G_LIST_HEADER_ID_TBL_Q
27329      , G_LIST_LINE_ID_TBL_Q
27330      , G_VALIDATED_FLAG_TBL_Q
27331      , G_APPLIED_FLAG_TBL_Q
27332      , G_ATTRIBUTE_LEVEL_TBL_Q
27333      , G_ATTRIBUTE_TYPE_TBL_Q
27334      , G_CONTEXT_TBL_Q
27335      , G_ATTRIBUTE_TBL_Q
27336      , G_VALUE_FROM_TBL_Q
27337      , G_GROUPING_NO_TBL_Q
27338      , G_QUALIFIER_PRECEDENCE_TBL_Q
27339      , G_DATATYPE_TBL_Q
27340      , G_SETUP_VALUE_FROM_TBL_Q
27341      , G_SETUP_VALUE_TO_TBL_Q
27342      , G_PRICING_ATTR_FLAG_TBL_Q
27343      , G_OPERATOR_TYPE_TBL_Q
27344      , G_LIST_TYPE_CODE_TBL_Q
27345      , G_ASK_FOR_FLAG_TBL_Q
27346      , G_QUALIFIER_TYPE_TBL_Q
27347      , G_QUALIFIER_GROUP_CNT_TBL_Q
27348      , G_OTHERS_GROUP_CNT_TBL_Q
27349      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
27350      , G_SEARCH_IND_TBL_Q
27351      , G_PRICING_STATUS_CODE_TBL_Q
27352      , G_START_DATE_ACTIVE_TBL_Q
27353      , G_END_DATE_ACTIVE_TBL_Q
27354      , G_LINE_INDEX_TBL_Q
27355      , G_PRICING_EFFECTIVE_DATE_TBL_Q
27356      , G_START_DATE_ACTIVE_FIR_TBL_Q
27357      , G_END_DATE_ACTIVE_FIR_TBL_Q
27358      , G_LINE_TYPE_CODE_TBL_Q
27359      , G_PRICING_PHASE_ID_TBL_Q
27360      , G_UNIQUE_KEY_TBL_Q
27361      , G_START_DATE_ACTIVE_TBL_H_Q
27362      , G_END_DATE_ACTIVE_TBL_H_Q
27363      , G_START_DATE_ACTIVE_SEC_TBL_Q
27364      , G_END_DATE_ACTIVE_SEC_TBL_Q
27365      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
27366      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
27367      , G_HEADER_LIMIT_EXISTS_TBL_Q
27368      , l_status_code
27369      , l_status_text);
27370    END IF;
27371   END LOOP;
27372   CLOSE l_get_line_index_for_quals_n;
27373 
27374 */
27375 
27376   /* else  */
27377 
27378  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27379 	engine_debug('hw: l_get_line_index_for_quals path');
27380  END IF;
27381   qp_debug_util.tstart('L_GET_LINE_INDEX_FOR_QUALS','Cursor L_GET_LINE_INDEX_FOR_QUALS');
27382   OPEN l_get_line_index_for_quals;
27383 
27384   LOOP
27385    G_LIST_HEADER_ID_TBL_Q.delete;
27386    G_LIST_LINE_ID_TBL_Q.delete;
27387    G_CONTEXT_TBL_Q.delete;
27388    G_ATTRIBUTE_TBL_Q.delete;
27389    G_VALUE_FROM_TBL_Q.delete;
27390    G_LIST_TYPE_CODE_TBL_Q.delete;
27391    G_ASK_FOR_FLAG_TBL_Q.delete;
27392    G_GROUPING_NO_TBL_Q.delete;
27393    G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
27394    G_OTHERS_GROUP_CNT_TBL_Q.delete;
27395    G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
27396    G_SEARCH_IND_TBL_Q.delete;
27397    G_VALIDATED_FLAG_TBL_Q.delete;
27398    G_APPLIED_FLAG_TBL_Q.delete;
27399    G_ATTRIBUTE_LEVEL_TBL_Q.delete;
27400    G_ATTRIBUTE_TYPE_TBL_Q.delete;
27401    G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
27402    G_DATATYPE_TBL_Q.delete;
27403    G_QUALIFIER_TYPE_TBL_Q.delete;
27404    G_SETUP_VALUE_FROM_TBL_Q.delete;
27405    G_SETUP_VALUE_TO_TBL_Q.delete;
27406    G_PRICING_ATTR_FLAG_TBL_Q.delete;
27407    G_OPERATOR_TYPE_TBL_Q.delete;
27408    G_LINE_INDEX_TBL_Q.delete;
27409    G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
27410    G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
27411    G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
27412    G_LINE_TYPE_CODE_TBL_Q.delete;
27413    G_PRICING_STATUS_CODE_TBL_Q.delete;
27414    G_PRICING_PHASE_ID_TBL_Q.delete;
27415    G_UNIQUE_KEY_TBL_Q.delete;
27416    G_START_DATE_ACTIVE_TBL_H_Q.delete;
27417    G_END_DATE_ACTIVE_TBL_H_Q.delete;
27418    G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
27419    G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
27420    G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
27421    G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
27422    G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
27423    G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;    -- Added for TCA
27424 
27425   FETCH l_get_line_index_for_quals
27426   BULK COLLECT INTO
27427      G_LIST_HEADER_ID_TBL_Q
27428    , G_LIST_LINE_ID_TBL_Q
27429    , G_CONTEXT_TBL_Q
27430    , G_ATTRIBUTE_TBL_Q
27431    , G_VALUE_FROM_TBL_Q
27432    , G_LIST_TYPE_CODE_TBL_Q
27433    , G_ASK_FOR_FLAG_TBL_Q
27434    , G_GROUPING_NO_TBL_Q
27435    , G_QUALIFIER_GROUP_CNT_TBL_Q
27436    , G_OTHERS_GROUP_CNT_TBL_Q
27437    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
27438    , G_SEARCH_IND_TBL_Q
27439    , G_VALIDATED_FLAG_TBL_Q
27440    , G_APPLIED_FLAG_TBL_Q
27441    , G_ATTRIBUTE_LEVEL_TBL_Q
27442    , G_ATTRIBUTE_TYPE_TBL_Q
27443    , G_QUALIFIER_PRECEDENCE_TBL_Q
27444    , G_DATATYPE_TBL_Q
27445    , G_QUALIFIER_TYPE_TBL_Q
27446    , G_SETUP_VALUE_FROM_TBL_Q
27447    , G_SETUP_VALUE_TO_TBL_Q
27448    , G_PRICING_ATTR_FLAG_TBL_Q
27449    , G_OPERATOR_TYPE_TBL_Q
27450    , G_START_DATE_ACTIVE_TBL_Q
27451    , G_END_DATE_ACTIVE_TBL_Q
27452    , G_LINE_INDEX_TBL_Q
27453    , G_PRICING_EFFECTIVE_DATE_TBL_Q
27454    , G_START_DATE_ACTIVE_FIR_TBL_Q
27455    , G_END_DATE_ACTIVE_FIR_TBL_Q
27456    , G_LINE_TYPE_CODE_TBL_Q
27457    , G_PRICING_STATUS_CODE_TBL_Q
27458    , G_PRICING_PHASE_ID_TBL_Q
27459    , G_UNIQUE_KEY_TBL_Q
27460    , G_START_DATE_ACTIVE_TBL_H_Q
27461    , G_END_DATE_ACTIVE_TBL_H_Q
27462    , G_START_DATE_ACTIVE_SEC_TBL_Q
27463    , G_END_DATE_ACTIVE_SEC_TBL_Q
27464    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
27465    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
27466    , G_HEADER_LIMIT_EXISTS_TBL_Q
27467    , G_DERIVED_QUALIFIER_FLAG_TBL_Q    LIMIT nROWS;     -- Added for TCA
27468    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
27469 
27470    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27471    engine_debug('Inserting no rows into qp_preq_qual_tmp for each line index');
27472    END IF;
27473    IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
27474 
27475      --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_UPDATED;
27476      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27477      engine_debug('Inserting rows into qp_preq_qual_tmp for each line index: ' || G_LIST_HEADER_ID_TBL_Q.COUNT);
27478      END IF;
27479      qp_debug_util.tstart('INSERT_QUAL','Cursor INSERT_QUAL');
27480       INSERT_QUAL(
27481        G_LIST_HEADER_ID_TBL_Q
27482      , G_LIST_LINE_ID_TBL_Q
27483      , G_VALIDATED_FLAG_TBL_Q
27484      , G_APPLIED_FLAG_TBL_Q
27485      , G_ATTRIBUTE_LEVEL_TBL_Q
27486      , G_ATTRIBUTE_TYPE_TBL_Q
27487      , G_CONTEXT_TBL_Q
27488      , G_ATTRIBUTE_TBL_Q
27489      , G_VALUE_FROM_TBL_Q
27490      , G_GROUPING_NO_TBL_Q
27491      , G_QUALIFIER_PRECEDENCE_TBL_Q
27492      , G_DATATYPE_TBL_Q
27493      , G_SETUP_VALUE_FROM_TBL_Q
27494      , G_SETUP_VALUE_TO_TBL_Q
27495      , G_PRICING_ATTR_FLAG_TBL_Q
27496      , G_OPERATOR_TYPE_TBL_Q
27497      , G_LIST_TYPE_CODE_TBL_Q
27498      , G_ASK_FOR_FLAG_TBL_Q
27499      , G_QUALIFIER_TYPE_TBL_Q
27500      , G_QUALIFIER_GROUP_CNT_TBL_Q
27501      , G_OTHERS_GROUP_CNT_TBL_Q
27502      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
27503      , G_SEARCH_IND_TBL_Q
27504      , G_PRICING_STATUS_CODE_TBL_Q
27505      , G_START_DATE_ACTIVE_TBL_Q
27506      , G_END_DATE_ACTIVE_TBL_Q
27507      , G_LINE_INDEX_TBL_Q
27508      , G_PRICING_EFFECTIVE_DATE_TBL_Q
27509      , G_START_DATE_ACTIVE_FIR_TBL_Q
27510      , G_END_DATE_ACTIVE_FIR_TBL_Q
27511      , G_LINE_TYPE_CODE_TBL_Q
27512      , G_PRICING_PHASE_ID_TBL_Q
27513      , G_UNIQUE_KEY_TBL_Q
27514      , G_START_DATE_ACTIVE_TBL_H_Q
27515      , G_END_DATE_ACTIVE_TBL_H_Q
27516      , G_START_DATE_ACTIVE_SEC_TBL_Q
27517      , G_END_DATE_ACTIVE_SEC_TBL_Q
27518      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
27519      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
27520      , G_HEADER_LIMIT_EXISTS_TBL_Q
27521      , G_DERIVED_QUALIFIER_FLAG_TBL_Q
27522      , l_status_code
27523      , l_status_text);
27524      qp_debug_util.tstop('INSERT_QUAL');
27525    END IF;
27526   END LOOP;
27527   qp_debug_util.tstop('L_GET_LINE_INDEX_FOR_QUALS');
27528   CLOSE l_get_line_index_for_quals;
27529 
27530    -- Qualifier Grouping For Each Line Index
27531    Perform_Qualifier_Grouping(G_YES,p_pricing_phase_id,l_status_code,l_status_text);
27532 
27533   /* end if; */
27534 
27535    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
27536     RAISE E_ROUTINE_ERRORS;
27537    END IF;
27538 
27539  END IF; --IF (G_QUALIFIER_TEMP <> 'E' OR G_LINE_QUALIFIER_TEMP <> 'E') THEN
27540 qp_debug_util.tstart('L_PROD_QUAL_CUR','Cursor Loop l_prod_qual_cur');
27541 OPEN l_prod_qual_cur (p_pricing_phase_id, -99,-99,-99);
27542 
27543 
27544 LOOP
27545  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27546  engine_debug('In l_prod_qual_cur loop fetch');
27547  END IF;
27548  G_LIST_HEADER_ID_TBL_P.delete;
27549  G_LIST_LINE_ID_TBL_P.delete;
27550  G_LIST_LINE_TYPE_TBL_P.delete;
27551  G_LINE_INDEX_TBL_P.delete;
27552  G_VALIDATED_FLAG_TBL_P.delete;
27553  G_APPLIED_FLAG_TBL_P.delete;
27554  G_ATTRIBUTE_LEVEL_TBL_P.delete;
27555  G_ATTRIBUTE_TYPE_TBL_P.delete;
27556  G_CONTEXT_TBL_P.delete;
27557  G_ATTRIBUTE_TBL_P.delete;
27558  G_VALUE_FROM_TBL_P.delete;
27559  G_SETUP_VALUE_FROM_TBL_P.delete;
27560  G_PRICING_ATTR_FLAG_TBL_P.delete;
27561  G_PRODUCT_UOM_CODE_TBL_P.delete;
27562  G_EXCLUDER_FLAG_TBL_P.delete;
27563  G_AUTOMATIC_FLAG_TBL_P.delete;
27564  G_MODIFIER_LEVEL_CODE_TBL_P.delete;
27565  G_NET_AMOUNT_FLAG_TBL_P.delete; --IT net_amount 2720717
27566  G_PRIMARY_UOM_FLAG_TBL_P.delete;
27567  G_OPER_CALCULATION_CODE_TBL_P.delete;
27568  G_OPERAND_VALUE_TBL_P.delete;
27569  G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
27570  G_PRICING_PHASE_ID_TBL_P.delete;
27571  G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
27572  G_INCOMP_GRP_CODE_TBL_P.delete;
27573  G_PRICE_FORMULA_ID_TBL_P.delete;
27574  G_PRODUCT_PRECEDENCE_TBL_P.delete;
27575  G_OVERRIDE_FLAG_TBL_P.delete;
27576  G_BENEFIT_QTY_TBL_P.delete;
27577  G_BENEFIT_UOM_CODE_TBL_P.delete;
27578  G_SERVICE_DURATION_TBL_P.delete; -- service project
27579  G_SERVICE_PERIOD_TBL_P.delete; -- service project
27580  G_LIST_LINE_NO_TBL_P.delete;
27581  G_ACCRUAL_FLAG_TBL_P.delete;
27582  G_ACCR_CONVERSION_RATE_TBL_P.delete;
27583  G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
27584  G_ASK_FOR_FLAG_TBL_P.delete;
27585  G_LIST_TYPE_CODE_TBL_P.delete;
27586  G_HEADER_LIMIT_EXISTS_TBL_P.delete;
27587  G_LINE_LIMIT_EXISTS_TBL_P.delete;
27588  G_QUALIFIER_TYPE_TBL_P.delete;
27589  G_CHARGE_TYPE_CODE_TBL_P.delete;
27590  G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
27591  G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
27592  G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
27593  G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
27594 
27595  FETCH l_prod_qual_cur BULK COLLECT INTO
27596   G_LIST_HEADER_ID_TBL_P,
27597   G_LIST_LINE_ID_TBL_P,
27598   G_LIST_LINE_TYPE_TBL_P,
27599   G_LINE_INDEX_TBL_P,
27600   G_VALIDATED_FLAG_TBL_P,
27601   G_APPLIED_FLAG_TBL_P,
27602   G_ATTRIBUTE_LEVEL_TBL_P,
27603   G_ATTRIBUTE_TYPE_TBL_P,
27604   G_CONTEXT_TBL_P,
27605   G_ATTRIBUTE_TBL_P,
27606   G_VALUE_FROM_TBL_P,
27607   G_SETUP_VALUE_FROM_TBL_P,
27608   G_PRICING_ATTR_FLAG_TBL_P,
27609   G_PRODUCT_UOM_CODE_TBL_P,
27610   G_EXCLUDER_FLAG_TBL_P,
27611   G_AUTOMATIC_FLAG_TBL_P,
27612   G_MODIFIER_LEVEL_CODE_TBL_P,
27613   G_PRIMARY_UOM_FLAG_TBL_P,
27614   G_OPER_CALCULATION_CODE_TBL_P,
27615   G_OPERAND_VALUE_TBL_P,
27616   G_NET_AMOUNT_FLAG_TBL_P, --IT net_amount 2720717
27617   G_PRICING_GROUP_SEQUENCE_TBL_P,
27618   G_PRICING_PHASE_ID_TBL_P,
27619   G_PRICE_BREAK_TYPE_CODE_TBL_P,
27620   G_INCOMP_GRP_CODE_TBL_P,
27621   G_PRICE_FORMULA_ID_TBL_P,
27622   G_PRODUCT_PRECEDENCE_TBL_P,
27623   G_OVERRIDE_FLAG_TBL_P,
27624   G_BENEFIT_QTY_TBL_P,
27625   G_BENEFIT_UOM_CODE_TBL_P,
27626   G_SERVICE_DURATION_TBL_P, -- service project
27627   G_SERVICE_PERIOD_TBL_P, -- service project
27628   G_LIST_LINE_NO_TBL_P,
27629   G_ACCRUAL_FLAG_TBL_P,
27630   G_ACCR_CONVERSION_RATE_TBL_P,
27631   G_ESTIM_ACCRUAL_RATE_TBL_P,
27632   G_ASK_FOR_FLAG_TBL_P,
27633   G_LIST_TYPE_CODE_TBL_P,
27634   G_HEADER_LIMIT_EXISTS_TBL_P,
27635   G_LINE_LIMIT_EXISTS_TBL_P,
27636   G_QUALIFIER_TYPE_TBL_P ,
27637   G_CHARGE_TYPE_CODE_TBL_P ,
27638   G_CHARGE_SUBTYPE_CODE_TBL_P,
27639   G_ACCUM_CONTEXT_TBL_P, -- accum range break
27640   G_ACCUM_ATTRIBUTE_TBL_P, -- accum range break
27641   G_ACCUM_FLAG_TBL_P LIMIT nROWS;
27642 
27643   EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
27644 
27645 
27646    IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
27647      FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
27648 
27649       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27650       engine_debug(' Prod Qual List line id selected from big select: '||G_LIST_LINE_ID_TBL_P(I));
27651 
27652       END IF;
27653      IF (lq_line_index <> G_LINE_INDEX_TBL_P(I) OR lq_list_line_id <> G_LIST_LINE_ID_TBL_P(I)) THEN
27654        L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
27655 
27656        G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
27657        G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
27658        G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
27659        G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
27660        G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
27661        G_PRICING_STATUS_TEXT_LD_TBL(M)       :='PRODUCT_QUALIFIER_ONLY';
27662        G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
27663        G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
27664        G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
27665        G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
27666        G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
27667        G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
27668        G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_QUALIFIER_ONLY';
27669        G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
27670        G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
27671        G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
27672        G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
27673        G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I); --IT net_amount 2720717
27674        G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
27675        G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
27676        G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
27677        G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
27678        G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
27679        G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
27680        G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
27681        G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
27682        G_SERVICE_DURATION_TBL(M)             :=G_SERVICE_DURATION_TBL_P(I); -- service project
27683        G_SERVICE_PERIOD_TBL(M)               :=G_SERVICE_PERIOD_TBL_P(I); -- service project
27684        G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
27685        G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
27686        G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
27687        G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
27688        G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
27689        G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
27690        G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
27691        G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
27692        G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
27693        G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
27694        G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
27695        G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
27696        G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
27697        M:=M+1;
27698        l_satisfied_list_header_id := G_LIST_HEADER_ID_TBL_P(I);
27699        l_satisfied_lst_line_id    := G_LIST_LINE_ID_TBL_P(I);
27700        l_satisfied_line_indx      := G_LINE_INDEX_TBL_P(I);
27701        l_satisfied_line_detail_indx := L_LINE_DETAIL_INDEX;
27702        l_satisfied_incomp_code := G_INCOMP_GRP_CODE_TBL_P(I);
27703        l_satisfied_modifier_lvl_code := G_MODIFIER_LEVEL_CODE_TBL_P(I);
27704        l_satisfied_primary_uom_flag :=  G_PRIMARY_UOM_FLAG_TBL_P(I);
27705        lq_line_index := G_LINE_INDEX_TBL_P(I);
27706        lq_list_line_id := G_LIST_LINE_ID_TBL_P(I);
27707       END IF;
27708 
27709 	   	--hw
27710 		--if l_satis_quals_opt <> 'N' then
27711        --4029027 commented out by 4455344/4489224
27712        --bug 4029027
27713        --IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
27714 
27715       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27716       engine_debug(' #2 ' );
27717       END IF;
27718         --PRODUCT ATTRIBUTES
27719         G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
27720         G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
27721         G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
27722         G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_P(I);
27723         G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_P(I);
27724         G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_P(I);
27725         G_VALUE_TO_tbl(K)                :=NULL;
27726         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
27727         G_VALIDATED_FLAG_tbl(K)          :=G_VALIDATED_FLAG_TBL_P(I);
27728         G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
27729         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
27730         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
27731         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
27732         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
27733         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
27734         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
27735         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
27736         G_GROUPING_NUMBER_tbl(K)         :=NULL;
27737         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
27738         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_ONLY';
27739         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
27740         G_DATATYPE_tbl(K)                :=NULL;
27741         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
27742         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
27743         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
27744         G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
27745         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
27746         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
27747         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
27748         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
27749         K:= K+1;
27750         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27751         engine_debug('The value of K : ' || K);
27752         END IF;
27753 
27754     IF  l_satis_quals_opt = 'Y' THEN  -- [4455344/4489224] {
27755      IF (l_satisfied_list_header_id <> -9999) THEN
27756 
27757        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27758        engine_debug('Qualifiers for List Header Id : ' || l_satisfied_list_header_id );
27759        engine_debug('Qualifiers for List Line Id : '   || l_satisfied_lst_line_id );
27760 
27761        END IF;
27762 
27763       qp_debug_util.tstart('L_GET_SATISFIED_QUALS','Cursor Loop L_GET_SATISFIED_QUALS');
27764 
27765       FOR V IN  l_get_satisfied_quals(l_satisfied_list_header_id,l_satisfied_lst_line_id, l_satisfied_line_indx)
27766       LOOP
27767         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27768         engine_debug(' Qual #3 ' );
27769         END IF;
27770         --Qualifier attributes
27771         G_LINE_INDEX_tbl(K)              :=l_satisfied_line_indx;
27772         G_ATTRIBUTE_LEVEL_tbl(K)         :=V.QUALIFIER_ATTRIBUTE_LEVEL;
27773         G_ATTRIBUTE_TYPE_tbl(K)          :=V.QUALIFIER_ATTRIBUTE_TYPE;
27774         G_CONTEXT_tbl(K)                 :=V.QUALIFIER_ATTRIBUTE_CONTEXT;
27775         G_ATTRIBUTE_tbl(K)               :=V.QUALIFIER_ATTRIBUTE;
27776         G_VALUE_FROM_tbl(K)              :=V.QUALIFIER_ATTRIBUTE_VALUE;
27777         G_VALUE_TO_tbl(K)                :=NULL;
27778         G_COMPARISON_OPERATOR_TYPE_tbl(K):=V.QUALIFIER_OPERATOR_TYPE;
27779         G_VALIDATED_FLAG_tbl(K)          :=V.VALIDATED_FLAG;
27780         G_APPLIED_FLAG_tbl(K)            :=V.APPLIED_FLAG;
27781         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
27782         G_PRICING_ATTR_FLAG_tbl(K)       :=V.QUALIFIER_PRICING_ATTR_FLAG;
27783         G_LINE_DETAIL_INDEX_tbl(K)       :=l_satisfied_line_detail_indx;
27784         G_LIST_HEADER_ID_tbl(K)          :=l_satisfied_list_header_id;
27785         G_LIST_LINE_ID_tbl(K)            :=l_satisfied_lst_line_id;
27786         G_SETUP_VALUE_FROM_tbl(K)        :=V.SETUP_VALUE_FROM;
27787         G_SETUP_VALUE_TO_tbl(K)          :=V.SETUP_VALUE_TO;
27788         G_GROUPING_NUMBER_tbl(K)         :=V.QUALIFIER_GROUPING_NO;
27789         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
27790         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_ONLY';
27791         G_QUALIFIER_PRECEDENCE_tbl(K)    :=V.QUALIFIER_PRECEDENCE;
27792         G_DATATYPE_tbl(K)                :=V.QUALIFIER_DATATYPE;
27793         G_EXCLUDER_FLAG_TBL(K)           :=NULL;
27794         G_PRODUCT_UOM_CODE_TBL(K)        :=NULL;
27795         G_QUALIFIER_TYPE_TBL(K)          :=V.QUALIFIER_TYPE;
27796         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
27797         G_INCOMP_GRP_CODE_TBL_A(K)         :=l_satisfied_incomp_code;
27798         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
27799         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=l_satisfied_modifier_lvl_code;
27800         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=l_satisfied_primary_uom_flag;
27801         K:= K+1;
27802 
27803         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27804         engine_debug('The value of K : ' || K);
27805         engine_debug('Qualifier Context : ' || v.qualifier_attribute_context);
27806         engine_debug('Qualifier Attribute : ' || v.qualifier_attribute);
27807         engine_debug('Qualifier Value : ' || v.qualifier_attribute_value);
27808         engine_debug('Qualifier List Header Id : ' || v.list_header_id);
27809         engine_debug('Qualifier List line Id : ' || v.list_line_id);
27810         engine_debug('Qualifier Type : ' || v.qualifier_type);
27811 
27812         END IF;
27813       END LOOP;
27814 
27815      qp_debug_util.tstop('L_GET_SATISFIED_QUALS');
27816 
27817       --Reset the satisfied list header and list line info
27818       l_satisfied_list_header_id := -9999;
27819       l_satisfied_lst_line_id    := -9999;
27820       l_satisfied_line_indx      := -9999;
27821       l_satisfied_line_detail_indx := -9999;
27822 
27823      END IF;
27824 
27825      end if; -- } [4455344/4489224]
27826 
27827     END LOOP;
27828    END IF;
27829   END LOOP;
27830 
27831   qp_debug_util.tstop('L_PROD_QUAL_CUR');
27832 
27833   CLOSE l_prod_qual_cur;
27834 
27835   lq_line_index              := -9999;
27836   lq_list_line_id            := -9999;
27837  qp_debug_util.tstart('L_PROD_QUAL_PRIC_CUR','Cursor Loop l_prod_qual_pric_cur');
27838  OPEN l_prod_qual_pric_cur(p_pricing_phase_id, -99,-99,-99) ;
27839 
27840 
27841  LOOP
27842  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27843  engine_debug('In l_prod_qual_pric_cur loop fetch');
27844  END IF;
27845   G_LIST_HEADER_ID_TBL_P.delete;
27846   G_LIST_LINE_ID_TBL_P.delete;
27847   G_LIST_LINE_TYPE_TBL_P.delete;
27848   G_LINE_INDEX_TBL_P.delete;
27849   G_VALIDATED_FLAG_TBL_P.delete;
27850   G_APPLIED_FLAG_TBL_P.delete;
27851   G_ATTRIBUTE_LEVEL_TBL_P.delete;
27852   G_ATTRIBUTE_TYPE_TBL_P.delete;
27853   G_CONTEXT_TBL_P.delete;
27854   G_ATTRIBUTE_TBL_P.delete;
27855   G_VALUE_FROM_TBL_P.delete;
27856   G_SETUP_VALUE_FROM_TBL_P.delete;
27857   G_PRICING_ATTR_FLAG_TBL_P.delete;
27858   G_PRODUCT_UOM_CODE_TBL_P.delete;
27859   G_EXCLUDER_FLAG_TBL_P.delete;
27860   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
27861   G_ATTRIBUTE_TYPE_TBL_PR.delete;
27862   G_CONTEXT_TBL_PR.delete;
27863   G_ATTRIBUTE_TBL_PR.delete;
27864   G_VALUE_FROM_TBL_PR.delete;
27865   G_OPERATOR_TYPE_TBL_PR.delete;
27866   G_SETUP_VALUE_FROM_TBL_PR.delete;
27867   G_SETUP_VALUE_TO_TBL_PR.delete;
27868   G_DATATYPE_TBL_PR.delete;
27869   G_AUTOMATIC_FLAG_TBL_P.delete;
27870   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
27871   G_PRIMARY_UOM_FLAG_TBL_P.delete;
27872   G_OPER_CALCULATION_CODE_TBL_P.delete;
27873   G_OPERAND_VALUE_TBL_P.delete;
27874   G_NET_AMOUNT_FLAG_TBL_P.delete; -- IT net_amount 2720717
27875   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
27876   G_PRICING_PHASE_ID_TBL_P.delete;
27877   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
27878   G_INCOMP_GRP_CODE_TBL_P.delete;
27879   G_PRICE_FORMULA_ID_TBL_P.delete;
27880   G_PRODUCT_PRECEDENCE_TBL_P.delete;
27881   G_OVERRIDE_FLAG_TBL_P.delete;
27882   G_BENEFIT_QTY_TBL_P.delete;
27883   G_BENEFIT_UOM_CODE_TBL_P.delete;
27884   G_SERVICE_DURATION_TBL_P.delete;  -- service project
27885   G_SERVICE_PERIOD_TBL_P.delete;   -- service project
27886   G_LIST_LINE_NO_TBL_P.delete;
27887   G_ACCRUAL_FLAG_TBL_P.delete;
27888   G_ACCR_CONVERSION_RATE_TBL_P.delete;
27889   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
27890   G_ASK_FOR_FLAG_TBL_P.delete;
27891   G_LIST_TYPE_CODE_TBL_P.delete;
27892   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
27893   G_LINE_LIMIT_EXISTS_TBL_P.delete;
27894   G_QUALIFIER_TYPE_TBL_P.delete;
27895   G_CHARGE_TYPE_CODE_TBL_P.delete;
27896   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
27897   G_ACCUM_CONTEXT_TBL_P.delete;   -- accum range break
27898   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- accum range break
27899   G_ACCUM_FLAG_TBL_P.delete;      -- accum range break
27900 
27901   FETCH l_prod_qual_pric_cur BULK COLLECT INTO
27902   G_LIST_HEADER_ID_TBL_P,
27903   G_LIST_LINE_ID_TBL_P,
27904   G_LIST_LINE_TYPE_TBL_P,
27905   G_LINE_INDEX_TBL_P,
27906   G_VALIDATED_FLAG_TBL_P,
27907   G_APPLIED_FLAG_TBL_P,
27908   G_ATTRIBUTE_LEVEL_TBL_P,
27909   G_ATTRIBUTE_TYPE_TBL_P,
27910   G_CONTEXT_TBL_P,
27911   G_ATTRIBUTE_TBL_P,
27912   G_VALUE_FROM_TBL_P,
27913   G_SETUP_VALUE_FROM_TBL_P,
27914   G_PRICING_ATTR_FLAG_TBL_P,
27915   G_PRODUCT_UOM_CODE_TBL_P,
27916   G_EXCLUDER_FLAG_TBL_P,
27917   G_ATTRIBUTE_LEVEL_TBL_PR,
27918   G_ATTRIBUTE_TYPE_TBL_PR,
27919   G_CONTEXT_TBL_PR,
27920   G_ATTRIBUTE_TBL_PR,
27921   G_VALUE_FROM_TBL_PR,
27922   G_SETUP_VALUE_FROM_TBL_PR,
27923   G_SETUP_VALUE_TO_TBL_PR,
27924   G_OPERATOR_TYPE_TBL_PR,
27925   G_DATATYPE_TBL_PR,
27926   G_AUTOMATIC_FLAG_TBL_P,
27927   G_MODIFIER_LEVEL_CODE_TBL_P,
27928   G_PRIMARY_UOM_FLAG_TBL_P,
27929   G_OPER_CALCULATION_CODE_TBL_P,
27930   G_OPERAND_VALUE_TBL_P,
27931   G_NET_AMOUNT_FLAG_TBL_P, -- IT net_amount 2720717
27932   G_PRICING_GROUP_SEQUENCE_TBL_P,
27933   G_PRICING_PHASE_ID_TBL_P,
27934   G_PRICE_BREAK_TYPE_CODE_TBL_P,
27935   G_INCOMP_GRP_CODE_TBL_P,
27936   G_PRICE_FORMULA_ID_TBL_P,
27937   G_PRODUCT_PRECEDENCE_TBL_P,
27938   G_OVERRIDE_FLAG_TBL_P,
27939   G_BENEFIT_QTY_TBL_P,
27940   G_BENEFIT_UOM_CODE_TBL_P,
27941   G_SERVICE_DURATION_TBL_P,  -- service project
27942   G_SERVICE_PERIOD_TBL_P,   -- service project
27943   G_LIST_LINE_NO_TBL_P,
27944   G_ACCRUAL_FLAG_TBL_P,
27945   G_ACCR_CONVERSION_RATE_TBL_P,
27946   G_ESTIM_ACCRUAL_RATE_TBL_P,
27947   G_ASK_FOR_FLAG_TBL_P,
27948   G_LIST_TYPE_CODE_TBL_P,
27949   G_HEADER_LIMIT_EXISTS_TBL_P,
27950   G_LINE_LIMIT_EXISTS_TBL_P,
27951   G_QUALIFIER_TYPE_TBL_P ,
27952   G_CHARGE_TYPE_CODE_TBL_P ,
27953   G_CHARGE_SUBTYPE_CODE_TBL_P,
27954   G_ACCUM_CONTEXT_TBL_P,   -- for accum range break
27955   G_ACCUM_ATTRIBUTE_TBL_P, -- for accum range break
27956   G_ACCUM_FLAG_TBL_P LIMIT nROWS;
27957 
27958   EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
27959 
27960    IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
27961     FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
27962 
27963         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27964         engine_debug(' Prod Qual Pric List line id selected from big select: '||G_LIST_LINE_ID_TBL_P(I) );
27965         engine_debug(' #1');
27966         END IF;
27967 
27968 
27969       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27970       engine_debug(' #2');
27971 
27972       END IF;
27973      IF (lq_line_index <> G_LINE_INDEX_TBL_P(I) OR lq_list_line_id <> G_LIST_LINE_ID_TBL_P(I)) THEN
27974         l_line_detail_index :=GET_LINE_DETAIL_INDEX;
27975 
27976         G_LINE_INDEX_LD_TBL(M )               :=G_LINE_INDEX_TBL_P(I);
27977         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
27978         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
27979         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
27980         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
27981         G_PRICING_STATUS_TEXT_LD_TBL(M)       :='PRODUCT_QUALIFIER_PRICING';
27982         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
27983         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
27984         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
27985         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
27986         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
27987         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
27988         G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_QUALIFIER_PRICING';
27989         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
27990         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
27991         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
27992         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
27993         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I); -- IT net_amount 2720717
27994         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
27995         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
27996         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
27997         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
27998         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
27999         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
28000         G_SERVICE_DURATION_TBL(M)             :=G_SERVICE_DURATION_TBL_P(I); -- service project
28001         G_SERVICE_PERIOD_TBL(M)               :=G_SERVICE_PERIOD_TBL_P(I); -- service project
28002         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
28003         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
28004         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28005         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28006         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
28007         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
28008         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
28009         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
28010         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
28011         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
28012         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
28013         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
28014         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
28015         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
28016         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
28017         M:=M+1;
28018         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28019         engine_debug(' #4');
28020         END IF;
28021         l_satisfied_list_header_id := G_LIST_HEADER_ID_TBL_P(I);
28022         l_satisfied_lst_line_id    := G_LIST_LINE_ID_TBL_P(I);
28023         l_satisfied_line_indx      := G_LINE_INDEX_TBL_P(I);
28024         l_satisfied_line_detail_indx := L_LINE_DETAIL_INDEX;
28025         l_satisfied_incomp_code := G_INCOMP_GRP_CODE_TBL_P(I);
28026         l_satisfied_modifier_lvl_code := G_MODIFIER_LEVEL_CODE_TBL_P(I);
28027         l_satisfied_primary_uom_flag :=  G_PRIMARY_UOM_FLAG_TBL_P(I);
28028         lq_line_index := G_LINE_INDEX_TBL_P(I);
28029         lq_list_line_id := G_LIST_LINE_ID_TBL_P(I);
28030        END IF;  --end if for if list_line_no_exists
28031 
28032 		--if l_satis_quals_opt <> 'N' then
28033        --bug 4029027
28034        IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
28035 
28036         --INSERT PRODUCT ATTRIBUTES
28037         G_LINE_INDEX_TBL(K)              :=G_LINE_INDEX_TBL_P(I);
28038         G_ATTRIBUTE_LEVEL_TBL(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
28039         G_ATTRIBUTE_TYPE_TBL(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
28040         G_CONTEXT_TBL(K)                 :=G_CONTEXT_TBL_P(I);
28041         G_ATTRIBUTE_TBL(K)               :=G_ATTRIBUTE_TBL_P(I);
28042         G_VALUE_FROM_TBL(K)              :=G_VALUE_FROM_TBL_P(I);
28043         G_VALUE_TO_TBL(K)                :=NULL;
28044         G_COMPARISON_OPERATOR_TYPE_TBL(K):=NULL;
28045         G_VALIDATED_FLAG_TBL(K)          :=G_VALIDATED_FLAG_TBL_P(I);
28046         G_APPLIED_FLAG_TBL(K)            :=G_APPLIED_FLAG_TBL_P(I);
28047         G_PRICING_STATUS_CODE_TBL(K)     :=G_STATUS_NEW;
28048         G_PRICING_ATTR_FLAG_TBL(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
28049         G_LINE_DETAIL_INDEX_TBL(K)       :=L_LINE_DETAIL_INDEX;
28050         G_LIST_HEADER_ID_TBL(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28051         G_LIST_LINE_ID_TBL(K)            :=G_LIST_LINE_ID_TBL_P(I);
28052         G_SETUP_VALUE_FROM_TBL(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
28053         G_SETUP_VALUE_TO_TBL(K)          :=NULL;
28054         G_GROUPING_NUMBER_TBL(K)         :=NULL;
28055         G_NO_QUALIFIERS_IN_GRP_TBL(K)    :=NULL;
28056         G_PRICING_STATUS_TEXT_TBL(K)     :='PRODUCT_QUALIFIER_PRICING';
28057         G_QUALIFIER_PRECEDENCE_TBL(K)    :=NULL;
28058         G_DATATYPE_TBL(K)                :=NULL;
28059         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28060         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28061         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
28062         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28063         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
28064         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28065         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28066         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28067         K:= K+1;
28068 
28069         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28070         engine_debug('The value of K : ' || K);
28071         END IF;
28072 
28073         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28074         engine_debug(' #5');
28075 
28076         END IF;
28077         --INSERT PRICING ATTRIBUTES
28078         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
28079         G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
28080         G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
28081         G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
28082         G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
28083         G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
28084         G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
28085         G_VALUE_TO_tbl(K)                :=NULL;
28086         G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
28087         G_VALIDATED_FLAG_tbl(K)          :=G_VALIDATED_FLAG_TBL_P(I);
28088         G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
28089         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
28090         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
28091         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28092         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28093         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28094         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
28095         G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
28096         G_GROUPING_NUMBER_tbl(K)         :=NULL;
28097         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
28098         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING';
28099         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28100         G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
28101         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28102         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28103         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
28104         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28105         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
28106         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28107         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28108         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28109         K:= K+1;
28110         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28111         engine_debug('The value of K : ' || K);
28112         END IF;
28113         END IF;
28114 
28115      IF (l_satisfied_list_header_id <> -9999) THEN
28116 
28117        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28118        engine_debug('Qualifiers for List Header Id : ' || l_satisfied_list_header_id );
28119        engine_debug('Qualifiers for List Line Id : '   || l_satisfied_lst_line_id );
28120 
28121        END IF;
28122       FOR V IN  l_get_satisfied_quals(l_satisfied_list_header_id,l_satisfied_lst_line_id, l_satisfied_line_indx)
28123       LOOP
28124         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28125         engine_debug(' Qual #3 ' );
28126         END IF;
28127         --Qualifier attributes
28128         G_LINE_INDEX_tbl(K)              :=l_satisfied_line_indx;
28129         G_ATTRIBUTE_LEVEL_tbl(K)         :=V.QUALIFIER_ATTRIBUTE_LEVEL;
28130         G_ATTRIBUTE_TYPE_tbl(K)          :=V.QUALIFIER_ATTRIBUTE_TYPE;
28131         G_CONTEXT_tbl(K)                 :=V.QUALIFIER_ATTRIBUTE_CONTEXT;
28132         G_ATTRIBUTE_tbl(K)               :=V.QUALIFIER_ATTRIBUTE;
28133         G_VALUE_FROM_tbl(K)              :=V.QUALIFIER_ATTRIBUTE_VALUE;
28134         G_VALUE_TO_tbl(K)                :=NULL;
28135         G_COMPARISON_OPERATOR_TYPE_tbl(K):=V.QUALIFIER_OPERATOR_TYPE;
28136         G_VALIDATED_FLAG_tbl(K)          :=V.VALIDATED_FLAG;
28137         G_APPLIED_FLAG_tbl(K)            :=V.APPLIED_FLAG;
28138         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
28139         G_PRICING_ATTR_FLAG_tbl(K)       :=V.QUALIFIER_PRICING_ATTR_FLAG;
28140         G_LINE_DETAIL_INDEX_tbl(K)       :=l_satisfied_line_detail_indx;
28141         G_LIST_HEADER_ID_tbl(K)          :=l_satisfied_list_header_id;
28142         G_LIST_LINE_ID_tbl(K)            :=l_satisfied_lst_line_id;
28143         G_SETUP_VALUE_FROM_tbl(K)        :=V.SETUP_VALUE_FROM;
28144         G_SETUP_VALUE_TO_tbl(K)          :=V.SETUP_VALUE_TO;
28145         G_GROUPING_NUMBER_tbl(K)         :=V.QUALIFIER_GROUPING_NO;
28146         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
28147         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING_ONLY';
28148         G_QUALIFIER_PRECEDENCE_tbl(K)    :=V.QUALIFIER_PRECEDENCE;
28149         G_DATATYPE_tbl(K)                :=V.QUALIFIER_DATATYPE;
28150         G_EXCLUDER_FLAG_TBL(K)           :=NULL;
28151         G_PRODUCT_UOM_CODE_TBL(K)        :=NULL;
28152         G_QUALIFIER_TYPE_TBL(K)          :=V.QUALIFIER_TYPE;
28153         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28154         G_INCOMP_GRP_CODE_TBL_A(K)         :=l_satisfied_incomp_code;
28155         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28156         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=l_satisfied_modifier_lvl_code;
28157         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=l_satisfied_primary_uom_flag;
28158         K:= K+1;
28159 
28160         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28161         engine_debug('The value of K : ' || K);
28162         engine_debug('Qualifier Context : ' || v.qualifier_attribute_context);
28163         engine_debug('Qualifier Attribute : ' || v.qualifier_attribute);
28164         engine_debug('Qualifier Value : ' || v.qualifier_attribute_value);
28165         engine_debug('Qualifier List Header Id : ' || v.list_header_id);
28166         engine_debug('Qualifier List line Id : ' || v.list_line_id);
28167         engine_debug('Qualifier Type : ' || v.qualifier_type);
28168 
28169         END IF;
28170       END LOOP;
28171 
28172       --Reset the satisfied list header and list line info
28173       l_satisfied_list_header_id := -9999;
28174       l_satisfied_lst_line_id    := -9999;
28175       l_satisfied_line_indx      := -9999;
28176       l_satisfied_line_detail_indx := -9999;
28177 
28178      END IF;
28179 
28180 	  end if;
28181 
28182     END LOOP;
28183    END IF;
28184  END LOOP;
28185 
28186  qp_debug_util.tstop('L_PROD_QUAL_PRIC_CUR');
28187 
28188  CLOSE l_prod_qual_pric_cur;
28189 qp_debug_util.tstart('L_INNER_QUAL_CUR','Cursor Loop L_INNER_QUAL_CUR');
28190 OPEN l_inner_qual_cur (p_pricing_phase_id, -99,-99,-99,NULL,NULL,NULL,NULL);
28191 
28192 LOOP
28193  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28194  engine_debug('In l_inner_qual_cur loop fetch');
28195 
28196  END IF;
28197  G_LIST_HEADER_ID_TBL_Q.delete;
28198  G_LIST_LINE_ID_TBL_Q.delete;
28199  G_LIST_LINE_TYPE_TBL_Q.delete;
28200  G_LINE_INDEX_TBL_Q.delete;
28201  G_AUTOMATIC_FLAG_TBL_Q.delete;
28202  G_MODIFIER_LEVEL_CODE_TBL_Q.delete;
28203  G_PRIMARY_UOM_FLAG_TBL_Q.delete;
28204  G_OPER_CALCULATION_CODE_TBL_Q.delete;
28205  G_OPERAND_TBL_Q.delete;
28206  G_NET_AMOUNT_FLAG_TBL_Q.delete; -- IT net_amount 2720717
28207  G_PRICING_GROUP_SEQUENCE_TBL_Q.delete;
28208  G_PRICING_PHASE_ID_TBL_Q.delete;
28209  G_PRICE_BREAK_TYPE_CODE_TBL_Q.delete;
28210  G_INCOMP_GRP_CODE_TBL_Q.delete;
28211  G_PRICE_FORMULA_ID_TBL_Q.delete;
28212  G_PRODUCT_PRECEDENCE_TBL_Q.delete;
28213  G_OVERRIDE_FLAG_TBL_P.delete;
28214  G_BENEFIT_QTY_TBL_P.delete;
28215  G_BENEFIT_UOM_CODE_TBL_P.delete;
28216   G_SERVICE_DURATION_TBL_P.delete;  -- service project
28217   G_SERVICE_PERIOD_TBL_P.delete;   -- service project
28218  G_LIST_LINE_NO_TBL_Q.delete;
28219  G_ACCRUAL_FLAG_TBL_Q.delete;
28220  G_ACCR_CONVERSION_RATE_TBL_Q.delete;
28221  G_ESTIM_ACCRUAL_RATE_TBL_Q.delete;
28222  G_ASK_FOR_FLAG_TBL_Q.delete;
28223  G_LIST_TYPE_CODE_TBL_Q.delete;
28224  G_QUALIFIER_TYPE_TBL_Q.delete;
28225  G_HEADER_LIMIT_EXISTS_TBL_P.delete;
28226  G_LINE_LIMIT_EXISTS_TBL_P.delete;
28227  G_CHARGE_TYPE_CODE_TBL_P.delete;
28228  G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
28229  G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
28230  G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
28231  G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
28232 
28233  FETCH l_inner_qual_cur BULK COLLECT INTO
28234  G_LIST_HEADER_ID_TBL_Q,
28235  G_LIST_LINE_ID_TBL_Q,
28236  G_LIST_LINE_TYPE_TBL_Q,
28237  G_LINE_INDEX_TBL_Q,
28238  G_AUTOMATIC_FLAG_TBL_Q,
28239  G_MODIFIER_LEVEL_CODE_TBL_Q,
28240  G_PRIMARY_UOM_FLAG_TBL_Q,
28241  G_OPER_CALCULATION_CODE_TBL_Q,
28242  G_OPERAND_TBL_Q,
28243  G_NET_AMOUNT_FLAG_TBL_Q, -- IT net_amount 2720717
28244  G_PRICING_GROUP_SEQUENCE_TBL_Q,
28245  G_PRICING_PHASE_ID_TBL_Q,
28246  G_PRICE_BREAK_TYPE_CODE_TBL_Q,
28247  G_INCOMP_GRP_CODE_TBL_Q,
28248  G_PRICE_FORMULA_ID_TBL_Q,
28249  G_PRODUCT_PRECEDENCE_TBL_Q,
28250  G_OVERRIDE_FLAG_TBL_P,
28251  G_BENEFIT_QTY_TBL_P,
28252  G_BENEFIT_UOM_CODE_TBL_P,
28253   G_SERVICE_DURATION_TBL_P,  -- service project
28254   G_SERVICE_PERIOD_TBL_P,   -- service project
28255  G_LIST_LINE_NO_TBL_Q,
28256  G_ACCRUAL_FLAG_TBL_Q,
28257  G_ACCR_CONVERSION_RATE_TBL_Q,
28258  G_ESTIM_ACCRUAL_RATE_TBL_Q,
28259  G_ASK_FOR_FLAG_TBL_Q,
28260  G_LIST_TYPE_CODE_TBL_Q,
28261  G_HEADER_LIMIT_EXISTS_TBL_P,
28262  G_LINE_LIMIT_EXISTS_TBL_P,
28263  G_QUALIFIER_TYPE_TBL_Q ,
28264  G_CHARGE_TYPE_CODE_TBL_P ,
28265  G_CHARGE_SUBTYPE_CODE_TBL_P,
28266  G_ACCUM_CONTEXT_TBL_P, -- accum range break
28267  G_ACCUM_ATTRIBUTE_TBL_P, -- accum range break
28268  G_ACCUM_FLAG_TBL_P LIMIT nROWS;
28269 
28270  EXIT WHEN G_LINE_INDEX_TBL_Q.COUNT = 0;
28271 
28272    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28273    engine_debug(' In l_inner_qual_cur Count : '||G_LIST_LINE_ID_TBL_Q.count );
28274 
28275    END IF;
28276    IF (G_LINE_INDEX_TBL_Q.COUNT > 0) THEN
28277     FOR I in G_LINE_INDEX_TBL_Q.FIRST .. G_LINE_INDEX_TBL_Q.LAST LOOP
28278         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28279         engine_debug(' In l_inner_qual_cur : '||G_LIST_LINE_ID_TBL_Q(I) );
28280 
28281         END IF;
28282      IF (lq_line_index <> G_LINE_INDEX_TBL_Q(I) OR lq_list_line_id <> G_LIST_LINE_ID_TBL_Q(I)) THEN
28283         l_line_detail_index :=GET_LINE_DETAIL_INDEX;
28284 
28285         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_Q(I);
28286         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
28287         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_Q(I);
28288         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_Q(I);
28289         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
28290         G_PRICING_STATUS_TEXT_LD_TBL(M)       :='QUALIFIER_ONLY';
28291         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_Q(I);
28292         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
28293         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
28294         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_Q(I);
28295         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_Q(I);
28296         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_Q(I);
28297         G_CREATED_FROM_SQL_TBL(M)             :='QUALIFIER_ONLY';
28298         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_Q(I);
28299         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_Q(I);
28300         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_Q(I);
28301         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_TBL_Q(I);
28302         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_Q(I); -- IT net_amount 2720717
28303         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_Q(I);
28304         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_Q(I);
28305         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_Q(I);
28306         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
28307         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
28308         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
28309         G_SERVICE_DURATION_TBL(M)             :=G_SERVICE_DURATION_TBL_P(I); -- service project
28310         G_SERVICE_PERIOD_TBL(M)               :=G_SERVICE_PERIOD_TBL_P(I); -- service project
28311         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_Q(I);
28312         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_Q(I);
28313         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_Q(I);
28314         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_Q(I);
28315         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_Q(I);
28316         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_Q(I);
28317         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_Q(I);
28318         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_Q(I);
28319         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
28320         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
28321         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
28322         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
28323         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
28324         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
28325         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
28326         M:=M+1;
28327         l_satisfied_list_header_id := G_LIST_HEADER_ID_TBL_Q(I);
28328         l_satisfied_lst_line_id    := G_LIST_LINE_ID_TBL_Q(I);
28329         l_satisfied_line_indx      := G_LINE_INDEX_TBL_Q(I);
28330         l_satisfied_line_detail_indx := L_LINE_DETAIL_INDEX;
28331         l_satisfied_incomp_code := G_INCOMP_GRP_CODE_TBL_Q(I);
28332         l_satisfied_modifier_lvl_code := G_MODIFIER_LEVEL_CODE_TBL_Q(I);
28333         l_satisfied_primary_uom_flag :=  G_PRIMARY_UOM_FLAG_TBL_Q(I);
28334         lq_line_index := G_LINE_INDEX_TBL_Q(I);
28335         lq_list_line_id := G_LIST_LINE_ID_TBL_Q(I);
28336       END IF;
28337 
28338 		if l_satis_quals_opt <> 'N' then
28339 
28340      IF (l_satisfied_list_header_id <> -9999) THEN
28341 
28342        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28343        engine_debug('Qualifiers for List Header Id : ' || l_satisfied_list_header_id );
28344        engine_debug('Qualifiers for List Line Id : '   || l_satisfied_lst_line_id );
28345 
28346        END IF;
28347       FOR V IN  l_get_satisfied_quals(l_satisfied_list_header_id,l_satisfied_lst_line_id, l_satisfied_line_indx)
28348       LOOP
28349         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28350         engine_debug(' Qual #3 ' );
28351         END IF;
28352         --Qualifier attributes
28353         G_LINE_INDEX_tbl(K)              :=l_satisfied_line_indx;
28354         G_ATTRIBUTE_LEVEL_tbl(K)         :=V.QUALIFIER_ATTRIBUTE_LEVEL;
28355         G_ATTRIBUTE_TYPE_tbl(K)          :=V.QUALIFIER_ATTRIBUTE_TYPE;
28356         G_CONTEXT_tbl(K)                 :=V.QUALIFIER_ATTRIBUTE_CONTEXT;
28357         G_ATTRIBUTE_tbl(K)               :=V.QUALIFIER_ATTRIBUTE;
28358         G_VALUE_FROM_tbl(K)              :=V.QUALIFIER_ATTRIBUTE_VALUE;
28359         G_VALUE_TO_tbl(K)                :=NULL;
28360         G_COMPARISON_OPERATOR_TYPE_tbl(K):=V.QUALIFIER_OPERATOR_TYPE;
28361         G_VALIDATED_FLAG_tbl(K)          :=V.VALIDATED_FLAG;
28362         G_APPLIED_FLAG_tbl(K)            :=V.APPLIED_FLAG;
28363         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
28364         G_PRICING_ATTR_FLAG_tbl(K)       :=V.QUALIFIER_PRICING_ATTR_FLAG;
28365         G_LINE_DETAIL_INDEX_tbl(K)       :=l_satisfied_line_detail_indx;
28366         G_LIST_HEADER_ID_tbl(K)          :=l_satisfied_list_header_id;
28367         G_LIST_LINE_ID_tbl(K)            :=l_satisfied_lst_line_id;
28368         G_SETUP_VALUE_FROM_tbl(K)        :=V.SETUP_VALUE_FROM;
28369         G_SETUP_VALUE_TO_tbl(K)          :=V.SETUP_VALUE_TO;
28370         G_GROUPING_NUMBER_tbl(K)         :=V.QUALIFIER_GROUPING_NO;
28371         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
28372         G_PRICING_STATUS_TEXT_tbl(K)     :='QUALIFIERS_ONLY';
28373         G_QUALIFIER_PRECEDENCE_tbl(K)    :=V.QUALIFIER_PRECEDENCE;
28374         G_DATATYPE_tbl(K)                :=V.QUALIFIER_DATATYPE;
28375         G_EXCLUDER_FLAG_TBL(K)           :=NULL;
28376         G_PRODUCT_UOM_CODE_TBL(K)        :=NULL;
28377         G_QUALIFIER_TYPE_TBL(K)          :=V.QUALIFIER_TYPE;
28378         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28379         G_INCOMP_GRP_CODE_TBL_A(K)         :=l_satisfied_incomp_code;
28380         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28381         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=l_satisfied_modifier_lvl_code;
28382         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=l_satisfied_primary_uom_flag;
28383         K:= K+1;
28384 
28385         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28386         engine_debug('The value of K : ' || K);
28387         engine_debug('Qualifier Context : ' || v.qualifier_attribute_context);
28388         engine_debug('Qualifier Attribute : ' || v.qualifier_attribute);
28389         engine_debug('Qualifier Value : ' || v.qualifier_attribute_value);
28390         engine_debug('Qualifier List Header Id : ' || v.list_header_id);
28391         engine_debug('Qualifier List line Id : ' || v.list_line_id);
28392         engine_debug('Qualifier Type : ' || v.qualifier_type);
28393 
28394         END IF;
28395       END LOOP;
28396 
28397       --Reset the satisfied list header and list line info
28398       l_satisfied_list_header_id := -9999;
28399       l_satisfied_lst_line_id    := -9999;
28400       l_satisfied_line_indx      := -9999;
28401       l_satisfied_line_detail_indx := -9999;
28402 
28403      END IF;
28404 
28405 	  end if;
28406 
28407     END LOOP;
28408    END IF;
28409 END LOOP;
28410 
28411 qp_debug_util.tstop('L_INNER_QUAL_CUR');
28412 CLOSE l_inner_qual_cur;
28413 
28414 lq_line_index              := -9999;
28415 lq_list_line_id            := -9999;
28416 
28417 --selecting lists that match product qttributes only
28418 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28419 engine_debug('Before l_prod_cur_mod');
28420 END IF;
28421 qp_debug_util.tstart('L_PROD_CUR','Cursor Loop L_PROD_CUR');
28422 OPEN l_prod_cur(p_pricing_phase_id);
28423 
28424 
28425 LOOP
28426   G_LIST_HEADER_ID_TBL_P.delete;
28427   G_LIST_LINE_ID_TBL_P.delete;
28428   G_LIST_LINE_TYPE_TBL_P.delete;
28429   G_LINE_INDEX_TBL_P.delete;
28430   G_VALIDATED_FLAG_TBL_P.delete;
28431   G_APPLIED_FLAG_TBL_P.delete;
28432   G_ATTRIBUTE_LEVEL_TBL_P.delete;
28433   G_ATTRIBUTE_TYPE_TBL_P.delete;
28434   G_CONTEXT_TBL_P.delete;
28435   G_ATTRIBUTE_TBL_P.delete;
28436   G_VALUE_FROM_TBL_P.delete;
28437   G_SETUP_VALUE_FROM_TBL_P.delete;
28438   G_PRICING_ATTR_FLAG_TBL_P.delete;
28439   G_PRODUCT_UOM_CODE_TBL_P.delete;
28440   G_EXCLUDER_FLAG_TBL_P.delete;
28441   G_GROUPING_NUMBER_TBL_P.delete;
28442   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
28443   G_AUTOMATIC_FLAG_TBL_P.delete;
28444   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
28445   G_PRIMARY_UOM_FLAG_TBL_P.delete;
28446   G_OPER_CALCULATION_CODE_TBL_P.delete;
28447   G_OPERAND_VALUE_TBL_P.delete;
28448   G_NET_AMOUNT_FLAG_TBL_P.delete;  -- IT net_amount 2720717
28449   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
28450   G_ASK_FOR_FLAG_TBL_P.delete;
28451   G_LIST_TYPE_CODE_TBL_P.delete;
28452   G_PRICING_PHASE_ID_TBL_P.delete;
28453   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
28454   G_INCOMP_GRP_CODE_TBL_P.delete;
28455   G_PRICE_FORMULA_ID_TBL_P.delete;
28456   G_PRODUCT_PRECEDENCE_TBL_P.delete;
28457   G_OVERRIDE_FLAG_TBL_P.delete;
28458   G_BENEFIT_QTY_TBL_P.delete;
28459   G_BENEFIT_UOM_CODE_TBL_P.delete;
28460   G_SERVICE_DURATION_TBL_P.delete;  -- service project
28461   G_SERVICE_PERIOD_TBL_P.delete;   -- service project
28462   G_LIST_LINE_NO_TBL_P.delete;
28463   G_ACCRUAL_FLAG_TBL_P.delete;
28464   G_ACCR_CONVERSION_RATE_TBL_P.delete;
28465   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
28466   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
28467   G_LINE_LIMIT_EXISTS_TBL_P.delete;
28468   G_QUALIFIER_TYPE_TBL_P.delete;
28469   G_CHARGE_TYPE_CODE_TBL_P.delete;
28470   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
28471   G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
28472   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
28473   G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
28474 
28475   FETCH l_prod_cur BULK COLLECT INTO
28476     G_LIST_HEADER_ID_TBL_P
28477   , G_LIST_LINE_ID_TBL_P
28478   , G_LIST_LINE_TYPE_TBL_P
28479   , G_LINE_INDEX_TBL_P
28480   , G_VALIDATED_FLAG_TBL_P
28481   , G_APPLIED_FLAG_TBL_P
28482   , G_ATTRIBUTE_LEVEL_TBL_P
28483   , G_ATTRIBUTE_TYPE_TBL_P
28484   , G_CONTEXT_TBL_P
28485   , G_ATTRIBUTE_TBL_P
28486   , G_VALUE_FROM_TBL_P
28487   , G_SETUP_VALUE_FROM_TBL_P
28488   , G_PRICING_ATTR_FLAG_TBL_P
28489   , G_PRODUCT_UOM_CODE_TBL_P
28490   , G_EXCLUDER_FLAG_TBL_P
28491   , G_GROUPING_NUMBER_TBL_P
28492   , G_QUALIFIER_PRECEDENCE_TBL_P
28493   , G_AUTOMATIC_FLAG_TBL_P
28494   , G_MODIFIER_LEVEL_CODE_TBL_P
28495   , G_PRIMARY_UOM_FLAG_TBL_P
28496   , G_OPER_CALCULATION_CODE_TBL_P
28497   , G_OPERAND_VALUE_TBL_P
28498   , G_NET_AMOUNT_FLAG_TBL_P  -- IT net_amount 2720717
28499   , G_PRICING_GROUP_SEQUENCE_TBL_P
28500   , G_ASK_FOR_FLAG_TBL_P
28501   , G_LIST_TYPE_CODE_TBL_P
28502   , G_PRICING_PHASE_ID_TBL_P
28503   , G_PRICE_BREAK_TYPE_CODE_TBL_P
28504   , G_INCOMP_GRP_CODE_TBL_P
28505   , G_PRICE_FORMULA_ID_TBL_P
28506   , G_PRODUCT_PRECEDENCE_TBL_P
28507   , G_OVERRIDE_FLAG_TBL_P
28508   , G_BENEFIT_QTY_TBL_P
28509   , G_BENEFIT_UOM_CODE_TBL_P
28510   , G_SERVICE_DURATION_TBL_P  -- service project
28511   , G_SERVICE_PERIOD_TBL_P   -- service project
28512   , G_LIST_LINE_NO_TBL_P
28513   , G_ACCRUAL_FLAG_TBL_P
28514   , G_ACCR_CONVERSION_RATE_TBL_P
28515   , G_ESTIM_ACCRUAL_RATE_TBL_P
28516   , G_HEADER_LIMIT_EXISTS_TBL_P
28517   , G_LINE_LIMIT_EXISTS_TBL_P
28518   , G_QUALIFIER_TYPE_TBL_P
28519   , G_CHARGE_TYPE_CODE_TBL_P
28520   , G_CHARGE_SUBTYPE_CODE_TBL_P
28521   , G_ACCUM_CONTEXT_TBL_P -- accum range break
28522   , G_ACCUM_ATTRIBUTE_TBL_P -- accum range break
28523   , G_ACCUM_FLAG_TBL_P LIMIT nROWS;
28524 
28525    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28526 
28527  IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
28528   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
28529     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28530     engine_debug('Before dup tbl loop');
28531     END IF;
28532 
28533      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28534      engine_debug('List line id selected from l_prod_cur_mod: '||g_list_line_id_TBL_P(I));
28535      engine_debug('Excluder Flag selected from big select1: '||g_excluder_flag_TBL_P(I));
28536 
28537      END IF;
28538      IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
28539         l_prod_cur_count := l_prod_cur_count + 1;
28540         l_line_detail_index := get_line_detail_index;
28541 
28542         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
28543         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
28544         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
28545         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
28546         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
28547         G_PRICING_STATUS_TEXT_LD_TBL(M)       := 'PRODUCT_ONLY';
28548         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
28549         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
28550         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
28551         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
28552         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
28553         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
28554         G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_ONLY';
28555         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
28556         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
28557         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
28558         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
28559         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I);  -- IT net_amount 2720717
28560         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
28561         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
28562         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
28563         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
28564         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
28565         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
28566         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
28567         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
28568         G_SERVICE_DURATION_TBL(M)             :=G_SERVICE_DURATION_TBL_P(I); -- service project
28569         G_SERVICE_PERIOD_TBL(M)               :=G_SERVICE_PERIOD_TBL_P(I); -- service project
28570         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28571         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28572         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
28573         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
28574         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
28575         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
28576         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
28577         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
28578         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
28579         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
28580         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
28581         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
28582         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
28583         M:=M+1;
28584         lq_line_index := g_line_index_tbl_p(I);
28585         lq_list_line_id := g_list_line_id_tbl_p(I);
28586      END IF;  --end if for if list_line_no_exists
28587 
28588 		--if l_satis_quals_opt <> 'N' then
28589        -- 4029027 commented by [4455344/4489224]
28590        --bug 4029027
28591        --IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
28592 
28593         --INSERT PRODUCT ATTRIBUTES
28594         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
28595         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(I);
28596         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(I);
28597         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(I);
28598         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(I);
28599         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(I);
28600         G_VALUE_TO_tbl(K)                := NULL;
28601         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
28602         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
28603         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
28604         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28605         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
28606         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28607         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28608         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28609         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
28610         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28611         G_GROUPING_NUMBER_tbl(K)         :=G_GROUPING_NUMBER_TBL_P(I);
28612         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
28613         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_ONLY';
28614         G_QUALIFIER_PRECEDENCE_tbl(K)    :=G_QUALIFIER_PRECEDENCE_TBL_P(I);
28615         G_DATATYPE_tbl(K)                :=NULL;
28616         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28617         engine_debug('Before Insert Excluder Flag selected from big select1: '||g_excluder_flag_TBL_P(I));
28618         END IF;
28619         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28620         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28621         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
28622         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28623         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
28624         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28625         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28626         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28627         K:= K+1;
28628  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28629 	engine_debug('The value of K : ' || K);
28630  END IF;
28631 
28632 	-- end if; [4455344/4489224]
28633 
28634   END LOOP;
28635  END IF;
28636 END LOOP;
28637 
28638 qp_debug_util.tstop('L_PROD_CUR');
28639 
28640 CLOSE l_prod_cur;
28641 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28642 engine_debug('After l_prod_cur_mod');
28643 
28644 END IF;
28645 lq_line_index              := -9999;
28646 lq_list_line_id            := -9999;
28647 
28648 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28649 engine_debug('Before l_prod_pric_cur_mod');
28650 END IF;
28651 qp_debug_util.tstart('L_PROD_PRIC_CUR','Cursor Loop L_PROD_PRIC_CUR');
28652 OPEN l_prod_pric_cur(p_pricing_phase_id);
28653 
28654 
28655 
28656 LOOP
28657   G_LIST_HEADER_ID_TBL_P.delete;
28658   G_LIST_LINE_ID_TBL_P.delete;
28659   G_LIST_LINE_TYPE_TBL_P.delete;
28660   G_LINE_INDEX_TBL_P.delete;
28661   G_VALIDATED_FLAG_TBL_P.delete;
28662   G_APPLIED_FLAG_TBL_P.delete;
28663   G_ATTRIBUTE_LEVEL_TBL_P.delete;
28664   G_ATTRIBUTE_TYPE_TBL_P.delete;
28665   G_CONTEXT_TBL_P.delete;
28666   G_ATTRIBUTE_TBL_P.delete;
28667   G_VALUE_FROM_TBL_P.delete;
28668   G_SETUP_VALUE_FROM_TBL_P.delete;
28669   G_PRICING_ATTR_FLAG_TBL_P.delete;
28670   G_PRODUCT_UOM_CODE_TBL_P.delete;
28671   G_EXCLUDER_FLAG_TBL_P.delete;
28672   G_GROUPING_NUMBER_TBL_P.delete;
28673   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
28674   G_AUTOMATIC_FLAG_TBL_P.delete;
28675   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
28676   G_PRIMARY_UOM_FLAG_TBL_P.delete;
28677   G_OPER_CALCULATION_CODE_TBL_P.delete;
28678   G_OPERAND_VALUE_TBL_P.delete;
28679   G_NET_AMOUNT_FLAG_TBL_P.delete;  -- IT net_amount 2720717
28680   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
28681   G_ASK_FOR_FLAG_TBL_P.delete;
28682   G_LIST_TYPE_CODE_TBL_P.delete;
28683   G_PRICING_PHASE_ID_TBL_P.delete;
28684   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
28685   G_INCOMP_GRP_CODE_TBL_P.delete;
28686   G_PRICE_FORMULA_ID_TBL_P.delete;
28687   G_PRODUCT_PRECEDENCE_TBL_P.delete;
28688   G_OVERRIDE_FLAG_TBL_P.delete;
28689   G_PRINT_ON_INVOICE_FLAG_TBL_P.delete;
28690   G_BENEFIT_QTY_TBL_P.delete;
28691   G_BENEFIT_UOM_CODE_TBL_P.delete;
28692   G_SERVICE_DURATION_TBL_P.delete;  -- service project
28693   G_SERVICE_PERIOD_TBL_P.delete;   -- service project
28694   G_LIST_LINE_NO_TBL_P.delete;
28695   G_ACCRUAL_FLAG_TBL_P.delete;
28696   G_ACCR_CONVERSION_RATE_TBL_P.delete;
28697   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
28698   G_QUALIFIER_TYPE_TBL_P.delete;
28699   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
28700   G_ATTRIBUTE_TYPE_TBL_PR.delete;
28701   G_CONTEXT_TBL_PR.delete;
28702   G_ATTRIBUTE_TBL_PR.delete;
28703   G_VALUE_FROM_TBL_PR.delete;
28704   G_OPERATOR_TYPE_TBL_PR.delete;
28705   G_SETUP_VALUE_FROM_TBL_PR.delete;
28706   G_SETUP_VALUE_TO_TBL_PR.delete;
28707   G_DATATYPE_TBL_PR.delete;
28708   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
28709   G_LINE_LIMIT_EXISTS_TBL_P.delete;
28710   G_CHARGE_TYPE_CODE_TBL_P.delete;
28711   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
28712   G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
28713   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
28714   G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
28715 
28716 FETCH l_prod_pric_cur BULK COLLECT INTO
28717     G_LIST_HEADER_ID_TBL_P
28718   , G_LIST_LINE_ID_TBL_P
28719   , G_LIST_LINE_TYPE_TBL_P
28720   , G_LINE_INDEX_TBL_P
28721   , G_VALIDATED_FLAG_TBL_P
28722   , G_APPLIED_FLAG_TBL_P
28723   , G_ATTRIBUTE_LEVEL_TBL_P
28724   , G_ATTRIBUTE_TYPE_TBL_P
28725   , G_CONTEXT_TBL_P
28726   , G_ATTRIBUTE_TBL_P
28727   , G_VALUE_FROM_TBL_P
28728   , G_SETUP_VALUE_FROM_TBL_P
28729   , G_PRICING_ATTR_FLAG_TBL_P
28730   , G_PRODUCT_UOM_CODE_TBL_P
28731   , G_EXCLUDER_FLAG_TBL_P
28732   , G_ATTRIBUTE_LEVEL_TBL_PR
28733   , G_ATTRIBUTE_TYPE_TBL_PR
28734   , G_CONTEXT_TBL_PR
28735   , G_ATTRIBUTE_TBL_PR
28736   , G_VALUE_FROM_TBL_PR
28737   , G_SETUP_VALUE_FROM_TBL_PR
28738   , G_SETUP_VALUE_TO_TBL_PR
28739   , G_OPERATOR_TYPE_TBL_PR
28740   , G_DATATYPE_TBL_PR
28741   , G_GROUPING_NUMBER_TBL_P
28742   , G_QUALIFIER_PRECEDENCE_TBL_P
28743   , G_AUTOMATIC_FLAG_TBL_P
28744   , G_MODIFIER_LEVEL_CODE_TBL_P
28745   , G_PRIMARY_UOM_FLAG_TBL_P
28746   , G_OPER_CALCULATION_CODE_TBL_P
28747   , G_OPERAND_VALUE_TBL_P
28748   , G_NET_AMOUNT_FLAG_TBL_P  -- IT net_amount 2720717
28749   , G_PRICING_GROUP_SEQUENCE_TBL_P
28750   , G_ASK_FOR_FLAG_TBL_P
28751   , G_LIST_TYPE_CODE_TBL_P
28752   , G_PRICING_PHASE_ID_TBL_P
28753   , G_PRICE_BREAK_TYPE_CODE_TBL_P
28754   , G_INCOMP_GRP_CODE_TBL_P
28755   , G_PRICE_FORMULA_ID_TBL_P
28756   , G_PRODUCT_PRECEDENCE_TBL_P
28757   , G_OVERRIDE_FLAG_TBL_P
28758   , G_BENEFIT_QTY_TBL_P
28759   , G_BENEFIT_UOM_CODE_TBL_P
28760   , G_SERVICE_DURATION_TBL_P  -- service project
28761   , G_SERVICE_PERIOD_TBL_P   -- service project
28762   , G_LIST_LINE_NO_TBL_P
28763   , G_ACCRUAL_FLAG_TBL_P
28764   , G_ACCR_CONVERSION_RATE_TBL_P
28765   , G_ESTIM_ACCRUAL_RATE_TBL_P
28766   , G_HEADER_LIMIT_EXISTS_TBL_P
28767   , G_LINE_LIMIT_EXISTS_TBL_P
28768   , G_QUALIFIER_TYPE_TBL_P
28769   , G_CHARGE_TYPE_CODE_TBL_P
28770   , G_CHARGE_SUBTYPE_CODE_TBL_P
28771   , G_ACCUM_CONTEXT_TBL_P -- accum range break
28772   , G_ACCUM_ATTRIBUTE_TBL_P -- accum range break
28773   , G_ACCUM_FLAG_TBL_P LIMIT nROWS;
28774 
28775    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28776 
28777   --selecting lists that match product and pricing attributes only
28778  IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
28779   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
28780     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28781     engine_debug('List line id selected from l_prod_pric_cur_mod: '||G_LIST_LINE_ID_TBL_P(I) );
28782     END IF;
28783     IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
28784         L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
28785 
28786         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
28787         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
28788         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
28789         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
28790         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
28791         G_PRICING_STATUS_TEXT_LD_TBL(M)       := 'PRODUCT_PRICING_ONLY';
28792         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
28793         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
28794         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
28795         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
28796         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
28797         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
28798         G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_PRICING_ONLY';
28799         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
28800         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
28801         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
28802         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
28803         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I);  --?? IT net_amount 2720717
28804         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
28805         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
28806         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
28807         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
28808         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
28809         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
28810         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28811         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28812         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
28813         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
28814         G_SERVICE_DURATION_TBL(M)             :=G_SERVICE_DURATION_TBL_P(I); -- service project
28815         G_SERVICE_PERIOD_TBL(M)               :=G_SERVICE_PERIOD_TBL_P(I); -- service project
28816         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
28817         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
28818         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
28819         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
28820         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
28821         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
28822         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
28823         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
28824         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
28825         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
28826         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
28827         M:=M+1;
28828         lq_line_index := g_line_index_tbl_p(I);
28829         lq_list_line_id := g_list_line_id_tbl_p(I);
28830 
28831     END IF;  --end if for is list_line_no_exists
28832 
28833 
28834 		--if l_satis_quals_opt <> 'N' then
28835        -- 4029027 commented out by [4455344/4489224]
28836        --bug 4029027
28837        --IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
28838 
28839         --INSERT PRODUCT ATTRIBUTES
28840         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
28841         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(I);
28842         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(I);
28843         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(I);
28844         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(I);
28845         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(I);
28846         G_VALUE_TO_tbl(K)                := NULL;
28847         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
28848         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
28849         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
28850         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28851         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
28852         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28853         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28854         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28855         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
28856         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28857         G_GROUPING_NUMBER_tbl(K)         :=G_GROUPING_NUMBER_TBL_P(I);
28858         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
28859         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
28860         G_QUALIFIER_PRECEDENCE_tbl(K)    :=G_QUALIFIER_PRECEDENCE_TBL_P(I);
28861         G_DATATYPE_tbl(K)                :=NULL;
28862         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28863         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28864         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
28865         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28866         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
28867         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28868         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28869         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28870         K:= K+1;
28871         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28872         engine_debug('The value of K : ' || K);
28873 
28874         END IF;
28875         --INSERT PRICING ATTRIBUTES
28876         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
28877         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
28878         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_PR(I);
28879         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_PR(I);
28880         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_PR(I);
28881         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_PR(I);
28882         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_PR(I);
28883         G_VALUE_TO_tbl(K)                := NULL;
28884         G_COMPARISON_OPERATOR_TYPE_tbl(K):= G_OPERATOR_TYPE_TBL_PR(I);
28885         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
28886         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
28887         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28888         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
28889         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28890         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28891         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28892         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
28893         G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
28894         G_GROUPING_NUMBER_tbl(K)         :=G_GROUPING_NUMBER_TBL_P(I);
28895         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
28896         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
28897         G_QUALIFIER_PRECEDENCE_tbl(K)    :=G_QUALIFIER_PRECEDENCE_TBL_P(I);
28898         G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
28899         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28900         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28901         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
28902         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
28903         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
28904         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28905         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28906         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28907         K:= K+1;
28908         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28909         engine_debug('The value of K : ' || K);
28910         END IF;
28911         END IF;
28912 
28913         -- end if; [4455344/4489224]
28914 
28915   END LOOP;
28916  END IF;
28917 END LOOP;
28918 
28919 qp_debug_util.tstop('L_PROD_PRIC_CUR');
28920 
28921 CLOSE l_prod_pric_cur;
28922 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28923 engine_debug('After l_prod_pric_cur_mod');
28924 
28925 END IF;
28926 IF(G_BLIND_DISCOUNT_PROFILE = G_YES) THEN
28927  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28928  engine_debug('In blind discount mode');
28929 
28930  END IF;
28931   lq_line_index              := -9999;
28932   lq_list_line_id            := -9999;
28933 
28934  --Select the lists that are good for anything
28935   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28936   engine_debug('Before blind cursor');
28937   END IF;
28938   qp_debug_util.tstart('L_CUR','Cursor Loop L_CUR');
28939   OPEN l_cur(p_pricing_phase_id);
28940 
28941 
28942 
28943   LOOP
28944    G_LINE_INDEX_TBL_B.delete;
28945    G_LIST_HEADER_ID_TBL_B.delete;
28946    G_LIST_LINE_ID_TBL_B.delete;
28947    G_PRICE_BREAK_TYPE_CODE_TBL_B.delete ;
28948    G_LIST_LINE_TYPE_TBL_B.delete;
28949    G_LIST_TYPE_CODE_TBL_B.delete;
28950    G_PRICING_GROUP_SEQUENCE_TBL_B.delete;
28951    G_PRICING_PHASE_ID_TBL_B.delete;
28952    G_OPER_CALCULATION_CODE_TBL_B.delete;
28953    G_OPERAND_VALUE_TBL_B.delete;
28954    G_NET_AMOUNT_FLAG_TBL_B.delete;  -- IT net_amount 2720717
28955    G_ASK_FOR_FLAG_TBL_B.delete;
28956    G_PRICE_FORMULA_ID_TBL_B.delete;
28957    G_PRODUCT_PRECEDENCE_TBL_B.delete;
28958    G_INCOMP_GRP_CODE_TBL_B.delete;
28959    G_AUTOMATIC_FLAG_TBL_B.delete;
28960    G_OVERRIDE_FLAG_TBL_B.delete;
28961    G_PRIMARY_UOM_FLAG_TBL_B.delete;
28962    G_PRINT_ON_INVOICE_FLAG_TBL_B.delete;
28963    G_MODIFIER_LEVEL_CODE_TBL_B.delete;
28964    G_BENEFIT_QTY_TBL_B.delete;
28965    G_BENEFIT_UOM_CODE_TBL_B.delete;
28966   G_SERVICE_DURATION_TBL_B.delete;  -- service project
28967   G_SERVICE_PERIOD_TBL_B.delete;   -- service project
28968    G_LIST_LINE_NO_TBL_B.delete;
28969    G_ACCRUAL_FLAG_TBL_B.delete;
28970    G_ACCR_CONVERSION_RATE_TBL_B.delete;
28971    G_ESTIM_ACCRUAL_RATE_TBL_B.delete;
28972    G_HEADER_LIMIT_EXISTS_TBL_P.delete;
28973    G_LINE_LIMIT_EXISTS_TBL_P.delete;
28974    G_CHARGE_TYPE_CODE_TBL_P.delete;
28975    G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
28976    G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
28977    G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
28978    G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
28979 
28980   FETCH l_cur BULK COLLECT INTO
28981           G_LIST_HEADER_ID_TBL_B
28982         , G_LIST_LINE_ID_TBL_B
28983         , G_LIST_LINE_TYPE_TBL_B
28984         , G_LINE_INDEX_TBL_B
28985         , G_AUTOMATIC_FLAG_TBL_B
28986         , G_MODIFIER_LEVEL_CODE_TBL_B
28987         , G_PRIMARY_UOM_FLAG_TBL_B
28988         , G_OPER_CALCULATION_CODE_TBL_B
28989         , G_OPERAND_VALUE_TBL_B
28990         , G_NET_AMOUNT_FLAG_TBL_B  -- IT net_amount 2720717
28991         , G_PRICING_GROUP_SEQUENCE_TBL_B
28992         , G_ASK_FOR_FLAG_TBL_B
28993         , G_LIST_TYPE_CODE_TBL_B
28994         , G_PRICING_PHASE_ID_TBL_B
28995         , G_PRICE_BREAK_TYPE_CODE_TBL_B
28996         , G_INCOMP_GRP_CODE_TBL_B
28997         , G_PRICE_FORMULA_ID_TBL_B
28998         , G_PRODUCT_PRECEDENCE_TBL_B
28999         , G_OVERRIDE_FLAG_TBL_B
29000         , G_BENEFIT_QTY_TBL_B
29001         , G_BENEFIT_UOM_CODE_TBL_B
29002 	, G_SERVICE_DURATION_TBL_B  -- service project
29003 	, G_SERVICE_PERIOD_TBL_B   -- service project
29004         , G_LIST_LINE_NO_TBL_B
29005         , G_ACCRUAL_FLAG_TBL_B
29006         , G_ACCR_CONVERSION_RATE_TBL_B
29007         , G_ESTIM_ACCRUAL_RATE_TBL_B
29008         , G_HEADER_LIMIT_EXISTS_TBL_P
29009         , G_LINE_LIMIT_EXISTS_TBL_P
29010         , G_CHARGE_TYPE_CODE_TBL_P
29011         , G_CHARGE_SUBTYPE_CODE_TBL_P
29012         , G_ACCUM_CONTEXT_TBL_P -- accum range break
29013         , G_ACCUM_ATTRIBUTE_TBL_P -- accum range break
29014         , G_ACCUM_FLAG_TBL_P LIMIT nROWS;
29015 
29016 	   EXIT WHEN G_LINE_INDEX_TBL_B.COUNT = 0;
29017 
29018 
29019    IF (G_LINE_INDEX_TBL_B.COUNT > 0) THEN
29020     FOR I in G_LINE_INDEX_TBL_B.FIRST .. G_LINE_INDEX_TBL_B.LAST  LOOP
29021 
29022      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29023      engine_debug('List line id selected from blind cur: '||G_LIST_LINE_ID_TBL_B(I) );
29024      END IF;
29025      IF (lq_line_index <> g_line_index_tbl_b(I) OR lq_list_line_id <> g_list_line_id_tbl_b(I)) THEN
29026         l_line_detail_index :=GET_LINE_DETAIL_INDEX;
29027         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29028         engine_debug('Getting new line detail index2 '||l_line_detail_index);
29029         END IF;
29030 
29031         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_B(I);
29032         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
29033         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_B(I);
29034         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_B(I);
29035         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
29036         G_PRICING_STATUS_TEXT_LD_TBL(M)       :='GOOD_FOR_ALL';
29037         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_B(I);
29038         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
29039         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
29040         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_B(I);
29041         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_B(I);
29042         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_B(I);
29043         G_CREATED_FROM_SQL_TBL(M)             :='GOOD_FOR_ALL';
29044         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_B(I);
29045         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_B(I);
29046         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_B(I);
29047         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_B(I);
29048         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_B(I);  -- IT net_amount 2720717
29049         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_B(I);
29050         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_B(I);
29051         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_B(I);
29052         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_B(I);
29053         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_B(I);
29054         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_B(I);
29055         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_B(I);
29056         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_B(I);
29057         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_B(I);
29058         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_B(I);
29059         G_SERVICE_DURATION_TBL(M)             :=G_SERVICE_DURATION_TBL_B(I); -- service project
29060         G_SERVICE_PERIOD_TBL(M)               :=G_SERVICE_PERIOD_TBL_B(I); -- service project
29061         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_B(I);
29062         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_B(I);
29063         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_B(I);
29064         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_B(I);
29065         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
29066         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
29067         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
29068         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
29069         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
29070         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
29071         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
29072         M:=M+1;
29073         lq_line_index := g_line_index_tbl_b(I);
29074         lq_list_line_id := g_list_line_id_tbl_b(I);
29075 
29076      END IF;
29077 
29078     END LOOP;
29079    END IF; --IF
29080   END LOOP;
29081 
29082   qp_debug_util.tstop('L_CUR');
29083 
29084   CLOSE l_cur;
29085 END IF;  --for blind discount
29086 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29087 engine_debug('After blind cursor');
29088 
29089 
29090 END IF;
29091 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
29092   --RAISE OTHERS;
29093   NULL;
29094 END IF;
29095 
29096 -- Keep it for debugging purposes
29097 /* FOR Z In 1 .. g_line_detail_index_ld_tbl.count
29098 Loop
29099 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29100 engine_debug(  '1: ' || G_LINE_DETAIL_INDEX_LD_TBL(Z));
29101 engine_debug(  '2: ' || G_LINE_DETAIL_TYPE_CODE_TBL(Z));
29102 engine_debug(  '3: ' || G_PRICE_BREAK_TYPE_CODE_TBL(Z));
29103 engine_debug(  '5: ' || G_LINE_INDEX_LD_TBL(Z)  );
29104 engine_debug(  '6: ' || G_LIST_HEADER_ID_LD_TBL(Z));
29105 engine_debug(  '7: ' || G_LIST_LINE_ID_LD_TBL(Z) );
29106 engine_debug(  '8: ' || G_LIST_LINE_TYPE_TBL(Z) );
29107 engine_debug(  '9: ' || G_LIST_TYPE_CODE_TBL(Z));
29108 engine_debug(  '10: ' || G_CREATED_FROM_SQL_TBL(Z));
29109 engine_debug(  '11: ' || G_PRICING_GROUP_SEQUENCE_TBL(Z));
29110 engine_debug(  '12: ' || G_PRICING_PHASE_ID_TBL(Z));
29111 engine_debug(  '13: ' || G_OPERAND_CALCULATION_CODE_TBL(Z));
29112 engine_debug(  '14: ' || G_OPERAND_VALUE_TBL(Z));
29113 engine_debug(  '15: ' || G_SUBSTITUTION_TYPE_CODE_TBL(Z));
29114 engine_debug(  '16: ' || G_SUBSTITUTION_VALUE_FROM_TBL(Z));
29115 engine_debug(  '17: ' || G_SUBSTITUTION_VALUE_TO_TBL(Z));
29116 engine_debug(  '18: ' || G_ASK_FOR_FLAG_TBL(Z));
29117 engine_debug(  '19: ' || G_PRICE_FORMULA_ID_TBL(Z));
29118 engine_debug(  '20: ' || G_PRICING_STATUS_CODE_LD_TBL(Z));
29119 engine_debug(  '21: ' || G_PRICING_STATUS_TEXT_LD_TBL(Z));
29120 engine_debug(  '22: ' || G_PRODUCT_PRECEDENCE_TBL(Z) );
29121 engine_debug(  '23: ' || G_INCOMP_GRP_CODE_TBL(Z));
29122 engine_debug(  '24: ' || G_PROCESSED_FLAG_LD_TBL(Z));
29123 engine_debug(  '25: ' || G_APPLIED_FLAG_LD_TBL(Z));
29124 engine_debug(  '26: ' || G_AUTOMATIC_FLAG_TBL(Z));
29125 engine_debug(  '27: ' || G_OVERRIDE_FLAG_TBL(Z));
29126 engine_debug(  '28: ' || G_PRIMARY_UOM_FLAG_TBL(Z));
29127 engine_debug(  '29: ' || G_PRINT_ON_INVOICE_FLAG_TBL(Z));
29128 engine_debug(  '30: ' || G_MODIFIER_LEVEL_CODE_TBL(Z));
29129 engine_debug(  '31: ' || G_BENEFIT_QTY_TBL(Z));
29130 engine_debug(  '32: ' || G_BENEFIT_UOM_CODE_TBL(Z));
29131 engine_debug(  '33: ' || G_LIST_LINE_NO_TBL(Z));
29132 engine_debug(  '34: ' || G_ACCRUAL_FLAG_TBL(Z));
29133 engine_debug(  '35: ' || G_ACCRUAL_CONVERSION_RATE_TBL(Z));
29134 engine_debug(  '36: ' || G_ESTIM_ACCRUAL_RATE_TBL(Z));
29135 engine_debug(  '37: ' || G_RECURRING_FLAG_TBL(Z));
29136 engine_debug(  '38: ' || G_SELECTED_VOLUME_ATTR_TBL(Z));
29137 engine_debug(  '40: ' || G_HEADER_LIMIT_EXISTS_TBL(Z));
29138 engine_debug(  '41: ' || G_LINE_LIMIT_EXISTS_TBL(Z));
29139 engine_debug(  '42: ' || G_CHARGE_TYPE_CODE_TBL(Z));
29140 engine_debug(  '43: ' || G_CHARGE_SUBTYPE_CODE_TBL(Z));
29141 engine_debug(  '44 net_amount_flag: ' || G_NET_AMOUNT_FLAG_TBL(Z));  -- IT net_amount 2720717
29142 END IF;
29143 End Loop; */
29144 
29145 IF M > 1 THEN
29146 qp_debug_util.tstart('INSERT_LDETS_PVT','Inserting into ldets INSERT_LDETS_PVT');
29147   INSERT_LDETS_PVT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
29148                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
29149                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
29150                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
29151                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
29152                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
29153                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
29154                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
29155                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
29156                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
29157                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
29158                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
29159                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
29160                  p_NET_AMOUNT_FLAG              =>G_NET_AMOUNT_FLAG_TBL,  -- IT net_amount 2720717
29161                  p_ASK_FOR_FLAG                 =>G_ASK_FOR_FLAG_TBL,
29162                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
29163                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
29164                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
29165                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
29166                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
29167                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
29168                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
29169                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
29170                  p_OVERRIDE_FLAG                =>G_OVERRIDE_FLAG_TBL,
29171                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
29172                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
29173                  p_BENEFIT_QTY                  =>G_BENEFIT_QTY_TBL,
29174                  p_BENEFIT_UOM_CODE             =>G_BENEFIT_UOM_CODE_TBL,
29175 		 p_SERVICE_DURATION             =>G_SERVICE_DURATION_TBL, -- service project
29176 		 p_SERVICE_PERIOD             =>G_SERVICE_PERIOD_TBL, -- service project
29177                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
29178                  p_ACCRUAL_FLAG                 =>G_ACCRUAL_FLAG_TBL,
29179                  p_ACCRUAL_CONVERSION_RATE      =>G_ACCRUAL_CONVERSION_RATE_TBL,
29180                  p_ESTIM_ACCRUAL_RATE           =>G_ESTIM_ACCRUAL_RATE_TBL,
29181                  p_HEADER_LIMIT_EXISTS          =>G_HEADER_LIMIT_EXISTS_TBL,
29182                  p_LINE_LIMIT_EXISTS            =>G_LINE_LIMIT_EXISTS_TBL,
29183                  p_CHARGE_TYPE_CODE            =>G_CHARGE_TYPE_CODE_TBL,
29184                  p_CHARGE_SUBTYPE_CODE         =>G_CHARGE_SUBTYPE_CODE_TBL,
29185                  p_ACCUM_CONTEXT                =>G_ACCUM_CONTEXT_TBL,   -- accum range break
29186                  p_ACCUM_ATTRIBUTE              =>G_ACCUM_ATTRIBUTE_TBL, -- accum range break
29187                  p_ACCUM_FLAG                   =>G_ACCUM_FLAG_TBL,      -- accum range break
29188                  x_status_code                  =>l_status_code,
29189                  x_status_text                  =>l_status_text
29190                  );
29191 qp_debug_util.tstop('INSERT_LDETS_PVT');
29192 END IF;
29193 
29194 IF K > 1 THEN
29195  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29196 	engine_debug('hw: k = ' || k);
29197  END IF;
29198  qp_debug_util.tstart('INSERT_LINE_ATTRS2','Inserting into line attrs INSERT_LINE_ATTRS2');
29199    INSERT_LINE_ATTRS2
29200    (    p_LINE_INDEX_tbl         =>G_LINE_INDEX_tbl,
29201         p_LINE_DETAIL_INDEX_tbl  =>G_LINE_DETAIL_INDEX_tbl,
29202         p_ATTRIBUTE_LEVEL_tbl    =>G_ATTRIBUTE_LEVEL_tbl,
29203         p_ATTRIBUTE_TYPE_tbl     =>G_ATTRIBUTE_TYPE_tbl,
29204         p_LIST_HEADER_ID_tbl     =>G_LIST_HEADER_ID_tbl,
29205         p_LIST_LINE_ID_tbl       =>G_LIST_LINE_ID_tbl,
29206         p_CONTEXT_tbl            =>G_CONTEXT_tbl,
29207         p_ATTRIBUTE_tbl          =>G_ATTRIBUTE_tbl,
29208         p_VALUE_FROM_tbl         =>G_VALUE_FROM_tbl,
29209         p_SETUP_VALUE_FROM_tbl   =>G_SETUP_VALUE_FROM_tbl,
29210         p_VALUE_TO_tbl           =>G_VALUE_TO_tbl,
29211         p_SETUP_VALUE_TO_tbl     =>G_SETUP_VALUE_TO_tbl,
29212         p_GROUPING_NUMBER_tbl    => G_GROUPING_NUMBER_tbl,
29213         p_NO_QUALIFIERS_IN_GRP_tbl      =>G_NO_QUALIFIERS_IN_GRP_tbl,
29214         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
29215         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
29216         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
29217         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
29218         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
29219         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
29220         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
29221         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
29222         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
29223         p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
29224         p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
29225         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
29226         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
29227         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
29228         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
29229         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
29230         x_status_code                   =>l_status_code,
29231         x_status_text                   =>l_status_text);
29232 
29233         IF l_status_code = FND_API.G_RET_STS_ERROR THEN
29234                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29235         END IF;
29236  qp_debug_util.tstop('INSERT_LINE_ATTRS2');
29237 END IF;
29238 
29239 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29240 engine_debug('Before Inserting attributes in excluded cursor');
29241 
29242 END IF;
29243 K := 1;
29244 
29245 /*
29246 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
29247 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
29248 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
29249 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
29250 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
29251 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
29252 
29253 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,QP_PRICING_ATTRIBUTES_N2,LIST_LINE_ID,1
29254 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,QP_PRICING_ATTRIBUTES_N2,EXCLUDER_FLAG,2
29255 
29256 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
29257 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
29258 
29259 */
29260 
29261 -- Delete Excluded Line Details Directly if the inner select returns an excluded row
29262 
29263 qp_debug_util.tstart('D_EXCLUDER','Update statement D_EXCLUDER');
29264  UPDATE qp_npreq_ldets_tmp a
29265  SET    pricing_status_code = 'D_EXCLUDER'
29266  WHERE  pricing_phase_id = p_pricing_phase_id
29267  AND    pricing_status_code = G_STATUS_NEW
29268  AND    EXISTS ( SELECT/*+ ORDERED USE_NL(c) index(c qp_preq_line_attrs_tmp_N2) index(b QP_PRICING_ATTRIBUTES_N2) l_excl_cur */
29269                  'x'
29270                  FROM  qp_pricing_attributes b,
29271                        qp_npreq_line_attrs_tmp c
29272                  WHERE b.list_line_id = a.created_from_list_line_id
29273                  AND   b.excluder_flag = G_YES
29274                  AND   b.product_attribute_context = c.context
29275                  AND   b.product_attribute = c.attribute
29276                  AND   b.product_attr_value = c.value_from
29277                  AND   c.attribute_type = G_PRODUCT_TYPE
29278                  AND   c.pricing_status_code = G_STATUS_UNCHANGED
29279                  AND   c.line_index = a.line_index);
29280 qp_debug_util.tstop('D_EXCLUDER');
29281 --selecting list line attributes that match excluder flag
29282 /* OPEN l_get_excluded_prods_cur(p_pricing_phase_id);
29283 
29284 LOOP
29285   G_LIST_HEADER_ID_TBL_P.delete;
29286   G_LIST_LINE_ID_TBL_P.delete;
29287   G_LINE_INDEX_TBL_P.delete;
29288   G_VALIDATED_FLAG_TBL_P.delete;
29289   G_APPLIED_FLAG_TBL_P.delete;
29290   G_ATTRIBUTE_LEVEL_TBL_P.delete;
29291   G_ATTRIBUTE_TYPE_TBL_P.delete;
29292   G_CONTEXT_TBL_P.delete;
29293   G_ATTRIBUTE_TBL_P.delete;
29294   G_VALUE_FROM_TBL_P.delete;
29295   G_SETUP_VALUE_FROM_TBL_P.delete;
29296   G_PRICING_ATTR_FLAG_TBL_P.delete;
29297   G_PRODUCT_UOM_CODE_TBL_P.delete;
29298   G_EXCLUDER_FLAG_TBL_P.delete;
29299   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
29300   G_LINE_DETAIL_INDEX_TBL_P.delete;
29301 
29302   FETCH l_get_excluded_prods_cur BULK COLLECT INTO
29303     G_LIST_HEADER_ID_TBL_P
29304   , G_LIST_LINE_ID_TBL_P
29305   , G_LINE_INDEX_TBL_P
29306   , G_VALIDATED_FLAG_TBL_P
29307   , G_APPLIED_FLAG_TBL_P
29308   , G_ATTRIBUTE_LEVEL_TBL_P
29309   , G_ATTRIBUTE_TYPE_TBL_P
29310   , G_CONTEXT_TBL_P
29311   , G_ATTRIBUTE_TBL_P
29312   , G_VALUE_FROM_TBL_P
29313   , G_SETUP_VALUE_FROM_TBL_P
29314   , G_PRICING_ATTR_FLAG_TBL_P
29315   , G_PRODUCT_UOM_CODE_TBL_P
29316   , G_EXCLUDER_FLAG_TBL_P
29317   , G_QUALIFIER_PRECEDENCE_TBL_P
29318   , G_LINE_DETAIL_INDEX_TBL_P LIMIT nROWS;
29319 
29320    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
29321 
29322  IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
29323   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
29324         --INSERT PRODUCT ATTRIBUTES
29325     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29326 	   engine_debug('Inserting attributes in excluded cursor : ' || G_LINE_INDEX_TBL_P(I));
29327     END IF;
29328         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
29329         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(I);
29330         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(I);
29331         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(I);
29332         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(I);
29333         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(I);
29334         G_VALUE_TO_tbl(K)                := NULL;
29335         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
29336         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
29337         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
29338         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
29339         G_PRICING_ATTR_FLAG_tbl(K)       := G_PRICING_ATTR_FLAG_TBL_P(I);
29340         G_LINE_DETAIL_INDEX_tbl(K)       := G_LINE_DETAIL_INDEX_TBL_P(I);
29341         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(I);
29342         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(I);
29343         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_P(I);
29344         G_SETUP_VALUE_TO_tbl(K)          := NULL;
29345         G_GROUPING_NUMBER_tbl(K)         := NULL;
29346         G_NO_QUALIFIERS_IN_GRP_tbl(K)    := NULL;
29347         G_PRICING_STATUS_TEXT_tbl(K)     := 'EXCLUDED_PRODUCT_ONLY';
29348         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_P(I);
29349         G_DATATYPE_tbl(K)                := NULL;
29350         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(I);
29351         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(I);
29352         G_QUALIFIER_TYPE_TBL(K)          := NULL;
29353         G_PRICING_PHASE_ID_TBL_A(K)        := p_pricing_phase_id;
29354         G_INCOMP_GRP_CODE_TBL_A(K)         :=NULL;
29355         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
29356         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=NULL;
29357         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=NULL;
29358         K:= K+1;
29359   END LOOP;
29360  END IF;
29361 END LOOP;
29362 CLOSE l_get_excluded_prods_cur; */
29363 
29364 
29365 IF K > 1 THEN
29366 qp_debug_util.tstart('INSERT_LINE_ATTRS2','Inserting into line attrs INSERT_LINE_ATTRS2');
29367    INSERT_LINE_ATTRS2
29368    (    p_LINE_INDEX_tbl         =>G_LINE_INDEX_tbl,
29369         p_LINE_DETAIL_INDEX_tbl  =>G_LINE_DETAIL_INDEX_tbl,
29370         p_ATTRIBUTE_LEVEL_tbl    =>G_ATTRIBUTE_LEVEL_tbl,
29371         p_ATTRIBUTE_TYPE_tbl     =>G_ATTRIBUTE_TYPE_tbl,
29372         p_LIST_HEADER_ID_tbl     =>G_LIST_HEADER_ID_tbl,
29373         p_LIST_LINE_ID_tbl       =>G_LIST_LINE_ID_tbl,
29374         p_CONTEXT_tbl            =>G_CONTEXT_tbl,
29375         p_ATTRIBUTE_tbl          =>G_ATTRIBUTE_tbl,
29376         p_VALUE_FROM_tbl         =>G_VALUE_FROM_tbl,
29377         p_SETUP_VALUE_FROM_tbl   =>G_SETUP_VALUE_FROM_tbl,
29378         p_VALUE_TO_tbl           =>G_VALUE_TO_tbl,
29379         p_SETUP_VALUE_TO_tbl     =>G_SETUP_VALUE_TO_tbl,
29380         p_GROUPING_NUMBER_tbl    => G_GROUPING_NUMBER_tbl,
29381         p_NO_QUALIFIERS_IN_GRP_tbl      =>G_NO_QUALIFIERS_IN_GRP_tbl,
29382         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
29383         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
29384         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
29385         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
29386         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
29387         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
29388         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
29389         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
29390         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
29391         p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
29392         p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
29393         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
29394         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
29395         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
29396         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
29397         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
29398         x_status_code                   =>l_status_code,
29399         x_status_text                   =>l_status_text);
29400 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
29401                 RAISE E_ROUTINE_ERRORS;
29402 END IF;
29403 qp_debug_util.tstop('INSERT_LINE_ATTRS2');
29404 END IF;
29405 
29406 --Reset_all_tbls;
29407 Reset_All_Tbls(l_status_code ,l_status_text );
29408 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
29409  RAISE E_ROUTINE_ERRORS;
29410 END IF;
29411 
29412 
29413 EXCEPTION
29414   WHEN E_ROUTINE_ERRORS THEN
29415      x_status_code := FND_API.G_RET_STS_ERROR;
29416      x_status_text := l_status_text;
29417      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29418      engine_debug(l_status_text);
29419      END IF;
29420   WHEN OTHERS THEN
29421       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29422       engine_debug('< In Select_modifiers>: '||SQLERRM);
29423       END IF;
29424       x_status_code := FND_API.G_RET_STS_ERROR;
29425       x_status_text := l_routine||' '||SQLERRM;
29426 END SELECT_MODIFIERS;
29427 
29428 procedure SELECT_PRICE_LIST_LINES_PAT(
29429      p_pricing_phase_id   IN  NUMBER,
29430      p_freeze_override_flag IN VARCHAR2,
29431      p_search_path IN NUMBER,
29432      p_control_rec IN CONTROL_RECORD_TYPE,
29433      x_status_code OUT NOCOPY       VARCHAR2,
29434      x_status_text OUT NOCOPY       VARCHAR2
29435 )
29436 AS
29437 
29438      l_trunct_sysdate DATE := TRUNC(sysdate);
29439 
29440     -- Path -> Header First - Line Next
29441 
29442     CURSOR l_pat_header_cache_p1 IS
29443     SELECT /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N3)
29444                index(qppat QP_NPREQ_LINE_PATRNS_T_N2)
29445 	       index(qprs qp_pte_source_systems_u2)
29446 	       l_pat_header_cache_p1 */
29447        DISTINCT atrgrps.LIST_HEADER_ID,
29448          atrgrps.LIST_LINE_ID,
29449          qplines.LINE_INDEX,
29450          atrgrps.pattern_id  MATCHED_PATTRN_ID,
29451          p_pricing_phase_id,
29452          atrgrps.HASH_KEY  MATCHED_HASH_KEY,
29453 	 G_STAGE_CACHE_PL_HDR STAGE,
29454  	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
29455          atrgrps.source_system_code,
29456          atrgrps.HEADER_QUALS_EXIST_FLAG,
29457          atrgrps.GROUPING_NO,
29458          atrgrps.EQ_FLAG,
29459          qplines.VALIDATED_FLAG,
29460          atrgrps.MODIFIER_LEVEL_CODE,
29461          atrgrps.other_oprt_count,
29462          atrgrps.null_other_oprt_count,
29463          atrgrps.LIST_TYPE_CODE,
29464          atrgrps.ASK_FOR_FLAG,
29465          atrgrps.HEADER_LIMIT_EXISTS,
29466          atrgrps.LINE_LIMIT_EXISTS,
29467          NULL CURRENCY_DETAIL_ID,
29468          atrgrps.CURRENCY_HEADER_ID,
29469          NULL SELLING_ROUNDING_FACTOR,
29470          atrgrps.CURRENCY_CODE   BASE_CURRENCY_CODE,
29471          qplines.pricing_effective_date,
29472 	 atrgrps.descendents_quals_exist,
29473 	 atrgrps.effective_precedence --bug 12731268
29474     FROM (SELECT /*+ dynamic_sampling(1) */ *
29475           FROM qp_npreq_lines_tmp
29476           WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED) --check this condition
29477           AND nvl(validated_flag,G_NO) = G_NO) qplines,
29478         qp_npreq_line_patrns_tmp qppattmp,
29479 	qp_secu_attr_groups_v atrgrps,
29480         --qp_attribute_groups atrgrps,
29481 	qp_pte_source_systems qprs
29482         --qp_price_req_sources_v qprs
29483     WHERE qppattmp.line_index = qplines.line_index
29484       AND atrgrps.pricing_phase_id = p_pricing_phase_id
29485       AND atrgrps.list_line_id = -1
29486       AND atrgrps.active_flag = G_YES
29487       AND atrgrps.pattern_id = qppattmp.pattern_id
29488       AND atrgrps.hash_key = qppattmp.hash_key
29489       AND atrgrps.pte_code = G_PTE_CODE
29490       AND atrgrps.currency_code = qplines.currency_code
29491       AND   (qplines.price_flag = G_YES OR
29492            (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
29493       AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
29494       --AND   qprs.source_system_code = atrgrps.source_system_code
29495       --AND   qprs.request_type_code = qplines.request_type_code -- check it
29496       AND   qprs.APPLICATION_SHORT_NAME = atrgrps.source_system_code
29497       AND   qprs.pte_code = G_PTE_CODE
29498       AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
29499           BETWEEN TRUNC(nvl(atrgrps.START_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,sysdate)))
29500           AND TRUNC(nvl(atrgrps.END_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,   sysdate)))
29501      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29502          BETWEEN TRUNC(NVL(atrgrps.START_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,sysdate)))
29503          AND TRUNC(NVL(atrgrps.END_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,   sysdate)))
29504       AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
29505 
29506      -- Path -> Header First -> Line Next
29507      -- select all list lines matching for product/pricing attributes for the selected headers in the first step
29508 
29509     CURSOR l_pat_line_cache_p1 IS
29510     -- check for all list lines for which header is already selected.
29511     SELECT /*+ ORDERED index(qpl QP_LIST_LINES_N16)
29512                index(qppat QP_NPREQ_LINE_PATRNS_T_N2)
29513                index(qppqual QP_PREQ_PATRN_QUAL_T_N2)
29514                l_pat_line_cache_p1 */
29515       DISTINCT qpl.LIST_HEADER_ID,
29516          qpl.LIST_LINE_ID,
29517          qplines.LINE_INDEX,
29518          qpl.PATTERN_ID  MATCHED_PATTRN_ID,
29519          p_pricing_phase_id,
29520          qpl.HASH_KEY  MATCHED_HASH_KEY,
29521 	 G_STAGE_CACHE_PL_LIN STAGE,
29522 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
29523          qppqual.source_system_code,
29524          decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
29525          -1 GROUPING_NO,
29526          qpl.EQ_FLAG,
29527          qplines.VALIDATED_FLAG,
29528          qpl.MODIFIER_LEVEL_CODE,
29529          qpl.null_other_oprt_count,
29530          qppqual.list_type_code,
29531 	 qppqual.ask_for_flag,
29532 	 qppqual.HEADER_LIMIT_EXISTS, -- HEADER_LIMIT_EXISTS
29533 	 qppqual.LINE_LIMIT_EXISTS, -- LINE_LIMIT_EXISTS,
29534          qpl.BREAK_UOM_CODE,
29535          qpl.BREAK_UOM_CONTEXT,
29536          qpl.BREAK_UOM_ATTRIBUTE,
29537          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
29538          qppqual.CURRENCY_DETAIL_ID,
29539          qppqual.CURRENCY_HEADER_ID,
29540          qppqual.SELLING_ROUNDING_FACTOR,
29541          qppqual.BASE_CURRENCY_CODE,
29542 	 qplines.pricing_effective_date,
29543 	 QPL.PRICE_BREAK_TYPE_CODE,
29544 	 'N' descendents_quals_exist
29545     FROM qp_npreq_lines_tmp qplines,
29546          qp_npreq_line_patrns_tmp qppat,
29547 	 qp_preq_patrn_qual_tmp qppqual,
29548 	 qp_list_lines qpl
29549     WHERE qplines.processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
29550       AND nvl(qplines.validated_flag,G_NO) = G_NO
29551       AND qppat.line_index = qplines.line_index
29552       AND qppqual.line_index = qppat.line_index
29553       AND qppqual.pricing_phase_id = p_pricing_phase_id
29554       AND qppqual.pricing_status_code = 'X'
29555       AND qppqual.stage = G_STAGE_CACHE_PL_HDR	    --check it
29556       AND qpl.pricing_phase_id = p_pricing_phase_id
29557       AND qpl.PATTERN_ID  = qppat.PATTERN_ID
29558       AND qpl.hash_key = qppat.HASH_KEY
29559       AND qpl.list_header_id = qppqual.list_header_id
29560       AND (qplines.price_flag = G_YES OR
29561           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
29562       AND qplines.list_price_override_flag in ('N', 'O')
29563       AND qpl.modifier_level_code = qplines.line_type_code -- check it
29564       AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29565            BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
29566 	    AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
29567       AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
29568 
29569 
29570      CURSOR l_pat_line_p2 IS
29571 
29572    SELECT /*+ ORDERED index(qplines QP_PREQ_LINES_TMP_U1)
29573        index(qpl QP_LIST_LINES_N17)
29574        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
29575        index(qpatrgrp QP_ATTRIBUTE_GROUPS_N1)
29576        index(qppattmp2 QP_NPREQ_LINE_PATRNS_T_N1)
29577        index(qprs qp_pte_source_systems_u2)
29578        l_pat_line_p2 */
29579       DISTINCT
29580          qpl.LIST_HEADER_ID,
29581          qpl.LIST_LINE_ID,
29582          qplines.LINE_INDEX,
29583          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
29584 	 qpatrgrp.pattern_id  AG_MATCHED_PATTRN_ID,
29585          p_pricing_phase_id,
29586          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
29587          qpatrgrp.HASH_KEY  AG_MATCHED_HASH_KEY,
29588 	 G_STAGE_CACHE_PL_LIN2 STAGE,
29589 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
29590          qpatrgrp.source_system_code,
29591 	 --DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
29592 	 DECODE(qpatrgrp.EQ_FLAG,'N','Y',DECODE(qpatrgrp.descendents_quals_exist,'Y','Y','N')) HEADER_QUALS_EXIST_FLAG,
29593          -1 qpl_grpng_num,
29594          qpatrgrp.GROUPING_NO ag_grpng_num,
29595          qpl.EQ_FLAG QPL_EQFLAG,
29596 	 qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
29597          qplines.VALIDATED_FLAG,
29598          qpl.MODIFIER_LEVEL_CODE,
29599          qpl.null_other_oprt_count qpl_other_oprt_cnt,
29600          qpatrgrp.other_oprt_count ag_other_oprt_cnt,
29601          qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
29602          qpatrgrp.LIST_TYPE_CODE,
29603          qpatrgrp.ASK_FOR_FLAG,
29604          qpatrgrp.HEADER_LIMIT_EXISTS,
29605          qpatrgrp.LINE_LIMIT_EXISTS,
29606 	 NULL CURRENCY_DETAIL_ID,
29607          NULL CURRENCY_HEADER_ID,
29608          NULL SELLING_ROUNDING_FACTOR,
29609          qpatrgrp.CURRENCY_CODE   BASE_CURRENCY_CODE,
29610          qplines.pricing_effective_date,
29611          qpl.BREAK_UOM_CODE,
29612          qpl.BREAK_UOM_CONTEXT,
29613          qpl.BREAK_UOM_ATTRIBUTE,
29614          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
29615 	 qpl.PRICE_BREAK_TYPE_CODE,
29616          qpatrgrp.descendents_quals_exist,
29617 	 qpatrgrp.effective_precedence --bug 12731268
29618    FROM qp_npreq_lines_tmp qplines,
29619         qp_npreq_line_patrns_tmp qppattmp1,
29620 	qp_list_lines qpl,
29621 	qp_secu_attr_groups_v qpatrgrp,
29622 	--qp_attribute_groups qpatrgrp,
29623 	qp_pte_source_systems qprs,
29624         --qp_price_req_sources_v qprs,
29625         qp_npreq_line_patrns_tmp qppattmp2
29626    WHERE qplines.processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED) --check this condition
29627      AND nvl(qplines.validated_flag,G_NO) = G_NO
29628      AND   (qplines.price_flag = G_YES OR
29629           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
29630      AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
29631      AND qppattmp1.line_index = qplines.line_index
29632      AND qpl.pricing_phase_id = p_pricing_phase_id
29633      AND qpl.pattern_id = qppattmp1.pattern_id
29634      AND qpl.hash_key = qppattmp1.hash_key
29635      AND qpl.pte_code = G_PTE_CODE
29636      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
29637           BETWEEN TRUNC(nvl(qpl.start_date_active,nvl(qplines.pricing_effective_date,sysdate)))
29638 	   AND TRUNC(nvl(qpl.end_date_active,nvl(qplines.pricing_effective_date,sysdate)))
29639      AND qpatrgrp.list_header_id = qpl.list_header_id
29640      AND qpatrgrp.pricing_phase_id = p_pricing_phase_id
29641      AND qpatrgrp.currency_code = qplines.currency_code
29642      AND qpatrgrp.active_flag = G_YES
29643      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
29644            BETWEEN TRUNC(nvl(qpatrgrp.START_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,sysdate)))
29645            AND TRUNC(nvl(qpatrgrp.END_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,   sysdate)))
29646      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29647          BETWEEN TRUNC(NVL(qpatrgrp.START_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,sysdate)))
29648          AND TRUNC(NVL(qpatrgrp.END_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,   sysdate)))
29649      --AND qprs.source_system_code = qpatrgrp.source_system_code
29650      --AND qprs.request_type_code = qplines.request_type_code -- check it
29651      AND qprs.APPLICATION_SHORT_NAME = qpatrgrp.source_system_code
29652      AND qprs.pte_code = G_PTE_CODE
29653      AND qppattmp2.line_index = qplines.line_index
29654      AND qppattmp2.pattern_id = qpatrgrp.pattern_id
29655      AND qppattmp2.hash_key = qpatrgrp.hash_key
29656      AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
29657 
29658 
29659   -- Multi Currency Cursors
29660 
29661    -- Path - Line First Header Next
29662   -- Selecting all the price list lines which are matching in pattern
29663 
29664      CURSOR l_pat_line_curr_p2 IS
29665 
29666    SELECT /*+ ORDERED index(QCDT QP_CURRENCY_DETAILS_N2)
29667        index(qplines QP_PREQ_LINES_TMP_U1)
29668        index(qpl QP_LIST_LINES_N17)
29669        index(qppattmp1 QP_NPREQ_LINE_PATRNS_T_N2)
29670        index(qpatrgrp QP_ATTRIBUTE_GROUPS_N1)
29671        index(qppattmp2 QP_NPREQ_LINE_PATRNS_T_N1)
29672        index(qprs qp_pte_source_systems_u2)
29673        l_pat_line_curr_p2 */
29674       DISTINCT
29675          qpl.LIST_HEADER_ID,
29676          qpl.LIST_LINE_ID,
29677          qplines.LINE_INDEX,
29678          qpl.pattern_id  QPL_MATCHED_PATTRN_ID,
29679 	 qpatrgrp.pattern_id  AG_MATCHED_PATTRN_ID,
29680          p_pricing_phase_id,
29681          qpl.HASH_KEY  QPL_MATCHED_HASH_KEY,
29682          qpatrgrp.HASH_KEY  AG_MATCHED_HASH_KEY,
29683 	 G_STAGE_CACHE_PL_LIN2 STAGE,
29684 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
29685          qpatrgrp.source_system_code,
29686          --decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
29687 	 --DECODE(qpatrgrp.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
29688          DECODE(qpatrgrp.EQ_FLAG,'N','Y',DECODE(qpatrgrp.descendents_quals_exist,'Y','Y','N')) HEADER_QUALS_EXIST_FLAG,
29689          -1 qpl_grpng_num,
29690          qpatrgrp.GROUPING_NO ag_grpng_num,
29691          qpl.EQ_FLAG QPL_EQFLAG,
29692 	 qpatrgrp.EQ_FLAG ATRGRP_EQFLAG,
29693          qplines.VALIDATED_FLAG,
29694          qpl.MODIFIER_LEVEL_CODE,
29695          qpl.null_other_oprt_count qpl_other_oprt_cnt,
29696          qpatrgrp.other_oprt_count ag_other_oprt_cnt,
29697          qpatrgrp.null_other_oprt_count ag_null_othr_oprt_cnt,
29698 	 --qpl.other_oprt_count,
29699          --qpl.null_other_oprt_count,
29700          qpatrgrp.LIST_TYPE_CODE,
29701          qpatrgrp.ASK_FOR_FLAG,
29702          qpatrgrp.HEADER_LIMIT_EXISTS,
29703          qpatrgrp.LINE_LIMIT_EXISTS,
29704 	 QCDT.CURRENCY_DETAIL_ID,
29705          QCDT.CURRENCY_HEADER_ID,
29706          QCDT.SELLING_ROUNDING_FACTOR,
29707          qpatrgrp.CURRENCY_CODE   BASE_CURRENCY_CODE,
29708          qplines.pricing_effective_date,
29709          qpl.BREAK_UOM_CODE,
29710          qpl.BREAK_UOM_CONTEXT,
29711          qpl.BREAK_UOM_ATTRIBUTE,
29712          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
29713 	 qpl.PRICE_BREAK_TYPE_CODE,
29714          qpatrgrp.descendents_quals_exist,
29715 	 qpatrgrp.effective_precedence --bug 12731268
29716    FROM qp_npreq_lines_tmp qplines,
29717         qp_npreq_line_patrns_tmp qppattmp1,
29718 	qp_list_lines qpl,
29719 	qp_secu_attr_groups_v qpatrgrp,
29720 	--qp_attribute_groups qpatrgrp,
29721         qp_pte_source_systems qprs,
29722         --qp_price_req_sources_v qprs,
29723         qp_npreq_line_patrns_tmp qppattmp2,
29724 	QP_CURRENCY_DETAILS QCDT
29725    WHERE qplines.processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED) --check this condition
29726      AND nvl(qplines.validated_flag,G_NO) = G_NO
29727      AND   (qplines.price_flag = G_YES OR
29728           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
29729      AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
29730      AND qppattmp1.line_index = qplines.line_index
29731      AND qpl.pricing_phase_id = p_pricing_phase_id
29732      AND qpl.pattern_id = qppattmp1.pattern_id
29733      AND qpl.hash_key = qppattmp1.hash_key
29734      AND qpl.pte_code = G_PTE_CODE
29735      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29736           BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
29737 	   AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
29738      AND qpatrgrp.list_header_id = qpl.list_header_id
29739      AND qpatrgrp.pricing_phase_id = p_pricing_phase_id
29740      AND qpatrgrp.active_flag = G_YES
29741      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
29742           BETWEEN TRUNC(nvl(qpatrgrp.START_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,sysdate)))
29743           AND TRUNC(nvl(qpatrgrp.END_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,   sysdate)))
29744      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29745          BETWEEN TRUNC(NVL(qpatrgrp.START_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,sysdate)))
29746          AND TRUNC(NVL(qpatrgrp.END_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,   sysdate)))
29747      --AND qprs.source_system_code = qpatrgrp.source_system_code
29748      --AND qprs.request_type_code = qplines.request_type_code -- check it
29749      AND qprs.APPLICATION_SHORT_NAME = qpatrgrp.source_system_code
29750      AND qprs.pte_code = G_PTE_CODE
29751      AND qppattmp2.line_index = qplines.line_index
29752      AND qppattmp2.pattern_id = qpatrgrp.pattern_id
29753      AND qppattmp2.hash_key = qpatrgrp.hash_key
29754      AND qpatrgrp.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
29755      AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
29756      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29757 		TRUNC(NVL(QCDT.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29758 			AND TRUNC(NVL(QCDT.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29759      AND (
29760         (qcdt.curr_attribute_context is null
29761          and not exists
29762              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
29763 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
29764                where qcdt1.curr_attribute_context IS NOT NULL
29765 		 and qcdt1.curr_attribute_context = pa_tmp.context
29766                  and qcdt1.curr_attribute = pa_tmp.attribute
29767                  and qcdt1.curr_attribute_value = pa_tmp.value_from
29768                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
29769                  and qcdt1.to_currency_code = qcdt.to_currency_code
29770                  and qcdt1.currency_header_id = qcdt.currency_header_id
29771                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
29772                  and pa_tmp.line_index = qplines.line_index
29773                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29774 		         TRUNC(NVL(QCDT1.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29775 			AND TRUNC(NVL(QCDT1.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29776              )
29777         )
29778         OR
29779         (qcdt.curr_attribute_context is not null
29780          and qcdt.currency_detail_id =
29781              (select qcdt3.currency_detail_id
29782 	       from qp_currency_details qcdt3
29783                  where qcdt3.to_currency_code = qcdt.to_currency_code
29784                  and qcdt3.currency_header_id = qcdt.currency_header_id
29785                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29786    		        TRUNC(NVL(QCDT3.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29787 			AND TRUNC(NVL(QCDT3.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29788                  and  qcdt3.precedence =
29789              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */
29790 	       min(qcdt2.precedence)
29791 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
29792                where qcdt2.curr_attribute_context IS NOT NULL
29793 		 and qcdt2.curr_attribute_context = pa_tmp1.context
29794                  and qcdt2.curr_attribute = pa_tmp1.attribute
29795                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
29796                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
29797                  and qcdt2.to_currency_code = qcdt.to_currency_code
29798                  and qcdt2.currency_header_id = qcdt.currency_header_id
29799                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
29800                  and pa_tmp1.line_index = qplines.line_index
29801                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29802    		        TRUNC(NVL(QCDT2.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29803 			AND TRUNC(NVL(QCDT2.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29804              ))
29805         )
29806        )
29807        AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
29808 
29809      -- Path -> Header First - Line Next
29810 
29811     CURSOR l_pat_header_cache_curr_p1 IS
29812     SELECT /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N3) index(qppat QP_NPREQ_LINE_PATRNS_T_N2)
29813          index(QCDT QP_CURRENCY_DETAILS_N2)
29814 	 index(qprs qp_pte_source_systems_u2)
29815 	 l_pat_header_cache_curr_p1 */
29816        DISTINCT atrgrps.LIST_HEADER_ID,
29817          atrgrps.LIST_LINE_ID,
29818          qplines.LINE_INDEX,
29819          atrgrps.pattern_id  MATCHED_PATTRN_ID,
29820          p_pricing_phase_id,
29821          atrgrps.HASH_KEY  MATCHED_HASH_KEY,
29822 	 G_STAGE_CACHE_PL_HDR STAGE,
29823  	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
29824          atrgrps.source_system_code,
29825          atrgrps.HEADER_QUALS_EXIST_FLAG,
29826          atrgrps.GROUPING_NO,
29827          atrgrps.EQ_FLAG,
29828          qplines.VALIDATED_FLAG,
29829          atrgrps.MODIFIER_LEVEL_CODE,
29830          atrgrps.other_oprt_count,
29831          atrgrps.null_other_oprt_count,
29832          atrgrps.LIST_TYPE_CODE,
29833          atrgrps.ASK_FOR_FLAG,
29834          atrgrps.HEADER_LIMIT_EXISTS,
29835          atrgrps.LINE_LIMIT_EXISTS,
29836          QCDT.CURRENCY_DETAIL_ID,
29837          QCDT.CURRENCY_HEADER_ID,
29838          QCDT.SELLING_ROUNDING_FACTOR,
29839          atrgrps.CURRENCY_CODE   BASE_CURRENCY_CODE,
29840          qplines.pricing_effective_date,
29841          atrgrps.descendents_quals_exist,
29842 	 atrgrps.effective_precedence --bug 12731268
29843     FROM (SELECT /*+ dynamic_sampling(1) */ *
29844           FROM qp_npreq_lines_tmp
29845           WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED) --check this condition
29846           AND nvl(validated_flag,G_NO) = G_NO) qplines,
29847         qp_npreq_line_patrns_tmp qppattmp,
29848 	qp_secu_attr_groups_v atrgrps,
29849         --qp_attribute_groups atrgrps,
29850 	qp_pte_source_systems qprs,
29851         --qp_price_req_sources_v qprs,
29852 	QP_CURRENCY_DETAILS QCDT
29853     WHERE qppattmp.line_index = qplines.line_index
29854       AND atrgrps.pricing_phase_id = p_pricing_phase_id
29855       AND atrgrps.list_line_id = -1
29856       AND atrgrps.active_flag = G_YES
29857       AND atrgrps.pattern_id = qppattmp.pattern_id
29858       AND atrgrps.hash_key = qppattmp.hash_key
29859      AND  atrgrps.pte_code = G_PTE_CODE
29860      AND   (qplines.price_flag = G_YES OR
29861        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
29862      AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
29863     AND atrgrps.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID
29864     AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE
29865     AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29866    		        TRUNC(NVL(QCDT.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29867 			AND TRUNC(NVL(QCDT.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29868     AND (
29869         (qcdt.curr_attribute_context is null
29870          and not exists
29871              (select /*+ use_nl(qcdt1) LEADING(qcdt1) index(qcdt1 QP_CURRENCY_DETAILS_N2) */ 'x'
29872 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
29873                where qcdt1.curr_attribute_context IS NOT NULL
29874 		 and qcdt1.curr_attribute_context = pa_tmp.context
29875                  and qcdt1.curr_attribute = pa_tmp.attribute
29876                  and qcdt1.curr_attribute_value = pa_tmp.value_from
29877                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE
29878                  and qcdt1.to_currency_code = qcdt.to_currency_code
29879                  and qcdt1.currency_header_id = qcdt.currency_header_id
29880                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
29881                  and pa_tmp.line_index = qplines.line_index
29882                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29883    		        TRUNC(NVL(QCDT1.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29884 			AND TRUNC(NVL(QCDT1.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29885              )
29886         )
29887         OR
29888         (qcdt.curr_attribute_context is not null
29889          and qcdt.currency_detail_id =
29890              (select qcdt3.currency_detail_id
29891 	       from qp_currency_details qcdt3
29892                  where qcdt3.to_currency_code = qcdt.to_currency_code
29893                  and qcdt3.currency_header_id = qcdt.currency_header_id
29894                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29895    		        TRUNC(NVL(QCDT3.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29896 			AND TRUNC(NVL(QCDT3.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29897                  and  qcdt3.precedence =
29898              (select /*+ use_nl(qcdt2) LEADING(qcdt2) index(qcdt2 QP_CURRENCY_DETAILS_N2) */ min(qcdt2.precedence)
29899 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
29900                where qcdt2.curr_attribute_context IS NOT NULL
29901 		 and qcdt2.curr_attribute_context = pa_tmp1.context
29902                  and qcdt2.curr_attribute = pa_tmp1.attribute
29903                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
29904                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE
29905                  and qcdt2.to_currency_code = qcdt.to_currency_code
29906                  and qcdt2.currency_header_id = qcdt.currency_header_id
29907                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
29908                  and pa_tmp1.line_index = qplines.line_index
29909                  AND TRUNC(nvl(qplines.pricing_effective_date,sysdate)) BETWEEN
29910    		        TRUNC(NVL(QCDT2.START_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29911 			AND TRUNC(NVL(QCDT2.END_DATE_ACTIVE,nvl(qplines.pricing_effective_date,sysdate)))
29912              ))
29913         )
29914        )
29915      --AND   qprs.source_system_code = atrgrps.source_system_code
29916      --AND   qprs.request_type_code = qplines.request_type_code -- check it
29917      AND qprs.APPLICATION_SHORT_NAME = atrgrps.source_system_code
29918      AND qprs.pte_code = G_PTE_CODE
29919      AND TRUNC(nvl(qplines.pricing_effective_date,sysdate))
29920           BETWEEN TRUNC(nvl(atrgrps.START_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,sysdate)))
29921           AND TRUNC(nvl(atrgrps.END_DATE_ACTIVE_H,nvl(qplines.pricing_effective_date,   sysdate)))
29922      AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29923          BETWEEN TRUNC(NVL(atrgrps.START_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,sysdate)))
29924          AND TRUNC(NVL(atrgrps.END_DATE_ACTIVE_Q,nvl(qplines.pricing_effective_date,   sysdate)))
29925      AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
29926 
29927      -- Path -> Header First -> Line Next
29928      -- select all list lines matching for product/pricing attributes for the selected headers in the first step
29929 
29930     CURSOR l_pat_line_cache_curr_p1 IS
29931     -- check for all list lines for which header is already selected.
29932     SELECT /*+ ORDERED index(qpl QP_LIST_LINES_N16)
29933                index(qppat QP_NPREQ_LINE_PATRNS_T_N2)
29934                index(qppqual QP_PREQ_PATRN_QUAL_T_N2)
29935                l_pat_line_cache_curr_p1 */
29936       DISTINCT qpl.LIST_HEADER_ID,
29937          qpl.LIST_LINE_ID,
29938          qplines.LINE_INDEX,
29939          qpl.PATTERN_ID  MATCHED_PATTRN_ID,
29940          p_pricing_phase_id,
29941          qpl.HASH_KEY  MATCHED_HASH_KEY,
29942 	 G_STAGE_CACHE_PL_LIN STAGE,
29943 	 G_STATUS_UNCHANGED PRICING_STATUS_CODE,
29944          qppqual.source_system_code,
29945          decode(bitand(qpl.qualification_ind,2),2,'Y','N') HEADER_QUALS_EXIST_FLAG,
29946          -1 GROUPING_NO,
29947          qpl.EQ_FLAG,
29948          qplines.VALIDATED_FLAG,
29949          qpl.MODIFIER_LEVEL_CODE,
29950          qpl.null_other_oprt_count,
29951          qppqual.list_type_code,
29952 	 qppqual.ask_for_flag,
29953 	 qppqual.HEADER_LIMIT_EXISTS, -- HEADER_LIMIT_EXISTS
29954 	 qppqual.LINE_LIMIT_EXISTS, -- LINE_LIMIT_EXISTS,
29955          qpl.BREAK_UOM_CODE,
29956          qpl.BREAK_UOM_CONTEXT,
29957          qpl.BREAK_UOM_ATTRIBUTE,
29958          QPLINES.CURRENCY_CODE ORDER_CURRENCY,
29959          qppqual.CURRENCY_DETAIL_ID,
29960          qppqual.CURRENCY_HEADER_ID,
29961          qppqual.SELLING_ROUNDING_FACTOR,
29962          qppqual.BASE_CURRENCY_CODE,
29963 	 qplines.pricing_effective_date,
29964 	 qpl.PRICE_BREAK_TYPE_CODE,
29965 	 'N' descendents_quals_exist
29966     FROM qp_npreq_lines_tmp qplines,
29967          qp_npreq_line_patrns_tmp qppat,
29968 	 qp_preq_patrn_qual_tmp qppqual,
29969 	 qp_list_lines qpl
29970     WHERE qplines.processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
29971       AND nvl(qplines.validated_flag,G_NO) = G_NO
29972       AND qppat.line_index = qplines.line_index
29973       AND qppqual.line_index = qppat.line_index
29974       AND qppqual.pricing_phase_id = p_pricing_phase_id
29975       AND qppqual.pricing_status_code = 'X'
29976       AND qppqual.stage = G_STAGE_CACHE_PL_HDR	    --check it
29977       AND qpl.pricing_phase_id = p_pricing_phase_id
29978       AND qpl.PATTERN_ID  = qppat.PATTERN_ID
29979       AND qpl.hash_key = qppat.HASH_KEY
29980       AND qpl.list_header_id  = qppqual.list_header_id
29981       AND (qplines.price_flag = G_YES OR
29982           (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
29983       AND qplines.list_price_override_flag in ('N', 'O')
29984       AND qpl.modifier_level_code = qplines.line_type_code -- check it
29985       AND TRUNC(nvl(qplines.pricing_effective_date,   sysdate))
29986             BETWEEN TRUNC(nvl(qpl.start_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
29987 	     AND TRUNC(nvl(qpl.end_date_active,   nvl(qplines.pricing_effective_date,   sysdate)))
29988 
29989       AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0);
29990 
29991 
29992   l_limit NUMBER := 5000;
29993 
29994   TYPE l_number IS TABLE OF NUMBER INDEX BY pls_integer;
29995   l_list_header_id_tbl l_number;
29996   l_list_line_id_tbl l_number;
29997   l_matched_pattrn_id_tbl l_number;
29998   l_ag_matched_pat_id_tbl l_number;
29999   l_line_index_tbl l_number;
30000   l_pricing_phase_id_tbl l_number;
30001   l_grouping_no l_number;
30002   l_ag_grpng_no l_number;
30003   l_other_oprt_count l_number;
30004   l_ag_othr_oprt_cnt l_number;
30005   l_null_other_oprt_count l_number;
30006   l_curr_det_id l_number;
30007   l_curr_hdr_id l_number;
30008   L_SELLNG_ROUND_FTR l_number;
30009 
30010   TYPE l_string IS TABLE OF VARCHAR2(2000) INDEX BY pls_integer;
30011   l_matched_hash_key_tbl l_string;
30012   l_ag_mtchd_hash_key_tbl l_string;
30013   l_stage_tbl l_string;
30014   l_pricing_status_code_tbl l_string;
30015   l_ssc l_string;
30016   l_header_quals_exist_flag l_string;
30017   l_eq_flag l_string;
30018   l_ag_eq_flag l_string;
30019   l_validated_flag l_string;
30020   l_modf_lvl_code l_string;
30021   l_list_type_code l_string;
30022   l_ask_for_flag l_string;
30023   l_hdr_lmt_exists l_string;
30024   l_line_lmt_exists l_string;
30025   l_order_curr l_string;
30026   l_base_curr_code l_string;
30027   l_brk_uom_code l_string;
30028   l_brk_uom_ctxt l_string;
30029   l_brk_uom_attr l_string;
30030   l_descnt_quals_exist l_string;
30031   l_PRICE_BREAK_TYPE_CODE l_string;
30032   l_qual_effective_precedence l_number; -- bug 12731268
30033 
30034 
30035   TYPE l_date IS TABLE OF DATE INDEX BY pls_integer;
30036 
30037   l_prcng_effctve_dt l_date;
30038 
30039   E_ROUTINE_ERRORS EXCEPTION;
30040 
30041   l_return_status            VARCHAR2(240);
30042   L_STATUS_CODE VARCHAR2(30);
30043   L_STATUS_TEXT VARCHAR2(240);
30044 
30045   l_list_line_id             NUMBER;
30046   l_dummy                    VARCHAR2(30);
30047 
30048   l_use_multi_curr BOOLEAN := FALSE;
30049   l_loop_count NUMBER := 0;
30050 
30051   l_routine VARCHAR2(40) := 'QP_PREQ_GRP.SELECT_PRICE_LIST_LINES_PAT';
30052 
30053 BEGIN
30054 
30055   qp_debug_util.tstart('SEL_PRICE_LIST_LINES_PAT','Big Search Call Pattern - SELECT_PRICE_LIST_LINES_PAT API', false, true);
30056 
30057   x_status_code := fnd_api.g_ret_sts_success;
30058 
30059   IF G_MULTI_CURRENCY_PROFILE = 'Y' AND G_USE_MULTI_CURRENCY = 'Y' THEN
30060      l_use_multi_curr := TRUE;
30061   END IF;
30062 
30063   IF g_debug_engine = fnd_api.g_true THEN
30064      engine_debug('Path selected - '||p_search_path);
30065 
30066      IF l_use_multi_curr THEN
30067        engine_debug('Multi Currency Enabled ');
30068      ELSE
30069        engine_debug('Multi Currency Disabled ');
30070       END IF;
30071 
30072   END IF;
30073 
30074   IF g_debug_engine = fnd_api.g_true THEN
30075      engine_debug('Entering into procedure select_price_list_lines_pat');
30076   END IF;
30077 
30078   -- Take path value from the profile.
30079 
30080 
30081 
30082   IF p_search_path = 2 THEN
30083 
30084   -- Line First Header Next Path
30085 
30086     -- Line check
30087 
30088      IF l_use_multi_curr THEN
30089           qp_debug_util.tstart('BIG_SRCH_LIN_CACH_P2','Line Cache Path 2 - l_pat_line_curr_p2');
30090           OPEN l_pat_line_curr_p2;
30091      ELSE
30092           qp_debug_util.tstart('BIG_SRCH_LIN_CACH_P2','Line Cache Path 2 - l_pat_line_p2');
30093           OPEN l_pat_line_p2;
30094          -- write logic for non multi curr case
30095      END IF;
30096 
30097      LOOP
30098               l_list_header_id_tbl.DELETE;
30099 	      l_list_line_id_tbl.DELETE;
30100 	      l_line_index_tbl.DELETE;
30101 	      l_matched_pattrn_id_tbl.DELETE;
30102               l_ag_matched_pat_id_tbl.DELETE;
30103 	      l_pricing_phase_id_tbl.DELETE;
30104 	      l_matched_hash_key_tbl.DELETE;
30105 	      l_ag_mtchd_hash_key_tbl.DELETE;
30106 	      l_stage_tbl.DELETE;
30107 	      l_pricing_status_code_tbl.DELETE;
30108 	      l_ssc.DELETE;
30109 	      l_header_quals_exist_flag.DELETE;
30110 	      l_grouping_no.DELETE;
30111 	      l_ag_grpng_no.DELETE;
30112 	      l_eq_flag.DELETE;
30113 	      l_ag_eq_flag.DELETE;
30114 	      l_validated_flag.DELETE;
30115 	      l_modf_lvl_code.DELETE;
30116               l_other_oprt_count.DELETE;
30117 	      l_ag_othr_oprt_cnt.DELETE;
30118 	      l_null_other_oprt_count.DELETE;
30119               l_list_type_code.DELETE;
30120 	      l_ask_for_flag.DELETE;
30121 	      l_hdr_lmt_exists.DELETE;
30122 	      l_line_lmt_exists.DELETE;
30123 	      l_curr_det_id.DELETE;
30124 	      l_curr_hdr_id.DELETE;
30125 	      L_SELLNG_ROUND_FTR.DELETE;
30126               l_base_curr_code.DELETE;
30127 	      l_prcng_effctve_dt.DELETE;
30128               l_brk_uom_code.DELETE;
30129               l_brk_uom_ctxt.DELETE;
30130               l_brk_uom_attr.DELETE;
30131               l_order_curr.DELETE;
30132 	      l_PRICE_BREAK_TYPE_CODE.DELETE;
30133               l_descnt_quals_exist.DELETE;
30134 	      l_qual_effective_precedence.delete;  --bug 12731268
30135 
30136      IF l_use_multi_curr THEN
30137         FETCH l_pat_line_curr_p2 bulk collect
30138         INTO
30139 	      l_list_header_id_tbl,
30140 	      l_list_line_id_tbl,
30141 	      l_line_index_tbl,
30142 	      l_matched_pattrn_id_tbl,
30143               l_ag_matched_pat_id_tbl,
30144 	      l_pricing_phase_id_tbl,
30145 	      l_matched_hash_key_tbl,
30146 	      l_ag_mtchd_hash_key_tbl,
30147 	      l_stage_tbl,
30148 	      l_pricing_status_code_tbl,
30149 	      l_ssc,
30150 	      l_header_quals_exist_flag,
30151 	      l_grouping_no,
30152 	      l_ag_grpng_no,
30153 	      l_eq_flag,
30154 	      l_ag_eq_flag,
30155 	      l_validated_flag,
30156 	      l_modf_lvl_code,
30157               l_other_oprt_count,
30158 	      l_ag_othr_oprt_cnt,
30159 	      l_null_other_oprt_count,
30160               l_list_type_code,
30161 	      l_ask_for_flag,
30162 	      l_hdr_lmt_exists,
30163 	      l_line_lmt_exists,
30164 	      l_curr_det_id,
30165 	      l_curr_hdr_id,
30166 	      L_SELLNG_ROUND_FTR,
30167               l_base_curr_code,
30168 	      l_prcng_effctve_dt,
30169               l_brk_uom_code,
30170               l_brk_uom_ctxt,
30171               l_brk_uom_attr,
30172               l_order_curr,
30173               l_PRICE_BREAK_TYPE_CODE,
30174               l_descnt_quals_exist,
30175 	      l_qual_effective_precedence  --bug 12731268
30176 	      limit l_limit;
30177      ELSE
30178         FETCH l_pat_line_p2 bulk collect
30179         INTO
30180 	      l_list_header_id_tbl,
30181 	      l_list_line_id_tbl,
30182 	      l_line_index_tbl,
30183 	      l_matched_pattrn_id_tbl,
30184               l_ag_matched_pat_id_tbl,
30185 	      l_pricing_phase_id_tbl,
30186 	      l_matched_hash_key_tbl,
30187 	      l_ag_mtchd_hash_key_tbl,
30188 	      l_stage_tbl,
30189 	      l_pricing_status_code_tbl,
30190 	      l_ssc,
30191 	      l_header_quals_exist_flag,
30192 	      l_grouping_no,
30193 	      l_ag_grpng_no,
30194 	      l_eq_flag,
30195 	      l_ag_eq_flag,
30196 	      l_validated_flag,
30197 	      l_modf_lvl_code,
30198               l_other_oprt_count,
30199 	      l_ag_othr_oprt_cnt,
30200 	      l_null_other_oprt_count,
30201               l_list_type_code,
30202 	      l_ask_for_flag,
30203 	      l_hdr_lmt_exists,
30204 	      l_line_lmt_exists,
30205 	      l_curr_det_id,
30206 	      l_curr_hdr_id,
30207 	      L_SELLNG_ROUND_FTR,
30208               l_base_curr_code,
30209 	      l_prcng_effctve_dt,
30210               l_brk_uom_code,
30211               l_brk_uom_ctxt,
30212               l_brk_uom_attr,
30213               l_order_curr,
30214               l_PRICE_BREAK_TYPE_CODE,
30215               l_descnt_quals_exist,
30216 	      l_qual_effective_precedence  --bug 12731268
30217 	      limit l_limit;
30218      END IF;
30219 
30220      EXIT WHEN l_list_header_id_tbl.COUNT = 0;
30221 
30222      forall i IN 1 .. l_list_header_id_tbl.COUNT
30223          INSERT
30224 	    INTO qp_preq_patrn_qual_tmp(list_header_id,
30225 					list_line_id,
30226 					line_index,
30227 					matched_pattrn_id,
30228 					pricing_phase_id,
30229 					matched_hash_key,
30230 					stage,
30231 					pricing_status_code,
30232 					source_system_code,
30233 					header_quals_exist_flag,
30234 					grouping_no,
30235 					eq_flag,
30236 					validated_flag,
30237 					MODIFIER_LEVEL_CODE,
30238 					other_oprt_count,
30239 					null_other_oprt_count,
30240 					LIST_TYPE_CODE,
30241 					ASK_FOR_FLAG,
30242 					HEADER_LIMIT_EXISTS,
30243 					LINE_LIMIT_EXISTS,
30244 					BREAK_UOM_CODE,
30245 				        BREAK_UOM_CONTEXT,
30246 				        BREAK_UOM_ATTRIBUTE,
30247 				        ORDER_CURRENCY,
30248 				        CURRENCY_DETAIL_ID,
30249 				        CURRENCY_HEADER_ID,
30250 				        SELLING_ROUNDING_FACTOR,
30251 				        BASE_CURRENCY_CODE,
30252 					pricing_effective_date,
30253                                         PRICE_BREAK_TYPE_CODE,
30254 					qualifier_precedence
30255 					)
30256 			    SELECT DISTINCT l_list_header_id_tbl(i),
30257 					l_list_line_id_tbl(i),
30258 					l_line_index_tbl(i),
30259 					l_matched_pattrn_id_tbl(i),
30260 					l_pricing_phase_id_tbl(i),
30261 					l_matched_hash_key_tbl(i),
30262 					l_stage_tbl(i),
30263 					l_pricing_status_code_tbl(i),
30264 					l_ssc(i),
30265 					l_header_quals_exist_flag(i),
30266 					l_grouping_no(i),
30267 					l_eq_flag(i),
30268 					l_validated_flag(i),
30269 					l_modf_lvl_code(i),
30270 					l_other_oprt_count(i),
30271 					l_other_oprt_count(i),
30272 					l_list_type_code(i),
30273 					l_ask_for_flag(i),
30274 					l_hdr_lmt_exists(i),
30275 					l_line_lmt_exists(i),
30276 			                l_brk_uom_code(i),
30277 			                l_brk_uom_ctxt(i),
30278 			                l_brk_uom_attr(i),
30279 			                l_order_curr(i),
30280 				        l_curr_det_id(i),
30281 			                l_curr_hdr_id(i),
30282 			                L_SELLNG_ROUND_FTR(i),
30283 			                l_base_curr_code(i),
30284 			                l_prcng_effctve_dt(i),
30285 					l_PRICE_BREAK_TYPE_CODE(i),
30286 					l_qual_effective_precedence(i) --bug 12731268
30287 				FROM dual;
30288 
30289 
30290              forall i IN 1 .. l_list_header_id_tbl.COUNT
30291              INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
30292 					list_line_id,
30293 					line_index,
30294 					pricing_phase_id,
30295 					stage,
30296 					pricing_status_code,
30297 					source_system_code,
30298 					header_quals_exist_flag,
30299 					grouping_no,
30300 					eq_flag,
30301 					validated_flag,
30302 					MODIFIER_LEVEL_CODE,
30303 					other_oprt_count,
30304 					null_other_oprt_count,
30305 					descendents_quals_exist,
30306 					qualifier_precedence, --bug 12731268
30307 					matched_pattrn_id, -- bug 10216430
30308                                         matched_hash_key -- bug 10216430
30309 					)
30310 			    SELECT DISTINCT l_list_header_id_tbl(i),
30311 					-1, -- List line id,
30312 					l_line_index_tbl(i),
30313 					l_pricing_phase_id_tbl(i),
30314 					l_stage_tbl(i),
30315 					l_pricing_status_code_tbl(i),
30316 					l_ssc(i),
30317 					l_header_quals_exist_flag(i), -- Header Quals Exist,
30318 					l_ag_grpng_no(i),
30319 					l_ag_eq_flag(i),
30320 					l_validated_flag(i),
30321 					l_modf_lvl_code(i),
30322 					l_ag_othr_oprt_cnt(i),
30323 					l_null_other_oprt_count(i),
30324 					l_descnt_quals_exist(i),
30325 					l_qual_effective_precedence(i), --bug 12731268
30326 					l_ag_matched_pat_id_tbl(i), --  bug 10216430
30327                                         l_ag_mtchd_hash_key_tbl(i)  -- bug 10216430
30328 				FROM dual
30329 				WHERE l_ag_eq_flag(i) = 'N'
30330 				  OR l_descnt_quals_exist(i) = 'Y'
30331 				  OR l_ag_mtchd_hash_key_tbl(i)<>'BLIND'; -- bug 10216430
30332 
30333     l_loop_count := l_loop_count + 1;
30334     END LOOP;
30335 
30336     qp_debug_util.tstop('BIG_SRCH_LIN_CACH_P2');
30337 
30338      IF l_use_multi_curr THEN
30339           close l_pat_line_curr_p2;
30340      ELSE
30341           close l_pat_line_p2;
30342      END IF;
30343 
30344     qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_LIN','Populating BNQ Operators after line cache');
30345 
30346     Populate_Temp_Tables_NEQ_BTW(
30347 	    p_pricing_phase_id ,
30348 	    G_STAGE_CACHE_PL_LIN2 ,
30349 	    x_status_code ,
30350 	    x_status_text );
30351 
30352     qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_LIN');
30353 
30354 
30355    IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
30356 	RAISE E_ROUTINE_ERRORS;
30357     END IF;
30358 
30359     qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_LIN','Evaluating other operators after line cache');
30360 
30361     QP_EVALUATE_OTHER_OPERATORS(
30362 	 p_pricing_phase_id ,
30363          G_STAGE_CACHE_PL_LIN2,
30364 	 x_status_code ,
30365 	 x_status_text );
30366 
30367     qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_LIN');
30368 
30369     IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
30370 	RAISE E_ROUTINE_ERRORS;
30371     END IF;
30372 
30373     qp_debug_util.tstart('PATRN_LIST_CUR_DEL_LIN_TCA_P2',   'Header/Line deletion for TCA');
30374 
30375 	UPDATE qp_preq_patrn_qual_tmp a
30376 	SET pricing_status_code = G_DELETED_TCA
30377 	WHERE pricing_status_code = g_status_unchanged
30378 	 AND a.descendents_quals_exist = 'Y'
30379          and a.pricing_phase_id = p_pricing_phase_id
30380          and a.stage =  G_STAGE_CACHE_PL_LIN2
30381 	 AND EXISTS (
30382 	    SELECT 1
30383 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
30384 	    WHERE b.list_header_id = a.list_header_id
30385 	      AND b.list_line_id = a.list_line_id
30386               AND (b.qualifier_grouping_no = a.grouping_no
30387                    or
30388                    b.qualifier_grouping_no = -1
30389                   )
30390 	      AND b.qualify_hier_descendents_flag = 'N'
30391 	      AND c.segment_id = b.segment_id
30392 	      AND c.line_index = a.line_index
30393 	      AND c.derived_qualifier_flag = 'Y');
30394 
30395     qp_debug_util.tstop('PATRN_LIST_CUR_DEL_LIN_TCA_P2');
30396 
30397 
30398    qp_debug_util.tstart('DEL_LIN_HDR_QUAL_FAILED','Deleting lines failed in header qualiifiers');
30399 
30400     -- Deleting lines if header is not satisfied.
30401 
30402     UPDATE qp_preq_patrn_qual_tmp a
30403     SET pricing_status_code = G_DELETED_LINE
30404       WHERE pricing_phase_id = p_pricing_phase_id
30405        AND pricing_status_code = g_status_unchanged
30406        AND list_line_id <> -1
30407        AND nvl(header_quals_exist_flag,   'N') = 'Y'
30408        and a.stage =  G_STAGE_CACHE_PL_LIN2
30409        AND NOT EXISTS
30410        (SELECT /*+ index(b QP_PREQ_PATRN_QUAL_T_N2) */ 'x'
30411         FROM qp_preq_patrn_qual_tmp b
30412         WHERE b.list_header_id = a.list_header_id
30413 	AND b.line_index = a.line_index
30414         AND b.list_line_id = -1
30415         AND b.pricing_phase_id = a.pricing_phase_id
30416         AND pricing_status_code = g_status_unchanged
30417 	and b.stage =  G_STAGE_CACHE_PL_LIN2);
30418 
30419        qp_debug_util.tstop('DEL_LIN_HDR_QUAL_FAILED');
30420 
30421        qp_debug_util.tstart('BIG_SRCH_POPULATE_TMP_TBLS','Populating Temp Tables - Populate_Pat_Temp_Tables API');
30422 
30423  Populate_Pat_Temp_Tables(p_pricing_phase_id,
30424                                 G_STAGE_CACHE_PL_LIN2,
30425 				x_status_code,
30426 				x_status_text);
30427 
30428   qp_debug_util.tstop('BIG_SRCH_POPULATE_TMP_TBLS');
30429 
30430 
30431  ELSIF p_search_path = 1 THEN -- Header First - Line Next
30432 
30433       IF l_use_multi_curr THEN
30434         qp_debug_util.tstart('BIG_SRCH_HDR_CACH_P1','Header Cache Path 1 - l_pat_header_cache_curr_p1');
30435         OPEN l_pat_header_cache_curr_p1;
30436       ELSE
30437         qp_debug_util.tstart('BIG_SRCH_HDR_CACH_P1','Header Cache Path 1 - l_pat_header_cache_p1');
30438         OPEN l_pat_header_cache_p1;
30439       END IF;
30440 
30441       LOOP
30442 	      l_list_header_id_tbl.DELETE;
30443 	      l_list_line_id_tbl.DELETE;
30444 	      l_line_index_tbl.DELETE;
30445 	      l_matched_pattrn_id_tbl.DELETE;
30446 	      l_pricing_phase_id_tbl.DELETE;
30447 	      l_stage_tbl.DELETE;
30448 	      l_matched_hash_key_tbl.DELETE;
30449 	      l_pricing_status_code_tbl.DELETE;
30450 	      l_ssc.DELETE;
30451 	      l_header_quals_exist_flag.DELETE;
30452 	      l_grouping_no.DELETE;
30453 	      l_eq_flag.DELETE;
30454 	      l_validated_flag.DELETE;
30455 	      l_modf_lvl_code.DELETE;
30456 	      l_other_oprt_count.DELETE;
30457 	      l_null_other_oprt_count.DELETE;
30458 	      l_list_type_code.DELETE;
30459 	      l_ask_for_flag.DELETE;
30460 	      l_hdr_lmt_exists.DELETE;
30461 	      l_line_lmt_exists.DELETE;
30462 	      l_curr_det_id.DELETE;
30463 	      l_curr_hdr_id.DELETE;
30464 	      L_SELLNG_ROUND_FTR.DELETE;
30465               l_base_curr_code.DELETE;
30466               l_prcng_effctve_dt.DELETE;
30467               l_PRICE_BREAK_TYPE_CODE.DELETE;
30468 	      l_descnt_quals_exist.DELETE;
30469 	      l_qual_effective_precedence.delete;  --bug 12731268
30470 
30471       IF l_use_multi_curr THEN
30472           FETCH l_pat_header_cache_curr_p1 bulk collect
30473 	      INTO l_list_header_id_tbl,
30474 		l_list_line_id_tbl,
30475 		l_line_index_tbl,
30476 		l_matched_pattrn_id_tbl,
30477 		l_pricing_phase_id_tbl,
30478 		l_matched_hash_key_tbl,
30479 		l_stage_tbl,
30480 		l_pricing_status_code_tbl,
30481 		l_ssc,
30482 		l_header_quals_exist_flag,
30483 		l_grouping_no,
30484 		l_eq_flag,
30485 		l_validated_flag,
30486                 l_modf_lvl_code,
30487 	        l_other_oprt_count,
30488 	        l_null_other_oprt_count,
30489 	        l_list_type_code,
30490 	        l_ask_for_flag,
30491 	        l_hdr_lmt_exists,
30492 	        l_line_lmt_exists,
30493    	        l_curr_det_id,
30494 	        l_curr_hdr_id,
30495 	        L_SELLNG_ROUND_FTR,
30496                 l_base_curr_code,
30497                 l_prcng_effctve_dt,
30498   	        l_descnt_quals_exist,
30499 		l_qual_effective_precedence --bug 12731268
30500  		limit l_limit;
30501       ELSE
30502           FETCH l_pat_header_cache_p1 bulk collect
30503 	      INTO l_list_header_id_tbl,
30504 		l_list_line_id_tbl,
30505 		l_line_index_tbl,
30506 		l_matched_pattrn_id_tbl,
30507 		l_pricing_phase_id_tbl,
30508 		l_matched_hash_key_tbl,
30509 		l_stage_tbl,
30510 		l_pricing_status_code_tbl,
30511 		l_ssc,
30512 		l_header_quals_exist_flag,
30513 		l_grouping_no,
30514 		l_eq_flag,
30515 		l_validated_flag,
30516                 l_modf_lvl_code,
30517 	        l_other_oprt_count,
30518 	        l_null_other_oprt_count,
30519 	        l_list_type_code,
30520 	        l_ask_for_flag,
30521 	        l_hdr_lmt_exists,
30522 	        l_line_lmt_exists,
30523    	        l_curr_det_id,
30524 	        l_curr_hdr_id,
30525 	        L_SELLNG_ROUND_FTR,
30526                 l_base_curr_code,
30527                 l_prcng_effctve_dt,
30528   	        l_descnt_quals_exist,
30529 		l_qual_effective_precedence --bug 12731268
30530  		limit l_limit;
30531      END IF;
30532 
30533 	      EXIT
30534 	    WHEN l_list_header_id_tbl.COUNT = 0;
30535 
30536 	    forall i IN 1 .. l_list_header_id_tbl.COUNT INSERT
30537 	    INTO qp_preq_patrn_qual_tmp(list_header_id,
30538 					list_line_id,
30539 					line_index,
30540 					matched_pattrn_id,
30541 					pricing_phase_id,
30542 					matched_hash_key,
30543 					stage,
30544 					pricing_status_code,
30545 					source_system_code,
30546 					header_quals_exist_flag,
30547 					grouping_no,
30548 					eq_flag,
30549 					validated_flag,
30550 					MODIFIER_LEVEL_CODE,
30551 					other_oprt_count,
30552 					null_other_oprt_count,
30553 					LIST_TYPE_CODE,
30554 					ASK_FOR_FLAG,
30555 					HEADER_LIMIT_EXISTS,
30556 					LINE_LIMIT_EXISTS,
30557 					CURRENCY_DETAIL_ID,
30558 				        CURRENCY_HEADER_ID,
30559 				        SELLING_ROUNDING_FACTOR,
30560 				        BASE_CURRENCY_CODE,
30561 				        pricing_effective_date,--,
30562 					--PRICE_BREAK_TYPE_CODE
30563 					qualifier_precedence  --bug 12731268
30564 					)
30565 			    VALUES(l_list_header_id_tbl(i),
30566 					l_list_line_id_tbl(i),
30567 					l_line_index_tbl(i),
30568 					l_matched_pattrn_id_tbl(i),
30569 					l_pricing_phase_id_tbl(i),
30570 					l_matched_hash_key_tbl(i),
30571 					l_stage_tbl(i),
30572 					l_pricing_status_code_tbl(i),
30573 					l_ssc(i),
30574 					l_header_quals_exist_flag(i),
30575 					l_grouping_no(i),
30576 					l_eq_flag(i),
30577 					l_validated_flag(i),
30578 					l_modf_lvl_code(i),
30579 					l_other_oprt_count(i),
30580 					l_null_other_oprt_count(i),
30581 					l_list_type_code(i),
30582 					l_ask_for_flag(i),
30583 					l_hdr_lmt_exists(i),
30584 					l_line_lmt_exists(i),
30585 			   	        l_curr_det_id(i),
30586 				        l_curr_hdr_id(i),
30587 				        L_SELLNG_ROUND_FTR(i),
30588 			                l_base_curr_code(i),
30589 			                l_prcng_effctve_dt(i),--,
30590 					--l_PRICE_BREAK_TYPE_CODE(i)
30591 					l_qual_effective_precedence(i)  --bug 12731268
30592 					);
30593       END LOOP;
30594 
30595     IF l_use_multi_curr THEN
30596       CLOSE l_pat_header_cache_curr_p1;
30597     ELSE
30598       CLOSE l_pat_header_cache_p1;
30599      END IF;
30600 
30601     qp_debug_util.tstop('BIG_SRCH_HDR_CACH_P1');
30602 
30603     --doing between/ not = operator check
30604 
30605     qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_HDR','Populating BNQ Operators after header cache');
30606 
30607     Populate_Temp_Tables_NEQ_BTW(
30608 	    p_pricing_phase_id ,
30609 	    G_STAGE_CACHE_PL_HDR,
30610 	    x_status_code ,
30611 	    x_status_text );
30612 
30613    qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_HDR');
30614 
30615    IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
30616 	RAISE E_ROUTINE_ERRORS;
30617     END IF;
30618 
30619     qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_HDR','Evaluating other operators after header cache');
30620 
30621     QP_EVALUATE_OTHER_OPERATORS(
30622 	 p_pricing_phase_id ,
30623          G_STAGE_CACHE_PL_HDR,
30624 	 x_status_code ,
30625 	 x_status_text );
30626 
30627     qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_HDR');
30628 
30629 
30630        qp_debug_util.tstart('PATRN_LIST_CUR_DEL_HDR_TCA_P1',   'Header deletion for TCA');
30631 
30632 	UPDATE qp_preq_patrn_qual_tmp a
30633 	SET pricing_status_code = G_DELETED_TCA
30634 	WHERE pricing_status_code = g_status_unchanged
30635 	 AND a.descendents_quals_exist = 'Y'
30636          and a.pricing_phase_id = p_pricing_phase_id
30637          and a.stage =  G_STAGE_CACHE_PL_HDR
30638 	 AND EXISTS (
30639 	    SELECT 1
30640 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
30641 	    WHERE b.list_header_id = a.list_header_id
30642 	      AND b.list_line_id = a.list_line_id
30643               AND (b.qualifier_grouping_no = a.grouping_no
30644                    or
30645                    b.qualifier_grouping_no = -1
30646                   )
30647 	      AND b.qualify_hier_descendents_flag = 'N'
30648 	      AND c.segment_id = b.segment_id
30649 	      AND c.line_index = a.line_index
30650 	      AND c.derived_qualifier_flag = 'Y');
30651 
30652         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_HDR_TCA_P1');
30653 
30654 
30655    -- Line check
30656 
30657     IF l_use_multi_curr THEN
30658       qp_debug_util.tstart('BIG_SRCH_LIN_CACH_P1','Line Cache Path 1 - l_pat_line_cache_curr_p1');
30659       OPEN l_pat_line_cache_curr_p1;
30660     ELSE
30661       qp_debug_util.tstart('BIG_SRCH_LIN_CACH_P1','Line Cache Path 1 - l_pat_line_cache_p1');
30662       OPEN l_pat_line_cache_p1;
30663     END if;
30664 
30665       LOOP
30666 	      l_list_header_id_tbl.DELETE;
30667 	      l_list_line_id_tbl.DELETE;
30668 	      l_line_index_tbl.DELETE;
30669 	      l_matched_pattrn_id_tbl.DELETE;
30670 	      l_pricing_phase_id_tbl.DELETE;
30671 	      l_stage_tbl.DELETE;
30672 	      l_matched_hash_key_tbl.DELETE;
30673 	      l_pricing_status_code_tbl.DELETE;
30674 	      l_ssc.DELETE;
30675 	      l_header_quals_exist_flag.DELETE;
30676 	      l_grouping_no.DELETE;
30677 	      l_eq_flag.DELETE;
30678 	      l_validated_flag.DELETE;
30679 	      l_modf_lvl_code.DELETE;
30680 	      l_other_oprt_count.DELETE;
30681 	      l_null_other_oprt_count.DELETE;
30682 	      l_list_type_code.DELETE;
30683 	      l_ask_for_flag.DELETE;
30684 	      l_hdr_lmt_exists.DELETE;
30685 	      l_line_lmt_exists.DELETE;
30686               l_brk_uom_code.DELETE;
30687               l_brk_uom_ctxt.DELETE;
30688               l_brk_uom_attr.DELETE;
30689               l_order_curr.DELETE;
30690 	      l_curr_det_id.DELETE;
30691               l_curr_hdr_id.DELETE;
30692               L_SELLNG_ROUND_FTR.DELETE;
30693               l_base_curr_code.DELETE;
30694               l_prcng_effctve_dt.DELETE;
30695               l_PRICE_BREAK_TYPE_CODE.DELETE;
30696 	      l_descnt_quals_exist.DELETE;
30697 
30698 
30699    IF l_use_multi_curr THEN
30700        FETCH l_pat_line_cache_curr_p1 bulk collect
30701 	      INTO l_list_header_id_tbl,
30702 		l_list_line_id_tbl,
30703 		l_line_index_tbl,
30704 		l_matched_pattrn_id_tbl,
30705 		l_pricing_phase_id_tbl,
30706 		l_matched_hash_key_tbl,
30707 		l_stage_tbl,
30708 		l_pricing_status_code_tbl,
30709 		l_ssc,
30710 		l_header_quals_exist_flag,
30711 		l_grouping_no,
30712 		l_eq_flag,
30713 		l_validated_flag,
30714                 l_modf_lvl_code,
30715 	        l_null_other_oprt_count,
30716 	        l_list_type_code,
30717 	        l_ask_for_flag,
30718 	        l_hdr_lmt_exists,
30719 	        l_line_lmt_exists,
30720                 l_brk_uom_code,
30721                 l_brk_uom_ctxt,
30722                 l_brk_uom_attr,
30723                 l_order_curr,
30724 	        l_curr_det_id,
30725                 l_curr_hdr_id,
30726                 L_SELLNG_ROUND_FTR,
30727                 l_base_curr_code,
30728                 l_prcng_effctve_dt,
30729                 l_PRICE_BREAK_TYPE_CODE,
30730   	        l_descnt_quals_exist
30731    		limit l_limit;
30732    ELSE
30733        FETCH l_pat_line_cache_p1 bulk collect
30734 	      INTO l_list_header_id_tbl,
30735 		l_list_line_id_tbl,
30736 		l_line_index_tbl,
30737 		l_matched_pattrn_id_tbl,
30738 		l_pricing_phase_id_tbl,
30739 		l_matched_hash_key_tbl,
30740 		l_stage_tbl,
30741 		l_pricing_status_code_tbl,
30742 		l_ssc,
30743 		l_header_quals_exist_flag,
30744 		l_grouping_no,
30745 		l_eq_flag,
30746 		l_validated_flag,
30747                 l_modf_lvl_code,
30748 	        l_null_other_oprt_count,
30749 	        l_list_type_code,
30750 	        l_ask_for_flag,
30751 	        l_hdr_lmt_exists,
30752 	        l_line_lmt_exists,
30753                 l_brk_uom_code,
30754                 l_brk_uom_ctxt,
30755                 l_brk_uom_attr,
30756                 l_order_curr,
30757 	        l_curr_det_id,
30758                 l_curr_hdr_id,
30759                 L_SELLNG_ROUND_FTR,
30760                 l_base_curr_code,
30761                 l_prcng_effctve_dt,
30762                 l_PRICE_BREAK_TYPE_CODE,
30763   	        l_descnt_quals_exist
30764    		limit l_limit;
30765    END IF;
30766 	      EXIT
30767 	    WHEN l_list_header_id_tbl.COUNT = 0;
30768 
30769 	    forall i IN 1 .. l_list_header_id_tbl.COUNT INSERT
30770 	    INTO qp_preq_patrn_qual_tmp(list_header_id,
30771 					list_line_id,
30772 					line_index,
30773 					matched_pattrn_id,
30774 					pricing_phase_id,
30775 					matched_hash_key,
30776 					stage,
30777 					pricing_status_code,
30778 					source_system_code,
30779 					header_quals_exist_flag,
30780 					grouping_no,
30781 					eq_flag,
30782 					validated_flag,
30783 					MODIFIER_LEVEL_CODE,
30784 					other_oprt_count,
30785 					null_other_oprt_count,
30786 					LIST_TYPE_CODE,
30787 					ASK_FOR_FLAG,
30788 					HEADER_LIMIT_EXISTS,
30789 					LINE_LIMIT_EXISTS,
30790 					BREAK_UOM_CODE,
30791 				        BREAK_UOM_CONTEXT,
30792 				        BREAK_UOM_ATTRIBUTE,
30793 				        ORDER_CURRENCY,
30794 				        CURRENCY_DETAIL_ID,
30795 				        CURRENCY_HEADER_ID,
30796 				        SELLING_ROUNDING_FACTOR,
30797 				        BASE_CURRENCY_CODE,
30798 					pricing_effective_date,
30799                                         PRICE_BREAK_TYPE_CODE,
30800                                         descendents_quals_exist
30801 					)
30802 			    VALUES(l_list_header_id_tbl(i),
30803 					l_list_line_id_tbl(i),
30804 					l_line_index_tbl(i),
30805 					l_matched_pattrn_id_tbl(i),
30806 					l_pricing_phase_id_tbl(i),
30807 					l_matched_hash_key_tbl(i),
30808 					l_stage_tbl(i),
30809 					l_pricing_status_code_tbl(i),
30810 					l_ssc(i),
30811 					l_header_quals_exist_flag(i),
30812 					l_grouping_no(i),
30813 					l_eq_flag(i),
30814 					l_validated_flag(i),
30815 					l_modf_lvl_code(i),
30816 					l_null_other_oprt_count(i),
30817 					l_null_other_oprt_count(i),
30818 					l_list_type_code(i),
30819 					l_ask_for_flag(i),
30820 					l_hdr_lmt_exists(i),
30821 					l_line_lmt_exists(i),
30822 			                l_brk_uom_code(i),
30823 			                l_brk_uom_ctxt(i),
30824 			                l_brk_uom_attr(i),
30825 			                l_order_curr(i),
30826 				        l_curr_det_id(i),
30827 			                l_curr_hdr_id(i),
30828 			                L_SELLNG_ROUND_FTR(i),
30829 			                l_base_curr_code(i),
30830 			                l_prcng_effctve_dt(i),
30831                                         l_PRICE_BREAK_TYPE_CODE(i),
30832                        	                l_descnt_quals_exist(i)
30833 					);
30834 
30835             l_loop_count := l_loop_count + 1;
30836 
30837       END LOOP;
30838 
30839     IF l_use_multi_curr THEN
30840       CLOSE l_pat_line_cache_curr_p1;
30841     ELSE
30842       CLOSE l_pat_line_cache_p1;
30843     END IF;
30844 
30845     qp_debug_util.tstop('BIG_SRCH_LIN_CACH_P1');
30846 
30847     --doing between/ not = operator check
30848 
30849     qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_LIN','Populating BNQ Operators after line cache');
30850 
30851     Populate_Temp_Tables_NEQ_BTW(
30852 	    p_pricing_phase_id ,
30853 	    G_STAGE_CACHE_PL_LIN,
30854 	    x_status_code ,
30855 	    x_status_text );
30856 
30857     qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_LIN');
30858 
30859    IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
30860 	RAISE E_ROUTINE_ERRORS;
30861     END IF;
30862 
30863     qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_LIN','Evaluating other operators after line cache');
30864 
30865     QP_EVALUATE_OTHER_OPERATORS(
30866 	 p_pricing_phase_id ,
30867          G_STAGE_CACHE_PL_LIN,
30868 	 x_status_code ,
30869 	 x_status_text );
30870 
30871     qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_LIN');
30872 
30873     IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
30874 	RAISE E_ROUTINE_ERRORS;
30875     END IF;
30876 
30877            qp_debug_util.tstart('PATRN_LIST_CUR_DEL_LIN_TCA_P1',   'Line deletion for TCA');
30878 
30879 	UPDATE qp_preq_patrn_qual_tmp a
30880 	SET pricing_status_code = G_DELETED_TCA
30881 	WHERE pricing_status_code = g_status_unchanged
30882 	 AND a.descendents_quals_exist = 'Y'
30883          and a.pricing_phase_id = p_pricing_phase_id
30884          and a.stage =  G_STAGE_CACHE_PL_LIN
30885 	 AND EXISTS (
30886 	    SELECT 1
30887 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
30888 	    WHERE b.list_header_id = a.list_header_id
30889 	      AND b.list_line_id = a.list_line_id
30890               AND (b.qualifier_grouping_no = a.grouping_no
30891                    or
30892                    b.qualifier_grouping_no = -1
30893                   )
30894 	      AND b.qualify_hier_descendents_flag = 'N'
30895 	      AND c.segment_id = b.segment_id
30896 	      AND c.line_index = a.line_index
30897 	      AND c.derived_qualifier_flag = 'Y');
30898 
30899         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_LIN_TCA_P1');
30900 
30901   qp_debug_util.tstart('BIG_SRCH_POPULATE_TMP_TBLS','Populating Temp Tables - Populate_Pat_Temp_Tables API');
30902 
30903   Populate_Pat_Temp_Tables(p_pricing_phase_id,
30904                                 G_STAGE_CACHE_PL_LIN,
30905 				x_status_code,
30906 				x_status_text);
30907 
30908   qp_debug_util.tstop('BIG_SRCH_POPULATE_TMP_TBLS');
30909 
30910   END IF;
30911 
30912   --- Existing logic
30913 
30914   IF l_loop_count > 0 THEN
30915 
30916    qp_debug_util.tstart('BIG_SRCH_RESLV_INCMPTBLTY','Resolve Incompatability - Determine_Pricing_UOM_And_Qty API');
30917 
30918   	QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
30919 				(p_line_index        => NULL,
30920  				 p_order_uom_code    => NULL,
30921 				 p_order_qty         => NULL,
30922 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID,
30923                                  p_call_big_search   => FALSE,
30924 				 x_list_line_id	 =>     l_list_line_id,
30925 				 x_return_status     => l_return_status,
30926 				 x_return_status_txt => l_status_text);
30927 
30928      qp_debug_util.tstop('BIG_SRCH_RESLV_INCMPTBLTY');
30929 
30930            IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
30931             RAISE E_ROUTINE_ERRORS;
30932            END IF;
30933 
30934             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30935             engine_debug('Incomp Return Status Non Validated QP_PREQ_GRP: ' || l_return_status);
30936 
30937             END IF;
30938 
30939             -- 3773652
30940             -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
30941             begin
30942               select 'x' into l_dummy
30943               from qp_npreq_lines_tmp
30944               where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
30945               and (PRICE_FLAG = G_YES
30946                    or
30947                    PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
30948               and rownum = 1;
30949 --       //Shankar  need to put this
30950 
30951               qp_debug_util.tstart('BIG_SRCH_EVAL_BET','Evaluate Between');
30952 
30953               Evaluate_Between(p_pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
30954 
30955 	      qp_debug_util.tstop('BIG_SRCH_EVAL_BET');
30956 
30957             exception
30958               when no_data_found then
30959                 null;
30960             end;
30961 
30962         -- Update the request line status for lines which got valid price list
30963 
30964 	   qp_debug_util.tstart('BIG_SRCH_UPD_REQ_LIN_STATUS','Updating Request Lines Status - Update_Request_Line_Status API');
30965 
30966            Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
30967 
30968 	   qp_debug_util.tstop('BIG_SRCH_UPD_REQ_LIN_STATUS');
30969 
30970             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
30971              RAISE E_ROUTINE_ERRORS;
30972             END IF;
30973 
30974          --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
30975          --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
30976          --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
30977          --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
30978          --By doing this we will get the right price in the PRICE event on change of UOM on the order line
30979          --for price based on price break
30980 --       //Shankar  need to put this
30981 
30982 	 qp_debug_util.tstart('BIG_SRCH_GET_ELGBLE_PRICE_BRK','Getting eligible Price Breaks - Get_Eligible_Price_Break API');
30983 
30984          Get_Eligible_Price_Break(p_pricing_phase_id,NULL,l_return_status,l_status_text);
30985 
30986          qp_debug_util.tstop('BIG_SRCH_GET_ELGBLE_PRICE_BRK');
30987 
30988          IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
30989           RAISE E_ROUTINE_ERRORS;
30990          END IF;
30991 
30992    ELSE
30993            -- Update the request line status for lines which got valid price list
30994 	   Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,x_status_code,x_status_text);  --[juiln/4708044]
30995 	   IF(x_status_code = FND_API.G_RET_STS_ERROR) THEN
30996 	    RAISE E_ROUTINE_ERRORS;
30997 	   END IF;
30998 
30999    END IF;
31000 
31001  qp_debug_util.tstop('SEL_PRICE_LIST_LINES_PAT');
31002 
31003  EXCEPTION
31004    WHEN E_ROUTINE_ERRORS THEN
31005 
31006    qp_debug_util.tstop('SEL_PRICE_LIST_LINES_PAT');
31007 
31008    IF l_use_multi_curr THEN
31009      IF l_pat_line_cache_curr_p1%ISOPEN THEN
31010         CLOSE l_pat_line_cache_curr_p1;
31011      END if;
31012 
31013      IF l_pat_header_cache_curr_p1%ISOPEN THEN
31014         CLOSE l_pat_header_cache_curr_p1;
31015      END if;
31016 
31017      IF l_pat_line_curr_p2%ISOPEN THEN
31018         CLOSE l_pat_line_curr_p2;
31019      END if;
31020 
31021    ELSE
31022      IF l_pat_line_cache_p1%ISOPEN THEN
31023         CLOSE l_pat_line_cache_p1;
31024      END if;
31025 
31026      IF l_pat_header_cache_p1%ISOPEN THEN
31027         CLOSE l_pat_header_cache_p1;
31028      END if;
31029 
31030      IF l_pat_line_p2%ISOPEN THEN
31031         CLOSE l_pat_line_p2;
31032      END if;
31033 
31034    END IF;
31035 
31036      x_status_code := FND_API.G_RET_STS_ERROR;
31037      x_status_text := 'Expected Error in ' || l_routine || sqlerrm;
31038 
31039      IF g_debug_engine = fnd_api.g_true THEN
31040 	engine_debug(x_status_text);
31041      END IF;
31042 
31043    WHEN OTHERS THEN
31044 
31045     qp_debug_util.tstop('SEL_PRICE_LIST_LINES_PAT');
31046 
31047     IF l_use_multi_curr THEN
31048      IF l_pat_line_cache_curr_p1%ISOPEN THEN
31049         CLOSE l_pat_line_cache_curr_p1;
31050      END if;
31051 
31052      IF l_pat_header_cache_curr_p1%ISOPEN THEN
31053         CLOSE l_pat_header_cache_curr_p1;
31054      END if;
31055 
31056      IF l_pat_line_curr_p2%ISOPEN THEN
31057         CLOSE l_pat_line_curr_p2;
31058      END if;
31059 
31060     ELSE
31061      IF l_pat_line_cache_p1%ISOPEN THEN
31062         CLOSE l_pat_line_cache_p1;
31063      END if;
31064 
31065      IF l_pat_header_cache_p1%ISOPEN THEN
31066         CLOSE l_pat_header_cache_p1;
31067      END if;
31068 
31069      IF l_pat_line_p2%ISOPEN THEN
31070         CLOSE l_pat_line_p2;
31071      END if;
31072 
31073     END IF;
31074      IF g_debug_engine = fnd_api.g_true THEN
31075 	engine_debug(l_routine || ' ' || sqlerrm);
31076      END IF;
31077 
31078     x_status_code := fnd_api.g_ret_sts_error;
31079     x_status_text := 'Error in ' || l_routine || sqlerrm;
31080 
31081 
31082 END select_price_list_lines_pat;
31083 
31084 /*+----------------------------------------------------------
31085   |PROCEDURE SELECT_PRICE_LIST_LINES
31086   +----------------------------------------------------------
31087 */
31088 PROCEDURE SELECT_PRICE_LIST_LINES(p_pricing_phase_id   IN  NUMBER,
31089                                   p_freeze_override_flag IN VARCHAR2,
31090                                   x_status_code OUT NOCOPY       VARCHAR2,
31091                                   x_status_text OUT NOCOPY       VARCHAR2,
31092                                   p_control_rec       IN CONTROL_RECORD_TYPE) -- vivek
31093 AS
31094 
31095 -- [julin/4742368/4766135] Added QP_QUALIFIERS_N1 hint to prevent db from using N2
31096 --[julin/5007789] Tuned query as follows:
31097 -- 1. Performing line filter first.
31098 -- 2. Performing qualifier filter before product filter
31099 -- 3. Split into unions ('=', 'BETWEEN', 'NOT =') for better use of indexes
31100 -- bug 9210308 added index hint for index QP_LIST_LINES_PK
31101 CURSOR l_prod_qual_cur (p_pricing_phase_id NUMBER) IS
31102 -- Product and Qualifier Only. No pricing
31103 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
31104            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
31105            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31106 	   INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31107            INDEX(QPQ QP_QUALIFIERS_N4)
31108 	   INDEX(QPL QP_LIST_LINES_PK)
31109            l_prod_qual_cur_pl */
31110        qpl.list_header_id,
31111        qpl.list_line_id,
31112        qpl.list_line_type_code,
31113        qplatpr.line_index,
31114        qplatpr.applied_flag,
31115        qplatpr.attribute_level               product_attribute_level,
31116        qplatpr.attribute_type                product_attribute_type,
31117        qplatpr.context                       product_attribute_context,
31118        qplatpr.attribute                     product_attribute,
31119        qplatpr.value_from                    product_attr_value,
31120        qpprod.product_uom_code               product_uom_code,
31121        qpprod.excluder_flag,
31122        qplatq.context                        qualifier_attribute_context,
31123        qplatq.attribute                      qualifier_attribute,
31124        qplatq.value_from                     qualifier_attribute_value,
31125        qpq.qualifier_grouping_no             qualifier_grouping_no,
31126        qpq.qualifier_precedence              qualifier_precedence,
31127        qpq.qualifier_datatype,
31128        qpq.qualifier_attr_value              setup_value_from,
31129        qpq.qualifier_attr_value_to           setup_value_to,
31130        qpl.automatic_flag,
31131        qpl.modifier_level_code,
31132        qpl.primary_uom_flag,
31133        qpl.arithmetic_operator               operand_calculation_code,
31134        qpl.operand                           operand_value,
31135        qpl.pricing_group_sequence,
31136        qph.list_type_code                    created_from_list_type,
31137        qph.rounding_factor,
31138        qpl.pricing_phase_id,
31139        qpl.price_break_type_code,
31140        qpl.incompatibility_grp_code,
31141        qpl.price_by_formula_id,
31142        qpl.product_precedence,
31143        qpl.list_line_no,
31144        'HQ'                                 qualifier_type
31145       ,QPL.BREAK_UOM_CODE /* Proration */
31146       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31147       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31148 FROM   --[julin/5007789]
31149        (SELECT /*+ dynamic_sampling(1) */ *
31150         FROM qp_npreq_lines_tmp
31151         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31152         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31153        qp_npreq_line_attrs_tmp qplatq,
31154        qp_qualifiers qpq,
31155        qp_list_headers_b qph,
31156        qp_price_req_sources_v qprs,
31157        qp_npreq_line_attrs_tmp qplatpr,
31158        qp_pricing_attributes qpprod,
31159        qp_list_lines qpl
31160 WHERE  qph.list_header_id = qpl.list_header_id
31161 --added for moac -- commented references to security profile
31162 --security will be built into qp_list_headers_b
31163 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
31164 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
31165 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
31166 -- 3594459, context and attribute OR'd together
31167 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31168        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31169 AND    qpq.list_header_id = qph.list_header_id
31170 AND   (qplines.price_flag = G_YES OR
31171        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
31172 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
31173 AND    qpq.list_line_id = -1
31174 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
31175 AND   qpl.list_line_id   = qpprod.list_line_id
31176 AND   qph.currency_code = qplines.currency_code
31177 AND   qpl.modifier_level_code = qplines.line_type_code
31178 AND   qph.active_flag = G_YES
31179 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31180        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
31181        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
31182 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31183        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
31184        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
31185 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31186        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
31187        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
31188 AND   qpq.qualifier_context    = qplatq.context
31189 AND   qpq.qualifier_attribute  = qplatq.attribute
31190 AND   qpq.comparison_operator_code = '=' --[julin/5007789]
31191 AND   qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
31192 AND   qpq.active_flag = G_YES
31193 AND   qpprod.pricing_phase_id = p_pricing_phase_id
31194 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
31195 AND   qpprod.product_attribute_context = qplatpr.context
31196 AND   qpprod.product_attribute = qplatpr.attribute
31197 AND   qpprod.product_attr_value = qplatpr.value_from
31198 AND   qpprod.excluder_flag = G_NO
31199 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
31200 AND   qplatq.line_index = qplines.line_index
31201 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
31202 AND   qplatpr.line_index = qplatq.line_index
31203 AND   qph.source_system_code = qprs.source_system_code
31204 AND   qplines.request_type_code   = qprs.request_type_code
31205 AND   qplatq.attribute_type = 'QUALIFIER'
31206 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
31207 AND   qplatpr.attribute_type='PRODUCT'
31208 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
31209 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
31210 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
31211   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
31212 UNION ALL
31213 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
31214            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
31215            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31216 	   INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31217            INDEX(QPQ QP_QUALIFIERS_N5)
31218 	   INDEX(QPL QP_LIST_LINES_PK)
31219            l_prod_qual_cur_pl */
31220        qpl.list_header_id,
31221        qpl.list_line_id,
31222        qpl.list_line_type_code,
31223        qplatpr.line_index,
31224        qplatpr.applied_flag,
31225        qplatpr.attribute_level               product_attribute_level,
31226        qplatpr.attribute_type                product_attribute_type,
31227        qplatpr.context                       product_attribute_context,
31228        qplatpr.attribute                     product_attribute,
31229        qplatpr.value_from                    product_attr_value,
31230        qpprod.product_uom_code               product_uom_code,
31231        qpprod.excluder_flag,
31232        qplatq.context                        qualifier_attribute_context,
31233        qplatq.attribute                      qualifier_attribute,
31234        qplatq.value_from                     qualifier_attribute_value,
31235        qpq.qualifier_grouping_no             qualifier_grouping_no,
31236        qpq.qualifier_precedence              qualifier_precedence,
31237        qpq.qualifier_datatype,
31238        qpq.qualifier_attr_value              setup_value_from,
31239        qpq.qualifier_attr_value_to           setup_value_to,
31240        qpl.automatic_flag,
31241        qpl.modifier_level_code,
31242        qpl.primary_uom_flag,
31243        qpl.arithmetic_operator               operand_calculation_code,
31244        qpl.operand                           operand_value,
31245        qpl.pricing_group_sequence,
31246        qph.list_type_code                    created_from_list_type,
31247        qph.rounding_factor,
31248        qpl.pricing_phase_id,
31249        qpl.price_break_type_code,
31250        qpl.incompatibility_grp_code,
31251        qpl.price_by_formula_id,
31252        qpl.product_precedence,
31253        qpl.list_line_no,
31254        'HQ'                                 qualifier_type
31255       ,QPL.BREAK_UOM_CODE /* Proration */
31256       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31257       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31258 FROM   --[julin/5007789]
31259        (SELECT /*+ dynamic_sampling(1) */ *
31260         FROM qp_npreq_lines_tmp
31261         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31262         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31263        qp_npreq_line_attrs_tmp qplatq,
31264        qp_qualifiers qpq,
31265        qp_list_headers_b qph,
31266        qp_price_req_sources_v qprs,
31267        qp_npreq_line_attrs_tmp qplatpr,
31268        qp_pricing_attributes qpprod,
31269        qp_list_lines qpl
31270 WHERE  qph.list_header_id = qpl.list_header_id
31271 --added for moac -- commented references to security profile
31272 --security will be built into qp_list_headers_b
31273 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
31274 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
31275 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
31276 -- 3594459, context and attribute OR'd together
31277 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31278        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31279 AND    qpq.list_header_id = qph.list_header_id
31280 AND   (qplines.price_flag = G_YES OR
31281        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
31282 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
31283 AND    qpq.list_line_id = -1
31284 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
31285 AND   qpl.list_line_id   = qpprod.list_line_id
31286 AND   qph.currency_code = qplines.currency_code
31287 AND   qpl.modifier_level_code = qplines.line_type_code
31288 AND   qph.active_flag = G_YES
31289 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31290        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
31291        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
31292 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31293        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
31294        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
31295 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31296        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
31297        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
31298 AND   qpq.qualifier_context    = qplatq.context
31299 AND   qpq.qualifier_attribute  = qplatq.attribute
31300 AND   qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
31301 AND   qpq.active_flag = G_YES
31302 AND   qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
31303 AND   qpprod.pricing_phase_id = p_pricing_phase_id
31304 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
31305 AND   qpprod.product_attribute_context = qplatpr.context
31306 AND   qpprod.product_attribute = qplatpr.attribute
31307 AND   qpprod.product_attr_value = qplatpr.value_from
31308 AND   qpprod.excluder_flag = G_NO
31309 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
31310 AND   qplatq.line_index = qplines.line_index
31311 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
31312 AND   qplatpr.line_index = qplatq.line_index
31313 AND   qph.source_system_code = qprs.source_system_code
31314 AND   qplines.request_type_code   = qprs.request_type_code
31315 AND   qplatq.attribute_type = 'QUALIFIER'
31316 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
31317 AND   qplatpr.attribute_type='PRODUCT'
31318 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
31319 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
31320 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
31321   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
31322 UNION ALL
31323 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
31324            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
31325            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31326 	   INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31327            INDEX(QPQ QP_QUALIFIERS_N6)
31328 	   INDEX(QPL QP_LIST_LINES_PK)
31329            l_prod_qual_cur_pl */
31330        qpl.list_header_id,
31331        qpl.list_line_id,
31332        qpl.list_line_type_code,
31333        qplatpr.line_index,
31334        qplatpr.applied_flag,
31335        qplatpr.attribute_level               product_attribute_level,
31336        qplatpr.attribute_type                product_attribute_type,
31337        qplatpr.context                       product_attribute_context,
31338        qplatpr.attribute                     product_attribute,
31339        qplatpr.value_from                    product_attr_value,
31340        qpprod.product_uom_code               product_uom_code,
31341        qpprod.excluder_flag,
31342        qplatq.context                        qualifier_attribute_context,
31343        qplatq.attribute                      qualifier_attribute,
31344        qplatq.value_from                     qualifier_attribute_value,
31345        qpq.qualifier_grouping_no             qualifier_grouping_no,
31346        qpq.qualifier_precedence              qualifier_precedence,
31347        qpq.qualifier_datatype,
31348        qpq.qualifier_attr_value              setup_value_from,
31349        qpq.qualifier_attr_value_to           setup_value_to,
31350        qpl.automatic_flag,
31351        qpl.modifier_level_code,
31352        qpl.primary_uom_flag,
31353        qpl.arithmetic_operator               operand_calculation_code,
31354        qpl.operand                           operand_value,
31355        qpl.pricing_group_sequence,
31356        qph.list_type_code                    created_from_list_type,
31357        qph.rounding_factor,
31358        qpl.pricing_phase_id,
31359        qpl.price_break_type_code,
31360        qpl.incompatibility_grp_code,
31361        qpl.price_by_formula_id,
31362        qpl.product_precedence,
31363        qpl.list_line_no,
31364        'HQ'                                 qualifier_type
31365       ,QPL.BREAK_UOM_CODE /* Proration */
31366       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31367       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31368 FROM   --[julin/5007789]
31369        (SELECT /*+ dynamic_sampling(1) */ *
31370         FROM qp_npreq_lines_tmp
31371         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31372         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31373        qp_npreq_line_attrs_tmp qplatq,
31374        qp_qualifiers qpq,
31375        qp_list_headers_b qph,
31376        qp_price_req_sources_v qprs,
31377        qp_npreq_line_attrs_tmp qplatpr,
31378        qp_pricing_attributes qpprod,
31379        qp_list_lines qpl
31380 WHERE  qph.list_header_id = qpl.list_header_id
31381 --added for moac -- commented references to security profile
31382 --security will be built into qp_list_headers_b
31383 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
31384 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
31385 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
31386 -- 3594459, context and attribute OR'd together
31387 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31388        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31389 AND    qpq.list_header_id = qph.list_header_id
31390 AND   (qplines.price_flag = G_YES OR
31391        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
31392 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
31393 AND    qpq.list_line_id = -1
31394 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
31395 AND   qpl.list_line_id   = qpprod.list_line_id
31396 AND   qph.currency_code = qplines.currency_code
31397 AND   qpl.modifier_level_code = qplines.line_type_code
31398 AND   qph.active_flag = G_YES
31399 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31400        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
31401        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
31402 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31403        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
31404        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
31405 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31406        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
31407        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
31408 AND   qpq.qualifier_context    = qplatq.context
31409 AND   qpq.qualifier_attribute  = qplatq.attribute
31410 AND   qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
31411 AND   qpq.active_flag = G_YES
31412 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
31413         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
31414        or
31415        (qpq.qualifier_datatype = G_NUMERIC
31416         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
31417             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
31418 AND   qpprod.pricing_phase_id = p_pricing_phase_id
31419 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
31420 AND   qpprod.product_attribute_context = qplatpr.context
31421 AND   qpprod.product_attribute = qplatpr.attribute
31422 AND   qpprod.product_attr_value = qplatpr.value_from
31423 AND   qpprod.excluder_flag = G_NO
31424 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
31425 AND   qplatq.line_index = qplines.line_index
31426 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
31427 AND   qplatpr.line_index = qplatq.line_index
31428 AND   qph.source_system_code = qprs.source_system_code
31429 AND   qplines.request_type_code   = qprs.request_type_code
31430 AND   qplatq.attribute_type = 'QUALIFIER'
31431 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
31432 AND   qplatpr.attribute_type='PRODUCT'
31433 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
31434 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
31435 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
31436   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
31437 ORDER BY 4,2;
31438 
31439 --[julin/4742368/4766135] Added QP_QUALIFIERS_N1 hint to prevent db from using N2
31440 --[julin/5007789] Tuned query as follows:
31441 -- 1. Performing line filter first.
31442 -- 2. Performing qualifier filter before product filter
31443 -- 3. Split into unions ('=', 'BETWEEN', 'NOT =') for better use of indexes
31444 CURSOR l_prod_qual_cur_currency (p_pricing_phase_id NUMBER) IS
31445 -- Product and Qualifier Only. No pricing
31446 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
31447            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
31448            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31449 	   INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31450            INDEX(QPQ QP_QUALIFIERS_N4)
31451 	   INDEX(QPL QP_LIST_LINES_PK)
31452        l_prod_qual_cur_pl */
31453        qpl.list_header_id,
31454        qpl.list_line_id,
31455        qpl.list_line_type_code,
31456        qplatpr.line_index,
31457        qplatpr.applied_flag,
31458        qplatpr.attribute_level               product_attribute_level,
31459        qplatpr.attribute_type                product_attribute_type,
31460        qplatpr.context                       product_attribute_context,
31461        qplatpr.attribute                     product_attribute,
31462        qplatpr.value_from                    product_attr_value,
31463        qpprod.product_uom_code               product_uom_code,
31464        qpprod.excluder_flag,
31465        qplatq.context                        qualifier_attribute_context,
31466        qplatq.attribute                      qualifier_attribute,
31467        qplatq.value_from                     qualifier_attribute_value,
31468        qpq.qualifier_grouping_no             qualifier_grouping_no,
31469        qpq.qualifier_precedence              qualifier_precedence,
31470        qpq.qualifier_datatype,
31471        qpq.qualifier_attr_value              setup_value_from,
31472        qpq.qualifier_attr_value_to           setup_value_to,
31473        qpl.automatic_flag,
31474        qpl.modifier_level_code,
31475        qpl.primary_uom_flag,
31476        qpl.arithmetic_operator               operand_calculation_code,
31477        qpl.operand                           operand_value,
31478        qpl.pricing_group_sequence,
31479        qph.list_type_code                    created_from_list_type,
31480        qph.rounding_factor,
31481        qpl.pricing_phase_id,
31482        qpl.price_break_type_code,
31483        qpl.incompatibility_grp_code,
31484        qpl.price_by_formula_id,
31485        qpl.product_precedence,
31486        qpl.list_line_no,
31487        'HQ'                                  qualifier_type,
31488        qcdt.currency_detail_id,
31489        qcdt.currency_header_id,
31490        qcdt.selling_rounding_factor,
31491        qplines.currency_code                 order_currency,
31492        qplines.pricing_effective_date        pricing_effective_date,
31493        qph.currency_code                     base_currency_code
31494       ,QPL.BREAK_UOM_CODE /* Proration */
31495       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31496       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31497 FROM   --[julin/5007789]
31498        (SELECT /*+ dynamic_sampling(1) */ *
31499         FROM qp_npreq_lines_tmp
31500         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31501         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31502        qp_npreq_line_attrs_tmp qplatq,
31503        qp_qualifiers qpq,
31504        qp_list_headers_b qph,
31505        qp_price_req_sources_v qprs,
31506        qp_npreq_line_attrs_tmp qplatpr,
31507        qp_pricing_attributes qpprod,
31508        qp_list_lines qpl,
31509        qp_currency_details qcdt
31510 WHERE  qph.list_header_id = qpl.list_header_id
31511 --added for moac -- commented references to security profile
31512 --security will be built into qp_list_headers_b
31513 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
31514 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
31515 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
31516 -- 3594459, context and attribute OR'd together
31517 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31518        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31519 AND    qpq.list_header_id = qph.list_header_id
31520 AND   (qplines.price_flag = G_YES OR
31521        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
31522 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
31523 AND   qpq.list_line_id = -1
31524 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
31525 AND   qpl.list_line_id   = qpprod.list_line_id
31526 --AND   qph.currency_code = qplines.currency_code
31527 AND   qph.currency_header_id = qcdt.currency_header_id
31528 AND   qplines.currency_code = qcdt.to_currency_code
31529 AND   nvl(TRUNC(qplines.pricing_effective_date),trunc(sysdate)) between
31530        nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date)) and
31531        nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
31532 AND (
31533         (qcdt.curr_attribute_context is null
31534          and not exists
31535              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
31536 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
31537                where qcdt1.curr_attribute_context IS NOT NULL
31538 		 and qcdt1.curr_attribute_context = pa_tmp.context
31539                  and qcdt1.curr_attribute = pa_tmp.attribute
31540                  and qcdt1.curr_attribute_value = pa_tmp.value_from
31541                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
31542                  and qcdt1.to_currency_code = qcdt.to_currency_code
31543                  and qcdt1.currency_header_id = qcdt.currency_header_id
31544                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
31545                  and pa_tmp.line_index = qplines.line_index
31546                  and TRUNC(qplines.pricing_effective_date) between
31547                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
31548                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
31549         OR
31550         (qcdt.curr_attribute_context is not null
31551          and qcdt.precedence =
31552              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
31553 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
31554                where qcdt2.curr_attribute_context IS NOT NULL
31555 		 and qcdt2.curr_attribute_context = pa_tmp1.context
31556                  and qcdt2.curr_attribute = pa_tmp1.attribute
31557                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
31558                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
31559                  and qcdt2.to_currency_code = qcdt.to_currency_code
31560                  and qcdt2.currency_header_id = qcdt.currency_header_id
31561                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
31562                  and pa_tmp1.line_index = qplines.line_index
31563                  and TRUNC(qplines.pricing_effective_date) between
31564                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
31565                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
31566              )))
31567 AND   qpl.modifier_level_code = qplines.line_type_code
31568 AND   qph.active_flag = G_YES
31569 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31570        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
31571        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
31572 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31573        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
31574        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
31575 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31576        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
31577        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
31578 AND   qpq.qualifier_context    = qplatq.context
31579 AND   qpq.qualifier_attribute  = qplatq.attribute
31580 AND   qpq.comparison_operator_code = '=' --[julin/5007789]
31581 AND   qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
31582 AND   qpq.active_flag = G_YES
31583 AND   qpprod.pricing_phase_id = p_pricing_phase_id
31584 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
31585 AND   qpprod.product_attribute_context = qplatpr.context
31586 AND   qpprod.product_attribute = qplatpr.attribute
31587 AND   qpprod.product_attr_value = qplatpr.value_from
31588 AND   qpprod.excluder_flag = G_NO
31589 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
31590 AND   qplatq.line_index = qplines.line_index
31591 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
31592 AND   qplatpr.line_index = qplatq.line_index
31593 AND   qph.source_system_code = qprs.source_system_code
31594 AND   qplines.request_type_code   = qprs.request_type_code
31595 AND   qplatq.attribute_type = 'QUALIFIER'
31596 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
31597 AND   qplatpr.attribute_type='PRODUCT'
31598 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
31599 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
31600 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
31601   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
31602 UNION ALL
31603 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
31604            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
31605            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31606 	   INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31607            INDEX(QPQ QP_QUALIFIERS_N5)
31608 	   INDEX(QPL QP_LIST_LINES_PK)
31609        l_prod_qual_cur_pl */
31610        qpl.list_header_id,
31611        qpl.list_line_id,
31612        qpl.list_line_type_code,
31613        qplatpr.line_index,
31614        qplatpr.applied_flag,
31615        qplatpr.attribute_level               product_attribute_level,
31616        qplatpr.attribute_type                product_attribute_type,
31617        qplatpr.context                       product_attribute_context,
31618        qplatpr.attribute                     product_attribute,
31619        qplatpr.value_from                    product_attr_value,
31620        qpprod.product_uom_code               product_uom_code,
31621        qpprod.excluder_flag,
31622        qplatq.context                        qualifier_attribute_context,
31623        qplatq.attribute                      qualifier_attribute,
31624        qplatq.value_from                     qualifier_attribute_value,
31625        qpq.qualifier_grouping_no             qualifier_grouping_no,
31626        qpq.qualifier_precedence              qualifier_precedence,
31627        qpq.qualifier_datatype,
31628        qpq.qualifier_attr_value              setup_value_from,
31629        qpq.qualifier_attr_value_to           setup_value_to,
31630        qpl.automatic_flag,
31631        qpl.modifier_level_code,
31632        qpl.primary_uom_flag,
31633        qpl.arithmetic_operator               operand_calculation_code,
31634        qpl.operand                           operand_value,
31635        qpl.pricing_group_sequence,
31636        qph.list_type_code                    created_from_list_type,
31637        qph.rounding_factor,
31638        qpl.pricing_phase_id,
31639        qpl.price_break_type_code,
31640        qpl.incompatibility_grp_code,
31641        qpl.price_by_formula_id,
31642        qpl.product_precedence,
31643        qpl.list_line_no,
31644        'HQ'                                  qualifier_type,
31645        qcdt.currency_detail_id,
31646        qcdt.currency_header_id,
31647        qcdt.selling_rounding_factor,
31648        qplines.currency_code                 order_currency,
31649        qplines.pricing_effective_date        pricing_effective_date,
31650        qph.currency_code                     base_currency_code
31651       ,QPL.BREAK_UOM_CODE /* Proration */
31652       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31653       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31654 FROM   --[julin/5007789]
31655        (SELECT /*+ dynamic_sampling(1) */ *
31656         FROM qp_npreq_lines_tmp
31657         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31658         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31659        qp_npreq_line_attrs_tmp qplatq,
31660        qp_qualifiers qpq,
31661        qp_list_headers_b qph,
31662        qp_price_req_sources_v qprs,
31663        qp_npreq_line_attrs_tmp qplatpr,
31664        qp_pricing_attributes qpprod,
31665        qp_list_lines qpl,
31666        qp_currency_details qcdt
31667 WHERE  qph.list_header_id = qpl.list_header_id
31668 --added for moac -- commented references to security profile
31669 --security will be built into qp_list_headers_b
31670 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
31671 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
31672 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
31673 -- 3594459, context and attribute OR'd together
31674 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31675        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31676 AND    qpq.list_header_id = qph.list_header_id
31677 AND   (qplines.price_flag = G_YES OR
31678        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
31679 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
31680 AND   qpq.list_line_id = -1
31681 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
31682 AND   qpl.list_line_id   = qpprod.list_line_id
31683 --AND   qph.currency_code = qplines.currency_code
31684 AND   qph.currency_header_id = qcdt.currency_header_id
31685 AND   qplines.currency_code = qcdt.to_currency_code
31686 AND   nvl(TRUNC(qplines.pricing_effective_date),trunc(sysdate)) between
31687        nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date)) and
31688        nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
31689 AND (
31690         (qcdt.curr_attribute_context is null
31691          and not exists
31692              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
31693 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
31694                where qcdt1.curr_attribute_context IS NOT NULL
31695 		 and qcdt1.curr_attribute_context = pa_tmp.context
31696                  and qcdt1.curr_attribute = pa_tmp.attribute
31697                  and qcdt1.curr_attribute_value = pa_tmp.value_from
31698                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
31699                  and qcdt1.to_currency_code = qcdt.to_currency_code
31700                  and qcdt1.currency_header_id = qcdt.currency_header_id
31701                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
31702                  and pa_tmp.line_index = qplines.line_index
31703                  and TRUNC(qplines.pricing_effective_date) between
31704                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
31705                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
31706         OR
31707         (qcdt.curr_attribute_context is not null
31708          and qcdt.precedence =
31709              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
31710 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
31711                where qcdt2.curr_attribute_context IS NOT NULL
31712 		 and qcdt2.curr_attribute_context = pa_tmp1.context
31713                  and qcdt2.curr_attribute = pa_tmp1.attribute
31714                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
31715                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
31716                  and qcdt2.to_currency_code = qcdt.to_currency_code
31717                  and qcdt2.currency_header_id = qcdt.currency_header_id
31718                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
31719                  and pa_tmp1.line_index = qplines.line_index
31720                  and TRUNC(qplines.pricing_effective_date) between
31721                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
31722                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
31723              )))
31724 AND   qpl.modifier_level_code = qplines.line_type_code
31725 AND   qph.active_flag = G_YES
31726 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31727        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
31728        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
31729 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31730        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
31731        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
31732 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31733        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
31734        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
31735 AND   qpq.qualifier_context    = qplatq.context
31736 AND   qpq.qualifier_attribute  = qplatq.attribute
31737 AND   qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
31738 AND   qpq.active_flag = G_YES
31739 AND   qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
31740 AND   qpprod.pricing_phase_id = p_pricing_phase_id
31741 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
31742 AND   qpprod.product_attribute_context = qplatpr.context
31743 AND   qpprod.product_attribute = qplatpr.attribute
31744 AND   qpprod.product_attr_value = qplatpr.value_from
31745 AND   qpprod.excluder_flag = G_NO
31746 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
31747 AND   qplatq.line_index = qplines.line_index
31748 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
31749 AND   qplatpr.line_index = qplatq.line_index
31750 AND   qph.source_system_code = qprs.source_system_code
31751 AND   qplines.request_type_code   = qprs.request_type_code
31752 AND   qplatq.attribute_type = 'QUALIFIER'
31753 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
31754 AND   qplatpr.attribute_type='PRODUCT'
31755 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
31756 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
31757 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
31758   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
31759 UNION ALL
31760 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
31761            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
31762            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31763 	   INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31764            INDEX(QPQ QP_QUALIFIERS_N6)
31765 	   INDEX(QPL QP_LIST_LINES_PK)
31766        l_prod_qual_cur_pl */
31767        qpl.list_header_id,
31768        qpl.list_line_id,
31769        qpl.list_line_type_code,
31770        qplatpr.line_index,
31771        qplatpr.applied_flag,
31772        qplatpr.attribute_level               product_attribute_level,
31773        qplatpr.attribute_type                product_attribute_type,
31774        qplatpr.context                       product_attribute_context,
31775        qplatpr.attribute                     product_attribute,
31776        qplatpr.value_from                    product_attr_value,
31777        qpprod.product_uom_code               product_uom_code,
31778        qpprod.excluder_flag,
31779        qplatq.context                        qualifier_attribute_context,
31780        qplatq.attribute                      qualifier_attribute,
31781        qplatq.value_from                     qualifier_attribute_value,
31782        qpq.qualifier_grouping_no             qualifier_grouping_no,
31783        qpq.qualifier_precedence              qualifier_precedence,
31784        qpq.qualifier_datatype,
31785        qpq.qualifier_attr_value              setup_value_from,
31786        qpq.qualifier_attr_value_to           setup_value_to,
31787        qpl.automatic_flag,
31788        qpl.modifier_level_code,
31789        qpl.primary_uom_flag,
31790        qpl.arithmetic_operator               operand_calculation_code,
31791        qpl.operand                           operand_value,
31792        qpl.pricing_group_sequence,
31793        qph.list_type_code                    created_from_list_type,
31794        qph.rounding_factor,
31795        qpl.pricing_phase_id,
31796        qpl.price_break_type_code,
31797        qpl.incompatibility_grp_code,
31798        qpl.price_by_formula_id,
31799        qpl.product_precedence,
31800        qpl.list_line_no,
31801        'HQ'                                  qualifier_type,
31802        qcdt.currency_detail_id,
31803        qcdt.currency_header_id,
31804        qcdt.selling_rounding_factor,
31805        qplines.currency_code                 order_currency,
31806        qplines.pricing_effective_date        pricing_effective_date,
31807        qph.currency_code                     base_currency_code
31808       ,QPL.BREAK_UOM_CODE /* Proration */
31809       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31810       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31811 FROM   --[julin/5007789]
31812        (SELECT /*+ dynamic_sampling(1) */ *
31813         FROM qp_npreq_lines_tmp
31814         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31815         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31816        qp_npreq_line_attrs_tmp qplatq,
31817        qp_qualifiers qpq,
31818        qp_list_headers_b qph,
31819        qp_price_req_sources_v qprs,
31820        qp_npreq_line_attrs_tmp qplatpr,
31821        qp_pricing_attributes qpprod,
31822        qp_list_lines qpl,
31823        qp_currency_details qcdt
31824 WHERE  qph.list_header_id = qpl.list_header_id
31825 --added for moac -- commented references to security profile
31826 --security will be built into qp_list_headers_b
31827 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
31828 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
31829 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
31830 -- 3594459, context and attribute OR'd together
31831 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31832        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31833 AND    qpq.list_header_id = qph.list_header_id
31834 AND   (qplines.price_flag = G_YES OR
31835        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
31836 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
31837 AND   qpq.list_line_id = -1
31838 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
31839 AND   qpl.list_line_id   = qpprod.list_line_id
31840 --AND   qph.currency_code = qplines.currency_code
31841 AND   qph.currency_header_id = qcdt.currency_header_id
31842 AND   qplines.currency_code = qcdt.to_currency_code
31843 AND   nvl(TRUNC(qplines.pricing_effective_date),trunc(sysdate)) between
31844        nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date)) and
31845        nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
31846 AND (
31847         (qcdt.curr_attribute_context is null
31848          and not exists
31849              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
31850 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
31851                where qcdt1.curr_attribute_context IS NOT NULL
31852 		 and qcdt1.curr_attribute_context = pa_tmp.context
31853                  and qcdt1.curr_attribute = pa_tmp.attribute
31854                  and qcdt1.curr_attribute_value = pa_tmp.value_from
31855                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
31856                  and qcdt1.to_currency_code = qcdt.to_currency_code
31857                  and qcdt1.currency_header_id = qcdt.currency_header_id
31858                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
31859                  and pa_tmp.line_index = qplines.line_index
31860                  and TRUNC(qplines.pricing_effective_date) between
31861                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
31862                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
31863         OR
31864         (qcdt.curr_attribute_context is not null
31865          and qcdt.precedence =
31866              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
31867 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
31868                where qcdt2.curr_attribute_context IS NOT NULL
31869 		 and qcdt2.curr_attribute_context = pa_tmp1.context
31870                  and qcdt2.curr_attribute = pa_tmp1.attribute
31871                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
31872                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
31873                  and qcdt2.to_currency_code = qcdt.to_currency_code
31874                  and qcdt2.currency_header_id = qcdt.currency_header_id
31875                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
31876                  and pa_tmp1.line_index = qplines.line_index
31877                  and TRUNC(qplines.pricing_effective_date) between
31878                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
31879                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
31880              )))
31881 AND   qpl.modifier_level_code = qplines.line_type_code
31882 AND   qph.active_flag = G_YES
31883 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31884        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
31885        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
31886 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31887        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
31888        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
31889 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
31890        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
31891        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
31892 AND   qpq.qualifier_context    = qplatq.context
31893 AND   qpq.qualifier_attribute  = qplatq.attribute
31894 AND   qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
31895 AND   qpq.active_flag = G_YES
31896 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
31897         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
31898        or
31899        (qpq.qualifier_datatype = G_NUMERIC
31900         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
31901             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
31902 AND   qpprod.pricing_phase_id = p_pricing_phase_id
31903 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
31904 AND   qpprod.product_attribute_context = qplatpr.context
31905 AND   qpprod.product_attribute = qplatpr.attribute
31906 AND   qpprod.product_attr_value = qplatpr.value_from
31907 AND   qpprod.excluder_flag = G_NO
31908 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
31909 AND   qplatq.line_index = qplines.line_index
31910 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
31911 AND   qplatpr.line_index = qplatq.line_index
31912 AND   qph.source_system_code = qprs.source_system_code
31913 AND   qplines.request_type_code   = qprs.request_type_code
31914 AND   qplatq.attribute_type = 'QUALIFIER'
31915 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
31916 AND   qplatpr.attribute_type='PRODUCT'
31917 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
31918 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
31919 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
31920   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
31921 ORDER BY 4,2;
31922 
31923 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
31924 --[julin/4708044] added index(qplapr QP_PREQ_LINE_ATTRS_TMP_N1), use_nl(qprs)
31925 CURSOR l_prod_qual_pric_cur(p_pricing_phase_id NUMBER) IS
31926 --Product+Qualifiers+Pricing
31927 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
31928            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
31929            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
31930            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
31931            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
31932            INDEX(QPQ QP_QUALIFIERS_N4)
31933            l_prod_qual_pric_cur_pl */
31934        qpl.list_header_id,
31935        qpl.list_line_id,
31936        qpl.list_line_type_code,
31937        qplatpr.line_index,
31938        qplatpr.applied_flag,
31939        qplatpr.attribute_level               product_attribute_level,
31940        qplatpr.attribute_type                product_attribute_type,
31941        qplatpr.context                       product_attribute_context,
31942        qplatpr.attribute                     product_attribute,
31943        qplatpr.value_from                    product_attr_value,
31944        qpprod.product_uom_code               product_uom_code,
31945        qpprod.excluder_flag,
31946        qplatq.context                        qualifier_attribute_context,
31947        qplatq.attribute                      qualifier_attribute,
31948        qplatq.value_from                     qualifier_attribute_value,
31949        qpq.qualifier_grouping_no             qualifier_grouping_no,
31950        qpq.qualifier_precedence              qualifier_precedence,
31951        qpq.qualifier_datatype,
31952        qpq.qualifier_attr_value              setup_value_from,
31953        qpq.qualifier_attr_value_to           setup_value_to,
31954        qpl.automatic_flag,
31955        qpl.modifier_level_code,
31956        qpl.primary_uom_flag,
31957        qpl.arithmetic_operator               operand_calculation_code,
31958        qpl.operand                           operand_value,
31959        qpl.pricing_group_sequence,
31960        qph.list_type_code                    created_from_list_type,
31961        qph.rounding_factor,
31962        qpl.pricing_phase_id,
31963        qpl.price_break_type_code,
31964        qpl.incompatibility_grp_code,
31965        qpl.price_by_formula_id,
31966        qpl.product_precedence,
31967        qpl.list_line_no,
31968        'HQ' QUALIFIER_TYPE,
31969        qplatpc.attribute_level               pricing_attribute_level,
31970        qplatpc.attribute_type                pricing_attribute_type,
31971        qplatpc.context                       pricing_attribute_context,
31972        qplatpc.attribute                     pricing_attribute,
31973        qplatpc.value_from                    pricing_attr_value,
31974        qpprod.pricing_attr_value_from        pricing_setup_value_from,
31975        qpprod.pricing_attr_value_to          pricing_setup_value_to,
31976        qpprod.comparison_operator_code       pricing_comparison_operator,
31977        qpprod.pricing_attribute_datatype     pricing_datatype
31978       ,QPL.BREAK_UOM_CODE /* Proration */
31979       ,QPL.BREAK_UOM_CONTEXT /* Proration */
31980       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
31981 FROM   --[julin/5007789]
31982        (SELECT /*+ dynamic_sampling(1) */ *
31983         FROM qp_npreq_lines_tmp
31984         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
31985         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
31986        qp_npreq_line_attrs_tmp qplatq,
31987        qp_qualifiers qpq ,
31988        qp_list_headers_b qph,
31989        qp_price_req_sources_v qprs,
31990        qp_npreq_line_attrs_tmp qplatpr,
31991        qp_pricing_attributes qpprod ,
31992        qp_npreq_line_attrs_tmp qplatpc,
31993        qp_list_lines qpl
31994 WHERE  qph.list_header_id = qpq.list_header_id
31995 -- 3594459, context and attribute OR'd together
31996 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
31997        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
31998 AND   (qplines.price_flag = G_YES OR
31999        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32000 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32001 AND   qph.list_header_id = qpl.list_header_id
32002 --added for moac -- commented references to security profile
32003 --security will be built into qp_list_headers_b
32004 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32005 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32006 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32007 AND   qpq.list_line_id = -1
32008 AND   qpl.list_line_id   = qpprod.list_line_id
32009 AND   qph.currency_code = qplines.currency_code
32010 AND   qpl.modifier_level_code = qplines.line_type_code
32011 AND   qph.active_flag = G_YES
32012 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32013        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32014        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32015 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32016        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32017        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32018 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32019        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
32020        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
32021 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
32022 AND   qpq.qualifier_context    = qplatq.context
32023 AND   qpq.qualifier_attribute  = qplatq.attribute
32024 AND   qpq.comparison_operator_code = '=' --[julin/5007789]
32025 AND   qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
32026 AND   qpq.active_flag = G_YES
32027 AND   qpprod.pricing_phase_id = p_pricing_phase_id
32028 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
32029 AND   qpprod.product_attribute_context = qplatpr.context
32030 AND   qpprod.product_attribute = qplatpr.attribute
32031 AND   qpprod.product_attr_value = qplatpr.value_from
32032 AND   qpprod.excluder_flag = G_NO
32033 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
32034 AND   qpprod.pricing_attribute_context = qplatpc.context
32035 AND   qpprod.pricing_attribute = qplatpc.attribute
32036 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
32037         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
32038 AND   qplatq.line_index = qplatpc.line_index
32039 AND   qplatq.line_index = qplines.line_index
32040 AND   qplatpc.line_index = qplatpr.line_index
32041 AND   qph.source_system_code = qprs.source_system_code
32042 AND   qplines.request_type_code   = qprs.request_type_code
32043 AND   qplatpr.line_index = qplines.line_index --[julin/4708044]
32044 AND   qplatpr.attribute_type='PRODUCT'
32045 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
32046 AND   qplatpc.attribute_type = 'PRICING'
32047 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
32048 AND   qplatq.attribute_type = 'QUALIFIER'
32049 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
32050 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
32051 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32052 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
32053   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
32054 UNION ALL
32055 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
32056            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
32057            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
32058            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
32059            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
32060            INDEX(QPQ QP_QUALIFIERS_N5)
32061            l_prod_qual_pric_cur_pl */
32062        qpl.list_header_id,
32063        qpl.list_line_id,
32064        qpl.list_line_type_code,
32065        qplatpr.line_index,
32066        qplatpr.applied_flag,
32067        qplatpr.attribute_level               product_attribute_level,
32068        qplatpr.attribute_type                product_attribute_type,
32069        qplatpr.context                       product_attribute_context,
32070        qplatpr.attribute                     product_attribute,
32071        qplatpr.value_from                    product_attr_value,
32072        qpprod.product_uom_code               product_uom_code,
32073        qpprod.excluder_flag,
32074        qplatq.context                        qualifier_attribute_context,
32075        qplatq.attribute                      qualifier_attribute,
32076        qplatq.value_from                     qualifier_attribute_value,
32077        qpq.qualifier_grouping_no             qualifier_grouping_no,
32078        qpq.qualifier_precedence              qualifier_precedence,
32079        qpq.qualifier_datatype,
32080        qpq.qualifier_attr_value              setup_value_from,
32081        qpq.qualifier_attr_value_to           setup_value_to,
32082        qpl.automatic_flag,
32083        qpl.modifier_level_code,
32084        qpl.primary_uom_flag,
32085        qpl.arithmetic_operator               operand_calculation_code,
32086        qpl.operand                           operand_value,
32087        qpl.pricing_group_sequence,
32088        qph.list_type_code                    created_from_list_type,
32089        qph.rounding_factor,
32090        qpl.pricing_phase_id,
32091        qpl.price_break_type_code,
32092        qpl.incompatibility_grp_code,
32093        qpl.price_by_formula_id,
32094        qpl.product_precedence,
32095        qpl.list_line_no,
32096        'HQ' QUALIFIER_TYPE,
32097        qplatpc.attribute_level               pricing_attribute_level,
32098        qplatpc.attribute_type                pricing_attribute_type,
32099        qplatpc.context                       pricing_attribute_context,
32100        qplatpc.attribute                     pricing_attribute,
32101        qplatpc.value_from                    pricing_attr_value,
32102        qpprod.pricing_attr_value_from        pricing_setup_value_from,
32103        qpprod.pricing_attr_value_to          pricing_setup_value_to,
32104        qpprod.comparison_operator_code       pricing_comparison_operator,
32105        qpprod.pricing_attribute_datatype     pricing_datatype
32106       ,QPL.BREAK_UOM_CODE /* Proration */
32107       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32108       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32109 FROM   --[julin/5007789]
32110        (SELECT /*+ dynamic_sampling(1) */ *
32111         FROM qp_npreq_lines_tmp
32112         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
32113         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32114        qp_npreq_line_attrs_tmp qplatq,
32115        qp_qualifiers qpq ,
32116        qp_list_headers_b qph,
32117        qp_price_req_sources_v qprs,
32118        qp_npreq_line_attrs_tmp qplatpr,
32119        qp_pricing_attributes qpprod ,
32120        qp_npreq_line_attrs_tmp qplatpc,
32121        qp_list_lines qpl
32122 WHERE  qph.list_header_id = qpq.list_header_id
32123 -- 3594459, context and attribute OR'd together
32124 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
32125        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
32126 AND   (qplines.price_flag = G_YES OR
32127        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32128 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32129 AND   qph.list_header_id = qpl.list_header_id
32130 --added for moac -- commented references to security profile
32131 --security will be built into qp_list_headers_b
32132 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32133 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32134 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32135 AND   qpq.list_line_id = -1
32136 AND   qpl.list_line_id   = qpprod.list_line_id
32137 AND   qph.currency_code = qplines.currency_code
32138 AND   qpl.modifier_level_code = qplines.line_type_code
32139 AND   qph.active_flag = G_YES
32140 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32141        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32142        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32143 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32144        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32145        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32146 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32147        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
32148        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
32149 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
32150 AND   qpq.qualifier_context    = qplatq.context
32151 AND   qpq.qualifier_attribute  = qplatq.attribute
32152 AND   qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
32153 AND   qpq.active_flag = G_YES
32154 AND   qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
32155 AND   qpprod.pricing_phase_id = p_pricing_phase_id
32156 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
32157 AND   qpprod.product_attribute_context = qplatpr.context
32158 AND   qpprod.product_attribute = qplatpr.attribute
32159 AND   qpprod.product_attr_value = qplatpr.value_from
32160 AND   qpprod.excluder_flag = G_NO
32161 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
32162 AND   qpprod.pricing_attribute_context = qplatpc.context
32163 AND   qpprod.pricing_attribute = qplatpc.attribute
32164 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
32165         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
32166 AND   qplatq.line_index = qplatpc.line_index
32167 AND   qplatq.line_index = qplines.line_index
32168 AND   qplatpc.line_index = qplatpr.line_index
32169 AND   qph.source_system_code = qprs.source_system_code
32170 AND   qplines.request_type_code   = qprs.request_type_code
32171 AND   qplatpr.line_index = qplines.line_index --[julin/4708044]
32172 AND   qplatpr.attribute_type='PRODUCT'
32173 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
32174 AND   qplatpc.attribute_type = 'PRICING'
32175 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
32176 AND   qplatq.attribute_type = 'QUALIFIER'
32177 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
32178 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
32179 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32180 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
32181   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
32182 UNION ALL
32183 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
32184            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
32185            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
32186            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
32187            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
32188            INDEX(QPQ QP_QUALIFIERS_N6)
32189            l_prod_qual_pric_cur_pl */
32190        qpl.list_header_id,
32191        qpl.list_line_id,
32192        qpl.list_line_type_code,
32193        qplatpr.line_index,
32194        qplatpr.applied_flag,
32195        qplatpr.attribute_level               product_attribute_level,
32196        qplatpr.attribute_type                product_attribute_type,
32197        qplatpr.context                       product_attribute_context,
32198        qplatpr.attribute                     product_attribute,
32199        qplatpr.value_from                    product_attr_value,
32200        qpprod.product_uom_code               product_uom_code,
32201        qpprod.excluder_flag,
32202        qplatq.context                        qualifier_attribute_context,
32203        qplatq.attribute                      qualifier_attribute,
32204        qplatq.value_from                     qualifier_attribute_value,
32205        qpq.qualifier_grouping_no             qualifier_grouping_no,
32206        qpq.qualifier_precedence              qualifier_precedence,
32207        qpq.qualifier_datatype,
32208        qpq.qualifier_attr_value              setup_value_from,
32209        qpq.qualifier_attr_value_to           setup_value_to,
32210        qpl.automatic_flag,
32211        qpl.modifier_level_code,
32212        qpl.primary_uom_flag,
32213        qpl.arithmetic_operator               operand_calculation_code,
32214        qpl.operand                           operand_value,
32215        qpl.pricing_group_sequence,
32216        qph.list_type_code                    created_from_list_type,
32217        qph.rounding_factor,
32218        qpl.pricing_phase_id,
32219        qpl.price_break_type_code,
32220        qpl.incompatibility_grp_code,
32221        qpl.price_by_formula_id,
32222        qpl.product_precedence,
32223        qpl.list_line_no,
32224        'HQ' QUALIFIER_TYPE,
32225        qplatpc.attribute_level               pricing_attribute_level,
32226        qplatpc.attribute_type                pricing_attribute_type,
32227        qplatpc.context                       pricing_attribute_context,
32228        qplatpc.attribute                     pricing_attribute,
32229        qplatpc.value_from                    pricing_attr_value,
32230        qpprod.pricing_attr_value_from        pricing_setup_value_from,
32231        qpprod.pricing_attr_value_to          pricing_setup_value_to,
32232        qpprod.comparison_operator_code       pricing_comparison_operator,
32233        qpprod.pricing_attribute_datatype     pricing_datatype
32234       ,QPL.BREAK_UOM_CODE /* Proration */
32235       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32236       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32237 FROM   --[julin/5007789]
32238        (SELECT /*+ dynamic_sampling(1) */ *
32239         FROM qp_npreq_lines_tmp
32240         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
32241         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32242        qp_npreq_line_attrs_tmp qplatq,
32243        qp_qualifiers qpq ,
32244        qp_list_headers_b qph,
32245        qp_price_req_sources_v qprs,
32246        qp_npreq_line_attrs_tmp qplatpr,
32247        qp_pricing_attributes qpprod ,
32248        qp_npreq_line_attrs_tmp qplatpc,
32249        qp_list_lines qpl
32250 WHERE  qph.list_header_id = qpq.list_header_id
32251 -- 3594459, context and attribute OR'd together
32252 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
32253        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
32254 AND   (qplines.price_flag = G_YES OR
32255        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32256 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32257 AND   qph.list_header_id = qpl.list_header_id
32258 --added for moac -- commented references to security profile
32259 --security will be built into qp_list_headers_b
32260 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32261 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32262 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32263 AND   qpq.list_line_id = -1
32264 AND   qpl.list_line_id   = qpprod.list_line_id
32265 AND   qph.currency_code = qplines.currency_code
32266 AND   qpl.modifier_level_code = qplines.line_type_code
32267 AND   qph.active_flag = G_YES
32268 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32269        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32270        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32271 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32272        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32273        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32274 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32275        nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
32276        nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
32277 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
32278 AND   qpq.qualifier_context    = qplatq.context
32279 AND   qpq.qualifier_attribute  = qplatq.attribute
32280 AND   qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
32281 AND   qpq.active_flag = G_YES
32282 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
32283         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
32284        or
32285        (qpq.qualifier_datatype = G_NUMERIC
32286         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
32287             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
32288 AND   qpprod.pricing_phase_id = p_pricing_phase_id
32289 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
32290 AND   qpprod.product_attribute_context = qplatpr.context
32291 AND   qpprod.product_attribute = qplatpr.attribute
32292 AND   qpprod.product_attr_value = qplatpr.value_from
32293 AND   qpprod.excluder_flag = G_NO
32294 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
32295 AND   qpprod.pricing_attribute_context = qplatpc.context
32296 AND   qpprod.pricing_attribute = qplatpc.attribute
32297 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
32298         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
32299 AND   qplatq.line_index = qplatpc.line_index
32300 AND   qplatq.line_index = qplines.line_index
32301 AND   qplatpc.line_index = qplatpr.line_index
32302 AND   qph.source_system_code = qprs.source_system_code
32303 AND   qplines.request_type_code   = qprs.request_type_code
32304 AND   qplatpr.line_index = qplines.line_index --[julin/4708044]
32305 AND   qplatpr.attribute_type='PRODUCT'
32306 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
32307 AND   qplatpc.attribute_type = 'PRICING'
32308 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
32309 AND   qplatq.attribute_type = 'QUALIFIER'
32310 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
32311 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
32312 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32313 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
32314   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
32315 ORDER BY 4,2;
32316 
32317 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
32318 --[julin/4708044] added index(qplapr QP_PREQ_LINE_ATTRS_TMP_N1), use_nl(qprs)
32319 --[julin/5007789]
32320 -- 1. Performing line filter first.
32321 -- 2. Performing qualifier filter before product filter
32322 -- 3. Split into unions ('=', 'BETWEEN', 'NOT =') for better use of indexes
32323 CURSOR l_prod_qual_pric_cur_currency(p_pricing_phase_id NUMBER) IS
32324 --Product+Qualifiers+Pricing
32325 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
32326            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
32327            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
32328            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
32329            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
32330            INDEX(QPQ QP_QUALIFIERS_N4)
32331            l_prod_qual_pric_cur_pl */
32332        qpl.list_header_id,
32333        qpl.list_line_id,
32334        qpl.list_line_type_code,
32335        qplatpr.line_index,
32336        qplatpr.applied_flag,
32337        qplatpr.attribute_level               product_attribute_level,
32338        qplatpr.attribute_type                product_attribute_type,
32339        qplatpr.context                       product_attribute_context,
32340        qplatpr.attribute                     product_attribute,
32341        qplatpr.value_from                    product_attr_value,
32342        qpprod.product_uom_code               product_uom_code,
32343        qpprod.excluder_flag,
32344        qplatq.context                        qualifier_attribute_context,
32345        qplatq.attribute                      qualifier_attribute,
32346        qplatq.value_from                     qualifier_attribute_value,
32347        qpq.qualifier_grouping_no             qualifier_grouping_no,
32348        qpq.qualifier_precedence              qualifier_precedence,
32349        qpq.qualifier_datatype,
32350        qpq.qualifier_attr_value              setup_value_from,
32351        qpq.qualifier_attr_value_to           setup_value_to,
32352        qpl.automatic_flag,
32353        qpl.modifier_level_code,
32354        qpl.primary_uom_flag,
32355        qpl.arithmetic_operator               operand_calculation_code,
32356        qpl.operand                           operand_value,
32357        qpl.pricing_group_sequence,
32358        qph.list_type_code                    created_from_list_type,
32359        qph.rounding_factor,
32360        qpl.pricing_phase_id,
32361        qpl.price_break_type_code,
32362        qpl.incompatibility_grp_code,
32363        qpl.price_by_formula_id,
32364        qpl.product_precedence,
32365        qpl.list_line_no,
32366        'HQ' QUALIFIER_TYPE,
32367        qplatpc.attribute_level               pricing_attribute_level,
32368        qplatpc.attribute_type                pricing_attribute_type,
32369        qplatpc.context                       pricing_attribute_context,
32370        qplatpc.attribute                     pricing_attribute,
32371        qplatpc.value_from                    pricing_attr_value,
32372        qpprod.pricing_attr_value_from        pricing_setup_value_from,
32373        qpprod.pricing_attr_value_to          pricing_setup_value_to,
32374        qpprod.comparison_operator_code       pricing_comparison_operator,
32375        qpprod.pricing_attribute_datatype     pricing_datatype,
32376        qcdt.currency_detail_id,
32377        qcdt.currency_header_id,
32378        qcdt.selling_rounding_factor,
32379        qplines.currency_code                 order_currency,
32380        qplines.pricing_effective_date        pricing_effective_date,
32381        qph.currency_code                     base_currency_code
32382       ,QPL.BREAK_UOM_CODE /* Proration */
32383       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32384       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32385 FROM   --[julin/5007789]
32386        (SELECT /*+ dynamic_sampling(1) */ *
32387         FROM qp_npreq_lines_tmp
32388         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
32389         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32390        qp_npreq_line_attrs_tmp qplatq,
32391        qp_qualifiers qpq ,
32392        qp_list_headers_b qph,
32393        qp_price_req_sources_v qprs,
32394        qp_npreq_line_attrs_tmp qplatpr,
32395        qp_pricing_attributes qpprod ,
32396        qp_npreq_line_attrs_tmp qplatpc,
32397        qp_list_lines qpl,
32398        qp_currency_details qcdt
32399 WHERE  qph.list_header_id = qpq.list_header_id
32400 -- 3594459, context and attribute OR'd together
32401 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
32402        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
32403 --added for moac -- commented references to security profile
32404 --security will be built into qp_list_headers_b
32405 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32406 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32407 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32408 AND   (qplines.price_flag = G_YES OR
32409        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32410 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32411 AND    qph.list_header_id = qpl.list_header_id
32412 AND    qpq.list_line_id = -1
32413 AND    qpl.list_line_id   = qpprod.list_line_id
32414 --AND   qph.currency_code = qplines.currency_code
32415 AND qph.currency_header_id = qcdt.currency_header_id
32416 AND qplines.currency_code = qcdt.to_currency_code
32417 AND TRUNC(qplines.pricing_effective_date) between
32418     nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date))
32419     and nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
32420 AND (
32421         (qcdt.curr_attribute_context is null
32422          and not exists
32423              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
32424 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
32425                where qcdt1.curr_attribute_context IS NOT NULL
32426 		 and qcdt1.curr_attribute_context = pa_tmp.context
32427                  and qcdt1.curr_attribute = pa_tmp.attribute
32428                  and qcdt1.curr_attribute_value = pa_tmp.value_from
32429                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
32430                  and qcdt1.to_currency_code = qcdt.to_currency_code
32431                  and qcdt1.currency_header_id = qcdt.currency_header_id
32432                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
32433                  and pa_tmp.line_index = qplines.line_index
32434                  and TRUNC(qplines.pricing_effective_date) between
32435                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
32436                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
32437         OR
32438         (qcdt.curr_attribute_context is not null
32439          and qcdt.precedence =
32440              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
32441 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
32442                where qcdt2.curr_attribute_context IS NOT NULL
32443 		 and qcdt2.curr_attribute_context = pa_tmp1.context
32444                  and qcdt2.curr_attribute = pa_tmp1.attribute
32445                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
32446                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
32447                  and qcdt2.to_currency_code = qcdt.to_currency_code
32448                  and qcdt2.currency_header_id = qcdt.currency_header_id
32449                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
32450                  and pa_tmp1.line_index = qplines.line_index
32451                  and TRUNC(qplines.pricing_effective_date) between
32452                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
32453                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
32454              )))
32455 AND qpl.modifier_level_code = qplines.line_type_code
32456 AND qph.active_flag = G_YES
32457 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32458        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32459        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32460 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32461       nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32462       nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32463 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32464       nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
32465       nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
32466 AND qpl.list_line_type_code in ('PLL','PMR','PBH')
32467 AND qpq.qualifier_context    = qplatq.context
32468 AND qpq.qualifier_attribute  = qplatq.attribute
32469 AND qpq.comparison_operator_code = '=' --[julin/5007789]
32470 AND qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
32471 AND qpq.active_flag = G_YES
32472 AND qpprod.pricing_phase_id = p_pricing_phase_id
32473 AND qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
32474 AND qpprod.product_attribute_context = qplatpr.context
32475 AND qpprod.product_attribute = qplatpr.attribute
32476 AND qpprod.product_attr_value = qplatpr.value_from
32477 AND qpprod.excluder_flag = G_NO
32478 AND qpprod.list_header_id = qph.list_header_id --[julin/5007789]
32479 AND qpprod.pricing_attribute_context = qplatpc.context
32480 AND qpprod.pricing_attribute = qplatpc.attribute
32481 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
32482       or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
32483 AND qplatq.line_index = qplatpc.line_index
32484 AND qplatq.line_index = qplines.line_index
32485 AND qplatpc.line_index = qplatpr.line_index
32486 AND qph.source_system_code = qprs.source_system_code
32487 AND qplines.request_type_code   = qprs.request_type_code
32488 AND qplatpr.line_index = qplines.line_index --[julin/4708044]
32489 AND qplatpr.attribute_type='PRODUCT'
32490 AND qplatpr.pricing_status_code=G_STATUS_UNCHANGED
32491 AND qplatpc.attribute_type = 'PRICING'
32492 AND qplatpc.pricing_status_code = G_STATUS_UNCHANGED
32493 AND qplatq.attribute_type = 'QUALIFIER'
32494 AND qplatq.pricing_status_code = G_STATUS_UNCHANGED
32495 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
32496 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32497 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
32498   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
32499 UNION ALL
32500 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
32501            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
32502            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
32503            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
32504            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
32505            INDEX(QPQ QP_QUALIFIERS_N5)
32506            l_prod_qual_pric_cur_pl */
32507        qpl.list_header_id,
32508        qpl.list_line_id,
32509        qpl.list_line_type_code,
32510        qplatpr.line_index,
32511        qplatpr.applied_flag,
32512        qplatpr.attribute_level               product_attribute_level,
32513        qplatpr.attribute_type                product_attribute_type,
32514        qplatpr.context                       product_attribute_context,
32515        qplatpr.attribute                     product_attribute,
32516        qplatpr.value_from                    product_attr_value,
32517        qpprod.product_uom_code               product_uom_code,
32518        qpprod.excluder_flag,
32519        qplatq.context                        qualifier_attribute_context,
32520        qplatq.attribute                      qualifier_attribute,
32521        qplatq.value_from                     qualifier_attribute_value,
32522        qpq.qualifier_grouping_no             qualifier_grouping_no,
32523        qpq.qualifier_precedence              qualifier_precedence,
32524        qpq.qualifier_datatype,
32525        qpq.qualifier_attr_value              setup_value_from,
32526        qpq.qualifier_attr_value_to           setup_value_to,
32527        qpl.automatic_flag,
32528        qpl.modifier_level_code,
32529        qpl.primary_uom_flag,
32530        qpl.arithmetic_operator               operand_calculation_code,
32531        qpl.operand                           operand_value,
32532        qpl.pricing_group_sequence,
32533        qph.list_type_code                    created_from_list_type,
32534        qph.rounding_factor,
32535        qpl.pricing_phase_id,
32536        qpl.price_break_type_code,
32537        qpl.incompatibility_grp_code,
32538        qpl.price_by_formula_id,
32539        qpl.product_precedence,
32540        qpl.list_line_no,
32541        'HQ' QUALIFIER_TYPE,
32542        qplatpc.attribute_level               pricing_attribute_level,
32543        qplatpc.attribute_type                pricing_attribute_type,
32544        qplatpc.context                       pricing_attribute_context,
32545        qplatpc.attribute                     pricing_attribute,
32546        qplatpc.value_from                    pricing_attr_value,
32547        qpprod.pricing_attr_value_from        pricing_setup_value_from,
32548        qpprod.pricing_attr_value_to          pricing_setup_value_to,
32549        qpprod.comparison_operator_code       pricing_comparison_operator,
32550        qpprod.pricing_attribute_datatype     pricing_datatype,
32551        qcdt.currency_detail_id,
32552        qcdt.currency_header_id,
32553        qcdt.selling_rounding_factor,
32554        qplines.currency_code                 order_currency,
32555        qplines.pricing_effective_date        pricing_effective_date,
32556        qph.currency_code                     base_currency_code
32557       ,QPL.BREAK_UOM_CODE /* Proration */
32558       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32559       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32560 FROM   --[julin/5007789]
32561        (SELECT /*+ dynamic_sampling(1) */ *
32562         FROM qp_npreq_lines_tmp
32563         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
32564         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32565        qp_npreq_line_attrs_tmp qplatq,
32566        qp_qualifiers qpq ,
32567        qp_list_headers_b qph,
32568        qp_price_req_sources_v qprs,
32569        qp_npreq_line_attrs_tmp qplatpr,
32570        qp_pricing_attributes qpprod ,
32571        qp_npreq_line_attrs_tmp qplatpc,
32572        qp_list_lines qpl,
32573        qp_currency_details qcdt
32574 WHERE  qph.list_header_id = qpq.list_header_id
32575 -- 3594459, context and attribute OR'd together
32576 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
32577        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
32578 --added for moac -- commented references to security profile
32579 --security will be built into qp_list_headers_b
32580 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32581 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32582 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32583 AND   (qplines.price_flag = G_YES OR
32584        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32585 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32586 AND    qph.list_header_id = qpl.list_header_id
32587 AND    qpq.list_line_id = -1
32588 AND    qpl.list_line_id   = qpprod.list_line_id
32589 --AND   qph.currency_code = qplines.currency_code
32590 AND qph.currency_header_id = qcdt.currency_header_id
32591 AND qplines.currency_code = qcdt.to_currency_code
32592 AND TRUNC(qplines.pricing_effective_date) between
32593     nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date))
32594     and nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
32595 AND (
32596         (qcdt.curr_attribute_context is null
32597          and not exists
32598              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
32599 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
32600                where qcdt1.curr_attribute_context IS NOT NULL
32601 		 and qcdt1.curr_attribute_context = pa_tmp.context
32602                  and qcdt1.curr_attribute = pa_tmp.attribute
32603                  and qcdt1.curr_attribute_value = pa_tmp.value_from
32604                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
32605                  and qcdt1.to_currency_code = qcdt.to_currency_code
32606                  and qcdt1.currency_header_id = qcdt.currency_header_id
32607                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
32608                  and pa_tmp.line_index = qplines.line_index
32609                  and TRUNC(qplines.pricing_effective_date) between
32610                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
32611                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
32612         OR
32613         (qcdt.curr_attribute_context is not null
32614          and qcdt.precedence =
32615              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
32616 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
32617                where qcdt2.curr_attribute_context IS NOT NULL
32618 		 and qcdt2.curr_attribute_context = pa_tmp1.context
32619                  and qcdt2.curr_attribute = pa_tmp1.attribute
32620                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
32621                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
32622                  and qcdt2.to_currency_code = qcdt.to_currency_code
32623                  and qcdt2.currency_header_id = qcdt.currency_header_id
32624                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
32625                  and pa_tmp1.line_index = qplines.line_index
32626                  and TRUNC(qplines.pricing_effective_date) between
32627                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
32628                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
32629              )))
32630 AND qpl.modifier_level_code = qplines.line_type_code
32631 AND qph.active_flag = G_YES
32632 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32633        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32634        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32635 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32636       nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32637       nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32638 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32639       nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
32640       nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
32641 AND qpl.list_line_type_code in ('PLL','PMR','PBH')
32642 AND qpq.qualifier_context    = qplatq.context
32643 AND qpq.qualifier_attribute  = qplatq.attribute
32644 AND qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
32645 AND qpq.active_flag = G_YES
32646 AND qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
32647 AND qpprod.pricing_phase_id = p_pricing_phase_id
32648 AND qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
32649 AND qpprod.product_attribute_context = qplatpr.context
32650 AND qpprod.product_attribute = qplatpr.attribute
32651 AND qpprod.product_attr_value = qplatpr.value_from
32652 AND qpprod.excluder_flag = G_NO
32653 AND qpprod.list_header_id = qph.list_header_id --[julin/5007789]
32654 AND qpprod.pricing_attribute_context = qplatpc.context
32655 AND qpprod.pricing_attribute = qplatpc.attribute
32656 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
32657       or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
32658 AND qplatq.line_index = qplatpc.line_index
32659 AND qplatq.line_index = qplines.line_index
32660 AND qplatpc.line_index = qplatpr.line_index
32661 AND qph.source_system_code = qprs.source_system_code
32662 AND qplines.request_type_code   = qprs.request_type_code
32663 AND qplatpr.line_index = qplines.line_index --[julin/4708044]
32664 AND qplatpr.attribute_type='PRODUCT'
32665 AND qplatpr.pricing_status_code=G_STATUS_UNCHANGED
32666 AND qplatpc.attribute_type = 'PRICING'
32667 AND qplatpc.pricing_status_code = G_STATUS_UNCHANGED
32668 AND qplatq.attribute_type = 'QUALIFIER'
32669 AND qplatq.pricing_status_code = G_STATUS_UNCHANGED
32670 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
32671 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32672 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
32673   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
32674 UNION ALL
32675 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
32676            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
32677            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
32678            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
32679            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
32680            INDEX(QPQ QP_QUALIFIERS_N6)
32681            l_prod_qual_pric_cur_pl */
32682        qpl.list_header_id,
32683        qpl.list_line_id,
32684        qpl.list_line_type_code,
32685        qplatpr.line_index,
32686        qplatpr.applied_flag,
32687        qplatpr.attribute_level               product_attribute_level,
32688        qplatpr.attribute_type                product_attribute_type,
32689        qplatpr.context                       product_attribute_context,
32690        qplatpr.attribute                     product_attribute,
32691        qplatpr.value_from                    product_attr_value,
32692        qpprod.product_uom_code               product_uom_code,
32693        qpprod.excluder_flag,
32694        qplatq.context                        qualifier_attribute_context,
32695        qplatq.attribute                      qualifier_attribute,
32696        qplatq.value_from                     qualifier_attribute_value,
32697        qpq.qualifier_grouping_no             qualifier_grouping_no,
32698        qpq.qualifier_precedence              qualifier_precedence,
32699        qpq.qualifier_datatype,
32700        qpq.qualifier_attr_value              setup_value_from,
32701        qpq.qualifier_attr_value_to           setup_value_to,
32702        qpl.automatic_flag,
32703        qpl.modifier_level_code,
32704        qpl.primary_uom_flag,
32705        qpl.arithmetic_operator               operand_calculation_code,
32706        qpl.operand                           operand_value,
32707        qpl.pricing_group_sequence,
32708        qph.list_type_code                    created_from_list_type,
32709        qph.rounding_factor,
32710        qpl.pricing_phase_id,
32711        qpl.price_break_type_code,
32712        qpl.incompatibility_grp_code,
32713        qpl.price_by_formula_id,
32714        qpl.product_precedence,
32715        qpl.list_line_no,
32716        'HQ' QUALIFIER_TYPE,
32717        qplatpc.attribute_level               pricing_attribute_level,
32718        qplatpc.attribute_type                pricing_attribute_type,
32719        qplatpc.context                       pricing_attribute_context,
32720        qplatpc.attribute                     pricing_attribute,
32721        qplatpc.value_from                    pricing_attr_value,
32722        qpprod.pricing_attr_value_from        pricing_setup_value_from,
32723        qpprod.pricing_attr_value_to          pricing_setup_value_to,
32724        qpprod.comparison_operator_code       pricing_comparison_operator,
32725        qpprod.pricing_attribute_datatype     pricing_datatype,
32726        qcdt.currency_detail_id,
32727        qcdt.currency_header_id,
32728        qcdt.selling_rounding_factor,
32729        qplines.currency_code                 order_currency,
32730        qplines.pricing_effective_date        pricing_effective_date,
32731        qph.currency_code                     base_currency_code
32732       ,QPL.BREAK_UOM_CODE /* Proration */
32733       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32734       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32735 FROM   --[julin/5007789]
32736        (SELECT /*+ dynamic_sampling(1) */ *
32737         FROM qp_npreq_lines_tmp
32738         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
32739         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32740        qp_npreq_line_attrs_tmp qplatq,
32741        qp_qualifiers qpq ,
32742        qp_list_headers_b qph,
32743        qp_price_req_sources_v qprs,
32744        qp_npreq_line_attrs_tmp qplatpr,
32745        qp_pricing_attributes qpprod ,
32746        qp_npreq_line_attrs_tmp qplatpc,
32747        qp_list_lines qpl,
32748        qp_currency_details qcdt
32749 WHERE  qph.list_header_id = qpq.list_header_id
32750 -- 3594459, context and attribute OR'd together
32751 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
32752        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
32753 --added for moac -- commented references to security profile
32754 --security will be built into qp_list_headers_b
32755 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32756 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32757 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32758 AND   (qplines.price_flag = G_YES OR
32759        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32760 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32761 AND    qph.list_header_id = qpl.list_header_id
32762 AND    qpq.list_line_id = -1
32763 AND    qpl.list_line_id   = qpprod.list_line_id
32764 --AND   qph.currency_code = qplines.currency_code
32765 AND qph.currency_header_id = qcdt.currency_header_id
32766 AND qplines.currency_code = qcdt.to_currency_code
32767 AND TRUNC(qplines.pricing_effective_date) between
32768     nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date))
32769     and nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
32770 AND (
32771         (qcdt.curr_attribute_context is null
32772          and not exists
32773              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
32774 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
32775                where qcdt1.curr_attribute_context IS NOT NULL
32776 		 and qcdt1.curr_attribute_context = pa_tmp.context
32777                  and qcdt1.curr_attribute = pa_tmp.attribute
32778                  and qcdt1.curr_attribute_value = pa_tmp.value_from
32779                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
32780                  and qcdt1.to_currency_code = qcdt.to_currency_code
32781                  and qcdt1.currency_header_id = qcdt.currency_header_id
32782                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
32783                  and pa_tmp.line_index = qplines.line_index
32784                  and TRUNC(qplines.pricing_effective_date) between
32785                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
32786                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
32787         OR
32788         (qcdt.curr_attribute_context is not null
32789          and qcdt.precedence =
32790              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
32791 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
32792                where qcdt2.curr_attribute_context IS NOT NULL
32793 		 and qcdt2.curr_attribute_context = pa_tmp1.context
32794                  and qcdt2.curr_attribute = pa_tmp1.attribute
32795                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
32796                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
32797                  and qcdt2.to_currency_code = qcdt.to_currency_code
32798                  and qcdt2.currency_header_id = qcdt.currency_header_id
32799                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
32800                  and pa_tmp1.line_index = qplines.line_index
32801                  and TRUNC(qplines.pricing_effective_date) between
32802                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
32803                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
32804              )))
32805 AND qpl.modifier_level_code = qplines.line_type_code
32806 AND qph.active_flag = G_YES
32807 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32808        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32809        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32810 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32811       nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32812       nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32813 AND nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32814       nvl(qpq.start_date_active, TRUNC(qplines.pricing_effective_date)) and
32815       nvl(qpq.end_date_active,TRUNC(qplines.pricing_effective_date))
32816 AND qpl.list_line_type_code in ('PLL','PMR','PBH')
32817 AND qpq.qualifier_context    = qplatq.context
32818 AND qpq.qualifier_attribute  = qplatq.attribute
32819 AND qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
32820 AND qpq.active_flag = G_YES
32821 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
32822         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
32823        or
32824        (qpq.qualifier_datatype = G_NUMERIC
32825         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
32826             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
32827 AND qpprod.pricing_phase_id = p_pricing_phase_id
32828 AND qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
32829 AND qpprod.product_attribute_context = qplatpr.context
32830 AND qpprod.product_attribute = qplatpr.attribute
32831 AND qpprod.product_attr_value = qplatpr.value_from
32832 AND qpprod.excluder_flag = G_NO
32833 AND qpprod.list_header_id = qph.list_header_id --[julin/5007789]
32834 AND qpprod.pricing_attribute_context = qplatpc.context
32835 AND qpprod.pricing_attribute = qplatpc.attribute
32836 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
32837       or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
32838 AND qplatq.line_index = qplatpc.line_index
32839 AND qplatq.line_index = qplines.line_index
32840 AND qplatpc.line_index = qplatpr.line_index
32841 AND qph.source_system_code = qprs.source_system_code
32842 AND qplines.request_type_code   = qprs.request_type_code
32843 AND qplatpr.line_index = qplines.line_index --[julin/4708044]
32844 AND qplatpr.attribute_type='PRODUCT'
32845 AND qplatpr.pricing_status_code=G_STATUS_UNCHANGED
32846 AND qplatpc.attribute_type = 'PRICING'
32847 AND qplatpc.pricing_status_code = G_STATUS_UNCHANGED
32848 AND qplatq.attribute_type = 'QUALIFIER'
32849 AND qplatq.pricing_status_code = G_STATUS_UNCHANGED
32850 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
32851 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32852 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
32853   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
32854 ORDER BY 4,2;
32855 
32856 --[julin/5007789] Tuned query as follows:
32857 -- 1. Performing line filter first.
32858 -- 2. Merged qplatpr subquery conditions into main where clause.
32859 CURSOR l_prod_cur (p_pricing_phase_id NUMBER) IS
32860 -- Only Product attributes
32861 -- bug 9210308 - Added index hint for index QP_LIST_LINES_PK
32862 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPL QPH QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) index(QPL QP_LIST_LINES_PK) l_prod_cur_pl */
32863        qpl.list_header_id,
32864        qpl.list_line_id,
32865        qpl.list_line_type_code,
32866        qplatpr.line_index,
32867        qplatpr.applied_flag,
32868        qplatpr.attribute_level     product_attribute_level,
32869        qplatpr.attribute_type      product_attribute_type,
32870        qplatpr.context             product_attribute_context,
32871        qplatpr.attribute           product_attribute,
32872        qplatpr.value_from          product_attr_value,
32873        qpprod.product_uom_code     product_uom_code,
32874        qpprod.excluder_flag,
32875        qpl.automatic_flag,
32876        qpl.modifier_level_code,
32877        qpl.primary_uom_flag,
32878        qpl.arithmetic_operator     operand_calculation_code,
32879        qpl.operand                 operand_value,
32880        qpl.pricing_group_sequence,
32881        qph.list_type_code          created_from_list_type,
32882        qph.rounding_factor,
32883        qpl.pricing_phase_id,
32884        qpl.price_break_type_code,
32885        qpl.incompatibility_grp_code,
32886        qpl.price_by_formula_id,
32887        qpl.product_precedence,
32888        qpl.list_line_no
32889       ,QPL.BREAK_UOM_CODE /* Proration */
32890       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32891       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32892 FROM --[julin/5000789]
32893      (SELECT /*+ dynamic_sampling(1) */ *
32894       FROM  qp_npreq_lines_tmp
32895       WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
32896       AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32897      qp_npreq_line_attrs_tmp qplatpr,
32898      qp_pricing_attributes qpprod ,
32899      qp_list_lines qpl ,
32900      qp_list_headers_b  qph  ,
32901      qp_price_req_sources_v qprs
32902 WHERE
32903      qph.list_header_id = qpprod.list_header_id
32904 --added for moac -- commented references to security profile
32905 --security will be built into qp_list_headers_b
32906 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32907 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32908 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32909 AND  qpl.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
32910 AND  qpl.list_line_type_code in ('PLL','PMR','PBH')
32911 AND  (qplines.price_flag = G_YES OR
32912       (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32913 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
32914 AND  qph.currency_code = qplines.currency_code
32915 AND  qpl.modifier_level_code = qplines.line_type_code
32916 AND  qph.active_flag = G_YES
32917 AND  qpl.list_line_id = qpprod.list_line_id
32918 AND  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32919        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
32920        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
32921 AND  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
32922       nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
32923       nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
32924 AND  qpl.pricing_phase_id = p_pricing_phase_id
32925 AND  qpprod.pricing_phase_id = p_pricing_phase_id
32926 AND  qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
32927 AND  qpprod.product_attribute_context = qplatpr.context
32928 AND  qpprod.product_attribute = qplatpr.attribute
32929 AND  qpprod.product_attr_value = qplatpr.value_from
32930 AND  qpprod.excluder_flag = G_NO
32931 AND  qph.source_system_code = qprs.source_system_code
32932 AND  qplines.request_type_code   = qprs.request_type_code
32933 AND  qplatpr.line_index = qplines.line_index
32934 AND  qplatpr.attribute_type='PRODUCT' --[julin/5007789]
32935 AND  qplatpr.pricing_status_code=G_STATUS_UNCHANGED --[julin/5007789]
32936 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
32937 ORDER BY 4,2;  --order by list_line_id
32938 
32939 --[julin/5007789] Tuned query as follows:
32940 -- 1. Performing line filter first.
32941 CURSOR l_prod_cur_currency (p_pricing_phase_id NUMBER) IS
32942 -- Product Only.
32943 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPL QPH QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) INDEX(QPL QP_LIST_LINES_PK) l_prod_cur_pl */
32944        qpl.list_header_id,
32945        qpl.list_line_id,
32946        qpl.list_line_type_code,
32947        qplatpr.line_index,
32948        qplatpr.applied_flag,
32949        qplatpr.attribute_level               product_attribute_level,
32950        qplatpr.attribute_type                product_attribute_type,
32951        qplatpr.context                       product_attribute_context,
32952        qplatpr.attribute                     product_attribute,
32953        qplatpr.value_from                    product_attr_value,
32954        qpprod.product_uom_code               product_uom_code,
32955        qpprod.excluder_flag,
32956        qpl.automatic_flag,
32957        qpl.modifier_level_code,
32958        qpl.primary_uom_flag,
32959        qpl.arithmetic_operator               operand_calculation_code,
32960        qpl.operand                           operand_value,
32961        qpl.pricing_group_sequence,
32962        qph.list_type_code                    created_from_list_type,
32963        qph.rounding_factor,
32964        qpl.pricing_phase_id,
32965        qpl.price_break_type_code,
32966        qpl.incompatibility_grp_code,
32967        qpl.price_by_formula_id,
32968        qpl.product_precedence,
32969        qpl.list_line_no,
32970        qcdt.currency_detail_id,
32971        qcdt.currency_header_id,
32972        qcdt.selling_rounding_factor,
32973        qplines.currency_code                 order_currency,
32974        qplines.pricing_effective_date        pricing_effective_date,
32975        qph.currency_code                     base_currency_code
32976       ,QPL.BREAK_UOM_CODE /* Proration */
32977       ,QPL.BREAK_UOM_CONTEXT /* Proration */
32978       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
32979 FROM --[julin/5007789]
32980      (SELECT /*+ dynamic_sampling(1) */ *
32981       FROM  qp_npreq_lines_tmp
32982       WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
32983       AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
32984        qp_npreq_line_attrs_tmp qplatpr,
32985        qp_pricing_attributes qpprod,
32986        qp_list_lines qpl,
32987        qp_list_headers_b qph,
32988        qp_price_req_sources_v qprs,
32989        qp_currency_details qcdt
32990 WHERE  qph.list_header_id = qpl.list_header_id
32991 AND qph.list_header_id = qpprod.list_header_id
32992 --added for moac -- commented references to security profile
32993 --security will be built into qp_list_headers_b
32994 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
32995 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
32996 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
32997 AND   (qplines.price_flag = G_YES OR
32998        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
32999 AND  qpl.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
33000 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
33001 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
33002 AND   qpl.list_line_id   = qpprod.list_line_id
33003 --AND   qph.currency_code = qplines.currency_code
33004 AND   qph.currency_header_id = qcdt.currency_header_id
33005 AND   qplines.currency_code = qcdt.to_currency_code
33006 AND   TRUNC(qplines.pricing_effective_date) between
33007       nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date))
33008       and nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
33009 AND (
33010         (qcdt.curr_attribute_context is null
33011          and not exists
33012              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
33013 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
33014                where qcdt1.curr_attribute_context IS NOT NULL
33015 		 and qcdt1.curr_attribute_context = pa_tmp.context
33016                  and qcdt1.curr_attribute = pa_tmp.attribute
33017                  and qcdt1.curr_attribute_value = pa_tmp.value_from
33018                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
33019                  and qcdt1.to_currency_code = qcdt.to_currency_code
33020                  and qcdt1.currency_header_id = qcdt.currency_header_id
33021                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
33022                  and pa_tmp.line_index = qplines.line_index
33023                  and TRUNC(qplines.pricing_effective_date) between
33024                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
33025                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
33026         OR
33027         (qcdt.curr_attribute_context is not null
33028          and qcdt.precedence =
33029              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
33030 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
33031                where qcdt2.curr_attribute_context IS NOT NULL
33032 		 and qcdt2.curr_attribute_context = pa_tmp1.context
33033                  and qcdt2.curr_attribute = pa_tmp1.attribute
33034                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
33035                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
33036                  and qcdt2.to_currency_code = qcdt.to_currency_code
33037                  and qcdt2.currency_header_id = qcdt.currency_header_id
33038                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
33039                  and pa_tmp1.line_index = qplines.line_index
33040                  and TRUNC(qplines.pricing_effective_date) between
33041                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
33042                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
33043              )))
33044 AND   qpl.modifier_level_code = qplines.line_type_code
33045 AND   qph.active_flag = G_YES
33046 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
33047        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
33048        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
33049 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
33050        nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
33051        nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
33052 AND   qpl.pricing_phase_id = p_pricing_phase_id
33053 AND   qpprod.pricing_phase_id = p_pricing_phase_id
33054 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
33055 AND   qpprod.product_attribute_context = qplatpr.context
33056 AND   qpprod.product_attribute = qplatpr.attribute
33057 AND   qpprod.product_attr_value = qplatpr.value_from
33058 AND   qpprod.excluder_flag = G_NO
33059 AND   qph.source_system_code = qprs.source_system_code
33060 AND   qplines.request_type_code   = qprs.request_type_code
33061 AND   qplatpr.attribute_type='PRODUCT'
33062 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
33063 AND   QPLATPR.LINE_INDEX = QPLINES.LINE_INDEX -- 4331801/4365538
33064 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
33065 ORDER BY 4,2;
33066 
33067 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
33068 --[julin/5007789] Tuned query as follows:
33069 -- 1. Performing line filter first.
33070 -- 2. Merged qplatpr subquery conditions into main where clause.
33071 -- 3. Merged qplatpc subquery conditions into main where clause.
33072 CURSOR l_prod_pric_cur (p_pricing_phase_id NUMBER) IS
33073 --PRODUCT and PRICING attributes
33074 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPLATPC QPL QPH QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2) l_prod_pric_cur_pl */
33075        qpl.list_header_id,
33076        qpl.list_line_id,
33077        qpl.list_line_type_code,
33078        qplatpr.line_index,
33079        qplatpr.applied_flag,
33080        qplatpr.attribute_level               product_attribute_level,
33081        qplatpr.attribute_type                product_attribute_type,
33082        qplatpr.context                       product_attribute_context,
33083        qplatpr.attribute                     product_attribute,
33084        qplatpr.value_from                    product_attr_value,
33085        qpprod.product_uom_code               product_uom_code,
33086        qpprod.excluder_flag,
33087        qpl.automatic_flag,
33088        qpl.modifier_level_code,
33089        qpl.primary_uom_flag,
33090        qpl.arithmetic_operator               operand_calculation_code,
33091        qpl.operand                           operand_value,
33092        qpl.pricing_group_sequence,
33093        qph.list_type_code                    created_from_list_type,
33094        qph.rounding_factor,
33095        qpl.pricing_phase_id,
33096        qpl.price_break_type_code,
33097        qpl.incompatibility_grp_code,
33098        qpl.price_by_formula_id,
33099        qpl.product_precedence,
33100        qpl.list_line_no,
33101        qplatpc.attribute_level               pricing_attribute_level,
33102        qplatpc.attribute_type                pricing_attribute_type,
33103        qplatpc.context                       pricing_attribute_context,
33104        qplatpc.attribute                     pricing_attribute,
33105        qplatpc.value_from                    pricing_attr_value,
33106        qpprod.pricing_attr_value_from        pricing_setup_value_from,
33107        qpprod.pricing_attr_value_to          pricing_setup_value_to,
33108        qpprod.comparison_operator_code       pricing_comparison_operator,
33109        qpprod.pricing_attribute_datatype     pricing_datatype
33110       ,QPL.BREAK_UOM_CODE /* Proration */
33111       ,QPL.BREAK_UOM_CONTEXT /* Proration */
33112       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
33113 FROM  --[julin/5007789]
33114       (SELECT /*+ dynamic_sampling(1) */ *
33115        FROM  qp_npreq_lines_tmp
33116        WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
33117        AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
33118        qp_npreq_line_attrs_tmp qplatpr,
33119        qp_pricing_attributes qpprod,
33120        qp_npreq_line_attrs_tmp qplatpc,
33121        qp_list_lines qpl,
33122        qp_list_headers_b  qph,
33123        qp_price_req_sources_v QPRS
33124 WHERE
33125       qph.list_header_id = qpl.list_header_id
33126 --added for moac -- commented references to security profile
33127 --security will be built into qp_list_headers_b
33128 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
33129 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
33130 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
33131 AND   qpl.list_line_id = qpprod.list_line_id
33132 AND   qpl.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
33133 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
33134 AND  (qplines.price_flag = G_YES OR
33135       (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
33136 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
33137 AND  qph.currency_code = qplines.currency_code --5922273
33138 AND  qph.active_flag = G_YES
33139 AND  qpl.pricing_phase_id = p_pricing_phase_id
33140 AND  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
33141        nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
33142        nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
33143 AND  nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
33144       nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date)) and
33145       nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
33146 AND  qpprod.pricing_phase_id = p_pricing_phase_id
33147 AND  qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
33148 AND  qpprod.product_attribute_context = qplatpr.context
33149 AND  qpprod.product_attribute = qplatpr.attribute
33150 AND  qpprod.product_attr_value = qplatpr.value_from
33151 AND  qpprod.excluder_flag = G_NO
33152 AND  qpprod.pricing_attribute_context = qplatpc.context
33153 AND  qpprod.pricing_attribute = qplatpc.attribute
33154 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
33155          or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --8463623
33156          --or qpl.price_break_type_code = G_RECURRING_BREAK)
33157 AND  qplatpc.attribute_type = 'PRICING' --[julin/5007789]
33158 AND  qplatpc.pricing_status_code = G_STATUS_UNCHANGED --[julin/5007789]
33159 AND  qplatpc.line_index = qplines.line_index
33160 AND  qplatpr.line_index = qplines.line_index
33161 AND  qplatpr.attribute_type = 'PRODUCT' --[julin/5007789]
33162 AND  qplatpr.pricing_status_code = G_STATUS_UNCHANGED --[julin/5007789]
33163 AND  qph.source_system_code = qprs.source_system_code
33164 AND  qplines.request_type_code   = qprs.request_type_code
33165 --AND   qplatpc.pricing_attr_flag = G_YES --[julin/4708044] currently not reliable value, not used in index
33166 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
33167 ORDER BY 4,2;
33168 
33169 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
33170 --[julin/5007789] Tuned query as follows:
33171 -- 1. Performing line filter first.
33172 CURSOR l_prod_pric_cur_currency(p_pricing_phase_id NUMBER) IS
33173 --Product+Pricing
33174 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPLATPC QPL QPH QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2) l_prod_pric_cur_pl */
33175        qpl.list_header_id,
33176        qpl.list_line_id,
33177        qpl.list_line_type_code,
33178        qplatpr.line_index,
33179        qplatpr.applied_flag,
33180        qplatpr.attribute_level               product_attribute_level,
33181        qplatpr.attribute_type                product_attribute_type,
33182        qplatpr.context                       product_attribute_context,
33183        qplatpr.attribute                     product_attribute,
33184        qplatpr.value_from                    product_attr_value,
33185        qpprod.product_uom_code               product_uom_code,
33186        qpprod.excluder_flag,
33187        qpl.automatic_flag,
33188        qpl.modifier_level_code,
33189        qpl.primary_uom_flag,
33190        qpl.arithmetic_operator               operand_calculation_code,
33191        qpl.operand                           operand_value,
33192        qpl.pricing_group_sequence,
33193        qph.list_type_code                    created_from_list_type,
33194        qph.rounding_factor,
33195        qpl.pricing_phase_id,
33196        qpl.price_break_type_code,
33197        qpl.incompatibility_grp_code,
33198        qpl.price_by_formula_id,
33199        qpl.product_precedence,
33200        qpl.list_line_no,
33201        qplatpc.attribute_level               pricing_attribute_level,
33202        qplatpc.attribute_type                pricing_attribute_type,
33203        qplatpc.context                       pricing_attribute_context,
33204        qplatpc.attribute                     pricing_attribute,
33205        qplatpc.value_from                    pricing_attr_value,
33206        qpprod.pricing_attr_value_from        pricing_setup_value_from,
33207        qpprod.pricing_attr_value_to          pricing_setup_value_to,
33208        qpprod.comparison_operator_code       pricing_comparison_operator,
33209        qpprod.pricing_attribute_datatype     pricing_datatype,
33210        qcdt.currency_detail_id,
33211        qcdt.currency_header_id,
33212        qcdt.selling_rounding_factor,
33213        qplines.currency_code                 order_currency,
33214        qplines.pricing_effective_date        pricing_effective_date,
33215        qph.currency_code                     base_currency_code
33216       ,QPL.BREAK_UOM_CODE /* Proration */
33217       ,QPL.BREAK_UOM_CONTEXT /* Proration */
33218       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
33219 FROM  --[julin/5007789]
33220       (SELECT /*+ dynamic_sampling(1) */ *
33221        FROM  qp_npreq_lines_tmp
33222        WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
33223        AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
33224        qp_npreq_line_attrs_tmp qplatpr,
33225        qp_pricing_attributes qpprod ,
33226        qp_npreq_line_attrs_tmp qplatpc,
33227        qp_list_lines qpl ,
33228        qp_list_headers_b qph,
33229        qp_price_req_sources_v qprs,
33230        qp_currency_details qcdt
33231 WHERE
33232       qph.list_header_id = qpl.list_header_id
33233 --added for moac -- commented references to security profile
33234 --security will be built into qp_list_headers_b
33235 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
33236 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
33237 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
33238 AND   qpl.list_line_id   = qpprod.list_line_id
33239 AND   qpl.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
33240 AND   (qplines.price_flag = G_YES OR
33241        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
33242 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
33243 --AND   qph.currency_code = qplines.currency_code
33244 AND   qph.currency_header_id = qcdt.currency_header_id
33245 AND   qplines.currency_code = qcdt.to_currency_code
33246 AND   TRUNC(qplines.pricing_effective_date) between
33247        nvl(trunc(qcdt.start_date_active),TRUNC(qplines.pricing_effective_date)) and
33248        nvl(trunc(qcdt.end_date_active),TRUNC(qplines.pricing_effective_date))
33249 AND (
33250         (qcdt.curr_attribute_context is null
33251          and not exists
33252              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
33253 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
33254                where qcdt1.curr_attribute_context IS NOT NULL
33255 		 and qcdt1.curr_attribute_context = pa_tmp.context
33256                  and qcdt1.curr_attribute = pa_tmp.attribute
33257                  and qcdt1.curr_attribute_value = pa_tmp.value_from
33258                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
33259                  and qcdt1.to_currency_code = qcdt.to_currency_code
33260                  and qcdt1.currency_header_id = qcdt.currency_header_id
33261                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
33262                  and pa_tmp.line_index = qplines.line_index
33263                  and TRUNC(qplines.pricing_effective_date) between
33264                      nvl(trunc(qcdt1.start_date_active),TRUNC(qplines.pricing_effective_date))
33265                      and nvl(trunc(qcdt1.end_date_active),TRUNC(qplines.pricing_effective_date))))
33266         OR
33267         (qcdt.curr_attribute_context is not null
33268          and qcdt.precedence =
33269              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
33270 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
33271                where qcdt2.curr_attribute_context IS NOT NULL
33272 		 and qcdt2.curr_attribute_context = pa_tmp1.context
33273                  and qcdt2.curr_attribute = pa_tmp1.attribute
33274                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
33275                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
33276                  and qcdt2.to_currency_code = qcdt.to_currency_code
33277                  and qcdt2.currency_header_id = qcdt.currency_header_id
33278                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
33279                  and pa_tmp1.line_index = qplines.line_index
33280                  and TRUNC(qplines.pricing_effective_date) between
33281                      nvl(trunc(qcdt2.start_date_active),TRUNC(qplines.pricing_effective_date))
33282                      and nvl(trunc(qcdt2.end_date_active),TRUNC(qplines.pricing_effective_date))
33283              )))
33284 AND   qpl.modifier_level_code = qplines.line_type_code
33285 AND   qph.active_flag = G_YES
33286 AND   nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)) between
33287       nvl(qph.start_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE))) and
33288       nvl(qph.end_date_active,nvl(TRUNC(qplines.pricing_effective_date),TRUNC(SYSDATE)))
33289 AND   TRUNC(qplines.pricing_effective_date) between
33290       nvl(TRUNC(qpl.start_date_active), TRUNC(qplines.pricing_effective_date))
33291       and nvl(TRUNC(qpl.end_date_active),TRUNC(qplines.pricing_effective_date))
33292 AND   qpl.pricing_phase_id = p_pricing_phase_id
33293 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
33294 AND   qpprod.pricing_phase_id = p_pricing_phase_id
33295 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
33296 AND   qpprod.product_attribute_context = qplatpr.context
33297 AND   qpprod.product_attribute = qplatpr.attribute
33298 AND   qpprod.product_attr_value = qplatpr.value_from
33299 AND   qpprod.excluder_flag = G_NO
33300 AND   qpprod.pricing_attribute_context = qplatpc.context
33301 AND   qpprod.pricing_attribute = qplatpc.attribute
33302 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
33303         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))  --	8463623
33304 AND   qplatpc.line_index = qplatpr.line_index
33305 AND   qplatpr.line_index = qplines.line_index -- 4331801/4365538
33306 AND   qph.source_system_code = qprs.source_system_code
33307 AND   qplines.request_type_code   = qprs.request_type_code
33308 AND   qplatpr.attribute_type='PRODUCT'
33309 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
33310 AND   qplatpc.attribute_type = 'PRICING'
33311 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
33312 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
33313 ORDER BY 4,2;
33314 
33315 J PLS_INTEGER:=1;
33316 N PLS_INTEGER:=1;
33317 K PLS_INTEGER:=1;
33318 M PLS_INTEGER:=1;
33319 l_status VARCHAR2(30);
33320 l_status_code VARCHAR2(30);
33321 l_status_text VARCHAR2(240);
33322 l_list_line_id NUMBER := 0 ;
33323 l_line_index PLS_INTEGER := 0 ;
33324 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.Select_Price_List_Lines';
33325 l_prod_qual_count PLS_INTEGER :=0;
33326 l_prod_cur_count PLS_INTEGER :=0;
33327 
33328 l_line_detail_index PLS_INTEGER;
33329 lq_line_index              NUMBER := -9999;
33330 lq_list_line_id            NUMBER := -9999;
33331 nROWS                      PLS_INTEGER := 1000;
33332 
33333 E_ROUTINE_ERRORS            EXCEPTION;
33334 
33335 BEGIN
33336 
33337    x_status_code := FND_API.G_RET_STS_SUCCESS;
33338    l_prod_qual_count :=0;
33339    l_prod_cur_count  :=0;
33340 
33341    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33342    engine_debug('Before Big Select');
33343    engine_debug('p_pricing_phase_id: '||p_pricing_phase_id);
33344    engine_debug('p_freeze_override_flag: '||p_freeze_override_flag);
33345 
33346    END IF;
33347 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
33348   --selecting lists that match product and qualifiers attributes
33349   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33350     engine_debug('cursor for l_prod_qual_cur_currency-multi-currency TRUE');
33351   END IF;
33352 
33353   qp_debug_util.tstart('L_PROD_QUAL_CUR_CURRENCY','Cursor Loop l_prod_qual_cur_currency');
33354 
33355   OPEN l_prod_qual_cur_currency(p_pricing_phase_id);
33356 
33357 
33358   LOOP
33359     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
33360        deleted here.  There is no need to explicitly delete since BULK COLLECT
33361        will truncate the data before populating. */
33362 
33363     -- fetch into _P and _Q tables here
33364     FETCH l_prod_qual_cur_currency BULK COLLECT INTO
33365       G_LIST_HEADER_ID_TBL_P,
33366       G_LIST_LINE_ID_TBL_P,
33367       G_LIST_LINE_TYPE_TBL_P,
33368       G_LINE_INDEX_TBL_P,
33369       G_APPLIED_FLAG_TBL_P,
33370       G_ATTRIBUTE_LEVEL_TBL_P,
33371       G_ATTRIBUTE_TYPE_TBL_P,
33372       G_CONTEXT_TBL_P,
33373       G_ATTRIBUTE_TBL_P,
33374       G_VALUE_FROM_TBL_P,
33375       G_PRODUCT_UOM_CODE_TBL_P,
33376       G_EXCLUDER_FLAG_TBL_P,
33377       G_CONTEXT_TBL_Q,
33378       G_ATTRIBUTE_TBL_Q,
33379       G_VALUE_FROM_TBL_Q,
33380       G_GROUPING_NO_TBL_Q,
33381       G_QUALIFIER_PRECEDENCE_TBL_Q,
33382       G_DATATYPE_TBL_Q,
33383       G_SETUP_VALUE_FROM_TBL_Q,
33384       G_SETUP_VALUE_TO_TBL_Q,
33385       G_AUTOMATIC_FLAG_TBL_P,
33386       G_MODIFIER_LEVEL_CODE_TBL_P,
33387       G_PRIMARY_UOM_FLAG_TBL_P,
33388       G_OPER_CALCULATION_CODE_TBL_P,
33389       G_OPERAND_VALUE_TBL_P,
33390       G_PRICING_GROUP_SEQUENCE_TBL_P,
33391       G_LIST_TYPE_CODE_TBL_P,
33392       G_ROUNDING_FACTOR_TBL_P,
33393       G_PRICING_PHASE_ID_TBL_P,
33394       G_PRICE_BREAK_TYPE_CODE_TBL_P,
33395       G_INCOMP_GRP_CODE_TBL_P,
33396       G_PRICE_FORMULA_ID_TBL_P,
33397       G_PRODUCT_PRECEDENCE_TBL_P,
33398       G_LIST_LINE_NO_TBL_P,
33399       G_QUALIFIER_TYPE_TBL_Q ,
33400       G_CURRENCY_DETAIL_ID_TBL_P,
33401       G_CURRENCY_HEADER_ID_TBL_P,
33402       G_SELLING_ROUNDING_TBL_P,
33403       G_ORDER_CURRENCY_TBL_P,
33404       G_PRICING_EFFECTIVE_DATE_TBL_P,
33405       G_BASE_CURRENCY_CODE_TBL_P
33406      ,G_BREAK_UOM_TBL_P /* Proration */
33407      ,G_BREAK_CONTEXT_TBL_P /* Proration */
33408      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
33409       LIMIT nROWS;
33410 
33411     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
33412 
33413     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33414       engine_debug('shu dbg, after bulk insert');
33415     END IF;
33416 
33417     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
33418 
33419       FOR i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
33420 
33421         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
33422 
33423           l_prod_qual_count := l_prod_qual_count + 1;
33424           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
33425           -- set attributes
33426           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
33427           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
33428           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
33429           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
33430           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
33431           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER_CURRENCY';
33432           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
33433           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
33434           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
33435           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
33436           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
33437           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
33438           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUALIFIER_CURRENCY';
33439           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
33440           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
33441           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
33442           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
33443           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
33444           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
33445           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
33446           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
33447           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
33448           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
33449           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
33450           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
33451           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
33452           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
33453           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
33454           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
33455           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
33456           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
33457           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
33458           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
33459           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
33460 
33461           M:=M+1;
33462 
33463           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33464             engine_debug('M: '|| M);
33465 	  END IF;
33466 
33467 
33468           lq_line_index := G_LINE_INDEX_TBL_P(i);
33469           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
33470         end if;
33471 
33472         -- set product attributes
33473 
33474         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
33475         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
33476         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
33477         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
33478         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
33479         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
33480         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
33481         G_VALIDATED_FLAG_tbl(K)          := G_NO;
33482         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
33483         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
33484         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
33485         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
33486         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
33487         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
33488         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
33489         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
33490         G_GROUPING_NUMBER_tbl(K)         :=NULL;
33491         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_CURRENCY';
33492         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
33493         G_DATATYPE_tbl(K)                :=NULL;
33494         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
33495         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
33496         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
33497         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
33498         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
33499         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
33500         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
33501         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
33502 
33503         K:= K+1;
33504         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33505         engine_debug('The value of K1: ' || K);
33506         END IF;
33507         -- set qualifier attributes
33508         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
33509         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
33510         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
33511         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
33512         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
33513         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
33514         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
33515         G_VALIDATED_FLAG_tbl(K)          := G_NO;
33516         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
33517         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
33518         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
33519         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
33520         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
33521         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
33522         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
33523         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
33524         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
33525         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER_CURRENCY';
33526         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
33527         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
33528         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
33529         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
33530         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
33531         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
33532         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
33533         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
33534         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
33535         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
33536         K:= K+1;
33537         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33538         engine_debug('The value of K2: ' || K);
33539 
33540         END IF;
33541       end loop;
33542     end if;
33543   END LOOP;
33544 
33545   qp_debug_util.tstop('L_PROD_QUAL_CUR_CURRENCY');
33546 
33547   CLOSE l_prod_qual_cur_currency;
33548 
33549   lq_line_index              := -9999;
33550   lq_list_line_id            := -9999;
33551 
33552   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33553         engine_debug('before l_prod_qual_pric_cur_currency... ');
33554   END IF;
33555 
33556   qp_debug_util.tstart('L_PROD_QUAL_PRIC_CUR_CURRENCY','Cursor Loop l_prod_qual_pric_cur_currency');
33557   OPEN l_prod_qual_pric_cur_currency(p_pricing_phase_id);
33558 
33559   LOOP
33560     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
33561        deleted here.  There is no need to explicitly delete since BULK COLLECT
33562        will truncate the data before populating. */
33563 
33564     -- fetch into _P , _Q tables and _PR tables here
33565     FETCH l_prod_qual_pric_cur_currency BULK COLLECT INTO
33566       G_LIST_HEADER_ID_TBL_P,
33567       G_LIST_LINE_ID_TBL_P,
33568       G_LIST_LINE_TYPE_TBL_P,
33569       G_LINE_INDEX_TBL_P,
33570       G_APPLIED_FLAG_TBL_P,
33571       G_ATTRIBUTE_LEVEL_TBL_P,
33572       G_ATTRIBUTE_TYPE_TBL_P,
33573       G_CONTEXT_TBL_P,
33574       G_ATTRIBUTE_TBL_P,
33575       G_VALUE_FROM_TBL_P,
33576       G_PRODUCT_UOM_CODE_TBL_P,
33577       G_EXCLUDER_FLAG_TBL_P,
33578       G_CONTEXT_TBL_Q,
33579       G_ATTRIBUTE_TBL_Q,
33580       G_VALUE_FROM_TBL_Q,
33581       G_GROUPING_NO_TBL_Q,
33582       G_QUALIFIER_PRECEDENCE_TBL_Q,
33583       G_DATATYPE_TBL_Q,
33584       G_SETUP_VALUE_FROM_TBL_Q,
33585       G_SETUP_VALUE_TO_TBL_Q,
33586       G_AUTOMATIC_FLAG_TBL_P,
33587       G_MODIFIER_LEVEL_CODE_TBL_P,
33588       G_PRIMARY_UOM_FLAG_TBL_P,
33589       G_OPER_CALCULATION_CODE_TBL_P,
33590       G_OPERAND_VALUE_TBL_P,
33591       G_PRICING_GROUP_SEQUENCE_TBL_P,
33592       G_LIST_TYPE_CODE_TBL_P,
33593       G_ROUNDING_FACTOR_TBL_P,
33594       G_PRICING_PHASE_ID_TBL_P,
33595       G_PRICE_BREAK_TYPE_CODE_TBL_P,
33596       G_INCOMP_GRP_CODE_TBL_P,
33597       G_PRICE_FORMULA_ID_TBL_P,
33598       G_PRODUCT_PRECEDENCE_TBL_P,
33599       G_LIST_LINE_NO_TBL_P,
33600       G_QUALIFIER_TYPE_TBL_Q ,
33601       G_ATTRIBUTE_LEVEL_TBL_PR,
33602       G_ATTRIBUTE_TYPE_TBL_PR,
33603       G_CONTEXT_TBL_PR,
33604       G_ATTRIBUTE_TBL_PR,
33605       G_VALUE_FROM_TBL_PR,
33606       G_SETUP_VALUE_FROM_TBL_PR,
33607       G_SETUP_VALUE_TO_TBL_PR,
33608       G_OPERATOR_TYPE_TBL_PR,
33609       G_DATATYPE_TBL_PR,
33610       G_CURRENCY_DETAIL_ID_TBL_P,
33611       G_CURRENCY_HEADER_ID_TBL_P,
33612       G_SELLING_ROUNDING_TBL_P,
33613       G_ORDER_CURRENCY_TBL_P,
33614       G_PRICING_EFFECTIVE_DATE_TBL_P ,
33615       G_BASE_CURRENCY_CODE_TBL_P
33616      ,G_BREAK_UOM_TBL_P /* Proration */
33617      ,G_BREAK_CONTEXT_TBL_P /* Proration */
33618      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
33619       LIMIT nROWS;
33620     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
33621 
33622     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
33623       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
33624         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
33625           l_prod_qual_count := l_prod_qual_count + 1;
33626           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
33627 
33628           -- set attributes
33629           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
33630           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
33631           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
33632           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
33633           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
33634           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER_PRICING_CURRENCY';
33635           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
33636           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
33637           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
33638           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
33639           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
33640           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
33641           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUAL_PRICING_CURRENCY';
33642           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
33643           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
33644           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
33645           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
33646           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
33647           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
33648           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
33649           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
33650           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
33651           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
33652           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
33653           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
33654           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
33655           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
33656           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
33657           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
33658           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
33659           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
33660           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
33661           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
33662           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
33663 
33664           M:=M+1;
33665           lq_line_index := G_LINE_INDEX_TBL_P(i);
33666           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
33667         end if;
33668 
33669         -- set product attributes
33670         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
33671         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
33672         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
33673         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
33674         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
33675         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
33676         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
33677         G_VALIDATED_FLAG_tbl(K)          := G_NO;
33678         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
33679         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
33680         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
33681         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
33682         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
33683         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
33684         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
33685         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
33686         G_GROUPING_NUMBER_tbl(K)         :=NULL;
33687         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING_CURRENCY';
33688         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
33689         G_DATATYPE_tbl(K)                :=NULL;
33690         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
33691         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
33692         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
33693         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
33694         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
33695         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
33696         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
33697         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
33698         K:= K+1;
33699         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33700         engine_debug('The value of K: ' || K);
33701 
33702         END IF;
33703         -- set qualifier attributes
33704         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
33705         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
33706         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
33707         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
33708         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
33709         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
33710          G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
33711         G_VALIDATED_FLAG_tbl(K)          := G_NO;
33712         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
33713         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
33714         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
33715         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
33716         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
33717         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
33718         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
33719         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
33720         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
33721         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER_PRICING_CURRENCY';
33722         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
33723         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
33724         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
33725         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
33726         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
33727         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
33728         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
33729         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
33730         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
33731         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
33732         K:= K+1;
33733 
33734         --set pricing attributes
33735         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
33736          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
33737          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
33738          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
33739          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
33740          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
33741          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
33742          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
33743          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
33744          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
33745          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
33746          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
33747          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
33748          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
33749          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
33750          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
33751          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
33752          G_GROUPING_NUMBER_tbl(K)         :=NULL;
33753          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING_CURRENCY';
33754          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
33755          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
33756          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
33757          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
33758          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
33759          G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
33760          G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
33761          G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
33762          G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
33763          G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
33764          K:= K+1;
33765        END IF;
33766        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33767        engine_debug('The value of K: ' || K);
33768 
33769        END IF;
33770       end loop;
33771     end if;
33772   END LOOP;
33773 
33774   qp_debug_util.tstop('L_PROD_QUAL_PRIC_CUR_CURRENCY');
33775 
33776   CLOSE l_prod_qual_pric_cur_currency;
33777 
33778   lq_line_index              := -9999;
33779   lq_list_line_id            := -9999;
33780 
33781   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33782         engine_debug('before l_prod_cur_currency... ');
33783   END IF;
33784 
33785   qp_debug_util.tstart('L_PROD_CUR_CURRENCY','Cursor Loop l_prod_cur_currency');
33786   OPEN l_prod_cur_currency(p_pricing_phase_id);
33787 
33788   LOOP
33789     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
33790        deleted here.  There is no need to explicitly delete since BULK COLLECT
33791        will truncate the data before populating. */
33792 
33793     -- fetch into _P tables here
33794     FETCH l_prod_cur_currency BULK COLLECT INTO
33795       G_LIST_HEADER_ID_TBL_P,
33796       G_LIST_LINE_ID_TBL_P,
33797       G_LIST_LINE_TYPE_TBL_P,
33798       G_LINE_INDEX_TBL_P,
33799       G_APPLIED_FLAG_TBL_P,
33800       G_ATTRIBUTE_LEVEL_TBL_P,
33801       G_ATTRIBUTE_TYPE_TBL_P,
33802       G_CONTEXT_TBL_P,
33803       G_ATTRIBUTE_TBL_P,
33804       G_VALUE_FROM_TBL_P,
33805       G_PRODUCT_UOM_CODE_TBL_P,
33806       G_EXCLUDER_FLAG_TBL_P,
33807       G_AUTOMATIC_FLAG_TBL_P,
33808       G_MODIFIER_LEVEL_CODE_TBL_P,
33809       G_PRIMARY_UOM_FLAG_TBL_P,
33810       G_OPER_CALCULATION_CODE_TBL_P,
33811       G_OPERAND_VALUE_TBL_P,
33812       G_PRICING_GROUP_SEQUENCE_TBL_P,
33813       G_LIST_TYPE_CODE_TBL_P,
33814       G_ROUNDING_FACTOR_TBL_P,
33815       G_PRICING_PHASE_ID_TBL_P,
33816       G_PRICE_BREAK_TYPE_CODE_TBL_P,
33817       G_INCOMP_GRP_CODE_TBL_P,
33818       G_PRICE_FORMULA_ID_TBL_P,
33819       G_PRODUCT_PRECEDENCE_TBL_P,
33820       G_LIST_LINE_NO_TBL_P,
33821       G_CURRENCY_DETAIL_ID_TBL_P,
33822       G_CURRENCY_HEADER_ID_TBL_P,
33823       G_SELLING_ROUNDING_TBL_P,
33824       G_ORDER_CURRENCY_TBL_P,
33825       G_PRICING_EFFECTIVE_DATE_TBL_P,
33826       G_BASE_CURRENCY_CODE_TBL_P
33827      ,G_BREAK_UOM_TBL_P /* Proration */
33828      ,G_BREAK_CONTEXT_TBL_P /* Proration */
33829      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
33830       LIMIT nROWS;
33831 
33832     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
33833 
33834     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
33835       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
33836         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
33837           l_prod_qual_count := l_prod_qual_count + 1;
33838           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
33839 
33840           -- set attributes
33841           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
33842           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
33843           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
33844           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
33845           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
33846           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_CURRENCY';
33847           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
33848           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
33849           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
33850           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
33851           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
33852           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
33853           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_CURRENCY';
33854           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
33855           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
33856           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
33857           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
33858           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
33859           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
33860           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
33861           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
33862           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
33863           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
33864           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
33865           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
33866           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
33867           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
33868           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
33869           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
33870           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
33871           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
33872           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
33873           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
33874           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
33875 
33876 
33877           M:=M+1;
33878           lq_line_index := G_LINE_INDEX_TBL_P(i);
33879           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
33880         end if;
33881 
33882         -- set product attributes
33883         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
33884         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
33885         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
33886         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
33887         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
33888         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
33889         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
33890         G_VALIDATED_FLAG_tbl(K)          := G_NO;
33891         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
33892         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
33893         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
33894         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
33895         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
33896         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
33897         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
33898         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
33899         G_GROUPING_NUMBER_tbl(K)         :=NULL;
33900         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_CURRENCY';
33901         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
33902         G_DATATYPE_tbl(K)                :=NULL;
33903         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
33904         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
33905         G_QUALIFIER_TYPE_TBL(K)          :=null;
33906         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
33907         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
33908         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
33909         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
33910         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
33911         K:= K+1;
33912         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33913         engine_debug('The value of K: ' || K);
33914         END IF;
33915       end loop;
33916     end if;
33917   END LOOP;
33918 
33919   qp_debug_util.tstop('L_PROD_CUR_CURRENCY');
33920 
33921   CLOSE l_prod_cur_currency;
33922 
33923    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33924         engine_debug('before l_prod_pric_cur_currency...');
33925    END IF;
33926 
33927   qp_debug_util.tstart('L_PROD_PRIC_CUR_CURRENCY','Cursor Loop l_prod_pric_cur_currency');
33928   OPEN l_prod_pric_cur_currency(p_pricing_phase_id);
33929 
33930 
33931 
33932   LOOP
33933     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
33934        deleted here.  There is no need to explicitly delete since BULK COLLECT
33935        will truncate the data before populating. */
33936 
33937     -- fetch into _P , and _PR tables here
33938     FETCH l_prod_pric_cur_currency BULK COLLECT INTO
33939       G_LIST_HEADER_ID_TBL_P,
33940       G_LIST_LINE_ID_TBL_P,
33941       G_LIST_LINE_TYPE_TBL_P,
33942       G_LINE_INDEX_TBL_P,
33943       G_APPLIED_FLAG_TBL_P,
33944       G_ATTRIBUTE_LEVEL_TBL_P,
33945       G_ATTRIBUTE_TYPE_TBL_P,
33946       G_CONTEXT_TBL_P,
33947       G_ATTRIBUTE_TBL_P,
33948       G_VALUE_FROM_TBL_P,
33949       G_PRODUCT_UOM_CODE_TBL_P,
33950       G_EXCLUDER_FLAG_TBL_P,
33951       G_AUTOMATIC_FLAG_TBL_P,
33952       G_MODIFIER_LEVEL_CODE_TBL_P,
33953       G_PRIMARY_UOM_FLAG_TBL_P,
33954       G_OPER_CALCULATION_CODE_TBL_P,
33955       G_OPERAND_VALUE_TBL_P,
33956       G_PRICING_GROUP_SEQUENCE_TBL_P,
33957       G_LIST_TYPE_CODE_TBL_P,
33958       G_ROUNDING_FACTOR_TBL_P,
33959       G_PRICING_PHASE_ID_TBL_P,
33960       G_PRICE_BREAK_TYPE_CODE_TBL_P,
33961       G_INCOMP_GRP_CODE_TBL_P,
33962       G_PRICE_FORMULA_ID_TBL_P,
33963       G_PRODUCT_PRECEDENCE_TBL_P,
33964       G_LIST_LINE_NO_TBL_P,
33965       G_ATTRIBUTE_LEVEL_TBL_PR,
33966       G_ATTRIBUTE_TYPE_TBL_PR,
33967       G_CONTEXT_TBL_PR,
33968       G_ATTRIBUTE_TBL_PR,
33969       G_VALUE_FROM_TBL_PR,
33970       G_SETUP_VALUE_FROM_TBL_PR,
33971       G_SETUP_VALUE_TO_TBL_PR,
33972       G_OPERATOR_TYPE_TBL_PR,
33973       G_DATATYPE_TBL_PR,
33974       G_CURRENCY_DETAIL_ID_TBL_P,
33975       G_CURRENCY_HEADER_ID_TBL_P,
33976       G_SELLING_ROUNDING_TBL_P,
33977       G_ORDER_CURRENCY_TBL_P,
33978       G_PRICING_EFFECTIVE_DATE_TBL_P ,
33979       G_BASE_CURRENCY_CODE_TBL_P
33980      ,G_BREAK_UOM_TBL_P /* Proration */
33981      ,G_BREAK_CONTEXT_TBL_P /* Proration */
33982      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
33983       LIMIT nROWS;
33984     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
33985 
33986     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
33987       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
33988         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
33989           l_prod_qual_count := l_prod_qual_count + 1;
33990           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
33991 
33992           -- set attributes
33993           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
33994           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
33995           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
33996           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
33997           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
33998           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_PRICING_CURRENCY';
33999           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
34000           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
34001           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
34002           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
34003           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
34004           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
34005           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_PRICING_CURRENCY';
34006           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
34007           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
34008           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
34009           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
34010           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
34011           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
34012           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
34013           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
34014           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34015           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34016           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
34017           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
34018           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
34019           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
34020           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
34021           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
34022           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
34023           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
34024           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
34025           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
34026           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
34027 
34028           M:=M+1;
34029           lq_line_index := G_LINE_INDEX_TBL_P(i);
34030           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
34031         end if;
34032 
34033         -- set product attributes
34034         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34035         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
34036         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
34037         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
34038         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
34039         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
34040         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
34041         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34042         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34043         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34044         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34045         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34046         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
34047         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
34048         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
34049         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
34050         G_GROUPING_NUMBER_tbl(K)         :=NULL;
34051         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_CURRENCY';
34052         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34053         G_DATATYPE_tbl(K)                :=NULL;
34054         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
34055         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
34056         --G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i); -- fix bug 2767927 big search failed with no data found
34057         G_QUALIFIER_TYPE_TBL(K)          :=null;
34058         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
34059         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
34060         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
34061         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34062         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34063         K:= K+1;
34064         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34065         engine_debug('The value of K: ' || K);
34066 
34067         END IF;
34068         --set pricing attributes
34069         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
34070          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
34071          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
34072          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
34073          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
34074          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
34075          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
34076          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
34077          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
34078          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
34079          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
34080          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
34081          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34082          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
34083          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
34084          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
34085          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
34086          G_GROUPING_NUMBER_tbl(K)         :=NULL;
34087          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_CURRENCY';
34088          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34089          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
34090          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
34091          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
34092          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
34093          G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
34094          G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
34095          G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
34096          G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
34097          G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
34098          K:= K+1;
34099        END IF;
34100        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34101        engine_debug('The value of K: ' || K);
34102        END IF;
34103       end loop;
34104     end if;
34105   END LOOP;
34106   qp_debug_util.tstop('L_PROD_PRIC_CUR_CURRENCY');
34107   CLOSE l_prod_pric_cur_currency; -- 4331801/4365538
34108 else -- vivek, multi currency not installed, not used
34109   --selecting lists that match product and qualifiers attributes
34110 
34111   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34112        engine_debug('before l_prod_qual_cur...');
34113        END IF;
34114   qp_debug_util.tstart('L_PROD_QUAL_CUR','Cursor Loop l_prod_qual_cur');
34115   OPEN l_prod_qual_cur(p_pricing_phase_id);
34116 
34117   LOOP
34118     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
34119        deleted here.  There is no need to explicitly delete since BULK COLLECT
34120        will truncate the data before populating. */
34121 
34122     -- fetch into _P and _Q tables here
34123     FETCH l_prod_qual_cur BULK COLLECT INTO
34124       G_LIST_HEADER_ID_TBL_P,
34125       G_LIST_LINE_ID_TBL_P,
34126       G_LIST_LINE_TYPE_TBL_P,
34127       G_LINE_INDEX_TBL_P,
34128       G_APPLIED_FLAG_TBL_P,
34129       G_ATTRIBUTE_LEVEL_TBL_P,
34130       G_ATTRIBUTE_TYPE_TBL_P,
34131       G_CONTEXT_TBL_P,
34132       G_ATTRIBUTE_TBL_P,
34133       G_VALUE_FROM_TBL_P,
34134       G_PRODUCT_UOM_CODE_TBL_P,
34135       G_EXCLUDER_FLAG_TBL_P,
34136       G_CONTEXT_TBL_Q,
34137       G_ATTRIBUTE_TBL_Q,
34138       G_VALUE_FROM_TBL_Q,
34139       G_GROUPING_NO_TBL_Q,
34140       G_QUALIFIER_PRECEDENCE_TBL_Q,
34141       G_DATATYPE_TBL_Q,
34142       G_SETUP_VALUE_FROM_TBL_Q,
34143       G_SETUP_VALUE_TO_TBL_Q,
34144       G_AUTOMATIC_FLAG_TBL_P,
34145       G_MODIFIER_LEVEL_CODE_TBL_P,
34146       G_PRIMARY_UOM_FLAG_TBL_P,
34147       G_OPER_CALCULATION_CODE_TBL_P,
34148       G_OPERAND_VALUE_TBL_P,
34149       G_PRICING_GROUP_SEQUENCE_TBL_P,
34150       G_LIST_TYPE_CODE_TBL_P,
34151       G_ROUNDING_FACTOR_TBL_P,
34152       G_PRICING_PHASE_ID_TBL_P,
34153       G_PRICE_BREAK_TYPE_CODE_TBL_P,
34154       G_INCOMP_GRP_CODE_TBL_P,
34155       G_PRICE_FORMULA_ID_TBL_P,
34156       G_PRODUCT_PRECEDENCE_TBL_P,
34157       G_LIST_LINE_NO_TBL_P,
34158       G_QUALIFIER_TYPE_TBL_Q
34159      ,G_BREAK_UOM_TBL_P /* Proration */
34160      ,G_BREAK_CONTEXT_TBL_P /* Proration */
34161      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
34162       LIMIT nROWS;
34163 
34164     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
34165 
34166     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
34167       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
34168         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
34169           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34170           engine_debug('Product_Qualifier');
34171           END IF;
34172           l_prod_qual_count := l_prod_qual_count + 1;
34173           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
34174 
34175           -- set attributes
34176           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
34177           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
34178           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
34179           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
34180           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
34181           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER';
34182           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
34183           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
34184           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
34185           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
34186           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
34187           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
34188           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUALIFIER';
34189           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
34190           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
34191           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
34192           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
34193           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
34194           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
34195           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
34196           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
34197           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34198           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34199           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
34200           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
34201           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
34202           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
34203           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
34204 
34205           M:=M+1;
34206           lq_line_index := G_LINE_INDEX_TBL_P(i);
34207           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
34208         end if;
34209 
34210         -- set product attributes
34211         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34212         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
34213         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
34214         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
34215         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
34216         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
34217         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
34218         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34219         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34220         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34221         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34222         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34223         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
34224         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
34225         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
34226         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
34227         G_GROUPING_NUMBER_tbl(K)         :=NULL;
34228         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER';
34229         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34230         G_DATATYPE_tbl(K)                :=NULL;
34231         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
34232         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
34233         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
34234         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
34235         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
34236         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
34237         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34238         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34239         K:= K+1;
34240         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34241         engine_debug('The value of K: ' || K);
34242 
34243         END IF;
34244         -- set qualifier attributes
34245         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34246         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
34247         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
34248         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
34249         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
34250         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
34251         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
34252         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34253         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34254         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34255         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34256         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
34257         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
34258         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
34259         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
34260         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
34261         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
34262         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER';
34263         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
34264         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
34265         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
34266         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
34267         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
34268         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
34269         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
34270         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
34271         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
34272         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
34273         K:= K+1;
34274         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34275         engine_debug('The value of K: ' || K);
34276 
34277         END IF;
34278       end loop;
34279     end if;
34280   END LOOP;
34281   qp_debug_util.tstop('L_PROD_QUAL_CUR');
34282 
34283   CLOSE l_prod_qual_cur;
34284 
34285   lq_line_index              := -9999;
34286   lq_list_line_id            := -9999;
34287 
34288   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34289        engine_debug('before l_prod_qual_pric_cur...');
34290   END IF;
34291   qp_debug_util.tstart('L_PROD_QUAL_PRIC_CUR','Cursor Loop l_prod_qual_pric_cur');
34292   OPEN l_prod_qual_pric_cur(p_pricing_phase_id);
34293 
34294   LOOP
34295     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
34296        deleted here.  There is no need to explicitly delete since BULK COLLECT
34297        will truncate the data before populating. */
34298 
34299     -- fetch into _P , _Q tables and _PR tables here
34300     FETCH l_prod_qual_pric_cur BULK COLLECT INTO
34301       G_LIST_HEADER_ID_TBL_P,
34302       G_LIST_LINE_ID_TBL_P,
34303       G_LIST_LINE_TYPE_TBL_P,
34304       G_LINE_INDEX_TBL_P,
34305       G_APPLIED_FLAG_TBL_P,
34306       G_ATTRIBUTE_LEVEL_TBL_P,
34307       G_ATTRIBUTE_TYPE_TBL_P,
34308       G_CONTEXT_TBL_P,
34309       G_ATTRIBUTE_TBL_P,
34310       G_VALUE_FROM_TBL_P,
34311       G_PRODUCT_UOM_CODE_TBL_P,
34312       G_EXCLUDER_FLAG_TBL_P,
34313       G_CONTEXT_TBL_Q,
34314       G_ATTRIBUTE_TBL_Q,
34315       G_VALUE_FROM_TBL_Q,
34316       G_GROUPING_NO_TBL_Q,
34317       G_QUALIFIER_PRECEDENCE_TBL_Q,
34318       G_DATATYPE_TBL_Q,
34319       G_SETUP_VALUE_FROM_TBL_Q,
34320       G_SETUP_VALUE_TO_TBL_Q,
34321       G_AUTOMATIC_FLAG_TBL_P,
34322       G_MODIFIER_LEVEL_CODE_TBL_P,
34323       G_PRIMARY_UOM_FLAG_TBL_P,
34324       G_OPER_CALCULATION_CODE_TBL_P,
34325       G_OPERAND_VALUE_TBL_P,
34326       G_PRICING_GROUP_SEQUENCE_TBL_P,
34327       G_LIST_TYPE_CODE_TBL_P,
34328       G_ROUNDING_FACTOR_TBL_P,
34329       G_PRICING_PHASE_ID_TBL_P,
34330       G_PRICE_BREAK_TYPE_CODE_TBL_P,
34331       G_INCOMP_GRP_CODE_TBL_P,
34332       G_PRICE_FORMULA_ID_TBL_P,
34333       G_PRODUCT_PRECEDENCE_TBL_P,
34334       G_LIST_LINE_NO_TBL_P,
34335       G_QUALIFIER_TYPE_TBL_Q ,
34336       G_ATTRIBUTE_LEVEL_TBL_PR,
34337       G_ATTRIBUTE_TYPE_TBL_PR,
34338       G_CONTEXT_TBL_PR,
34339       G_ATTRIBUTE_TBL_PR,
34340       G_VALUE_FROM_TBL_PR,
34341       G_SETUP_VALUE_FROM_TBL_PR,
34342       G_SETUP_VALUE_TO_TBL_PR,
34343       G_OPERATOR_TYPE_TBL_PR,
34344       G_DATATYPE_TBL_PR
34345      ,G_BREAK_UOM_TBL_P /* Proration */
34346      ,G_BREAK_CONTEXT_TBL_P /* Proration */
34347      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
34348       LIMIT nROWS;
34349     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
34350 
34351     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
34352       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
34353         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
34354           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34355           engine_debug('Product_Qualifier_Pricing');
34356           END IF;
34357           l_prod_qual_count := l_prod_qual_count + 1;
34358           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
34359 
34360           -- set attributes
34361           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
34362           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
34363           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
34364           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
34365           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
34366           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER_PRICING';
34367           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
34368           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
34369           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
34370           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
34371           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
34372           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
34373           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUALIFIER_PRICING';
34374           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
34375           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
34376           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
34377           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
34378           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
34379           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
34380           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
34381           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
34382           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34383           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34384           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
34385           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
34386           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
34387           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
34388           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
34389 
34390           M:=M+1;
34391           lq_line_index := G_LINE_INDEX_TBL_P(i);
34392           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
34393         end if;
34394 
34395         -- set product attributes
34396         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34397         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
34398         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
34399         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
34400         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
34401         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
34402         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
34403         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34404         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34405         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34406         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34407         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34408         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
34409         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
34410         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
34411         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
34412         G_GROUPING_NUMBER_tbl(K)         :=NULL;
34413         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING';
34414         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34415         G_DATATYPE_tbl(K)                :=NULL;
34416         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
34417         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
34418         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
34419         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
34420         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
34421         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
34422         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34423         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34424         K:= K+1;
34425         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34426         engine_debug('The value of K: ' || K);
34427 
34428         END IF;
34429         -- set qualifier attributes
34430         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34431         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
34432         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
34433         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
34434         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
34435         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
34436         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
34437         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34438         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34439         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34440         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34441         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
34442         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
34443         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
34444         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
34445         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
34446         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
34447         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER_PRICING';
34448         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
34449         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
34450         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
34451         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
34452         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
34453         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
34454         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
34455         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
34456         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
34457         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
34458         K:= K+1;
34459 
34460         --set pricing attributes
34461         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
34462          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
34463          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
34464          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
34465          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
34466          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
34467          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
34468          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
34469          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
34470          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
34471          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
34472          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
34473          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34474          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
34475          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
34476          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
34477          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
34478          G_GROUPING_NUMBER_tbl(K)         :=NULL;
34479          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING';
34480          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34481          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
34482          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
34483          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
34484          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
34485          G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
34486          G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
34487          G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
34488          G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
34489          G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
34490          K:= K+1;
34491        END IF;
34492        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34493        engine_debug('The value of K: ' || K);
34494 
34495        END IF;
34496       end loop;
34497     end if;
34498   END LOOP;
34499 
34500   qp_debug_util.tstop('L_PROD_QUAL_PRIC_CUR');
34501   CLOSE l_prod_qual_pric_cur;
34502 
34503   lq_line_index              := -9999;
34504   lq_list_line_id            := -9999;
34505 
34506   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34507        engine_debug('before l_prod_cur...');
34508   END IF;
34509   qp_debug_util.tstart('L_PROD_CUR','Cursor Loop l_prod_cur');
34510   OPEN l_prod_cur(p_pricing_phase_id);
34511 
34512   LOOP
34513     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
34514        deleted here.  There is no need to explicitly delete since BULK COLLECT
34515        will truncate the data before populating. */
34516 
34517     -- fetch into _P and _Q tables here
34518     FETCH l_prod_cur BULK COLLECT INTO
34519       G_LIST_HEADER_ID_TBL_P,
34520       G_LIST_LINE_ID_TBL_P,
34521       G_LIST_LINE_TYPE_TBL_P,
34522       G_LINE_INDEX_TBL_P,
34523       G_APPLIED_FLAG_TBL_P,
34524       G_ATTRIBUTE_LEVEL_TBL_P,
34525       G_ATTRIBUTE_TYPE_TBL_P,
34526       G_CONTEXT_TBL_P,
34527       G_ATTRIBUTE_TBL_P,
34528       G_VALUE_FROM_TBL_P,
34529       G_PRODUCT_UOM_CODE_TBL_P,
34530       G_EXCLUDER_FLAG_TBL_P,
34531       G_AUTOMATIC_FLAG_TBL_P,
34532       G_MODIFIER_LEVEL_CODE_TBL_P,
34533       G_PRIMARY_UOM_FLAG_TBL_P,
34534       G_OPER_CALCULATION_CODE_TBL_P,
34535       G_OPERAND_VALUE_TBL_P,
34536       G_PRICING_GROUP_SEQUENCE_TBL_P,
34537       G_LIST_TYPE_CODE_TBL_P,
34538       G_ROUNDING_FACTOR_TBL_P,
34539       G_PRICING_PHASE_ID_TBL_P,
34540       G_PRICE_BREAK_TYPE_CODE_TBL_P,
34541       G_INCOMP_GRP_CODE_TBL_P,
34542       G_PRICE_FORMULA_ID_TBL_P,
34543       G_PRODUCT_PRECEDENCE_TBL_P,
34544       G_LIST_LINE_NO_TBL_P
34545      ,G_BREAK_UOM_TBL_P /* Proration */
34546      ,G_BREAK_CONTEXT_TBL_P /* Proration */
34547      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
34548       LIMIT nROWS;
34549 
34550     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
34551 
34552     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
34553       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
34554         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
34555           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34556           engine_debug('Product Only');
34557           END IF;
34558           l_prod_qual_count := l_prod_qual_count + 1;
34559           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
34560 
34561           -- set attributes
34562           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
34563           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
34564           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
34565           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
34566           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
34567           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_ONLY';
34568           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
34569           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
34570           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
34571           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
34572           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
34573           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
34574           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_ONLY';
34575           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
34576           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
34577           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
34578           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
34579           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
34580           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
34581           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
34582           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
34583           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34584           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34585           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
34586           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
34587           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
34588           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
34589           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
34590 
34591           M:=M+1;
34592           lq_line_index := G_LINE_INDEX_TBL_P(i);
34593           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
34594         end if;
34595 
34596         -- set product attributes
34597         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34598         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
34599         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
34600         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
34601         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
34602         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
34603         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
34604         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34605         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34606         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34607         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34608         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34609         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
34610         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
34611         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
34612         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
34613         G_GROUPING_NUMBER_tbl(K)         :=NULL;
34614         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_ONLY';
34615         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34616         G_DATATYPE_tbl(K)                :=NULL;
34617         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
34618         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
34619         G_QUALIFIER_TYPE_TBL(K)          :=NULL;
34620         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
34621         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
34622         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
34623         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34624         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34625         K:= K+1;
34626         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34627         engine_debug('The value of K: ' || K);
34628 
34629         END IF;
34630       end loop;
34631     end if;
34632   END LOOP;
34633   qp_debug_util.tstop('L_PROD_CUR');
34634   CLOSE l_prod_cur;
34635 
34636   lq_line_index              := -9999;
34637   lq_list_line_id            := -9999;
34638 
34639   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34640        engine_debug('before l_prod_pric_cur...');
34641   END IF;
34642   qp_debug_util.tstart('L_PROD_PRIC_CUR','Cursor Loop l_prod_pric_cur');
34643   OPEN l_prod_pric_cur(p_pricing_phase_id);
34644 
34645 
34646   LOOP
34647     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
34648        deleted here.  There is no need to explicitly delete since BULK COLLECT
34649        will truncate the data before populating. */
34650 
34651     -- fetch into _P , and  _PR tables here
34652     FETCH l_prod_pric_cur BULK COLLECT INTO
34653       G_LIST_HEADER_ID_TBL_P,
34654       G_LIST_LINE_ID_TBL_P,
34655       G_LIST_LINE_TYPE_TBL_P,
34656       G_LINE_INDEX_TBL_P,
34657       G_APPLIED_FLAG_TBL_P,
34658       G_ATTRIBUTE_LEVEL_TBL_P,
34659       G_ATTRIBUTE_TYPE_TBL_P,
34660       G_CONTEXT_TBL_P,
34661       G_ATTRIBUTE_TBL_P,
34662       G_VALUE_FROM_TBL_P,
34663       G_PRODUCT_UOM_CODE_TBL_P,
34664       G_EXCLUDER_FLAG_TBL_P,
34665       G_AUTOMATIC_FLAG_TBL_P,
34666       G_MODIFIER_LEVEL_CODE_TBL_P,
34667       G_PRIMARY_UOM_FLAG_TBL_P,
34668       G_OPER_CALCULATION_CODE_TBL_P,
34669       G_OPERAND_VALUE_TBL_P,
34670       G_PRICING_GROUP_SEQUENCE_TBL_P,
34671       G_LIST_TYPE_CODE_TBL_P,
34672       G_ROUNDING_FACTOR_TBL_P,
34673       G_PRICING_PHASE_ID_TBL_P,
34674       G_PRICE_BREAK_TYPE_CODE_TBL_P,
34675       G_INCOMP_GRP_CODE_TBL_P,
34676       G_PRICE_FORMULA_ID_TBL_P,
34677       G_PRODUCT_PRECEDENCE_TBL_P,
34678       G_LIST_LINE_NO_TBL_P,
34679       G_ATTRIBUTE_LEVEL_TBL_PR,
34680       G_ATTRIBUTE_TYPE_TBL_PR,
34681       G_CONTEXT_TBL_PR,
34682       G_ATTRIBUTE_TBL_PR,
34683       G_VALUE_FROM_TBL_PR,
34684       G_SETUP_VALUE_FROM_TBL_PR,
34685       G_SETUP_VALUE_TO_TBL_PR,
34686       G_OPERATOR_TYPE_TBL_PR,
34687       G_DATATYPE_TBL_PR
34688      ,G_BREAK_UOM_TBL_P /* Proration */
34689      ,G_BREAK_CONTEXT_TBL_P /* Proration */
34690      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
34691       LIMIT nROWS;
34692     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
34693 
34694     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
34695       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
34696         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
34697           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34698           engine_debug('Product Pricing Only');
34699           END IF;
34700           l_prod_qual_count := l_prod_qual_count + 1;
34701           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
34702 
34703           -- set attributes
34704           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
34705           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
34706           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
34707           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
34708           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
34709           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_PRICING_ONLY';
34710           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
34711           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
34712           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
34713           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
34714           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
34715           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
34716           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_PRICING_ONLY';
34717           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
34718           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
34719           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
34720           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
34721           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
34722           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
34723           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
34724           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
34725           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34726           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34727           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
34728           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
34729           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
34730           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
34731           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
34732 
34733           M:=M+1;
34734           lq_line_index := G_LINE_INDEX_TBL_P(i);
34735           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
34736         end if;
34737 
34738         -- set product attributes
34739         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
34740         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
34741         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
34742         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
34743         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
34744         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
34745         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
34746         G_VALIDATED_FLAG_tbl(K)          := G_NO;
34747         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
34748         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
34749         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
34750         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34751         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
34752         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
34753         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
34754         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
34755         G_GROUPING_NUMBER_tbl(K)         :=NULL;
34756         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
34757         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34758         G_DATATYPE_tbl(K)                :=NULL;
34759         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
34760         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
34761         G_QUALIFIER_TYPE_TBL(K)          :=NULL;
34762         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
34763         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
34764         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
34765         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
34766         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
34767         K:= K+1;
34768         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34769         engine_debug('The value of K: ' || K);
34770 
34771         END IF;
34772         --set pricing attributes
34773         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
34774          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
34775          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
34776          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
34777          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
34778          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
34779          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
34780          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
34781          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
34782          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
34783          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
34784          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
34785          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
34786          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
34787          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
34788          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
34789          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
34790          G_GROUPING_NUMBER_tbl(K)         :=NULL;
34791          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
34792          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
34793          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
34794          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
34795          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
34796          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
34797          G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
34798          G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
34799          G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
34800          G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
34801          G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
34802          K:= K+1;
34803        END IF;
34804        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34805        engine_debug('The value of K: ' || K);
34806 
34807        END IF;
34808       end loop;
34809     end if;
34810   END LOOP;
34811 
34812   qp_debug_util.tstop('L_PROD_PRIC_CUR');
34813   CLOSE l_prod_pric_cur;
34814 
34815 --END IF;
34816 end if; -- vivek, multi currency installed
34817 
34818 IF M > 1 THEN
34819 qp_debug_util.tstart('INSERT_LDETS_PRICE_LIST_MULT_NON_MULTI','Inserting into ldets INSERT_LDETS_PRICE_LIST_MULT_NON_MULTI');
34820  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
34821   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34822   engine_debug('last 4 cursors- multi-currency TRUE - insert_ldets2');
34823   END IF;
34824   INSERT_LDETS_PRICE_LIST_MULT(
34825                  p_LINE_DETAIL_INDEX      => G_LINE_DETAIL_INDEX_LD_TBL,
34826                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
34827                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
34828                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
34829                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
34830                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
34831                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
34832                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
34833                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
34834                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
34835                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
34836                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
34837                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
34838                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
34839                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
34840                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
34841                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
34842                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
34843                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
34844                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
34845                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
34846                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
34847                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
34848                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
34849                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
34850                  p_CURRENCY_DETAIL_ID           =>G_CURRENCY_DETAIL_ID_TBL,
34851                  p_CURRENCY_HEADER_ID           =>G_CURRENCY_HEADER_ID_TBL,
34852                  p_SELLING_ROUNDING_FACTOR      =>G_SELLING_ROUNDING_TBL,
34853                  p_ORDER_CURRENCY               =>G_ORDER_CURRENCY_TBL,
34854                  p_PRICING_EFFECTIVE_DATE       =>G_PRICING_EFFECTIVE_DATE_TBL,
34855                  p_BASE_CURRENCY_CODE           =>G_BASE_CURRENCY_CODE_TBL,
34856                  P_BREAK_UOM_CODE               =>G_BREAK_UOM_TBL, /* Proration */
34857                  P_BREAK_UOM_CONTEXT            =>G_BREAK_CONTEXT_TBL, /* Proration */
34858                  P_BREAK_UOM_ATTRIBUTE          =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
34859                  x_status_code                  =>l_status_code,
34860                  x_status_text                  =>l_status_text);
34861  else -- vivek, multi currency not installed, not used
34862   INSERT_LDETS_PRICE_LIST_PVT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
34863                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
34864                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
34865                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
34866                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
34867                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
34868                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
34869                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
34870                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
34871                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
34872                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
34873                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
34874                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
34875                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
34876                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
34877                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
34878                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
34879                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
34880                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
34881                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
34882                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
34883                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
34884                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
34885                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
34886                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
34887                  P_BREAK_UOM_CODE               =>G_BREAK_UOM_TBL, /* Proration */
34888                  P_BREAK_UOM_CONTEXT            =>G_BREAK_CONTEXT_TBL, /* Proration */
34889                  P_BREAK_UOM_ATTRIBUTE          =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
34890                  x_status_code                  =>l_status_code,
34891                  x_status_text                  =>l_status_text
34892                  );
34893  end if; -- vivek, multi currency installed
34894 qp_debug_util.tstop('INSERT_LDETS_PRICE_LIST_MULT_NON_MULTI');
34895 END IF;
34896 
34897 IF K > 1 THEN
34898 qp_debug_util.tstart('INSERT_PRICE_LIST_ATTRS','Inserting into line attrs INSERT_PRICE_LIST_ATTRS');
34899    INSERT_PRICE_LIST_ATTRS
34900    (    p_LINE_INDEX_tbl         =>G_LINE_INDEX_tbl,
34901         p_LINE_DETAIL_INDEX_tbl  =>G_LINE_DETAIL_INDEX_tbl,
34902         p_ATTRIBUTE_LEVEL_tbl    =>G_ATTRIBUTE_LEVEL_tbl,
34903         p_ATTRIBUTE_TYPE_tbl     =>G_ATTRIBUTE_TYPE_tbl,
34904         p_LIST_HEADER_ID_tbl     =>G_LIST_HEADER_ID_tbl,
34905         p_LIST_LINE_ID_tbl       =>G_LIST_LINE_ID_tbl,
34906         p_CONTEXT_tbl            =>G_CONTEXT_tbl,
34907         p_ATTRIBUTE_tbl          =>G_ATTRIBUTE_tbl,
34908         p_VALUE_FROM_tbl         =>G_VALUE_FROM_tbl,
34909         p_SETUP_VALUE_FROM_tbl   =>G_SETUP_VALUE_FROM_tbl,
34910         p_SETUP_VALUE_TO_tbl     =>G_SETUP_VALUE_TO_tbl,
34911         p_GROUPING_NUMBER_tbl    => G_GROUPING_NUMBER_tbl,
34912         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
34913         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
34914         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
34915         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
34916         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
34917         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
34918         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
34919         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
34920         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
34921         p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
34922         p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
34923         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
34924         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
34925         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
34926         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
34927         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
34928         x_status_code                   =>l_status_code,
34929         x_status_text                   =>l_status_text);
34930 qp_debug_util.tstop('INSERT_PRICE_LIST_ATTRS');
34931 END IF;
34932 
34933 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
34934  RAISE E_ROUTINE_ERRORS;
34935 END IF;
34936 
34937 --Reset_all_tbls;
34938 Reset_All_Tbls(l_status_code ,l_status_text );
34939 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
34940  RAISE E_ROUTINE_ERRORS;
34941 END IF;
34942 
34943 EXCEPTION
34944   WHEN E_ROUTINE_ERRORS THEN
34945     x_status_code := FND_API.G_RET_STS_ERROR;
34946     x_status_text := l_routine||': '||l_status_text;
34947   WHEN OTHERS THEN
34948       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34949       engine_debug('< In Select_Price_List_Lines>: '||SQLERRM);
34950       -- Keep it for debugging purposes
34951       /*
34952 FOR Z In 1 .. G_LIST_HEADER_ID_TBL_P.count
34953 Loop
34954 engine_debug(  '--------');
34955 engine_debug(  'Z: '||Z);
34956 engine_debug(  'G_LIST_HEADER_ID_TBL_P: ' || G_LIST_HEADER_ID_TBL_P(Z));
34957 engine_debug(  'G_LIST_LINE_ID_TBL_P: ' || G_LIST_LINE_ID_TBL_P(Z));
34958 engine_debug(  'G_LINE_INDEX_TBL_P: ' || G_LINE_INDEX_TBL_P(Z));
34959 engine_debug(  'G_APPLIED_FLAG_TBL_P: ' || G_APPLIED_FLAG_TBL_P(Z)  );
34960 engine_debug(  'G_ATTRIBUTE_LEVEL_TBL_P: ' || G_ATTRIBUTE_LEVEL_TBL_P(Z));
34961 engine_debug(  'G_ATTRIBUTE_TYPE_TBL_P: ' || G_ATTRIBUTE_TYPE_TBL_P(Z) );
34962 engine_debug(  'G_CONTEXT_TBL_P: ' ||G_CONTEXT_TBL_P(Z) );
34963 engine_debug(  'G_ATTRIBUTE_TBL_P: ' || G_ATTRIBUTE_TBL_P(Z));
34964 engine_debug(  'G_VALUE_FROM_TBL_P: ' || G_VALUE_FROM_TBL_P(Z));
34965 engine_debug(  'G_PRODUCT_UOM_CODE_TBL_P: ' || G_PRODUCT_UOM_CODE_TBL_P(Z));
34966 engine_debug(  'G_EXCLUDER_FLAG_TBL_P: ' || G_EXCLUDER_FLAG_TBL_P(Z));
34967 engine_debug(  'G_CONTEXT_TBL_Q: ' || G_CONTEXT_TBL_Q(Z));
34968 engine_debug(  'G_ATTRIBUTE_TBL_Q: ' || G_ATTRIBUTE_TBL_Q(Z));
34969 engine_debug(  'G_VALUE_FROM_TBL_Q: ' ||G_VALUE_FROM_TBL_Q(Z));
34970 engine_debug(  'G_GROUPING_NO_TBL_Q: ' || G_GROUPING_NO_TBL_Q(Z));
34971 engine_debug(  'G_QUALIFIER_PRECEDENCE_TBL_Q: ' || G_QUALIFIER_PRECEDENCE_TBL_Q(Z));
34972 engine_debug(  'G_DATATYPE_TBL_Q: ' || G_DATATYPE_TBL_Q(Z));
34973 engine_debug(  'G_SETUP_VALUE_FROM_TBL_Q: ' || G_SETUP_VALUE_FROM_TBL_Q(Z));
34974 engine_debug(  'G_SETUP_VALUE_TO_TBL_Q: ' || G_SETUP_VALUE_TO_TBL_Q(Z));
34975 engine_debug(  'G_AUTOMATIC_FLAG_TBL_P: ' || G_AUTOMATIC_FLAG_TBL_P(Z));
34976 engine_debug(  'G_MODIFIER_LEVEL_CODE_TBL_P: ' || G_MODIFIER_LEVEL_CODE_TBL_P(Z) );
34977 engine_debug(  'G_PRIMARY_UOM_FLAG_TBL_P: ' || G_PRIMARY_UOM_FLAG_TBL_P(Z));
34978 engine_debug(  'G_OPER_CALCULATION_CODE_TBL_P: ' || G_OPER_CALCULATION_CODE_TBL_P(Z));
34979 engine_debug(  'G_OPERAND_VALUE_TBL_P: ' || G_OPERAND_VALUE_TBL_P(Z));
34980 engine_debug(  'G_PRICING_GROUP_SEQUENCE_TBL_P: ' || G_PRICING_GROUP_SEQUENCE_TBL_P(Z));
34981 engine_debug(  'G_LIST_TYPE_CODE_TBL_P: ' || G_LIST_TYPE_CODE_TBL_P(Z));
34982 engine_debug(  'G_ROUNDING_FACTOR_TBL_P: ' || G_ROUNDING_FACTOR_TBL_P(Z));
34983 engine_debug(  'G_PRICING_PHASE_ID_TBL_P: ' || G_PRICING_PHASE_ID_TBL_P(Z));
34984 engine_debug(  'G_PRICE_BREAK_TYPE_CODE_TBL_P: ' || G_PRICE_BREAK_TYPE_CODE_TBL_P(Z));
34985 engine_debug(  'G_INCOMP_GRP_CODE_TBL_P: ' || G_INCOMP_GRP_CODE_TBL_P(Z));
34986 engine_debug(  'G_PRICE_FORMULA_ID_TBL_P: ' || G_PRICE_FORMULA_ID_TBL_P(Z));
34987 engine_debug(  'G_PRODUCT_PRECEDENCE_TBL_P: ' || G_PRODUCT_PRECEDENCE_TBL_P(Z));
34988 engine_debug(  'G_LIST_LINE_NO_TBL_P: ' || G_LIST_LINE_NO_TBL_P(Z));
34989 engine_debug(  'G_QUALIFIER_TYPE_TBL_Q: ' || G_QUALIFIER_TYPE_TBL_Q(Z));
34990 engine_debug(  'G_CURRENCY_DETAIL_ID_TBL_P: ' || G_CURRENCY_DETAIL_ID_TBL_P(Z));
34991 engine_debug(  'G_CURRENCY_HEADER_ID_TBL_P: ' || G_CURRENCY_HEADER_ID_TBL_P(Z));
34992 engine_debug(  'G_SELLING_ROUNDING_TBL_P: ' || G_SELLING_ROUNDING_TBL_P(Z));
34993 engine_debug(  'G_ORDER_CURRENCY_TBL_P: ' || G_ORDER_CURRENCY_TBL_P(Z));
34994 engine_debug(  'G_PRICING_EFFECTIVE_DATE_TBL_P: ' || G_PRICING_EFFECTIVE_DATE_TBL_P(Z));
34995 engine_debug(  'G_BASE_CURRENCY_CODE_TBL_P: ' ||G_BASE_CURRENCY_CODE_TBL_P(Z));
34996 
34997 End Loop;
34998 */
34999       END IF;
35000       x_status_code := FND_API.G_RET_STS_ERROR;
35001       x_status_text := l_routine||': '||SQLERRM;
35002 END SELECT_PRICE_LIST_LINES;
35003 
35004 /*+------------------------------------------------------------
35005   |CREATE_QUALIFIER_FROM_LIST
35006   |We need to make the list we selected from previous phase
35007   |to become qualifier
35008   |because price list might be a qualifier for a discount or promotion
35009   +------------------------------------------------------------
35010 */
35011 
35012 PROCEDURE Create_Qualifier_From_List( x_status_code OUT NOCOPY VARCHAR2,
35013                                       x_status_text OUT NOCOPY VARCHAR2)
35014 AS
35015 v_error_code VARCHAR2(240);
35016 v_error_message VARCHAR2(240);
35017 l_attribute VARCHAR2(240);
35018 l_context VARCHAR2(240);
35019 l_status_code VARCHAR2(30);
35020 l_status_text VARCHAR2(240);
35021 K PLS_INTEGER:= 1;
35022 
35023 --We don't want to create a new list which is already passed in as qualifiers
35024 --on previous phase.
35025 /*
35026 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_line_index_cur,- No Index Used -,NA,NA
35027 */
35028 CURSOR l_get_line_index_cur IS
35029 SELECT line_index
35030 FROM   qp_npreq_lines_tmp
35031 WHERE  line_type_code <> G_ORDER_LEVEL;
35032 
35033 /*
35034 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_modlist_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
35035 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_modlist_cur,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
35036 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_modlist_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
35037 
35038 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
35039 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
35040 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
35041 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
35042 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
35043 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
35044 */
35045 --check if passed in price list indeed has qualified
35046 CURSOR l_check_modlist_cur(p_line_index IN PLS_INTEGER) IS
35047 SELECT /*+ ORDERED index(qplat qp_preq_line_attrs_tmp_n2) l_check_modlist_cur */ 'X'
35048 FROM   qp_npreq_ldets_tmp qpld,
35049        qp_npreq_line_attrs_tmp qplat
35050 WHERE  qpld.line_index = p_line_index
35051 AND    qpld.pricing_phase_id = G_PRICE_LIST_PHASE_ID
35052 AND    qpld.pricing_status_code = G_STATUS_NEW
35053 AND    qplat.line_index = qpld.line_index
35054 AND    qplat.pricing_status_code = G_STATUS_UNCHANGED
35055 AND    qplat.attribute_type = 'QUALIFIER'
35056 AND    qplat.context = 'MODLIST'
35057 AND    qplat.attribute = 'QUALIFIER_ATTRIBUTE4'
35058 AND    qplat.value_from = TO_CHAR(qpld.created_from_list_header_id);
35059 
35060 -- find line_index(s) whose passed-in price list has not been qualified
35061 CURSOR l_check_no_modlist_cur IS
35062 SELECT /*+ index(qpll QP_PREQ_LINES_TMP_N2) */ qpll.line_index
35063 FROM   qp_npreq_lines_tmp qpll
35064 WHERE  qpll.line_type_code <> G_ORDER_LEVEL
35065 AND    NOT EXISTS (
35066                    SELECT /*+ ORDERED index(qpld QP_PREQ_LDETS_TMP_N1) index(qplat qp_preq_line_attrs_tmp_n2) l_check_modlist_cur */ 'X'
35067                    FROM   qp_npreq_ldets_tmp qpld,
35068                           qp_npreq_line_attrs_tmp qplat
35069                    WHERE  qpld.line_index = qpll.line_index
35070                    AND    qpld.pricing_phase_id = G_PRICE_LIST_PHASE_ID
35071                    AND    qpld.pricing_status_code = G_STATUS_NEW
35072                    AND    qplat.line_index = qpld.line_index
35073                    AND    qplat.pricing_status_code = G_STATUS_UNCHANGED
35074                    AND    qplat.attribute_type = 'QUALIFIER'
35075                    AND    qplat.context = 'MODLIST'
35076                    AND    qplat.attribute = 'QUALIFIER_ATTRIBUTE4'
35077                    AND    qplat.value_from = TO_CHAR(qpld.created_from_list_header_id));
35078 
35079 /*
35080 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
35081 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
35082 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
35083 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
35084 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
35085 */
35086 --check if there is a modlist passed
35087 CURSOR l_check_modlist_exists_cur(p_line_index IN PLS_INTEGER) IS
35088        SELECT ROWID
35089        FROM qp_npreq_line_attrs_tmp
35090        WHERE pricing_status_code = G_STATUS_UNCHANGED
35091        AND   attribute_type = 'QUALIFIER'
35092        AND   context = 'MODLIST'
35093        AND   attribute ='QUALIFIER_ATTRIBUTE4'
35094        AND   line_index = p_line_index
35095        AND   ROWNUM = 1;  --just one record need to be returned
35096 
35097 /*
35098 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
35099 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
35100 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
35101 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
35102 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,PRICING_STATUS_CODE,5
35103 */
35104 CURSOR l_get_pl_cur(p_line_index IN PLS_INTEGER) IS
35105 SELECT created_from_list_header_id
35106 FROM   qp_npreq_ldets_tmp
35107 WHERE  line_index = p_line_index
35108 and    created_from_list_line_type in (G_PRICE_LIST_TYPE,G_BY_PBH) -- Bug#2882115
35109 and    pricing_status_code = G_STATUS_NEW
35110 and    pricing_phase_id = G_PRICE_LIST_PHASE_ID;
35111 
35112 
35113 l_dummy VARCHAR2(1);
35114 l_rowid ROWID;
35115 l_list_header_id NUMBER;
35116 
35117 l_routine VARCHAR2(30) := 'Create_Qualifier_From_List';
35118 
35119 E_ROUTINE_ERRORS            EXCEPTION;
35120 
35121 l_line_index_tbl NUMBER_TYPE;
35122 
35123 -- julin [3805113]: tables for bulk insert/update
35124 A PLS_INTEGER:=1;
35125 l_a_list_header_id_tbl NUMBER_TYPE;
35126 l_a_line_index_tbl NUMBER_TYPE;
35127 
35128 B PLS_INTEGER:=1;
35129 l_b_list_header_id_tbl NUMBER_TYPE;
35130 l_b_rowid_tbl ROWID_TYPE;
35131 
35132 C PLS_INTEGER:=1;
35133 l_c_line_index_tbl NUMBER_TYPE;
35134 l_c_g_line_level_tbl VARCHAR_30_TYPE;
35135 l_c_G_QUALIFIER_TYPE_tbl VARCHAR_30_TYPE;
35136 l_c_G_LIST_HEADER_CONTEXT_tbl VARCHAR_30_TYPE;
35137 l_c_QUALIFIER_ATTRIBUTE4_tbl VARCHAR_30_TYPE;
35138 l_c_list_header_id_tbl NUMBER_TYPE;
35139 l_c_G_VALIDATED_tbl VARCHAR_30_TYPE;
35140 l_c_G_LIST_APPLIED_tbl VARCHAR_30_TYPE;
35141 l_c_G_STATUS_UNCHANGED_tbl VARCHAR_30_TYPE;
35142 l_c_PRICING_STATUS_TEXT_tbl VARCHAR_TYPE;
35143 
35144 
35145 BEGIN
35146 qp_debug_util.tstart('CREATE_QUALIFIER_FROM_LIST','Procedure CREATE_QUALIFIER_FROM_LIST');
35147   --po integration start
35148   UPDATE qp_npreq_lines_tmp a
35149   SET    pricing_status_code = G_STATUS_UPDATED
35150   Where    list_price_override_flag in ('Y', 'O')  --po integration
35151   AND   line_type_code <> G_ORDER_LEVEL;
35152   --po integration end
35153 
35154   -- julin [3805113]: using bulk collect and update
35155   OPEN l_check_no_modlist_cur;
35156   LOOP
35157     FETCH l_check_no_modlist_cur BULK COLLECT INTO
35158       l_line_index_tbl
35159       LIMIT G_BATCH_SIZE;
35160     EXIT WHEN l_line_index_tbl.count = 0;
35161 
35162     l_a_list_header_id_tbl.delete;
35163     l_a_line_index_tbl.delete;
35164 
35165     l_b_list_header_id_tbl.delete;
35166     l_b_rowid_tbl.delete;
35167 
35168     l_c_line_index_tbl.delete;
35169     l_c_g_line_level_tbl.delete;
35170     l_c_G_QUALIFIER_TYPE_tbl.delete;
35171     l_c_G_LIST_HEADER_CONTEXT_tbl.delete;
35172     l_c_QUALIFIER_ATTRIBUTE4_tbl.delete;
35173     l_c_list_header_id_tbl.delete;
35174     l_c_G_VALIDATED_tbl.delete;
35175     l_c_G_LIST_APPLIED_tbl.delete;
35176     l_c_G_STATUS_UNCHANGED_tbl.delete;
35177     l_c_PRICING_STATUS_TEXT_tbl.delete;
35178 
35179   /*FOR i in p_price_list_id_tbl.FIRST .. p_price_list_id_tbl.LAST
35180   LOOP
35181 
35182         OPEN l_check_modlist_cur(l_line_index_tbl(I));
35183         FETCH l_check_modlist_cur INTO l_dummy;
35184         IF l_check_modlist_cur%NOTFOUND THEN
35185   */
35186 
35187     FOR I in l_line_index_tbl.FIRST .. l_line_index_tbl.LAST
35188     LOOP
35189            OPEN l_check_modlist_exists_cur(l_line_index_tbl(I));
35190            FETCH l_check_modlist_exists_cur INTO l_rowid;
35191 
35192            OPEN l_get_pl_cur(l_line_index_tbl(I));
35193            FETCH l_get_pl_cur into l_list_header_id;
35194            CLOSE l_get_pl_cur;
35195 
35196            -- Update the order line with the secondary price list id(for OM displaying purposes)
35197           IF (l_list_header_id IS NOT NULL) THEN
35198             l_a_list_header_id_tbl(A) := l_list_header_id;
35199             l_a_line_index_tbl(A) := l_line_index_tbl(I);
35200             A := A + 1;
35201           END IF;
35202 
35203            IF l_check_modlist_exists_cur%FOUND THEN
35204              --OPEN l_get_pl_cur(l_line_index_tbl(I));
35205              --FETCH l_get_pl_cur into l_list_header_id;
35206              --CLOSE l_get_pl_cur;
35207 
35208              IF (l_list_header_id IS NOT NULL) THEN
35209                l_b_list_header_id_tbl(B) := l_list_header_id;
35210                l_b_rowid_tbl(B) := l_rowid;
35211                B := B + 1;
35212              END IF;
35213 
35214            ELSE
35215              --FOR J IN  l_get_pl_cur(l_line_index_tbl(I)) LOOP
35216               IF (l_list_header_id IS NOT NULL) THEN
35217                 l_c_line_index_tbl(C) := L_LINE_INDEX_TBL(I);
35218                 l_c_g_line_level_tbl(C) := G_LINE_LEVEL;
35219                 l_c_g_qualifier_type_tbl(C) := G_QUALIFIER_TYPE;
35220                 l_c_g_list_header_context_tbl(C) := G_LIST_HEADER_CONTEXT;
35221                 l_c_qualifier_attribute4_tbl(C) := 'QUALIFIER_ATTRIBUTE4';
35222                 l_c_list_header_id_tbl(C) := l_list_header_id;
35223                 l_c_g_validated_tbl(C) := G_VALIDATED;
35224                 l_c_g_list_applied_tbl(C) := G_LIST_APPLIED;
35225                 l_c_g_status_unchanged_tbl(C) := G_STATUS_UNCHANGED;
35226                 l_c_pricing_status_text_tbl(C) := 'Inserted by Create_Qualifier_From_List';
35227                 C := C + 1;
35228              --END LOOP;
35229               END IF;
35230            END IF;
35231            CLOSE l_check_modlist_exists_cur;
35232         --END IF;
35233         --CLOSE l_check_modlist_cur;
35234 
35235      IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
35236         RAISE E_ROUTINE_ERRORS;
35237      END IF;
35238      l_list_header_id := null;  -- Bug No: 7323621
35239     END LOOP;
35240 
35241   -- julin [3805113]: bulk update
35242   IF (l_a_list_header_id_tbl.COUNT > 0) THEN
35243     FORALL I IN l_a_list_header_id_tbl.first..l_a_list_header_id_tbl.last
35244       UPDATE qp_npreq_lines_tmp
35245       SET price_list_header_id = l_a_list_header_id_tbl(I)
35246       WHERE line_index = l_a_line_index_tbl(I);
35247   END IF;
35248 
35249   -- julin [3805113]: bulk update
35250   IF (l_b_list_header_id_tbl.COUNT > 0) THEN
35251     FORALL I IN l_b_list_header_id_tbl.first..l_b_list_header_id_tbl.last
35252       UPDATE qp_npreq_line_attrs_tmp
35253       SET    value_from = TO_CHAR(l_b_list_header_id_tbl(I))
35254       WHERE  rowid = l_b_rowid_tbl(I);
35255   END IF;
35256 
35257   -- julin [3805113]: bulk update
35258   IF (l_c_LINE_INDEX_TBL.COUNT > 0) THEN
35259     FORALL I IN l_c_LINE_INDEX_TBL.first..l_c_LINE_INDEX_TBL.last
35260       INSERT INTO qp_npreq_line_attrs_tmp
35261         (LINE_INDEX,
35262          ATTRIBUTE_LEVEL,
35263          ATTRIBUTE_TYPE,
35264          CONTEXT,
35265          ATTRIBUTE,
35266          VALUE_FROM,
35267          VALIDATED_FLAG,  --We may need to reset it to N
35268          APPLIED_FLAG,
35269          PRICING_STATUS_CODE,
35270          PRICING_STATUS_TEXT
35271         )
35272       VALUES
35273         (l_c_line_index_tbl(i),
35274          l_c_g_line_level_tbl(i),
35275          l_c_g_qualifier_type_tbl(i),
35276          l_c_g_list_header_context_tbl(i),
35277          l_c_qualifier_attribute4_tbl(i),
35278          l_c_list_header_id_tbl(i),
35279          l_c_g_validated_tbl(i),
35280          l_c_g_list_applied_tbl(i),
35281          l_c_g_status_unchanged_tbl(i),   --as it is passed in as qualifiers from the callers
35282          l_c_pricing_status_text_tbl(i));
35283 
35284   END IF;
35285 
35286   END LOOP;
35287   CLOSE l_check_no_modlist_cur;
35288 
35289          -- Update Rounding Factor, if rounding_flag not N
35290         IF (G_ROUNDING_FLAG <> 'N') THEN
35291                 UPDATE_ROUNDING_FACTOR (
35292                         QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
35293                         l_status_code,
35294                         l_status_text);
35295         END IF; -- end if rounding_flag
35296 
35297      IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
35298         RAISE E_ROUTINE_ERRORS;
35299      END IF;
35300 qp_debug_util.tstop('CREATE_QUALIFIER_FROM_LIST');
35301 EXCEPTION
35302 WHEN E_ROUTINE_ERRORS THEN
35303   x_status_code := FND_API.G_RET_STS_ERROR;
35304   x_status_text := l_routine||': '||l_status_text;
35305 WHEN OTHERS THEN
35306   v_error_code :=SQLCODE;
35307   v_error_message:=SQLERRM;
35308   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35309    engine_debug('Error in QP_PREQ_GRP.create_qualifier_from_list: '||SQLERRM);
35310   END IF;
35311   x_status_code := FND_API.G_RET_STS_ERROR;
35312   x_status_text := l_routine||': '||SQLERRM;
35313 qp_debug_util.tstop('CREATE_QUALIFIER_FROM_LIST');
35314 END Create_Qualifier_From_List;
35315 
35316 
35317 /*+------------------------------------------------------------
35318   |GET_REASON
35319   |To tell the reasons why certain list line is deleted
35320   +------------------------------------------------------------
35321 */
35322 PROCEDURE Get_Reason (p_line_index   IN  PLS_INTEGER,
35323                       x_reason_code_tbl  OUT NOCOPY VARCHAR_TYPE,
35324                       x_status_code OUT NOCOPY VARCHAR2,
35325                       x_status_text OUT NOCOPY VARCHAR2) AS
35326 /*
35327 -- Can use N1 instead of N3
35328 INDX,QP_PREQ_GRP.get_reason.l_reason_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
35329 */
35330 CURSOR l_reason_cur(p_line_index IN PLS_INTEGER) IS
35331 SELECT distinct pricing_status_code
35332 FROM   qp_npreq_ldets_tmp
35333 WHERE  line_index = p_line_index
35334 AND    pricing_status_code <> G_STATUS_NEW;
35335 
35336 J PLS_INTEGER:=0;
35337 l_routine VARCHAR2(240):='QP_PREQ_GRP.GET_REASON';
35338 BEGIN
35339 
35340 FOR I IN l_reason_cur(p_line_index) LOOP
35341  J:=J+1;
35342  x_reason_code_tbl(J):= I.pricing_status_code;
35343 END LOOP;
35344 
35345 EXCEPTION
35346   WHEN OTHERS THEN
35347    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35348     engine_debug(l_routine||': '||SQLERRM);
35349    END IF;
35350    x_status_code := FND_API.G_RET_STS_ERROR;
35351    x_status_text := l_routine||': '||SQLERRM;
35352 END Get_Reason;
35353 
35354 /*+------------------------------------------------------------
35355   |Call calculation engine
35356   +------------------------------------------------------------
35357 */
35358 PROCEDURE CALL_CALCULATION_ENGINE (p_phase_sequence       IN NUMBER:=NULL,
35359                                    p_freeze_override_flag IN VARCHAR2:=NULL,
35360                                    p_is_direct_call       IN BOOLEAN:=FALSE,
35361                                    x_status_code          OUT NOCOPY VARCHAR2,
35362                                    x_status_text          OUT NOCOPY VARCHAR2) AS
35363 
35364 p_cal_req_line_rec   QP_Calculate_Price_PUB.l_request_line_rec;
35365 l_cal_req_line_rec   QP_Calculate_Price_PUB.l_request_line_rec;
35366 p_cal_req_ldets_tbl  QP_Calculate_Price_PUB.l_request_line_details_tbl;
35367 l_cal_req_ldets_tbl  QP_Calculate_Price_PUB.l_request_line_details_tbl;
35368 p_cal_req_rltd_tbl   QP_Calculate_Price_PUB.l_related_request_lines_tbl;
35369 l_cal_req_rltd_tbl   QP_Calculate_Price_PUB.l_related_request_lines_tbl;
35370 
35371 /*
35372 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_cur,- No Index Used -,NA,NA
35373 */
35374 CURSOR l_request_line_cur  IS
35375   SELECT /*+ dynamic_sampling(1) */ qplt.LINE_INDEX,
35376          qplt.LINE_TYPE_CODE,
35377          qplt.PRICING_EFFECTIVE_DATE,
35378          qplt.LINE_QUANTITY,
35379          qplt.LINE_UOM_CODE,
35380          qplt.PRICED_QUANTITY,
35381          qplt.PRICED_UOM_CODE,
35382          qplt.CURRENCY_CODE,
35383          qplt.UNIT_PRICE,
35384          qplt.PERCENT_PRICE,
35385 	 qplt.UOM_QUANTITY,
35386          qplt.PARENT_PRICE,
35387          qplt.ADJUSTED_UNIT_PRICE,
35388          qplt.PROCESSED_FLAG,
35389          qplt.PRICE_FLAG,
35390          qplt.PROCESSING_ORDER,
35391          qplt.PRICING_STATUS_CODE,
35392          qplt.PRICING_STATUS_TEXT,
35393          qplt.GROUP_QUANTITY,
35394          qplt.GROUP_AMOUNT,
35395          qplt.ROUNDING_FLAG,
35396          qplt.PRICE_LIST_HEADER_ID,
35397          qplt.ROUNDING_FACTOR,
35398          qplt.CATCHWEIGHT_QTY,
35399          qplt.ACTUAL_ORDER_QUANTITY,
35400          NVL(qplt.price_flag,G_YES)
35401   FROM   qp_npreq_lines_tmp qplt
35402   WHERE  qplt.PRICING_STATUS_CODE IN (G_STATUS_UNCHANGED, G_STATUS_UPDATED)
35403   AND    (qplt.PRICE_FLAG IN (G_YES,G_PHASE)
35404           OR qplt.PROCESSED_CODE = G_BY_ENGINE)
35405   AND	 nvl(qplt.USAGE_PRICING_TYPE,G_REGULAR_USAGE_TYPE) NOT IN
35406 	  (G_AUTHORING_TYPE,G_BILLING_TYPE)
35407   ORDER  BY PROCESSING_ORDER;
35408 
35409 --for the case where p_control_rec.price_flat = 'P' (G_PHASE)
35410 /*
35411 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_detail_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
35412 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_detail_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
35413 
35414 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_detail_cur,qp_npreq_lines_tmp_N2,LINE_TYPE_CODE,1
35415 */
35416  CURSOR l_request_line_detail_cur(L_LINE_INDEX PLS_INTEGER,
35417                                   p_price_flag VARCHAR2) IS
35418    -- hint added as temporary R12 fix for 5573442
35419    SELECT /*+ index(qplt) */  --5658579
35420           QPLT.LINE_DETAIL_INDEX,
35421           QPLT.LINE_DETAIL_TYPE_CODE,
35422           QPLT.LINE_INDEX,
35423           QPLT.CREATED_FROM_LIST_HEADER_ID,
35424           QPLT.CREATED_FROM_LIST_LINE_ID,
35425           QPLT.CREATED_FROM_LIST_LINE_TYPE,
35426           QPLT.CREATED_FROM_LIST_TYPE_CODE,
35427           QPLT.PRICE_BREAK_TYPE_CODE,
35428           QPLT.PRICING_GROUP_SEQUENCE,
35429           QPLT.OPERAND_CALCULATION_CODE,
35430           QPLT.OPERAND_VALUE,
35431           QPLT.NET_AMOUNT_FLAG, -- IT net_amount 2720717
35432           QPLT.AUTOMATIC_FLAG,
35433           QPLT.ACCRUAL_FLAG,
35434           QPLT.ACCRUAL_CONVERSION_RATE,
35435           QPLT.ESTIM_ACCRUAL_RATE,
35436           QPLT.RECURRING_VALUE, -- block pricing
35437           QPLT.MODIFIER_LEVEL_CODE,
35438           QPLT.GROUP_QUANTITY,
35439           QPLT.GROUP_AMOUNT,
35440           QPLT.LINE_QUANTITY, --2388011_new
35441           QPLT.SELECTED_VOLUME_ATTR -- 2388011_new
35442 	  ,Nvl(QPLT.ROUNDING_FACTOR,QPLT.SELLING_ROUNDING_FACTOR) ROUNDING_FACTOR --10093463
35443    FROM qp_npreq_ldets_tmp QPLT
35444    WHERE QPLT.LINE_INDEX = L_LINE_INDEX
35445    AND QPLT.PRICING_STATUS_CODE = G_STATUS_NEW
35446    UNION
35447    -- hints added as temporary R12 fix for 5573442
35448    SELECT /*+ ORDERED USE_NL(QPLL QPLT) INDEX(QPLL) INDEX(QPLT) */  --5658579
35449           QPLT.LINE_DETAIL_INDEX,
35450           QPLT.LINE_DETAIL_TYPE_CODE,
35451           QPLT.LINE_INDEX,
35452           QPLT.CREATED_FROM_LIST_HEADER_ID,
35453           QPLT.CREATED_FROM_LIST_LINE_ID,
35454           QPLT.CREATED_FROM_LIST_LINE_TYPE,
35455           QPLT.CREATED_FROM_LIST_TYPE_CODE,
35456           QPLT.PRICE_BREAK_TYPE_CODE,
35457           QPLT.PRICING_GROUP_SEQUENCE,
35458           QPLT.OPERAND_CALCULATION_CODE,
35459           QPLT.OPERAND_VALUE,
35460           QPLT.NET_AMOUNT_FLAG, -- IT net_amount 2720717
35461           QPLT.AUTOMATIC_FLAG,
35462           QPLT.ACCRUAL_FLAG,
35463 	     QPLT.ACCRUAL_CONVERSION_RATE,
35464 	     QPLT.ESTIM_ACCRUAL_RATE,
35465 	     QPLT.RECURRING_VALUE, -- block pricing
35466           QPLT.MODIFIER_LEVEL_CODE,
35467 		QPLT.GROUP_QUANTITY,
35468 		QPLT.GROUP_AMOUNT,
35469           QPLT.LINE_QUANTITY, --2388011_new
35470           QPLT.SELECTED_VOLUME_ATTR -- 2388011_new
35471 	  ,Nvl(QPLT.ROUNDING_FACTOR,QPLT.SELLING_ROUNDING_FACTOR) ROUNDING_FACTOR --10093463
35472    FROM   qp_npreq_lines_tmp QPLL,
35473           qp_npreq_ldets_tmp QPLT
35474    WHERE  QPLL.LINE_TYPE_CODE = G_ORDER_LEVEL
35475    AND    QPLT.LINE_INDEX = QPLL.LINE_INDEX
35476    AND    QPLT.PRICING_STATUS_CODE = G_STATUS_NEW
35477    AND    QPLT.CREATED_FROM_LIST_TYPE_CODE <> G_CHARGES_HEADER
35478    ORDER BY 9; -- 9 - Pricing Group Sequence
35479 
35480 /*
35481 INDX,QP_PREQ_GRP.call_calculation_engine.l_line_attrs_cur,qp_npreq_line_attrs_tmp_N3,LINE_DETAIL_INDEX,1
35482 */
35483 CURSOR l_line_attrs_cur(l_line_detail_index PLS_INTEGER) IS
35484   SELECT VALUE_FROM,
35485          VALUE_TO,
35486          ATTRIBUTE
35487   FROM qp_npreq_line_attrs_tmp
35488   WHERE line_detail_index = l_line_detail_index
35489   AND ATTRIBUTE_LEVEL = G_DETAIL_LEVEL;
35490 
35491 /*
35492 INDX,QP_PREQ_GRP.call_calculation_engine.l_list_line_attribute_cur,QP_PRICING_ATTRIBUTES_N2,LIST_LINE_ID,1
35493 */
35494 CURSOR l_list_line_attribute_cur(p_list_line_id PLS_INTEGER) IS
35495    SELECT /*+ index(qpp qp_pricing_attributes_n2) l_list_line_attribute_cur */ PRICING_ATTRIBUTE
35496    FROM   QP_PRICING_ATTRIBUTES qpp
35497    WHERE LIST_LINE_ID = p_list_line_id
35498    AND   PRICING_ATTRIBUTE_CONTEXT = G_PRIC_VOLUME_CONTEXT;
35499 
35500 -- Cursor for getting the related line index for the line index
35501 -- Ex: Related Line Index - Oracle 8i Line Index - Service Line
35502 /*
35503 INDX,QP_PREQ_GRP.call_calculation_engine.l_service_item_cur,- No Index Used -,NA,NA
35504 */
35505 CURSOR l_service_item_cur(l_line_index PLS_INTEGER) IS
35506   SELECT LINE_INDEX
35507   FROM   qp_npreq_rltd_lines_tmp
35508   WHERE  RELATED_LINE_INDEX = l_line_index
35509   AND    RELATIONSHIP_TYPE_CODE = G_SERVICE_LINE;
35510 
35511 -- Cursor for getting the unit price of the parent line ex: Oracle 8i line
35512 /*
35513 INDX,QP_PREQ_GRP.call_calculation_engine.l_get_price_parent_line_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
35514 */
35515 CURSOR l_get_price_parent_line_cur(l_line_index PLS_INTEGER) IS
35516   SELECT UNIT_PRICE,
35517          LINE_UNIT_PRICE, --fix bug 2776849, uom_service_pricing
35518          PRICED_QUANTITY,
35519          LINE_QUANTITY,
35520          LINE_UOM_CODE  --fix bug 2776849, uom_service_pricing
35521   FROM   qp_npreq_lines_tmp
35522   WHERE  LINE_INDEX = l_line_index;
35523 
35524 /*
35525 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
35526 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
35527 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
35528 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
35529 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
35530 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
35531 */
35532 CURSOR gsa_qualifier_exists(p_line_index PLS_INTEGER)  IS
35533   SELECT 'X'
35534   FROM   qp_npreq_line_attrs_tmp
35535   WHERE  CONTEXT = G_CUSTOMER_CONTEXT
35536   AND    ATTRIBUTE = G_GSA_ATTRIBUTE
35537   AND    VALUE_FROM = G_YES
35538   AND    LINE_INDEX = p_line_index
35539   AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED
35540   AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE;
35541 
35542 -- begin shulin bug 1605829 fix
35543 CURSOR get_request_prclst_name_cur (p_list_header_id PLS_INTEGER) IS
35544 	SELECT name
35545 	FROM qp_list_headers_v a
35546  	WHERE a.list_header_id = p_list_header_id;
35547 
35548 CURSOR get_request_inv_item_id_cur(p_line_index PLS_INTEGER) IS
35549 	SELECT qp_number.canonical_to_number(VALUE_FROM)
35550 	FROM   qp_npreq_line_attrs_tmp
35551 	WHERE  CONTEXT = G_PRIC_ITEM_CONTEXT
35552 	AND    ATTRIBUTE = G_PRIC_ATTRIBUTE1
35553 	AND    ATTRIBUTE_TYPE = G_PRODUCT_TYPE
35554 	AND    LINE_INDEX = p_line_index
35555 	AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
35556 
35557 CURSOR get_request_inv_item_name_cur(p_item_id PLS_INTEGER) IS
35558  	SELECT concatenated_segments
35559  	--INTO l_request_item_name
35560  	FROM mtl_system_items_vl
35561  	WHERE inventory_item_id = p_item_id
35562         AND organization_id = QP_UTIL.Get_Item_Validation_Org;
35563 -- end shulin bug 1605829 fix
35564 
35565 J PLS_INTEGER:=1;
35566 N PLS_INTEGER:=1;
35567 B PLS_INTEGER:=0;
35568 C PLS_INTEGER:=0;
35569 l_reason_tbl VARCHAR_TYPE;
35570 l_parent_line_detail_index PLS_INTEGER;
35571 l_rltd_line_index PLS_INTEGER;
35572 l_parent_line_index PLS_INTEGER;
35573 l_percent_price NUMBER := 0;
35574 l_parent_unit_price    NUMBER :=NULL; -- fix bug 2776849, uom_service_pricing
35575 l_parent_line_unit_price    NUMBER :=NULL; -- fix bug 2776849, uom_service_pricing
35576 l_parent_line_quantity NUMBER:=NULL;
35577 l_parent_priced_quantity NUMBER:=NULL;
35578 l_parent_line_uom_code VARCHAR2(30);
35579 l_GSA_Enabled_Flag VARCHAR2(50);
35580 l_GSA_Qualifier_Flag VARCHAR2(50);
35581 l_status_code   VARCHAR2(30);
35582 l_status_text   VARCHAR2(240);
35583 l_gsa_violation_flag   VARCHAR2(1);
35584 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Call_Calculation_Engine';
35585 l_err_line_index   NUMBER;
35586 l_attribute	    VARCHAR2(30);
35587 l_value            VARCHAR2(30);
35588 V                  PLS_INTEGER := 0;
35589 U                  PLS_INTEGER := 0;
35590 Y                  PLS_INTEGER := 0;
35591 L                  PLS_INTEGER := 0;
35592 
35593 G_UNIT_PRICE_TBL_C             NUMBER_TYPE;
35594 G_LINE_UNIT_PRICE_TBL_C	       NUMBER_TYPE; -- shu_latest
35595 G_ORDER_UOM_TBL_C              NUMBER_TYPE; -- bug 2693700
35596 G_PERCENT_PRICE_TBL_C          NUMBER_TYPE;
35597 G_ADJUSTED_UNIT_PRICE_TBL_C    NUMBER_TYPE;
35598 G_PARENT_PRICE_TBL_C           NUMBER_TYPE;
35599 G_PARENT_PRICED_QUANTITY_TBL_C NUMBER_TYPE;
35600 G_PARENT_LINE_QUANTITY_TBL_C   NUMBER_TYPE;
35601 G_PARENT_LINE_UOM_TBL_C        VARCHAR_TYPE;
35602 G_LINE_INDEX_TBL_C             NUMBER_TYPE;
35603 G_EXTENDED_PRICE_TBL_C         NUMBER_TYPE; -- block pricing
35604 G_GSA_LINE_INDEX_TBL_C         NUMBER_TYPE;
35605 l_line_details_exist_flag      BOOLEAN := FALSE;
35606 
35607 G_ADJUSTMENT_AMOUNT_TBL_D      NUMBER_TYPE;
35608 --G_LINE_QUANTITY_TBL_D          NUMBER_TYPE;
35609 G_BENEFIT_QUANTITY_TBL_D       NUMBER_TYPE;
35610 G_OPERAND_VALUE_TBL_D          NUMBER_TYPE;
35611 G_QUALIFIER_VALUE_TBL_D        NUMBER_TYPE;
35612 G_LINE_DETAIL_INDEX_TBL_D      NUMBER_TYPE;
35613 G_OPR_CALC_CODE_TBL_D          VARCHAR_TYPE;  --bug#12916970
35614 
35615 G_LINE_QUANTITY_TBL_R          NUMBER_TYPE;
35616 G_ADJUSTMENT_AMOUNT_TBL_R      NUMBER_TYPE;
35617 G_LINE_DETAIL_INDEX_TBL_R      NUMBER_TYPE;
35618 
35619 G_PARENT_PRICE_TBL_P           NUMBER_TYPE;
35620 
35621 --[prarasto:Post Round] Start : new variables
35622 l_adjusted_unit_price_ur       NUMBER_TYPE;
35623 l_unit_selling_price_ur        NUMBER_TYPE;
35624 l_extended_selling_price_ur    NUMBER_TYPE;
35625 l_adjusted_unit_price          NUMBER_TYPE;
35626 l_unit_selling_price           NUMBER_TYPE;
35627 l_extended_selling_price       NUMBER_TYPE;
35628 --[prarasto:Post Round] End : new variables
35629 
35630 -- begin shulin bug 1605829 fix
35631 l_request_price_list_name qp_list_headers_v.name%type;
35632 l_request_uom VARCHAR2(30);
35633 l_request_item_id NUMBER;
35634 l_request_item_name mtl_system_items_vl.concatenated_segments%type;
35635 l_message VARCHAR2(240);
35636 -- end shulin bug 1605829 fix
35637 
35638 l_line_unit_price  NUMBER:= NULL; -- shu, default to null, fix bug 2354422, avoid division zero
35639 l_line_adjusted_unit_price  NUMBER:= NULL;
35640 l_conversion_rate NUMBER:= NULL; -- shu, to fix bug 2354422
35641 l_order_uom_selling_price NUMBER:= NULL; -- bug 2693700
35642 v_price_round_options VARCHAR2(30):= FND_PROFILE.Value('QP_SELLING_PRICE_ROUNDING_OPTIONS'); --shu, new rounding
35643 
35644 E_CAL_ENGINE_ERROR EXCEPTION;
35645 
35646 BEGIN
35647 
35648 
35649   x_status_code := FND_API.G_RET_STS_SUCCESS;
35650 
35651   --For manual discount, we want pricing_group sequence to be NULL
35652 /*
35653 -- This update is not needed as it is taken care of by the setup
35654 INDX,QP_PREQ_GRP.call_calculation_engine.call_calculation_engine_upd1,qp_npreq_ldets_tmp_N6,AUTOMATIC_FLAG,1
35655 */
35656   /* UPDATE qp_npreq_ldets_tmp
35657   SET    PRICING_GROUP_SEQUENCE = NULL
35658   WHERE  AUTOMATIC_FLAG = G_NO; */
35659 
35660 
35661   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35662   engine_debug( '-------------In call calculation engine-----------');
35663   END IF;
35664 
35665   l_GSA_Enabled_Flag := FND_PROFILE.VALUE(G_GSA_Max_Discount_Enabled);
35666 
35667   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35668   engine_debug ('GSA Enabled Flag : ' || l_GSA_Enabled_Flag);
35669   engine_debug ('Freeze_override_flag: '||p_freeze_override_flag);
35670   END IF;
35671 
35672   G_UNIT_PRICE_TBL_C.delete;
35673   G_LINE_UNIT_PRICE_TBL_C.delete; -- shu_latest
35674   G_ORDER_UOM_TBL_C.delete; -- bug 2693700
35675   G_PERCENT_PRICE_TBL_C.delete;
35676   G_ADJUSTED_UNIT_PRICE_TBL_C.delete;
35677   G_PARENT_PRICE_TBL_C.delete;
35678   G_PARENT_PRICED_QUANTITY_TBL_C.delete;
35679   G_PARENT_LINE_QUANTITY_TBL_C.delete;
35680   G_PARENT_LINE_UOM_TBL_C.delete;
35681   G_LINE_INDEX_TBL_C.delete;
35682   G_GSA_LINE_INDEX_TBL_C.delete;
35683   G_EXTENDED_PRICE_TBL_C.delete; -- block pricing
35684 
35685   G_ADJUSTMENT_AMOUNT_TBL_D.delete;
35686   --G_LINE_QUANTITY_TBL_D.delete;
35687   G_BENEFIT_QUANTITY_TBL_D.delete;
35688   G_OPERAND_VALUE_TBL_D.delete;
35689   G_QUALIFIER_VALUE_TBL_D.delete;
35690   G_LINE_DETAIL_INDEX_TBL_D.delete;
35691   G_OPR_CALC_CODE_TBL_D.delete; --bug#12916970
35692 
35693   G_LINE_QUANTITY_TBL_R.delete;
35694   G_ADJUSTMENT_AMOUNT_TBL_R.delete;
35695   G_LINE_DETAIL_INDEX_TBL_R.delete;
35696   G_PARENT_PRICE_TBL_P.delete;
35697 
35698   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35699     engine_debug ('  G_REQUEST_TYPE_CODE: ' ||G_REQUEST_TYPE_CODE); -- shu, aso rounding
35700     engine_debug ('  G_ROUNDING_FLAG: ' ||G_ROUNDING_FLAG); -- shu, aso rounding
35701   END IF; -- END IF DEBUG
35702 
35703   FOR I IN l_request_line_cur LOOP
35704 
35705     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35706       engine_debug('-----l_request_line_cur I loop ------');
35707       engine_debug ('  line_index: ' ||i.line_index);
35708       engine_debug ('  line_type_code: ' ||i.line_type_code);
35709       engine_debug ('  rounding_factor: ' ||i.rounding_factor);
35710       engine_debug ('  price_list_header_id: ' ||i.price_list_header_id);
35711     END IF;
35712 
35713     IF (l_GSA_Enabled_Flag = G_YES) THEN
35714       OPEN gsa_qualifier_exists(I.LINE_INDEX) ;
35715       FETCH gsa_qualifier_exists INTO l_GSA_Qualifier_Flag;
35716       CLOSE gsa_qualifier_exists;
35717     END IF;
35718 
35719     IF (I.PRICE_FLAG <> G_NO) THEN
35720 	--IF (l_attribute = G_QUANTITY_ATTRIBUTE) THEN
35721 	-- Default value
35722       p_cal_req_line_rec.qualifier_value := NVL(I.priced_quantity,I.line_quantity);
35723 	--ELSE
35724       -- p_cal_req_line_rec.qualifier_value := nvl(nvl(I.PRICED_QUANTITY,I.LINE_QUANTITY) * I.UNIT_PRICE,0);
35725 	--END IF;
35726 
35727 
35728       p_cal_req_line_rec.line_index             :=I.line_index;
35729       p_cal_req_line_rec.unit_price             :=I.unit_price;
35730       p_cal_req_line_rec.percent_price          :=I.percent_price;
35731       p_cal_req_line_rec.service_duration       :=nvl(I.uom_quantity,1);
35732       p_cal_req_line_rec.gsa_qualifier_flag     :=l_GSA_Qualifier_Flag;
35733       p_cal_req_line_rec.gsa_enabled_flag       :=l_GSA_Enabled_Flag;
35734       p_cal_req_line_rec.pricing_effective_date :=I.pricing_effective_date;
35735       p_cal_req_line_rec.rounding_factor        :=I.rounding_factor;
35736       p_cal_req_line_rec.rounding_flag          :=I.rounding_flag;
35737 
35738     END IF; -- END IF (I.PRICE_FLAG <> G_NO)
35739 
35740     IF (I.PROCESSING_ORDER > 1) THEN -- service pricing
35741 
35742       OPEN l_service_item_cur(I.LINE_INDEX);
35743       FETCH l_service_item_cur INTO l_parent_line_index;
35744       CLOSE l_service_item_cur;
35745 
35746       IF (l_parent_line_index IS NOT NULL) THEN
35747 
35748 	OPEN  l_get_price_parent_line_cur(l_parent_line_index);
35749 	FETCH l_get_price_parent_line_cur
35750         INTO  l_parent_unit_price,      --fix bug 2776849, uom_service_pricing
35751               l_parent_line_unit_price, --fix bug 2776849, uom_service_pricing
35752               l_parent_priced_quantity,
35753               l_parent_line_quantity,
35754               l_parent_line_uom_code;
35755 	CLOSE l_get_price_parent_line_cur;
35756 
35757         -- if price flag is 'N' for the parent line , then that record would not exist in g_parent_price_tbl_p
35758         -- So check  g_parent_price_tbl_p.exists(l_parent_line_index), bug# 2163919
35759         -- begin fix bug 2776849, uom_service_pricing
35760         IF (g_parent_price_tbl_p.count > 0) AND g_parent_price_tbl_p.exists(l_parent_line_index) THEN
35761           p_cal_req_line_rec.RELATED_ITEM_PRICE := nvl(nvl(G_PARENT_PRICE_TBL_P(l_parent_line_index),l_parent_line_unit_price), l_parent_unit_price);
35762         ELSE
35763           p_cal_req_line_rec.RELATED_ITEM_PRICE := nvl(l_parent_line_unit_price, l_parent_unit_price);
35764         END IF; -- END IF (g_parent_price_tbl_p.count > 0)
35765 
35766         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35767           engine_debug('  l_parent_line index : '|| l_parent_line_index);
35768           engine_debug('  p_cal_req_line_rec.RELATED_ITEM_PRICE: '|| p_cal_req_line_rec.RELATED_ITEM_PRICE);
35769         END IF; -- END IF DEBUG
35770 
35771       ELSE -- l_parent_line_index is null
35772 		-- Error Condition
35773         null;
35774         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35775           engine_debug('Unable to find parent line for a service item');
35776         END IF;
35777         l_err_line_index := I.LINE_INDEX;
35778         DELETE_LINES(l_err_line_index,
35779                        G_STATUS_OTHER_ERRORS,
35780                        'Could not find parent line for a child service line:'||l_err_line_index,
35781                        l_status_code,
35782                        l_status_text);
35783         GOTO E_LOOP;
35784       END IF;  -- END IF (l_parent_line_index IS NOT NULL)
35785 
35786     END IF; -- END IF (I.PROCESSING_ORDER > 1)
35787 
35788     FOR K IN l_request_line_detail_cur(I.LINE_INDEX,I.PRICE_FLAG) LOOP
35789       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35790            engine_debug('-----l_request_line_detail_cur K loop------');
35791       END IF;
35792 
35793       l_line_details_exist_flag := TRUE;
35794 
35795        -- Don't populate calculation engine rec if it is not an automatic discount
35796        -- and it is not a direct call
35797        -- If freight charges and Discount related manual Price Breaks or recurring discounts,
35798        -- do not skip calculation even if automatic_flag = 'N'
35799          IF K.AUTOMATIC_FLAG = G_NO AND p_is_direct_call = FALSE  THEN
35800            IF (K.created_from_list_line_type NOT IN (G_FREIGHT_CHARGE,G_PRICE_BREAK_TYPE) AND
35801                K.created_from_list_type_code NOT IN ('PRL','AGR') AND
35802                K.PRICE_BREAK_TYPE_CODE <> G_RECURRING_BREAK AND
35803                K.LINE_DETAIL_TYPE_CODE <> G_CHILD_DETAIL_TYPE)THEN
35804              GOTO SKIP_CAL_LOOP;
35805            END IF;
35806          END IF;
35807 
35808          IF (K.LINE_DETAIL_TYPE_CODE <> G_CHILD_DETAIL_TYPE) THEN
35809 
35810             p_cal_req_ldets_tbl(J).created_from_list_type   := K.created_from_list_type_code;
35811             p_cal_req_ldets_tbl(J).created_from_list_line_id:= K.created_from_list_line_id;
35812             p_cal_req_ldets_tbl(J).created_from_list_header_id:= K.created_from_list_header_id;
35813             p_cal_req_ldets_tbl(J).line_detail_index        := K.line_detail_index;
35814             p_cal_req_ldets_tbl(J).created_from_list_line_type:= K.created_from_list_line_type;
35815             p_cal_req_ldets_tbl(J).pricing_group_sequence   := K.pricing_group_sequence;
35816             p_cal_req_ldets_tbl(J).accrual_flag             := K.accrual_flag;
35817             p_cal_req_ldets_tbl(J).automatic_flag           := K.automatic_flag;
35818             p_cal_req_ldets_tbl(J).accrual_conversion_rate  := K.accrual_conversion_rate;
35819             p_cal_req_ldets_tbl(J).estim_accrual_rate       := K.estim_accrual_rate;
35820             p_cal_req_ldets_tbl(J).price_break_type_code    := K.price_break_type_code;
35821             p_cal_req_ldets_tbl(J).bucketed_flag := 'N';   -- TO_DO 2388011, IT bucket, for now, should from the cursor
35822             --p_cal_req_ldets_tbl(J).bucketed_flag := k.bucketed_flag; -- TO_DO 2388011, IT bucket
35823              p_cal_req_ldets_tbl(J).bucketed_flag := nvl(k.net_amount_flag, 'N'); -- 2720717, IT net_amount
35824 	     p_cal_req_ldets_tbl(J).ROUNDING_FACTOR := k.ROUNDING_FACTOR;      --10093463
35825 
35826 
35827 
35828             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35829             engine_debug('List Line Id for Qualifier Value: ' || k.created_from_list_line_id);
35830 
35831             END IF;
35832             -- This is not needed as in Process_Line_Group procedure we are populating the right attibute
35833             -- So either it would be group_quantity or group_amount
35834 
35835                /* OPEN l_list_line_attribute_cur(K.created_from_list_line_id);
35836                FETCH l_list_line_attribute_cur INTO l_attribute;
35837                CLOSE l_list_line_attribute_cur; */
35838 
35839                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35840 		  engine_debug('Modifier Level Code: ' || K.modifier_level_code);
35841                END IF;
35842 
35843                IF (K.MODIFIER_LEVEL_CODE = G_LINE_GROUP) THEN
35844                  -- begin 2388011_new
35845                  IF (K.SELECTED_VOLUME_ATTR = G_AMOUNT) THEN -- 2388011_new
35846                    p_cal_req_ldets_tbl(J).qualifier_value  := nvl(K.line_quantity,0);
35847                  END IF;
35848                  p_cal_req_ldets_tbl(J).line_quantity := nvl(K.group_quantity,K.group_amount); -- ASK RAVI
35849                  --p_cal_req_ldets_tbl(J).line_quantity := nvl(K.line_quantity,0); --2388011, grp_lines_pbh
35850                  --end 2388011_new
35851                  p_cal_req_ldets_tbl(J).modifier_level_code := 'LINEGROUP'; --2388011, grp_lines_pbh
35852                ELSE
35853                  -- begin 2388011_new
35854                  -- 2388011_latest whole block
35855                 IF (K.SELECTED_VOLUME_ATTR = G_QUANTITY) THEN -- ravi_latest
35856                  p_cal_req_ldets_tbl(J).line_quantity :=  NVL(I.priced_quantity,I.line_quantity);
35857                  p_cal_req_ldets_tbl(J).modifier_level_code := 'LINE'; -- new ravi
35858                 ELSE -- Amount and Other Attributes
35859                  p_cal_req_ldets_tbl(J).line_quantity :=  NVL(I.priced_quantity,I.line_quantity);
35860                  p_cal_req_ldets_tbl(J).modifier_level_code := 'LINE'; -- new ravi
35861                  p_cal_req_ldets_tbl(J).qualifier_value  := nvl(K.line_quantity,0);
35862                 END IF;
35863                 -- end 2388011_latest
35864                  l_value := null;
35865                END IF;
35866 
35867             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35868             engine_debug('Qualifier Value for loading: ' || p_cal_req_ldets_tbl(J).qualifier_value);
35869 
35870             END IF;
35871             p_cal_req_ldets_tbl(J).operand_calculation_code:=K.operand_calculation_code;
35872             p_cal_req_ldets_tbl(J).operand_value:=K.operand_value;
35873 
35874             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35875             engine_debug('accrual_flag: '||p_cal_req_ldets_tbl(J).accrual_flag);
35876             engine_debug('estim_accrual_rate: '||p_cal_req_ldets_tbl(J).estim_accrual_rate);
35877             engine_debug('accrual_conversion_rate: '||p_cal_req_ldets_tbl(J).accrual_conversion_rate);
35878 
35879             END IF;
35880             J:=J+1;
35881 
35882            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35883            engine_debug('+--------------------------------+');
35884            engine_debug('| In Parent Line                 |');
35885            engine_debug('+--------------------------------+');
35886            engine_debug('LINE_DETAIL_INDEX: '||K.line_detail_index);
35887            engine_debug('LINE_INDEX: '|| K.line_index);
35888            engine_debug('CREATED_FROM_LIST_LINE_ID :'||K.created_from_list_line_id);
35889            engine_debug('CREATED_FROM_LIST_LINE_TYPE : '||K.created_from_list_line_type);
35890            engine_debug('CREATED_FROM_LIST_TYPE : '||K.created_from_list_type_code);
35891            engine_debug('PRICING_GROUP_SEQUENCE: '||K.pricing_group_sequence);
35892            engine_debug('OPERAND_CALCULATION_CODE: '||K.operand_calculation_code);
35893            engine_debug('OPERAND_VALUE: '||K.operand_value);
35894             engine_debug('NET_AMOUNT_FLAG: '||k.net_amount_flag); -- 2720717, IT net_amount
35895 
35896            END IF;
35897           ELSIF  (K.LINE_DETAIL_TYPE_CODE = G_CHILD_DETAIL_TYPE) THEN
35898                 --FOR P IN l_line_attrs_cur(K.LINE_DETAIL_INDEX) LOOP
35899 
35900                 p_cal_req_rltd_tbl(N).value_from := qp_number.canonical_to_number(G_CHILD_VALUE_FROM_TBL(k.line_detail_index));
35901                 p_cal_req_rltd_tbl(N).value_to   := qp_number.canonical_to_number(G_CHILD_VALUE_TO_TBL(k.line_detail_index));
35902                 p_cal_req_rltd_tbl(N).operand_calculation_code := K.operand_calculation_code;
35903                 p_cal_req_rltd_tbl(N).operand_value := K.operand_value;
35904                 p_cal_req_rltd_tbl(N).price_break_type_code := K.price_break_type_code;
35905                 p_cal_req_rltd_tbl(N).child_line_detail_index :=K.line_detail_index;
35906                 p_cal_req_rltd_tbl(N).related_list_line_type := K.created_from_list_line_type;
35907                 p_cal_req_rltd_tbl(N).pricing_group_sequence := K.pricing_group_sequence;
35908                 p_cal_req_rltd_tbl(N).recurring_value := K.recurring_value; -- block pricing
35909 
35910                 --get the parent line detail index for this pbh line
35911 
35912 /*
35913 INDX,QP_PREQ_GRP.call_calculation_engine.call_calculation_engine_sel1,-No Index Used-,NA,NA
35914 */
35915                 /* julin [3805113]: using global table populated in handle_break
35916                 SELECT LINE_DETAIL_INDEX
35917                 INTO  l_parent_line_detail_index
35918                 FROM  qp_npreq_rltd_lines_tmp
35919                 WHERE RELATED_LINE_DETAIL_INDEX = K.line_detail_index;
35920                 */
35921                 --p_cal_req_rltd_tbl(N).line_detail_index  is actually parent line detail index
35922                 p_cal_req_rltd_tbl(N).line_detail_index  := TO_NUMBER(G_PARENT_LINE_DETAIL_INDEX_TBL(k.line_detail_index));
35923 
35924                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35925                 engine_debug('----IN Children line------------');
35926                 engine_debug('value from: '||p_cal_req_rltd_tbl(N).value_from);
35927                 engine_debug('value to: '  ||p_cal_req_rltd_tbl(N).value_to);
35928                 engine_debug('LINE_INDEX: '||I.LINE_INDEX);
35929                 engine_debug('Calculation Code: '||K.OPERAND_CALCULATION_CODE);
35930                 engine_debug('Operand Value: '||K.OPERAND_VALUE);
35931                 engine_debug('Price_break_type_code: '||K.PRICE_BREAK_TYPE_CODE);
35932                 engine_debug('Parent line detail index: '||l_parent_line_detail_index);
35933                 engine_debug('Child line detail index: '||K.LINE_DETAIL_INDEX);
35934                 engine_debug('Related List line type: '||K.created_from_list_line_type);
35935                 engine_debug('List Line ID: '||K.created_from_list_line_id);
35936 
35937                 END IF;
35938                 N:=N+1;
35939 
35940                 --END LOOP;
35941 
35942 
35943           END IF;
35944           <<SKIP_CAL_LOOP>>
35945            IF(K.AUTOMATIC_FLAG = G_NO AND p_is_direct_call = FALSE) THEN
35946               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35947               engine_debug('Not calling cal engine for child break line because automatic_flag was set to ''N''');
35948               END IF;
35949               null;
35950            END IF;
35951 
35952        END LOOP;  --END K loop
35953 
35954 
35955 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35956 engine_debug(l_routine||' Before calling cal engine');
35957 
35958 END IF;
35959      QP_Calculate_Price_PUB.Calculate_Price
35960           (p_cal_req_line_rec,
35961            p_cal_req_ldets_tbl,
35962            p_cal_req_rltd_tbl,
35963            l_status_code,
35964            l_status_text);
35965 
35966 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
35967    l_err_line_index := I.LINE_INDEX;
35968    DELETE_LINES(l_err_line_index,
35969                 G_STATUS_OTHER_ERRORS,
35970                 'Error returned by QP_Calculate_Price_PUB.Calculate_Price',
35971                 l_status_code,
35972                 l_status_text);
35973     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35974     engine_debug('Error text '||l_status_text);
35975     END IF;
35976     GOTO E_LOOP;
35977 
35978 END IF;
35979 
35980 /* fix bug 2776849, move this to later
35981 -- Holding the parent price for service pricing
35982 IF (i.PROCESSING_ORDER = 1 ) THEN
35983  G_PARENT_PRICE_TBL_P(i.line_index) := p_cal_req_line_rec.UNIT_PRICE;
35984 END IF;
35985 */
35986 -- Indicating that there was a GSA Violation
35987 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35988 engine_debug ('GSA Status Code : ' || l_status_code);
35989 END IF;
35990 IF (l_status_code = G_STATUS_GSA_VIOLATION) THEN
35991   l_gsa_violation_flag := 'Y';
35992   V := V + 1;
35993   G_GSA_LINE_INDEX_TBL_C(V) := I.LINE_INDEX;
35994 ELSE
35995   l_gsa_violation_flag := 'N';
35996 END IF;
35997 
35998 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
35999 engine_debug ('In Line Update Information100');
36000 END IF;
36001  -- Load Line Information
36002  IF (l_line_details_exist_flag = TRUE) THEN --Change
36003   U := U+1; --Change
36004   G_UNIT_PRICE_TBL_C(U) := p_cal_req_line_rec.UNIT_PRICE;
36005   G_PERCENT_PRICE_TBL_C(U) := p_cal_req_line_rec.PERCENT_PRICE;
36006   G_ADJUSTED_UNIT_PRICE_TBL_C(U) := p_cal_req_line_rec.ADJUSTED_UNIT_PRICE;
36007   --G_PARENT_PRICE_TBL_C(U) := l_parent_line_price;
36008   G_PARENT_PRICE_TBL_C(U) := l_parent_line_unit_price; -- fix 2776849, uom_service_pricing
36009   G_PARENT_PRICED_QUANTITY_TBL_C(U) := l_parent_priced_quantity;
36010   G_PARENT_LINE_QUANTITY_TBL_C(U) := l_parent_line_quantity;
36011   G_PARENT_LINE_UOM_TBL_C(U) := l_parent_line_uom_code;
36012   G_LINE_INDEX_TBL_C(U) := i.line_index;
36013   G_EXTENDED_PRICE_TBL_C(U) := p_cal_req_line_rec.EXTENDED_PRICE; -- block pricing
36014   --G_LINE_UNIT_PRICE_TBL_C(U) := p_cal_req_line_rec.UNIT_PRICE * i.PRICED_QUANTITY / i.LINE_QUANTITY;
36015 
36016   -- begin shu, round line unit price (unit price by order uom)
36017   -- shu, fix bug 2354422, avoid division zero if i.LINE_QUANTITY is zero
36018 
36019   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36020   engine_debug ('parent_qty: '|| l_parent_priced_quantity);
36021   engine_debug ('unit_price: '|| p_cal_req_line_rec.UNIT_PRICE);
36022   engine_debug ('priced_qty: '|| i.PRICED_QUANTITY);
36023   engine_debug ('line_qty: '|| i.LINE_QUANTITY);
36024   END IF;
36025 
36026   IF (i.LINE_QUANTITY <> 0 AND i.LINE_QUANTITY IS NOT NULL) THEN
36027    -- l_line_unit_price := p_cal_req_line_rec.UNIT_PRICE * i.PRICED_QUANTITY / i.LINE_QUANTITY;-- bug 2693700
36028    -- l_line_unit_price:=(p_cal_req_line_rec.UNIT_PRICE * i.PRICED_QUANTITY/i.LINE_QUANTITY)*nvl(i.catchweight_qty, 1);
36029    IF (i.catchweight_qty IS NOT NULL) THEN
36030     l_line_unit_price :=
36031     p_cal_req_line_rec.unit_price * (i.priced_quantity/i.actual_order_quantity)* (i.catchweight_qty/i.line_quantity);
36032    ELSIF (i.actual_order_quantity IS NOT NULL) THEN
36033     l_line_unit_price :=
36034     p_cal_req_line_rec.unit_price * (i.priced_quantity/i.actual_order_quantity);
36035    ELSE
36036     l_line_unit_price := p_cal_req_line_rec.unit_price * (i.priced_quantity/i.line_quantity);
36037    END IF;
36038 
36039    -- bug 2693700
36040    --l_order_uom_selling_price :=
36041    --(nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
36042    --i.priced_quantity/ i.line_quantity)* nvl(i.catchweight_qty, 1);
36043    -- bug 2693700
36044 
36045    IF (i.catchweight_qty IS NOT NULL) THEN
36046     l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
36047     (i.priced_quantity/i.actual_order_quantity)* (i.catchweight_qty/i.line_quantity));
36048    ELSIF (i.actual_order_quantity IS NOT NULL) THEN
36049     l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
36050     (i.priced_quantity/i.actual_order_quantity));
36051    ELSE
36052     l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price)*
36053     (i.priced_quantity/i.line_quantity));
36054    END IF;
36055 
36056   ELSE
36057    IF (i.LINE_UOM_CODE = i.PRICED_UOM_CODE) THEN  -- no uom conversion
36058     l_line_unit_price := p_cal_req_line_rec.UNIT_PRICE;
36059     l_line_adjusted_unit_price := nvl(p_cal_req_line_rec.ADJUSTED_UNIT_PRICE,p_cal_req_line_rec.UNIT_PRICE);
36060    ELSE -- uom conversion, need to show line_unit_price even line_qty is zero or null
36061     Inv_convert.inv_um_conversion(i.line_uom_code,
36062                                   i.priced_uom_code,
36063                                   null,
36064                                   l_conversion_rate);
36065     l_line_unit_price := p_cal_req_line_rec.UNIT_PRICE * l_conversion_rate;
36066     l_line_adjusted_unit_price := nvl(p_cal_req_line_rec.ADJUSTED_UNIT_PRICE,p_cal_req_line_rec.UNIT_PRICE) *
36067                                   l_conversion_rate;
36068    END IF;
36069 
36070    -- l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
36071    -- l_conversion_rate * i.priced_quantity/ i.line_quantity)* nvl(i.catchweight_qty, 1);
36072    -- bug 2693700
36073    IF (i.catchweight_qty IS NOT NULL) THEN
36074 
36075       if (i.line_quantity <> 0) then
36076        l_order_uom_selling_price := (l_line_adjusted_unit_price *
36077 (i.priced_quantity/i.actual_order_quantity)* (i.catchweight_qty/i.line_quantity));
36078       Else
36079        l_order_uom_selling_price := l_line_adjusted_unit_price;
36080 --Bug#3075286
36081       End if;
36082       ELSIF (i.actual_order_quantity IS NOT NULL) THEN
36083 
36084       if i.actual_order_quantity <> 0 then
36085        l_order_uom_selling_price := (l_line_adjusted_unit_price * (i.priced_quantity/i.actual_order_quantity));
36086       Else
36087        l_order_uom_selling_price := l_line_adjusted_unit_price;   --Bug#3075286
36088       End if;
36089       ELSE
36090 
36091 
36092        IF i.LINE_QUANTITY <> 0 THEN
36093 
36094            l_order_uom_selling_price := (l_line_adjusted_unit_price *(i.priced_quantity/i.line_quantity));
36095        ELSE
36096            l_order_uom_selling_price := l_line_adjusted_unit_price;
36097 --Bug#3075286
36098        END IF;
36099       END IF;
36100 
36101   END IF;
36102   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36103   engine_debug ('line_unit_price bfe round: '||l_line_unit_price);
36104   engine_debug ('rounding_factor:'|| i.rounding_factor);
36105   engine_debug (' order_uom_selling_price bfe round : ' || l_order_uom_selling_price); -- bug 2693700
36106   END IF;
36107 
36108   -- Holding the parent price for service pricing
36109   IF (i.PROCESSING_ORDER = 1 ) THEN
36110     G_PARENT_PRICE_TBL_P(i.line_index) := nvl(l_line_unit_price, p_cal_req_line_rec.UNIT_PRICE) ;
36111   END IF;
36112 
36113   --===[prarasto:Post Round] Start : Calculate rounded values ==--
36114   l_adjusted_unit_price_ur(U) := NVL(G_ADJUSTED_UNIT_PRICE_TBL_C(U), G_UNIT_PRICE_TBL_C(U));
36115 
36116   l_unit_selling_price_ur(U) := l_order_uom_selling_price;
36117 
36118   IF( G_EXTENDED_PRICE_TBL_C(U) is not null )THEN
36119       IF ( i.catchweight_qty is null ) and ( i.actual_order_quantity IS NOT NULL ) THEN
36120         l_extended_selling_price_ur(U) := l_unit_selling_price_ur(U) * i.actual_order_quantity;
36121       ELSE
36122         l_extended_selling_price_ur(U) := l_unit_selling_price_ur(U) * i.line_quantity;
36123       END IF;
36124   ELSE
36125     l_extended_selling_price_ur(U) := G_EXTENDED_PRICE_TBL_C(U);
36126   END IF;
36127 
36128   --9153159 added v_price_round_options condition to unround if the profile option is set to No Rounding
36129   IF (G_ROUNDING_FLAG = 'N') or (i.rounding_factor IS null) OR (v_price_round_options = 'NO_ROUND') THEN
36130     l_adjusted_unit_price(U) := l_adjusted_unit_price_ur(U);
36131     l_unit_selling_price(U) := l_unit_selling_price_ur(U);
36132     l_extended_selling_price(U) := l_extended_selling_price_ur(U);
36133    	G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
36134 ELSE
36135     l_adjusted_unit_price(U) := round(l_adjusted_unit_price_ur(U), - 1 * i.rounding_factor);
36136     l_unit_selling_price(U) := round(l_unit_selling_price_ur(U),  - 1 * i.rounding_factor);
36137     l_extended_selling_price(U) := round(l_extended_selling_price_ur(U),  - 1 * i.rounding_factor);
36138     G_LINE_UNIT_PRICE_TBL_C(U) := round(l_line_unit_price,  - 1 * i.rounding_factor);
36139   END IF;
36140 /*
36141   IF G_ROUNDING_FLAG = 'Y'  AND i.rounding_factor IS NOT NULL THEN -- aso rounding
36142 
36143   	l_line_unit_price := ROUND(l_line_unit_price, (-1)*i.rounding_factor);
36144   	G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
36145 
36146         l_order_uom_selling_price := ROUND(l_order_uom_selling_price, (-1)*i.rounding_factor); --bug 2693700
36147         G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
36148 
36149 
36150   ELSIF (G_ROUNDING_FLAG = 'Q') THEN -- check qp_selling_price_rounding_options profile -- shu, new rounding
36151   	IF ((v_price_round_options = 'ROUND_ADJ' OR v_price_round_options = 'NO_ROUND_ADJ') AND i.rounding_factor IS NOT NULL) THEN -- do not round if profile is null
36152   		l_line_unit_price := ROUND(l_line_unit_price, (-1)*i.rounding_factor);
36153   		G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
36154 
36155                 l_order_uom_selling_price := ROUND(l_order_uom_selling_price, (-1)*i.rounding_factor); --bug 2693700
36156                 G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
36157 
36158   	ELSE -- 'NO_ROUND', 'NO_ROUND_ADJ'
36159   		G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
36160                 G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
36161   	END IF;
36162   ELSE
36163   	G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
36164         G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
36165   END IF;
36166 */
36167   --===[prarasto:Post Round] End : Calculate rounded values ==--
36168 
36169   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36170   engine_debug (' final line_unit_price : '||l_line_unit_price);
36171   engine_debug (' order_uom_selling_price : ' || l_order_uom_selling_price); -- bug 2693700
36172   engine_debug ('G_LINE_UNIT_PRICE_TBL_C(U) : '||G_LINE_UNIT_PRICE_TBL_C(U));	--[prarasto:Post Round]
36173   engine_debug ('l_unit_selling_price(U) : '||l_unit_selling_price(U));		--[prarasto:Post Round]
36174   END IF;
36175   -- end shu
36176   l_line_details_exist_flag := FALSE; -- reset
36177   l_line_unit_price := NULL; --reset, shu
36178   l_order_uom_selling_price := NULL; -- bug 2693700
36179   l_conversion_rate := NULL; -- shu
36180  END IF;
36181 
36182 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36183 engine_debug ('In Line Update Information200');
36184 END IF;
36185  --Load Line Detail Information
36186 IF (p_cal_req_ldets_tbl.COUNT > 0) THEN
36187  FOR X IN p_cal_req_ldets_tbl.FIRST .. p_cal_req_ldets_tbl.LAST
36188  LOOP
36189   Y := Y + 1;
36190   G_ADJUSTMENT_AMOUNT_TBL_D(Y) := p_cal_req_ldets_tbl(X).adjustment_amount;
36191   G_BENEFIT_QUANTITY_TBL_D(Y) := p_cal_req_ldets_tbl(X).benefit_qty;
36192   G_OPERAND_VALUE_TBL_D(Y) := p_cal_req_ldets_tbl(X).operand_value;
36193   G_OPR_CALC_CODE_TBL_D(Y) := p_cal_req_ldets_tbl(X).OPERAND_CALCULATION_CODE; -- bug#12916970
36194   -- 2388011_new
36195   /*
36196   --begin 2388011, grp_of_lines_pbh
36197   IF (p_cal_req_ldets_tbl(X).modifier_level_code = G_LINE_GROUP) THEN
36198    G_QUALIFIER_VALUE_TBL_D(Y) := p_cal_req_ldets_tbl(X).qualifier_value;
36199   ELSE
36200    G_QUALIFIER_VALUE_TBL_D(Y) := NULL; -- needed , do not remove this code
36201   END IF;
36202   -- end 2388011, grp_of_lines_pbh
36203   */
36204 
36205   G_LINE_DETAIL_INDEX_TBL_D(Y) := p_cal_req_ldets_tbl(X).line_detail_index;
36206  END LOOP;
36207 END IF;
36208 
36209 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36210 engine_debug ('In Line Update Information300');
36211 engine_debug ('Related Pl/sql table count : ' || p_cal_req_rltd_tbl.count);
36212 
36213 END IF;
36214  -- Load Related Lines Information
36215 IF (p_cal_req_rltd_tbl.COUNT > 0) THEN
36216  FOR X IN p_cal_req_rltd_tbl.FIRST .. p_cal_req_rltd_tbl.LAST
36217  LOOP
36218 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36219 engine_debug ('In Line Update Information3001');
36220 engine_debug ('Line Qty : ' || p_cal_req_rltd_tbl(X).line_qty);
36221 engine_debug ('Adjustment Amt : ' || p_cal_req_rltd_tbl(X).adjustment_amount);
36222 engine_debug ('Line Detail : ' || p_cal_req_rltd_tbl(X).child_line_detail_index);
36223 END IF;
36224   L := L+1;
36225   G_LINE_QUANTITY_TBL_R(L) := p_cal_req_rltd_tbl(X).line_qty;
36226   G_ADJUSTMENT_AMOUNT_TBL_R(L) := p_cal_req_rltd_tbl(X).adjustment_amount;
36227   G_LINE_DETAIL_INDEX_TBL_R(L) := p_cal_req_rltd_tbl(X).child_line_detail_index;
36228  END LOOP;
36229 END IF;
36230 
36231 --Need to change it when have more time. Using bulk binding features.
36232 --to imporve performance
36233 
36234 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36235 engine_debug ('In Line Update Information400');
36236  engine_debug('#7');
36237 END IF;
36238  --Bug# 1372485
36239  --Unit price can not be null at the very first phase
36240   IF (p_phase_sequence = G_PRICE_LIST_SEQUENCE
36241      AND  p_cal_req_line_rec.UNIT_PRICE IS NULL
36242      AND  I.line_type_code <> G_ORDER_LEVEL
36243 	AND  I.price_flag <> G_NO) THEN
36244 
36245 	-- begin shu, fix bug 2425027
36246    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36247  	 engine_debug ('percent price: '||p_cal_req_line_rec.PERCENT_PRICE);
36248  	 engine_debug ('related item price: '||p_cal_req_line_rec.RELATED_ITEM_PRICE);
36249    END IF;
36250 
36251  	 IF p_cal_req_line_rec.PERCENT_PRICE IS NOT NULL AND p_cal_req_line_rec.RELATED_ITEM_PRICE IS NULL THEN
36252  	 	l_message := ' No refernce of parent item or parent price is null for percent-based pricing.';
36253     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36254  	 	engine_debug ('line_index: '||i.line_index);
36255     END IF;
36256  	 	UPDATE qp_npreq_lines_tmp qplines
36257   		SET
36258          	PROCESSED_FLAG = G_PROCESSED,
36259          	PERCENT_PRICE = p_cal_req_line_rec.PERCENT_PRICE -- still keep the percent_price
36260   		WHERE qplines.LINE_INDEX = i.LINE_INDEX;
36261 
36262   		DELETE_LINES (i.LINE_INDEX,
36263                   		G_STATUS_INVALID_PRICE_LIST,
36264                   		l_message,
36265                                 l_status_code,
36266                                 l_status_text);
36267  	 ELSE
36268 	 -- end shu, fix bug 2425027
36269 
36270    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36271  		engine_debug('#8');
36272 
36273    END IF;
36274         	-- begin shulin bug 1605829 fix
36275 
36276  		OPEN get_request_prclst_name_cur(I.PRICE_LIST_HEADER_ID);
36277       		FETCH get_request_prclst_name_cur INTO l_request_price_list_name;
36278      		CLOSE get_request_prclst_name_cur;
36279 
36280 		OPEN get_request_inv_item_id_cur(I.LINE_INDEX);
36281       		FETCH get_request_inv_item_id_cur INTO l_request_item_id;
36282      		CLOSE get_request_inv_item_id_cur;
36283 
36284  		OPEN get_request_inv_item_name_cur(l_request_item_id);
36285       		FETCH get_request_inv_item_name_cur INTO l_request_item_name;
36286      		CLOSE get_request_inv_item_name_cur;
36287 
36288  		-- if item_name does not exist, then use inventory_id to display
36289  		IF l_request_item_name IS NULL AND l_request_item_id IS NOT NULL THEN
36290  			l_request_item_name := ' ID: ' || l_request_item_id;
36291  		END IF;
36292 
36293  		l_request_uom := I.LINE_UOM_CODE;
36294 
36295  		FND_MESSAGE.SET_NAME('QP','QP_PRC_NO_LIST_PRICE');
36296 		FND_MESSAGE.SET_TOKEN('ITEM',l_request_item_name);
36297 		FND_MESSAGE.SET_TOKEN('UNIT',l_request_uom);
36298 		FND_MESSAGE.SET_TOKEN('PRICE_LIST',l_request_price_list_name);
36299 
36300                 l_message := FND_MESSAGE.GET;
36301 
36302           IF (G_REQUEST_TYPE_CODE = 'PO' AND l_request_price_list_name IS NULL) THEN
36303        		SET_STATUS_CODE(NULL,
36304                        l_message,
36305                        I.LINE_INDEX,
36306                        NULL,
36307                       'LINES',
36308                       l_status_code,
36309                       l_status_text);
36310 
36311               ELSE
36312        		SET_STATUS_CODE(G_STATUS_INVALID_PRICE_LIST,
36313                        l_message,
36314                        I.LINE_INDEX,
36315                        NULL,
36316                       'LINES',
36317                       l_status_code,
36318                       l_status_text);
36319                  END IF;
36320 
36321        		SET_STATUS_CODE(G_STATUS_DELETED,
36322                        l_message,
36323                        I.LINE_INDEX,
36324                        NULL,
36325                       'ATTRS',
36326                       l_status_code,
36327                       l_status_text);
36328 
36329        		SET_STATUS_CODE(G_STATUS_DELETED,
36330                        l_message,
36331                        I.LINE_INDEX,
36332                        NULL,
36333                       'LDETS',
36334                       l_status_code,
36335                       l_status_text);
36336 
36337 	-- end shu bug 1605829 fix
36338 
36339 	END IF; -- end if p_cal_req_line_rec.PERCENT_PRICE IS NOT NULL, shu fix bug 2425027
36340   END IF;
36341 
36342 --Reset the values for next loop
36343  l_parent_line_quantity := NULL;
36344  l_parent_unit_price :=NULL; --2776849
36345  l_parent_line_unit_price :=NULL; -- 2776849
36346  l_parent_line_uom_code :=NULL;
36347  l_message := NULL; -- shu, fix bug 2425027
36348  p_cal_req_line_rec := l_cal_req_line_rec;
36349  p_cal_req_ldets_tbl.DELETE ;
36350  p_cal_req_rltd_tbl.DELETE;
36351  J := 1; -- For new request line
36352 
36353 <<E_LOOP>>
36354 null;
36355 END LOOP;  --end loop for I
36356 
36357 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36358 engine_debug ('In Line Update Information500');
36359 END IF;
36360  -- Update All the Line Information at 1 shot
36361 IF (G_LINE_INDEX_TBL_C.COUNT > 0 ) THEN
36362 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36363 engine_debug ('In Line Update Information');
36364 END IF;
36365  FORALL M IN G_LINE_INDEX_TBL_C.FIRST.. G_LINE_INDEX_TBL_C.LAST
36366   UPDATE qp_npreq_lines_tmp qplines
36367   SET    PRICING_STATUS_CODE = G_STATUS_UPDATED,
36368          PROCESSED_FLAG = G_PROCESSED,
36369          UNIT_PRICE = G_UNIT_PRICE_TBL_C(M),
36370          LINE_UNIT_PRICE = G_LINE_UNIT_PRICE_TBL_C(M), --shu_latest
36371 --         ORDER_UOM_SELLING_PRICE = G_ORDER_UOM_TBL_C(M), -- bug 2693700
36372          ORDER_UOM_SELLING_PRICE = l_unit_selling_price(M),         --[prarasto:Post Round]
36373          --ORDER_UOM_SELLING_PRICE_UR = l_unit_selling_price_ur(M),   --[prarasto:Post Round], [julin/postround] redesign
36374          PERCENT_PRICE = G_PERCENT_PRICE_TBL_C(M),
36375 --         ADJUSTED_UNIT_PRICE = NVL(G_ADJUSTED_UNIT_PRICE_TBL_C(M), G_UNIT_PRICE_TBL_C(M)),
36376          ADJUSTED_UNIT_PRICE = l_adjusted_unit_price(M),            --[prarasto:Post Round]
36377          --ADJUSTED_UNIT_PRICE_UR = l_adjusted_unit_price_ur(M),      --[prarasto:Post Round], [julin/postround] redesign
36378          PARENT_PRICE = G_PARENT_PRICE_TBL_C(M),
36379          --PARENT_QUANTITY = NVL(G_PARENT_PRICED_QUANTITY_TBL_C(M),G_PARENT_LINE_QUANTITY_TBL_C(M)),
36380          PARENT_QUANTITY = NVL(G_PARENT_LINE_QUANTITY_TBL_C(M), G_PARENT_PRICED_QUANTITY_TBL_C(M)), -- 2776849
36381          --PARENT_UOM_CODE = G_PARENT_LINE_UOM_TBL_C(M),
36382          PARENT_UOM_CODE = G_PARENT_LINE_UOM_TBL_C(M), -- 2776849
36383 --         EXTENDED_PRICE = G_EXTENDED_PRICE_TBL_C(M) -- block pricing
36384          EXTENDED_PRICE = l_extended_selling_price(M)               --[prarasto:Post Round]
36385          --EXTENDED_SELLING_PRICE_UR = l_extended_selling_price_ur(M)  --[prarasto:Post Round], [julin/postround] redesign
36386   WHERE qplines.LINE_INDEX = G_LINE_INDEX_TBL_C(M)
36387   AND (qplines.PRICE_FLAG <> G_NO or qplines.PROCESSED_CODE = G_BY_ENGINE) --CURRENT OF l_request_line_cur;
36388   -- shu, add following line to fix bug 2425027, so pricing_status_code IPL does not get changed to be UPDATED here
36389   AND (qplines.PRICING_STATUS_CODE <> G_STATUS_INVALID_PRICE_LIST
36390   OR  qplines.LIST_PRICE_OVERRIDE_FLAG IN ('Y', 'O'));  --po integration
36391 END IF;
36392 
36393 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36394 engine_debug ('In Line Update Information600');
36395 END IF;
36396 IF (p_is_direct_call = TRUE) THEN
36397  -- Update All the Line Details Information at 1 Shot for all Lines
36398  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36399  engine_debug ('In Line Detail Update Information1');
36400  END IF;
36401  IF (G_LINE_DETAIL_INDEX_TBL_D.COUNT > 0) THEN
36402   FORALL O IN G_LINE_DETAIL_INDEX_TBL_D.FIRST .. G_LINE_DETAIL_INDEX_TBL_D.LAST
36403    UPDATE qp_npreq_ldets_tmp
36404    SET ADJUSTMENT_AMOUNT = G_ADJUSTMENT_AMOUNT_TBL_D(O),
36405       --LINE_QUANTITY     = G_QUALIFIER_VALUE_TBL_D(O),-- 2388011, ASK RAVI, either priced_quantity,group_quantity,group_amount
36406       BENEFIT_QTY       = G_BENEFIT_QUANTITY_TBL_D(O),
36407       OPERAND_VALUE     = G_OPERAND_VALUE_TBL_D(O) --2388011_new, remove comma
36408       -- GROUP_QUANTITY    = G_QUALIFIER_VALUE_TBL_D(O), --2388011_new
36409       -- GROUP_AMOUNT      = G_QUALIFIER_VALUE_TBL_D(O)  --2388011_new
36410       ,OPERAND_CALCULATION_CODE = G_OPR_CALC_CODE_TBL_D(O) --bug#12916970
36411    WHERE LINE_DETAIL_INDEX =  G_LINE_DETAIL_INDEX_TBL_D(O);
36412  END IF;
36413 ELSE
36414 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36415 engine_debug ('In Line Detail Update Information2');
36416 END IF;
36417  -- Update All the Line Details Information at 1 Shot for all Lines
36418  IF (G_LINE_DETAIL_INDEX_TBL_D.COUNT > 0) THEN
36419   FORALL O IN G_LINE_DETAIL_INDEX_TBL_D.FIRST .. G_LINE_DETAIL_INDEX_TBL_D.LAST
36420    UPDATE /*+ index(QP_NPREQ_LDETS_TMP QP_PREQ_LDETS_TMP_U1) */  qp_npreq_ldets_tmp  --5658579
36421    SET ADJUSTMENT_AMOUNT = G_ADJUSTMENT_AMOUNT_TBL_D(O),
36422       --LINE_QUANTITY     = G_QUALIFIER_VALUE_TBL_D(O), -- 2388011, ASK RAVI, either priced_quantity,group_quantity,group_amount
36423       BENEFIT_QTY       = G_BENEFIT_QUANTITY_TBL_D(O),
36424       OPERAND_VALUE     = G_OPERAND_VALUE_TBL_D(O),
36425       --GROUP_QUANTITY    = G_QUALIFIER_VALUE_TBL_D(O), --2388011_new
36426       --GROUP_AMOUNT      = G_QUALIFIER_VALUE_TBL_D(O), --2388011_new
36427       APPLIED_FLAG      = AUTOMATIC_FLAG
36428       ,OPERAND_CALCULATION_CODE = G_OPR_CALC_CODE_TBL_D(O) -- bug#12916970
36429    WHERE LINE_DETAIL_INDEX =  G_LINE_DETAIL_INDEX_TBL_D(O);
36430  END IF;
36431 END IF;
36432 
36433 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36434 engine_debug ('In Line Detail Update Information3');
36435 END IF;
36436  -- Update All the Related Line Details Information at 1 Shot for all Lines
36437 IF (G_LINE_DETAIL_INDEX_TBL_R.COUNT > 0) THEN
36438  FORALL O IN G_LINE_DETAIL_INDEX_TBL_R.FIRST .. G_LINE_DETAIL_INDEX_TBL_R.LAST
36439   UPDATE qp_npreq_ldets_tmp
36440   SET ADJUSTMENT_AMOUNT = G_ADJUSTMENT_AMOUNT_TBL_R(O),
36441       LINE_QUANTITY     = G_LINE_QUANTITY_TBL_R(O)
36442   WHERE LINE_DETAIL_INDEX =  G_LINE_DETAIL_INDEX_TBL_R(O);
36443 END IF;
36444 
36445  -- Update all GSA Violations at 1 shot
36446  --INDX,QP_PREQ_GRP.call_calculation_engine.call_calculation_engine_upd6,qp_npreq_lines_tmp_N1,LINE_INDEX,1
36447 IF (G_GSA_LINE_INDEX_TBL_C.COUNT > 0) THEN
36448  FORALL K IN G_GSA_LINE_INDEX_TBL_C.FIRST .. G_GSA_LINE_INDEX_TBL_C.LAST
36449   UPDATE qp_npreq_lines_tmp
36450   SET PRICING_STATUS_CODE = G_STATUS_GSA_VIOLATION,
36451       PRICING_STATUS_TEXT = l_status_text
36452   WHERE LINE_INDEX = G_GSA_LINE_INDEX_TBL_C(K);
36453 END IF;
36454 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36455 engine_debug ('In End Update Information');
36456 
36457 END IF;
36458   -- Reset All tables
36459   G_UNIT_PRICE_TBL_C.delete;
36460   G_PERCENT_PRICE_TBL_C.delete;
36461   G_ADJUSTED_UNIT_PRICE_TBL_C.delete;
36462   G_PARENT_PRICE_TBL_C.delete;
36463   G_PARENT_PRICED_QUANTITY_TBL_C.delete;
36464   G_PARENT_LINE_QUANTITY_TBL_C.delete;
36465   G_PARENT_LINE_UOM_TBL_C.delete;
36466   G_LINE_INDEX_TBL_C.delete;
36467   G_GSA_LINE_INDEX_TBL_C.delete;
36468   G_EXTENDED_PRICE_TBL_C.delete; -- block pricing
36469 
36470   G_ADJUSTMENT_AMOUNT_TBL_D.delete;
36471   --G_LINE_QUANTITY_TBL_D.delete;
36472   G_BENEFIT_QUANTITY_TBL_D.delete;
36473   G_OPERAND_VALUE_TBL_D.delete;
36474   G_QUALIFIER_VALUE_TBL_D.delete;
36475   G_LINE_DETAIL_INDEX_TBL_D.delete;
36476 
36477   G_LINE_QUANTITY_TBL_R.delete;
36478   G_ADJUSTMENT_AMOUNT_TBL_R.delete;
36479   G_LINE_DETAIL_INDEX_TBL_R.delete;
36480 
36481 EXCEPTION
36482   WHEN E_CAL_ENGINE_ERROR THEN
36483     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36484     engine_debug(l_routine||' '||l_status_text);
36485     END IF;
36486      DELETE_LINES(l_err_line_index,
36487                   G_STATUS_OTHER_ERRORS,
36488                   'Error returned by QP_Calculate_Price_PUB.Calculate_Price',
36489                   l_status_code,
36490                   l_status_text);
36491   WHEN OTHERS THEN
36492     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36493     engine_debug('Exception in internal procedure CALL_CALCULATION_ENGINE ' || SQLERRM);
36494     END IF;
36495     x_status_code := FND_API.G_RET_STS_ERROR;
36496     x_status_text :=l_routine||' '||SQLERRM;
36497     null;
36498 END;
36499 
36500 /*+------------------------------------------------------------
36501   | FORMULA INTEGRATION
36502   +------------------------------------------------------------
36503 */
36504 
36505 PROCEDURE Formula_Processing(p_line_index       IN NUMBER,
36506                              p_pricing_phase_id IN NUMBER,
36507                              x_status_code      OUT NOCOPY VARCHAR2,
36508                              x_status_text      OUT NOCOPY VARCHAR2    ) AS
36509 
36510 /*
36511 INDX,QP_PREQ_GRP.formula_processing.l_get_formula_id_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
36512 INDX,QP_PREQ_GRP.formula_processing.l_get_formula_id_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
36513 INDX,QP_PREQ_GRP.formula_processing.l_get_formula_id_cur,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
36514 
36515 -- Full table scan on qp_npreq_lines_tmp
36516 */
36517   CURSOR l_get_formula_id_cur IS
36518 
36519   SELECT /*+ ORDERED USE_NL(b) index(b QP_PREQ_LDETS_TMP_N1) l_get_formula_id_cur */
36520          b.LINE_INDEX , b.PRICE_FORMULA_ID,a.PRICING_EFFECTIVE_DATE,b.CREATED_FROM_LIST_LINE_ID,
36521 	 b.OPERAND_CALCULATION_CODE , b.OPERAND_VALUE, b.CREATED_FROM_LIST_LINE_TYPE,b.LINE_DETAIL_TYPE_CODE,
36522          b.GROUP_QUANTITY,b.LINE_QUANTITY GROUP_AMOUNT
36523   FROM
36524          qp_npreq_lines_tmp a,
36525          qp_npreq_ldets_tmp b
36526   WHERE  a.LINE_INDEX = b.LINE_INDEX
36527   AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
36528   AND    b.PRICING_PHASE_ID = p_pricing_phase_id
36529   AND    b.PRICE_FORMULA_ID IS NOT NULL;
36530 
36531 CURSOR l_get_list_price_cur(p_line_index PLS_INTEGER) IS
36532   SELECT UNIT_PRICE
36533   FROM   qp_npreq_lines_tmp
36534   WHERE  LINE_INDEX = p_line_index;
36535 
36536   l_req_line_attrs_rec     QP_FORMULA_PRICE_CALC_PVT.req_line_attrs_rec;
36537   l_req_line_attrs_tbl     QP_FORMULA_PRICE_CALC_PVT.req_line_attrs_tbl;
36538   l_index                  NUMBER := 1;
36539   l_formula_based_price    NUMBER;
36540   l_list_line_id           NUMBER;
36541   l_return_status          VARCHAR2(240);
36542   E_FORMULA_CALL_ERROR     EXCEPTION;
36543   l_list_price             NUMBER;
36544   l_modifier_value         NUMBER;
36545   l_routine                VARCHAR2(240):='Routine:QP_PREQ_GRP.Formula_Processing';
36546   l_line_index             NUMBER;
36547   l_status_code            VARCHAR2(30);
36548   l_status_text            VARCHAR2(240);
36549   l_attr_inserted_flag       BOOLEAN := FALSE;
36550   l_group_amount             NUMBER;
36551 
36552 
36553   TYPE Num_Type IS TABLE OF Number INDEX BY BINARY_INTEGER;
36554   TYPE Char_Type IS TABLE OF Varchar2(30) INDEX BY BINARY_INTEGER;
36555 
36556   l_line_index_tbl           Num_Type;
36557   l_attribute_type_tbl       Char_Type;
36558   l_context_tbl              Char_Type;
36559   l_attribute_tbl            Char_Type;
36560   l_pricing_status_code_tbl  Char_Type;
36561   l_value_from_tbl           Num_Type;
36562   l_value_from               Number;
36563   l_msg_attribute            VARCHAR2(80);
36564   l_msg_context              VARCHAR2(240);
36565   l_rows  NATURAL := 5000;
36566 
36567   -- Bug 2772214
36568   l_pass_qualifiers varchar2(10) := FND_PROFILE.VALUE('QP_PASS_QUALIFIERS_TO_GET_CUSTOM');
36569 
36570   -- added for formula messages
36571   E_ATTRIBUTE_NON_NUMERIC EXCEPTION;
36572   CURSOR am_attr_cols_cur
36573   IS
36574     SELECT /*+ dynamic_sampling(1) */ line_index, attribute_type, context, attribute,
36575            pricing_status_code, qp_number.canonical_to_number(value_from)
36576     FROM   qp_npreq_line_attrs_tmp lattr
36577     WHERE  attribute_type IN ('PRICING', 'PRODUCT')
36578     AND    pricing_status_code = G_STATUS_UNCHANGED
36579     AND    EXISTS (SELECT format_type
36580                    FROM   fnd_flex_value_sets VSET,
36581                           qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
36582                    WHERE  vset.flex_value_set_id = segments.user_valueset_id
36583                    AND    segments.application_id = 661
36584                    AND    pcontexts.prc_context_type <> 'QUALIFIER'
36585                    AND    pcontexts.prc_context_code = lattr.context
36586                    AND    segments.segment_mapping_column = lattr.attribute
36587                    AND    segments.prc_context_id = pcontexts.prc_context_id
36588                    AND    vset.format_type = 'N');
36589 
36590     -- Bug 2772214, To pass Qualifiers to get_custom_price
36591 
36592    CURSOR am_attr_qual_cols_cur
36593    IS
36594     SELECT line_index, attribute_type, context, attribute,
36595            pricing_status_code, qp_number.canonical_to_number(value_from)
36596     FROM   qp_npreq_line_attrs_tmp lattr
36597     WHERE  attribute_type IN ('PRICING', 'PRODUCT', 'QUALIFIER')
36598     AND    pricing_status_code = G_STATUS_UNCHANGED
36599     AND    EXISTS (SELECT format_type
36600                    FROM   fnd_flex_value_sets VSET,
36601                           qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
36602                    WHERE  vset.flex_value_set_id = segments.user_valueset_id
36603                    AND    segments.application_id = 661
36604                    AND    pcontexts.prc_context_code = lattr.context
36605                    AND    segments.segment_mapping_column = lattr.attribute
36606                    AND    segments.prc_context_id = pcontexts.prc_context_id
36607                    AND    vset.format_type = 'N');
36608 
36609 -- added for formula error messages
36610  CURSOR am_attr_qual_msg_cur
36611  IS
36612  SELECT  lattr.value_from,lattr.context,
36613          nvl(SEGMENTS_TL.SEEDED_SEGMENT_NAME,SEGMENTS_TL.USER_SEGMENT_NAME) attribute
36614  FROM    qp_npreq_line_attrs_tmp lattr, fnd_flex_value_sets VSET,
36615          qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS , qp_segments_tl SEGMENTS_TL
36616  WHERE   attribute_type IN ('PRICING', 'PRODUCT', 'QUALIFIER')
36617                    AND    pricing_status_code = G_STATUS_UNCHANGED
36618                    AND    vset.flex_value_set_id = segments.user_valueset_id
36619                    AND    segments.application_id = 661
36620                    AND    pcontexts.prc_context_code = lattr.context
36621                    AND    segments.segment_mapping_column = lattr.attribute
36622                    AND    segments.prc_context_id = pcontexts.prc_context_id
36623                    AND    segments.segment_id = segments_tl.segment_id
36624                    AND    vset.format_type = 'N';
36625 
36626 
36627   CURSOR attr_cols_cur
36628   IS
36629     SELECT line_index, attribute_type, context, attribute,
36630            pricing_status_code, qp_number.canonical_to_number(value_from)
36631     FROM   qp_npreq_line_attrs_tmp lattr
36632     WHERE  attribute_type IN ('PRICING', 'PRODUCT')
36633     AND    pricing_status_code = G_STATUS_UNCHANGED
36634     AND    EXISTS (SELECT format_type
36635                    FROM fnd_flex_value_sets VSET,
36636                         fnd_descr_flex_column_usages DFLEX
36637                    WHERE vset.flex_value_set_id = dflex.flex_value_set_id
36638 	           AND dflex.application_id = 661
36639                    AND dflex.descriptive_flexfield_name =
36640                                        'QP_ATTR_DEFNS_PRICING'
36641                    AND dflex.descriptive_flex_context_code = lattr.context
36642                    AND dflex.application_column_name = lattr.attribute
36643 	           AND vset.format_type = 'N');
36644 
36645   BEGIN
36646    x_status_code := FND_API.G_RET_STS_SUCCESS;
36647    qp_debug_util.tstart('FORMULA_PROCESSING','Processing Formulas');
36648    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
36649    engine_debug('In ---'||l_routine||'---');
36650    engine_debug('PRICING_PHASE_ID: '||p_pricing_phase_id);
36651 
36652    END IF;
36653    FOR i IN l_get_formula_id_cur
36654    LOOP
36655            l_line_index := i.line_index;
36656 
36657            -- performance related change. Populate the temp table
36658            --qp_preq_line_attrs_formula_tmp with relevant records from
36659            --qp_npreq_line_attrs_tmp with
36660            IF l_get_formula_id_cur%ROWCOUNT = 1 THEN
36661 
36662             IF G_INSERT_INTO_FORMULA_TMP
36663             THEN
36664 
36665              --Delete already existing rows from formula tmp table
36666              DELETE FROM qp_preq_line_attrs_formula_tmp;
36667 
36668              --Insert request line attrs with datatype = 'N'
36669 	     IF G_AM_INSTALLED_PROFILE = G_YES THEN
36670                If nvl(l_pass_qualifiers, 'N') = 'N' Then /* Bug 2772214 */
36671                OPEN am_attr_cols_cur;
36672                LOOP
36673                  l_line_index_tbl.delete;
36674                  l_attribute_type_tbl.delete;
36675                  l_context_tbl.delete;
36676                  l_attribute_tbl.delete;
36677                  l_pricing_status_code_tbl.delete;
36678                  l_value_from_tbl.delete;
36679 
36680                  FETCH am_attr_cols_cur BULK COLLECT INTO
36681                         l_line_index_tbl, l_attribute_type_tbl, l_context_tbl,
36682                         l_attribute_tbl, l_pricing_status_code_tbl,
36683                         l_value_from_tbl LIMIT l_rows;
36684 
36685                  EXIT WHEN l_line_index_tbl.COUNT = 0;
36686 
36687                  --Change flexible mask to mask below for formula pattern use.
36688                  qp_number.canonical_mask :=
36689               '00999999999999999999999.99999999999999999999999999999999999999';
36690                  FORALL i IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
36691                    INSERT INTO qp_preq_line_attrs_formula_tmp
36692                    ( line_index,
36693                      attribute_type,
36694                      context,
36695                      attribute,
36696                      pricing_status_code,
36697                      value_from
36698                    )
36699                    VALUES
36700                    ( l_line_index_tbl(i),
36701                      l_attribute_type_tbl(i),
36702                      l_context_tbl(i),
36703                      l_attribute_tbl(i),
36704                      l_pricing_status_code_tbl(i),
36705                      qp_number.number_to_canonical(l_value_from_tbl(i))
36706                    );
36707 
36708                  --Change mask back to flexible mask.
36709                  qp_number.canonical_mask :=
36710               'FM999999999999999999999.9999999999999999999999999999999999999999';
36711 
36712                END LOOP; --Loop for bulk fetch
36713 
36714                CLOSE am_attr_cols_cur;
36715              Else
36716            BEGIN
36717                OPEN am_attr_qual_cols_cur;
36718                LOOP
36719                  l_line_index_tbl.delete;
36720                  l_attribute_type_tbl.delete;
36721                  l_context_tbl.delete;
36722                  l_attribute_tbl.delete;
36723                  l_pricing_status_code_tbl.delete;
36724                  l_value_from_tbl.delete;
36725                  FETCH am_attr_qual_cols_cur  BULK COLLECT INTO
36726                         l_line_index_tbl, l_attribute_type_tbl, l_context_tbl,
36727                         l_attribute_tbl, l_pricing_status_code_tbl,
36728                         l_value_from_tbl LIMIT l_rows;
36729 
36730                  EXIT WHEN l_line_index_tbl.COUNT = 0;
36731                --Change flexible mask to mask below for formula pattern use.
36732                  qp_number.canonical_mask :=
36733               '00999999999999999999999.99999999999999999999999999999999999999';
36734                  FORALL i IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
36735                    INSERT INTO qp_preq_line_attrs_formula_tmp
36736                    ( line_index,
36737                      attribute_type,
36738                      context,
36739                      attribute,
36740                      pricing_status_code,
36741                      value_from
36742                    )
36743                    VALUES
36744                    ( l_line_index_tbl(i),
36745                      l_attribute_type_tbl(i),
36746                      l_context_tbl(i),
36747                      l_attribute_tbl(i),
36748                      l_pricing_status_code_tbl(i),
36749                      qp_number.number_to_canonical(l_value_from_tbl(i))
36750                    );
36751               qp_number.canonical_mask :=
36752               'FM999999999999999999999.9999999999999999999999999999999999999999';
36753 
36754                END LOOP; --Loop for bulk fetch
36755                CLOSE  am_attr_qual_cols_cur;
36756            EXCEPTION
36757            WHEN OTHERS THEN
36758                BEGIN
36759                  fnd_message.set_name('QP','QP_PRICING_ATTR_NON_NUMERIC');
36760                  FOR l_rec IN am_attr_qual_msg_cur
36761                  LOOP
36762                          l_msg_context   := l_rec.context;
36763                          l_msg_attribute := l_rec.attribute;
36764                          l_value_from := qp_number.canonical_to_number(l_rec.value_from);
36765                  END LOOP;
36766                EXCEPTION
36767                WHEN OTHERS THEN
36768                     fnd_message.set_token('CONTEXT',l_msg_context);
36769                     fnd_message.set_token('ATTRIBUTE',l_msg_attribute);
36770                END;
36771 
36772                RAISE  E_ATTRIBUTE_NON_NUMERIC;
36773            END;
36774 
36775              End If;
36776 
36777                  --Change flexible mask to mask below for formula pattern use.
36778                  qp_number.canonical_mask :=
36779               '00999999999999999999999.99999999999999999999999999999999999999';
36780 
36781              -- Bug 2772214 l_pass_qualifiers condition in where clause
36782              --Insert request line attrs with datatype 'X', 'Y', 'C' or null
36783                INSERT INTO qp_preq_line_attrs_formula_tmp
36784                ( line_index,
36785                  attribute_type,
36786                  context,
36787                  attribute,
36788                  pricing_status_code,
36789                  value_from
36790                )
36791                SELECT /*+ dynamic_sampling(1) */ line_index,
36792                       attribute_type,
36793                       context,
36794                       attribute,
36795                       pricing_status_code,
36796                       value_from
36797                FROM   qp_npreq_line_attrs_tmp lattr
36798                WHERE
36799                       ((nvl(l_pass_qualifiers, 'N') = 'Y'
36800                       AND attribute_type IN ('QUALIFIER'))
36801                      OR attribute_type IN ('PRICING', 'PRODUCT')) -- Changed for bug2806857
36802                AND    pricing_status_code = G_STATUS_UNCHANGED
36803 	       AND    NOT EXISTS (
36804                    SELECT format_type
36805                    FROM fnd_flex_value_sets VSET,
36806                         qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
36807                    WHERE vset.flex_value_set_id = segments.user_valueset_id
36808                    AND segments.application_id = 661
36809                    AND pcontexts.prc_context_type = decode(lattr.attribute_type,'PRICING','PRICING_ATTRIBUTE',
36810                        lattr.attribute_type) -- Changed for bug2806857
36811                    AND pcontexts.prc_context_code = lattr.context
36812                    AND segments.segment_mapping_column = lattr.attribute
36813                    AND segments.prc_context_id = pcontexts.prc_context_id
36814                    AND vset.format_type = 'N'); --by yangli 03/06/2002 9:30am
36815 
36816                  --Change mask back to flexible mask.
36817                  qp_number.canonical_mask :=
36818               'FM999999999999999999999.9999999999999999999999999999999999999999';
36819 
36820 	     ELSE --If AM not installed
36821 
36822                OPEN attr_cols_cur;
36823                LOOP
36824                  l_line_index_tbl.delete;
36825                  l_attribute_type_tbl.delete;
36826                  l_context_tbl.delete;
36827                  l_attribute_tbl.delete;
36828                  l_pricing_status_code_tbl.delete;
36829                  l_value_from_tbl.delete;
36830 
36831                  FETCH attr_cols_cur BULK COLLECT INTO
36832                         l_line_index_tbl, l_attribute_type_tbl, l_context_tbl,
36833                         l_attribute_tbl, l_pricing_status_code_tbl,
36834                         l_value_from_tbl LIMIT l_rows;
36835 
36836                  EXIT WHEN l_line_index_tbl.COUNT = 0;
36837 
36838                  --Change flexible mask to mask below for formula pattern use.
36839                  qp_number.canonical_mask :=
36840               '00999999999999999999999.99999999999999999999999999999999999999';
36841 
36842                  FORALL i IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
36843                    INSERT INTO qp_preq_line_attrs_formula_tmp
36844                    ( line_index,
36845                      attribute_type,
36846                      context,
36847                      attribute,
36848                      pricing_status_code,
36849                      value_from
36850                    )
36851                    VALUES
36852                    ( l_line_index_tbl(i),
36853                      l_attribute_type_tbl(i),
36854                      l_context_tbl(i),
36855                      l_attribute_tbl(i),
36856                      l_pricing_status_code_tbl(i),
36857                      qp_number.number_to_canonical(l_value_from_tbl(i))
36858                    );
36859 
36860                  --Change mask back to flexible mask.
36861                  qp_number.canonical_mask :=
36862               'FM999999999999999999999.9999999999999999999999999999999999999999';
36863 
36864                END LOOP; --Loop for bulk fetch
36865 
36866                CLOSE attr_cols_cur;
36867 
36868                  --Change flexible mask to mask below for formula pattern use.
36869                  qp_number.canonical_mask :=
36870               '00999999999999999999999.99999999999999999999999999999999999999';
36871 
36872                --Insert request line attrs with datatype 'X', 'Y', 'C' or null
36873                INSERT INTO qp_preq_line_attrs_formula_tmp
36874                ( line_index,
36875                  attribute_type,
36876                  context,
36877                  attribute,
36878                  pricing_status_code,
36879                  value_from
36880                )
36881                SELECT line_index,
36882                       attribute_type,
36883                       context,
36884                       attribute,
36885                       pricing_status_code,
36886                       value_from
36887                FROM   qp_npreq_line_attrs_tmp lattr
36888                WHERE  attribute_type IN ('PRICING', 'PRODUCT')
36889                AND    pricing_status_code = G_STATUS_UNCHANGED
36890 	       AND    NOT EXISTS (
36891                    SELECT format_type
36892                    FROM fnd_flex_value_sets VSET,
36893                         fnd_descr_flex_column_usages DFLEX
36894                    WHERE vset.flex_value_set_id = dflex.flex_value_set_id
36895 	           AND dflex.application_id = 661
36896                    AND dflex.descriptive_flexfield_name =
36897                                 'QP_ATTR_DEFNS_PRICING'
36898                    AND dflex.descriptive_flex_context_code = lattr.context
36899                    AND dflex.application_column_name = lattr.attribute
36900 	           AND vset.format_type = 'N');
36901 
36902                  --Change mask back to flexible mask.
36903                  qp_number.canonical_mask :=
36904               'FM999999999999999999999.9999999999999999999999999999999999999999';
36905 
36906 	     END IF; -- if G_AM_INSTALLED_PROFILE is true
36907 
36908              --Reset Global Flag
36909              G_INSERT_INTO_FORMULA_TMP := FALSE;
36910              --G_INSERT_INTO_FORMULA_TMP := 'N';
36911 
36912             END IF; --If G_INSERT_INTO_FORMULA_TMP is true
36913 
36914            END IF; --If cur%rowcount is 1
36915 
36916            -- FTE
36917 
36918             -- Delete for every modifier
36919             IF(l_attr_inserted_flag = TRUE) THEN
36920              DELETE FROM qp_preq_line_attrs_formula_tmp
36921              WHERE line_index = i.line_index
36922              AND   context = 'VOLUME'
36923              AND   attribute IN ('PRICING_ATTRIBUTE4','PRICING_ATTRIBUTE5')
36924              AND   pricing_status_code = G_STATUS_UNCHANGED;
36925             END IF;
36926 
36927             l_attr_inserted_flag := FALSE;
36928 
36929             IF (i.group_quantity IS NOT NULL and l_attr_inserted_flag = FALSE) THEN
36930 
36931 
36932                   --Change flexible mask to mask below for formula pattern use.
36933                   qp_number.canonical_mask :=
36934                '00999999999999999999999.99999999999999999999999999999999999999';
36935                     INSERT INTO qp_preq_line_attrs_formula_tmp
36936                     ( line_index,
36937                       attribute_type,
36938                       context,
36939                       attribute,
36940                       pricing_status_code,
36941                       value_from
36942                     )
36943                     VALUES
36944                     ( i.line_index,
36945                       G_PRICING_TYPE,
36946                       'VOLUME',
36947                       'PRICING_ATTRIBUTE4',
36948                       G_STATUS_UNCHANGED,
36949                       qp_number.number_to_canonical(i.group_quantity)
36950                     );
36951 
36952                   --Change mask back to flexible mask.
36953                   qp_number.canonical_mask :=
36954                'FM999999999999999999999.9999999999999999999999999999999999999999';
36955 
36956                 l_attr_inserted_flag := TRUE;
36957 
36958             END IF;
36959 
36960             IF (i.group_amount IS NOT NULL and l_attr_inserted_flag = FALSE) THEN
36961 
36962                   --Change flexible mask to mask below for formula pattern use.
36963                   qp_number.canonical_mask :=
36964                '00999999999999999999999.99999999999999999999999999999999999999';
36965                     INSERT INTO qp_preq_line_attrs_formula_tmp
36966                     ( line_index,
36967                       attribute_type,
36968                       context,
36969                       attribute,
36970                       pricing_status_code,
36971                       value_from
36972                     )
36973                     VALUES
36974                     ( i.line_index,
36975                       G_PRICING_TYPE,
36976                       'VOLUME',
36977                       'PRICING_ATTRIBUTE5',
36978                       G_STATUS_UNCHANGED,
36979                       qp_number.number_to_canonical(i.group_amount)
36980                     );
36981 
36982                   --Change mask back to flexible mask.
36983                   qp_number.canonical_mask :=
36984                'FM999999999999999999999.9999999999999999999999999999999999999999';
36985 
36986                 l_attr_inserted_flag := TRUE;
36987 
36988             END IF;
36989 
36990            -- FTE
36991 
36992 	  --FOR K IN l_get_line_attrs_cur
36993 	  --LOOP
36994 --Commenting the population of plsql table l_req_line_attrs_rec.
36995 -- Change.
36996 /*
36997 	    l_req_line_attrs_rec.line_index := i.LINE_INDEX;
36998 	    l_req_line_attrs_rec.attribute_type := i.ATTRIBUTE_TYPE;
36999 	    l_req_line_attrs_rec.context := i.CONTEXT;
37000 	    l_req_line_attrs_rec.attribute := i.ATTRIBUTE;
37001 	    l_req_line_attrs_rec.value := i.VALUE_FROM;
37002 	    l_req_line_attrs_tbl(1) := l_req_line_attrs_rec;
37003 	    l_index := l_index + 1;
37004 */
37005 	  --END LOOP;
37006 
37007           l_list_price := NULL;
37008 
37009           IF(p_pricing_phase_id = G_PRICE_LIST_PHASE_ID AND i.operand_calculation_code = 'UNIT_PRICE') THEN
37010              l_list_price := I.operand_value;
37011              l_modifier_value := NULL;
37012           ELSE
37013             OPEN  l_get_list_price_cur(I.line_index);
37014             FETCH l_get_list_price_cur INTO l_list_price;
37015             CLOSE l_get_list_price_cur;
37016             l_modifier_value := I.operand_value; -- This value needs to be passed eventually
37017           END IF;
37018 
37019           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37020           engine_debug('Processing Formula ID :'||i.PRICE_FORMULA_ID);
37021           engine_debug('Line Index: '||i.line_index);
37022 
37023           END IF;
37024           --Commented parameter l_req_line_attrs_tbl and
37025           --added parameters l_line_index and i.created_from_list_line_type.
37026           -- Change.
37027 	   l_formula_based_price :=
37028               QP_FORMULA_PRICE_CALC_PVT.Calculate(i.PRICE_FORMULA_ID,
37029                                                  l_list_price,
37030                      				 i.PRICING_EFFECTIVE_DATE,
37031                      				 --l_req_line_attrs_tbl,
37032                                                  l_line_index,
37033                                                  i.CREATED_FROM_LIST_LINE_TYPE,
37034                      				 l_return_status,
37035                                                  l_modifier_value);
37036 
37037           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37038           engine_debug('Formula return status: '||l_return_status);
37039           engine_debug ('Formula Base Price : '|| l_formula_based_price);
37040 
37041           END IF;
37042        IF l_return_status IS NULL THEN
37043           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37044           engine_debug('Formula return status is NULL');
37045           engine_debug('FND_API.G_RET_STS_ERROR: '|| FND_API.G_RET_STS_ERROR);
37046           END IF;
37047           null;
37048        END IF;
37049 
37050        IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
37051            -- OR l_formula_based_price IS NOT NULL) THEN
37052 	   IF (i.OPERAND_CALCULATION_CODE in ('UNIT_PRICE','LIST_PRICE')) THEN
37053 /*
37054 INDX,QP_PREQ_GRP.formula_processing.upd1,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
37055 INDX,QP_PREQ_GRP.formula_processing.upd1,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
37056 INDX,QP_PREQ_GRP.formula_processing.upd1,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
37057 */
37058 	    UPDATE qp_npreq_ldets_tmp --upd1
37059 	    SET    OPERAND_VALUE = l_formula_based_price
37060 	    WHERE  CREATED_FROM_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID
37061 	    AND    PRICING_PHASE_ID = p_pricing_phase_id
37062 	    AND    LINE_INDEX = i.line_index
37063 	    AND    PRICING_STATUS_CODE = G_STATUS_NEW;
37064 
37065 /*
37066 INDX,QP_PREQ_GRP.formula_processing.formula_processing_upd2.qp_npreq_lines_tmp_N1,LINE_INDEX,1
37067 */
37068 	    UPDATE qp_npreq_lines_tmp --upd2
37069 	    SET    UNIT_PRICE = l_formula_based_price,
37070                    PRICING_STATUS_CODE = G_STATUS_UPDATED,
37071                    PRICING_STATUS_TEXT ='Priced by formula'
37072 	    WHERE  LINE_INDEX = i.line_index;
37073 	   ELSIF (i.OPERAND_CALCULATION_CODE = 'PERCENT_PRICE') THEN
37074 /*
37075 INDX,QP_PREQ_GRP.formula_processing.upd3,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
37076 INDX,QP_PREQ_GRP.formula_processing.upd3,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
37077 INDX,QP_PREQ_GRP.formula_processing.upd3,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
37078 */
37079 	    UPDATE qp_npreq_ldets_tmp --upd3
37080 	    SET    OPERAND_VALUE = l_formula_based_price
37081 	    WHERE  CREATED_FROM_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID
37082 	    AND    PRICING_PHASE_ID = p_pricing_phase_id
37083 	    AND    LINE_INDEX = i.line_index
37084 	    AND    PRICING_STATUS_CODE = G_STATUS_NEW;
37085 
37086 /*
37087 INDX,QP_PREQ_GRP.formula_processing.formula_processing_upd4.qp_npreq_lines_tmp_N1,LINE_INDEX,1
37088 */
37089 	    UPDATE qp_npreq_lines_tmp --upd4
37090 	    SET    PERCENT_PRICE = l_formula_based_price,
37091                    PRICING_STATUS_CODE = G_STATUS_UPDATED,
37092                    PRICING_STATUS_TEXT ='Priced by formula'
37093 	    WHERE  LINE_INDEX = i.line_index;
37094         ELSE  -- BLOCK_PRICE, % , AMT , NEWPRICE
37095 /*
37096 INDX,QP_PREQ_GRP.formula_processing.upd5,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
37097 INDX,QP_PREQ_GRP.formula_processing.upd5,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
37098 INDX,QP_PREQ_GRP.formula_processing.upd5,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
37099 */
37100          UPDATE qp_npreq_ldets_tmp --upd5
37101 	    SET    OPERAND_VALUE = l_formula_based_price
37102 	    WHERE  CREATED_FROM_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID
37103 	    AND    PRICING_PHASE_ID = p_pricing_phase_id
37104 	    AND    LINE_INDEX = i.line_index
37105          AND    PRICING_STATUS_CODE = G_STATUS_NEW;
37106 
37107          -- Update the operand on the related lines also
37108          IF (i.LINE_DETAIL_TYPE_CODE = G_CHILD_DETAIL_TYPE) THEN
37109 
37110             UPDATE qp_npreq_rltd_lines_tmp
37111 	    SET    OPERAND = l_formula_based_price
37112 	    WHERE  RELATED_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID --bug#2875361
37113 	    AND    LINE_INDEX = i.line_index
37114             AND    PRICING_STATUS_CODE = G_STATUS_NEW
37115             AND    RELATIONSHIP_TYPE_CODE = G_PBH_LINE;
37116 
37117          END IF;
37118        END IF;
37119        ELSE
37120           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37121           engine_debug('Error returned by QP_FORMULA_PRICE_CALC_PVT.Calculate');
37122           END IF;
37123 
37124              -- Commented raise and added following for Bug 2722477
37125            G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
37126            DELETE_LINES(l_line_index,
37127                   G_STATUS_FORMULA_ERROR,
37128                   FND_MESSAGE.GET,
37129                   l_status_code,
37130                   l_status_text);
37131          -- RAISE E_Formula_Call_Error;
37132 	  null; -- Error in Formula Calculation
37133       END IF;
37134    END LOOP;
37135 
37136    qp_debug_util.tstop('FORMULA_PROCESSING');
37137 
37138 EXCEPTION
37139    WHEN E_ATTRIBUTE_NON_NUMERIC THEN
37140      G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
37141      DELETE_LINES(l_line_index,
37142                   G_STATUS_FORMULA_ERROR,
37143                   FND_MESSAGE.GET,
37144                   l_status_code,
37145                   l_status_text);
37146      x_status_code := FND_API.G_RET_STS_ERROR;
37147 
37148    WHEN E_Formula_Call_Error THEN
37149      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37150      engine_debug('In Formula Integration');
37151      engine_debug('Error returned by QP_FORMULA_PRICE_CALC_PVT.Calculate');
37152      END IF;
37153      G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
37154      --G_INSERT_INTO_FORMULA_TMP := 'N'; --Reset Global Flag ( Change)
37155      DELETE_LINES(l_line_index,
37156                   G_STATUS_FORMULA_ERROR,
37157                   FND_MESSAGE.GET,
37158                   l_status_code,
37159                   l_status_text);
37160    WHEN OTHERS THEN
37161      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37162      engine_debug('In Formula Integration');
37163      engine_debug(SQLERRM);
37164      END IF;
37165      G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
37166      --G_INSERT_INTO_FORMULA_TMP := 'N'; --Reset Global Flag ( Change)
37167      DELETE_LINES(l_line_index,
37168                   G_STATUS_FORMULA_ERROR,
37169                   FND_MESSAGE.GET,
37170                   l_status_code,
37171                   l_status_text);
37172      x_status_code := FND_API.G_RET_STS_ERROR;
37173      x_status_text := l_routine||' '|| ' Formula Not Found ';
37174 END Formula_Processing;
37175 
37176 /*+-----------------------------------------------------------
37177   |Procedure Truncate_temp_tables
37178   +-----------------------------------------------------------
37179 */
37180 PROCEDURE Truncate_Temp_tables (x_status_code OUT NOCOPY VARCHAR2,
37181                                 x_status_text OUT NOCOPY VARCHAR2)
37182 IS
37183 l_routine VARCHAR2(240):= 'Procedure Truncate_Temp_Tables';
37184 l_count	number;
37185 Begin
37186         x_status_code := FND_API.G_RET_STS_SUCCESS;
37187   --added by yangli for Java Engine project
37188   IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
37189     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37190      ENGINE_DEBUG('Truncate_Temp_tables: Java Engine not Installed ----------');
37191     END IF;
37192   --added by yangli for Java Engine project
37193 	--Delete from qp_npreq_lines_tmp;
37194 	--Delete from qp_npreq_line_attrs_tmp;
37195 	--Delete From qp_npreq_ldets_tmp;
37196 	--Delete From qp_npreq_rltd_lines_tmp;
37197         --Delete From QP_PREQ_QUAL_TMP;
37198         --Delete From qp_nformula_step_values_tmp;
37199         --Delete From QP_PREQ_LINE_ATTRS_FORMULA_TMP;
37200 
37201 
37202           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37203 	   select count(*) into l_count from qp_npreq_lines_tmp;
37204     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37205 	   engine_debug('qp_npreq_lines_tmp '||l_count);
37206     END IF;
37207 	   select count(*) into l_count from qp_npreq_line_attrs_tmp;
37208     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37209 	   engine_debug('qp_npreq_line_attrs_tmp '||l_count);
37210     END IF;
37211 	   select count(*) into l_count from qp_npreq_ldets_tmp;
37212     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37213 	   engine_debug('qp_npreq_ldets_tmp '||l_count);
37214     END IF;
37215           END IF;
37216     --added by yangli for Java Engine project
37217   ELSE
37218     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37219      ENGINE_DEBUG('Truncate_Temp_tables: Java Engine is Installed ----------');
37220     END IF;
37221 	--Delete from qp_int_lines;
37222 	--Delete from qp_int_line_attrs;
37223 	--Delete From qp_int_ldets;
37224 	--Delete From qp_int_rltd_lines;
37225         --Delete From qp_int_formula_step_values;
37226 
37227           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37228 	   select count(*) into l_count from qp_int_lines;
37229     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37230 	   engine_debug('qp_int_lines '||l_count);
37231     END IF;
37232 	   select count(*) into l_count from qp_int_line_attrs;
37233     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37234 	   engine_debug('qp_int_line_attrs '||l_count);
37235     END IF;
37236 	   select count(*) into l_count from qp_int_ldets;
37237     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37238 	   engine_debug('qp_int_ldets '||l_count);
37239     END IF;
37240           END IF;
37241 
37242   END IF;
37243 EXCEPTION
37244    WHEN OTHERS THEN
37245      x_status_code := FND_API.G_RET_STS_ERROR;
37246      x_status_text :=l_routine||' '||SQLERRM;
37247 End Truncate_Temp_tables;
37248 
37249 /*+------------------------------------------------------------
37250   |PROCEDURE Set_Order_Level_Rltd
37251   +------------------------------------------------------------
37252 The relationship between order level adjustments and request lines
37253 need to be returned back to the caller.
37254 Example: list 'a' is a order level adjustment with line_detail_index
37255 of 3. There are 3 request lines with 4,5,6 line index then
37256 the data in qp_npreq_rltd_lines_tmp should be:
37257 +---------------------------------------------------------------+
37258 | related_line_detail_index| line_index| Relation_ship_type_code|
37259 +--------------------------+-----------+------------------------+
37260 |    3                     |      4    | ORDER_TO_LINE          |
37261 |    3                     |      5    | ORDER_TO_LINE          |
37262 |    3                     |      6    | ORDER_TO_LINE          |
37263 +--------------------------+-----------+------------------------+
37264 */
37265 
37266 PROCEDURE Set_Order_Level_Rltd(p_freeze_override_flag IN VARCHAR2,
37267                               p_pricing_phase_id     IN NUMBER,
37268                               x_status_code          OUT NOCOPY VARCHAR2,
37269                               x_status_text          OUT NOCOPY VARCHAR2) AS
37270 
37271 /*
37272 INDX,QP_PREQ_GRP.set_order_level_rltd.l_line_index_cur,- No Index Used -,NA,NA
37273 */
37274 CURSOR l_line_index_cur(p_freeze_override_flag VARCHAR2) is
37275 SELECT line_index
37276 FROM   qp_npreq_lines_tmp
37277 WHERE pricing_status_code = G_STATUS_UPDATED
37278 AND (PRICE_FLAG = G_YES
37279      OR
37280      (PRICE_FLAG = G_PHASE
37281       AND
37282       p_freeze_override_flag = G_YES)
37283      );
37284 
37285 /*
37286 -- Can use N2 instead of N4
37287 INDX,QP_PREQ_GRP.set_order_level_rltd.l_line_detail_index_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
37288 INDX,QP_PREQ_GRP.set_order_level_rltd.l_line_detail_index_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
37289 */
37290 CURSOR l_line_detail_index_cur is
37291 SELECT line_detail_index
37292 FROM   qp_npreq_ldets_tmp
37293 WHERE  PRICING_STATUS_CODE = G_STATUS_NEW
37294 AND    PRICING_PHASE_ID    = p_pricing_phase_id
37295 AND    MODIFIER_LEVEL_CODE = G_ORDER_LEVEL;
37296 
37297 l_line_index_tbl        number_type;
37298 l_line_detail_index_tbl number_type;
37299 l_line_detail_index_tbl1 number_type;
37300 J NUMBER:=0;
37301 l_routine VARCHAR2(240):= 'QP_PREQ_GRP.Set_Order_Level_Rltd';
37302 BEGIN
37303   x_status_code := FND_API.G_RET_STS_SUCCESS;
37304 
37305   FOR I IN l_line_detail_index_cur LOOP
37306     J:=J+1;
37307     l_line_detail_index_tbl(J):=I.line_detail_index;
37308   END LOOP;
37309 
37310 
37311 IF J > 0 THEN  --do this only if there is order level modifier
37312 J:=0;
37313   FOR I IN l_line_index_cur(p_freeze_override_flag) LOOP
37314     FOR K in l_line_detail_index_tbl.FIRST..l_line_detail_index_tbl.LAST LOOP
37315       J:=J+1;
37316       l_line_detail_index_tbl1(J):=l_line_detail_index_tbl(K);
37317       l_line_index_tbl(J):= I.line_index;
37318     END LOOP;
37319   END LOOP;
37320 
37321 END IF;
37322 
37323 IF J > 0 THEN
37324   FORALL K IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
37325   INSERT INTO qp_npreq_rltd_lines_tmp
37326   (LINE_INDEX,RELATED_LINE_DETAIL_INDEX,RELATIONSHIP_TYPE_CODE,PRICING_STATUS_CODE)
37327   VALUES
37328   (l_line_index_tbl(K),l_line_detail_index_tbl1(K),G_ORDER_TO_LINE,G_STATUS_NEW);
37329 END IF;
37330 
37331 EXCEPTION
37332   WHEN OTHERS THEN
37333      x_status_code := FND_API.G_RET_STS_ERROR;
37334      x_status_text := SQLERRM;
37335      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37336      engine_debug(l_routine||' :'||SQLERRM);
37337      END IF;
37338 END;
37339 
37340 
37341 procedure Get_Price_List_Sequence(
37342                            x_status_code OUT NOCOPY VARCHAR2,
37343                            x_status_text OUT NOCOPY VARCHAR2)
37344 is
37345 l_routine VARCHAR2(30) := 'get_price_list_sequence';
37346 begin
37347 
37348   --Get the sequence for price list
37349 /*
37350 INDX,QP_PREQ_GRP.get_price_list_sequence.cur_get_price_list_sequence,- No Index Used -,NA,NA
37351 */
37352   SELECT PHASE_SEQUENCE,PRICING_PHASE_ID
37353   INTO   G_PRICE_LIST_SEQUENCE,G_PRICE_LIST_PHASE_ID
37354   FROM   QP_PRICING_PHASES
37355   WHERE  LIST_TYPE_CODE = 'PRL'
37356   AND    ROWNUM < 2;
37357 
37358   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37359   engine_debug('G_PRICE_LIST_SEQUENCE: '|| G_PRICE_LIST_SEQUENCE );
37360   END IF;
37361 EXCEPTION
37362   WHEN OTHERS THEN
37363    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
37364    engine_debug(l_routine||' '||SQLERRM);
37365    END IF;
37366    x_status_code := FND_API.G_RET_STS_ERROR;
37367    x_status_text := 'Error in '||l_routine||SQLERRM;
37368 end Get_Price_List_Sequence;
37369 
37370 /*+----------------------------------------------------------------------------------------------------
37371  *| PROCEDURE/FUNCTION TO INCLUDE TCA HIERARCHY STRUCTURE FOR QUALIFIER  ATTRIBUTE  ADDED for TCA
37372  *+----------------------------------------------------------------------------------------------------
37373  */
37374 
37375   PROCEDURE INSERT_QUALIFIER_HIERARCHY
37376 IS
37377 l_count number;
37378 BEGIN
37379 select count(*) into l_count from qp_npreq_line_attrs_tmp;
37380 
37381 engine_debug('count of attr before insert  '|| l_count);
37382 
37383    --[julin/4865213] tuned
37384    INSERT INTO qp_npreq_line_attrs_tmp
37385      (   LINE_INDEX
37386         ,LINE_DETAIL_INDEX
37387         ,ATTRIBUTE_LEVEL
37388         ,ATTRIBUTE_TYPE
37389         ,LIST_HEADER_ID
37390         ,LIST_LINE_ID
37391         ,CONTEXT
37392         ,ATTRIBUTE
37393         ,VALUE_FROM
37394         ,SETUP_VALUE_FROM
37395         ,VALUE_TO
37396         ,SETUP_VALUE_TO
37397         ,GROUPING_NUMBER
37398         ,NO_QUALIFIERS_IN_GRP
37399         ,COMPARISON_OPERATOR_TYPE_CODE
37400         ,VALIDATED_FLAG
37401         ,APPLIED_FLAG
37402         ,PRICING_STATUS_CODE
37403         ,PRICING_STATUS_TEXT
37404         ,QUALIFIER_PRECEDENCE
37405         ,PRICING_ATTR_FLAG
37406         ,QUALIFIER_TYPE
37407         ,DATATYPE
37408         ,PRODUCT_UOM_CODE
37409         ,PROCESSED_CODE
37410         ,EXCLUDER_FLAG
37411         ,GROUP_QUANTITY
37412         ,GROUP_AMOUNT
37413         ,DISTINCT_QUALIFIER_FLAG
37414         ,PRICING_PHASE_ID
37415         ,INCOMPATABILITY_GRP_CODE
37416         ,LINE_DETAIL_TYPE_CODE
37417         ,MODIFIER_LEVEL_CODE
37418         ,PRIMARY_UOM_FLAG
37419         ,REQUEST_ID
37420         ,DERIVED_QUALIFIER_FLAG)
37421         SELECT /*+ ORDERED use_nl(qpc qs hn) index(qnlat QP_PREQ_LINE_ATTRS_TMP_N2) */
37422          qnlat.LINE_INDEX
37423         ,qnlat.LINE_DETAIL_INDEX
37424         ,qnlat.ATTRIBUTE_LEVEL
37425         ,qnlat.ATTRIBUTE_TYPE
37426         ,qnlat.LIST_HEADER_ID
37427         ,qnlat.LIST_LINE_ID
37428         ,qnlat.CONTEXT
37429         ,qnlat.ATTRIBUTE
37430         ,to_char(hn.PARENT_ID)
37431         ,qnlat.SETUP_VALUE_FROM
37432         ,qnlat.VALUE_TO
37433         ,qnlat.SETUP_VALUE_TO
37434         ,qnlat.GROUPING_NUMBER
37435         ,qnlat.NO_QUALIFIERS_IN_GRP
37436         ,qnlat.COMPARISON_OPERATOR_TYPE_CODE
37437         ,qnlat.VALIDATED_FLAG
37438         ,qnlat.APPLIED_FLAG
37439         ,qnlat.PRICING_STATUS_CODE
37440         ,qnlat.PRICING_STATUS_TEXT
37441         ,qnlat.QUALIFIER_PRECEDENCE
37442         ,qnlat.PRICING_ATTR_FLAG
37443         ,qnlat.QUALIFIER_TYPE
37444         ,qnlat.DATATYPE
37445         ,qnlat.PRODUCT_UOM_CODE
37446         ,qnlat.PROCESSED_CODE
37447         ,qnlat.EXCLUDER_FLAG
37448         ,qnlat.GROUP_QUANTITY
37449         ,qnlat.GROUP_AMOUNT
37450         ,qnlat.DISTINCT_QUALIFIER_FLAG
37451         ,qnlat.PRICING_PHASE_ID
37452         ,qnlat.INCOMPATABILITY_GRP_CODE
37453         ,qnlat.LINE_DETAIL_TYPE_CODE
37454         ,qnlat.MODIFIER_LEVEL_CODE
37455         ,qnlat.PRIMARY_UOM_FLAG
37456         ,qnlat.REQUEST_ID
37457         ,'Y'
37458         FROM qp_npreq_line_attrs_tmp qnlat,
37459              qp_prc_contexts_b qpc,
37460              qp_segments_b qs,
37461              HZ_HIERARCHY_NODES hn
37462         WHERE qnlat.pricing_status_code = G_STATUS_UNCHANGED
37463           AND qnlat.attribute_type = G_QUALIFIER_TYPE
37464           AND qpc.PRC_CONTEXT_TYPE = 'QUALIFIER'
37465           AND qpc.PRC_CONTEXT_CODE = qnlat.CONTEXT
37466           AND qs.SEGMENT_MAPPING_COLUMN = qnlat.ATTRIBUTE
37467           AND qs.PRC_CONTEXT_ID = qpc.PRC_CONTEXT_ID
37468           AND qs.PARTY_HIERARCHY_ENABLED_FLAG = 'Y'
37469           AND nvl(qs.user_format_type, qs.seeded_format_type) = G_NUMERIC
37470           AND hn.CHILD_ID = to_number(qnlat.VALUE_FROM)
37471           AND hn.child_table_name = 'HZ_PARTIES'
37472           AND hn.HIERARCHY_TYPE = FND_PROFILE.VALUE('QP_PRICING_PARTY_HIERARCHY_TYPE')
37473           AND trunc(nvl(hn.EFFECTIVE_START_DATE,sysdate)) <= trunc(sysdate)
37474           AND trunc(nvl(hn.EFFECTIVE_END_DATE,sysdate)) >= trunc(sysdate)
37475           AND hn.LEVEL_NUMBER > 0;
37476 
37477 END INSERT_QUALIFIER_HIERARCHY;
37478 
37479 --Begin: pattern_engine for create_pattern - SMUHAMME
37480 PROCEDURE populate_segment_id(x_status_code OUT NOCOPY VARCHAR2, x_status_text OUT NOCOPY VARCHAR2)
37481 IS
37482 l_routine VARCHAR2(200) := 'QP_PREQ_GRP.populate_segment_id: ';
37483 l_debug VARCHAR2(3) := QP_PREQ_GRP.G_DEBUG_ENGINE;
37484 
37485 lower_limit NUMBER;
37486 upper_limit NUMBER;
37487 
37488 BEGIN
37489 QP_DEBUG_UTIL.tstart('populate_segment_id', 'populate_segment_id');
37490 
37491 
37492 IF l_debug = FND_API.G_TRUE
37493 THEN
37494 engine_debug(l_routine || ' Starts ----------------');
37495 END IF;
37496 
37497 x_status_code := FND_API.G_RET_STS_SUCCESS;
37498 x_status_text := 'Success';
37499 
37500 lower_limit := G_MIN_LINE_INDEX;
37501 
37502 WHILE lower_limit <= G_MAX_LINE_INDEX
37503 LOOP
37504 upper_limit := lower_limit + G_CHUNK_SIZE;
37505 UPDATE
37506 qp_npreq_line_attrs_tmp /*+ index(attr qp_preq_line_attrs_tmp_n9) */attr
37507 SET attr.segment_id = (
37508 SELECT qps.segment_id
37509 FROM qp_prc_contexts_b qpc
37510 , qp_segments_b qps
37511 , qp_pte_segments qpps
37512 WHERE attr.context = qpc.prc_context_code
37513 AND qpc.prc_context_id = qps.prc_context_id
37514 AND qps.segment_mapping_column = attr.attribute
37515 AND qps.segment_id = qpps.segment_id
37516 AND NVL(qpps.used_in_search, 'N') = 'Y'
37517 AND ROWNUM < 2
37518 )
37519 WHERE line_index BETWEEN lower_limit AND upper_limit;
37520 
37521 lower_limit := upper_limit + 1;
37522 END LOOP;
37523 
37524 
37525 
37526 
37527 /*UPDATE
37528 qp_npreq_line_attrs_tmp attr
37529 SET attr.segment_id = (
37530 SELECT qps.segment_id
37531 FROM qp_prc_contexts_b qpc
37532 , qp_segments_b qps
37533 , qp_pte_segments qpps
37534 WHERE attr.context = qpc.prc_context_code
37535 AND qpc.prc_context_id = qps.prc_context_id
37536 AND qps.segment_mapping_column = attr.attribute
37537 AND qps.segment_id = qpps.segment_id
37538 AND NVL(qpps.used_in_search, 'N') = 'Y'
37539 AND ROWNUM < 2
37540 ); */
37541 
37542 
37543 /*UPDATE qp_npreq_line_attrs_tmp
37544 SET mutlival_flag = 'M'
37545 WHERE (line_index, segment_id) IN (
37546 SELECT line_index, segment_id
37547 FROM qp_npreq_line_attrs_tmp
37548 WHERE segment_id IS NOT NULL
37549 GROUP BY line_index, segment_id
37550 HAVING count(segment_id) > 1
37551 );*/
37552 
37553 IF l_debug = FND_API.G_TRUE
37554 THEN
37555 engine_debug(l_routine || 'Updated segment_id of ' || SQL%ROWCOUNT || ' rows of qp_npreq_line_attrs_tmp');
37556 engine_debug(l_routine || 'Ends Succesfully ***********');
37557 END IF;
37558 
37559 QP_DEBUG_UTIL.tstop('populate_segment_id');
37560 EXCEPTION
37561 WHEN OTHERS
37562 THEN
37563 IF l_debug = FND_API.G_TRUE
37564 THEN
37565 engine_debug(l_routine || 'Exception - ' || SQLERRM);
37566 END IF;
37567 x_status_code := FND_API.G_RET_STS_ERROR;
37568 x_status_text := l_routine || SQLERRM;
37569 END populate_segment_id;
37570 
37571 --------------------------------------------------------------------------------
37572 
37573 PROCEDURE create_pattern(p_pricing_phase_id NUMBER, x_status_code OUT NOCOPY VARCHAR2, x_status_text OUT NOCOPY VARCHAR2)
37574 IS
37575  l_debug VARCHAR2(3) := G_DEBUG_ENGINE;
37576  l_routine VARCHAR2(300) := 'QP_PREQ_GRP.create_pattern ';
37577 
37578  upper_limit NUMBER;
37579  lower_limit NUMBER;
37580 
37581   BEGIN
37582  IF l_debug = FND_API.G_TRUE
37583  THEN
37584   engine_debug(l_routine || 'Starts ----');
37585  END IF;
37586 
37587  x_status_code := FND_API.G_RET_STS_SUCCESS;
37588  x_status_text := 'Success';
37589 
37590    QP_DEBUG_UTIL.tstart('create_pattern', 'create_pattern');
37591 
37592  QP_DEBUG_UTIL.tstart('insert_patrn_phases', 'insert_patrn_phases');
37593         INSERT INTO qp_npreq_patrn_phases_tmp(pattern_id, segment_id, pricing_phase_id, segment_index, segment_count)
37594  SELECT qp.pattern_id,
37595   qp.segment_id,
37596   p_pricing_phase_id,
37597   qp.segment_index,
37598   qp.segment_count
37599  FROM qp_patterns qp,
37600   qp_pattern_phases qpp
37601  WHERE qpp.pattern_id = qp.pattern_id
37602   AND qpp.pricing_phase_id = p_pricing_phase_id
37603   AND NVL(qpp.end_date_active,G_MIN_PRICING_DATE) >= G_MIN_PRICING_DATE
37604    AND NVL(qpp.start_date_active, G_MAX_PRICING_DATE) <= G_MAX_PRICING_DATE
37605   AND qpp.active_flag = 'Y'
37606   AND NOT EXISTS (
37607    SELECT pattern_id
37608    FROM qp_npreq_patrn_phases_tmp qp1
37609    WHERE qp.pattern_id = qp1.pattern_id
37610     AND ROWNUM < 2
37611  );
37612 
37613  QP_DEBUG_UTIL.tstop('insert_patrn_phases');
37614 
37615  IF l_debug = FND_API.G_TRUE
37616  THEN
37617   engine_debug(l_routine || 'inserted ' || SQL%ROWCOUNT || ' rows into qp_npreq_patrn_phases_tmp'
37618    || ' pricing_phase_id = ' || p_pricing_phase_id);
37619  END IF;
37620  qp_debug_util.tstart('insert_line_patrns', 'insert_line_patrns');
37621 
37622   lower_limit := G_MIN_LINE_INDEX;
37623 
37624   WHILE lower_limit <= G_MAX_LINE_INDEX
37625   LOOP
37626    upper_limit := lower_limit + G_CHUNK_SIZE;
37627 
37628   --change in index qp_preq_line_attrs_tmp_n9???
37629 
37630     INSERT INTO qp_npreq_line_patrns_tmp(line_index, pattern_id, hash_key)
37631     SELECT /*+ ORDERED index(attr qp_preq_line_attrs_tmp_n9) */
37632             attr.line_index,
37633      qpp.pattern_id,
37634      sys_connect_by_path(attr.value_from, '|') hash_key
37635     FROM (SELECT /*+ index(qpp1 qp_pattern_phases_n1) */ *
37636       FROM qp_npreq_patrn_phases_tmp qpp1
37637       WHERE qpp1.pricing_phase_id = p_pricing_phase_id) qpp,
37638       (SELECT *
37639        FROM qp_npreq_line_attrs_tmp
37640        WHERE line_index BETWEEN lower_limit AND upper_limit) attr
37641     WHERE attr.segment_id = qpp.segment_id
37642         AND attr.segment_id IS NOT NULL
37643         AND level = qpp.segment_count
37644       START WITH qpp.segment_index = 1
37645       CONNECT BY PRIOR qpp.segment_index = qpp.segment_index - 1
37646          AND PRIOR qpp.pattern_id = qpp.pattern_id
37647          AND PRIOR attr.line_index = attr.line_index;
37648 
37649    lower_limit := upper_limit + 1;
37650   END LOOP;
37651 /* ELSE
37652   INSERT INTO qp_npreq_line_patrns_tmp(line_index, pattern_id, hash_key)
37653    SELECT /*+ ORDERED index(attr qp_preq_line_attrs_tmp_n9) */
37654 /*           attr.line_index,
37655     qpp.pattern_id,
37656     sys_connect_by_path(attr.value_from, '|') hash_key
37657    FROM (SELECT /*+ index(qpp1 qp_pattern_phases_n1) */ --*
37658 /*     FROM qp_npreq_patrn_phases_tmp qpp1
37659      WHERE qpp1.pricing_phase_id = p_pricing_phase_id) qpp,
37660      qp_npreq_line_attrs_tmp attr
37661    WHERE attr.segment_id = qpp.segment_id
37662        AND attr.segment_id IS NOT NULL
37663       AND level = qpp.segment_count
37664      START WITH qpp.segment_index = 1
37665    CONNECT BY PRIOR qpp.segment_index = qpp.segment_index - 1
37666     AND PRIOR qpp.pattern_id = qpp.pattern_id
37667         AND PRIOR attr.line_index = attr.line_index;
37668 
37669         Dbms_Output.put_line('inserted = ' || SQL%ROWCOUNT);
37670  END IF;  */
37671 
37672  QP_DEBUG_UTIL.tstop('insert_line_patrns');
37673 
37674 
37675  /*IF l_debug = FND_API.G_TRUE
37676  THEN
37677   engine_debug(l_routine || 'inserted ' || SQL%ROWCOUNT || ' rows to qp_npreq_line_patrns_tmp'
37678    || ' pricing_phase_id = ' || p_pricing_phase_id);
37679  END IF; */
37680 
37681 qp_debug_util.tstart('def_patrns', 'Default Patterns');
37682 
37683  IF  NVL(G_PATRNS_TWO_THREE_INSERTED, 'N') = 'N'
37684  THEN
37685   IF l_debug = FND_API.G_TRUE
37686   THEN
37687    engine_debug(l_routine || 'inseting pattern_id -2 and -3');
37688   END IF;
37689 
37690   IF NVL(FND_PROFILE.VALUE(QP_PREQ_GRP.G_BLIND_DISCOUNT),'N') = 'Y'
37691   THEN
37692    INSERT INTO qp_npreq_line_patrns_tmp(line_index, pattern_id, hash_key)
37693     SELECT line_index, -2, 'BLIND'
37694     FROM qp_npreq_lines_tmp;
37695 
37696   END IF;
37697   INSERT INTO qp_npreq_line_patrns_tmp(line_index, pattern_id, hash_key)
37698    SELECT line_index, -3, 'BLIND'
37699    FROM qp_npreq_lines_tmp;
37700 
37701    INSERT INTO qp_npreq_line_patrns_tmp(line_index, pattern_id, hash_key)
37702    SELECT line_index, -1, 'NOEQUALS'
37703    FROM qp_npreq_lines_tmp;
37704 
37705   G_PATRNS_TWO_THREE_INSERTED :=  'Y';
37706 
37707  END IF;
37708 
37709 qp_debug_util.tstop('def_patrns');
37710 
37711  QP_DEBUG_UTIL.tstop('create_pattern');
37712 
37713  IF l_debug = FND_API.G_TRUE
37714  THEN
37715   engine_debug(l_routine || 'Ends---------');
37716  END IF;
37717   EXCEPTION
37718  WHEN OTHERS
37719  THEN
37720   x_status_code := FND_API.G_RET_STS_ERROR;
37721   x_status_text := l_routine || SQLERRM;
37722   IF l_debug = FND_API.G_TRUE
37723   THEN
37724    engine_debug(l_routine || 'Exception: ' || SQLERRM);
37725   END IF;
37726 END create_pattern;
37727 
37728 -------------------------------------------------------------------------
37729 
37730 --End: pattern_engine for create_pattern - SMUHAMME
37731 
37732 -- Start: KDURGASI changes for pattern based select modifiers
37733 PROCEDURE Select_modifiers_patrn(
37734 				p_pricing_phase_id IN NUMBER,
37735 				p_freeze_override_flag IN VARCHAR2,
37736 				p_search_path IN NUMBER,
37737 				x_status_code OUT nocopy VARCHAR2,
37738 				x_status_text OUT nocopy VARCHAR2) AS
37739 
37740 /* Header cache cursor*/
37741 
37742  CURSOR l_header_cache_cur(p_pricing_phase_id NUMBER) IS
37743 SELECT
37744  /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N1)
37745      index(qplines QP_PREQ_LINES_TMP_U1)
37746      index(qprs qp_pte_source_systems_u2)
37747      l_header_cache_cur */
37748  DISTINCT atrgrps.list_header_id,
37749   atrgrps.list_line_id list_line_id,
37750   qplines.line_index line_index,
37751   qppattmp.pattern_id matched_pattrn_id,
37752   p_pricing_phase_id,
37753   qppattmp.hash_key matched_hash_key,
37754   G_STAGE_CACHE_MOD_HDR stage,
37755   atrgrps.source_system_code,
37756   G_STATUS_UNCHANGED,
37757   atrgrps.header_quals_exist_flag,
37758   atrgrps.grouping_no,
37759   atrgrps.eq_flag,
37760   atrgrps.MODIFIER_LEVEL_CODE,
37761   atrgrps.other_oprt_count,
37762   atrgrps.null_other_oprt_count,
37763   atrgrps.LIST_TYPE_CODE,
37764   atrgrps.ASK_FOR_FLAG,
37765   atrgrps.HEADER_LIMIT_EXISTS,
37766   atrgrps.LINE_LIMIT_EXISTS,
37767   atrgrps.descendents_quals_exist
37768 FROM qp_list_header_phases qplhp,
37769   qp_secu_attr_groups_v atrgrps,
37770   --qp_attribute_groups atrgrps,
37771   qp_npreq_line_patrns_tmp qppattmp,
37772   qp_npreq_lines_tmp qplines,
37773   qp_pte_source_systems qprs
37774   --qp_price_req_sources_v qprs
37775 WHERE qplhp.pricing_phase_id = p_pricing_phase_id
37776 	AND atrgrps.list_header_id = qplhp.list_header_id
37777 	AND atrgrps.list_line_id = -1 -- Filter
37778 	AND atrgrps.pte_code = G_PTE_CODE
37779 	AND qppattmp.pattern_id = atrgrps.pattern_id -- Match
37780 	AND qppattmp.hash_key = atrgrps.hash_key -- Match
37781 	AND qppattmp.line_index = qplines.line_index --Join
37782 	AND atrgrps.list_type_code NOT IN('PRL',   'AGR') -- Filter
37783 	AND atrgrps.active_flag = 'Y' -- Filter
37784 	--AND atrgrps.source_system_code = qprs.source_system_code --join
37785 	--AND qprs.request_type_code = qp_preq_grp.g_request_type_code
37786         AND   qprs.APPLICATION_SHORT_NAME = atrgrps.source_system_code
37787         AND   qprs.pte_code = G_PTE_CODE
37788 	AND(qplines.price_flag = qp_preq_grp.g_yes
37789 		OR(qplines.price_flag = qp_preq_grp.g_phase
37790 			AND p_freeze_override_flag = qp_preq_grp.g_yes))
37791 	AND(	qplines.unit_price IS NOT NULL
37792 		OR qplines.usage_pricing_type = qp_preq_grp.g_authoring_type
37793 		OR qplines.line_type_code = qp_preq_grp.g_order_level) --AND qplines.line_type_code <> 'ORDER' -- needs to check
37794 	AND atrgrps.pricing_phase_id = -1
37795 	AND(	(atrgrps.currency_code IS NOT NULL
37796 			AND atrgrps.currency_code = qp_preq_grp.g_currency_code)
37797 		OR atrgrps.currency_code IS NULL)
37798 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
37799 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_h,   nvl(qplines.pricing_effective_date,  sysdate)))
37800 			AND TRUNC(nvl(atrgrps.end_date_active_h,   nvl(qplines.pricing_effective_date,   sysdate)))
37801 	AND TRUNC(nvl(qplines.start_date_active_first, sysdate))
37802 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_first,   nvl(qplines.start_date_active_first,  sysdate)))
37803 			AND TRUNC(nvl(atrgrps.end_date_active_first,   nvl(qplines.start_date_active_first,  sysdate)))
37804 	AND TRUNC(nvl(qplines.start_date_active_second, sysdate))
37805 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_second,   nvl(qplines.start_date_active_second, sysdate)))
37806 			AND TRUNC(nvl(atrgrps.end_date_active_second,   nvl(qplines.start_date_active_second, sysdate)))
37807 	AND nvl(qplines.active_date_first_type,   'X') = nvl(atrgrps.active_date_first_type,   nvl(qplines.active_date_first_type,   'X'))
37808 	AND nvl(qplines.active_date_second_type,   'X') = nvl(atrgrps.active_date_second_type,   nvl(qplines.active_date_second_type,   'X'))
37809 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
37810 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
37811 			AND TRUNC(nvl(atrgrps.end_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
37812 	AND((atrgrps.ask_for_flag = qp_preq_grp.g_yes
37813 			AND EXISTS
37814 				  (SELECT
37815 				   /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook/backport]
37816 				  FROM qp_npreq_line_attrs_tmp la -- will check whether this can be moved to shaneeds code
37817 				  WHERE attribute_type = G_QUALIFIER_TYPE
37818 				   AND pricing_status_code = qp_preq_grp.g_status_unchanged
37819 				   AND validated_flag = qp_preq_grp.g_no
37820 				   AND list_header_id = atrgrps.list_header_id
37821 				   AND line_index = qplines.line_index)
37822 		)
37823 		OR atrgrps.ask_for_flag = qp_preq_grp.g_no);
37824 
37825 /* line cache cursor*/
37826 
37827  CURSOR l_line_cache_cur(p_pricing_phase_id NUMBER) IS
37828 SELECT
37829 /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N3)
37830     index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
37831     index(intmdt QP_PREQ_PATRN_QUAL_T_N2)
37832     l_line_cache_cur */
37833  DISTINCT atrgrps.list_header_id,
37834   atrgrps.list_line_id list_line_id,
37835   qplines.line_index line_index,
37836   qppattmp.pattern_id matched_pattrn_id,
37837   p_pricing_phase_id,
37838   qppattmp.hash_key matched_hash_key,
37839   G_STAGE_CACHE_MOD_LIN stage,
37840   atrgrps.source_system_code,
37841   G_STATUS_UNCHANGED,
37842   atrgrps.header_quals_exist_flag,
37843   atrgrps.grouping_no,
37844   atrgrps.eq_flag,
37845   atrgrps.MODIFIER_LEVEL_CODE,
37846   atrgrps.other_oprt_count,
37847   atrgrps.null_other_oprt_count,
37848   atrgrps.LIST_TYPE_CODE,
37849   atrgrps.ASK_FOR_FLAG,
37850   atrgrps.HEADER_LIMIT_EXISTS,
37851   atrgrps.LINE_LIMIT_EXISTS,
37852   atrgrps.descendents_quals_exist,
37853   atrgrps.PRICE_BREAK_TYPE_CODE
37854 FROM qp_npreq_lines_tmp qplines,
37855   qp_preq_patrn_qual_tmp intmdt,
37856   qp_npreq_line_patrns_tmp qppattmp,
37857   qp_attribute_groups atrgrps
37858 WHERE intmdt.pricing_phase_id = p_pricing_phase_id
37859 	AND atrgrps.list_header_id = intmdt.list_header_id
37860 	AND intmdt.stage = G_STAGE_CACHE_MOD_HDR
37861 	AND atrgrps.list_line_id <> -1 -- Filter
37862 	AND atrgrps.pricing_phase_id = p_pricing_phase_id
37863 	AND qppattmp.pattern_id = atrgrps.pattern_id -- Match
37864 	AND qppattmp.hash_key = atrgrps.hash_key -- Match
37865 	AND qplines.line_index = qppattmp.line_index --Join
37866 	AND intmdt.line_index = qplines.line_index
37867 	AND intmdt.pricing_status_code=QP_PREQ_GRP.G_STATUS_UNCHANGED
37868 	AND(atrgrps.modifier_level_code = qplines.line_type_code
37869 		OR (atrgrps.modifier_level_code = qp_preq_grp.g_line_group and
37870 		       nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES))
37871 	AND((atrgrps.currency_code IS NOT NULL
37872 		AND atrgrps.currency_code = qp_preq_grp.g_currency_code)
37873 		OR atrgrps.currency_code IS NULL) -- optional currency
37874 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
37875 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_l,  nvl(qplines.pricing_effective_date, sysdate)))
37876 			AND TRUNC(nvl(atrgrps.end_date_active_l, nvl(qplines.pricing_effective_date, sysdate)))
37877 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
37878 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
37879 			AND TRUNC(nvl(atrgrps.end_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
37880 	AND (qplines.priced_uom_code IS NULL
37881 		OR qplines.priced_uom_code = nvl(atrgrps.product_uom_code,   qplines.priced_uom_code)
37882 		)
37883 	AND((atrgrps.ask_for_flag = qp_preq_grp.g_yes
37884 		AND EXISTS
37885 			  (SELECT
37886 
37887 			   /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook/backport]
37888 			  FROM qp_npreq_line_attrs_tmp la -- will check whether this can be moved to shaneeds code
37889 			  WHERE attribute_type = G_QUALIFIER_TYPE
37890 			   AND pricing_status_code = qp_preq_grp.g_status_unchanged
37891 			   AND validated_flag = qp_preq_grp.g_no
37892 			   AND list_header_id = atrgrps.list_header_id
37893 			   AND line_index = qplines.line_index)
37894 		)
37895 		OR atrgrps.ask_for_flag = qp_preq_grp.g_no)
37896 	AND   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES AND
37897                atrgrps.list_line_type_code NOT IN (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
37898                                         G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE) AND
37899                atrgrps.automatic_flag = 'Y'
37900        OR
37901        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES);
37902 /*UNION ALL
37903 SELECT
37904 ---This union all is to fetch all the lines whose header_quals_exist_flag is N(means pure no header quals)
37905 + ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N3) index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2) l_line_cache_cur */
37906 /* DISTINCT atrgrps.list_header_id,
37907   atrgrps.list_line_id list_line_id,
37908   qplines.line_index line_index,
37909   qppattmp.pattern_id matched_pattrn_id,
37910   p_pricing_phase_id,
37911   qppattmp.hash_key matched_hash_key,
37912   G_STAGE_CACHE_MOD_LIN stage,
37913   atrgrps.source_system_code,
37914   G_STATUS_UNCHANGED,
37915   atrgrps.header_quals_exist_flag,
37916   atrgrps.grouping_no,
37917   atrgrps.eq_flag,
37918   atrgrps.MODIFIER_LEVEL_CODE,
37919   atrgrps.other_oprt_count,
37920   atrgrps.null_other_oprt_count,
37921   atrgrps.LIST_TYPE_CODE,
37922   atrgrps.ASK_FOR_FLAG,
37923   atrgrps.HEADER_LIMIT_EXISTS,
37924   atrgrps.LINE_LIMIT_EXISTS,
37925   atrgrps.descendents_quals_exist,
37926   atrgrps.PRICE_BREAK_TYPE_CODE
37927 FROM qp_npreq_lines_tmp qplines,
37928      qp_npreq_line_patrns_tmp qppattmp,
37929      qp_attribute_groups atrgrps
37930 WHERE atrgrps.pricing_phase_id = p_pricing_phase_id
37931 	AND nvl(atrgrps.header_quals_exist_flag,   'N') = 'N'
37932 	AND qppattmp.pattern_id = atrgrps.pattern_id -- Match
37933 	AND qppattmp.hash_key = atrgrps.hash_key -- Match
37934 	AND qplines.line_index = qppattmp.line_index --Join
37935 	AND atrgrps.list_type_code NOT IN('PRL',   'AGR') -- Filter
37936 	AND atrgrps.active_flag = 'Y' -- Filter
37937 	AND(atrgrps.modifier_level_code = qplines.line_type_code
37938 		OR (atrgrps.modifier_level_code = qp_preq_grp.g_line_group and
37939 		       nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES))
37940 	AND(	qplines.unit_price IS NOT NULL
37941 		OR qplines.usage_pricing_type = qp_preq_grp.g_authoring_type
37942 		OR qplines.line_type_code = qp_preq_grp.g_order_level
37943 	)
37944 	AND(qplines.price_flag = qp_preq_grp.g_yes
37945 		OR(qplines.price_flag = qp_preq_grp.g_phase
37946 			AND p_freeze_override_flag = qp_preq_grp.g_yes)
37947 	)
37948 	AND(	(atrgrps.currency_code IS NOT NULL
37949 			AND atrgrps.currency_code = qp_preq_grp.g_currency_code)
37950 		OR atrgrps.currency_code IS NULL) -- optional currency
37951 	AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
37952 		BETWEEN nvl(atrgrps.start_date_active_h,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
37953 			AND nvl(atrgrps.end_date_active_h,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
37954 	AND nvl(qplines.start_date_active_first,   TRUNC(sysdate))
37955 		BETWEEN nvl(atrgrps.start_date_active_first,   nvl(qplines.start_date_active_first,   TRUNC(sysdate)))
37956 			AND nvl(atrgrps.end_date_active_first,   nvl(qplines.start_date_active_first,   TRUNC(sysdate)))
37957 	AND nvl(qplines.start_date_active_second,   TRUNC(sysdate))
37958 		BETWEEN nvl(atrgrps.start_date_active_second,   nvl(qplines.start_date_active_second,   TRUNC(sysdate)))
37959 			AND nvl(atrgrps.end_date_active_second,   nvl(qplines.start_date_active_second,   TRUNC(sysdate)))
37960 	AND nvl(qplines.active_date_first_type,   'X') = nvl(atrgrps.active_date_first_type,   nvl(qplines.active_date_first_type,   'X'))
37961 	AND nvl(qplines.active_date_second_type,   'X') = nvl(atrgrps.active_date_second_type,   nvl(qplines.active_date_second_type,   'X'))
37962 	AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
37963 		BETWEEN nvl(TRUNC(atrgrps.start_date_active_l),   qplines.pricing_effective_date)
37964 			AND nvl(TRUNC(atrgrps.end_date_active_l),   qplines.pricing_effective_date)
37965 	AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
37966 		BETWEEN nvl(atrgrps.start_date_active_q,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
37967 			AND nvl(atrgrps.end_date_active_q,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
37968 	AND (qplines.priced_uom_code IS NULL
37969 		OR qplines.priced_uom_code = nvl(atrgrps.product_uom_code,   qplines.priced_uom_code)
37970 		)
37971 	AND((atrgrps.ask_for_flag = qp_preq_grp.g_yes
37972 		AND EXISTS
37973 			  (SELECT
37974 
37975 			   /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ /*'x' --[julin/pricebook/backport]
37976 			  FROM qp_npreq_line_attrs_tmp la -- will check whether this can be moved to shaneeds code
37977 			  WHERE attribute_type = G_QUALIFIER_TYPE
37978 			   AND pricing_status_code = qp_preq_grp.g_status_unchanged
37979 			   AND validated_flag = qp_preq_grp.g_no
37980 			   AND list_header_id = atrgrps.list_header_id
37981 			   AND line_index = qplines.line_index)
37982 	)
37983 	OR atrgrps.ask_for_flag = qp_preq_grp.g_no)
37984 	AND   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES AND
37985                atrgrps.list_line_type_code NOT IN (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
37986                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE) AND
37987                atrgrps.automatic_flag = 'Y'
37988        OR
37989        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)*/
37990 
37991 CURSOR l_line_cache_path2_cur(p_pricing_phase_id NUMBER) IS
37992 SELECT
37993  /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N3)
37994       index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
37995       index(qplines QP_PREQ_LINES_TMP_U1)
37996       index(qprs qp_pte_source_systems_u2)
37997       l_line_cache_path2_cur */
37998  DISTINCT atrgrps.list_header_id,
37999   atrgrps.list_line_id list_line_id,
38000   qplines.line_index line_index,
38001   qppattmp.pattern_id matched_pattrn_id,
38002   p_pricing_phase_id,
38003   qppattmp.hash_key matched_hash_key,
38004   G_STAGE_CACHE_MOD_LIN stage,
38005   atrgrps.source_system_code,
38006   G_STATUS_UNCHANGED,
38007   atrgrps.header_quals_exist_flag,
38008   atrgrps.grouping_no,
38009   atrgrps.eq_flag,
38010   atrgrps.MODIFIER_LEVEL_CODE,
38011   atrgrps.other_oprt_count,
38012   atrgrps.null_other_oprt_count,
38013   atrgrps.LIST_TYPE_CODE,
38014   atrgrps.ASK_FOR_FLAG,
38015   atrgrps.HEADER_LIMIT_EXISTS,
38016   atrgrps.LINE_LIMIT_EXISTS,
38017   atrgrps.descendents_quals_exist,
38018   atrgrps.PRICE_BREAK_TYPE_CODE
38019 FROM qp_npreq_lines_tmp qplines,
38020   qp_npreq_line_patrns_tmp qppattmp,
38021   qp_attribute_groups atrgrps,
38022   qp_pte_source_systems qprs
38023 WHERE atrgrps.list_line_id <> -1 -- Filter
38024 	AND atrgrps.pattern_id = qppattmp.pattern_id  -- Match
38025 	AND atrgrps.hash_key = qppattmp.hash_key   -- Match
38026         AND atrgrps.pte_code = G_PTE_CODE
38027 	AND qppattmp.line_index = qplines.line_index --Join
38028 	AND atrgrps.list_type_code NOT IN('PRL',   'AGR') -- Filter
38029 	AND atrgrps.active_flag = 'Y' -- Filter
38030 	--AND atrgrps.source_system_code = qprs.source_system_code --join
38031 	--AND qprs.request_type_code = qp_preq_grp.g_request_type_code
38032         AND qprs.APPLICATION_SHORT_NAME = atrgrps.source_system_code
38033         AND qprs.pte_code = G_PTE_CODE
38034 	AND(atrgrps.modifier_level_code = qplines.line_type_code
38035 		OR (atrgrps.modifier_level_code = qp_preq_grp.g_line_group and
38036 		       nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES))
38037 	AND(	qplines.unit_price IS NOT NULL
38038 		OR qplines.usage_pricing_type = qp_preq_grp.g_authoring_type
38039 		OR qplines.line_type_code = qp_preq_grp.g_order_level
38040 	)
38041 	AND(qplines.price_flag = qp_preq_grp.g_yes
38042 		OR(qplines.price_flag = qp_preq_grp.g_phase
38043 			AND p_freeze_override_flag = qp_preq_grp.g_yes)
38044 	)
38045 	AND atrgrps.pricing_phase_id = p_pricing_phase_id
38046 	AND((	atrgrps.currency_code IS NOT NULL
38047 			AND atrgrps.currency_code = qp_preq_grp.g_currency_code)
38048 		OR atrgrps.currency_code IS NULL
38049 	)
38050 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
38051 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_h,   nvl(qplines.pricing_effective_date, sysdate)))
38052 			AND TRUNC(nvl(atrgrps.end_date_active_h,   nvl(qplines.pricing_effective_date, sysdate)))
38053 	AND TRUNC(nvl(qplines.start_date_active_first, sysdate))
38054 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_first,   nvl(qplines.start_date_active_first, sysdate)))
38055 			AND TRUNC(nvl(atrgrps.end_date_active_first,   nvl(qplines.start_date_active_first, sysdate)))
38056 	AND TRUNC(nvl(qplines.start_date_active_second, sysdate))
38057 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_second,   nvl(qplines.start_date_active_second, sysdate)))
38058 			AND TRUNC(nvl(atrgrps.end_date_active_second,   nvl(qplines.start_date_active_second, sysdate)))
38059 	AND nvl(qplines.active_date_first_type,   'X') = nvl(atrgrps.active_date_first_type,   nvl(qplines.active_date_first_type,   'X'))
38060 	AND nvl(qplines.active_date_second_type,   'X') = nvl(atrgrps.active_date_second_type,   nvl(qplines.active_date_second_type,   'X'))
38061 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
38062 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_l,   nvl(qplines.pricing_effective_date, sysdate)))
38063 			AND TRUNC(nvl(atrgrps.end_date_active_l, nvl(qplines.pricing_effective_date, sysdate)))
38064 	AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
38065 		BETWEEN TRUNC(nvl(atrgrps.start_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
38066 			AND TRUNC(nvl(atrgrps.end_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
38067 	AND (qplines.priced_uom_code IS NULL
38068 		OR qplines.priced_uom_code = nvl(atrgrps.product_uom_code,   qplines.priced_uom_code)
38069 		)
38070 	AND((atrgrps.ask_for_flag = qp_preq_grp.g_yes
38071 		AND EXISTS
38072 			  (SELECT
38073 
38074 			   /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook/backport]
38075 			  FROM qp_npreq_line_attrs_tmp la -- will check whether this can be moved to shaneeds code
38076 			  WHERE attribute_type = G_QUALIFIER_TYPE
38077 			   AND pricing_status_code = qp_preq_grp.g_status_unchanged
38078 			   AND validated_flag = qp_preq_grp.g_no
38079 			   AND list_header_id = atrgrps.list_header_id
38080 			   AND line_index = qplines.line_index)
38081 	)
38082 	OR atrgrps.ask_for_flag = qp_preq_grp.g_no)
38083 	AND   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES AND
38084                atrgrps.list_line_type_code NOT IN (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
38085                                         G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE) AND
38086                atrgrps.automatic_flag = 'Y'
38087        OR
38088        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES);
38089 
38090 CURSOR l_hdr_cache_cur_path2(p_pricing_phase_id NUMBER) IS
38091 SELECT
38092 
38093  /*+ ORDERED index(atrgrps QP_ATTRIBUTE_GROUPS_N1)
38094      index(qppattmp QP_NPREQ_LINE_PATRNS_T_N2)
38095      index(intmdt QP_PREQ_PATRN_QUAL_T_N1)
38096      l_hdr_cache_cur_path2 */
38097  DISTINCT atrgrps.list_header_id,
38098   -1 list_line_id,
38099   qplines.line_index line_index,
38100   qppattmp.pattern_id matched_pattrn_id,
38101   p_pricing_phase_id,
38102   qppattmp.hash_key matched_hash_key,
38103   G_STAGE_CACHE_MOD_HDR stage,
38104   atrgrps.source_system_code,
38105   G_STATUS_UNCHANGED,
38106   atrgrps.header_quals_exist_flag,
38107   atrgrps.grouping_no,
38108   atrgrps.eq_flag,
38109   atrgrps.MODIFIER_LEVEL_CODE,
38110   atrgrps.other_oprt_count,
38111   atrgrps.null_other_oprt_count,
38112   atrgrps.LIST_TYPE_CODE,
38113   atrgrps.ASK_FOR_FLAG,
38114   atrgrps.HEADER_LIMIT_EXISTS,
38115   atrgrps.LINE_LIMIT_EXISTS,
38116   atrgrps.descendents_quals_exist
38117 FROM qp_preq_patrn_qual_tmp intmdt,
38118   qp_secu_attr_groups_v atrgrps,
38119   --qp_attribute_groups atrgrps,
38120   qp_npreq_line_patrns_tmp qppattmp,
38121   qp_npreq_lines_tmp qplines
38122 WHERE intmdt.pricing_phase_id = p_pricing_phase_id
38123 	AND atrgrps.list_header_id = intmdt.list_header_id
38124 	AND intmdt.stage = G_STAGE_CACHE_MOD_LIN
38125 	AND atrgrps.list_line_id = -1 -- Filter
38126 	AND qppattmp.pattern_id = atrgrps.pattern_id -- Match
38127 	AND qppattmp.hash_key = atrgrps.hash_key -- Match
38128         AND qppattmp.line_index = intmdt.line_index
38129 	AND qplines.line_index = qppattmp.line_index --Join
38130 	AND intmdt.pricing_status_code=QP_PREQ_GRP.G_STATUS_UNCHANGED
38131         AND TRUNC(nvl(qplines.pricing_effective_date, sysdate))
38132 	  BETWEEN TRUNC(nvl(atrgrps.start_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)))
38133 	      AND TRUNC(nvl(atrgrps.end_date_active_q,   nvl(qplines.pricing_effective_date, sysdate)));
38134 
38135 /*CURSOR l_both_cache_path2_cur(p_pricing_phase_id NUMBER) IS
38136 SELECT
38137  /*+ ORDERED index(atrgrps_l QP_ATTRIBUTE_GROUPS_N3)
38138           index(atrgrps_h QP_ATTRIBUTE_GROUPS_N1)
38139       index(qplines QP_PREQ_LINES_TMP_N4)
38140       index(qppattmp_h QP_NPREQ_LINE_PATRNS_T_N1)
38141       index(qppattmp_l QP_NPREQ_LINE_PATRNS_T_N2)
38142       l_both_cache_path2_cur */
38143  /*DISTINCT atrgrps_h.list_header_id,
38144   atrgrps_l.list_line_id list_line_id,
38145   qplines.line_index line_index,
38146   qppattmp_l.pattern_id lin_matched_pattrn_id,
38147   qppattmp_h.pattern_id hdr_matched_pattrn_id,
38148   p_pricing_phase_id,
38149   qppattmp_l.hash_key lin_matched_hash_key,
38150   qppattmp_h.hash_key hdr_matched_hash_key,
38151   G_STAGE_CACHE_MOD_LIN2 stage,
38152   G_STATUS_UNCHANGED,
38153   qprs.source_system_code,
38154   DECODE(atrgrps_h.EQ_FLAG,'N','Y','N') HEADER_QUALS_EXIST_FLAG,
38155   atrgrps_h.grouping_no,
38156   atrgrps_l.grouping_no,
38157   atrgrps_h.eq_flag,
38158   atrgrps_l.eq_flag,
38159   atrgrps_l.MODIFIER_LEVEL_CODE,
38160   atrgrps_l.other_oprt_count,
38161   atrgrps_l.null_other_oprt_count,
38162   atrgrps_h.other_oprt_count,
38163   atrgrps_h.null_other_oprt_count,
38164   atrgrps_h.LIST_TYPE_CODE,
38165   atrgrps_h.ASK_FOR_FLAG,
38166   atrgrps_h.HEADER_LIMIT_EXISTS,
38167   atrgrps_l.LINE_LIMIT_EXISTS
38168 FROM qp_npreq_lines_tmp qplines,
38169      qp_npreq_line_patrns_tmp qppattmp_l,
38170      qp_attribute_groups atrgrps_l,
38171      qp_attribute_groups atrgrps_h,
38172      qp_npreq_line_patrns_tmp qppattmp_h,
38173      qp_price_req_sources_v qprs
38174      WHERE  atrgrps_l.list_line_id <> -1 -- Filter
38175         AND atrgrps_h.list_line_id = -1 -- Filter
38176         AND atrgrps_l.list_header_id = atrgrps_h.list_header_id -- Filter
38177 	AND qppattmp_l.pattern_id = atrgrps_l.pattern_id -- Match
38178 	AND qppattmp_l.hash_key = atrgrps_l.hash_key -- Match
38179 	AND qppattmp_h.pattern_id = atrgrps_h.pattern_id -- Match
38180 	AND qppattmp_h.hash_key = atrgrps_h.hash_key -- Match
38181 	AND qppattmp_l.line_index = qplines.line_index --Join
38182 	AND qppattmp_h.line_index = qplines.line_index --Join
38183 	AND atrgrps_l.list_type_code NOT IN('PRL',   'AGR') -- Filter
38184 	AND atrgrps_h.list_type_code NOT IN('PRL',   'AGR') -- Filter
38185 	AND atrgrps_l.active_flag = 'Y' -- Filter
38186 	AND atrgrps_h.active_flag = 'Y' -- Filter
38187 	AND atrgrps_l.source_system_code = qprs.source_system_code --join
38188 	AND atrgrps_h.source_system_code = qprs.source_system_code --join
38189 	AND qprs.request_type_code = qp_preq_grp.g_request_type_code
38190 	AND((nvl(g_security_control,   'OFF') = 'ON' AND g_current_user_op_unit = atrgrps_h.orig_org_id)
38191 		OR (nvl(g_security_control,   'OFF') = 'ON' AND nvl(atrgrps_h.global_flag,   'Y') = 'Y')
38192 		OR nvl(g_security_control,   'OFF') = 'OFF'
38193 	)
38194 	AND(atrgrps_l.modifier_level_code = qplines.line_type_code
38195 		OR atrgrps_l.modifier_level_code = qp_preq_grp.g_line_group)
38196 	AND(	qplines.unit_price IS NOT NULL
38197 		OR qplines.usage_pricing_type = qp_preq_grp.g_authoring_type
38198 		OR qplines.line_type_code = qp_preq_grp.g_order_level
38199 	)
38200 	AND(qplines.price_flag = qp_preq_grp.g_yes
38201 		OR(qplines.price_flag = qp_preq_grp.g_phase
38202 			AND p_freeze_override_flag = qp_preq_grp.g_yes)
38203 	)
38204 	AND atrgrps_l.pricing_phase_id = p_pricing_phase_id
38205 --	AND atrgrps_h.pricing_phase_id = -1
38206 	AND((	atrgrps_h.currency_code IS NOT NULL
38207 			AND atrgrps_h.currency_code = qp_preq_grp.g_currency_code)
38208 		OR atrgrps_h.currency_code IS NULL
38209 	)
38210 	AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
38211 		BETWEEN nvl(atrgrps_h.start_date_active_h,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
38212 			AND nvl(atrgrps_h.end_date_active_h,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
38213 	AND nvl(qplines.start_date_active_first,   TRUNC(sysdate))
38214 		BETWEEN nvl(atrgrps_h.start_date_active_first,   nvl(qplines.start_date_active_first,   TRUNC(sysdate)))
38215 			AND nvl(atrgrps_h.end_date_active_first,   nvl(qplines.start_date_active_first,   TRUNC(sysdate)))
38216 	AND nvl(qplines.start_date_active_second,   TRUNC(sysdate))
38217 		BETWEEN nvl(atrgrps_h.start_date_active_second,   nvl(qplines.start_date_active_second,   TRUNC(sysdate)))
38218 			AND nvl(atrgrps_h.end_date_active_second,   nvl(qplines.start_date_active_second,   TRUNC(sysdate)))
38219 	AND nvl(qplines.active_date_first_type,   'X') = nvl(atrgrps_h.active_date_first_type,   nvl(qplines.active_date_first_type,   'X'))
38220 	AND nvl(qplines.active_date_second_type,   'X') = nvl(atrgrps_h.active_date_second_type,   nvl(qplines.active_date_second_type,   'X'))
38221 	AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
38222 		BETWEEN nvl(TRUNC(atrgrps_l.start_date_active_l),   qplines.pricing_effective_date)
38223 			AND nvl(TRUNC(atrgrps_l.end_date_active_l),   qplines.pricing_effective_date)
38224 	AND nvl(qplines.pricing_effective_date,   TRUNC(sysdate))
38225 		BETWEEN nvl(atrgrps_l.start_date_active_q,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
38226 			AND nvl(atrgrps_l.end_date_active_q,   nvl(qplines.pricing_effective_date,   TRUNC(sysdate)))
38227 	AND (qplines.priced_uom_code IS NULL
38228 		OR qplines.priced_uom_code = nvl(atrgrps_l.product_uom_code,   qplines.priced_uom_code)
38229 		)
38230 	AND((atrgrps_h.ask_for_flag = qp_preq_grp.g_yes
38231 		AND EXISTS
38232 			  (SELECT
38233 
38234 			   /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ /*'x' --[julin/pricebook/backport]
38235 			  FROM qp_npreq_line_attrs_tmp la -- will check whether this can be moved to shaneeds code
38236 			  WHERE attribute_type = G_QUALIFIER_TYPE
38237 			   AND pricing_status_code = qp_preq_grp.g_status_unchanged
38238 			   AND validated_flag = qp_preq_grp.g_no
38239 			   AND list_header_id = atrgrps_h.list_header_id
38240 			   AND line_index = qplines.line_index)
38241 	)
38242 	OR atrgrps_h.ask_for_flag = qp_preq_grp.g_no);*/
38243 l_limit NUMBER := 5000;
38244 p_stage varchar2(300);
38245 TYPE l_number IS TABLE OF NUMBER INDEX BY pls_integer;
38246 l_list_header_id_tbl l_number;
38247 l_list_line_id_tbl l_number;
38248 l_matched_pattrn_id_tbl l_number;
38249 l_lin_matched_pattrn_id_tbl l_number;
38250 l_hdr_matched_pattrn_id_tbl l_number;
38251 l_line_index_tbl l_number;
38252 l_pricing_phase_id_tbl l_number;
38253 l_grouping_no l_number;
38254 l_other_oprt_count l_number;
38255 l_null_other_oprt_count l_number;
38256 l_hdr_grouping_no l_number;
38257 l_hdr_other_oprt_count l_number;
38258 l_hdr_null_other_oprt_count l_number;
38259 l_lin_grouping_no l_number;
38260 l_lin_other_oprt_count l_number;
38261 l_lin_null_other_oprt_count l_number;
38262 
38263 TYPE l_string IS TABLE OF VARCHAR2(2000) INDEX BY pls_integer;
38264 l_matched_hash_key_tbl l_string;
38265 l_hdr_matched_hash_key_tbl l_string;
38266 l_lin_matched_hash_key_tbl l_string;
38267 l_stage_tbl l_string;
38268 l_pricing_status_code_tbl l_string;
38269 l_ssc l_string;
38270 l_header_quals_exist_flag l_string;
38271 l_eq_flag l_string;
38272 l_hdr_eq_flag l_string;
38273 l_lin_eq_flag l_string;
38274 l_modf_lvl_code l_string;
38275 l_list_type_code l_string;
38276 l_ask_for_flag l_string;
38277 l_hdr_lmt_exists l_string;
38278 l_line_lmt_exists l_string;
38279 l_descnt_quals_exist l_string;
38280 l_PRICE_BREAK_TYPE_CODE l_string;
38281 
38282 
38283 l_routine VARCHAR2(40) := 'Select_modifiers_patrn';
38284 E_ROUTINE_ERRORS EXCEPTION;
38285 l_search_path NUMBER(1);
38286 
38287 BEGIN
38288 
38289   x_status_code := fnd_api.g_ret_sts_success;
38290 	l_search_path := p_search_path;
38291 	  IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38292 	    qp_preq_grp.engine_debug('Entering into pattern Select_modifiers_patrn');
38293 	    qp_preq_grp.engine_debug('Pattern search is going in Path : ' || l_search_path);
38294 	  END IF;
38295   IF l_search_path = 1 THEN -- for the Path 1
38296   /* Header Caching*/
38297 		IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38298 			qp_preq_grp.engine_debug('Caching Header Qualifiers for phase : ' || p_pricing_phase_id);
38299 		END IF;
38300 	    qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_HDR_CACHE_CUR',   'l_header_cache_cur');
38301 
38302 	    OPEN l_header_cache_cur(p_pricing_phase_id);
38303 	    LOOP
38304 	      l_list_header_id_tbl.DELETE;
38305 	      l_list_line_id_tbl.DELETE;
38306 	      l_line_index_tbl.DELETE;
38307 	      l_matched_pattrn_id_tbl.DELETE;
38308 	      l_pricing_phase_id_tbl.DELETE;
38309 	      l_stage_tbl.DELETE;
38310 	      l_matched_hash_key_tbl.DELETE;
38311 	      l_pricing_status_code_tbl.DELETE;
38312 	      l_ssc.DELETE;
38313 	      l_header_quals_exist_flag.DELETE;
38314 	      l_grouping_no.DELETE;
38315 	      l_eq_flag.DELETE;
38316 	      l_modf_lvl_code.DELETE;
38317 	      l_other_oprt_count.DELETE;
38318 	      l_null_other_oprt_count.DELETE;
38319               l_list_type_code.DELETE;
38320               l_ask_for_flag.DELETE;
38321               l_hdr_lmt_exists.DELETE;
38322               l_line_lmt_exists.DELETE;
38323               l_descnt_quals_exist.DELETE;
38324 
38325 
38326 	      FETCH l_header_cache_cur bulk collect
38327 	      INTO l_list_header_id_tbl,
38328 		l_list_line_id_tbl,
38329 		l_line_index_tbl,
38330 		l_matched_pattrn_id_tbl,
38331 		l_pricing_phase_id_tbl,
38332 		l_matched_hash_key_tbl,
38333 		l_stage_tbl,
38334 		l_ssc,
38335 		l_pricing_status_code_tbl,
38336 		l_header_quals_exist_flag,
38337 		l_grouping_no,
38338 		l_eq_flag,
38339                 l_modf_lvl_code,
38340                 l_other_oprt_count,
38341                 l_null_other_oprt_count,
38342 		l_list_type_code,
38343 		l_ask_for_flag,
38344 		l_hdr_lmt_exists,
38345 		l_line_lmt_exists,
38346                 l_descnt_quals_exist
38347 		limit l_limit;
38348 
38349 	      EXIT
38350 	    WHEN l_list_header_id_tbl.COUNT = 0;
38351 
38352 	    forall i IN 1 .. l_list_header_id_tbl.COUNT INSERT
38353 	    INTO qp_preq_patrn_qual_tmp(list_header_id,
38354 					list_line_id,
38355 					line_index,
38356 					matched_pattrn_id,
38357 					pricing_phase_id,
38358 					matched_hash_key,
38359 					stage,
38360 					pricing_status_code,
38361 					source_system_code,
38362 					header_quals_exist_flag,
38363 					grouping_no,
38364 					eq_flag,
38365 					MODIFIER_LEVEL_CODE,
38366 					other_oprt_count,
38367 					null_other_oprt_count,
38368 					LIST_TYPE_CODE,
38369 					ASK_FOR_FLAG,
38370 					HEADER_LIMIT_EXISTS,
38371 					LINE_LIMIT_EXISTS,
38372                                         descendents_quals_exist
38373 					)
38374 			    VALUES(l_list_header_id_tbl(i),
38375 					l_list_line_id_tbl(i),
38376 					l_line_index_tbl(i),
38377 					l_matched_pattrn_id_tbl(i),
38378 					l_pricing_phase_id_tbl(i),
38379 					l_matched_hash_key_tbl(i),
38380 					l_stage_tbl(i),
38381 					l_pricing_status_code_tbl(i),
38382 					l_ssc(i),
38383 					l_header_quals_exist_flag(i),
38384 					l_grouping_no(i),
38385 					l_eq_flag(i),
38386 					l_modf_lvl_code(i),
38387 					l_other_oprt_count(i),
38388 					l_null_other_oprt_count(i),
38389 					l_list_type_code(i),
38390 					l_ask_for_flag(i),
38391 					l_hdr_lmt_exists(i),
38392 					l_line_lmt_exists(i),
38393 					l_descnt_quals_exist(i));
38394 
38395 	    --exit when l_header_cache_cur%rowcount < l_limit;
38396 	  END LOOP;
38397 
38398 	  CLOSE l_header_cache_cur;
38399 	  qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_HDR_CACHE_CUR');
38400 
38401 	qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_P1_H',   'Populate_Temp_Tables_NEQ_BTW_P1_H');
38402 	Populate_Temp_Tables_NEQ_BTW(
38403 			    p_pricing_phase_id ,
38404 			    G_STAGE_CACHE_MOD_HDR ,
38405 			    x_status_code ,
38406 			    x_status_text );
38407 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38408 		RAISE E_ROUTINE_ERRORS;
38409         END IF;
38410 
38411         qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_P1_H');
38412 	qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_P1_H',   'QP_EVALUATE_OTHER_OPERATORS_P1_H');
38413 
38414 	QP_EVALUATE_OTHER_OPERATORS(
38415 			 p_pricing_phase_id ,
38416 			 G_STAGE_CACHE_MOD_HDR,
38417 			    x_status_code ,
38418 			    x_status_text );
38419 
38420 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38421 		RAISE E_ROUTINE_ERRORS;
38422         END IF;
38423 
38424 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_P1_H');
38425 
38426 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38427 		qp_preq_grp.engine_debug('Caching Line Qualifiers for satisfied headers, pure line quals, only prod and only prod-pric for phase : ' || p_pricing_phase_id);
38428 	END IF;
38429 
38430        qp_debug_util.tstart('PATRN_LIST_CUR_DEL_HDR_TCA',   'Header deletion for TCA');
38431 
38432 	UPDATE qp_preq_patrn_qual_tmp a
38433 	SET pricing_status_code = G_DELETED_TCA
38434 	WHERE pricing_status_code = g_status_unchanged
38435 	 AND a.descendents_quals_exist = 'Y'
38436          and a.pricing_phase_id = p_pricing_phase_id
38437          and a.stage = G_STAGE_CACHE_MOD_HDR
38438 	 AND EXISTS (
38439 	    SELECT 1
38440 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
38441 	    WHERE b.list_header_id = a.list_header_id
38442 	      AND b.list_line_id = a.list_line_id
38443 	      AND (b.qualifier_grouping_no = a.grouping_no
38444                    or
38445                    b.qualifier_grouping_no = -1
38446                   )
38447 	      AND b.qualify_hier_descendents_flag = 'N'
38448 	      AND c.segment_id = b.segment_id
38449 	      AND c.line_index = a.line_index
38450 	      AND c.derived_qualifier_flag = 'Y');
38451 
38452         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_HDR_TCA');
38453 
38454 
38455   /* Line Caching*/
38456 
38457   qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_LINE_CACHE_CUR',   'l_line_cache_cur');
38458 
38459   OPEN l_line_cache_cur(p_pricing_phase_id);
38460 
38461   LOOP
38462     l_list_header_id_tbl.DELETE;
38463     l_list_line_id_tbl.DELETE;
38464     l_line_index_tbl.DELETE;
38465     l_matched_pattrn_id_tbl.DELETE;
38466     l_pricing_phase_id_tbl.DELETE;
38467     l_stage_tbl.DELETE;
38468     l_matched_hash_key_tbl.DELETE;
38469     l_pricing_status_code_tbl.DELETE;
38470     l_ssc.DELETE;
38471     l_header_quals_exist_flag.DELETE;
38472     l_grouping_no.DELETE;
38473     l_eq_flag.DELETE;
38474     l_modf_lvl_code.DELETE;
38475     l_other_oprt_count.DELETE;
38476     l_null_other_oprt_count.DELETE;
38477     l_list_type_code.DELETE;
38478     l_ask_for_flag.DELETE;
38479     l_hdr_lmt_exists.DELETE;
38480     l_line_lmt_exists.DELETE;
38481     l_descnt_quals_exist.DELETE;
38482     l_PRICE_BREAK_TYPE_CODE.DELETE;
38483 
38484     FETCH l_line_cache_cur bulk collect
38485     INTO l_list_header_id_tbl,
38486       l_list_line_id_tbl,
38487       l_line_index_tbl,
38488       l_matched_pattrn_id_tbl,
38489       l_pricing_phase_id_tbl,
38490       l_matched_hash_key_tbl,
38491       l_stage_tbl,
38492       l_ssc,
38493       l_pricing_status_code_tbl,
38494       l_header_quals_exist_flag,
38495       l_grouping_no,
38496       l_eq_flag,
38497       l_modf_lvl_code,
38498       l_other_oprt_count,
38499       l_null_other_oprt_count,
38500       l_list_type_code,
38501       l_ask_for_flag,
38502       l_hdr_lmt_exists,
38503       l_line_lmt_exists,
38504       l_descnt_quals_exist,
38505       l_PRICE_BREAK_TYPE_CODE
38506       limit l_limit;
38507 --    qp_preq_grp.engine_debug('l_list_header_id_tbl.count-' || l_list_header_id_tbl.COUNT);
38508 
38509     EXIT
38510   WHEN l_list_header_id_tbl.COUNT = 0;
38511 
38512   forall i IN 1 .. l_list_header_id_tbl.COUNT
38513   INSERT  INTO qp_preq_patrn_qual_tmp(list_header_id,
38514 					list_line_id,
38515 					line_index,
38516 					matched_pattrn_id,
38517 					pricing_phase_id,
38518 					matched_hash_key,
38519 					stage,
38520 					pricing_status_code,
38521 					source_system_code,
38522 					header_quals_exist_flag,
38523 					grouping_no,
38524 					eq_flag,
38525 					MODIFIER_LEVEL_CODE,
38526 					other_oprt_count,
38527 					null_other_oprt_count,
38528 					LIST_TYPE_CODE,
38529 					ASK_FOR_FLAG,
38530 					HEADER_LIMIT_EXISTS,
38531 					LINE_LIMIT_EXISTS,
38532 					descendents_quals_exist,
38533 					PRICE_BREAK_TYPE_CODE
38534 					)
38535 				VALUES	(l_list_header_id_tbl(i),
38536 					l_list_line_id_tbl(i),
38537 					l_line_index_tbl(i),
38538 					l_matched_pattrn_id_tbl(i),
38539 					l_pricing_phase_id_tbl(i),
38540 					l_matched_hash_key_tbl(i),
38541 					l_stage_tbl(i),
38542 					l_pricing_status_code_tbl(i),
38543 					l_ssc(i),
38544 					l_header_quals_exist_flag(i),
38545 					l_grouping_no(i),
38546 					l_eq_flag(i),
38547 					l_modf_lvl_code(i),
38548 					l_other_oprt_count(i),
38549 					l_null_other_oprt_count(i),
38550 					l_list_type_code(i),
38551 					l_ask_for_flag(i),
38552 					l_hdr_lmt_exists(i),
38553 					l_line_lmt_exists(i),
38554                                         l_descnt_quals_exist(i),
38555 				        l_PRICE_BREAK_TYPE_CODE(i)
38556 					);
38557 
38558   --exit when l_line_cache_cur%rowcount < l_limit;
38559 
38560 END LOOP;
38561 CLOSE l_line_cache_cur;
38562 
38563 	qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_LINE_CACHE_CUR');
38564 
38565 
38566 	qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_P1_L',   'Populate_Temp_Tables_NEQ_BTW_P1_L');
38567 
38568 	Populate_Temp_Tables_NEQ_BTW(
38569 	    p_pricing_phase_id ,
38570 	    G_STAGE_CACHE_MOD_LIN ,
38571 	    x_status_code ,
38572 	    x_status_text );
38573 
38574 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38575 		RAISE E_ROUTINE_ERRORS;
38576         END IF;
38577 
38578 	qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_P1_L');
38579 
38580 	qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_P1_L',   'QP_EVALUATE_OTHER_OPERATORS_P1_L');
38581 
38582 			QP_EVALUATE_OTHER_OPERATORS(
38583 			 p_pricing_phase_id ,
38584 			    G_STAGE_CACHE_MOD_LIN,
38585 			    x_status_code ,
38586 			    x_status_text );
38587 
38588 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38589 		RAISE E_ROUTINE_ERRORS;
38590         END IF;
38591 
38592 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_P1_L');
38593 
38594        qp_debug_util.tstart('PATRN_LIST_CUR_DEL_LIN_TCA',   'Line deletion for TCA');
38595 
38596 	UPDATE qp_preq_patrn_qual_tmp a
38597 	SET pricing_status_code = G_DELETED_TCA
38598 	WHERE pricing_status_code = g_status_unchanged
38599 	 AND a.descendents_quals_exist = 'Y'
38600          and a.pricing_phase_id = p_pricing_phase_id
38601          and a.stage = G_STAGE_CACHE_MOD_LIN
38602 	 AND EXISTS (
38603 	    SELECT 1
38604 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
38605 	    WHERE b.list_header_id = a.list_header_id
38606 	      AND b.list_line_id = a.list_line_id
38607 	      AND (b.qualifier_grouping_no = a.grouping_no
38608                    or
38609                    b.qualifier_grouping_no = -1
38610                   )
38611 	      AND b.qualify_hier_descendents_flag = 'N'
38612 	      AND c.segment_id = b.segment_id
38613 	      AND c.line_index = a.line_index
38614 	      AND c.derived_qualifier_flag = 'Y');
38615 
38616         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_LIN_TCA');
38617 
38618 ELSE --- for the path 2
38619 /*
38620 qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_BOTH_CACHE_CUR_PATH2',   'l_both_cache_path2_cur');
38621 
38622 OPEN l_both_cache_path2_cur(p_pricing_phase_id);
38623 LOOP
38624 
38625 l_list_header_id_tbl.DELETE;
38626 l_list_line_id_tbl.DELETE;
38627 l_line_index_tbl.DELETE;
38628 l_hdr_matched_pattrn_id_tbl.DELETE;
38629 l_lin_matched_pattrn_id_tbl.DELETE;
38630 l_pricing_phase_id_tbl.DELETE;
38631 l_stage_tbl.DELETE;
38632 l_hdr_matched_hash_key_tbl.DELETE;
38633 l_lin_matched_hash_key_tbl.DELETE;
38634 l_pricing_status_code_tbl.DELETE;
38635 l_ssc.DELETE;
38636 l_header_quals_exist_flag.DELETE;
38637 l_hdr_grouping_no.DELETE;
38638 l_lin_grouping_no.DELETE;
38639 l_hdr_eq_flag.DELETE;
38640 l_lin_eq_flag.DELETE;
38641 l_modf_lvl_code.DELETE;
38642 l_hdr_other_oprt_count.DELETE;
38643 l_hdr_null_other_oprt_count.DELETE;
38644 l_lin_other_oprt_count.DELETE;
38645 l_lin_null_other_oprt_count.DELETE;
38646 l_list_type_code.DELETE;
38647 l_ask_for_flag.DELETE;
38648 l_hdr_lmt_exists.DELETE;
38649 l_line_lmt_exists.DELETE;
38650 
38651 
38652   FETCH l_both_cache_path2_cur bulk collect
38653   INTO l_list_header_id_tbl,
38654 	l_list_line_id_tbl,
38655 	l_line_index_tbl,
38656 	l_hdr_matched_pattrn_id_tbl,
38657 	l_lin_matched_pattrn_id_tbl,
38658 	l_pricing_phase_id_tbl,
38659 	l_stage_tbl,
38660 	l_hdr_matched_hash_key_tbl,
38661 	l_lin_matched_hash_key_tbl,
38662 	l_pricing_status_code_tbl,
38663 	l_ssc,
38664 	l_header_quals_exist_flag,
38665 	l_hdr_grouping_no,
38666 	l_lin_grouping_no,
38667 	l_hdr_eq_flag,
38668 	l_lin_eq_flag,
38669 	l_modf_lvl_code,
38670 	l_hdr_other_oprt_count,
38671 	l_hdr_null_other_oprt_count,
38672 	l_lin_other_oprt_count,
38673 	l_lin_null_other_oprt_count,
38674 	l_list_type_code,
38675 	l_ask_for_flag,
38676 	l_hdr_lmt_exists,
38677 	l_line_lmt_exists
38678     limit l_limit;
38679 
38680   EXIT
38681 WHEN l_list_header_id_tbl.COUNT = 0;
38682 
38683 FORALL i IN 1 .. l_list_header_id_tbl.COUNT
38684 INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
38685 					list_line_id,
38686 					line_index,
38687 					matched_pattrn_id,
38688 					pricing_phase_id,
38689 					matched_hash_key,
38690 					stage,
38691 					pricing_status_code,
38692 					source_system_code,
38693 					header_quals_exist_flag,
38694 					grouping_no,
38695 					eq_flag,
38696 					MODIFIER_LEVEL_CODE,
38697 					other_oprt_count,
38698 					null_other_oprt_count,
38699 					LIST_TYPE_CODE,
38700 					ASK_FOR_FLAG,
38701 					HEADER_LIMIT_EXISTS,
38702 					LINE_LIMIT_EXISTS
38703 					)
38704 			SELECT DISTINCT l_list_header_id_tbl(i),
38705 					l_list_line_id_tbl(i),
38706 					l_line_index_tbl(i),
38707 					l_lin_matched_pattrn_id_tbl(i),
38708 					l_pricing_phase_id_tbl(i),
38709 					l_stage_tbl(i),
38710 					l_lin_matched_hash_key_tbl(i),
38711 					l_pricing_status_code_tbl(i),
38712 					l_ssc(i),
38713 					l_header_quals_exist_flag(i),
38714 					l_lin_grouping_no(i),
38715 					l_lin_eq_flag(i),
38716 					l_modf_lvl_code(i),
38717 					l_lin_other_oprt_count(i),
38718 					l_lin_null_other_oprt_count(i),
38719 					l_list_type_code(i),
38720 					l_ask_for_flag(i),
38721 					l_hdr_lmt_exists(i),
38722 					l_line_lmt_exists(i)
38723 			FROM dual;
38724 
38725 FORALL i IN 1 .. l_list_header_id_tbl.COUNT
38726 INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
38727 					list_line_id,
38728 					line_index,
38729 					matched_pattrn_id,
38730 					pricing_phase_id,
38731 					matched_hash_key,
38732 					stage,
38733 					pricing_status_code,
38734 					source_system_code,
38735 					header_quals_exist_flag,
38736 					grouping_no,
38737 					eq_flag,
38738 					MODIFIER_LEVEL_CODE,
38739 					other_oprt_count,
38740 					null_other_oprt_count,
38741 					LIST_TYPE_CODE,
38742 					ASK_FOR_FLAG,
38743 					HEADER_LIMIT_EXISTS,
38744 					LINE_LIMIT_EXISTS
38745 					)
38746 			SELECT DISTINCT l_list_header_id_tbl(i),
38747 					l_list_line_id_tbl(i),
38748 					l_line_index_tbl(i),
38749 					l_hdr_matched_pattrn_id_tbl(i),
38750 					l_pricing_phase_id_tbl(i),
38751 					l_stage_tbl(i),
38752 					l_hdr_matched_hash_key_tbl(i),
38753 					l_pricing_status_code_tbl(i),
38754 					l_ssc(i),
38755 					l_header_quals_exist_flag(i),
38756 					l_hdr_grouping_no(i),
38757 					l_hdr_eq_flag(i),
38758 					l_modf_lvl_code(i),
38759 					l_hdr_other_oprt_count(i),
38760 					l_hdr_null_other_oprt_count(i),
38761 					l_list_type_code(i),
38762 					l_ask_for_flag(i),
38763 					l_hdr_lmt_exists(i),
38764 					l_line_lmt_exists(i)
38765 			FROM dual
38766 			WHERE l_hdr_eq_flag(i) = 'N';
38767 
38768 --exit when l_header_cache_cur%rowcount < l_limit;
38769 END LOOP;
38770 CLOSE l_both_cache_path2_cur;
38771 	qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_BOTH_CACHE_CUR_PATH2');
38772 
38773 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38774 		qp_debug_util.print_table_data_csv('QP_PREQ_PATRN_QUAL_TMP','SEL_MOD_QUAL_AFT_LIN_CACH_P2_'||p_pricing_phase_id);
38775 	END IF;
38776 
38777 	qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_P2_L',   'Populate_Temp_Tables_NEQ_BTW_P2_L');
38778 
38779 	Populate_Temp_Tables_NEQ_BTW(
38780 	    p_pricing_phase_id ,
38781 	    G_STAGE_CACHE_MOD_LIN2,
38782 	    x_status_code ,
38783 	    x_status_text );
38784 
38785 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38786 		RAISE E_ROUTINE_ERRORS;
38787         END IF;
38788 
38789 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38790 		qp_debug_util.print_table_data_csv('QP_NPREQ_LINE_ATTRS_TMP','SEL_MOD_ATTRS_AFT_LIN_POP_NEQ_BTW_P2_'||p_pricing_phase_id);
38791 	END IF;
38792 
38793 	qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_P2_L');
38794 
38795 	qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_P2_L',   'QP_EVALUATE_OTHER_OPERATORS_P2_L');
38796 
38797 			QP_EVALUATE_OTHER_OPERATORS(
38798 			 p_pricing_phase_id ,
38799 			    G_STAGE_CACHE_MOD_LIN2,
38800 			    x_status_code ,
38801 			    x_status_text );
38802 
38803 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38804 		RAISE E_ROUTINE_ERRORS;
38805         END IF;
38806 
38807 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_P2_L');
38808 
38809 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38810 		qp_debug_util.print_table_data_csv('QP_PREQ_PATRN_QUAL_TMP','SEL_MOD_QUAL_AFT_LIN_EVL_OTH_OPR_P2_'||p_pricing_phase_id);
38811 	END IF;
38812 
38813 IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38814 	qp_preq_grp.engine_debug('Caching Header Qualifiers for satisfied Lines, pure Header quals, only prod, only prod-pric for phase : ' || p_pricing_phase_id);
38815 END IF;
38816 
38817 qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_DEL_HDR_PATH2',   'Line deletion');
38818 
38819 UPDATE qp_preq_patrn_qual_tmp a
38820 SET pricing_status_code = G_DELETED_LINE
38821 WHERE pricing_phase_id = p_pricing_phase_id
38822  AND pricing_status_code = qp_preq_grp.g_status_unchanged
38823  AND list_line_id <> -1
38824  AND nvl(header_quals_exist_flag,   'N') = 'Y'
38825  AND NOT EXISTS
38826 (SELECT 'x'
38827  FROM qp_preq_patrn_qual_tmp b
38828  WHERE b.list_header_id = a.list_header_id
38829  AND b.list_line_id = -1
38830  AND b.pricing_phase_id = a.pricing_phase_id
38831  AND b.pricing_status_code = qp_preq_grp.g_status_unchanged
38832  AND b.line_index = a.line_index);
38833 
38834 qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_DEL_HDR_PATH2');*/
38835 
38836 qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_LIN_CACHE_CUR_PATH2',   'l_line_cache_path2_cur');
38837 
38838 qp_preq_grp.engine_debug('path 2 phase : ' || p_pricing_phase_id);
38839 
38840 OPEN l_line_cache_path2_cur(p_pricing_phase_id);
38841 LOOP
38842 
38843 l_list_header_id_tbl.DELETE;
38844 l_list_line_id_tbl.DELETE;
38845 l_line_index_tbl.DELETE;
38846 l_matched_pattrn_id_tbl.DELETE;
38847 l_pricing_phase_id_tbl.DELETE;
38848 l_stage_tbl.DELETE;
38849 l_matched_hash_key_tbl.DELETE;
38850 l_pricing_status_code_tbl.DELETE;
38851 l_ssc.DELETE;
38852 l_header_quals_exist_flag.DELETE;
38853 l_grouping_no.DELETE;
38854 l_eq_flag.DELETE;
38855 l_modf_lvl_code.DELETE;
38856 l_other_oprt_count.DELETE;
38857 l_null_other_oprt_count.DELETE;
38858 l_list_type_code.DELETE;
38859 l_ask_for_flag.DELETE;
38860 l_hdr_lmt_exists.DELETE;
38861 l_line_lmt_exists.DELETE;
38862 l_descnt_quals_exist.DELETE;
38863 l_PRICE_BREAK_TYPE_CODE.DELETE;
38864 
38865 
38866   FETCH l_line_cache_path2_cur bulk collect
38867   INTO l_list_header_id_tbl,
38868     l_list_line_id_tbl,
38869     l_line_index_tbl,
38870     l_matched_pattrn_id_tbl,
38871     l_pricing_phase_id_tbl,
38872     l_matched_hash_key_tbl,
38873     l_stage_tbl,
38874     l_ssc,
38875     l_pricing_status_code_tbl,
38876     l_header_quals_exist_flag,
38877     l_grouping_no,
38878     l_eq_flag,
38879     l_modf_lvl_code,
38880     l_other_oprt_count,
38881     l_null_other_oprt_count,
38882     l_list_type_code,
38883     l_ask_for_flag,
38884     l_hdr_lmt_exists,
38885     l_line_lmt_exists,
38886     l_descnt_quals_exist,
38887     l_PRICE_BREAK_TYPE_CODE
38888     limit l_limit;
38889 
38890   EXIT
38891 WHEN l_list_header_id_tbl.COUNT = 0;
38892 
38893 FORALL i IN 1 .. l_list_header_id_tbl.COUNT
38894 INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
38895 					list_line_id,
38896 					line_index,
38897 					matched_pattrn_id,
38898 					pricing_phase_id,
38899 					matched_hash_key,
38900 					stage,
38901 					pricing_status_code,
38902 					source_system_code,
38903 					header_quals_exist_flag,
38904 					grouping_no,
38905 					eq_flag,
38906 					MODIFIER_LEVEL_CODE,
38907 					other_oprt_count,
38908 					null_other_oprt_count,
38909 					LIST_TYPE_CODE,
38910 					ASK_FOR_FLAG,
38911 					HEADER_LIMIT_EXISTS,
38912 					LINE_LIMIT_EXISTS,
38913 					descendents_quals_exist,
38914 					PRICE_BREAK_TYPE_CODE
38915 					)
38916 				VALUES(l_list_header_id_tbl(i),
38917 					l_list_line_id_tbl(i),
38918 					l_line_index_tbl(i),
38919 					l_matched_pattrn_id_tbl(i),
38920 					l_pricing_phase_id_tbl(i),
38921 					l_matched_hash_key_tbl(i),
38922 					l_stage_tbl(i),
38923 					l_pricing_status_code_tbl(i),
38924 					l_ssc(i),
38925 					l_header_quals_exist_flag(i),
38926 					l_grouping_no(i),
38927 					l_eq_flag(i),
38928 					l_modf_lvl_code(i),
38929 					l_other_oprt_count(i),
38930 					l_null_other_oprt_count(i),
38931 					l_list_type_code(i),
38932 					l_ask_for_flag(i),
38933 					l_hdr_lmt_exists(i),
38934 					l_line_lmt_exists(i),
38935                                         l_descnt_quals_exist(i),
38936 				        l_PRICE_BREAK_TYPE_CODE(i)
38937 					);
38938 
38939 --exit when l_header_cache_cur%rowcount < l_limit;
38940 END LOOP;
38941 CLOSE l_line_cache_path2_cur;
38942 	qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_LIN_CACHE_CUR_PATH2');
38943 
38944 	qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_P2_L',   'Populate_Temp_Tables_NEQ_BTW_P2_L');
38945 
38946 	Populate_Temp_Tables_NEQ_BTW(
38947 	    p_pricing_phase_id ,
38948 	    G_STAGE_CACHE_MOD_LIN ,
38949 	    x_status_code ,
38950 	    x_status_text );
38951 
38952 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38953 		RAISE E_ROUTINE_ERRORS;
38954         END IF;
38955 
38956 	qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_P2_L');
38957 
38958 	qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_P2_L',   'QP_EVALUATE_OTHER_OPERATORS_P2_L');
38959 
38960 			QP_EVALUATE_OTHER_OPERATORS(
38961 			 p_pricing_phase_id ,
38962 			    G_STAGE_CACHE_MOD_LIN,
38963 			    x_status_code ,
38964 			    x_status_text );
38965 
38966 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
38967 		RAISE E_ROUTINE_ERRORS;
38968         END IF;
38969 
38970 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_P2_L');
38971 
38972 IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
38973 	qp_preq_grp.engine_debug('Caching Header Qualifiers for satisfied Lines, pure Header quals, only prod, only prod-pric for phase : ' || p_pricing_phase_id);
38974 END IF;
38975 
38976 /* Line Caching*/
38977 
38978 qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_HDR_CACHE_CUR_PATH2',   'l_hdr_cache_cur_path2');
38979 
38980 OPEN l_hdr_cache_cur_path2(p_pricing_phase_id);
38981 
38982 LOOP
38983 
38984 l_list_header_id_tbl.DELETE;
38985 l_list_line_id_tbl.DELETE;
38986 l_line_index_tbl.DELETE;
38987 l_matched_pattrn_id_tbl.DELETE;
38988 l_pricing_phase_id_tbl.DELETE;
38989 l_stage_tbl.DELETE;
38990 l_matched_hash_key_tbl.DELETE;
38991 l_pricing_status_code_tbl.DELETE;
38992 l_ssc.DELETE;
38993 l_header_quals_exist_flag.DELETE;
38994 l_grouping_no.DELETE;
38995 l_eq_flag.DELETE;
38996 l_modf_lvl_code.DELETE;
38997 l_other_oprt_count.DELETE;
38998 l_null_other_oprt_count.DELETE;
38999 l_list_type_code.DELETE;
39000 l_ask_for_flag.DELETE;
39001 l_hdr_lmt_exists.DELETE;
39002 l_line_lmt_exists.DELETE;
39003 l_descnt_quals_exist.DELETE;
39004 
39005 FETCH l_hdr_cache_cur_path2 bulk collect
39006 INTO l_list_header_id_tbl,
39007   l_list_line_id_tbl,
39008   l_line_index_tbl,
39009   l_matched_pattrn_id_tbl,
39010   l_pricing_phase_id_tbl,
39011   l_matched_hash_key_tbl,
39012   l_stage_tbl,
39013   l_ssc,
39014   l_pricing_status_code_tbl,
39015   l_header_quals_exist_flag,
39016   l_grouping_no,
39017   l_eq_flag,
39018   l_modf_lvl_code,
39019   l_other_oprt_count,
39020   l_null_other_oprt_count,
39021   l_list_type_code,
39022   l_ask_for_flag,
39023   l_hdr_lmt_exists,
39024   l_line_lmt_exists,
39025   l_descnt_quals_exist
39026   limit l_limit;
39027 --qp_preq_grp.engine_debug('l_list_header_id_tbl.count-' || l_list_header_id_tbl.COUNT);
39028 
39029 EXIT
39030 WHEN l_list_header_id_tbl.COUNT = 0;
39031 
39032 FORALL i IN 1 .. l_list_header_id_tbl.COUNT
39033 INSERT INTO qp_preq_patrn_qual_tmp(list_header_id,
39034 					list_line_id,
39035 					line_index,
39036 					matched_pattrn_id,
39037 					pricing_phase_id,
39038 					matched_hash_key,
39039 					stage,
39040 					pricing_status_code,
39041 					source_system_code,
39042 					header_quals_exist_flag,
39043 					grouping_no,
39044 					eq_flag,
39045 					MODIFIER_LEVEL_CODE,
39046 					other_oprt_count,
39047 					null_other_oprt_count,
39048 					LIST_TYPE_CODE,
39049 					ASK_FOR_FLAG,
39050 					HEADER_LIMIT_EXISTS,
39051 					LINE_LIMIT_EXISTS,
39052 					descendents_quals_exist)
39053 				VALUES(l_list_header_id_tbl(i),
39054 					l_list_line_id_tbl(i),
39055 					l_line_index_tbl(i),
39056 					l_matched_pattrn_id_tbl(i),
39057 					l_pricing_phase_id_tbl(i),
39058 					l_matched_hash_key_tbl(i),
39059 					l_stage_tbl(i),
39060 					l_pricing_status_code_tbl(i),
39061 					l_ssc(i),
39062 					l_header_quals_exist_flag(i),
39063 					l_grouping_no(i),
39064 					l_eq_flag(i),
39065 					l_modf_lvl_code(i),
39066 					l_other_oprt_count(i),
39067 					l_null_other_oprt_count(i),
39068 					l_list_type_code(i),
39069 					l_ask_for_flag(i),
39070 					l_hdr_lmt_exists(i),
39071 					l_line_lmt_exists(i),
39072 					l_descnt_quals_exist(i));
39073 
39074 --exit when l_line_cache_cur%rowcount < l_limit;
39075 
39076 END LOOP;
39077 CLOSE l_hdr_cache_cur_path2;
39078 
39079 	qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_HDR_CACHE_CUR_PATH2');
39080 
39081 	qp_debug_util.tstart('Populate_Temp_Tables_NEQ_BTW_P2_H',   'Populate_Temp_Tables_NEQ_BTW_P2_H');
39082 
39083 		Populate_Temp_Tables_NEQ_BTW(
39084 		    p_pricing_phase_id ,
39085 		    G_STAGE_CACHE_MOD_HDR ,
39086 		    x_status_code ,
39087 		    x_status_text );
39088 
39089 		IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
39090 			RAISE E_ROUTINE_ERRORS;
39091 		END IF;
39092 
39093 
39094 	qp_debug_util.tstop('Populate_Temp_Tables_NEQ_BTW_P2_H');
39095 
39096 	qp_debug_util.tstart('QP_EVALUATE_OTHER_OPERATORS_P2_H',   'QP_EVALUATE_OTHER_OPERATORS_P2_H');
39097 
39098 			QP_EVALUATE_OTHER_OPERATORS(
39099 			 p_pricing_phase_id ,
39100 			    G_STAGE_CACHE_MOD_HDR,
39101 			    x_status_code ,
39102 			    x_status_text );
39103 			IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
39104 				RAISE E_ROUTINE_ERRORS;
39105 			END IF;
39106 
39107 	qp_debug_util.tstop('QP_EVALUATE_OTHER_OPERATORS_P2_H');
39108 
39109        qp_debug_util.tstart('PATRN_LIST_CUR_DEL_LIN_TCA',   'Line/Header deletion for TCA');
39110 
39111 	UPDATE qp_preq_patrn_qual_tmp a
39112 	SET pricing_status_code = G_DELETED_TCA
39113 	WHERE pricing_status_code = g_status_unchanged
39114 	 AND a.descendents_quals_exist = 'Y'
39115          and a.pricing_phase_id = p_pricing_phase_id
39116          and a.stage IN (G_STAGE_CACHE_MOD_HDR,G_STAGE_CACHE_MOD_LIN)
39117 	 AND EXISTS (
39118 	    SELECT 1
39119 	    FROM qp_qualifiers b, qp_npreq_line_attrs_tmp c
39120 	    WHERE b.list_header_id = a.list_header_id
39121 	      AND b.list_line_id = a.list_line_id
39122 	      AND (b.qualifier_grouping_no = a.grouping_no
39123                    or
39124                    b.qualifier_grouping_no = -1
39125                   )
39126 	      AND b.qualify_hier_descendents_flag = 'N'
39127 	      AND c.segment_id = b.segment_id
39128 	      AND c.line_index = a.line_index
39129 	      AND c.derived_qualifier_flag = 'Y');
39130 
39131 
39132 
39133         qp_debug_util.tstop('PATRN_LIST_CUR_DEL_LIN_TCA');
39134 
39135 	qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_DEL_HDR_PATH2',   'Line deletion');
39136 
39137 UPDATE qp_preq_patrn_qual_tmp a
39138 SET pricing_status_code = G_DELETED_LINE
39139 WHERE pricing_phase_id = p_pricing_phase_id
39140  AND pricing_status_code = qp_preq_grp.g_status_unchanged
39141  AND list_line_id <> -1
39142  AND nvl(header_quals_exist_flag,   'N') = 'Y'
39143  AND a.stage = G_STAGE_CACHE_MOD_LIN
39144  AND NOT EXISTS
39145 (SELECT 'x'
39146  FROM qp_preq_patrn_qual_tmp b
39147  WHERE b.list_header_id = a.list_header_id
39148  AND b.list_line_id = -1
39149  AND b.line_index = a.line_index
39150  AND b.pricing_phase_id = a.pricing_phase_id
39151  AND pricing_status_code = qp_preq_grp.g_status_unchanged
39152  AND b.stage = G_STAGE_CACHE_MOD_HDR);
39153 
39154 qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_DEL_HDR_PATH2');
39155 
39156 END IF;
39157 
39158 
39159 qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_UPD_EXCLUDER',   'Delete Excluder rows');
39160 
39161 -- Delete Excluded Line Details Directly if the inner select returns an excluded row
39162 
39163 UPDATE qp_preq_patrn_qual_tmp a
39164 SET pricing_status_code = G_DELETED_EXCLUDER
39165 WHERE pricing_phase_id = p_pricing_phase_id
39166  AND pricing_status_code = qp_preq_grp.g_status_unchanged
39167  AND EXISTS
39168 (SELECT
39169  /*+ ORDERED USE_NL(c) index(c qp_preq_line_attrs_tmp_N2) index(b QP_PRICING_ATTRIBUTES_N2) l_excl_cur */ 'x'
39170  FROM qp_pricing_attributes b,
39171    qp_npreq_line_attrs_tmp c
39172  WHERE b.list_line_id = a.list_line_id
39173  AND b.excluder_flag = qp_preq_grp.g_yes
39174  AND b.product_attribute_context = c.context
39175  AND b.product_attribute = c.attribute
39176  AND b.product_attr_value = c.value_from
39177  AND c.attribute_type = qp_preq_grp.g_product_type
39178  AND c.pricing_status_code = qp_preq_grp.g_status_unchanged
39179  AND c.line_index = a.line_index);
39180 
39181 qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_UPD_EXCLUDER');
39182 
39183 qp_debug_util.tstart('PATRN_SELECT_MODIFIERS_POPULATE_PAT_TEMP_TABLES',   'Populate_Pat_Temp_Tables');
39184 
39185 /*IF l_search_path = 1 THEN
39186 
39187 	Populate_Pat_Temp_Tables(p_pricing_phase_id,
39188 	                         G_STAGE_CACHE_MOD_LIN,
39189 				x_status_code,
39190 				x_status_text);
39191 ELSE */
39192 	/*Populate_Pat_Temp_Tables(p_pricing_phase_id,
39193 	                         G_STAGE_CACHE_MOD_LIN,
39194 				x_status_code,
39195 				x_status_text);*/
39196 
39197 Populate_Pat_Temp_Tables(p_pricing_phase_id,
39198 	                         G_STAGE_CACHE_MOD_LIN,
39199 				x_status_code,
39200 				x_status_text);
39201 
39202 --END IF;
39203 	IF x_status_code <> FND_API.G_RET_STS_SUCCESS THEN
39204 		RAISE E_ROUTINE_ERRORS;
39205         END IF;
39206 
39207 qp_debug_util.tstop('PATRN_SELECT_MODIFIERS_POPULATE_PAT_TEMP_TABLES');
39208 
39209 
39210 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
39211 		qp_preq_grp.engine_debug('x_status_code-' || x_status_code);
39212 		qp_preq_grp.engine_debug('x_status_text-' || x_status_text);
39213 	END IF;
39214 
39215 EXCEPTION
39216  WHEN E_ROUTINE_ERRORS THEN
39217 
39218      x_status_code := FND_API.G_RET_STS_ERROR;
39219      x_status_text := 'Expected Error in ' || l_routine || sqlerrm;
39220 
39221      IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
39222 	qp_preq_grp.engine_debug(x_status_text);
39223      END IF;
39224 
39225      IF l_header_cache_cur%ISOPEN THEN
39226      CLOSE l_header_cache_cur;
39227      END IF;
39228 
39229      IF l_line_cache_cur%ISOPEN THEN
39230      CLOSE l_line_cache_cur;
39231      END IF;
39232 
39233      IF l_line_cache_path2_cur%ISOPEN THEN
39234      CLOSE l_line_cache_path2_cur;
39235      END IF;
39236 
39237      IF l_hdr_cache_cur_path2%ISOPEN THEN
39238      CLOSE l_hdr_cache_cur_path2;
39239      END IF;
39240 
39241    /*  IF l_both_cache_path2_cur%ISOPEN THEN
39242      CLOSE l_both_cache_path2_cur;
39243      END IF;*/
39244 
39245 WHEN OTHERS THEN
39246 
39247 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
39248 		qp_preq_grp.engine_debug(l_routine || ' ' || sqlerrm);
39249 	END IF;
39250 
39251      IF l_header_cache_cur%ISOPEN THEN
39252      CLOSE l_header_cache_cur;
39253      END IF;
39254 
39255      IF l_line_cache_cur%ISOPEN THEN
39256      CLOSE l_line_cache_cur;
39257      END IF;
39258 
39259      IF l_line_cache_path2_cur%ISOPEN THEN
39260      CLOSE l_line_cache_path2_cur;
39261      END IF;
39262 
39263      IF l_hdr_cache_cur_path2%ISOPEN THEN
39264      CLOSE l_hdr_cache_cur_path2;
39265      END IF;
39266 
39267      /*IF l_both_cache_path2_cur%ISOPEN THEN
39268      CLOSE l_both_cache_path2_cur;
39269      END IF;*/
39270 x_status_code := fnd_api.g_ret_sts_error;
39271 x_status_text := 'Error in ' || l_routine || sqlerrm;
39272 
39273 END Select_modifiers_patrn;
39274 
39275 
39276 PROCEDURE QP_EVALUATE_OTHER_OPERATORS
39277 				(p_pricing_phase_id varchar2,
39278 				p_stage varchar2,
39279 				x_status_code OUT nocopy VARCHAR2,
39280 				x_status_text OUT nocopy VARCHAR2) as
39281 
39282 BEGIN
39283 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
39284 		qp_preq_grp.engine_debug('Entering QP_EVALUATE_OTHER_OPERATORS');
39285 	END IF;
39286 
39287 UPDATE /*+ index(a qp_preq_patrn_qual_t_n3) */
39288 	QP_PREQ_PATRN_QUAL_TMP a
39289         SET pricing_status_code = G_DEL_ATTR_NOT_SRCD_CMN_GRP
39290         WHERE pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
39291 	  AND eq_flag = 'N'
39292 	  AND stage = p_stage
39293 	  AND pricing_phase_id = p_pricing_phase_id
39294 	  AND null_other_oprt_count <> 0
39295 	  AND NOT EXISTS(
39296                  SELECT /*+ index(b qp_preq_line_attrs_tmp_n10) */ 1
39297                  FROM qp_npreq_line_attrs_tmp b
39298                  WHERE b.line_index = a.line_index
39299                    AND b.list_header_id = a.list_header_id
39300 		   AND b.list_line_id = a.list_line_id
39301 		   AND b.grouping_number = -1
39302                    AND b.comparison_operator_type_code IN (G_OPERATOR_NOT_EQL,G_OPERATOR_BETWEEN)
39303 		   AND b.attribute_type IN (QP_PREQ_GRP.G_PRICING_TYPE,QP_PREQ_GRP.G_QUALIFIER_TYPE)
39304 		   AND b.pricing_status_code = p_stage
39305 		   AND b.pricing_phase_id = p_pricing_phase_id
39306 		   AND b.line_index > 0
39307                  GROUP BY b.line_index,b.list_header_id,b.list_line_id
39308                  HAVING COUNT(DISTINCT b.CONTEXT||b.ATTRIBUTE||b.SETUP_VALUE_FROM) = a.null_other_oprt_count);
39309 
39310 
39311         UPDATE /*+ index(a qp_preq_patrn_qual_t_n3) */
39312 	QP_PREQ_PATRN_QUAL_TMP a
39313         SET pricing_status_code = G_DEL_ATTR_NOT_SRCD_GRP
39314         WHERE pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
39315 	  AND eq_flag = 'N'
39316 	  AND stage = p_stage
39317 	  AND pricing_phase_id = p_pricing_phase_id
39318 	  AND grouping_no <> -1
39319 	  AND other_oprt_count > 0
39320 	  AND NOT EXISTS(
39321                  SELECT /*+ index(b qp_preq_line_attrs_tmp_n10) */ 1
39322                  FROM qp_npreq_line_attrs_tmp b
39323                  WHERE b.line_index = a.line_index
39324                    AND b.list_header_id = a.list_header_id
39325 		   AND b.list_line_id = a.list_line_id
39326 		   AND b.grouping_number = a.grouping_no
39327 		   AND b.grouping_number <> -1
39328                    AND b.comparison_operator_type_code IN (G_OPERATOR_NOT_EQL,G_OPERATOR_BETWEEN)
39329 		   AND b.attribute_type IN (QP_PREQ_GRP.G_QUALIFIER_TYPE)
39330 		   AND b.pricing_status_code = p_stage
39331 		   AND b.pricing_phase_id = p_pricing_phase_id
39332 		   AND b.line_index > 0
39333                  GROUP BY b.line_index,b.list_header_id,b.list_line_id, b.grouping_number
39334                  HAVING COUNT(DISTINCT b.CONTEXT||b.ATTRIBUTE||b.SETUP_VALUE_FROM) = a.other_oprt_count);
39335 
39336 
39337 	UPDATE QP_PREQ_PATRN_QUAL_TMP
39338 	SET pricing_status_code = G_DEL_OTHR_OPR_CMN_GRP
39339 	WHERE pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
39340         AND stage = p_stage
39341 	AND (line_index , list_header_id , list_line_id)  IN
39342 		(SELECT distinct a.line_index , a.list_header_id , a.list_line_id
39343 		FROM   qp_npreq_line_attrs_tmp a
39344 		WHERE  a.comparison_operator_type_code = G_OPERATOR_NOT_EQL
39345 			AND    a.attribute_type IN (QP_PREQ_GRP.G_PRICING_TYPE,QP_PREQ_GRP.G_QUALIFIER_TYPE)
39346 			AND    a.pricing_status_code = p_stage
39347 			AND    a.pricing_phase_id = p_pricing_phase_id
39348 			AND    a.line_index > 0
39349 			AND    a.grouping_number = -1
39350 			AND    NVL(a.setup_value_from,FND_API.G_MISS_CHAR) = a.value_from
39351 		UNION ALL
39352 		SELECT distinct a.line_index , a.list_header_id , a.list_line_id
39353 		FROM   qp_npreq_line_attrs_tmp a
39354 		WHERE  a.comparison_operator_type_code = G_OPERATOR_BETWEEN
39355 			AND    a.attribute_type IN (QP_PREQ_GRP.G_PRICING_TYPE,QP_PREQ_GRP.G_QUALIFIER_TYPE)
39356 			AND    a.pricing_status_code = p_stage
39357 			AND    a.pricing_phase_id = p_pricing_phase_id
39358 			AND    a.line_index > 0
39359 			AND    datatype in (QP_PREQ_GRP.G_DATE_X,QP_PREQ_GRP.G_DATE_Y,QP_PREQ_GRP.G_VARCHAR)
39360 			--AND    a.MODIFIER_LEVEL_CODE <> G_LINE_GROUP
39361 			AND    a.value_from NOT BETWEEN nvl(a.setup_value_from,a.value_from) and nvl(a.setup_value_to,a.value_from)
39362 			AND    a.grouping_number = -1
39363 		UNION ALL
39364 		SELECT distinct a.line_index , a.list_header_id , a.list_line_id
39365 		FROM   qp_npreq_line_attrs_tmp a
39366 		WHERE  a.comparison_operator_type_code = G_OPERATOR_BETWEEN
39367 			AND    a.attribute_type IN (QP_PREQ_GRP.G_PRICING_TYPE,QP_PREQ_GRP.G_QUALIFIER_TYPE)
39368 			AND    a.pricing_status_code = p_stage
39369 			AND    a.pricing_phase_id = p_pricing_phase_id
39370 			AND    a.line_index > 0
39371 			AND   datatype = QP_PREQ_GRP.G_NUMERIC
39372 			--AND    a.MODIFIER_LEVEL_CODE <> G_LINE_GROUP
39373 			AND NOT (NVL(a.MODIFIER_LEVEL_CODE,FND_API.G_MISS_CHAR) = G_LINE_GROUP
39374                               AND a.CONTEXT = G_PRIC_VOLUME_CONTEXT
39375                               AND a.attribute in (G_QUANTITY_ATTRIBUTE,G_LINE_AMT_ATTRIBUTE))
39376 			AND   fnd_number.canonical_to_number(DECODE(datatype,QP_PREQ_GRP.G_NUMERIC,a.value_from,null))
39377 				  NOT BETWEEN nvl(fnd_number.canonical_to_number(a.setup_value_from),fnd_number.canonical_to_number(a.value_from))
39378 				  AND nvl(fnd_number.canonical_to_number(a.setup_value_to),fnd_number.canonical_to_number(a.value_from))
39379 			AND    a.grouping_number = -1);
39380 
39381 	UPDATE QP_PREQ_PATRN_QUAL_TMP
39382 	SET pricing_status_code = G_DEL_OTHR_OPR_GRP
39383 	WHERE pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
39384         AND stage = p_stage
39385 	AND (line_index , list_header_id , list_line_id, grouping_no)  IN
39386 		(SELECT distinct a.line_index , a.list_header_id , a.list_line_id ,a.grouping_number grouping_no
39387 		FROM   qp_npreq_line_attrs_tmp a
39388 		WHERE  a.comparison_operator_type_code = G_OPERATOR_NOT_EQL
39389 			AND    a.attribute_type = QP_PREQ_GRP.G_QUALIFIER_TYPE
39390 			AND    a.pricing_status_code = p_stage
39391 			AND    a.pricing_phase_id = p_pricing_phase_id
39392 			AND    a.line_index > 0
39393 			AND    a.grouping_number <> -1
39394 			AND   NVL(a.setup_value_from,FND_API.G_MISS_CHAR) = a.value_from
39395 		UNION ALL
39396 		SELECT distinct a.line_index , a.list_header_id , a.list_line_id ,a.grouping_number grouping_no
39397 		FROM   qp_npreq_line_attrs_tmp a
39398 		WHERE  a.comparison_operator_type_code = G_OPERATOR_BETWEEN
39399 			AND    a.attribute_type = QP_PREQ_GRP.G_QUALIFIER_TYPE
39400 			AND    a.pricing_status_code = p_stage
39401 			AND    a.pricing_phase_id = p_pricing_phase_id
39402 			AND    a.line_index > 0
39403 			AND    datatype in (QP_PREQ_GRP.G_DATE_X,QP_PREQ_GRP.G_DATE_Y,QP_PREQ_GRP.G_VARCHAR)
39404 			--AND    a.MODIFIER_LEVEL_CODE <> G_LINE_GROUP
39405 			AND    a.value_from NOT BETWEEN nvl(a.setup_value_from,a.value_from) and nvl(a.setup_value_to,a.value_from)
39406 			AND    a.grouping_number <> -1
39407 		UNION ALL
39408 		SELECT distinct a.line_index , a.list_header_id , a.list_line_id  ,a.grouping_number grouping_no
39409 		FROM   qp_npreq_line_attrs_tmp a
39410 		WHERE  a.comparison_operator_type_code = G_OPERATOR_BETWEEN
39411 			AND    a.attribute_type = QP_PREQ_GRP.G_QUALIFIER_TYPE
39412 			AND    a.pricing_status_code = p_stage
39413 			AND    a.pricing_phase_id = p_pricing_phase_id
39414 			AND    a.line_index > 0
39415 			AND   datatype = QP_PREQ_GRP.G_NUMERIC
39416 			--AND    a.MODIFIER_LEVEL_CODE <> G_LINE_GROUP
39417 			AND NOT (NVL(a.MODIFIER_LEVEL_CODE,FND_API.G_MISS_CHAR) = G_LINE_GROUP
39418                               AND a.CONTEXT = G_PRIC_VOLUME_CONTEXT
39419                               AND a.attribute in (G_QUANTITY_ATTRIBUTE,G_LINE_AMT_ATTRIBUTE))
39420 			AND   fnd_number.canonical_to_number(DECODE(datatype,QP_PREQ_GRP.G_NUMERIC,a.value_from,null))
39421 				  NOT BETWEEN nvl(fnd_number.canonical_to_number(a.setup_value_from),fnd_number.canonical_to_number(a.value_from))
39422 				  AND nvl(fnd_number.canonical_to_number(a.setup_value_to),fnd_number.canonical_to_number(a.value_from))
39423 			AND    a.grouping_number <> -1);
39424 
39425 
39426 	IF qp_preq_grp.g_debug_engine = fnd_api.g_true THEN
39427 		qp_preq_grp.engine_debug('Number of rows deleted during NOT = and B/W operator evaluation for the non -1 groups-'||sql%rowcount);
39428 	END IF;
39429 
39430 EXCEPTION
39431 
39432 WHEN OTHERS THEN
39433   x_status_code := FND_API.G_RET_STS_ERROR;
39434   x_status_text :='QP_EVALUATE_OTHER_OPERATORS '||SQLERRM;
39435 	  IF (qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
39436 	   qp_preq_grp.engine_debug('QP_EVALUATE_OTHER_OPERATORS '||SQLERRM);
39437 	  END IF;
39438 END QP_EVALUATE_OTHER_OPERATORS;
39439 
39440 
39441 
39442 PROCEDURE Populate_Pat_Temp_Tables(
39443     p_pricing_phase_id     IN  NUMBER,
39444     p_stage                IN VARCHAR2,
39445     x_status_code          OUT NOCOPY VARCHAR2,
39446     x_status_text          OUT NOCOPY VARCHAR2)
39447 AS
39448 
39449 l_satis_quals_opt	VARCHAR2(1);
39450 l_routine VARCHAR2(240):='Routine : QP_PREQ_GRP.Populate_Pat_Temp_Tables';
39451 l_limit NUMBER := 5000;
39452 
39453 l_count NUMBER := 0;
39454 
39455 l_start_line_index NUMBER;
39456 l_end_line_index NUMBER;
39457 
39458 l_cnt_iter NUMBER;
39459 
39460 --G_CHUNK_SIZE
39461 BEGIN
39462 
39463   IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
39464      qp_preq_grp.engine_debug('Entering ' || l_routine);
39465      qp_preq_grp.engine_debug('p_pricing_phase_id => '||p_pricing_phase_id);
39466   END IF;
39467 
39468   l_cnt_iter := ((G_MAX_LINE_INDEX-G_MIN_LINE_INDEX)/G_CHUNK_SIZE)+1;
39469 
39470   x_status_code := FND_API.G_RET_STS_SUCCESS;
39471 
39472    /*
39473      Populating table qp_npreq_ldets_tmp with details of all selected modifier
39474      lines after Pattern matching.
39475    */
39476 
39477   l_start_line_index := G_MIN_LINE_INDEX;
39478   l_end_line_index := G_MIN_LINE_INDEX+G_CHUNK_SIZE;
39479 
39480   qp_debug_util.tstart('POPULATE_PAT_TEMP_TABLES_QR1','Populate_Pat_Temp_Tables inserting LDETS');
39481 
39482   FOR i IN 1..l_cnt_iter
39483   LOOP
39484 
39485   INSERT INTO qp_npreq_ldets_tmp
39486                 (LINE_DETAIL_INDEX,
39487                  LINE_DETAIL_TYPE_CODE,
39488                  PRICE_BREAK_TYPE_CODE,
39489                  LINE_INDEX,
39490                  CREATED_FROM_LIST_HEADER_ID,
39491                  CREATED_FROM_LIST_LINE_ID,
39492                  CREATED_FROM_LIST_LINE_TYPE,
39493                  CREATED_FROM_LIST_TYPE_CODE,
39494                  CREATED_FROM_SQL,
39495                  PRICING_GROUP_SEQUENCE,
39496                  PRICING_PHASE_ID,
39497                  OPERAND_CALCULATION_CODE,
39498                  OPERAND_VALUE,
39499                  NET_AMOUNT_FLAG,
39500                  ASK_FOR_FLAG,
39501                  PRICE_FORMULA_ID,
39502                  PRICING_STATUS_CODE,
39503                  PRICING_STATUS_TEXT,
39504                  PRODUCT_PRECEDENCE,
39505                  INCOMPATABILITY_GRP_CODE,
39506                  PROCESSED_FLAG,
39507                  APPLIED_FLAG,
39508                  AUTOMATIC_FLAG,
39509                  OVERRIDE_FLAG,
39510                  PRIMARY_UOM_FLAG,
39511                  MODIFIER_LEVEL_CODE,
39512                  BENEFIT_QTY,
39513                  BENEFIT_UOM_CODE,
39514 		 SERVICE_DURATION, -- service project
39515 		 SERVICE_PERIOD, -- service project
39516                  LIST_LINE_NO,
39517                  ACCRUAL_FLAG,
39518                  ACCRUAL_CONVERSION_RATE,
39519                  ESTIM_ACCRUAL_RATE,
39520                  HEADER_LIMIT_EXISTS,
39521                  LINE_LIMIT_EXISTS,
39522 		 PROCESS_CODE,
39523                  CHARGE_TYPE_CODE,
39524                  CHARGE_SUBTYPE_CODE,
39525                  ACCUM_CONTEXT,
39526                  ACCUM_ATTRIBUTE,
39527                  ACCUM_ATTR_RUN_SRC_FLAG,
39528                  CURRENCY_DETAIL_ID,
39529 		 CURRENCY_HEADER_ID,
39530 		 SELLING_ROUNDING_FACTOR,
39531                  ORDER_CURRENCY,
39532 		 BASE_CURRENCY_CODE,
39533 		 BREAK_UOM_CODE,
39534                  BREAK_UOM_CONTEXT,
39535 		 BREAK_UOM_ATTRIBUTE,
39536 		 PRICING_EFFECTIVE_DATE
39537 	)
39538 	SELECT
39539 	   QP_PREQ_GRP.GET_LINE_DETAIL_INDEX, --LINE_DETAIL_INDEX
39540 	   'NULL', --LINE_DETAIL_TYPE_CODE
39541 	   qplines.PRICE_BREAK_TYPE_CODE, -- PRICE_BREAK_TYPE_CODE
39542            qpatq.line_index, -- LINE_INDEX
39543            qpatq.list_header_id, -- CREATED_FROM_LIST_HEADER_ID
39544            qpatq.list_line_id, -- CREATED_FROM_LIST_LINE_ID
39545            qplines.list_line_type_code, -- CREATED_FROM_LIST_LINE_TYPE
39546            qpatq.list_type_code, -- CREATED_FROM_LIST_TYPE_CODE
39547            p_stage, -- CREATED_FROM_SQL
39548 	   --'CREATED_FROM_PATTERN', -- CREATED_FROM_SQL --Check it
39549            qplines.pricing_group_sequence, -- PRICING_GROUP_SEQUENCE
39550            p_pricing_phase_id, -- PRICING_PHASE_ID
39551            qplines.arithmetic_operator, -- OPERAND_CALCULATION_CODE
39552            qplines.operand, -- OPERAND_VALUE
39553            qplines.net_amount_flag, -- NET_AMOUNT_FLAG
39554            qpatq.ask_for_flag, -- ASK_FOR_FLAG
39555            qplines.price_by_formula_id, -- PRICE_FORMULA_ID
39556            G_STATUS_NEW,--qpatq.PRICING_STATUS_CODE, -- PRICING_STATUS_CODE
39557            qpatq.PRICING_STATUS_TEXT, -- PRICING_STATUS_TEXT
39558            qplines.product_precedence, -- PRODUCT_PRECEDENCE
39559            qplines.incompatibility_grp_code, -- INCOMPATABILITY_GRP_CODE
39560            QP_PREQ_GRP.G_NOT_PROCESSED, -- PROCESSED_FLAG
39561            qplines.automatic_flag, -- APPLIED_FLAG
39562            qplines.automatic_flag, -- AUTOMATIC_FLAG
39563            qplines.override_flag, -- OVERRIDE_FLAG
39564            qplines.primary_uom_flag, -- PRIMARY_UOM_FLAG
39565            qplines.modifier_level_code, -- MODIFIER_LEVEL_CODE
39566            qplines.benefit_qty, -- BENEFIT_QTY
39567            qplines.benefit_uom_code, -- BENEFIT_UOM_CODE
39568 	   qplines.service_duration, -- service project
39569 	   qplines.service_period, -- service project
39570            qplines.list_line_no, -- LIST_LINE_NO
39571            qplines.accrual_flag, -- ACCRUAL_FLAG
39572            qplines.accrual_conversion_rate, -- ACCRUAL_CONVERSION_RATE
39573            qplines.estim_accrual_rate, -- ESTIM_ACCRUAL_RATE
39574            --decode(qph.limit_exists_flag,'Y','Y',decode(qplines.limit_exists_flag,'Y','Y','N')), -- HEADER_LIMIT_EXISTS
39575 	   qpatq.HEADER_LIMIT_EXISTS, -- HEADER_LIMIT_EXISTS
39576            qplines.limit_exists_flag, -- LINE_LIMIT_EXISTS
39577 	   QP_PREQ_GRP.G_STATUS_NEW, -- PROCESS_CODE
39578            qplines.charge_type_code, -- CHARGE_TYPE_CODE
39579            qplines.charge_subtype_code, -- CHARGE_SUBTYPE_CODE
39580            qplines.accum_context, -- ACCUM_CONTEXT
39581            qplines.accum_attribute, -- ACCUM_ATTRIBUTE
39582            qplines.accum_attr_run_src_flag, -- ACCUM_ATTR_RUN_SRC_FLAG
39583            qpatq.CURRENCY_DETAIL_ID,
39584     	   qpatq.CURRENCY_HEADER_ID,
39585 	   qpatq.SELLING_ROUNDING_FACTOR,
39586            qpatq.ORDER_CURRENCY,
39587 	   qpatq.BASE_CURRENCY_CODE,
39588 	   qpatq.BREAK_UOM_CODE,
39589            qpatq.BREAK_UOM_CONTEXT,
39590 	   qpatq.BREAK_UOM_ATTRIBUTE,
39591 	   qpatq.PRICING_EFFECTIVE_DATE
39592 	FROM
39593 	     (
39594 	       SELECT DISTINCT pricing_phase_id, line_index, list_header_id,
39595 	          list_line_id, pricing_status_code, PRICING_STATUS_TEXT,
39596 		  list_type_code, ask_for_flag, HEADER_LIMIT_EXISTS,
39597                   CURRENCY_DETAIL_ID, CURRENCY_HEADER_ID, SELLING_ROUNDING_FACTOR,
39598                   ORDER_CURRENCY, BASE_CURRENCY_CODE, BREAK_UOM_CODE,
39599                   BREAK_UOM_CONTEXT, BREAK_UOM_ATTRIBUTE, PRICING_EFFECTIVE_DATE
39600 	       FROM QP_PREQ_PATRN_QUAL_TMP
39601 	       WHERE stage = p_stage
39602 	        AND pricing_phase_id = p_pricing_phase_id
39603 		AND list_line_id <> -1
39604 		AND pricing_status_code = G_STATUS_UNCHANGED
39605 		AND line_index BETWEEN l_start_line_index AND l_end_line_index
39606              )qpatq,
39607 	     QP_LIST_LINES qplines
39608         WHERE  qplines.list_line_id = qpatq.list_line_id;
39609 
39610      l_start_line_index := l_end_line_index + 1;
39611      l_end_line_index := l_end_line_index + G_CHUNK_SIZE;
39612 
39613   END LOOP;
39614 
39615    qp_debug_util.tstop('POPULATE_PAT_TEMP_TABLES_QR1');
39616 
39617 
39618    IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
39619      qp_preq_grp.engine_debug('Successfully inserted data in table qp_npreq_ldets_tmp');
39620    END IF;
39621 
39622    qp_debug_util.tstart('POPULATE_PAT_TEMP_TABLES_QR3','Populate_Pat_Temp_Tables Inserting line attrs temp');
39623 
39624    /*
39625      Populating table qp_npreq_line_attrs_tmp with details of Pricing and Product
39626      Attributes for selected modifier lines.
39627    */
39628 
39629   l_start_line_index := G_MIN_LINE_INDEX;
39630   l_end_line_index := G_MIN_LINE_INDEX+G_CHUNK_SIZE;
39631 
39632   FOR i IN 1..l_cnt_iter
39633   LOOP
39634 
39635   INSERT INTO qp_npreq_line_attrs_tmp(
39636                  LINE_INDEX,
39637                  LINE_DETAIL_INDEX,
39638                  ATTRIBUTE_LEVEL,
39639                  ATTRIBUTE_TYPE,
39640                  LIST_HEADER_ID,
39641                  LIST_LINE_ID,
39642                  CONTEXT,
39643                  ATTRIBUTE,
39644                  VALUE_FROM,
39645                  SETUP_VALUE_FROM,
39646                  VALUE_TO,
39647                  SETUP_VALUE_TO,
39648                  GROUPING_NUMBER,
39649                  COMPARISON_OPERATOR_TYPE_CODE,
39650                  VALIDATED_FLAG,
39651                  APPLIED_FLAG,
39652                  PRICING_STATUS_CODE,
39653                  PRICING_STATUS_TEXT,
39654                  QUALIFIER_PRECEDENCE,
39655                  DATATYPE,
39656                  PRICING_ATTR_FLAG,
39657                  QUALIFIER_TYPE,
39658                  PRODUCT_UOM_CODE,
39659                  EXCLUDER_FLAG,
39660                  PRICING_PHASE_ID,
39661                  INCOMPATABILITY_GRP_CODE,
39662                  LINE_DETAIL_TYPE_CODE,
39663                  MODIFIER_LEVEL_CODE,
39664                  PRIMARY_UOM_FLAG,
39665 		 --SEGMENT_ID,
39666 		 derived_qualifier_flag
39667                 )
39668      -- Product Attributes
39669      SELECT /*+ ORDERED index(qplaptr qp_preq_line_attrs_tmp_n8) */
39670         qpldets.LINE_INDEX, --LINE_INDEX
39671         qpldets.LINE_DETAIL_INDEX, --LINE_DETAIL_INDEX
39672         qplaptr.ATTRIBUTE_LEVEL, --ATTRIBUTE_LEVEL
39673         qplaptr.ATTRIBUTE_TYPE, --ATTRIBUTE_TYPE
39674         qpldets.CREATED_FROM_LIST_HEADER_ID, --LIST_HEADER_ID
39675         qpldets.CREATED_FROM_LIST_LINE_ID , --LIST_LINE_ID
39676         qppatr.PRODUCT_ATTRIBUTE_CONTEXT, --CONTEXT
39677         qppatr.PRODUCT_ATTRIBUTE, --ATTRIBUTE
39678         qplaptr.VALUE_FROM, --VALUE_FROM
39679         qppatr.PRODUCT_ATTR_VALUE,--SETUP_VALUE_FROM
39680         NULL,--VALUE_TO
39681         NULL,--SETUP_VALUE_TO
39682         -1,--GROUPING_NUMBER --bug 12731268
39683         qppatr.COMPARISON_OPERATOR_CODE,--COMPARISON_OPERATOR_TYPE_CODE
39684         qplaptr.VALIDATED_FLAG,--VALIDATED_FLAG
39685         qplaptr.APPLIED_FLAG,--APPLIED_FLAG
39686         G_STATUS_NEW,--qp_preq_grp.G_STATUS_UNCHANGED,--PRICING_STATUS_CODE --Check this attribute
39687         'Product Attribute',--PRICING_STATUS_TEXT --Check this attribute
39688         NULL,--QUALIFIER_PRECEDENCE
39689         qppatr.PRODUCT_ATTRIBUTE_DATATYPE,--DATATYPE
39690         qplaptr.PRICING_ATTR_FLAG,--PRICING_ATTR_FLAG
39691         'NO',--QUALIFIER_TYPE
39692         qppatr.PRODUCT_UOM_CODE, --PRODUCT_UOM_CODE
39693         qppatr.excluder_flag, --EXCLUDER_FLAG
39694         qpldets.pricing_phase_id, --PRICING_PHASE_ID
39695         qpldets.INCOMPATABILITY_GRP_CODE, --INCOMPATABILITY_GRP_CODE
39696         'NULL', --LINE_DETAIL_TYPE_CODE
39697         qpldets.MODIFIER_LEVEL_CODE, --MODIFIER_LEVEL_CODE
39698         qpldets.PRIMARY_UOM_FLAG, --PRIMARY_UOM_FLAG
39699         --qppatr.PRODUCT_SEGMENT_ID, --SEGMENT_ID
39700 	qplaptr.derived_qualifier_flag
39701      FROM qp_npreq_ldets_tmp qpldets,
39702           QP_PRICING_ATTRIBUTES qppatr,
39703 	  qp_npreq_line_attrs_tmp qplaptr
39704      WHERE qpldets.pricing_phase_id = p_pricing_phase_id
39705        AND qpldets.line_index BETWEEN l_start_line_index AND l_end_line_index
39706        AND qpldets.CREATED_FROM_SQL = p_stage
39707        AND qppatr.list_line_id = qpldets.CREATED_FROM_LIST_LINE_ID
39708        AND qppatr.list_header_id = qpldets.CREATED_FROM_LIST_HEADER_ID --Could be removed
39709        AND qppatr.excluder_flag = 'N'
39710        AND qppatr.product_attribute_context is not null
39711        AND (qppatr.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT or
39712                qppatr.pricing_attribute_context is null)
39713        AND qplaptr.LINE_INDEX = qpldets.LINE_INDEX
39714        AND qplaptr.segment_id = qppatr.PRODUCT_SEGMENT_ID
39715        AND qplaptr.attribute_type=G_PRODUCT_TYPE
39716    UNION
39717      -- Pricing Attributes
39718      SELECT /*+ ORDERED index(qplaptr qp_preq_line_attrs_tmp_n8) */
39719         qpldets.LINE_INDEX, --LINE_INDEX
39720         qpldets.LINE_DETAIL_INDEX, --LINE_DETAIL_INDEX
39721         qplaptr.ATTRIBUTE_LEVEL, --ATTRIBUTE_LEVEL
39722         qplaptr.ATTRIBUTE_TYPE, --ATTRIBUTE_TYPE
39723         qpldets.CREATED_FROM_LIST_HEADER_ID, --LIST_HEADER_ID
39724         qpldets.CREATED_FROM_LIST_LINE_ID, --LIST_LINE_ID
39725         qppatr.PRICING_ATTRIBUTE_CONTEXT, --CONTEXT
39726         qppatr.PRICING_ATTRIBUTE, --ATTRIBUTE
39727         qplaptr.VALUE_FROM, --VALUE_FROM
39728         qppatr.PRICING_ATTR_VALUE_FROM,--SETUP_VALUE_FROM
39729         qplaptr.VALUE_TO,--VALUE_TO
39730         qppatr.PRICING_ATTR_VALUE_TO,--SETUP_VALUE_TO
39731          -1,--GROUPING_NUMBER  --bug 12731268
39732         qppatr.COMPARISON_OPERATOR_CODE,--COMPARISON_OPERATOR_TYPE_CODE
39733         qplaptr.VALIDATED_FLAG,--VALIDATED_FLAG
39734         qplaptr.APPLIED_FLAG,--APPLIED_FLAG
39735         G_STATUS_NEW,--QP_PREQ_GRP.G_STATUS_UNCHANGED,--PRICING_STATUS_CODE --Check this attribute
39736         'Pricing Attribute',--PRICING_STATUS_TEXT --Check this attribute
39737         NULL,--QUALIFIER_PRECEDENCE
39738         qppatr.PRICING_ATTRIBUTE_DATATYPE,--DATATYPE
39739         qplaptr.PRICING_ATTR_FLAG,--PRICING_ATTR_FLAG
39740         'NO',--QUALIFIER_TYPE
39741         qppatr.PRODUCT_UOM_CODE, --PRODUCT_UOM_CODE
39742         qppatr.excluder_flag, --EXCLUDER_FLAG
39743         qpldets.pricing_phase_id, --PRICING_PHASE_ID
39744         qpldets.INCOMPATABILITY_GRP_CODE, --INCOMPATABILITY_GRP_CODE
39745         'NULL', --LINE_DETAIL_TYPE_CODE
39746         qpldets.MODIFIER_LEVEL_CODE, --MODIFIER_LEVEL_CODE
39747         qpldets.PRIMARY_UOM_FLAG, --PRIMARY_UOM_FLAG
39748 	--qppatr.PRICING_SEGMENT_ID, --SEGMENT_ID
39749 	qplaptr.derived_qualifier_flag
39750      FROM qp_npreq_ldets_tmp qpldets,
39751           QP_PRICING_ATTRIBUTES qppatr,
39752 	  qp_npreq_line_attrs_tmp qplaptr
39753      WHERE qpldets.pricing_phase_id = p_pricing_phase_id
39754        AND qpldets.line_index BETWEEN l_start_line_index AND l_end_line_index
39755        AND qpldets.CREATED_FROM_SQL = p_stage
39756        AND qppatr.list_line_id = qpldets.CREATED_FROM_LIST_LINE_ID
39757        AND qppatr.list_header_id = qpldets.CREATED_FROM_LIST_HEADER_ID --Could be removed
39758        AND qppatr.excluder_flag = G_NO
39759        AND qppatr.pricing_attribute_context IS NOT NULL
39760        AND qplaptr.LINE_INDEX = qpldets.LINE_INDEX
39761        AND qplaptr.segment_id = qppatr.PRICING_SEGMENT_ID
39762        AND qplaptr.attribute_type=G_PRICING_TYPE;
39763 
39764      l_start_line_index := l_end_line_index + 1;
39765      l_end_line_index := l_end_line_index + G_CHUNK_SIZE;
39766 
39767   END LOOP;
39768 
39769    qp_debug_util.tstop('POPULATE_PAT_TEMP_TABLES_QR3');
39770 
39771    l_satis_quals_opt := nvl(fnd_profile.value('QP_SATIS_QUALS_OPT'), G_NO);
39772 
39773 	  --[julin/pricebook] -- pat impact
39774 	  IF nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES THEN
39775 	    l_satis_quals_opt := G_NO;
39776 	  END IF;
39777 
39778    IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
39779      qp_preq_grp.engine_debug('Successfully inserted data in table qp_npreq_line_attrs_tmp');
39780      qp_preq_grp.engine_debug('Profile value QP_SATIS_QUALS_OPT => '||l_satis_quals_opt);
39781    END IF;
39782 
39783    /*
39784      Bug 10216430
39785 
39786      Rows for all the selected header level qualifiers will be inserted in table
39787      qp_npreq_line_attrs_tmp in case of PL primary search, PL Secondary search and PL big search
39788      even if the profile QP_SATIS_QUALS_OPT is No. For modifiers same will be inserted only if the
39789      profile is YES.
39790 
39791      This has been done to resolve an issue which was found during UT done for bug 10054913.
39792      The issue was that qualfier precedence of the associated header level qualfieirs with a PL
39793      were not being considered correctly during incombatibility check after PL big search.
39794      The PLs having no qualifiers were given higher precedence on the PLs having qualifiers which is
39795      contrary to the behaviour in existing engine.
39796 
39797      It was haeppening because in pattern engine, rows for satisfied qualifier attributes were
39798      missing in table qp_npreq_line_attrs_tmp. So after this fix such rows will be inserted in
39799      this table but only in case of PL search. It has not been done for the modifiers because
39800      of the performance reasons.
39801    */
39802 
39803    IF  l_satis_quals_opt = G_YES
39804        OR p_stage NOT IN (G_STAGE_CACHE_MOD_LIN, G_STAGE_CACHE_MOD_LIN2) --Bug 10216430
39805    THEN
39806 
39807      qp_debug_util.tstart('POPULATE_PAT_TEMP_TABLES_QR4','Insert Header Qualifiers in Attrs Table');
39808 
39809      /*
39810       Populating table qp_npreq_line_attrs_tmp with details of header level
39811       Qualifier Attributes for selected qualifier groups of selected modifier lines.
39812      */
39813 
39814      l_start_line_index := G_MIN_LINE_INDEX;
39815      l_end_line_index := G_MIN_LINE_INDEX+G_CHUNK_SIZE;
39816 
39817      FOR i IN 1..l_cnt_iter
39818      LOOP
39819 
39820      INSERT INTO qp_npreq_line_attrs_tmp(
39821                  LINE_INDEX,
39822                  LINE_DETAIL_INDEX,
39823                  ATTRIBUTE_LEVEL,
39824                  ATTRIBUTE_TYPE,
39825                  LIST_HEADER_ID,
39826                  LIST_LINE_ID,
39827                  CONTEXT,
39828                  ATTRIBUTE,
39829                  VALUE_FROM,
39830                  SETUP_VALUE_FROM,
39831                  VALUE_TO,
39832                  SETUP_VALUE_TO,
39833                  GROUPING_NUMBER,
39834                  COMPARISON_OPERATOR_TYPE_CODE,
39835                  VALIDATED_FLAG,
39836                  APPLIED_FLAG,
39837                  PRICING_STATUS_CODE,
39838                  PRICING_STATUS_TEXT,
39839                  QUALIFIER_PRECEDENCE,
39840                  DATATYPE,
39841                  PRICING_ATTR_FLAG,
39842                  QUALIFIER_TYPE,
39843                  PRODUCT_UOM_CODE,
39844                  EXCLUDER_FLAG,
39845                  PRICING_PHASE_ID,
39846                  INCOMPATABILITY_GRP_CODE,
39847                  LINE_DETAIL_TYPE_CODE,
39848                  MODIFIER_LEVEL_CODE,
39849                  PRIMARY_UOM_FLAG,
39850 		 --SEGMENT_ID,
39851 		 derived_qualifier_flag
39852                 )
39853       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
39854                qpldets.LINE_INDEX, --LINE_INDEX,
39855                qpldets.LINE_DETAIL_INDEX, -- LINE_DETAIL_INDEX,
39856                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
39857                qplines.ATTRIBUTE_TYPE, -- ATTRIBUTE_TYPE,
39858                qpldets.CREATED_FROM_LIST_HEADER_ID, -- LIST_HEADER_ID,
39859                qpldets.CREATED_FROM_LIST_LINE_ID, --1, -- LIST_LINE_ID,  --bug 10216430
39860                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
39861                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
39862                qplines.VALUE_FROM, -- VALUE_FROM,
39863                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
39864                qplines.VALUE_TO, -- VALUE_TO,
39865                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
39866                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
39867                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
39868                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
39869                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
39870                G_STATUS_NEW,-- PRICING_STATUS_CODE,
39871                'QUALIFIERS', -- PRICING_STATUS_TEXT,
39872                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
39873                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
39874                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
39875                'HQ', -- QUALIFIER_TYPE,
39876                null,-- PRODUCT_UOM_CODE,
39877                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
39878                p_pricing_phase_id, -- PRICING_PHASE_ID,
39879                qpldets.INCOMPATABILITY_GRP_CODE, -- INCOMPATABILITY_GRP_CODE,
39880                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
39881                qplines.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
39882                qpldets.PRIMARY_UOM_FLAG, -- PRIMARY_UOM_FLAG
39883 	       --qpq.SEGMENT_ID,
39884 	       qplines.derived_qualifier_flag
39885      FROM
39886         qp_npreq_ldets_tmp qpldets,
39887         QP_PREQ_PATRN_QUAL_TMP qppatq,
39888 	qp_qualifiers qpq,
39889 	qp_npreq_line_attrs_tmp qplines
39890      WHERE
39891           qpldets.pricing_phase_id = p_pricing_phase_id
39892       AND qpldets.line_index BETWEEN l_start_line_index AND l_end_line_index
39893       AND qpldets.CREATED_FROM_SQL = p_stage
39894       AND qppatq.LINE_INDEX = qpldets.LINE_INDEX
39895       AND qppatq.LIST_HEADER_ID = qpldets.CREATED_FROM_LIST_HEADER_ID
39896       AND qppatq.list_line_id = -1
39897       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
39898       AND qpq.list_line_id = -1
39899       AND qpq.QUALIFIER_GROUPING_NO = qppatq.GROUPING_NO
39900       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
39901       AND qplines.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
39902       AND qplines.LINE_INDEX = qppatq.LINE_INDEX
39903       UNION
39904       -- -1 qualifiers if other group exist
39905       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
39906                qpldets.LINE_INDEX, --LINE_INDEX,
39907                qpldets.LINE_DETAIL_INDEX, -- LINE_DETAIL_INDEX,
39908                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
39909                qplines.ATTRIBUTE_TYPE, -- ATTRIBUTE_TYPE,
39910                qpldets.CREATED_FROM_LIST_HEADER_ID, -- LIST_HEADER_ID,
39911                qpldets.CREATED_FROM_LIST_LINE_ID, --1, -- LIST_LINE_ID, --bug 10216430
39912                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
39913                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
39914                qplines.VALUE_FROM, -- VALUE_FROM,
39915                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
39916                qplines.VALUE_TO, -- VALUE_TO,
39917                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
39918                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
39919                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
39920                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
39921                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
39922                G_STATUS_NEW,-- PRICING_STATUS_CODE,
39923                'QUALIFIERS', -- PRICING_STATUS_TEXT,
39924                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
39925                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
39926                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
39927                'HQ', -- QUALIFIER_TYPE,
39928                null,-- PRODUCT_UOM_CODE,
39929                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
39930                p_pricing_phase_id, -- PRICING_PHASE_ID,
39931                qpldets.INCOMPATABILITY_GRP_CODE, -- INCOMPATABILITY_GRP_CODE,
39932                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
39933                qplines.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
39934                qpldets.PRIMARY_UOM_FLAG, -- PRIMARY_UOM_FLAG
39935 	       --qpq.SEGMENT_ID,
39936 	       qplines.derived_qualifier_flag
39937      FROM
39938         qp_npreq_ldets_tmp qpldets,
39939         QP_PREQ_PATRN_QUAL_TMP qppatq,
39940 	qp_qualifiers qpq,
39941 	qp_npreq_line_attrs_tmp qplines
39942      WHERE
39943           qpldets.pricing_phase_id = p_pricing_phase_id
39944       AND qpldets.line_index BETWEEN l_start_line_index AND l_end_line_index
39945       AND qpldets.CREATED_FROM_SQL = p_stage
39946       AND qppatq.LINE_INDEX = qpldets.LINE_INDEX
39947       AND qppatq.LIST_HEADER_ID = qpldets.CREATED_FROM_LIST_HEADER_ID
39948       AND qppatq.list_line_id = -1
39949       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
39950       AND qpq.list_line_id = qppatq.list_line_id
39951       AND qpq.QUALIFIER_GROUPING_NO = -1
39952       --AND qppatq.null_other_oprt_count > 0 --Bug 10216430
39953       AND qppatq.GROUPING_NO <> -1
39954       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
39955       AND qplines.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
39956       AND qplines.LINE_INDEX = qppatq.LINE_INDEX;
39957 
39958     l_start_line_index := l_end_line_index + 1;
39959     l_end_line_index := l_end_line_index + G_CHUNK_SIZE;
39960 
39961    END LOOP;
39962 
39963       qp_debug_util.tstop('POPULATE_PAT_TEMP_TABLES_QR4');
39964 
39965       IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
39966         qp_preq_grp.engine_debug('Successfully inserted header level qualifiers in table qp_npreq_line_attrs_tmp');
39967       END IF;
39968 
39969      IF p_stage IN (G_STAGE_CACHE_MOD_LIN, G_STAGE_CACHE_MOD_LIN2) THEN
39970 
39971       qp_debug_util.tstart('POPULATE_PAT_TEMP_TABLES_QR5','Insert Line Qualifiers in Attrs Table');
39972 
39973       /*
39974        Populating table qp_npreq_line_attrs_tmp with details of line level qualifier
39975        attributes for selected qualifier groups of selected modifier lines.
39976       */
39977 
39978     l_start_line_index := G_MIN_LINE_INDEX;
39979     l_end_line_index := G_MIN_LINE_INDEX+G_CHUNK_SIZE;
39980 
39981     FOR i IN 1..l_cnt_iter
39982     LOOP
39983 
39984       INSERT INTO qp_npreq_line_attrs_tmp(
39985                  LINE_INDEX,
39986                  LINE_DETAIL_INDEX,
39987                  ATTRIBUTE_LEVEL,
39988                  ATTRIBUTE_TYPE,
39989                  LIST_HEADER_ID,
39990                  LIST_LINE_ID,
39991                  CONTEXT,
39992                  ATTRIBUTE,
39993                  VALUE_FROM,
39994                  SETUP_VALUE_FROM,
39995                  VALUE_TO,
39996                  SETUP_VALUE_TO,
39997                  GROUPING_NUMBER,
39998                  COMPARISON_OPERATOR_TYPE_CODE,
39999                  VALIDATED_FLAG,
40000                  APPLIED_FLAG,
40001                  PRICING_STATUS_CODE,
40002                  PRICING_STATUS_TEXT,
40003                  QUALIFIER_PRECEDENCE,
40004                  DATATYPE,
40005                  PRICING_ATTR_FLAG,
40006                  QUALIFIER_TYPE,
40007                  PRODUCT_UOM_CODE,
40008                  EXCLUDER_FLAG,
40009                  PRICING_PHASE_ID,
40010                  INCOMPATABILITY_GRP_CODE,
40011                  LINE_DETAIL_TYPE_CODE,
40012                  MODIFIER_LEVEL_CODE,
40013                  PRIMARY_UOM_FLAG,
40014                  --SEGMENT_ID,
40015 		 derived_qualifier_flag
40016                 )
40017       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
40018                qpldets.LINE_INDEX, --LINE_INDEX,
40019                qpldets.LINE_DETAIL_INDEX, -- LINE_DETAIL_INDEX,
40020                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
40021                qplines.ATTRIBUTE_TYPE, -- ATTRIBUTE_TYPE,
40022                qpldets.CREATED_FROM_LIST_HEADER_ID, -- LIST_HEADER_ID,
40023                qpldets.CREATED_FROM_LIST_LINE_ID, -- LIST_LINE_ID,
40024                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
40025                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
40026                qplines.VALUE_FROM, -- VALUE_FROM,
40027                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
40028                qplines.VALUE_TO, -- VALUE_TO,
40029                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
40030                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
40031                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
40032                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
40033                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
40034                G_STATUS_NEW,-- PRICING_STATUS_CODE,
40035                'LINE QUALIFIERS', -- PRICING_STATUS_TEXT,
40036                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
40037                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
40038                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
40039                'LQ', -- QUALIFIER_TYPE,
40040                null,-- PRODUCT_UOM_CODE,
40041                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
40042                p_pricing_phase_id, -- PRICING_PHASE_ID,
40043                qpldets.INCOMPATABILITY_GRP_CODE, -- INCOMPATABILITY_GRP_CODE,
40044                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
40045                qplines.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
40046                qpldets.PRIMARY_UOM_FLAG, -- PRIMARY_UOM_FLAG
40047 	       --qpq.SEGMENT_ID,
40048 	       qplines.derived_qualifier_flag
40049      FROM
40050         qp_npreq_ldets_tmp qpldets,
40051         QP_PREQ_PATRN_QUAL_TMP qppatq,
40052 	qp_qualifiers qpq,
40053 	qp_npreq_line_attrs_tmp qplines
40054      WHERE
40055           qpldets.pricing_phase_id = p_pricing_phase_id
40056       AND qpldets.line_index BETWEEN l_start_line_index AND l_end_line_index
40057       AND qpldets.CREATED_FROM_SQL = p_stage
40058       AND qppatq.LINE_INDEX = qpldets.LINE_INDEX
40059       AND qppatq.LIST_HEADER_ID = qpldets.CREATED_FROM_LIST_HEADER_ID
40060       AND qppatq.list_line_id = qpldets.CREATED_FROM_LIST_LINE_ID
40061       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
40062       AND qpq.list_line_id = qppatq.list_line_id
40063       AND qpq.QUALIFIER_GROUPING_NO = qppatq.GROUPING_NO
40064       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
40065       AND qplines.LINE_INDEX = qppatq.LINE_INDEX
40066       UNION all
40067       -- -1 qualifiers if other group exist
40068       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
40069                qpldets.LINE_INDEX, --LINE_INDEX,
40070                qpldets.LINE_DETAIL_INDEX, -- LINE_DETAIL_INDEX,
40071                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
40072                qplines.ATTRIBUTE_TYPE, -- ATTRIBUTE_TYPE,
40073                qpldets.CREATED_FROM_LIST_HEADER_ID, -- LIST_HEADER_ID,
40074                qpldets.CREATED_FROM_LIST_LINE_ID, -- LIST_LINE_ID,
40075                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
40076                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
40077                qplines.VALUE_FROM, -- VALUE_FROM,
40078                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
40079                qplines.VALUE_TO, -- VALUE_TO,
40080                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
40081                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
40082                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
40083                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
40084                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
40085                G_STATUS_NEW,-- PRICING_STATUS_CODE,
40086                'LINE QUALIFIERS', -- PRICING_STATUS_TEXT,
40087                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
40088                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
40089                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
40090                'LQ', -- QUALIFIER_TYPE,
40091                null,-- PRODUCT_UOM_CODE,
40092                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
40093                p_pricing_phase_id, -- PRICING_PHASE_ID,
40094                qpldets.INCOMPATABILITY_GRP_CODE, -- INCOMPATABILITY_GRP_CODE,
40095                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
40096                qplines.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
40097                qpldets.PRIMARY_UOM_FLAG, -- PRIMARY_UOM_FLAG
40098 	       --qpq.SEGMENT_ID,
40099 	       qplines.derived_qualifier_flag
40100      FROM
40101         qp_npreq_ldets_tmp qpldets,
40102         QP_PREQ_PATRN_QUAL_TMP qppatq,
40103 	qp_qualifiers qpq,
40104 	qp_npreq_line_attrs_tmp qplines
40105      WHERE
40106           qpldets.pricing_phase_id = p_pricing_phase_id
40107       AND qpldets.line_index BETWEEN l_start_line_index AND l_end_line_index
40108       AND qpldets.CREATED_FROM_SQL = p_stage
40109       AND qppatq.LINE_INDEX = qpldets.LINE_INDEX
40110       AND qppatq.LIST_HEADER_ID = qpldets.CREATED_FROM_LIST_HEADER_ID
40111       AND qppatq.list_line_id = qpldets.CREATED_FROM_LIST_LINE_ID
40112       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
40113       AND qpq.list_line_id = qppatq.list_line_id
40114       AND qpq.QUALIFIER_GROUPING_NO = -1
40115       AND qppatq.null_other_oprt_count > 0
40116       AND qppatq.GROUPING_NO <> -1
40117       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
40118       AND qplines.LINE_INDEX = qppatq.LINE_INDEX;
40119 
40120     l_start_line_index := l_end_line_index + 1;
40121     l_end_line_index := l_end_line_index + G_CHUNK_SIZE;
40122 
40123     END LOOP;
40124 
40125      qp_debug_util.tstop('POPULATE_PAT_TEMP_TABLES_QR5');
40126 
40127      IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40128         qp_preq_grp.engine_debug('Successfully inserted line level qualifiers in table qp_npreq_line_attrs_tmp');
40129      END IF;
40130 
40131    END IF; -- IF p_stage IN (
40132   END IF;
40133 
40134   -- Updating line quantity in ldets table for all the selected modifier lines
40135   -- and storing sourced value for the pricing volume attribute used in the line.
40136   -- Group of line modifiers will not be considered here. Line quantity will be
40137   -- updated later in evaluate_between procedure for them.
40138 
40139   UPDATE qp_npreq_ldets_tmp a
40140   SET a.line_quantity = ( SELECT VALUE_FROM
40141                           FROM qp_npreq_line_attrs_tmp b
40142 			  WHERE b.LINE_INDEX = a.LINE_INDEX
40143 			    AND b.LINE_DETAIL_INDEX = a.LINE_DETAIL_INDEX
40144 			    AND b.context = G_PRIC_VOLUME_CONTEXT
40145 			    AND b.attribute_type = G_PRICING_TYPE
40146 			    AND b.pricing_phase_id = p_pricing_phase_id
40147 			    AND b.datatype = G_NUMERIC
40148 			    AND b.pricing_status_code = G_STATUS_NEW)
40149   WHERE a.pricing_phase_id = p_pricing_phase_id
40150     AND a.CREATED_FROM_SQL = p_stage
40151     AND a.MODIFIER_LEVEL_CODE <> G_LINE_GROUP;
40152 
40153   IF p_stage IN (G_STAGE_CACHE_SEC_PL_LIN_SRCH, G_STAGE_CACHE_SEC_PL_LIN_SRCH2) THEN
40154 
40155        UPDATE qp_npreq_line_attrs_tmp a
40156 	SET a.QUALIFIER_PRECEDENCE = (SELECT /*+ index(b qp_preq_patrn_qual_t_n2) */
40157 	                                -- DISTINCT QUALIFIER_PRECEDENCE --bug 12731268
40158 					MIN(QUALIFIER_PRECEDENCE) --Bug 10216430
40159 	                              FROM QP_PREQ_PATRN_QUAL_TMP b
40160 				      WHERE b.LINE_INDEX = a.line_index
40161 				      AND b.list_header_id = a.list_header_id
40162 				      AND b.LIST_LINE_ID = a.LIST_LINE_ID
40163                                       AND b.stage = p_stage
40164 				      AND b.grouping_no = a.GROUPING_NUMBER --bug 12731268
40165 				      AND b.pricing_phase_id = p_pricing_phase_id
40166 				      AND b.pricing_status_code = G_STATUS_UNCHANGED)
40167         WHERE a.pricing_phase_id = p_pricing_phase_id
40168 	 AND  a.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
40169 	 AND  a.pricing_status_code = G_STATUS_NEW
40170 	 AND  a.LINE_DETAIL_INDEX IS NOT NULL;
40171     END IF;
40172 
40173   x_status_code := FND_API.G_RET_STS_SUCCESS;
40174 
40175   IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40176      qp_preq_grp.engine_debug('Exiting ' || l_routine);
40177   END IF;
40178 
40179 EXCEPTION
40180 WHEN OTHERS THEN
40181    IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40182      qp_preq_grp.engine_debug('Exception occured - '||sqlerrm);
40183    END IF;
40184    x_status_text := l_routine||' '||SQLERRM;
40185    x_status_code := FND_API.G_RET_STS_ERROR;
40186 
40187 END Populate_Pat_Temp_Tables;
40188 
40189 PROCEDURE Populate_Temp_Tables_NEQ_BTW(
40190     p_pricing_phase_id IN  NUMBER,
40191     p_stage IN VARCHAR2,
40192     x_status_code OUT NOCOPY VARCHAR2,
40193     x_status_text OUT NOCOPY VARCHAR2)
40194 AS
40195 
40196   l_routine VARCHAR2(240):='Routine : QP_PREQ_GRP.Populate_Temp_Tables_NEQ_BTW';
40197 
40198 BEGIN
40199 
40200   x_status_code := FND_API.G_RET_STS_SUCCESS;
40201 
40202   IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40203      qp_preq_grp.engine_debug('Entering ' || l_routine);
40204      qp_preq_grp.engine_debug('p_pricing_phase_id => '||p_pricing_phase_id);
40205      qp_preq_grp.engine_debug('p_stage => '||p_stage);
40206   END IF;
40207 
40208   IF p_stage IN (G_STAGE_CACHE_MOD_LIN , G_STAGE_CACHE_MOD_LIN2) THEN
40209      /*
40210       Populating table qp_npreq_line_attrs_tmp with details of line level qualifier
40211       attributes having operator Between or Not = for all selected modifier line
40212       after line level pattern matching.
40213      */
40214          INSERT INTO qp_npreq_line_attrs_tmp(
40215                  LINE_INDEX,
40216                  LINE_DETAIL_INDEX,
40217                  ATTRIBUTE_LEVEL,
40218                  ATTRIBUTE_TYPE,
40219                  LIST_HEADER_ID,
40220                  LIST_LINE_ID,
40221                  CONTEXT,
40222                  ATTRIBUTE,
40223                  VALUE_FROM,
40224                  SETUP_VALUE_FROM,
40225                  VALUE_TO,
40226                  SETUP_VALUE_TO,
40227                  GROUPING_NUMBER,
40228                  COMPARISON_OPERATOR_TYPE_CODE,
40229                  VALIDATED_FLAG,
40230                  APPLIED_FLAG,
40231                  PRICING_STATUS_CODE,
40232                  PRICING_STATUS_TEXT,
40233                  QUALIFIER_PRECEDENCE,
40234                  DATATYPE,
40235                  PRICING_ATTR_FLAG,
40236                  QUALIFIER_TYPE,
40237                  EXCLUDER_FLAG,
40238                  PRICING_PHASE_ID,
40239                  LINE_DETAIL_TYPE_CODE,
40240                  MODIFIER_LEVEL_CODE,
40241                  --SEGMENT_ID,
40242 		 derived_qualifier_flag
40243                 )
40244       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
40245                qppatq.LINE_INDEX, --LINE_INDEX,
40246                NULL, -- LINE_DETAIL_INDEX,
40247                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
40248                QP_PREQ_GRP.G_QUALIFIER_TYPE, -- ATTRIBUTE_TYPE,
40249                qppatq.LIST_HEADER_ID, -- LIST_HEADER_ID,
40250                qppatq.LIST_LINE_ID, -- LIST_LINE_ID,
40251                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
40252                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
40253                qplines.VALUE_FROM, -- VALUE_FROM,
40254                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
40255                qplines.VALUE_TO, -- VALUE_TO,
40256                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
40257                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
40258                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
40259                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
40260                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
40261                p_stage,-- PRICING_STATUS_CODE,
40262                'LINE QUALIFIERS - OPR_BET_NEQ', -- PRICING_STATUS_TEXT,
40263                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
40264                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
40265                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
40266                'LQ', -- QUALIFIER_TYPE,
40267                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
40268                p_pricing_phase_id, -- PRICING_PHASE_ID,
40269                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
40270                qppatq.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
40271 	       --qplines.SEGMENT_ID,
40272 	       qplines.derived_qualifier_flag
40273      FROM
40274         QP_PREQ_PATRN_QUAL_TMP qppatq,
40275 	qp_qualifiers qpq,
40276 	qp_npreq_line_attrs_tmp qplines
40277      WHERE
40278           qppatq.pricing_phase_id = p_pricing_phase_id
40279       AND qppatq.stage = p_stage
40280       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
40281       AND qppatq.list_line_id  <> -1
40282       AND qpq.list_line_id = qppatq.list_line_id
40283       AND qpq.QUALIFIER_GROUPING_NO = qppatq.GROUPING_NO
40284       AND qpq.COMPARISON_OPERATOR_CODE IN (QP_PREQ_GRP.G_OPERATOR_BETWEEN, G_OPERATOR_NOT_EQL)
40285       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
40286       AND qplines.LINE_INDEX = qppatq.LINE_INDEX
40287       AND qppatq.eq_flag = G_NO
40288       AND ((nvl(qplines.DERIVED_QUALIFIER_FLAG,'N')='N')
40289           OR (qplines.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
40290       UNION all
40291       -- -1 qualifiers if other group exist
40292       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
40293                qppatq.LINE_INDEX, --LINE_INDEX,
40294                null, -- LINE_DETAIL_INDEX,
40295                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
40296                QP_PREQ_GRP.G_QUALIFIER_TYPE, -- ATTRIBUTE_TYPE,
40297                qppatq.LIST_HEADER_ID, -- LIST_HEADER_ID,
40298                qppatq.LIST_LINE_ID, -- LIST_LINE_ID,
40299                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
40300                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
40301                qplines.VALUE_FROM, -- VALUE_FROM,
40302                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
40303                qplines.VALUE_TO, -- VALUE_TO,
40304                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
40305                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
40306                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
40307                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
40308                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
40309                p_stage,-- PRICING_STATUS_CODE,
40310                'LINE QUALIFIERS - OPR_BET_NEQ', -- PRICING_STATUS_TEXT,
40311                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
40312                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
40313                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
40314                'LQ', -- QUALIFIER_TYPE,
40315                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
40316                p_pricing_phase_id, -- PRICING_PHASE_ID,
40317                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
40318                qppatq.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
40319 	       --qplines.SEGMENT_ID,
40320 	       qplines.derived_qualifier_flag
40321      FROM
40322         QP_PREQ_PATRN_QUAL_TMP qppatq,
40323 	qp_qualifiers qpq,
40324 	qp_npreq_line_attrs_tmp qplines
40325      WHERE
40326           qppatq.pricing_phase_id = p_pricing_phase_id
40327       AND qppatq.stage = p_stage
40328       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
40329       AND qppatq.list_line_id  <> -1
40330       AND qpq.list_line_id = qppatq.list_line_id
40331       AND qpq.QUALIFIER_GROUPING_NO = -1
40332       AND qpq.COMPARISON_OPERATOR_CODE IN (QP_PREQ_GRP.G_OPERATOR_BETWEEN, G_OPERATOR_NOT_EQL)
40333       AND qppatq.null_other_oprt_count > 0
40334       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
40335       AND qplines.LINE_INDEX = qppatq.LINE_INDEX
40336       AND qppatq.eq_flag = G_NO
40337       AND ((nvl(qplines.DERIVED_QUALIFIER_FLAG,'N')='N')
40338           OR (qplines.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')); -- Added for TCA
40339 
40340      IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40341         qp_preq_grp.engine_debug('Successfully inserted Line level BETWEEN , Not = Qualifiers Attributes in table qp_npreq_line_attrs_tmp');
40342      END IF;
40343 
40344   END IF;
40345 
40346   IF p_stage IN (G_STAGE_CACHE_MOD_LIN,
40347                  G_STAGE_CACHE_PL_LIN,
40348 		 G_STAGE_CACHE_LST_HDR_LIN_SRCH,
40349 		 G_STAGE_CACHE_SEC_PL_LIN_SRCH,
40350 		 G_STAGE_CACHE_PL_LIN2,
40351 		 G_STAGE_CACHE_MOD_LIN2,
40352 		 G_STAGE_CACHE_SEC_PL_LIN_SRCH2
40353 		 ) THEN
40354 
40355     /*
40356       Populating table qp_npreq_line_attrs_tmp with details of Pricing Attributes
40357       having operator Between or Not = for all selected modifier line after line
40358       level pattern matching.
40359     */
40360 
40361     INSERT INTO qp_npreq_line_attrs_tmp(
40362                  LINE_INDEX,
40363                  LINE_DETAIL_INDEX,
40364                  ATTRIBUTE_LEVEL,
40365                  ATTRIBUTE_TYPE,
40366                  LIST_HEADER_ID,
40367                  LIST_LINE_ID,
40368                  CONTEXT,
40369                  ATTRIBUTE,
40370                  VALUE_FROM,
40371                  SETUP_VALUE_FROM,
40372                  VALUE_TO,
40373                  SETUP_VALUE_TO,
40374                  GROUPING_NUMBER,
40375                  COMPARISON_OPERATOR_TYPE_CODE,
40376                  VALIDATED_FLAG,
40377                  APPLIED_FLAG,
40378                  PRICING_STATUS_CODE,
40379                  PRICING_STATUS_TEXT,
40380                  QUALIFIER_PRECEDENCE,
40381                  DATATYPE,
40382                  PRICING_ATTR_FLAG,
40383                  QUALIFIER_TYPE,
40384                  PRODUCT_UOM_CODE,
40385                  EXCLUDER_FLAG,
40386                  PRICING_PHASE_ID,
40387                  INCOMPATABILITY_GRP_CODE,
40388                  LINE_DETAIL_TYPE_CODE,
40389                  MODIFIER_LEVEL_CODE,
40390                  PRIMARY_UOM_FLAG,
40391 		 --SEGMENT_ID,
40392 		 derived_qualifier_flag
40393                 )
40394      SELECT /*+ index(qplaptr qp_preq_line_attrs_tmp_n8) */
40395        qppat.LINE_INDEX, --LINE_INDEX
40396         NULL, --LINE_DETAIL_INDEX
40397         qplaptr.ATTRIBUTE_LEVEL, --ATTRIBUTE_LEVEL
40398         QP_PREQ_GRP.G_PRICING_TYPE, --ATTRIBUTE_TYPE
40399         qppat.list_header_id, --LIST_HEADER_ID
40400         qppat.list_line_id, --LIST_LINE_ID
40401         qppatr.PRICING_ATTRIBUTE_CONTEXT, --CONTEXT
40402         qppatr.PRICING_ATTRIBUTE, --ATTRIBUTE
40403         qplaptr.VALUE_FROM, --VALUE_FROM
40404         qppatr.PRICING_ATTR_VALUE_FROM,--SETUP_VALUE_FROM
40405         qplaptr.VALUE_TO,--VALUE_TO
40406         qppatr.PRICING_ATTR_VALUE_TO,--SETUP_VALUE_TO
40407         -1,--GROUPING_NUMBER
40408         qppatr.COMPARISON_OPERATOR_CODE,--COMPARISON_OPERATOR_TYPE_CODE
40409         qplaptr.VALIDATED_FLAG,--VALIDATED_FLAG
40410         qplaptr.APPLIED_FLAG,--APPLIED_FLAG
40411         p_stage,--QP_PREQ_GRP.G_STATUS_UNCHANGED,--PRICING_STATUS_CODE --Check this attribute
40412         'Pricing Attribute - OPR_BET_NEQ',--PRICING_STATUS_TEXT --Check this attribute
40413         NULL,--QUALIFIER_PRECEDENCE
40414         qppatr.PRICING_ATTRIBUTE_DATATYPE,--DATATYPE
40415         qplaptr.PRICING_ATTR_FLAG,--PRICING_ATTR_FLAG
40416         'NO',--QUALIFIER_TYPE
40417         NULL, --qplines.PRODUCT_UOM_CODE, --PRODUCT_UOM_CODE
40418         qppatr.excluder_flag, --EXCLUDER_FLAG
40419         qppat.pricing_phase_id, --PRICING_PHASE_ID
40420         NULL, --qplines.INCOMPATIBILITY_GRP_CODE, --INCOMPATABILITY_GRP_CODE
40421         'NULL', --LINE_DETAIL_TYPE_CODE
40422         qppat.MODIFIER_LEVEL_CODE, --MODIFIER_LEVEL_CODE
40423         NULL, --qplines.PRIMARY_UOM_FLAG, --PRIMARY_UOM_FLAG
40424 	--qplaptr.SEGMENT_ID, --SEGMENT_ID
40425 	qplaptr.derived_qualifier_flag
40426      FROM
40427          (
40428 	   SELECT DISTINCT pricing_phase_id, line_index, list_header_id, list_line_id,
40429 	      eq_flag, MODIFIER_LEVEL_CODE
40430            FROM QP_PREQ_PATRN_QUAL_TMP
40431 	   WHERE stage = p_stage
40432 	  )qppat,
40433           QP_PRICING_ATTRIBUTES qppatr,
40434 	  qp_npreq_line_attrs_tmp qplaptr
40435      WHERE qppat.pricing_phase_id = p_pricing_phase_id
40436        AND qppatr.list_line_id = qppat.list_line_id
40437        AND qppatr.excluder_flag = G_NO
40438        AND qppat.eq_flag = G_NO
40439        AND qppatr.pricing_attribute_context IS NOT NULL
40440        AND qppatr.COMPARISON_OPERATOR_CODE IN (QP_PREQ_GRP.G_OPERATOR_BETWEEN, G_OPERATOR_NOT_EQL)
40441        AND qplaptr.LINE_INDEX = qppat.LINE_INDEX
40442        AND qplaptr.segment_id = qppatr.PRICING_SEGMENT_ID
40443        AND qplaptr.attribute_type = G_PRICING_TYPE;
40444 
40445    IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40446       qp_preq_grp.engine_debug('Successfully inserted  BETWEEN , Not = Pricing Attributes in table qp_npreq_line_attrs_tmp');
40447     END IF;
40448 
40449 END if;
40450 
40451 IF p_stage IN (G_STAGE_CACHE_MOD_HDR,
40452                G_STAGE_CACHE_LST_HDR_LIN_SRCH,
40453 	       G_STAGE_CACHE_SEC_PL_HDR_SRCH,
40454 	       G_STAGE_CACHE_PL_HDR,
40455 	       G_STAGE_CACHE_PL_LIN2,
40456 	       G_STAGE_CACHE_MOD_LIN2,
40457 	       G_STAGE_CACHE_SEC_PL_LIN_SRCH2) THEN
40458 
40459      /*
40460       Populating table qp_npreq_line_attrs_tmp with details of header level qualifier
40461       attributes having operator Between or Not = for all selected modifier line after
40462       header level pattern matching.
40463      */
40464 
40465          INSERT INTO qp_npreq_line_attrs_tmp(
40466                  LINE_INDEX,
40467                  LINE_DETAIL_INDEX,
40468                  ATTRIBUTE_LEVEL,
40469                  ATTRIBUTE_TYPE,
40470                  LIST_HEADER_ID,
40471                  LIST_LINE_ID,
40472                  CONTEXT,
40473                  ATTRIBUTE,
40474                  VALUE_FROM,
40475                  SETUP_VALUE_FROM,
40476                  VALUE_TO,
40477                  SETUP_VALUE_TO,
40478                  GROUPING_NUMBER,
40479                  COMPARISON_OPERATOR_TYPE_CODE,
40480                  VALIDATED_FLAG,
40481                  APPLIED_FLAG,
40482                  PRICING_STATUS_CODE,
40483                  PRICING_STATUS_TEXT,
40484                  QUALIFIER_PRECEDENCE,
40485                  DATATYPE,
40486                  PRICING_ATTR_FLAG,
40487                  QUALIFIER_TYPE,
40488                  EXCLUDER_FLAG,
40489                  PRICING_PHASE_ID,
40490                  LINE_DETAIL_TYPE_CODE,
40491                  MODIFIER_LEVEL_CODE,
40492                  --SEGMENT_ID,
40493 		 derived_qualifier_flag
40494                 )
40495       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1) index(qplines qp_preq_line_attrs_tmp_n8) index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
40496                qppatq.LINE_INDEX, --LINE_INDEX,
40497                NULL, -- LINE_DETAIL_INDEX,
40498                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
40499                QP_PREQ_GRP.G_QUALIFIER_TYPE, -- ATTRIBUTE_TYPE,
40500                qppatq.LIST_HEADER_ID, -- LIST_HEADER_ID,
40501                qppatq.LIST_LINE_ID, -- LIST_LINE_ID,
40502                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
40503                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
40504                qplines.VALUE_FROM, -- VALUE_FROM,
40505                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
40506                qplines.VALUE_TO, -- VALUE_TO,
40507                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
40508                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
40509                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
40510                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
40511                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
40512                p_stage,-- PRICING_STATUS_CODE,
40513                'HEADER QUALIFIERS - OPR_BET_NEQ', -- PRICING_STATUS_TEXT,
40514                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
40515                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
40516                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
40517                'HQ', -- QUALIFIER_TYPE,
40518                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
40519                p_pricing_phase_id, -- PRICING_PHASE_ID,
40520                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
40521                qppatq.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
40522 	       --qplines.SEGMENT_ID,
40523 	       qplines.derived_qualifier_flag
40524      FROM
40525         QP_PREQ_PATRN_QUAL_TMP qppatq,
40526 	qp_qualifiers qpq,
40527 	qp_npreq_line_attrs_tmp qplines
40528      WHERE
40529           qppatq.pricing_phase_id = p_pricing_phase_id
40530       AND qppatq.stage = p_stage
40531       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
40532       AND qppatq.list_line_id = -1
40533       AND qpq.list_line_id = -1
40534       AND qpq.QUALIFIER_GROUPING_NO = qppatq.GROUPING_NO
40535       AND qpq.COMPARISON_OPERATOR_CODE IN (QP_PREQ_GRP.G_OPERATOR_BETWEEN, G_OPERATOR_NOT_EQL)
40536       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
40537       AND qplines.LINE_INDEX = qppatq.LINE_INDEX
40538       AND qppatq.eq_flag = G_NO
40539       AND ((nvl(qplines.DERIVED_QUALIFIER_FLAG,'N')='N')
40540           OR (qplines.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
40541       UNION all
40542       -- -1 qualifiers if other group exist
40543       SELECT /*+ ORDERED index(qpq QP_QUALIFIERS_N1)
40544                  index(qplines qp_preq_line_attrs_tmp_n8)
40545 		 index(qppatq QP_PREQ_PATRN_QUAL_T_N2) */
40546                DISTINCT qppatq.LINE_INDEX, --LINE_INDEX,
40547                null, -- LINE_DETAIL_INDEX,
40548                qplines.ATTRIBUTE_LEVEL, -- ATTRIBUTE_LEVEL,
40549                QP_PREQ_GRP.G_QUALIFIER_TYPE, -- ATTRIBUTE_TYPE,
40550                qppatq.LIST_HEADER_ID, -- LIST_HEADER_ID,
40551                qppatq.LIST_LINE_ID, -- LIST_LINE_ID,
40552                qpq.QUALIFIER_CONTEXT, -- CONTEXT,
40553                qpq.QUALIFIER_ATTRIBUTE,-- ATTRIBUTE,
40554                qplines.VALUE_FROM, -- VALUE_FROM,
40555                qpq.QUALIFIER_ATTR_VALUE, --SETUP_VALUE_FROM,
40556                qplines.VALUE_TO, -- VALUE_TO,
40557                qpq.QUALIFIER_ATTR_VALUE_TO, -- SETUP_VALUE_TO,
40558                qpq.QUALIFIER_GROUPING_NO, -- GROUPING_NUMBER,
40559                qpq.COMPARISON_OPERATOR_CODE, -- COMPARISON_OPERATOR_TYPE_CODE,
40560                qplines.VALIDATED_FLAG, -- VALIDATED_FLAG,
40561                qplines.APPLIED_FLAG, -- APPLIED_FLAG,
40562                p_stage,-- PRICING_STATUS_CODE,
40563                'HEADER QUALIFIERS - OPR_BET_NEQ', -- PRICING_STATUS_TEXT,
40564                qpq.QUALIFIER_PRECEDENCE, -- QUALIFIER_PRECEDENCE,
40565                qpq.QUALIFIER_DATATYPE, -- DATATYPE,
40566                QP_PREQ_GRP.G_NO, --PRICING_ATTR_FLAG,
40567                'HQ', -- QUALIFIER_TYPE,
40568                qpq.EXCLUDER_FLAG, --EXCLUDER_FLAG,
40569                p_pricing_phase_id, -- PRICING_PHASE_ID,
40570                qplines.LINE_DETAIL_TYPE_CODE, -- LINE_DETAIL_TYPE_CODE,
40571                qppatq.MODIFIER_LEVEL_CODE, -- MODIFIER_LEVEL_CODE,
40572 	       --qplines.SEGMENT_ID,
40573 		qplines.derived_qualifier_flag
40574      FROM
40575         QP_PREQ_PATRN_QUAL_TMP qppatq,
40576 	qp_qualifiers qpq,
40577 	qp_npreq_line_attrs_tmp qplines
40578      WHERE
40579           qppatq.pricing_phase_id = p_pricing_phase_id
40580       AND qppatq.stage = p_stage
40581       AND qpq.LIST_HEADER_ID = qppatq.LIST_HEADER_ID
40582       AND qppatq.list_line_id = -1
40583       AND qpq.list_line_id = -1
40584       AND qpq.QUALIFIER_GROUPING_NO = -1
40585       AND qpq.COMPARISON_OPERATOR_CODE IN (QP_PREQ_GRP.G_OPERATOR_BETWEEN, G_OPERATOR_NOT_EQL)
40586       AND qppatq.null_other_oprt_count > 0
40587       AND qppatq.GROUPING_NO <> -1
40588       AND qplines.SEGMENT_ID = qpq.SEGMENT_ID
40589       AND qplines.LINE_INDEX = qppatq.LINE_INDEX
40590       AND qppatq.eq_flag = G_NO
40591       AND ((nvl(qplines.DERIVED_QUALIFIER_FLAG,'N')='N')
40592           OR (qplines.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')); -- Added for TCA
40593 
40594      IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40595         qp_preq_grp.engine_debug('Successfully inserted Header level BETWEEN , Not = Qualifiers Attributes in table qp_npreq_line_attrs_tmp');
40596      END IF;
40597 
40598 END IF;
40599 
40600  IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40601     qp_preq_grp.engine_debug('Exiting ' || l_routine);
40602  END IF;
40603 
40604 EXCEPTION
40605 WHEN OTHERS THEN
40606    IF qp_preq_grp.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
40607       qp_preq_grp.engine_debug('Exception occured - '||SQLERRM);
40608    END IF;
40609    x_status_text := l_routine||' '||SQLERRM;
40610    x_status_code := FND_API.G_RET_STS_ERROR;
40611 END Populate_Temp_Tables_NEQ_BTW;
40612 
40613 -- End: KDURGASI changes for pattern based select modifiers
40614 
40615 /*+------------------------------------------------------------
40616   |PROCEDURE PRICE_REQUEST
40617   +------------------------------------------------------------
40618 */
40619 
40620 PROCEDURE PRICE_REQUEST
40621 (p_line_tbl               IN   LINE_TBL_TYPE,
40622  p_qual_tbl               IN   QUAL_TBL_TYPE,
40623  p_line_attr_tbl          IN   LINE_ATTR_TBL_TYPE,
40624  p_LINE_DETAIL_tbl        IN   LINE_DETAIL_TBL_TYPE,
40625  p_LINE_DETAIL_qual_tbl   IN   LINE_DETAIL_QUAL_TBL_TYPE,
40626  p_LINE_DETAIL_attr_tbl   IN   LINE_DETAIL_ATTR_TBL_TYPE,
40627  p_related_lines_tbl      IN   RELATED_LINES_TBL_TYPE,
40628  p_control_rec            IN   CONTROL_RECORD_TYPE,
40629  x_line_tbl               OUT  NOCOPY LINE_TBL_TYPE,
40630  x_line_qual              OUT  NOCOPY QUAL_TBL_TYPE,
40631  x_line_attr_tbl          OUT  NOCOPY LINE_ATTR_TBL_TYPE,
40632  x_line_detail_tbl        OUT  NOCOPY LINE_DETAIL_TBL_TYPE,
40633  x_line_detail_qual_tbl   OUT  NOCOPY LINE_DETAIL_QUAL_TBL_TYPE,
40634  x_line_detail_attr_tbl   OUT  NOCOPY LINE_DETAIL_ATTR_TBL_TYPE,
40635  x_related_lines_tbl      OUT  NOCOPY RELATED_LINES_TBL_TYPE,
40636  x_return_status          OUT NOCOPY VARCHAR2,
40637  x_return_status_text     OUT NOCOPY VARCHAR2
40638  ) AS
40639 
40640 
40641  l_line_tbl               LINE_TBL_TYPE;
40642  l_line_qual              QUAL_TBL_TYPE;
40643  l_line_attr_tbl          LINE_ATTR_TBL_TYPE;
40644  l_line_detail_tbl        LINE_DETAIL_TBL_TYPE;
40645  l_line_detail_qual_tbl   LINE_DETAIL_QUAL_TBL_TYPE;
40646  l_line_detail_attr_tbl   LINE_DETAIL_ATTR_TBL_TYPE;
40647  l_related_lines_tbl      RELATED_LINES_TBL_TYPE;
40648  l_line_index		      PLS_INTEGER;
40649  x_list_line_id		  PLS_INTEGER;
40650  l_list_price	            NUMBER;
40651  l_list_line_id             NUMBER;
40652  l_return_status            VARCHAR2(240);
40653  l_pricing_phase_id         PLS_INTEGER;
40654  l_line_quantity            NUMBER;
40655  l_line_uom_code            VARCHAR2(30);
40656  l_priced_quantity          NUMBER;
40657  l_priced_uom_code          VARCHAR2(30);
40658  l_GSA_Enabled_Flag         VARCHAR2(1);
40659  l_GSA_Qualifier_Flag	    VARCHAR2(1);
40660  l_incompat_resolve_code    VARCHAR2(30);
40661  l_GSA_Max_Discount_Enabled CONSTANT VARCHAR2(30) := 'QP_VERIFY_GSA';
40662  l_status_text              VARCHAR2(240);
40663  l_further_search           VARCHAR2(1) := 'N';
40664  l_dummy                    VARCHAR2(30);
40665  l_routine                  VARCHAR2(30);
40666  l_pricing_effective_date   DATE;
40667  l_volume_attribute	    VARCHAR2(30);
40668  l_bypass_pricing           VARCHAR2(30);
40669  I                          PLS_INTEGER;
40670  l_FIXED_PRICE              CONSTANT NUMBER := 11.99;
40671  l_pricelist_phase_count    PLS_INTEGER:=0;
40672  l_discount_phase_count     PLS_INTEGER:=0;
40673  l_disc_exist_flag          VARCHAR2(1) := 'N';
40674  l_rounding_flag            VARCHAR2(1):=NULL;
40675  l_rounding_factor          PLS_INTEGER:=0;
40676  l_rare_phase_id            PLS_INTEGER:=5;
40677  l_exec_flag                VARCHAR2(3):=G_YES;
40678  l_pricing_status_code      VARCHAR2(30);
40679  l_pricing_phase            NUMBER;
40680  l_price_phase_flag         BOOLEAN;
40681  l_freeze_override_flag     VARCHAR2(3);
40682  l_output_file			 VARCHAR2(240);
40683  v_debug_switch    CONSTANT VARCHAR2(30) := 'QP_DEBUG';
40684  v_om_debug_switch    CONSTANT VARCHAR2(30) := 'ONT_DEBUG_LEVEL';
40685  l_max_line_detail_index    PLS_INTEGER;
40686  l_price_flag_indx          NUMBER;
40687  l_price_flag_yes_only      VARCHAR2(1);
40688  l_header_limit_exists      VARCHAR2(1);
40689  l_line_limit_exists        VARCHAR2(1);
40690  v_order_amount             NUMBER;
40691  l_pricing_start_time       NUMBER;
40692  l_pricing_end_time         NUMBER;
40693  l_time_difference          NUMBER;
40694  l_pricing_start_redo       NUMBER;
40695  l_pricing_end_redo         NUMBER;
40696  l_redo_difference          NUMBER;
40697  l_prev_pricing_phase_id    NUMBER := -9999;
40698  l_error_status_code        VARCHAR2(30);
40699  l_error_status_text        VARCHAR2(240);
40700  l_time_stats		    VARCHAR2(240);
40701  l_formula_processing       VARCHAR2(1) := 'N'; --8892565
40702 
40703 -- Essilor Fix bug 2789138
40704  L_MANUAL_ADJUSTMENTS_CALL_FLAG  VARCHAR2(1) := 'N';
40705  L_RETURN_MANUAL_DISCOUNT   VARCHAR2(1) :=   nvl(FND_PROFILE.VALUE('QP_RETURN_MANUAL_DISCOUNTS'),'N');
40706 
40707  E_SEARCH_FLAG_IS_NULL    EXCEPTION;
40708  E_INVALID_CONTROL_RECORD EXCEPTION;
40709  E_ROUTINE_ERRORS         EXCEPTION;
40710  E_INVALID_PHASE          EXCEPTION;
40711  E_NO_SOURCE_SYSTEM       EXCEPTION;
40712  E_DEBUG_ROUTINE_ERROR    EXCEPTION;
40713 
40714  l_gone_in_phase_cur_loop varchar2(1); -- bug 3963888
40715 /*
40716 INDX,QP_PREQ_GRP.price_request.l_phase_cur,QP_EVENT_PHASES_U1,PRICING_EVENT_CODE,1
40717 
40718 INDX,QP_PREQ_GRP.price_request.l_phase_cur,QP_PRICING_PHASES_U1,PRICING_PHASE_ID,1
40719 */
40720 --ignore_pricing start smbalara 8203956
40721 l_line_index_tbl QP_PREQ_GRP.NUMBER_TYPE;
40722 l_price_list_header_id_tbl QP_PREQ_GRP.NUMBER_TYPE;
40723 l_line_quantity_tbl QP_PREQ_GRP.NUMBER_TYPE;
40724 l_line_uom_code_tbl QP_PREQ_GRP.VARCHAR_TYPE;
40725 
40726 CURSOR	IGNORE_PRICE_LINES_CUR IS
40727 SELECT	LINE_TMP.LINE_INDEX	L_INDEX,
40728 	ATTRS_TMP1.VALUE_FROM	PRICE_LIST_HEADER_ID,
40729 	LINE_TMP.LINE_QUANTITY	LINE_QUANTITY,
40730 	LINE_TMP.LINE_UOM_CODE	LINE_UOM_CODE
40731 FROM	QP_NPREQ_LINES_TMP LINE_TMP ,
40732 	QP_NPREQ_LINE_ATTRS_TMP ATTRS_TMP,
40733 	QP_NPREQ_LINE_ATTRS_TMP ATTRS_TMP1
40734 WHERE	LINE_TMP.LINE_INDEX=ATTRS_TMP.LINE_INDEX
40735 	AND LINE_TMP.LINE_INDEX=ATTRS_TMP1.LINE_INDEX
40736 	AND ATTRS_TMP.CONTEXT = G_LIST_HEADER_CONTEXT
40737 	AND ATTRS_TMP.ATTRIBUTE = G_IGN_PRIC_ATTRIBUTE
40738 	AND ATTRS_TMP.VALUE_FROM = G_YES
40739 	--AND LINE_TMP.PRICE_FLAG='N'
40740 	AND ATTRS_TMP1.LINE_INDEX=ATTRS_TMP.LINE_INDEX
40741 	AND ATTRS_TMP1.CONTEXT = G_LIST_HEADER_CONTEXT
40742 	AND ATTRS_TMP1.ATTRIBUTE = G_DEF_PL_HDR_ID_ATTRIBUTE ;
40743 --ignore_pricing end smbalara
40744 
40745 -- Essilor Fix bug 2789138
40746 --[julin/4865213] merged unions, plan unaffected
40747  CURSOR l_phase_cur(l_event_code VARCHAR2,
40748                    l_event_code1 VARCHAR2) IS
40749   SELECT QPP.PRICING_PHASE_ID,
40750          QPP.LIST_TYPE_CODE,
40751          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
40752          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
40753          QPP.PHASE_SEQUENCE,
40754          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG,
40755 	 QPP.NAME,
40756          --QPEP.PRICING_EVENT_CODE
40757 	 nvl(QPEP.pattern_search_path,nvl(QPP.pattern_search_path,G_PAT_SEARCH_PATH)) pattern_search_path,
40758 	 DECODE(nvl(QPEP.pattern_search_path,nvl(QPP.pattern_search_path,G_PAT_SEARCH_PATH)),1,'Search Headers First','Search Lines First') pattern_search_path_desc
40759   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
40760   WHERE  ((L_MANUAL_ADJUSTMENTS_CALL_FLAG IS NULL)
40761           OR
40762           (L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'N' AND
40763            NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('A', 'B'))
40764           OR
40765           (L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'Y' AND
40766            (L_RETURN_MANUAL_DISCOUNT = 'N' AND
40767             NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('M', 'B'))
40768            OR
40769            (L_RETURN_MANUAL_DISCOUNT = 'Y')
40770           )
40771          )
40772    AND  QPEP.PRICING_EVENT_CODE IN
40773         (SELECT decode(rownum
40774           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
40775           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40776              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40777           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40778               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40779           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40780               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40781           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40782               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40783           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40784               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
40785          FROM  qp_event_phases
40786          WHERE rownum < 7)
40787   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
40788                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
40789   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
40790     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
40791   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
40792          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
40793   ORDER  BY 5,3 DESC;
40794 
40795 /*
40796   UNION
40797   SELECT QPP.PRICING_PHASE_ID,
40798          QPP.LIST_TYPE_CODE,
40799          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
40800          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
40801          QPP.PHASE_SEQUENCE,
40802          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
40803          --QPEP.PRICING_EVENT_CODE
40804   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
40805   WHERE  L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'N'
40806   AND    NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('A', 'B')
40807   AND    QPEP.PRICING_EVENT_CODE IN
40808         (SELECT decode(rownum
40809           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
40810           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40811              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40812           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40813               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40814           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40815               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40816           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40817               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40818           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40819               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
40820          FROM  qp_event_phases
40821          WHERE rownum < 7)
40822   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
40823                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
40824   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
40825     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
40826   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
40827          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
40828 UNION
40829   SELECT QPP.PRICING_PHASE_ID,
40830          QPP.LIST_TYPE_CODE,
40831          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
40832          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
40833          QPP.PHASE_SEQUENCE,
40834          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
40835          --QPEP.PRICING_EVENT_CODE
40836   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
40837   WHERE  L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'Y'
40838   AND    L_RETURN_MANUAL_DISCOUNT = 'N'
40839   AND    NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('M', 'B')
40840   AND    QPEP.PRICING_EVENT_CODE IN
40841         (SELECT decode(rownum
40842           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
40843           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40844              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40845           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40846               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40847           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40848               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40849           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40850               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40851           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40852               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
40853          FROM  qp_event_phases
40854          WHERE rownum < 7)
40855   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
40856                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
40857   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
40858     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
40859   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
40860          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
40861 UNION
40862   SELECT QPP.PRICING_PHASE_ID,
40863          QPP.LIST_TYPE_CODE,
40864          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
40865          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
40866          QPP.PHASE_SEQUENCE,
40867          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
40868          --QPEP.PRICING_EVENT_CODE
40869   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
40870   WHERE  L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'Y'
40871   AND    L_RETURN_MANUAL_DISCOUNT = 'Y'
40872   AND    QPEP.PRICING_EVENT_CODE IN
40873         (SELECT decode(rownum
40874           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
40875           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40876              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40877           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40878               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40879           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40880               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40881           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40882               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40883           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40884               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
40885          FROM  qp_event_phases
40886          WHERE rownum < 7)
40887   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
40888                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
40889   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
40890     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
40891   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
40892          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))*/
40893 
40894 /* CURSOR l_phase_cur(l_event_code VARCHAR2,
40895                    l_event_code1 VARCHAR2) IS
40896   SELECT QPP.PRICING_PHASE_ID,
40897          QPP.LIST_TYPE_CODE,
40898          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
40899          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
40900          QPP.PHASE_SEQUENCE,
40901          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
40902          --QPEP.PRICING_EVENT_CODE
40903   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
40904   WHERE  QPEP.PRICING_EVENT_CODE IN
40905         (SELECT decode(rownum
40906           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
40907           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40908              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40909           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40910               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40911           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40912               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40913           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40914               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
40915           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
40916               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
40917          FROM  qp_event_phases
40918          WHERE rownum < 7)
40919   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
40920                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
40921   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
40922     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
40923   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
40924          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
40925   ORDER  BY QPP.PHASE_SEQUENCE,SEARCH_FLAG DESC;  */
40926 
40927 /*
40928 Can use N2 instead of N4
40929 INDX,QP_PREQ_GRP.price_request.l_get_line_index_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
40930 INDX,QP_PREQ_GRP.price_request.l_get_line_index_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
40931 */
40932 CURSOR l_get_line_index_cur(p_pricing_phase_id NUMBER) IS
40933   SELECT DISTINCT LINE_INDEX
40934   FROM   qp_npreq_ldets_tmp
40935   WHERE  PRICING_PHASE_ID = p_pricing_phase_id
40936   AND    PRICING_STATUS_CODE = G_STATUS_NEW;
40937 
40938 /*
40939 INDX,QP_PREQ_GRP.price_request.l_get_list_price_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
40940 */
40941 CURSOR l_get_list_price_cur(p_line_index PLS_INTEGER) IS
40942   SELECT UNIT_PRICE,LINE_QUANTITY,PRICED_QUANTITY,PRICED_UOM_CODE,LINE_UOM_CODE,PRICING_EFFECTIVE_DATE
40943   FROM   qp_npreq_lines_tmp
40944   WHERE  LINE_INDEX = p_line_index;
40945   --FOR UPDATE OF ROUNDING_FACTOR;
40946 
40947 /*
40948 INDX,QP_PREQ_GRP.price_request.get_source_system_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
40949 */
40950 CURSOR get_source_system_cur IS
40951   SELECT 'X'
40952   FROM   dual
40953   WHERE EXISTS
40954     (Select 'X'
40955      --From  QP_PRICE_REQ_SOURCES
40956      From  QP_PRICE_REQ_SOURCES_V /* yangli */
40957      Where REQUEST_TYPE_CODE
40958      In (SELECT REQUEST_TYPE_CODE
40959      FROM qp_npreq_lines_tmp));
40960 
40961 CURSOR get_request_type_code_cur IS   -- shu, aso rounding
40962   SELECT REQUEST_TYPE_CODE
40963   FROM qp_npreq_lines_tmp
40964   WHERE rownum=1;
40965 
40966 /*
40967 INDX,QP_PREQ_GRP.price_request.debug_cur,- No Index Used -,NA,NA
40968 */
40969 CURSOR debug_cur IS
40970 SELECT REQUEST_TYPE_CODE,LINE_INDEX,LINE_TYPE_CODE,PRICE_FLAG,PRICE_LIST_HEADER_ID,ROUNDING_FACTOR
40971 FROM qp_npreq_lines_tmp;
40972 
40973 /*
40974 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
40975 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
40976 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
40977 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
40978 */
40979 CURSOR l_chk_deleted_pbh_cur(p_line_index IN PLS_INTEGER,
40980 					    p_pricing_phase_id NUMBER) IS
40981 SELECT /*+ INDEX(qp_npreq_ldets_tmp QP_PREQ_LDETS_TMP_N2) */ 'X' --bug 14464004
40982 FROM qp_npreq_ldets_tmp
40983 WHERE created_from_list_line_type = G_PRICE_BREAK_TYPE
40984 AND   line_index = p_line_index
40985 AND   pricing_phase_id = p_pricing_phase_id
40986 AND   pricing_status_code <> G_STATUS_NEW;
40987 
40988 --check if there is such a list line with passed in phase id
40989 /*
40990 INDX,QP_PREQ_GRP.price_request.l_chk_phase_exists,QP_LIST_LINES_N5,PRICING_PHASE_ID,1
40991 */
40992 
40993 -- [julin/4742368/4766135] modified to try list_header_phases first; if not found, go to
40994 -- lines/headers; assuming that phase/qual on lines is a better EXISTS filter than
40995 -- active flag on headers (can purge if many inactive modifiers)
40996 CURSOR l_chk_phase_exists(p_phase_id IN PLS_INTEGER) IS
40997 SELECT 'x'
40998 FROM   dual
40999 WHERE
41000 EXISTS (
41001   select /*+ ORDERED */ 'x'
41002   from qp_list_header_phases lhp, qp_list_headers_b qplh
41003   where lhp.pricing_phase_id = p_phase_id
41004     and qplh.list_header_id = lhp.list_header_id
41005     and qplh.active_flag = 'Y')
41006 OR
41007 EXISTS (
41008   select /*+ ORDERED */ 'x'
41009   from qp_list_lines qpll, qp_list_headers_b qplh
41010   where qpll.pricing_phase_id = p_phase_id
41011     and qpll.qualification_ind in (0, 4, 20)
41012     and qpll.list_header_id = qplh.list_header_id
41013     and qplh.active_flag = 'Y');
41014 /*
41015 -- julin [3773033]: removing hint /*+ ordered use_nl(qpll) index(qpll QP_LIST_LINES_N5) /
41016 -- bug 3804392 - exclude factor lists as well
41017 CURSOR l_chk_phase_exists(p_phase_id IN PLS_INTEGER) IS
41018 select 'x'
41019   from qp_list_headers_b qplh, qp_list_lines qpll
41020  where qplh.active_flag = 'Y'
41021    and qplh.list_type_code not in ('PRL', 'AGR', 'PML')
41022    and qpll.list_header_id = qplh.list_header_id
41023    and qpll.pricing_phase_id = p_phase_id
41024    and qpll.qualification_ind in (0, 2, 4, 6, 8, 10, 12, 14, 20, 22, 28, 30)
41025    and rownum = 1;
41026 select 'X' from dual
41027 	where exists (select 'X' from qp_list_lines
41028 					where pricing_phase_id = p_phase_id
41029 					AND modifier_level_code IN ('LINE','LINEGROUP','ORDER')  --3169430
41030 					and rownum = 1);*/
41031 
41032 /*
41033 INDX,QP_PREQ_GRP.price_request.l_debug,- No Index Used -,NA,NA
41034 */
41035 CURSOR l_debug IS
41036 SELECT CONTEXT,
41037        ATTRIBUTE,
41038        VALUE_FROM,
41039        LINE_INDEX,
41040        LINE_DETAIL_INDEX
41041 FROM   qp_npreq_line_attrs_tmp;
41042 
41043 /*
41044 INDX,QP_PREQ_GRP.price_request.l_check_pricing_phase_exists,QP_PRICING_PHASES_U1,PRICING_PHASE_ID,1
41045 
41046 INDX,QP_PREQ_GRP.price_request.l_check_pricing_phase_exists,QP_EVENT_PHASES_U1,PRICING_EVENT_CODE,1
41047 INDX,QP_PREQ_GRP.price_request.l_check_pricing_phase_exists,QP_EVENT_PHASES_U1,PRICING_PHASE_ID,2
41048 */
41049 CURSOR l_check_pricing_phase_exists(l_event_code VARCHAR2,l_event_code1 VARCHAR2) IS
41050 SELECT b.pricing_phase_id,b.freeze_override_flag
41051 FROM   qp_event_phases a , qp_pricing_phases b
41052 WHERE  a.pricing_event_code in (SELECT decode(rownum
41053           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
41054           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
41055              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
41056           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
41057               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
41058           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
41059               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
41060           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
41061               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
41062           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
41063               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
41064          FROM  qp_event_phases
41065          WHERE rownum < 7)
41066 AND    a.pricing_phase_id = G_PRICE_LIST_PHASE_ID
41067 AND    b.pricing_phase_id = G_PRICE_LIST_PHASE_ID
41068 AND    trunc(sysdate) BETWEEN trunc(nvl(a.START_DATE_ACTIVE,sysdate))
41069 AND                           trunc(nvl(a.END_DATE_ACTIVE,sysdate));
41070 
41071 /*
41072 INDX,QP_PREQ_GRP.price_request.l_get_max_line_detail_index,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
41073 */
41074 CURSOR l_get_max_line_detail_index IS
41075  SELECT MAX(LINE_DETAIL_INDEX)
41076  FROM   qp_npreq_ldets_tmp;
41077 
41078 /*
41079 INDX,QP_PREQ_GRP.price_request.l_limit_check_cur,qp_npreq_ldets_tmp_N4,HEADER_LIMIT_EXISTS,1
41080 INDX,QP_PREQ_GRP.price_request.l_limit_check_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,2
41081 */
41082 CURSOR l_limit_check_cur IS
41083 SELECT HEADER_LIMIT_EXISTS,LINE_LIMIT_EXISTS
41084 FROM   qp_npreq_ldets_tmp
41085 WHERE  PRICING_STATUS_CODE = G_STATUS_NEW
41086 AND    HEADER_LIMIT_EXISTS = G_YES ;
41087 
41088 /*
41089 INDX,QP_PREQ_GRP.price_request.order_amount_cur,- No Index Used -,NA,NA
41090 */
41091 CURSOR order_amount_cur IS
41092 --SELECT nvl(SUM(UNIT_PRICE * PRICED_QUANTITY),0)
41093 select nvl(sum(nvl(line_unit_price * line_quantity, UNIT_PRICE * PRICED_QUANTITY)),0)
41094 FROM   qp_npreq_lines_tmp
41095  WHERE charge_periodicity_code is NULL;    -- added for recurring charges Bug # 4465168
41096 
41097 /*
41098 INDX,QP_PREQ_GRP.price_request.limit_trans_cur,QP_LIMIT_TRANSACTIONS_U1,PRICE_REQUEST_CODE,1
41099 */
41100 CURSOR limit_trans_cur IS
41101 SELECT 'X'
41102 FROM   qp_limit_transactions
41103 WHERE  price_request_code > fnd_global.local_chr(0);
41104 --WHERE  price_request_code > chr(0);  fix GSCC compilation warning
41105 
41106  l_product_app_id           number; -- bug 3841192
41107 
41108 CURSOR pricing_install_status_cur IS
41109 SELECT status
41110 FROM   fnd_product_installations
41111 WHERE  application_id=l_product_app_id;
41112 
41113 -- ** Added for showing context and attribute in msg which caused number conversion error **
41114  CURSOR am_attr_msg_cur
41115    IS
41116    SELECT  lattr.value_from,lattr.value_to,lattr.context,
41117            nvl(SEGMENTS_TL.SEEDED_SEGMENT_NAME,SEGMENTS_TL.USER_SEGMENT_NAME) attribute
41118     FROM   qp_npreq_line_attrs_tmp lattr,fnd_flex_value_sets VSET,
41119            qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS, qp_segments_tl SEGMENTS_TL
41120     WHERE attribute_type = G_PRICING_TYPE
41121                 AND pricing_status_code = G_STATUS_UNCHANGED
41122                 AND  vset.flex_value_set_id = segments.user_valueset_id
41123                 AND segments.application_id = 661
41124                 AND pcontexts.prc_context_type <> 'QUALIFIER'
41125                 AND pcontexts.prc_context_code = lattr.context
41126                 AND segments.segment_mapping_column = lattr.attribute
41127                 AND segments.prc_context_id = pcontexts.prc_context_id
41128                 AND segments.segment_id = segments_tl.segment_id
41129                 AND vset.format_type = 'N';
41130 
41131 CURSOR   attr_msg_cur
41132    IS
41133    SELECT  value_from,value_to,context,attribute
41134     FROM   qp_npreq_line_attrs_tmp lattr
41135                WHERE attribute_type = G_PRICING_TYPE
41136             AND pricing_status_code = G_STATUS_UNCHANGED
41137             AND exists (
41138                 SELECT format_type
41139                 FROM fnd_flex_value_sets VSET,fnd_descr_flex_column_usages DFLEX
41140                 WHERE vset.flex_value_set_id = dflex.flex_value_set_id
41141                 AND dflex.application_id = 661
41142                 AND dflex.descriptive_flexfield_name = 'QP_ATTR_DEFNS_PRICING'
41143                 AND dflex.descriptive_flex_context_code = lattr.context
41144                 AND dflex.application_column_name = lattr.attribute
41145                 AND vset.format_type = 'N');
41146 
41147 --added by yangli for Java Engine changes
41148 CURSOR l_lines_info_cur
41149 is
41150 select line_index, unit_price, price_flag
41151 from qp_npreq_lines_tmp
41152 where QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N'
41153 UNION ALL
41154 select line_index, unit_price, price_flag
41155 from qp_int_lines
41156 where QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'Y';
41157 
41158 --skattama
41159 /*
41160 INDX,QP_PREQ_GRP.list_header_search.l_check_no_list_passed,- No Index Used-,NA,NA
41161 */
41162 CURSOR L_CHECK_NO_LIST_PASSED IS
41163 SELECT 'X'
41164 FROM   qp_npreq_lines_tmp A
41165 WHERE  PROCESSED_CODE IN (G_NO_LIST_PASSED,G_STS_LHS_NOT_FOUND)
41166 AND    LINE_TYPE_CODE <> G_ORDER_LEVEL
41167 AND (instr(PROCESS_STATUS,'FREEGOOD')=0); -- bug 2693700
41168 
41169 /*
41170 INDX,QP_PREQ_GRP.list_header_search.l_check_secondary_search,- No Index Used-,NA,NA
41171 */
41172 CURSOR l_check_secondary_search IS
41173 SELECT 'X'
41174 FROM   qp_npreq_lines_tmp
41175 WHERE  PROCESSED_CODE = G_STS_LHS_NOT_FOUND
41176 AND    LINE_TYPE_CODE <> G_ORDER_LEVEL
41177 AND (instr(PROCESS_STATUS,'FREEGOOD')=0); -- bug 2693700
41178 
41179 
41180 --skattama
41181 
41182 
41183 --added by yangli for Java Engine changes
41184 l_msg_value_from NUMBER;
41185 l_msg_value_to   NUMBER;
41186 l_msg_context    VARCHAR2(240);
41187 l_msg_attribute  VARCHAR2(80);
41188 -- end changes
41189 
41190 l_trans VARCHAR2(1);
41191 l_install_status VARCHAR2(1);
41192 l_limits_installed VARCHAR2(1) := FND_PROFILE.VALUE('QP_LIMITS_INSTALLED');
41193 --added by yangli for Java Engine 3086881
41194 l_begin_time number;
41195 l_end_time number;
41196 l_request_id number;
41197 --added by yangli for Java Engine 3086881
41198 
41199 --Added for pattern engine
41200 l_devlp_log_dumped VARCHAR2(1) := 'N';
41201 l_lines_cnt NUMBER;
41202 
41203 l_patrn_srch_path_desc VARCHAR2(50);
41204 l_patrn_srch_prof_desc VARCHAR2(50);
41205 l_tot_phase_time NUMBER;
41206 
41207 BEGIN
41208 
41209 QP_PREQ_GRP.Set_QP_Debug;
41210 
41211  --KDURGASI changes for pattern based select modifiers
41212   G_PAT_SEARCH_PATH   := NVL(FND_PROFILE.VALUE('QP_PATTERN_SEARCH_PATH'),2);
41213   G_QP_PATTERN_SEARCH := NVL(FND_PROFILE.VALUE('QP_PATTERN_SEARCH'),'N');
41214   G_LIN_QTY_ATTR_SRCD := 'N';
41215 
41216   SELECT DECODE(G_PAT_SEARCH_PATH,1,'Search Headers First','Search Lines First') INTO l_patrn_srch_path_desc FROM dual;
41217 
41218   IF G_QP_PATTERN_SEARCH = 'B' THEN
41219 	l_patrn_srch_prof_desc:= 'Both Modifier and Price List';
41220   ELSIF G_QP_PATTERN_SEARCH = 'M' THEN
41221 	l_patrn_srch_prof_desc:= 'Modifier';
41222   ELSIF G_QP_PATTERN_SEARCH = 'P' THEN
41223 	l_patrn_srch_prof_desc:= 'Price List';
41224   ELSE
41225 	l_patrn_srch_prof_desc:= 'Pattern Search Off';
41226   END IF;
41227 
41228 --KDURGASI changes for pattern based select modifiers
41229 
41230 IF qp_debug_util.IsTimeLogDebugOn THEN
41231    SELECT COUNT(*) INTO l_lines_cnt FROM qp_npreq_lines_tmp;
41232 END IF;
41233 
41234 qp_debug_util.addSummaryTimeLog('Event: ' || p_control_rec.PRICING_EVENT, 0,1,0);
41235 qp_debug_util.addSummaryTimeLog('Number of lines: ' || l_lines_cnt, 0,1,0);
41236 qp_debug_util.addSummaryTimeLog('PROFILE Pattern Search: ' || l_patrn_srch_prof_desc, 0,1,0);
41237 qp_debug_util.addSummaryTimeLog('PROFILE Search Path: ' || l_patrn_srch_path_desc, 0,1,0);
41238 
41239 qp_debug_util.tstart('ENGINE_CALL_QPXGPREB','QPXGPREB Price Engine Call (Lines - '||l_lines_cnt||')');
41240 
41241 --==========START: Debug Viewere needed by JAVA and PL/SQL engine=======
41242  --G_QP_DEBUG_PROFILE_VALUE := FND_PROFILE.VALUE(v_debug_switch);
41243  G_PUBLIC_API_CALL_FLAG := nvl(p_control_rec.public_api_call_flag,'N');
41244 
41245  -- Set the G_DEBUG_ENGINE if the call is not from public API
41246  IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
41247   Set_QP_Debug;
41248  END IF;
41249 
41250   l_pricing_start_time := dbms_utility.get_time;
41251 
41252 IF G_QP_DEBUG_PROFILE_VALUE = G_ENGINE_TIME_TRACE_ON THEN   --3085171
41253   --added to note redo generation
41254   begin
41255    select value into l_pricing_start_redo
41256    from v$mystat, v$statname
41257    where v$mystat.statistic# = v$statname.statistic#
41258    and v$statname.name = 'redo size';
41259   exception
41260   when others then
41261    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41262     engine_debug('Error in looking up debug'||SQLERRM);
41263    END IF;
41264   end;
41265 END IF;
41266 
41267  --l_pricing_start_time := sysdate;
41268 
41269 -- Debug Screen related change
41270 -- Irrespective of om debug if qp debug is on debug information is captured into qp debug tables
41271  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
41272     (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
41273   -- A call to QP_COPY_DEBUG_PVT.Generate_Debug_Req_Seq to initialize Global Variables
41274   IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
41275      QP_COPY_DEBUG_PVT.Generate_Debug_Req_Seq(l_return_status,
41276                                               l_status_text);
41277      --x_return_status := l_return_status; -- fix bug 2756754
41278      --x_return_status_text := l_status_text; -- fix bug 2756754
41279      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
41280         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41281            engine_debug('Error QP_COPY_DEBUG_PVT.Generate_Debug_Req_Seq: '||l_status_text);
41282         END IF; -- END IF G_DEBUG_ENGINE
41283         RAISE E_DEBUG_ROUTINE_ERROR; -- fix bug 2756754, dbg failed should not be an hard error
41284      END IF;
41285   END IF;
41286  END IF;
41287 
41288 
41289 /* IF (NOT OE_DEBUG_PUB.ISDebugOn) THEN --If om debug is not on , then only look at qp_debug
41290  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
41291     (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
41292   oe_debug_pub.SetDebugLevel(10);
41293   oe_debug_pub.Initialize;
41294   oe_debug_pub.debug_on;
41295   l_output_file := oe_debug_pub.Set_Debug_Mode('FILE');
41296   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41297   engine_debug ('The output file is : ' || l_output_file );
41298   END IF;
41299   G_DEBUG_ENGINE:= FND_API.G_TRUE;
41300  ELSE
41301   G_DEBUG_ENGINE:= FND_API.G_FALSE;
41302  END IF;
41303 ELSE
41304  G_DEBUG_ENGINE:= FND_API.G_TRUE;
41305 END IF; */
41306 
41307  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41308  engine_debug('***Entering Oracle Pricing***');
41309  engine_debug('Please set debug level 3 in profile option to see all Pricing Debug Messages');
41310  engine_debug('-----------------New Engine Call----------------------');
41311  engine_debug('Pricing Event: ' || p_control_rec.PRICING_EVENT);
41312  engine_debug('Pricing Engine Version: ' || QP_PREQ_GRP.GET_VERSION);
41313 
41314  END IF;
41315  X_RETURN_STATUS:=FND_API.G_RET_STS_SUCCESS;
41316 --==========END: Debug Viewere needed by JAVA and PL/SQL engine=======
41317 
41318 --======moved here by yangli, needed by JAVA and PL/SQL engine=============
41319 G_TEMP_TABLE_INSERT_FLAG := nvl(p_control_rec.temp_table_insert_flag,'Y');
41320 
41321 --Setting current event in debug util
41322 qp_debug_util.setCurrentEvent(p_control_rec.PRICING_EVENT);
41323 --G_CURR_PRICE_EVENT := p_control_rec.PRICING_EVENT;
41324 
41325 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
41326   --=====START: Specific to PL/SQL engine =======================
41327   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41328         ENGINE_DEBUG('Java Engine not Installed ----------');
41329   END IF;
41330 
41331   -- julin [3805113]: resetting tables used in handle_break/call_calculation_engine
41332   G_CHILD_VALUE_FROM_TBL.delete;
41333   G_CHILD_VALUE_TO_TBL.delete;
41334   G_PARENT_LINE_DETAIL_INDEX_TBL.delete;
41335 
41336  --dbms_output.put_line('Final Debug: ' || oe_debug_pub.g_debug);
41337  --G_DEBUG_ENGINE := FND_API.G_TRUE;
41338  --G_LINE_DETAIL_INDEX := 0;
41339  G_MANUAL_DISCOUNT_FLAG := nvl(FND_PROFILE.VALUE(G_RETURN_MANUAL_DISCOUNTS),'Y'); --p_control_rec.manual_discount_flag;
41340  G_GSA_CHECK_FLAG  := p_control_rec.gsa_check_flag;
41341  G_GSA_DUP_CHECK_FLAG  := nvl(p_control_rec.gsa_dup_check_flag,'N');
41342  --moved to top for both PL/SQL and Java Engine
41343  --G_TEMP_TABLE_INSERT_FLAG := nvl(p_control_rec.temp_table_insert_flag,'Y');
41344  G_MANUAL_ADJUSTMENTS_CALL_FLAG := nvl(p_control_rec.manual_adjustments_call_flag,'N');
41345  G_INSERT_INTO_FORMULA_TMP := FALSE;
41346  G_INSERT_FORMULA_STEP_VALUES := nvl(FND_PROFILE.VALUE('QP_INSERT_FORMULA_STEP_VALUES'),'Y');
41347  G_BLIND_DISCOUNT_PROFILE := nvl(FND_PROFILE.VALUE(G_BLIND_DISCOUNT),'N');
41348  G_MULTI_CURRENCY_PROFILE := nvl(FND_PROFILE.VALUE(G_MULTI_CURRENCY),'N'); -- vivek
41349  G_QUALIFY_SECONDARY := NVL(FND_PROFILE.VALUE('QP_QUALIFY_SECONDARY_PRICE_LISTS'),'N');--profile option
41350  --G_USE_MULTI_CURRENCY  := p_control_rec.use_multi_currency; -- Vivek
41351 
41352 
41353  G_ORDER_ID := null; -- accum range break
41354 
41355  if p_control_rec.use_multi_currency = 'Y' then
41356    G_USE_MULTI_CURRENCY := p_control_rec.use_multi_currency;
41357  else
41358    -- Added new profile (QP_MULTI_CURRENCY_USAGE) with default value 'N' to maintain
41359    -- current behaviour,bug 2943033
41360    G_USE_MULTI_CURRENCY := nvl(fnd_profile.value('QP_MULTI_CURRENCY_USAGE'), 'N');
41361  end if;
41362 
41363  -- Essilor Fix bug 2789138
41364  L_MANUAL_ADJUSTMENTS_CALL_FLAG := nvl(p_control_rec.manual_adjustments_call_flag,NULL);
41365 
41366  -- shu ADD TO MAIN
41367  IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
41368  	G_MCURR_INSTALLED_USED := 'Y';
41369  ELSE
41370  	G_MCURR_INSTALLED_USED := 'N';
41371  END IF;
41372  G_SECURITY_CONTROL := nvl(FND_PROFILE.VALUE('QP_SECURITY_CONTROL'), 'OFF'); --security
41373  G_CURRENT_USER_OP_UNIT := NVL(p_control_rec.org_id, QP_UTIL.GET_ORG_ID); --security
41374  						     -- [prarasto] changed to use get_org_id instead of profile for implementing MOAC
41375 
41376     --added for moac
41377     --Initialize MOAC and set org context to Org passed in nvl(p_control_rec.org_id, mo_default_org_id)
41378     --so that the pricing engine will look at data specific to the
41379     --passed org or mo_default_org plus global data only
41380 
41381     IF MO_GLOBAL.get_access_mode is null THEN
41382       MO_GLOBAL.Init('QP');
41383       IF G_CURRENT_USER_OP_UNIT IS NOT NULL THEN
41384         MO_GLOBAL.set_policy_context('S', G_CURRENT_USER_OP_UNIT);
41385       END IF;
41386     END IF;--MO_GLOBAL
41387 
41388 
41389  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41390    engine_debug('G_SECURITY_CONTROL: '||G_SECURITY_CONTROL);
41391    engine_debug('G_CURRENT_USER_OP_UNIT: '||G_CURRENT_USER_OP_UNIT);
41392 
41393  END IF;
41394   --=====END: Specific to PL/SQL engine =======================
41395 END IF; --Java engine is not insalled
41396 
41397 --=====START: Set_Request_Id needed by both Java and PL/SQL engine
41398  -- Set the request id if called from plsql/path and not temp table insert path
41399  IF (G_TEMP_TABLE_INSERT_FLAG = G_YES) THEN
41400   QP_Price_Request_Context.Set_Request_Id;
41401   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41402   engine_debug('Request id in QP_PREQ_GRP : ' ||sys_context('qp_context','request_id'));
41403   END IF;
41404  END IF;
41405 --=====END: Set_Request_Id needed by both Java and PL/SQL engine
41406 
41407 --=====START: No-Pricing-Line check needed by both Java and PL/SQL engine
41408  l_price_flag_indx := NULL;
41409  l_price_flag_yes_only := G_NO;
41410 
41411  IF G_TEMP_TABLE_INSERT_FLAG = G_YES THEN -- pl/sql path
41412 
41413  IF (p_line_tbl.COUNT > 0) THEN
41414   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41415   engine_debug('There are lines to be priced');
41416   END IF;
41417   FOR i in p_line_tbl.FIRST .. p_line_tbl.LAST
41418   LOOP
41419    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41420    engine_debug('In the Loop');
41421    engine_debug('Before Pricing Line Index: ' || p_line_tbl(i).line_index);
41422    engine_debug('Before Pricing Unit Price: ' || p_line_tbl(i).unit_price);
41423    engine_debug('Before Pricing Price Flag: ' || p_line_tbl(i).price_flag);
41424    END IF;
41425   END LOOP;
41426  ELSE -- else (p_line_tbl.COUNT > 0)
41427   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41428   engine_debug('There are no lines to be priced');
41429   END IF;
41430  END IF; -- end if (p_line_tbl.COUNT > 0)
41431 
41432  ELSE --G_TEMP_TABLE_INSERT_FLAG = 'N', direct insert/performance path, shulin dbg 2437534
41433   --FOR cl IN (select line_index, unit_price, price_flag from qp_npreq_lines_tmp)
41434   FOR cl IN l_lines_info_cur --by yangli for Java Engine changes
41435   LOOP
41436    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41437    engine_debug('In direct insert Loop / performance path');
41438    engine_debug('Before Pricing Line Index: ' || cl.line_index);
41439    engine_debug('Before Pricing Unit Price: ' || cl.unit_price);
41440    engine_debug('Before Pricing Price Flag: ' || cl.price_flag);
41441    END IF;
41442   END LOOP;
41443 END IF;--temp_table_insert_flag
41444 
41445 --for Java Engine case, the check here will catch it instead of contacting Java Engine
41446  IF (G_TEMP_TABLE_INSERT_FLAG = G_YES) THEN -- If records are inserted in pricing engine from pl/sql tables
41447   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41448   engine_debug('Check to see if all the lines have price flag N');
41449   END IF;
41450   I:= p_line_tbl.FIRST;
41451   WHILE I IS NOT NULL
41452   LOOP
41453    IF (p_line_tbl(I).PRICE_FLAG = G_YES or p_line_tbl(I).PRICE_FLAG = G_PHASE) THEN
41454     l_price_flag_indx := p_line_tbl(I).LINE_INDEX;
41455     EXIT;
41456    END IF;
41457    I:=p_line_tbl.NEXT(I);
41458   END LOOP;
41459 
41460   I:= p_line_tbl.FIRST;
41461   WHILE I IS NOT NULL
41462   LOOP
41463 
41464    	--shu, begin for bug 2437534
41465   	--if there is at least 1 line with price_flag = 'Y'
41466 	--or if there is at least 1 line with price_flag = 'P' and unit_price is not passed price list search should be done
41467 	IF l_price_flag_yes_only = G_NO THEN  -- shu, 'N' was default init value for l_price_flag_yes_only
41468 		IF p_line_tbl(I).PRICE_FLAG = G_YES
41469 			or (p_line_tbl(I).PRICE_FLAG = G_PHASE -- G_PHASE is 'P'
41470 			and p_line_tbl(I).unit_price is null)
41471 		THEN
41472 			l_price_flag_yes_only := G_YES;
41473 			EXIT;
41474 		END IF;--PRICE_FLAG = G_YES or PRICE_FLAG = G_PHASE
41475 	END IF;--l_price_flag_yes_only
41476    	-- shu, fix bug 2437534
41477 
41478    I:=p_line_tbl.NEXT(I);
41479   END LOOP;
41480 
41481    -- The flag tells if there is atleast 1 order line with price_flag = 'Y'
41482    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41483    engine_debug('Price Flag Yes: ' || l_price_flag_yes_only);
41484 
41485    END IF;
41486   IF (l_price_flag_indx IS NULL ) THEN
41487    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41488    engine_debug('All the lines have price flag N.Hence no pricing returning');
41489    END IF;
41490    x_line_tbl  := p_line_tbl;
41491    x_line_qual := p_qual_tbl;
41492    x_line_attr_tbl := p_line_attr_tbl;
41493    x_line_detail_tbl := p_line_detail_tbl;
41494    RETURN; -- No pricing needs to be done as all the lines have price flag as 'N'
41495   END IF;
41496  END IF;
41497 --=====END: No-Pricing-Line check needed by both Java and PL/SQL engine
41498 
41499 --=====START: needed by both Java and PL/SQL engine, used later in shared code
41500  --this method will populate G_PRICE_LIST_SEQUENCE and G_PRICE_LIST_PHASE_ID
41501  --and later NOT-NULL check against these two globals are performed
41502  Get_Price_List_Sequence(l_return_status,l_status_text);
41503 
41504  IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
41505   RAISE E_ROUTINE_ERRORS;
41506  END IF;
41507 --=====END: needed by both Java and PL/SQL engine, used later in shared code
41508 
41509 --=====START: needed by both Java and PL/SQL engine, used in Populate_Output()
41510  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41511   engine_debug('Rounding flag: '||p_control_rec.rounding_flag);
41512  END IF;
41513  l_rounding_flag := nvl(p_control_rec.rounding_flag,G_YES);
41514 --=====START: needed by both Java and PL/SQL engine, used in Populate_Output()
41515 
41516 --********************************************************************
41517 --If user populates the temp tables directly
41518 --the public API will populate the currency_code etc in
41519 --public variables
41520 --********************************************************************
41521 -- qp_number.canonical_mask := 'FM999999999999999999999.99999999999999999999999999999999999999'; --3085147
41522 qp_number.canonical_mask := 'FM999999999999999999999.9999999999999999999999999999999999999999'; --3169430
41523 
41524 --=======START: Pre-pricing processing  needed by JAVA and PL/SQL engine======
41525 IF G_TEMP_TABLE_INSERT_FLAG = G_YES THEN
41526 
41527  /*Truncate_Temp_Tables (l_return_status,l_status_text);
41528  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
41529    RAISE E_ROUTINE_ERRORS;
41530  END IF; */
41531 
41532 -- qp_number.canonical_mask := 'FM999999999999999999999.99999999999999999999999999999999999999';
41533 
41534 
41535  l_bypass_pricing := FND_PROFILE.VALUE(G_BYPASS_PRICING);
41536 
41537  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41538  engine_debug ('Pricing Bypass : ' || l_bypass_pricing);
41539 
41540  END IF;
41541  IF (l_bypass_pricing = 'Y' ) THEN
41542 
41543   x_line_tbl  := p_line_tbl;
41544   x_line_qual := p_qual_tbl;
41545   x_line_attr_tbl := p_line_attr_tbl;
41546   x_line_detail_tbl := p_line_detail_tbl;
41547 
41548   I:= x_line_tbl.FIRST;
41549 
41550  WHILE I IS NOT NULL LOOP
41551    If x_line_tbl(I).UNIT_PRICE is null or x_line_tbl(I).ADJUSTED_UNIT_PRICE is null
41552 	or x_line_tbl(I).UNIT_PRICE = fnd_api.g_miss_num or
41553 	x_line_tbl(I).ADJUSTED_UNIT_PRICE = fnd_api.g_miss_num then
41554 
41555      x_line_tbl(I).UNIT_PRICE := l_FIXED_PRICE;
41556      x_line_tbl(I).ADJUSTED_UNIT_PRICE := l_FIXED_PRICE;
41557      x_line_tbl(I).STATUS_CODE := QP_PREQ_GRP.G_STATUS_UPDATED;
41558    end if;
41559    I:=x_line_tbl.NEXT(I);
41560  END LOOP;
41561 
41562  RETURN;
41563 END IF;
41564 
41565 	 IF(p_control_rec.PRICING_EVENT = NULL
41566 	    OR p_control_rec.calculate_flag = NULL
41567 	    OR UPPER(p_control_rec.SIMULATION_FLAG) NOT IN (G_YES,G_NO)
41568 	   ) THEN
41569 	    RAISE E_INVALID_CONTROL_RECORD;
41570 	 END IF;
41571 
41572 
41573 	 IF(G_PRICE_LIST_SEQUENCE = NULL OR G_PRICE_LIST_SEQUENCE = FND_API.G_MISS_NUM
41574 	    OR G_PRICE_LIST_PHASE_ID = NULL OR  G_PRICE_LIST_PHASE_ID = FND_API.G_MISS_NUM) THEN
41575 	   RAISE E_INVALID_PHASE;
41576 	 END IF;
41577 
41578  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41579 	engine_debug('Related_lines count: '||p_related_lines_tbl.COUNT);
41580 
41581  END IF;
41582 	IF l_return_status = FND_API.G_RET_STS_ERROR THEN
41583 	  RAISE E_ROUTINE_ERRORS;
41584 	END IF;
41585 
41586         --=====needed by both Java Engine and PL/SQL engine, used in populate_output()
41587 	IF (p_control_rec.calculate_flag = G_CALCULATE_ONLY) THEN
41588 	  l_pricing_status_code := G_STATUS_NEW;
41589 	ELSE
41590 	  l_pricing_status_code := G_STATUS_UNCHANGED;
41591 	END IF;
41592 
41593 	OPEN l_check_pricing_phase_exists(p_control_rec.PRICING_EVENT,p_control_rec.PRICING_EVENT || ',');
41594 	FETCH l_check_pricing_phase_exists INTO l_pricing_phase,l_freeze_override_flag;
41595 	CLOSE l_check_pricing_phase_exists;
41596 
41597 	IF (l_pricing_phase IS NOT NULL) THEN
41598 	 l_price_phase_flag := TRUE;
41599 	 G_PRICE_PHASE_FLAG := TRUE;
41600 	ELSE
41601 	 l_price_phase_flag := FALSE;
41602 	 G_PRICE_PHASE_FLAG := FALSE;
41603 	END IF;
41604         --=====needed by both Java Engine and PL/SQL engine, used in populate_output()
41605 
41606 ELSE --g_temp_table_insert_flag = 'N', performance path
41607  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41608 	engine_debug('Calling application inserted into temp tables');
41609 
41610  END IF;
41611 G_CURRENCY_CODE := QP_PREQ_PUB.G_CURRENCY_CODE;
41612 G_PRICE_PHASE_FLAG := QP_PREQ_PUB.G_PRICE_PHASE_FLAG;
41613 G_PRICE_LIST_SEQUENCE := QP_PREQ_PUB.G_PRICE_LIST_SEQUENCE;
41614 G_PRICE_LIST_PHASE_ID := QP_PREQ_PUB.G_PRICE_LIST_PHASE_ID;
41615 G_MIN_PRICING_DATE := QP_PREQ_PUB.G_MIN_PRICING_DATE;
41616 G_MAX_PRICING_DATE := QP_PREQ_PUB.G_MAX_PRICING_DATE;
41617 
41618 l_price_flag_yes_only := NULL; -- reset, default
41619 -- Check if atleast there is one line with price_flag = 'Y'
41620 -- shu, begin bug 2437534 fix
41621  IF l_price_flag_yes_only is null THEN
41622    --FOR cl IN (select unit_price, price_flag from qp_npreq_lines_tmp)
41623    FOR cl IN l_lines_info_cur
41624    LOOP
41625    	IF cl.price_flag = G_YES OR (cl.unit_price is NULL and cl.price_flag = G_PHASE) then
41626    		l_price_flag_yes_only := G_YES;
41627    		exit;
41628    	END IF;
41629   END LOOP;
41630 
41631  END IF;
41632 -- shu, end bug 2437534 fix
41633 
41634 l_price_flag_indx := NULL;
41635 -- Check if atleast there is one line with price_flag = 'Y' or price_flag = 'P'
41636 BEGIN
41637 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
41638  SELECT 1
41639  INTO l_price_flag_indx
41640  FROM qp_npreq_lines_tmp
41641  WHERE PRICE_FLAG IN (G_YES,G_PHASE)
41642  AND   ROWNUM=1;
41643 --added by yangli for Java Engine
41644 ELSE
41645  SELECT 1
41646  INTO l_price_flag_indx
41647  FROM qp_int_lines
41648  WHERE PRICE_FLAG IN (G_YES, G_PHASE)
41649  AND ROWNUM=1;
41650 END IF;
41651 --added by yangli for Java Engine
41652 EXCEPTION
41653  WHEN NO_DATA_FOUND THEN
41654   l_price_flag_indx := NULL;
41655 END ;
41656 
41657 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41658 engine_debug('Direct Temp Table Insert Price Flag Yes Only : '||l_price_flag_yes_only);
41659 
41660 END IF;
41661 -- This is the code when calling app inserted into temp tables to quit pricing when there are no lines
41662 -- with either price flag = 'Y' or 'P'
41663 IF (l_price_flag_indx IS NULL) THEN
41664  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41665  engine_debug('No Pricing. Returning, call from direct insert into temp tables by calling app');
41666  END IF;
41667  RETURN;
41668 END IF;
41669 
41670 END IF;---p_control_rec.temp_table_insert_flag = G_NO
41671 --=======END: Pre-pricing processing  needed by JAVA and PL/SQL engine======
41672 
41673  --IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41674 --engine_debug('Pricing Event: ' || p_control_rec.PRICING_EVENT);
41675 --engine_debug('Pricing Engine Version: ' || QP_PREQ_GRP.GET_VERSION);
41676  --END IF; -- 4033618
41677 
41678 IF (G_TEMP_TABLE_INSERT_FLAG = G_YES) THEN
41679 --=======START: Truncate/Populate_Temp_tables() needed by JAVA and PL/SQL engine======
41680  Truncate_Temp_Tables (l_return_status,l_status_text);
41681  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
41682    RAISE E_ROUTINE_ERRORS;
41683  END IF;
41684 
41685  Populate_Temp_Tables
41686            (p_line_tbl,
41687             p_qual_tbl,
41688             p_line_attr_tbl,
41689             p_LINE_DETAIL_tbl,
41690             p_LINE_DETAIL_qual_tbl,
41691             p_LINE_DETAIL_attr_tbl,
41692             p_related_lines_tbl,
41693             l_rounding_flag,
41694             l_pricing_status_code,
41695             l_price_phase_flag,
41696 	    l_freeze_override_flag,
41697             p_control_rec.pricing_event,
41698             p_control_rec.calculate_flag,
41699             l_return_status,
41700             l_status_text);
41701 
41702  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
41703   RAISE E_ROUTINE_ERRORS;
41704  END IF;
41705 --========END: Truncate/Populate_Temp_tables() needed by JAVA and PL/SQL engine======
41706 ELSE
41707   -----------------START: Specific to PL/SQL Engine----------------------
41708 --added by yangli for Java Engine project
41709 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
41710   -- for accum range break
41711   -- manually set G_ORDER_ID in the direct insert path
41712   -- because Populate_Temp_Tables was not called
41713   BEGIN
41714     select line_id
41715     into G_ORDER_ID
41716     from qp_npreq_lines_tmp
41717     where line_type_code = QP_PREQ_GRP.G_ORDER_LEVEL;
41718   EXCEPTION
41719   WHEN NO_DATA_FOUND THEN
41720  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41721     QP_PREQ_GRP.engine_debug(' - could not get order header ID!  Summary request line missing');
41722  END IF; --4033618
41723   END;
41724 END IF;--java engine not installed
41725 --added by yangli for Java Engine project
41726   -----------------END: Specific to PL/SQL Engine----------------------
41727 END IF;
41728 
41729 --ignore_pricing start 8203956
41730 IF ( NVL(Fnd_Profile.value('QP_CUSTOM_IGNORE_PRICING'),'N') = 'Y') THEN
41731 	IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41732 		QP_PREQ_GRP.engine_debug('ignore_pricing : Updating non-pricable lines 1');
41733 	END IF;
41734 	OPEN IGNORE_PRICE_LINES_CUR;
41735 	FETCH IGNORE_PRICE_LINES_CUR BULK COLLECT INTO
41736 	l_line_index_tbl,
41737 	l_price_list_header_id_tbl,
41738 	l_line_quantity_tbl,
41739 	l_line_uom_code_tbl	;
41740 	CLOSE IGNORE_PRICE_LINES_CUR;
41741 	IF (l_line_index_tbl.COUNT > 0) THEN
41742 		IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41743 			QP_PREQ_GRP.engine_debug('ignore_pricing : Updating non-pricable lines 2');
41744 			--print_tmp_tabs();
41745 		END IF;
41746 		FORALL i in 1 .. l_line_index_tbl.COUNT
41747 		     UPDATE qp_npreq_lines_tmp
41748 		     SET
41749 			price_flag = G_NO,
41750 			PRICE_LIST_HEADER_ID = l_price_list_header_id_tbl(i),
41751 			LINE_UNIT_PRICE = 0,
41752 			UOM_QUANTITY = l_line_quantity_tbl(i),
41753 			PRICED_QUANTITY = l_line_quantity_tbl(i),
41754 			PRICED_UOM_CODE = l_line_uom_code_tbl(i),
41755 			UNIT_PRICE = 0,
41756 			ADJUSTED_UNIT_PRICE = 0,
41757 			processed_flag =G_YES,
41758 			PRICING_STATUS_CODE =G_STATUS_UPDATED
41759 		     WHERE  LINE_INDEX = l_line_index_tbl(i);
41760 	END If;
41761 END IF;
41762 --ignore_pricing end
41763 
41764 -- [5112585/5087820]
41765 -- This block of code moved outside of the previous IF-THEN-ELSE block.
41766 -- max(line_detail_index)+1 is now correctly computed for both the PL/SQL table
41767 -- and the direct insert path for the PL/SQL engine.
41768 -----------------START: Specific to PL/SQL Engine----------------------
41769 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
41770   -- Assign the max line detail index
41771   OPEN l_get_max_line_detail_index;
41772   FETCH l_get_max_line_detail_index INTO l_max_line_detail_index;
41773   CLOSE l_get_max_line_detail_index;
41774 
41775   --Put back the changes for bug 2457983
41776   --in OC case where caller passes adjustments, the adjustments are inserted
41777   --but G_LINE_DETAIL_INDEX is not incremented which causes a
41778   --unique constraint violation on qp_npreq_ldets_tmp_U1
41779   --hence need to fetch the maximum line_detail_index
41780   G_LINE_DETAIL_INDEX := nvl(l_max_line_detail_index,1);
41781   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41782     engine_debug('G_LINE_DETAIL_INDEX '||G_LINE_DETAIL_INDEX);
41783   END IF;
41784 END IF;--java engine not installed
41785 -----------------END: Specific to PL/SQL Engine----------------------
41786 
41787 /*+------------------TO INSERT HIERARCHY RECORDS IN ATTRS_TMP  Added for TCA ----+*/
41788 
41789  INSERT_QUALIFIER_HIERARCHY;
41790 
41791 /*+------------------------------------------------------------------------------+*/
41792 
41793 --added by yangli for Java Engine project
41794 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
41795   -----------------START: Specific to PL/SQL Engine----------------------
41796  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41797         ENGINE_DEBUG('Java Engine not Installed ----------');
41798  END IF;
41799 
41800 Update_Processing_Order(l_return_status,l_status_text);
41801 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41802 engine_debug('After calling update_procss--');
41803 
41804 END IF;
41805 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
41806   RAISE E_ROUTINE_ERRORS;
41807 END IF;
41808 
41809 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41810   FOR i in l_debug loop
41811   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41812   engine_debug('=CONTEXT PASSED: '||i.CONTEXT);
41813   engine_debug('=ATTRIBUTE     : '||i.ATTRIBUTE);
41814   engine_debug('=VALUE         : ' ||i.VALUE_FROM);
41815   engine_debug('=LINE INDEX    : ' ||i.LINE_INDEX);
41816   engine_debug('================================');
41817   END IF;
41818   END LOOP;
41819 
41820   FOR I in debug_cur LOOP
41821  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41822 	engine_debug('Request Type Code: '|| I.REQUEST_TYPE_CODE);
41823 	engine_debug('Line Index: '|| I.LINE_INDEX);
41824 	engine_debug('Line Type Code: '|| I.LINE_TYPE_CODE);
41825 	engine_debug('Price Flag: ' || I.PRICE_FLAG);
41826 	engine_debug('Price List Header Id: ' || I.PRICE_LIST_HEADER_ID);
41827 	engine_debug('Rounding Factor : ' || I.ROUNDING_FACTOR);
41828  END IF;
41829   END LOOP;
41830 
41831 
41832 END IF;
41833 
41834 /*
41835 INDX,QP_PREQ_GRP.price_request.price_request_upd1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
41836 INDX,QP_PREQ_GRP.price_request.price_request_upd1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
41837 */
41838 /*
41839 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,APPLICATION_ID,1
41840 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,DESCRIPTIVE_FLEXFIELD_NAME,2
41841 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,DESCRIPTIVE_FLEX_CONTEXT_CODE,3
41842 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,APPLICATION_COLUMN_NAME,4
41843 
41844 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_FLEX_VALUE_SETS_U1,FLEX_VALUE_SET_ID,1
41845 */
41846 	--G_AM_INSTALLED_PROFILE := nvl(FND_PROFILE.value('QP_ATTRIBUTE_MANAGER_INSTALLED'), G_YES); /* default is G_YES by yangli 03/12/2002*/
41847 	G_AM_INSTALLED_PROFILE := QP_UTIL.Attrmgr_Installed;
41848 		/* by yangli 05/02/02*/
41849 
41850        IF G_AM_INSTALLED_PROFILE = G_YES THEN
41851        BEGIN
41852             UPDATE /*+ dynamic_sampling(1) */ qp_npreq_line_attrs_tmp lattr
41853 	    SET value_from = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_from)),
41854 	        value_to = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_to))
41855     	    WHERE attribute_type = G_PRICING_TYPE
41856 	    AND pricing_status_code = G_STATUS_UNCHANGED
41857 	    AND exists (
41858                 SELECT format_type
41859                 FROM fnd_flex_value_sets VSET,
41860                      qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
41861                 WHERE vset.flex_value_set_id = segments.user_valueset_id
41862                 AND segments.application_id = 661
41863                 AND pcontexts.prc_context_type <> 'QUALIFIER'
41864                 AND pcontexts.prc_context_code = lattr.context
41865                 AND segments.segment_mapping_column = lattr.attribute
41866                 AND segments.prc_context_id = pcontexts.prc_context_id
41867                 AND vset.format_type = 'N'); --by yangli 03/06/2002 9:30am
41868 
41869         EXCEPTION
41870            WHEN OTHERS THEN
41871                  x_return_status := FND_API.G_RET_STS_ERROR;
41872                 BEGIN
41873 
41874                  FOR l_rec IN am_attr_msg_cur
41875                  LOOP
41876                          l_msg_context    := l_rec.context;
41877                          l_msg_attribute  := l_rec.attribute;
41878                          l_msg_value_from := qp_number.number_to_canonical(l_rec.value_from);
41879                          l_msg_value_to   := qp_number.number_to_canonical(l_rec.value_to);
41880                  END LOOP;
41881 
41882                 EXCEPTION
41883                  WHEN OTHERS THEN
41884                              l_status_text := 'Exception in QP_PREQ_GRP.PRICE_REQUEST ';
41885                              l_status_text :=  l_status_text|| 'This Attribute( with Context: ' || l_msg_context || ' and Attribute: '|| l_msg_attribute||' ) is defined as numeric but passed as non-numeric/Errored ';
41886                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41887                  engine_debug('l_status_text '|| l_status_text);
41888                END IF; --4033618
41889                 END;
41890                 RAISE E_ROUTINE_ERRORS;
41891          END;
41892 
41893 	ELSE
41894 
41895          BEGIN
41896 	    UPDATE qp_npreq_line_attrs_tmp lattr
41897 	    SET value_from = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_from)),
41898 	        value_to = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_to))
41899 	    WHERE attribute_type = G_PRICING_TYPE
41900 	    AND pricing_status_code = G_STATUS_UNCHANGED
41901 	    AND exists (
41902                 SELECT format_type
41903                 FROM fnd_flex_value_sets VSET,fnd_descr_flex_column_usages DFLEX
41904                 WHERE vset.flex_value_set_id = dflex.flex_value_set_id
41905 	        AND dflex.application_id = 661
41906                 AND dflex.descriptive_flexfield_name = 'QP_ATTR_DEFNS_PRICING'
41907                 AND dflex.descriptive_flex_context_code = lattr.context
41908                 AND dflex.application_column_name = lattr.attribute
41909 	        AND vset.format_type = 'N');
41910 
41911          EXCEPTION
41912         --changes for bug 2174000 a qty>23digits causes numeric or value error
41913         --due to the format mas in number_to_canonical
41914         When OTHERS Then
41915           x_return_status := FND_API.G_RET_STS_ERROR;
41916               BEGIN
41917                  FOR l_rec IN attr_msg_cur
41918                  LOOP
41919                          l_msg_context    := l_rec.context;
41920                          l_msg_attribute  := l_rec.attribute;
41921                          l_msg_value_from := qp_number.number_to_canonical(l_rec.value_from);
41922                          l_msg_value_to   := qp_number.number_to_canonical(l_rec.value_to);
41923                  END LOOP;
41924               EXCEPTION
41925                          WHEN OTHERS THEN
41926                              l_status_text := 'Exception in QP_PREQ_GRP.PRICE_REQUEST ';
41927                              l_status_text := l_status_text || 'This Attribute( with Context: ' || l_msg_context || ' and Attribute: '|| l_msg_attribute||' ) is defined as numeric but passed a
41928 s non-numeric/Errored';
41929               END;
41930           Raise E_ROUTINE_ERRORS;
41931         END;
41932 
41933        END IF; --if G_AM_INSTALLED_PROFILE is true
41934 
41935 -- begin shu, aso rounding
41936 FOR i IN get_request_type_code_cur LOOP
41937   G_REQUEST_TYPE_CODE:=i.request_type_code;
41938 END LOOP;
41939 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41940 engine_debug ('G_REQUEST_TYPE_CODE: '||G_REQUEST_TYPE_CODE);
41941 engine_debug ('G_TEMP_TABLE_INSERT_FLAG: '||G_TEMP_TABLE_INSERT_FLAG);
41942 END IF;
41943 
41944 -- Code for Pattern Engine
41945 -- To get PTE code
41946 
41947 BEGIN
41948   SELECT pte_code
41949   INTO G_PTE_CODE
41950   FROM QP_PTE_REQUEST_TYPES_B
41951   WHERE request_type_code = G_REQUEST_TYPE_CODE;
41952 
41953 EXCEPTION
41954 WHEN OTHERS THEN
41955    G_PTE_CODE := NULL;
41956 END;
41957 
41958 engine_debug ('G_PTE_CODE: '||G_PTE_CODE);
41959 
41960  SELECT MIN(line_index), MAX(line_index)
41961  INTO G_MIN_LINE_INDEX,G_MAX_LINE_INDEX
41962  FROM QP_NPREQ_LINES_TMP;
41963 
41964 engine_debug ('G_MIN_LINE_INDEX: '||G_MIN_LINE_INDEX);
41965 engine_debug ('G_MAX_LINE_INDEX: '||G_MAX_LINE_INDEX);
41966 
41967 -- Pattern Code end
41968 
41969 
41970 IF (p_control_rec.rounding_flag IS NULL) THEN
41971   IF G_REQUEST_TYPE_CODE = 'ASO' AND G_TEMP_TABLE_INSERT_FLAG='Y' THEN
41972     G_ROUNDING_FLAG := 'Q';
41973   ELSE -- non 'ASO'
41974     G_ROUNDING_FLAG := 'Y';
41975   END IF;
41976 ELSE -- p_control_rec.rounding_flag not null, honor what is passed
41977   G_ROUNDING_FLAG := p_control_rec.rounding_flag;
41978 END IF;
41979 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41980 engine_debug ('G_ROUNDING_FLAG: '||G_ROUNDING_FLAG);
41981 END IF;
41982 -- end shu, aso rounding
41983 
41984 -- Bug 3143535 - ORDER AMOUNT CALCULATION ISSUE
41985 -- if G_PRICE_PHASE_FLAG = TRUE then *** Comment for bug#3588320 ***
41986   OPEN order_amount_cur;
41987   FETCH order_amount_cur INTO G_BEFORE_PRICING_ORD_AMT;
41988   CLOSE order_amount_cur;
41989   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
41990     engine_debug ('G_BEFORE_PRICING_ORD_AMT: '||G_BEFORE_PRICING_ORD_AMT);
41991   END IF;
41992 -- end if;
41993 
41994 IF (p_control_rec.calculate_flag = G_CALCULATE_ONLY) THEN
41995 qp_debug_util.tstart('CALL_CALCULATION_ENGINE_A','Procedure stage A call CALL_CALCULATION_ENGINE');
41996   CALL_CALCULATION_ENGINE(p_is_direct_call => TRUE,
41997                           x_status_code    =>l_return_status,
41998                           x_status_text    =>l_status_text);
41999 qp_debug_util.tstop('CALL_CALCULATION_ENGINE_A');
42000   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
42001     RAISE E_ROUTINE_ERRORS;
42002   END IF;
42003 
42004 ELSIF (p_control_rec.calculate_flag IN (G_SEARCH_N_CALCULATE,G_SEARCH_ONLY) )THEN
42005 
42006 -- 4227407/4361975, this call to update_rounding_factor used to be inside l_phase_cur
42007 -- shu, fix bug 2416047
42008 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42009   engine_debug('update_rounding_factor...');
42010 END IF;
42011 -- Update Rounding Factor, if rounding_flag not N  -- Ravi, shu new rounding
42012 IF G_ROUNDING_FLAG <> 'N' THEN -- shu, aso rounding,
42013     	 	UPDATE_ROUNDING_FACTOR (
42014     	 		QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
42015     	 		l_return_status,
42016                 	l_status_text);
42017 END IF; -- end if rounding_flag
42018 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42019   RAISE E_ROUTINE_ERRORS;
42020 END IF;
42021 
42022 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42023 engine_debug('BEFORE event phase loop');
42024 END IF;
42025  l_gone_in_phase_cur_loop := 'N';
42026  --KDURGASI changes for pattern based select modifiers
42027 	  IF G_QP_PATTERN_SEARCH IN (G_QP_PATTERN_MOD_SEARCH,G_QP_PATTERN_PRL_SEARCH,G_QP_PATTERN_BOTH_SEARCH) THEN
42028 		qp_debug_util.tstart('populate_attr_values','Populate Hash Key Values');
42029 		--	populate_attr_values(x_status_code => l_return_status,x_status_text => l_status_text);
42030 		populate_segment_id(x_status_code => l_return_status,x_status_text => l_status_text);
42031 			G_PATRNS_TWO_THREE_INSERTED := 'N';   --smuhamme, whethe pattern_id -2 and -3 inserted or not
42032 			  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
42033 				RAISE E_ROUTINE_ERRORS;
42034 			  END IF;
42035 		qp_debug_util.tstop('populate_attr_values');
42036 	  END IF;
42037   --KDURGASI changes for pattern based select modifiers
42038 
42039 qp_debug_util.addSummaryTimeLog('Search time in each Phase:',1,1,0);
42040 
42041  FOR I IN l_phase_cur(l_event_code => p_control_rec.pricing_event,
42042                       l_event_code1 => p_control_rec.pricing_event || ',') LOOP
42043  l_gone_in_phase_cur_loop := 'Y';
42044  l_formula_processing := 'N'; --8892565
42045 
42046  IF (l_prev_pricing_phase_id <> I.pricing_phase_id) THEN
42047 
42048   l_prev_pricing_phase_id := I.pricing_phase_id;
42049 
42050   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42051   engine_debug('Price Flag Yes Only : '||l_price_flag_yes_only);
42052   END IF;
42053 
42054   IF (I.phase_sequence = G_PRICE_LIST_SEQUENCE AND G_MANUAL_ADJUSTMENTS_CALL_FLAG = G_NO AND l_price_flag_yes_only = G_YES) THEN
42055 
42056     qp_debug_util.tstart('L_PHASE_CUR_LIST_PRICE','List Line Phase(Id) : '||I.name||' ('||I.pricing_phase_id||') ', false, true);
42057     --Set Global Flag ( Change)
42058     G_INSERT_INTO_FORMULA_TMP := TRUE;
42059     --G_INSERT_INTO_FORMULA_TMP := 'Y';
42060 
42061     -- Call to Source Item Quantity
42062     /*IF (l_pricelist_phase_count = 0) THEN
42063 	 Source_Vol_Contexts_Attributes(I.PHASE_SEQUENCE,
42064                                      I.FREEZE_OVERRIDE_FLAG,
42065 							  nvl(p_control_rec.source_order_amount_flag,G_NO),
42066                                      l_return_status,
42067                                      l_status_text);
42068          l_pricelist_phase_count := l_pricelist_phase_count + 1;
42069     END IF;*/
42070 
42071      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42072      engine_debug('Working on phase: '||I.pricing_phase_id);
42073      END IF;
42074 
42075      -- Update the price list id , validated flag
42076      Update_Price_List_Information(I.freeze_override_flag, l_return_status, l_status_text);  -- fix bug 2756754
42077      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
42078        Raise E_ROUTINE_ERRORS;
42079      END IF;
42080 
42081      -- ********
42082      -- 4227047/4361975, the call to Update_Rounding_Factor that used to be here
42083      -- was moved to before this phase cursor
42084 	 IF G_QP_PATTERN_SEARCH IN (G_QP_PATTERN_PRL_SEARCH, G_QP_PATTERN_BOTH_SEARCH) THEN
42085 		create_pattern(G_PRICE_LIST_PHASE_ID, x_status_code =>l_return_status, x_status_text=>l_status_text);
42086 		IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42087 			RAISE E_ROUTINE_ERRORS;
42088 		END IF;
42089 	LIST_HEADER_PATTERN_SEARCH(
42090 			p_pricing_phase_id     => I.pricing_phase_id,
42091                         p_freeze_override_flag => I.freeze_override_flag,
42092                         p_control_rec          => p_control_rec,
42093 			x_status_code          => l_return_status,
42094                         x_status_text          => l_status_text
42095 			);
42096 		IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42097 			RAISE E_ROUTINE_ERRORS;
42098 		END IF;
42099 	 OPEN l_check_secondary_search;
42100          FETCH l_check_secondary_search INTO l_dummy;
42101 
42102          IF l_check_secondary_search%FOUND THEN
42103            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42104              engine_debug('Trying to perform pattern  Secondary Search ');
42105            END IF;
42106 	     PERFORM_SECONDARY_PATRN_SEARCH(I.freeze_override_flag,
42107 				   I.pattern_search_path,
42108 				   p_control_rec,
42109 		                   l_return_status,
42110 		                   l_status_text);
42111 		IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42112 			RAISE E_ROUTINE_ERRORS;
42113 		END IF;
42114           END IF;
42115           CLOSE l_check_secondary_search;
42116 
42117 	 OPEN l_check_no_list_passed;
42118 	 FETCH l_check_no_list_passed INTO l_dummy;
42119 
42120 	 IF (l_check_no_list_passed%FOUND  and (I.SEARCH_FLAG = G_YES OR
42121 	   nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) THEN
42122 	   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42123 	     engine_debug('Trying to Perform pattern BIG Search ');
42124 	   END IF;
42125 
42126           SELECT_PRICE_LIST_LINES_PAT(
42127                p_pricing_phase_id  => I.pricing_phase_id,
42128                p_freeze_override_flag => I.freeze_override_flag,
42129                p_search_path => I.pattern_search_path,
42130                p_control_rec => p_control_rec,
42131                x_status_code => l_return_status,
42132                x_status_text => l_status_text
42133            );
42134 		IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42135 			RAISE E_ROUTINE_ERRORS;
42136 		END IF;
42137 	  -- SELECT_PRICE_LIST_LINES_PATRN API CALL -- DEEPAK ADD CODE
42138 
42139 
42140 	 END IF;
42141 
42142 	 CLOSE l_check_no_list_passed;
42143 
42144      ELSE --G_QP_PATTERN_SEARCH
42145      qp_debug_util.tstart('PLL_LIST_HEADER_SEARCH','Price List Search - LIST_HEADER_SEARCH API');
42146      LIST_HEADER_SEARCH(p_pricing_phase_id     => I.pricing_phase_id,
42147                         p_is_price_list        => TRUE,
42148                         p_freeze_override_flag => I.freeze_override_flag,
42149                         p_control_rec          => p_control_rec,
42150                         p_list_mode            => 'PLL',
42151                         x_further_search       => l_further_search,
42152                         x_status_code          => l_return_status,
42153                         x_status_text          => l_status_text
42154                         );
42155 
42156       qp_debug_util.tstop('PLL_LIST_HEADER_SEARCH');
42157       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42158         RAISE E_ROUTINE_ERRORS;
42159       END IF;
42160 
42161       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42162       engine_debug('l_further_search: '||l_further_search);
42163       engine_debug('l_further_search: '||l_further_search);
42164 
42165       END IF;
42166 	 -- Do further search only if asked for using I.SEARCH_FLAG on the price list phase
42167 	 -- Bug# 1367546
42168 
42169      IF (l_further_search =  G_YES and (I.SEARCH_FLAG = G_YES or
42170          nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) -- price book
42171      THEN
42172      qp_debug_util.tstart('SELECT_PRICE_LIST_LINES','Select Price List Lines(Search Flag on) - SELECT_PRICE_LIST_LINES API');
42173 
42174          SELECT_PRICE_LIST_LINES(p_pricing_phase_id => I.pricing_phase_id,
42175                                  p_freeze_override_flag => I.freeze_override_flag,
42176                                  x_status_code => l_return_status,
42177                                  x_status_text => l_status_text,
42178                                  p_control_rec => p_control_rec); -- vivek\
42179 	qp_debug_util.tstop('SELECT_PRICE_LIST_LINES');
42180        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42181         RAISE E_ROUTINE_ERRORS;
42182        END IF;
42183 
42184       --perform grouping will group all the attributes which
42185       --contribute to one list. It will compare, the incoming
42186       --attributes against setup attributes.  If the count all the
42187       --required attributes match, then it will UPDATE
42188       --pricing status code of the list from 'T'(transient) to 'N'
42189       --(new). If doesn't mathch then it will set the status as
42190       --D_GRP (DELETED by grouping).
42191 
42192       --Evaluating between operator for both qualifiers and pricing attributes
42193       Evaluate_Between(I.pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
42194 
42195       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42196        RAISE E_ROUTINE_ERRORS;
42197       END IF;
42198 
42199 
42200       -- Check for multiple item categories and customer classes
42201       Eliminate_Multiple_Hierarchies(I.pricing_phase_id,l_return_status,l_status_text);
42202 
42203       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42204        RAISE E_ROUTINE_ERRORS;
42205       END IF;
42206 
42207       --Handle_Excluder(I.pricing_phase_id,NULL,l_return_status,l_status_text);
42208 
42209       Perform_Grouping(I.pricing_phase_id, NULL,l_return_status, l_status_text);
42210 
42211       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42212         RAISE E_ROUTINE_ERRORS;
42213       END IF;
42214 
42215       --Process_Line_Group(I.pricing_phase_id);
42216 
42217       --Evaluating between operator for both qualifiers and pricing attributes
42218       Evaluate_Between(I.pricing_phase_id,'Y',NULL,l_return_status,l_status_text);
42219 
42220       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42221        RAISE E_ROUTINE_ERRORS;
42222       END IF;
42223 
42224        QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
42225 				(p_line_index        => NULL,
42226  				 p_order_uom_code    => NULL,
42227 				 p_order_qty         => NULL,
42228 				 p_pricing_phase_id  => I.pricing_phase_id,
42229                                  p_call_big_search   => TRUE,
42230 				 x_list_line_id	 => l_list_line_id,
42231 				 x_return_status     => l_return_status,
42232 				 x_return_status_txt => l_status_text);
42233 
42234         IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42235          RAISE E_ROUTINE_ERRORS;
42236         END IF;
42237 
42238        -- 3773652
42239        -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
42240        begin
42241          select 'x' into l_dummy
42242          from qp_npreq_lines_tmp
42243          where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
42244          and (PRICE_FLAG = G_YES
42245               or
42246               PRICE_FLAG = G_PHASE and l_freeze_override_flag = G_YES)
42247          and rownum = 1;
42248 
42249          Evaluate_Between(i.pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
42250        exception
42251          when no_data_found then
42252            null;
42253        end;
42254 
42255 
42256          Update_Request_Line_Status(p_control_rec,'SUCCESS',i.freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
42257          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42258           RAISE E_ROUTINE_ERRORS;
42259          END IF;
42260 
42261 
42262          --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
42263          --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
42264          --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
42265          --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
42266          --By doing this we will get the right price in the PRICE event on change of UOM on the order line
42267          --for price based on price break
42268          Get_Eligible_Price_Break(I.pricing_phase_id,NULL,l_return_status,l_status_text);
42269 
42270         -- Update the request line status for lines which got valid price list
42271 
42272         --delete children lines of PBH if the parent PBH line get eliminated in
42273         --QP_Resolve_Incompatability_PVT
42274 
42275         /*OPEN l_chk_deleted_pbh_cur(J.line_index,G_PRICE_LIST_PHASE_ID);
42276         FETCH l_chk_deleted_pbh_cur INTO l_dummy;
42277         IF l_chk_deleted_pbh_cur%FOUND THEN
42278             Delete_Invalid_PBH_Children(J.line_index,G_PRICE_LIST_PHASE_ID);
42279         END IF;
42280         CLOSE l_chk_deleted_pbh_cur;*/
42281 
42282      END IF; -- l_further_search
42283        END IF; --G_QP_PATTERN_PRL_SEARCH
42284      -- Bug 3183982, following 4 lines added
42285      CREATE_QUALIFIER_FROM_LIST(l_return_status,l_status_text);
42286      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42287       RAISE E_ROUTINE_ERRORS;
42288      END IF;
42289 
42290      -- Formula Integration
42291       Formula_Processing(NULL, --J.LINE_INDEX,
42292                         I.pricing_phase_id,
42293                         l_return_status,
42294                         l_status_text);
42295 
42296     /*IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42297            DELETE_LINES(J.LINE_INDEX,
42298                         l_return_status,
42299                         l_status_text);
42300     END IF;*/
42301 
42302 
42303  -- vivek, call new API
42304  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
42305  	G_MCURR_INSTALLED_USED := 'Y';  -- shulin, used in QPXPCLPB Calculate_List_Price
42306   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42307   engine_debug('multi-currency TRUE - calling QP_MULTI_CURRENCY_PVT.CURRENCY_CONVERSION_API');
42308   END IF;
42309     QP_MULTI_CURRENCY_PVT.CURRENCY_CONVERSION_API(
42310                                       P_USER_CONVERSION_RATE => P_CONTROL_REC.USER_CONVERSION_RATE
42311                                      ,P_USER_CONVERSION_TYPE => P_CONTROL_REC.USER_CONVERSION_TYPE
42312                                      ,P_FUNCTION_CURRENCY => P_CONTROL_REC.FUNCTION_CURRENCY
42313                                      ,P_ROUNDING_FLAG => nvl(P_CONTROL_REC.ROUNDING_FLAG, 'Y')
42314                                     );
42315  end if;
42316    -- Calculation Engine
42317    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42318    engine_debug('------Before 1st call cal-----------');
42319 
42320    END IF;
42321 
42322    -- Bug 3183982, following 4 lines commented and moved above before calling formula engine
42323    --CREATE_QUALIFIER_FROM_LIST(l_return_status,l_status_text);
42324    --IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42325    -- RAISE E_ROUTINE_ERRORS;
42326    --END IF;
42327 
42328 --   IF p_control_rec.calculate_flag = G_SEARCH_N_CALCULATE THEN
42329 	qp_debug_util.tstart('CALL_CALCULATION_ENGINE_B','Procedure stage B call CALL_CALCULATION_ENGINE');
42330       Call_Calculation_Engine(p_phase_sequence => I.phase_sequence,
42331                               p_freeze_override_flag => I.freeze_override_flag,
42332                               x_status_code =>l_return_status,
42333                               x_status_text =>l_status_text);
42334 	qp_debug_util.tstop('CALL_CALCULATION_ENGINE_B');
42335  --  END IF;
42336 
42337      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42338       RAISE E_ROUTINE_ERRORS;
42339      END IF;
42340 
42341    --If it is a price list sequence we need to create this
42342    --list as a qualifier for next phase. Because price list itself
42343    --can be a qualifier for next phase.
42344 
42345      qp_debug_util.tstop('L_PHASE_CUR_LIST_PRICE',l_tot_phase_time);
42346      qp_debug_util.addSummaryTimeLog(I.name || ' : ' ||i.pattern_search_path_desc || ' : ' || l_tot_phase_time || 'ms',0,2,0);
42347 ELSE  -- not a price list sequence
42348 --KDURGASI changes for pattern based select modifiers
42349      qp_debug_util.tstart('L_PHASE_CUR_MODIFIERS','Modifiers Phase(Id) : '||I.name||' ('||I.pricing_phase_id||') ', false, true);
42350 
42351 	IF G_QP_PATTERN_SEARCH IN (G_QP_PATTERN_MOD_SEARCH, G_QP_PATTERN_BOTH_SEARCH) then
42352 		create_pattern(i.pricing_phase_id, x_status_code =>l_return_status, x_status_text=>l_status_text);
42353 		 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42354 			RAISE E_ROUTINE_ERRORS;
42355 		 END IF;
42356 	END IF;
42357 
42358     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42359      engine_debug ('Starting new a phase, pricing phase id :' || i.pricing_phase_id);
42360     END IF;
42361      --do not execute the rest is there is no list lines at all
42362      --in those rarely used phase.
42363 
42364      -- [julin/4329337/4336077] checking for price list phase before l_chk_phase_exists
42365      IF (i.pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
42366        l_exec_flag := G_NO;
42367      ELSE
42368      --IF i.pricing_phase_id >= l_rare_phase_id THEN
42369        OPEN l_chk_phase_exists(i.pricing_phase_id);
42370        FETCH l_chk_phase_exists INTO l_dummy;
42371        IF l_chk_phase_exists%NOTFOUND THEN
42372          l_exec_flag := G_NO;
42373          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42374          engine_debug('In rare_phase_id:'||i.pricing_phase_id||' exec_flag set to N');
42375          END IF;
42376        ELSE
42377          l_exec_flag := G_YES;
42378        END IF;
42379        CLOSE l_chk_phase_exists;
42380      --END IF;
42381      END IF;
42382 
42383     -- shu, get price_list_header_id for ORDER event, manual adjustments BATCH EVENT
42384     -- so we can update rounding factor in lines_tmp
42385 
42386     IF (G_PRICE_PHASE_FLAG=FALSE) THEN
42387 
42388       --[julin/pricebook] added hint
42389       UPDATE qp_npreq_lines_tmp  a
42390       SET  (price_list_header_id,validated_flag)  =
42391       (SELECT /*+ index(b QP_PREQ_LINE_ATTRS_TMP_N2) */ distinct qp_number.canonical_to_number(value_from),validated_flag
42392       FROM qp_npreq_line_attrs_tmp b
42393       WHERE a.line_index = b.line_index
42394       AND context = G_LIST_HEADER_CONTEXT
42395       AND attribute = G_PRICELIST_ATTRIBUTE
42396       AND attribute_type = G_QUALIFIER_TYPE
42397       AND pricing_status_code = G_STATUS_UNCHANGED
42398       AND a.PRICE_LIST_HEADER_ID < 0 )
42399       WHERE a.PRICE_LIST_HEADER_ID < 0;
42400 
42401       -- ********
42402       -- 4227047/4361975, the call to Update_Rounding_Factor that used to be here
42403       -- was moved to before this phase cursor
42404 
42405       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42406        engine_debug('update_rounding_factor...');
42407       END IF;
42408 -- 9856359
42409       -- Update Rounding Factor, if rounding_flag not N  -- Ravi, shu new rounding
42410       IF G_ROUNDING_FLAG <> 'N' THEN -- shu, aso rounding,
42411     	 	UPDATE_ROUNDING_FACTOR (
42412     	 		QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
42413     	 		l_return_status,
42414                 	l_status_text);
42415                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42416                        RAISE E_ROUTINE_ERRORS;
42417                 END IF;
42418       END IF; -- end if rounding_flag
42419 --9856359
42420     END IF; /* G_PRICE_PHASE_FLAG = FALSE */
42421 
42422    IF l_exec_flag = G_YES THEN
42423 
42424     IF (l_discount_phase_count = 0) THEN
42425 
42426          --Set Global Flag
42427          G_INSERT_INTO_FORMULA_TMP := TRUE;
42428          --G_INSERT_INTO_FORMULA_TMP := 'Y';
42429 
42430 	 Source_Vol_Contexts_Attributes(I.PHASE_SEQUENCE,
42431                                      	I.FREEZE_OVERRIDE_FLAG,
42432 					nvl(p_control_rec.source_order_amount_flag,G_NO),
42433                                      	l_return_status,
42434                                      	l_status_text);
42435          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42436           RAISE E_ROUTINE_ERRORS;
42437          END IF;
42438 
42439          Update_Distinct_Qualifier_Flag(l_return_status,l_status_text);
42440          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42441           RAISE E_ROUTINE_ERRORS;
42442          END IF;
42443 
42444          l_discount_phase_count := l_discount_phase_count + 1;
42445     END IF;
42446 
42447 
42448     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42449     engine_debug('#9999999999990');
42450 
42451     END IF;
42452     qp_debug_util.tstart('DIS_LIST_HEADER_SEARCH','Modifier Search - LIST_HEADER_SEARCH API');
42453      LIST_HEADER_SEARCH(p_pricing_phase_id     => I.pricing_phase_id,
42454                         p_is_price_list        => FALSE,
42455                         p_freeze_override_flag => I.freeze_override_flag,
42456                         p_control_rec          => p_control_rec,
42457                         p_list_mode            => 'DIS',
42458                         x_further_search       => l_further_search,
42459                         x_status_code          => l_return_status,
42460                         x_status_text          => l_status_text
42461                         );
42462       qp_debug_util.tstop('DIS_LIST_HEADER_SEARCH');
42463       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42464         RAISE E_ROUTINE_ERRORS;
42465       END IF;
42466 
42467 
42468 
42469       --only modifiers look at search flag
42470       IF (I.SEARCH_FLAG  =  G_YES) THEN
42471 
42472          l_disc_exist_flag := 'Y';
42473 	 	--KDURGASI changes for pattern based select modifiers
42474 	IF G_QP_PATTERN_SEARCH IN (G_QP_PATTERN_MOD_SEARCH, G_QP_PATTERN_BOTH_SEARCH) THEN
42475 		  qp_debug_util.tstart('PATRN_SELECT_MODIFIERS','Modifier Selection - SELECT_MODIFIERS API');
42476 		  Select_modifiers_patrn (p_pricing_phase_id => I.pricing_phase_id,
42477 				  p_freeze_override_flag => I.freeze_override_flag,
42478 				  p_search_path => I.pattern_search_path,
42479 				  x_status_code => l_return_status,
42480 				  x_status_text => l_status_text);
42481 				  engine_debug('Select_modifiers_patrn-success-'||l_return_status);
42482 		 qp_debug_util.tstop('PATRN_SELECT_MODIFIERS');
42483 
42484          ELSE --KDURGASI changes for pattern based select modifiers
42485 
42486 	 qp_debug_util.tstart('SELECT_MODIFIERS','Modifier Selection - SELECT_MODIFIERS API');
42487          SELECT_MODIFIERS(p_pricing_phase_id => I.pricing_phase_id,
42488                           p_freeze_override_flag => I.freeze_override_flag,
42489                           x_status_code => l_return_status,
42490                           x_status_text => l_status_text);
42491 
42492          qp_debug_util.tstop('SELECT_MODIFIERS');
42493 	 END IF;
42494        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42495         RAISE E_ROUTINE_ERRORS;
42496        END IF;
42497       END IF;
42498 
42499 	IF G_QP_PATTERN_SEARCH NOT IN (G_QP_PATTERN_MOD_SEARCH, G_QP_PATTERN_BOTH_SEARCH) THEN --KDURGASI changes for pattern based select modifiers
42500       -- Check for multiple item categories and customer classes
42501       Eliminate_Multiple_Hierarchies(I.pricing_phase_id,l_return_status,l_status_text);
42502 
42503       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42504         RAISE E_ROUTINE_ERRORS;
42505       END IF;
42506 
42507       --Evaluating between operator for only pricing attributes and not qualifiers
42508       Evaluate_Between(I.pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
42509 
42510       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42511        RAISE E_ROUTINE_ERRORS;
42512       END IF;
42513 
42514 	 -- Not needed in modifiers phases as l_outer_qual_cur takes care of this
42515       --Handle_Excluder(I.pricing_phase_id,l_return_status,l_status_text);
42516 
42517       -- Only product grouping is done in this ...
42518       Perform_Grouping(I.pricing_phase_id, NULL,l_return_status, l_status_text);
42519 
42520       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42521         RAISE E_ROUTINE_ERRORS;
42522       END IF;
42523       END IF;  --KDURGASI changes for pattern based select modifiers
42524       Process_Line_Group(I.pricing_phase_id,l_return_status,l_status_text);
42525       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42526        RAISE E_ROUTINE_ERRORS;
42527       END IF;
42528 
42529       --Evaluating between operator for both qualifiers and pricing attributes
42530       Evaluate_Between(I.pricing_phase_id,'Y',NULL,l_return_status,l_status_text);
42531 
42532       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42533        RAISE E_ROUTINE_ERRORS;
42534       END IF;
42535 
42536       Get_Eligible_Price_Break(I.pricing_phase_id,NULL,l_return_status,l_status_text);
42537       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42538        RAISE E_ROUTINE_ERRORS;
42539       END IF;
42540 
42541       --[julin/5529345]
42542       QP_Process_Other_Benefits_PVT.Calculate_Recurring_Quantity(I.pricing_phase_id, l_return_status, l_status_text);
42543 
42544       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42545        RAISE E_ROUTINE_ERRORS;
42546       END IF;
42547 
42548     FOR J IN l_get_line_index_cur(I.pricing_phase_id)
42549     LOOP
42550      OPEN  l_get_list_price_cur(J.LINE_INDEX);
42551      FETCH l_get_list_price_cur
42552 	INTO l_list_price,l_line_quantity,l_priced_quantity,l_priced_uom_code,l_line_uom_code,l_pricing_effective_date;
42553      CLOSE l_get_list_price_cur;
42554 
42555      Delete_Un_Asked_For_Promotions(J.LINE_INDEX,
42556                                     I.pricing_phase_id,
42557                                     I.INCOMPAT_RESOLVE_CODE,
42558                                     l_return_status,
42559                                     l_status_text);
42560 
42561 	 -- OID/PRG/DIS/Freight Charges
42562 	 QP_Process_Other_Benefits_PVT.Process_Other_Benefits
42563                      (J.LINE_INDEX,
42564                       I.pricing_phase_id,
42565 		      l_pricing_effective_date,
42566 		      l_priced_quantity,
42567 		      p_control_rec.simulation_flag,
42568 		      l_return_status,
42569 		      l_status_text);
42570 
42571         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42572            DELETE_LINES(J.LINE_INDEX,
42573                         l_return_status,
42574                         l_status_text,
42575                         l_error_status_code,
42576                         l_error_status_text);
42577         END IF;
42578 
42579      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42580      engine_debug('list price after phase 1 :'||l_list_price);
42581      END IF;
42582 
42583            --best_price_formula evaluation project 8892565 begin
42584       IF(NVL(Fnd_Profile.value('QP_BEST_PRICE_FORMULA_EVALUATION'),'N')='Y') THEN
42585          IF (l_formula_processing = 'N') then
42586             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42587                  engine_debug ('Best price Formula Processing begin');
42588             END IF;
42589             Formula_Processing(null,--J.LINE_INDEX,
42590                                I.pricing_phase_id,
42591                                l_return_status,
42592                                l_status_text);
42593             l_formula_processing :='Y';
42594          END if;
42595       END IF;
42596       --end best_price_formula evaluation project 8892565 end
42597 
42598      --IF (l_list_price IS NOT NULL) THEN
42599        IF (I.INCOMPAT_RESOLVE_CODE = G_INCOMP_PRECEDENCE) THEN
42600           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42601           engine_debug('Precedence evaluation');
42602           END IF;
42603 	  --qp_debug_util.tstart('RESOLVE_INCOMPATABILITY','Resolving Modifiers Incompatability - Resolve_Incompatability API');
42604 	  QP_Resolve_Incompatability_PVT.Resolve_Incompatability
42605                 (I.pricing_phase_id,
42606                  G_DISCOUNT_PROCESSING,
42607                  l_list_price,
42608                  J.LINE_INDEX,
42609                  l_return_status,
42610                  l_status_text);
42611           --qp_debug_util.tstop('RESOLVE_INCOMPATABILITY');
42612          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42613           RAISE E_ROUTINE_ERRORS;
42614          END IF;
42615        ELSIF (I.INCOMPAT_RESOLVE_CODE = G_INCOMP_BEST_PRICE) THEN
42616           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42617           engine_debug('Best price for phase');
42618           END IF;
42619 	  QP_Resolve_Incompatability_PVT.Best_Price_For_Phase
42620                                    (l_list_price,
42621                                     J.LINE_INDEX,
42622                                     I.pricing_phase_id,
42623                                     l_return_status,
42624                                     l_status_text);
42625           IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42626            RAISE E_ROUTINE_ERRORS;
42627           END IF;
42628        ELSE
42629           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42630           engine_debug('Error, invalid incomp code: '||I.INCOMPAT_RESOLVE_CODE);
42631           END IF;
42632        END IF;
42633        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42634        engine_debug ('G_LINE_DETAIL_INDEX 6: '||G_LINE_DETAIL_INDEX);
42635        END IF;
42636 
42637         --check if there is a pbh line deleted by incomp
42638         --if it has one, delete the children lines.
42639         OPEN l_chk_deleted_pbh_cur(J.line_index,I.pricing_phase_id);
42640         FETCH l_chk_deleted_pbh_cur INTO l_dummy;
42641         IF l_chk_deleted_pbh_cur%FOUND THEN
42642             Delete_Invalid_PBH_Children(J.line_index,I.pricing_phase_id,l_return_status,l_status_text);
42643             IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42644              RAISE E_ROUTINE_ERRORS;
42645             END IF;
42646         END IF;
42647         CLOSE l_chk_deleted_pbh_cur;
42648 
42649      --END IF;
42650 
42651 
42652        IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
42653             DELETE_LINES(J.LINE_INDEX,
42654                         l_return_status,
42655                         l_status_text,
42656                         l_error_status_code,
42657                         l_error_status_text);
42658       END IF;
42659 
42660     END LOOP; --l_get_line_index_cur
42661 
42662     -- Formula  Processing
42663     --best_price_formula evaluation project 8892565 begin
42664     IF(NVL(Fnd_Profile.value('QP_BEST_PRICE_FORMULA_EVALUATION'),'N')='N') THEN
42665          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42666                  engine_debug ('Normal flow Formula Processing begin');
42667          END IF;
42668           Formula_Processing(NULL, --J.LINE_INDEX,
42669                              I.pricing_phase_id,
42670                              l_return_status,
42671                              l_status_text);
42672      END IF;
42673     --best_price_formula evaluation project 8892565 end
42674 
42675     /*IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42676            DELETE_LINES(J.LINE_INDEX,
42677                         l_return_status,
42678                         l_status_text);
42679     END IF;*/
42680    END IF;    --end if for if l_exec_flag=G_YES
42681    qp_debug_util.tstop('L_PHASE_CUR_MODIFIERS',l_tot_phase_time);
42682    qp_debug_util.addSummaryTimeLog(I.name || ' : ' ||i.pattern_search_path_desc || ' : ' || l_tot_phase_time || 'ms',0,2,0);
42683   END IF;     --end if for if price_list_sequence
42684    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42685    engine_debug('calling Set_Order_List_Rltd');
42686    END IF;
42687 
42688 
42689      Set_Order_Level_Rltd(p_freeze_override_flag =>I.freeze_override_flag,
42690                          p_pricing_phase_id     =>I.pricing_phase_id,
42691                          x_status_code          =>l_return_status,
42692                          x_status_text          =>l_status_text);
42693      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42694       RAISE E_ROUTINE_ERRORS;
42695      END IF;
42696   END IF; -- l_pricing_phase_id <> I.pricing_phase_id
42697  END LOOP l_phase_cur;
42698 
42699  IF G_QP_PATTERN_SEARCH IN (G_QP_PATTERN_MOD_SEARCH, G_QP_PATTERN_BOTH_SEARCH, G_QP_PATTERN_PRL_SEARCH) THEN
42700       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42701 	 l_devlp_log_dumped := 'Y';
42702          qp_Debug_util.print_development_csv;
42703       END IF;
42704   END IF;
42705 
42706    --Bug fix 3963888 - Call UPDATE_ROUNDING_FACTOR if l_phase_cur cursor did not return any record
42707   If l_gone_in_phase_cur_loop = 'N' then
42708     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42709       engine_debug('l_gone_in_phase_cur_loop is N');
42710     END IF;
42711     -- Update Rounding Factor, if rounding_flag not N  -- Ravi, shu new rounding
42712    IF G_ROUNDING_FLAG <> 'N' THEN -- shu, aso rounding,
42713        UPDATE_ROUNDING_FACTOR (
42714          QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
42715        l_return_status,
42716          l_status_text);
42717 
42718    END IF; -- end if rounding_flag
42719     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42720       RAISE E_ROUTINE_ERRORS;
42721     END IF;
42722   End if;
42723 
42724  l_product_app_id := 661; -- bug 3963628
42725 
42726  OPEN pricing_install_status_cur;
42727  FETCH pricing_install_status_cur into l_install_status;
42728  CLOSE pricing_install_status_cur;
42729 
42730  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42731  engine_debug('Pricing Install Status : ' || l_install_status);
42732  engine_debug('Limits Install Status : ' || l_limits_installed);
42733 
42734  END IF;
42735  --4900095
42736  IF QP_PREQ_GRP.G_Service_line_qty_tbl.COUNT = 0 THEN
42737    QP_PREQ_PUB.Determine_svc_item_quantity;
42738  END IF;
42739 -- Reset
42740 -- This global variable is used to not calculate the Recurring Qty routine and update the Operand
42741 -- if Limits Code is called to avoid second time calculation of the OPERAND value from the Calculation Engine
42742 -- QP_Process_Other_Limits.Calculate_Recurring_Qty
42743 G_LIMITS_CODE_EXECUTED := 'N';
42744 
42745  -- If advanced pricing and limits profile option = 'Y' call calc engine for limits
42746  IF (l_install_status = 'I' and l_limits_installed = G_YES and
42747      UPPER(p_control_rec.simulation_flag) = 'N' and
42748      nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES) -- price book
42749  THEN
42750   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42751   engine_debug('------Advanced Pricing and Limits Profile is Set-----------');
42752   END IF;
42753   --IF p_control_rec.calculate_flag = G_SEARCH_N_CALCULATE THEN -- check not needed once limits are installed
42754   qp_debug_util.tstart('CALL_CALCULATION_ENGINE_C','Procedure stage C call CALL_CALCULATION_ENGINE');
42755    Call_Calculation_Engine(x_status_code =>l_return_status,
42756                            x_status_text =>l_status_text);
42757   qp_debug_util.tstop('CALL_CALCULATION_ENGINE_C');
42758      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
42759               RAISE E_ROUTINE_ERRORS;
42760      END IF;
42761 
42762      G_LIMITS_CODE_EXECUTED := 'Y';
42763 
42764   --END IF;
42765  ELSE
42766   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42767   engine_debug('------Not calling calculation Engine of limits-----------');
42768   END IF;
42769  END IF ; --l_install_status = 'I' and l_limits_installed = G_YES
42770 
42771 END IF; --  END IF for G_SEARCH_ONLY or G_SEARCH_N_CALCULATE
42772 
42773 
42774 IF (l_install_status = 'I' and l_limits_installed = G_YES and
42775     UPPER(p_control_rec.simulation_flag) = 'N' and
42776     nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES) -- price book
42777 THEN
42778 qp_debug_util.tstart('LIMITS_CALCULATION','Inside LIMITS_CALCULATION');
42779   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42780   engine_debug('------Advanced Pricing and Limits Profile is Set 2 -----------');
42781 
42782   END IF;
42783  --Call the Delete Transactions API only if there is atleast one record in
42784  --qp_limit_transactions table(that is, if limits functionality being used)
42785  OPEN  limit_trans_cur;
42786  FETCH limit_trans_cur INTO l_trans;
42787 
42788  IF limit_trans_cur%FOUND THEN
42789      QP_Limit_Transactions_PVT.Delete(p_control_rec.pricing_event, l_return_status);
42790      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42791       RAISE E_ROUTINE_ERRORS;
42792      END IF;
42793  END IF;
42794  CLOSE limit_trans_cur;
42795 
42796  OPEN  l_limit_check_cur;
42797  FETCH l_limit_check_cur INTO l_header_limit_exists , l_line_limit_exists;
42798  CLOSE l_limit_check_cur;
42799 
42800  -- Process Limits and call calculation engine
42801  IF (l_header_limit_exists = G_YES or l_line_limit_exists = G_YES) THEN
42802    -- Bug 3143535
42803    -- get the order amount from attributes. if not found then sum it from order lines
42804    begin
42805      select qp_number.canonical_to_number(value_from) -- 5515203
42806        into v_order_amount
42807       from qp_npreq_line_attrs_tmp
42808      where CONTEXT = G_PRIC_VOLUME_CONTEXT
42809        AND ATTRIBUTE = G_ORDER_AMOUNT_ATTRIBUTE
42810        AND ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
42811        AND PRICING_STATUS_CODE = G_STATUS_UNCHANGED
42812        and rownum = 1;
42813    exception
42814      when no_data_found then
42815        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42816          engine_debug ('order amount not found in attributes ');
42817        END IF;
42818        OPEN order_amount_cur;
42819        FETCH order_amount_cur INTO v_order_amount;
42820        CLOSE order_amount_cur;
42821    end;
42822 
42823    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42824      engine_debug ('Total order amount = ' || v_order_amount);
42825    END IF;
42826 
42827   /*
42828   INDX,QP_PREQ_GRP.price_request.price_request_upd1,qp_npreq_lines_tmp_N2,LINE_TYPE_CODE,1
42829   */
42830   UPDATE qp_npreq_lines_tmp
42831   SET UNIT_PRICE = v_order_amount,
42832       PRICED_QUANTITY = 1
42833   WHERE LINE_TYPE_CODE = 'ORDER';
42834 
42835   QP_Limit_Balance_Check_PVT.Process_Limits(l_return_status,l_status_text);
42836 
42837   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
42838     RAISE E_ROUTINE_ERRORS;
42839   END IF;
42840 
42841   --fix for bug 4765137
42842   --to call the delete txn API to delete the limit transactions
42843   --for the modifiers that the process_limits API marked deleted
42844   --during exceptions
42845   --note that the delete API was already called earlier to delete
42846   --the transactions for the modifiers the search engine did not apply
42847   --need to call the delete API again after process_limits which will also
42848   --update the balance
42849    --Call the Delete Transactions API only if there is atleast one record in
42850    --qp_limit_transactions table(that is, if limits functionality being used)
42851    OPEN  limit_trans_cur;
42852    FETCH limit_trans_cur INTO l_trans;
42853 
42854      IF limit_trans_cur%FOUND THEN
42855        QP_Limit_Transactions_PVT.Delete(p_control_rec.pricing_event, l_return_status);
42856        IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
42857         RAISE E_ROUTINE_ERRORS;
42858        END IF;--l_return_status
42859      END IF;--limit_trans_cur%FOUND
42860    CLOSE limit_trans_cur;
42861   --end fix for bug 4765137
42862 
42863 
42864  END IF ;
42865 qp_debug_util.tstop('LIMITS_CALCULATION');
42866 END IF; --l_install_status = 'I' and l_limits_installed = G_YES
42867 
42868  -- Do not Call Calculation Engine if it is from public API Call
42869  -- l_disc_exist_flag will be G_YES when there are discounts. Make a second calculation engine call
42870  -- only if there are discounts,since calculation engine is called for pricing once
42871  IF (G_PUBLIC_API_CALL_FLAG = G_NO and l_disc_exist_flag = G_YES) THEN
42872   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42873   engine_debug('------Calling Calculation Engine as the call is from Group Engine Call-----------');
42874   END IF;
42875   qp_debug_util.tstart('CALL_CALCULATION_ENGINE_D','Procedure stage D call CALL_CALCULATION_ENGINE');
42876   Call_Calculation_Engine(x_status_code =>l_return_status,
42877                           x_status_text =>l_status_text);
42878   qp_debug_util.tstop('CALL_CALCULATION_ENGINE_D');
42879   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
42880      RAISE E_ROUTINE_ERRORS;
42881   END IF;
42882  ELSE
42883   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42884   engine_debug('------Not Calling Calculation Engine as the call is from Public Engine Call-----------');
42885   END IF;
42886  END IF;
42887 
42888   qp_debug_util.tstart('REDEEM_COUPONS','Procedure QP_COUPON_PVT.REDEEM_COUPONS');
42889  l_status_text:='QP_COUPON_PVT.REDEEM_COUPONS';
42890  QP_COUPON_PVT.REDEEM_COUPONS(p_control_rec.simulation_flag, l_return_status, l_status_text);
42891   qp_debug_util.tstop('REDEEM_COUPONS');
42892   IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
42893       l_status_text:= 'QP_COUPON_PVT.REDEEM_COUPONS'||l_status_text;
42894 	 RAISE E_ROUTINE_ERRORS;
42895   END IF;
42896   -----------------END: Specific to PL/SQL Engine----------------------
42897 ELSE --Java Engine installed
42898   -----------------START: Specific to Java Engine------------------------
42899   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42900     engine_debug('Before calling QP_JAVA_ENGINE.request_price..');
42901     l_begin_time := dbms_utility.get_time;
42902   END IF;
42903 
42904   l_request_id := QP_Price_Request_Context.GET_REQUEST_ID;
42905   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42906     engine_debug('Request Id:'||l_request_id);
42907     engine_debug('calc_flag:'||p_control_rec.calculate_flag);
42908   END IF;
42909 
42910   QP_JAVA_ENGINE.request_price(request_id => l_request_id,
42911                                 p_control_rec => p_control_rec,
42912                                 x_return_status => l_return_status,
42913                                 x_return_status_text => l_status_Text);
42914 
42915   IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
42916     --l_status_text:= 'QP_JAVA_ENGINE.request_price:'||l_status_text;
42917     RAISE E_ROUTINE_ERRORS;
42918   END IF;
42919   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42920     l_end_time := dbms_utility.get_time;
42921     engine_debug('Elapsed time for calling QP_JAVA_ENGINE: '||(l_end_time - l_begin_time)/100);
42922   END IF;
42923   --------------END: Specific to Java Engine------------------
42924 END IF; -- DONE PL/SQL and JAVA ENGINE CALL SWITCH by yangli
42925 
42926 --============START: Populate_Output() needed by Java and PL/SQL engine=============
42927 IF (G_TEMP_TABLE_INSERT_FLAG = G_YES and G_PUBLIC_API_CALL_FLAG = G_NO) THEN
42928  Populate_Output ( l_line_tbl,
42929                    l_line_qual,
42930                    l_line_attr_tbl,
42931                    l_line_detail_tbl,
42932                    l_line_detail_qual_tbl,
42933                    l_line_detail_attr_tbl,
42934                    l_related_lines_tbl);
42935 
42936  x_line_tbl := l_line_tbl;
42937  x_line_qual := l_line_qual;
42938  x_line_attr_tbl := l_line_attr_tbl;
42939  x_line_detail_tbl := l_line_detail_tbl;
42940  x_line_detail_qual_tbl := l_line_detail_qual_tbl;
42941  x_line_detail_attr_tbl := l_line_detail_attr_tbl;
42942  x_related_lines_tbl :=  l_related_lines_tbl;
42943 
42944  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42945  engine_debug('No of record in x_line_detail_attr_tbl: '|| x_line_detail_attr_tbl.count);
42946 
42947  END IF;
42948 END IF;
42949 --===========END: Populate_Output() needed by both Java Engine and PL/SQL engine=======
42950 
42951  --l_pricing_end_time := sysdate;
42952 
42953  --l_pricing_end_time := dbms_utility.get_time;
42954 
42955 
42956  --l_time_difference := (l_pricing_end_time - l_pricing_start_time)/100 ;
42957 
42958 --============START: Debug Viewer needed by Java and PL/SQL engine=============
42959 IF G_QP_DEBUG_PROFILE_VALUE = G_ENGINE_TIME_TRACE_ON THEN   --3085171
42960  --added to note redo log
42961  begin
42962  select value into l_pricing_end_redo
42963   from v$mystat, v$statname
42964   where v$mystat.statistic# = v$statname.statistic#
42965   and v$statname.name = 'redo size';
42966  exception
42967  when others then
42968  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42969  engine_debug('Error in looking up redo end '||SQLERRM);
42970  END IF;
42971  end;
42972 END IF;
42973 
42974  	--hw
42975  	-- change session time and session redo
42976 	g_start_time := g_total_time;
42977 	g_start_redo := g_total_redo;
42978 	g_total_time := g_total_time + (dbms_utility.get_time - l_pricing_start_time)/100;
42979 	g_total_redo := g_total_redo + (l_pricing_end_redo - l_pricing_start_redo);
42980 
42981 --Changes for bug2961617
42982 /*
42983 	execute immediate 'select ' || '''' || 'QP_PREQ_GRP: version, start redo, total redo, start time, total time: ' || G_VERSION || ', ' || g_start_redo || ', ' || g_total_redo || ', ' || g_start_time || ', ' || g_total_time || '''' || ' from dual ';
42984 */
42985 
42986 IF G_QP_DEBUG_PROFILE_VALUE = G_ENGINE_TIME_TRACE_ON THEN   --3085171
42987 BEGIN
42988 
42989         execute immediate 'select ' || '''' || 'QP_PREQ_GRP: version, start redo, total redo, start time, total time: ' || G_VERSION || ', ' || g_start_redo || ', ' || g_total_redo || ', ' || g_start_time || ', ' || g_total_time || '''' || ' from dual ';
42990 /*
42991 SELECT 'QP_PREQ_GRP: version, start redo, total redo, start time, total time: '||G_VERSION ||g_start_redo ||g_total_redo ||g_start_time ||g_total_time INTO l_time_stats FROM DUAL;
42992 */
42993 
42994 EXCEPTION
42995 
42996 WHEN OTHERS THEN
42997     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
42998     engine_debug('< In Price_Request procedure>. Failed to get time statistics');
42999     END IF;
43000 END;
43001 END IF;
43002 
43003  /*
43004   l_redo_difference := l_pricing_end_redo - l_pricing_start_redo ;
43005 
43006  execute immediate 'select '||''''|| ' Total Time in QP_PREQ_GRP(in sec) : ' || l_time_difference||' Total redo in QP_PREQ_GRP : '||l_redo_difference||''''||' from dual ';
43007  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43008  engine_debug('redo log in GRP '||l_redo_difference);
43009  END IF;
43010 */
43011 
43012  /* IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
43013     x_return_status := FND_API.G_RET_STS_ERROR;
43014     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43015     engine_debug('< In Price_Request procedure>. Populate_Temp_Tables return with errors');
43016     END IF;
43017     RETURN;
43018  END IF; */
43019 
43020    IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43021       (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43022       IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43023            QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43024                                           l_return_status,
43025                                           l_status_text
43026                                           );
43027          --x_return_status := l_return_status; -- fix bug 2756754
43028          --x_return_status_text := l_status_text; -- fix bug 2756754
43029          IF l_return_status = FND_API.G_RET_STS_ERROR THEN  -- fix bug 2756754
43030            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43031              engine_debug('Error QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES: '||l_status_text);
43032            END IF; -- END IF G_DEBUG_ENGINE
43033            RAISE E_DEBUG_ROUTINE_ERROR; -- fix bug 2756754, dbg error should not be an hard error
43034          END IF;
43035       END IF;
43036    END IF;
43037 
43038 	-- added global condition for caching - hwong
43039 	G_NEW_PRICING_CALL := G_YES;
43040  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43041 	engine_debug('hw/pre: change to g_yes');
43042 
43043 
43044 
43045 engine_debug('***Exiting Oracle Pricing***');
43046 
43047  END IF;
43048 --============END: Debug Viewer needed by Java and PL/SQL engine=============
43049 
43050 qp_debug_util.tstop('ENGINE_CALL_QPXGPREB');
43051 
43052 /*qp_debug_util.tdump;
43053 qp_debug_util.tflush;*/
43054 
43055 EXCEPTION
43056    WHEN E_SEARCH_FLAG_IS_NULL THEN
43057      x_return_status := FND_API.G_RET_STS_ERROR;
43058      x_return_status_text := 'The search flag on qp_event_phase is null for phase '||l_pricing_phase_id;
43059      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43060      engine_debug( 'The search flag on qp_event_phase is null for phase '||l_pricing_phase_id);
43061      END IF;
43062        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43063           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43064           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43065                QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43066                                               l_return_status,
43067                                               l_status_text
43068                                               );
43069              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
43070                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43071                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
43072                 END IF;
43073              END IF;
43074           END IF;
43075        END IF;
43076    WHEN E_INVALID_CONTROL_RECORD THEN
43077      x_return_status := FND_API.G_RET_STS_ERROR;
43078      x_return_status_text := 'INVALID CONTROL RECORD';
43079 
43080        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43081           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43082           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43083                QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43084                                               l_return_status,
43085                                               l_status_text
43086                                               );
43087              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
43088                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43089                 engine_debug('Error occured in Debug Routine: ' || l_return_status);
43090                 END IF;
43091              END IF;
43092           END IF;
43093        END IF;
43094    WHEN E_ROUTINE_ERRORS THEN
43095      x_return_status := FND_API.G_RET_STS_ERROR;
43096      x_return_status_text := l_status_text;
43097      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43098      engine_debug(l_status_text);
43099 
43100      END IF;
43101        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43102           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43103           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43104                QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43105                                               l_return_status,
43106                                               l_status_text
43107                                               );
43108              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
43109                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43110                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
43111                 END IF;
43112              END IF;
43113           END IF;
43114        END IF;
43115 
43116        -- Changes for pattern
43117        IF G_QP_PATTERN_SEARCH IN (G_QP_PATTERN_MOD_SEARCH, G_QP_PATTERN_BOTH_SEARCH, G_QP_PATTERN_PRL_SEARCH) THEN
43118         IF G_DEBUG_ENGINE = FND_API.G_TRUE AND l_devlp_log_dumped = 'N' THEN
43119            qp_Debug_util.print_development_csv;
43120         END IF;
43121        END IF;
43122    WHEN E_INVALID_PHASE THEN
43123       x_return_status := FND_API.G_RET_STS_ERROR;
43124       x_return_status_text := 'Invalid phase sequence for Price List phase, Check setup data';
43125       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43126       engine_debug('Invalid phase sequence for Price List phase');
43127 
43128       END IF;
43129        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43130           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43131           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43132                 QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43133                                               l_return_status,
43134                                               l_status_text
43135                                               );
43136              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
43137                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43138                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
43139                 END IF;
43140              END IF;
43141           END IF;
43142        END IF;
43143    WHEN E_NO_SOURCE_SYSTEM THEN
43144       x_return_status := FND_API.G_RET_STS_ERROR;
43145       x_return_status_text := ('No source system found for your request type');
43146       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43147       engine_debug('No source system found for your request type');
43148 
43149       END IF;
43150        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43151           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43152           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43153                 QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43154                                               l_return_status,
43155                                               l_status_text
43156                                               );
43157              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
43158                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43159                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
43160                 END IF;
43161              END IF;
43162           END IF;
43163        END IF;
43164    --fix bug 2756754
43165    WHEN E_DEBUG_ROUTINE_ERROR THEN
43166       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43167         engine_debug('Error occured in Debug Routine.');
43168       END IF;
43169 
43170    WHEN OTHERS THEN
43171      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43172      engine_debug('In Price_Request: '||l_status_text||' '||SQLERRM);
43173      END IF;
43174      x_return_status := FND_API.G_RET_STS_ERROR;
43175      x_return_status_text := SQLERRM;
43176 
43177        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
43178           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
43179           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
43180                 QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
43181                                               l_return_status,
43182                                               l_status_text
43183                                               );
43184              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
43185                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
43186                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
43187                 END IF;
43188              END IF;
43189           END IF;
43190        END IF;
43191 END PRICE_REQUEST;
43192 
43193 
43194 
43195 END QP_PREQ_GRP;