DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_PREQ_GRP

Source


1 PACKAGE BODY QP_PREQ_GRP AS
2 /* $Header: QPXGPREB.pls 120.70.12010000.6 2008/12/01 17:58:47 dhgupta ship $ */
3 
4 G_VERSION VARCHAR2(240):= '/* $Header: QPXGPREB.pls 120.70.12010000.6 2008/12/01 17:58:47 dhgupta 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_LIST_LINE_NO_TBL                 VARCHAR_TYPE;
133   G_ACCRUAL_FLAG_TBL                 VARCHAR_TYPE;
134   G_ACCRUAL_CONVERSION_RATE_TBL      NUMBER_TYPE;
135   G_ESTIM_ACCRUAL_RATE_TBL           NUMBER_TYPE;
136   G_RECURRING_FLAG_TBL               VARCHAR_TYPE;
137   G_SELECTED_VOLUME_ATTR_TBL         VARCHAR_TYPE;
138   G_QUALIFIERS_EXIST_FLAG_TBL        VARCHAR_TYPE;
139   G_PRICING_ATTRS_EXIST_FLAG_TBL     VARCHAR_TYPE;
140   G_PRICE_LIST_ID_TBL                NUMBER_TYPE;
141   G_PL_VALIDATED_FLAG_TBL            VARCHAR_TYPE;
142   G_HEADER_LIMIT_EXISTS_TBL          VARCHAR_TYPE;
143   G_LINE_LIMIT_EXISTS_TBL            VARCHAR_TYPE;
144   G_CHARGE_TYPE_CODE_TBL             VARCHAR_TYPE;
145   G_CHARGE_SUBTYPE_CODE_TBL          VARCHAR_TYPE;
146   G_CURRENCY_HEADER_ID_TBL           NUMBER_TYPE; /* vivek */
147   G_SELLING_ROUNDING_TBL           NUMBER_TYPE; /* vivek */
148   G_ORDER_CURRENCY_TBL               VARCHAR_TYPE; /* vivek */
149   G_BASE_CURRENCY_CODE_TBL           VARCHAR_TYPE; /* vivek */
150   G_CURRENCY_DETAIL_ID_TBL           NUMBER_TYPE; /* sunilpandey */
151 --  G_LDET_LINE_QUANTITY_TBL		     NUMBER_TYPE; -- defined in SPEC
152   G_ACCUM_CONTEXT_TBL                VARCHAR_TYPE; -- for accum range break
153   G_ACCUM_ATTRIBUTE_TBL              VARCHAR_TYPE; -- for accum range break
154   G_ACCUM_FLAG_TBL                   VARCHAR_TYPE; -- for accum range break
155   G_BREAK_UOM_TBL               VARCHAR_TYPE; /* Proration */
156   G_BREAK_CONTEXT_TBL           VARCHAR_TYPE; /* Proration */
157   G_BREAK_ATTRIBUTE_TBL         VARCHAR_TYPE; /* Proration */
158   G_SECONDARY_PRICELIST_IND_TBL VARCHAR_30_TYPE;
159 
160   G_LIST_HEADER_ID_TBL_Q             NUMBER_TYPE;
161   G_LIST_LINE_ID_TBL_Q               NUMBER_TYPE;
162   G_LINE_INDEX_TBL_Q                 NUMBER_TYPE;
163   G_LIST_LINE_TYPE_TBL_Q             VARCHAR_TYPE;
164   G_VALIDATED_FLAG_TBL_Q             VARCHAR_TYPE;
165   G_APPLIED_FLAG_TBL_Q               VARCHAR_TYPE;
166   G_AUTOMATIC_FLAG_TBL_Q             VARCHAR_TYPE;
167   G_START_DATE_ACTIVE_TBL_Q          DATE_TYPE;
168   G_END_DATE_ACTIVE_TBL_Q            DATE_TYPE;
169   G_PRICING_EFFECTIVE_DATE_TBL_Q     DATE_TYPE;
170   G_LINE_TYPE_CODE_TBL_Q             VARCHAR_TYPE;
171   G_PRICING_PHASE_ID_TBL_Q           PLS_INTEGER_TYPE;
172   G_UNIQUE_KEY_TBL_Q                 VARCHAR_TYPE;
173   G_ATTRIBUTE_LEVEL_TBL_Q            VARCHAR_TYPE;
174   G_ATTRIBUTE_TYPE_TBL_Q             VARCHAR_TYPE;
175   G_CONTEXT_TBL_Q                    VARCHAR_TYPE;
176   G_ATTRIBUTE_TBL_Q                  VARCHAR_TYPE;
177   G_VALUE_FROM_TBL_Q                 VARCHAR_TYPE;
178   G_GROUPING_NO_TBL_Q                PLS_INTEGER_TYPE;
179   G_QUALIFIER_PRECEDENCE_TBL_Q       PLS_INTEGER_TYPE;
180   G_DATATYPE_TBL_Q                   VARCHAR_TYPE;
181   G_SETUP_VALUE_FROM_TBL_Q           VARCHAR_TYPE;
182   G_SETUP_VALUE_TO_TBL_Q             VARCHAR_TYPE;
183   G_PRICING_ATTR_FLAG_TBL_Q          VARCHAR_TYPE;
184   G_OPERATOR_TYPE_TBL_Q              VARCHAR_TYPE;
185   G_CURRENCY_CODE_TBL_Q              VARCHAR_TYPE;
186   G_ASK_FOR_FLAG_TBL_Q               VARCHAR_TYPE;
187   G_LIST_TYPE_CODE_TBL_Q             VARCHAR_TYPE;
188   G_QUALIFIER_TYPE_TBL_Q             VARCHAR_TYPE;
189   G_QUALIFIER_GROUP_CNT_TBL_Q        NUMBER_TYPE;
190   G_OTHERS_GROUP_CNT_TBL_Q        	 NUMBER_TYPE;
191   G_HEADER_QUALS_EXIST_FLG_TBL_Q     VARCHAR_TYPE;
192   G_SEARCH_IND_TBL_Q                 NUMBER_TYPE;
193   G_PRICING_STATUS_CODE_TBL_Q        VARCHAR_TYPE;
194   G_START_DATE_ACTIVE_TBL_H_Q        DATE_TYPE;
195   G_END_DATE_ACTIVE_TBL_H_Q          DATE_TYPE;
196   G_START_DATE_ACTIVE_SEC_TBL_Q      DATE_TYPE;
197   G_END_DATE_ACTIVE_SEC_TBL_Q        DATE_TYPE;
198   G_ACTIVE_DATE_FIR_TYPE_TBL_Q       VARCHAR_TYPE;
199   G_ACTIVE_DATE_SEC_TYPE_TBL_Q       VARCHAR_TYPE;
200   G_START_DATE_ACTIVE_FIR_TBL_Q      DATE_TYPE;
201   G_END_DATE_ACTIVE_FIR_TBL_Q        DATE_TYPE;
202   G_HEADER_LIMIT_EXISTS_TBL_Q        VARCHAR_TYPE;
203   G_ACTIVE_DATE_FIRST_TBL_Q          DATE_TYPE;
204   G_ACTIVE_DATE_SECOND_TBL_Q         DATE_TYPE;
205   G_INCOMP_GRP_CODE_TBL_Q            VARCHAR_TYPE;
206   G_ACCR_CONVERSION_RATE_TBL_Q       NUMBER_TYPE;
207   G_ACCRUAL_FLAG_TBL_Q               VARCHAR_TYPE;
208   G_MODIFIER_LEVEL_CODE_TBL_Q        VARCHAR_TYPE;
209   G_LIST_PRICE_TBL_Q                 NUMBER_TYPE;
210   G_LIST_LINE_NO_TBL_Q               VARCHAR_TYPE;
211   G_PRIMARY_UOM_FLAG_TBL_Q           VARCHAR_TYPE;
212   G_OPER_CALCULATION_CODE_TBL_Q      VARCHAR_TYPE;
213   G_OPERAND_TBL_Q                    NUMBER_TYPE;
214   G_NET_AMOUNT_FLAG_TBL_Q            VARCHAR_TYPE; -- IT net_amount 2720717
215   G_PRICING_GROUP_SEQUENCE_TBL_Q     NUMBER_TYPE;
216   G_PRICE_BREAK_TYPE_CODE_TBL_Q      VARCHAR_TYPE;
217   G_PRICE_FORMULA_ID_TBL_Q           NUMBER_TYPE;
218   G_PRODUCT_PRECEDENCE_TBL_Q         NUMBER_TYPE;
219   G_ESTIM_ACCRUAL_RATE_TBL_Q         NUMBER_TYPE;
220   G_DERIVED_QUALIFIER_FLAG_TBL_Q     VARCHAR_TYPE;   -- Added for TCA
221 
222   G_LINE_INDEX_TBL_P              NUMBER_TYPE;
223   G_LINE_DETAIL_INDEX_TBL_P       NUMBER_TYPE;
224   G_LIST_HEADER_ID_TBL_P          NUMBER_TYPE;
225   G_LIST_LINE_ID_TBL_P            NUMBER_TYPE;
226   G_PRICE_BREAK_TYPE_CODE_TBL_P   VARCHAR_TYPE;
227   G_LIST_PRICE_TBL_P              NUMBER_TYPE;
228   G_LIST_LINE_TYPE_TBL_P          VARCHAR_TYPE;
229   G_LIST_TYPE_CODE_TBL_P          VARCHAR_TYPE;
230   G_PRICING_GROUP_SEQUENCE_TBL_P  NUMBER_TYPE;
231   G_PRICING_PHASE_ID_TBL_P        PLS_INTEGER_TYPE;
232   G_OPER_CALCULATION_CODE_TBL_P   VARCHAR_TYPE;
233   G_OPERAND_VALUE_TBL_P           NUMBER_TYPE;
234   G_NET_AMOUNT_FLAG_TBL_P         VARCHAR_TYPE;  -- IT net_amount 2720717
235   G_ASK_FOR_FLAG_TBL_P            VARCHAR_TYPE;
236   G_PRICE_FORMULA_ID_TBL_P        NUMBER_TYPE;
237   G_PRODUCT_PRECEDENCE_TBL_P      NUMBER_TYPE;
238   G_INCOMP_GRP_CODE_TBL_P         VARCHAR_TYPE;
239   G_AUTOMATIC_FLAG_TBL_P          VARCHAR_TYPE;
240   G_OVERRIDE_FLAG_TBL_P           VARCHAR_TYPE;
241   G_PRIMARY_UOM_FLAG_TBL_P        VARCHAR_TYPE;
242   G_PRINT_ON_INVOICE_FLAG_TBL_P   VARCHAR_TYPE;
243   G_MODIFIER_LEVEL_CODE_TBL_P     VARCHAR_TYPE;
244   G_BENEFIT_QTY_TBL_P             NUMBER_TYPE;
245   G_BENEFIT_UOM_CODE_TBL_P        VARCHAR_TYPE;
246   G_LIST_LINE_NO_TBL_P            VARCHAR_TYPE;
247   G_ACCRUAL_FLAG_TBL_P            VARCHAR_TYPE;
248   G_ACCR_CONVERSION_RATE_TBL_P    NUMBER_TYPE;
249   G_ESTIM_ACCRUAL_RATE_TBL_P      NUMBER_TYPE;
250   G_ATTRIBUTE_LEVEL_TBL_P         VARCHAR_TYPE;
251   G_ATTRIBUTE_TYPE_TBL_P          VARCHAR_TYPE;
252   G_CONTEXT_TBL_P                 VARCHAR_TYPE;
253   G_ATTRIBUTE_TBL_P               VARCHAR_TYPE;
254   G_VALUE_FROM_TBL_P              VARCHAR_TYPE;
255   G_SETUP_VALUE_FROM_TBL_P        VARCHAR_TYPE;
256   G_VALIDATED_FLAG_TBL_P          VARCHAR_TYPE;
257   G_APPLIED_FLAG_TBL_P            VARCHAR_TYPE;
258   G_PRICING_ATTR_FLAG_TBL_P       VARCHAR_TYPE;
259   G_GROUPING_NUMBER_TBL_P         NUMBER_TYPE;
260   G_QUALIFIER_PRECEDENCE_TBL_P    NUMBER_TYPE;
261   G_EXCLUDER_FLAG_TBL_P           VARCHAR_TYPE;
262   G_PRODUCT_UOM_CODE_TBL_P        VARCHAR_TYPE;
263   G_QUALIFIER_TYPE_TBL_P          VARCHAR_TYPE;
264   G_ROUNDING_FACTOR_TBL_P         NUMBER_TYPE;
265   G_HEADER_LIMIT_EXISTS_TBL_P     VARCHAR_TYPE;
266   G_LINE_LIMIT_EXISTS_TBL_P       VARCHAR_TYPE;
267   G_CHARGE_TYPE_CODE_TBL_P       VARCHAR_TYPE;
268   G_CHARGE_SUBTYPE_CODE_TBL_P       VARCHAR_TYPE;
269   G_CURRENCY_HEADER_ID_TBL_P      NUMBER_TYPE; /* vivek */
270   G_SELLING_ROUNDING_TBL_P      NUMBER_TYPE; /* vivek */
271   G_ORDER_CURRENCY_TBL_P          VARCHAR_TYPE; /* vivek */
272   G_PRICING_EFFECTIVE_DATE_TBL_P  DATE_TYPE; /* vivek */
273   G_BASE_CURRENCY_CODE_TBL_P      VARCHAR_TYPE; /* vivek */
274   G_CURRENCY_DETAIL_ID_TBL_P      NUMBER_TYPE; /* sunilpandey */
275   G_ACCUM_CONTEXT_TBL_P           VARCHAR_TYPE; -- for accum range break
276   G_ACCUM_ATTRIBUTE_TBL_P         VARCHAR_TYPE; -- for accum range break
277   G_ACCUM_FLAG_TBL_P              VARCHAR_TYPE; -- for accum range break
278 
279   G_ATTRIBUTE_LEVEL_TBL_PR        VARCHAR_TYPE;
280   G_ATTRIBUTE_TYPE_TBL_PR         VARCHAR_TYPE;
281   G_CONTEXT_TBL_PR                VARCHAR_TYPE;
282   G_ATTRIBUTE_TBL_PR              VARCHAR_TYPE;
283   G_VALUE_FROM_TBL_PR             VARCHAR_TYPE;
284   G_OPERATOR_TYPE_TBL_PR          VARCHAR_TYPE;
285   G_SETUP_VALUE_FROM_TBL_PR       VARCHAR_TYPE;
286   G_SETUP_VALUE_TO_TBL_PR         VARCHAR_TYPE;
287   G_DATATYPE_TBL_PR               VARCHAR_TYPE;
288   G_BREAK_UOM_TBL_P               VARCHAR_TYPE; /* Proration */
289   G_BREAK_CONTEXT_TBL_P           VARCHAR_TYPE; /* Proration */
290   G_BREAK_ATTRIBUTE_TBL_P         VARCHAR_TYPE; /* Proration */
291 
292   G_LINE_INDEX_TBL_B              PLS_INTEGER_TYPE;
293   G_LIST_HEADER_ID_TBL_B          NUMBER_TYPE;
294   G_LIST_LINE_ID_TBL_B            NUMBER_TYPE;
295   G_PRICE_BREAK_TYPE_CODE_TBL_B   VARCHAR_TYPE;
296   G_LIST_PRICE_TBL_B              NUMBER_TYPE;
297   G_LIST_LINE_TYPE_TBL_B          VARCHAR_TYPE;
298   G_LIST_TYPE_CODE_TBL_B          VARCHAR_TYPE;
299   G_PRICING_GROUP_SEQUENCE_TBL_B  NUMBER_TYPE;
300   G_PRICING_PHASE_ID_TBL_B        PLS_INTEGER_TYPE;
301   G_OPER_CALCULATION_CODE_TBL_B    VARCHAR_TYPE;
302   G_OPERAND_VALUE_TBL_B            VARCHAR_TYPE;
303   G_NET_AMOUNT_FLAG_TBL_B          VARCHAR_TYPE; -- IT net_amount 2720717
304   G_ASK_FOR_FLAG_TBL_B             VARCHAR_TYPE;
305   G_PRICE_FORMULA_ID_TBL_B         NUMBER_TYPE;
306   G_PRODUCT_PRECEDENCE_TBL_B       NUMBER_TYPE;
307   G_INCOMP_GRP_CODE_TBL_B          VARCHAR_TYPE;
308   G_AUTOMATIC_FLAG_TBL_B           VARCHAR_TYPE;
309   G_OVERRIDE_FLAG_TBL_B            VARCHAR_TYPE;
310   G_PRIMARY_UOM_FLAG_TBL_B         VARCHAR_TYPE;
311   G_PRINT_ON_INVOICE_FLAG_TBL_B    VARCHAR_TYPE;
312   G_MODIFIER_LEVEL_CODE_TBL_B      VARCHAR_TYPE;
313   G_BENEFIT_QTY_TBL_B              NUMBER_TYPE;
314   G_BENEFIT_UOM_CODE_TBL_B         VARCHAR_TYPE;
315   G_LIST_LINE_NO_TBL_B             VARCHAR_TYPE;
316   G_ACCRUAL_FLAG_TBL_B             VARCHAR_TYPE;
317   G_ACCR_CONVERSION_RATE_TBL_B     NUMBER_TYPE;
318   G_ESTIM_ACCRUAL_RATE_TBL_B       NUMBER_TYPE;
319 
320   G_LINE_INDEX_TBL_G              NUMBER_TYPE;
321   G_LIST_HEADER_ID_TBL_G          NUMBER_TYPE;
322   G_LIST_LINE_ID_TBL_G            NUMBER_TYPE;
323   G_NO_OF_PATTS_IN_GRP_TBL_G      NUMBER_TYPE;
324 
325   G_PRICING_PHASE_ID_TBL_A        PLS_INTEGER_TYPE;
326   G_INCOMP_GRP_CODE_TBL_A         VARCHAR_TYPE;
327   G_LINE_DETAIL_TYPE_CODE_TBL_A   VARCHAR_TYPE;
328   G_MODIFIER_LEVEL_CODE_TBL_A     VARCHAR_TYPE;
329   G_PRIMARY_UOM_FLAG_TBL_A        VARCHAR_TYPE;
330   G_LINE_INDEX_TBL_A              PLS_INTEGER_TYPE;
331   G_LINE_DETAIL_INDEX_TBL_A       PLS_INTEGER_TYPE;
332   G_LIST_LINE_ID_TBL_A              NUMBER_TYPE;
333   G_LIST_HEADER_ID_TBL_A              NUMBER_TYPE;
334 
335   --G_QUALIFIER_TEMP_EMPTY CONSTANT VARCHAR2(10) := 'E';
336   --G_QUALIFIER_TEMP_UPDATED CONSTANT VARCHAR2(10) := 'U';
337   --G_QUALIFIER_TEMP_NEED_UPDATE CONSTANT VARCHAR2(10) := 'N';
338   G_QUALIFIER_TEMP VARCHAR2(10);
339   G_LINE_QUALIFIER_TEMP VARCHAR2(10);
340 
341   G_INSERT_INTO_FORMULA_TMP      BOOLEAN ; -- Change
342   --G_INSERT_INTO_FORMULA_TMP      VARCHAR2(10) := 'N'; -- Change
343 
344   -- security
345   G_SECURITY_CONTROL              VARCHAR2(10) := 'OFF'; -- security
346   --G_CURRENT_USER_OP_UNIT   NUMBER := NULL; -- security (moved to spec)
347 
348   -- Bug 3143535 - ORDER AMOUNT CALCULATION ISSUE
349   G_BEFORE_PRICING_ORD_AMT  NUMBER := 0;
350 
351   G_NULL_PROFILE_VALUE      VARCHAR2(30) := 'NULL';
352 
353   -- julin [3805113]: storing for call_calculation_engine()
354   G_CHILD_VALUE_FROM_TBL            VARCHAR_TYPE;
355   G_CHILD_VALUE_TO_TBL              VARCHAR_TYPE;
356   G_PARENT_LINE_DETAIL_INDEX_TBL    NUMBER_TYPE;
357 
358   -- julin [3805113]: default bulk fetch size
359   G_BATCH_SIZE  NUMBER := 1000;
360   G_BATCH_SIZE_1  NUMBER := 50000; -- bug 6364923
361 
362 -- Debug procedure
363 PROCEDURE Set_QP_Debug AS
364 
365  l_output_file			 VARCHAR2(240);
366  l_routine                       VARCHAR2(30) := 'Set_QP_Debug';
367  v_debug_switch    CONSTANT VARCHAR2(30) := 'QP_DEBUG';
368 
369 BEGIN
370 G_QP_DEBUG_PROFILE_VALUE := FND_PROFILE.VALUE(v_debug_switch);
371  -- Introduced for facilitating debugging for non OM Applications
372 --IF (NOT OE_DEBUG_PUB.ISDebugOn) THEN --If om debug is not on , then only look at qp_debug
373 if oe_debug_pub.g_debug_level > 0 then
374  G_DEBUG_ENGINE:= FND_API.G_TRUE;
375 else
376  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
377     (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
378   oe_debug_pub.SetDebugLevel(10);
379   oe_debug_pub.Initialize;
380   oe_debug_pub.debug_on;
381   l_output_file := oe_debug_pub.Set_Debug_Mode('FILE');
382   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
383    engine_debug ('The output file is : ' || l_output_file );
384   END IF;
385   G_DEBUG_ENGINE:= FND_API.G_TRUE;
386  ELSE
387   G_DEBUG_ENGINE:= FND_API.G_FALSE;
388  END IF;
389 END IF;
390 
391 EXCEPTION
392  WHEN OTHERS THEN
393   --x_status_code := FND_API.G_RET_STS_ERROR;
394   --x_status_text :=l_routine||' '||SQLERRM;
395  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
396   engine_debug(l_routine||' '||SQLERRM);
397  END IF;
398 
399 END Set_QP_Debug;
400 
401 -- shu new rounding implementation
402 /*+--------------------------------------------------------------------
403   | UPDATE_ROUNDING_FACTOR
404   | to update rounding_factor in the qp_npreq_lines_tmp table
405   +--------------------------------------------------------------------
406 */
407 PROCEDURE UPDATE_ROUNDING_FACTOR(
408 	p_mcurr_installed_used_flag	IN  VARCHAR2,
409 	x_status_code                   OUT NOCOPY VARCHAR2,
410 	x_status_text                   OUT NOCOPY VARCHAR2) AS
411 
412 	l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.UPDATE_ROUNDING_FACTOR';
413 
414 CURSOR get_price_lists_cur IS
415 SELECT distinct price_list_header_id , currency_code , trunc(pricing_effective_date) pricing_effective_date
416 FROM   qp_npreq_lines_tmp
417 where  price_flag in ('Y','P')
418 and    line_type_code = 'LINE'
419 and    rounding_factor is null
420 and    price_list_header_id > 0; --[julin/5395256]
421 
422 
423 p_price_list_id_tbl    NUMBER_TYPE;
424 p_currency_code_tbl    VARCHAR_TYPE;
425 p_pricing_eff_date_tbl DATE_TYPE;
426 p_rounding_factor_tbl  NUMBER_TYPE;
427 nROWS                  NUMBER :=1000;
428 v_count                NUMBER := 0;
429 
430 BEGIN
431 
432  OPEN get_price_lists_cur;
433 
434  LOOP
435 
436   p_price_list_id_tbl.delete;
437   p_currency_code_tbl.delete;
438   p_pricing_eff_date_tbl.delete;
439 
440  FETCH get_price_lists_cur BULK COLLECT INTO
441   p_price_list_id_tbl,
442   p_currency_code_tbl,
443   p_pricing_eff_date_tbl LIMIT nROWS;
444 
445  EXIT WHEN p_price_list_id_tbl.COUNT = 0;
446 
447   IF (p_price_list_id_tbl.COUNT > 0) THEN
448 
449    v_count := p_price_list_id_tbl.count;
450 
451    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
452     engine_debug('Calling Round Factor function for : '||v_count|| ' price list,currency,pricing date combinations');
453    END IF;
454 
455    FOR i in p_price_list_id_tbl.FIRST .. p_price_list_id_tbl.LAST
456    LOOP
457 
458     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
459      engine_debug('Price List Id : ' || p_price_list_id_tbl(i));
460      engine_debug('Currency Code : ' || p_currency_code_tbl(i));
461      engine_debug('Pricing Date  : ' || p_pricing_eff_date_tbl(i));
462     END IF;
463     p_rounding_factor_tbl(i) :=
464     qp_util_pub.get_rounding_factor(
465                 p_mcurr_installed_used_flag,
466                 p_price_list_id_tbl(i),
467                 p_currency_code_tbl(i),
468                 p_pricing_eff_date_tbl(i));
469 
470     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
471      engine_debug('Rounding factor in QP_PREQ_GRP after the function call : ' || p_rounding_factor_tbl(i));
472     END IF;
473 
474    END LOOP;
475 
476    FORALL i in p_price_list_id_tbl.FIRST .. p_price_list_id_tbl.LAST
477    UPDATE qp_npreq_lines_tmp
478    SET   ROUNDING_FACTOR = p_rounding_factor_tbl(i)
479    WHERE PRICE_FLAG in (QP_PREQ_GRP.G_YES, QP_PREQ_GRP.G_PHASE)
480    AND   PRICE_LIST_HEADER_ID = p_price_list_id_tbl(i)
481    AND   CURRENCY_CODE = p_currency_code_tbl(i)
482    AND   trunc(PRICING_EFFECTIVE_DATE) = p_pricing_eff_date_tbl(i); -- bug 3364978
483 
484     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
485      engine_debug('Number of lines updated with rounding factor : ' || SQL%ROWCOUNT);
486     END IF;
487 
488   END IF;
489  END LOOP;
490 
491  CLOSE get_price_lists_cur;
492 
493 EXCEPTION
494  	WHEN OTHERS THEN
495   		x_status_code := FND_API.G_RET_STS_ERROR;
496   		x_status_text :=l_routine||' '||SQLERRM;
497     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
498   		engine_debug(l_routine||' '||SQLERRM);
499     END IF;
500 END;
501 
502 /*+--------------------------------------------------------------------
503   |ENGINE_DEBUG
504   |For performance concern, we can avoid calling debug
505   |if the debug features is turned off
506   +--------------------------------------------------------------------
507 */
508 PROCEDURE ENGINE_DEBUG(p_text IN VARCHAR2) AS
509  l_return_status VARCHAR2(240);
510  l_status_text   VARCHAR2(240);
511 BEGIN
512  --IF (G_DEBUG_ENGINE  = FND_API.G_TRUE) THEN
513    oe_debug_pub.add(p_text,3);
514 
515 -- Debug Screen related change
516 -- Irrespective of om debug if qp debug is on debug information is captured into qp debug tables
517  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) THEN
518    QP_COPY_DEBUG_PVT.INSERT_DEBUG_LINE(p_text);
519  END IF;
520 
521  --END IF;
522 EXCEPTION
523  WHEN OTHERS THEN
524   NULL;
525 END;
526 
527 /*+---------------------------------------------------------------------
528   |GET_VERSION
529   +---------------------------------------------------------------------
530 */
531 FUNCTION GET_VERSION RETURN VARCHAR2 IS
532 BEGIN
533  --engine_debug(G_VERSION);
534  RETURN G_VERSION;
535 END;
536 
537 /*+----------------------------------------------------------------------
538   |Procedure INSERT_QUAL
539   +----------------------------------------------------------------------
540 */
541 PROCEDURE INSERT_QUAL(
542   p_LIST_HEADER_ID         IN NUMBER_TYPE,
543   p_LIST_LINE_ID           IN NUMBER_TYPE,
544   p_VALIDATED_FLAG         IN VARCHAR_TYPE,
545   p_APPLIED_FLAG           IN VARCHAR_TYPE,
546   p_ATTRIBUTE_LEVEL        IN VARCHAR_TYPE,
547   p_ATTRIBUTE_TYPE         IN VARCHAR_TYPE,
548   p_CONTEXT                IN VARCHAR_TYPE,
549   p_ATTRIBUTE              IN VARCHAR_TYPE,
550   p_VALUE_FROM             IN VARCHAR_TYPE,
551   p_GROUPING_NO            IN PLS_INTEGER_TYPE,
552   p_QUALIFIER_PRECEDENCE   IN PLS_INTEGER_TYPE,
553   p_DATATYPE               IN VARCHAR_TYPE,
554   p_SETUP_VALUE_FROM       IN VARCHAR_TYPE,
555   p_SETUP_VALUE_TO         IN VARCHAR_TYPE,
556   p_PRICING_ATTR_FLAG      IN VARCHAR_TYPE,
557   p_OPERATOR_TYPE          IN VARCHAR_TYPE,
558   p_LIST_TYPE_CODE         IN VARCHAR_TYPE,
559   p_ASK_FOR_FLAG           IN VARCHAR_TYPE,
560   p_QUALIFIER_TYPE         IN VARCHAR_TYPE,
561   p_QUALIFIER_GROUP_CNT    IN NUMBER_TYPE,
562   p_OTHERS_GROUP_CNT    IN NUMBER_TYPE,
563   p_HEADER_QUALS_EXIST_FLAG IN VARCHAR_TYPE,
564   p_SEARCH_IND             IN NUMBER_TYPE,
565   p_PRICING_STATUS_CODE    IN VARCHAR_TYPE,
566   p_START_DATE_ACTIVE      IN DATE_TYPE,
567   p_END_DATE_ACTIVE        IN DATE_TYPE,
568   p_LINE_INDEX             IN NUMBER_TYPE,
569   p_PRICING_EFFECTIVE_DATE IN DATE_TYPE,
570   p_START_DATE_ACTIVE_FIR  IN DATE_TYPE,
571   p_END_DATE_ACTIVE_FIR    IN DATE_TYPE,
572   p_LINE_TYPE_CODE         IN VARCHAR_TYPE,
573   p_PRICING_PHASE_ID       IN PLS_INTEGER_TYPE,
574   p_UNIQUE_KEY             IN VARCHAR_TYPE,
575   p_START_DATE_ACTIVE_H    IN DATE_TYPE,
576   p_END_DATE_ACTIVE_H      IN DATE_TYPE,
577   p_START_DATE_ACTIVE_SEC  IN DATE_TYPE,
578   p_END_DATE_ACTIVE_SEC    IN DATE_TYPE,
579   p_ACTIVE_DATE_FIR_TYPE   IN VARCHAR_TYPE,
580   p_ACTIVE_DATE_SEC_TYPE   IN VARCHAR_TYPE,
581   p_HEADER_LIMIT_EXISTS    IN VARCHAR_TYPE,
582   p_DERIVED_QUALIFIER_FLAG IN VARCHAR_TYPE,  -- Added for TCA
583   x_status_code            OUT NOCOPY VARCHAR2,
584   x_status_text            OUT NOCOPY VARCHAR2)      AS
585 
586   l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_QUAL';
587 
588 BEGIN
589 FORALL i in p_list_header_id.FIRST..p_list_header_id.LAST
590       Insert into QP_PREQ_QUAL_TMP
591       (  LIST_HEADER_ID
592       ,  LIST_LINE_ID
593       ,  LINE_INDEX
594       ,  QUALIFIER_ATTRIBUTE_LEVEL
595       ,  QUALIFIER_ATTRIBUTE_TYPE
596       ,  QUALIFIER_ATTRIBUTE_CONTEXT
597       ,  QUALIFIER_ATTRIBUTE
598       ,  QUALIFIER_ATTRIBUTE_VALUE
599       ,  QUALIFIER_GROUPING_NO
600       ,  QUALIFIER_PRECEDENCE
601       ,  QUALIFIER_DATATYPE
602       ,  SETUP_VALUE_FROM
603       ,  SETUP_VALUE_TO
604       ,  QUALIFIER_PRICING_ATTR_FLAG
605       ,  QUALIFIER_OPERATOR_TYPE
606       ,  ASK_FOR_FLAG
607       ,  CREATED_FROM_LIST_TYPE
608       ,  VALIDATED_FLAG
609       ,  APPLIED_FLAG
610       ,  QUALIFIER_TYPE
611       ,  QUALIFIER_GROUP_CNT
612       ,  OTHERS_GROUP_CNT
613       ,  HEADER_QUALS_EXIST_FLAG
614       ,  SEARCH_IND
615       ,  PRICING_STATUS_CODE
616       ,  START_DATE_ACTIVE
617       ,  END_DATE_ACTIVE
618       ,  PRICING_EFFECTIVE_DATE
619       ,  START_DATE_ACTIVE_FIRST
620       ,  END_DATE_ACTIVE_FIRST
621       ,  LINE_TYPE_CODE
622       ,  UNIQUE_KEY
623       ,  PRICING_PHASE_ID
624       ,  START_DATE_ACTIVE_H
625       ,  END_DATE_ACTIVE_H
626       ,  START_DATE_ACTIVE_SECOND
627       ,  END_DATE_ACTIVE_SECOND
628       ,  ACTIVE_DATE_FIRST_TYPE
629       ,  ACTIVE_DATE_SECOND_TYPE
630       ,  HEADER_LIMIT_EXISTS
631       ,  DERIVED_QUALIFIER_FLAG  -- Added for TCA
632       )
633       VALUES
634       (  p_LIST_HEADER_ID(i)
635       ,  p_LIST_LINE_ID(i)
636       ,  p_LINE_INDEX(i)
637       ,  p_ATTRIBUTE_LEVEL(i)
638       ,  p_ATTRIBUTE_TYPE(i)
639       ,  p_CONTEXT(i)
640       ,  p_ATTRIBUTE(i)
641       ,  p_VALUE_FROM(i)
642       ,  p_GROUPING_NO(i)
643       ,  p_QUALIFIER_PRECEDENCE(i)
644       ,  p_DATATYPE(i)
645       ,  p_SETUP_VALUE_FROM(i)
646       ,  p_SETUP_VALUE_TO(i)
647       ,  p_PRICING_ATTR_FLAG(i)
648       ,  p_OPERATOR_TYPE(i)
649       ,  p_ASK_FOR_FLAG(i)
650       ,  p_LIST_TYPE_CODE(i)
651       ,  p_VALIDATED_FLAG(i)
652       ,  p_APPLIED_FLAG(i)
653       ,  p_QUALIFIER_TYPE(i)
654       ,  p_QUALIFIER_GROUP_CNT(i)
655       ,  p_OTHERS_GROUP_CNT(i)
656       ,  p_HEADER_QUALS_EXIST_FLAG(i)
657       ,  p_SEARCH_IND(i)
658       ,  p_PRICING_STATUS_CODE(i)
659       ,  p_START_DATE_ACTIVE(i)
660       ,  p_END_DATE_ACTIVE(i)
661       ,  p_PRICING_EFFECTIVE_DATE(i)
662       ,  p_START_DATE_ACTIVE_FIR(i)
663       ,  p_END_DATE_ACTIVE_FIR(i)
664       ,  p_LINE_TYPE_CODE(i)
665       ,  p_UNIQUE_KEY(i)
666       ,  p_PRICING_PHASE_ID(i)
667       ,  p_START_DATE_ACTIVE_H(i)
668       ,  p_END_DATE_ACTIVE_H(i)
669       ,  p_START_DATE_ACTIVE_SEC(i)
670       ,  p_END_DATE_ACTIVE_SEC(i)
671       ,  p_ACTIVE_DATE_FIR_TYPE(i)
672       ,  p_ACTIVE_DATE_SEC_TYPE(i)
673       ,  p_HEADER_LIMIT_EXISTS(i)
674       ,  p_DERIVED_QUALIFIER_FLAG(i));  -- Added for TCA
675 EXCEPTION
676   WHEN OTHERS THEN
677   x_status_code := FND_API.G_RET_STS_ERROR;
678   x_status_text :=l_routine||' '||SQLERRM;
679   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
680    engine_debug(l_routine||' '||SQLERRM);
681   END IF;
682 END;
683 
684 /*+--------------------------------------------------------------------
685   |Mini_Cache_Qualifiers
686   |To get qualifiers for matched headers with search_ind=2
687   +--------------------------------------------------------------------
688 */
689 
690 PROCEDURE Mini_Cache_Qualifiers(  p_list_header_id IN NUMBER
691                                 , p_list_line_id IN NUMBER
692                                 , p_grouping_no  IN NUMBER
693                                 , p_pricing_phase_id IN NUMBER
694                                 , x_status_code  OUT NOCOPY VARCHAR2
695                                 , x_status_text  OUT NOCOPY VARCHAR2)      AS
696 
697 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Mini_Cache_Qualifiers';
698 
699 /*
700 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
701 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
702 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
703 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
704 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,SEARCH_IND,5
705 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,ACTIVE_FLAG,6
706 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUP_CNT,7
707 
708 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
709 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
710 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
711 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
712 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
713 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
714 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,qp_npreq_line_attrs_tmp_N2,DISTINCT_QUALIFIER_FLAG,7
715 
716 INDX,QP_PREQ_GRP.mini_cache_qualifiers.l_mini_outer_qual_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
717 */
718 -- Changed the cursor l_outer_qual_cur for bug#3002632
719 --Added index hints for bug#7480862
720 CURSOR l_MINI_OUTER_QUAL_CUR IS
721 -- Qualifier Only
722 select /*+ ORDERED NO_EXPAND USE_NL(qpq qplatq qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N6)
723        index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
724        qpq.list_header_id,
725        qpq.list_line_id list_line_id,
726        qpq.qualifier_group_cnt,
727        qpq.others_group_cnt,
728        qpq.header_quals_exist_flag,
729        qpq.search_ind,
730        G_NO validated_flag,
731        G_NO applied_flag,
732        G_LINE_LEVEL attribute_level,
733        G_QUALIFIER_TYPE attribute_type,
734        qplatq.context          ,
735        qplatq.attribute        ,
736        qplatq.value_from       ,
737        qpq.qualifier_grouping_no qualifier_grouping_no ,
738        qpq.qualifier_precedence  ,
739        qpq.qualifier_datatype,
740        qpq.qualifier_attr_value    ,
741        qpq.qualifier_attr_value_to ,
742        qpq.start_date_active,
743        qpq.end_date_active,
744        G_NO pricing_attr_flag,
745        qpq.comparison_operator_code ,
746        qph.list_type_code,
747        qph.ask_for_flag,
748        qplatq.pricing_status_code,
749        'OHQ1' ,
750         NULL line_index,
751         NULL pricing_effective_date,
752         qph.start_date_active_first start_date_active_first,
753         qph.end_date_active_first   end_date_active_first,
754         NULL line_type_code,
755         p_pricing_phase_id pricing_phase_id,
756         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
757         qph.start_date_active start_date_active_h,
758         qph.end_date_active end_date_active_h,
759         qph.start_date_active_second start_date_active_second,
760         qph.end_date_active_second end_date_active_second,
761         qph.active_date_first_type,
762         qph.active_date_second_type,
763         qph.limit_exists_flag,
764         qplatq.derived_qualifier_flag   -- Added for TCA
765 from
766         (select distinct list_header_id,list_line_id,qualifier_grouping_no
767          from qp_preq_qual_tmp
768          where pricing_status_code = G_STATUS_UNCHANGED
769          and   pricing_phase_id = p_pricing_phase_id) qptq,
770         qp_qualifiers qpq ,
771         qp_npreq_line_attrs_tmp qplatq,
772         qp_list_headers_b qph,
773 	qp_price_req_sources_v qprs
774 where
775         qpq.list_header_id = qptq.list_header_id
776 and     qpq.list_line_id = qptq.list_line_id
777 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
778 and     qpq.qualifier_grouping_no <> -1
779 and     qpq.qualifier_context      = qplatq.context
780 and     qpq.qualifier_attribute    = qplatq.attribute
781 and     qpq.qualifier_attr_value = qplatq.value_from
782 and     qpq.comparison_operator_code = '='
783 and     qpq.search_ind =  2
784 and     qpq.qualifier_group_cnt > 1
785 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
786          OR
787          qph.currency_code IS NULL) -- optional currency
788 -- bug 2799120
789 --added for moac -- commented references to security profile
790 --security will be built into qp_list_headers_b
791 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
792 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
793 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
794 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
795                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
796 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
797                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
798 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
799                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
800 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
801                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
802 and    qph.list_type_code not in ('PRL','AGR')
803 and    qph.active_flag = G_YES
804 and    qpq.active_flag = G_YES
805 and    qpq.list_header_id = qph.list_header_id
806 and    qplatq.line_index > 0
807 and    qplatq.distinct_qualifier_flag = G_YES
808 and    qplatq.pricing_status_code = G_STATUS_UNCHANGED
809 and    qplatq.attribute_type = G_QUALIFIER_TYPE
810 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
811 and    qph.source_system_code = qprs.source_system_code
812 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
813          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
814 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
815 --and    qptq.pricing_phase_id = p_pricing_phase_id
816 union all
817 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
818 uter_qual_cur_mod */
819        qpq.list_header_id,
820        qpq.list_line_id list_line_id,
821        qpq.qualifier_group_cnt,
822        qpq.others_group_cnt,
823        qpq.header_quals_exist_flag,
824        qpq.search_ind,
825        G_NO validated_flag,
826        G_NO applied_flag,
827        G_LINE_LEVEL attribute_level,
828        G_QUALIFIER_TYPE attribute_type,
829        qplatq.context          ,
830        qplatq.attribute        ,
831        qplatq.value_from       ,
832        qpq.qualifier_grouping_no qualifier_grouping_no ,
833        qpq.qualifier_precedence  ,
834        qpq.qualifier_datatype,
835        qpq.qualifier_attr_value    ,
836        qpq.qualifier_attr_value_to ,
837        qpq.start_date_active,
838        qpq.end_date_active,
839        G_NO pricing_attr_flag,
840        qpq.comparison_operator_code ,
841        qph.list_type_code,
842        qph.ask_for_flag,
843        qplatq.pricing_status_code,
844        'OHQ1' ,
845         NULL line_index,
846         NULL pricing_effective_date,
847         qph.start_date_active_first start_date_active_first,
848         qph.end_date_active_first   end_date_active_first,
849         NULL line_type_code,
850         p_pricing_phase_id pricing_phase_id,
851         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
852         qph.start_date_active start_date_active_h,
853         qph.end_date_active end_date_active_h,
854         qph.start_date_active_second start_date_active_second,
855         qph.end_date_active_second end_date_active_second,
856         qph.active_date_first_type,
857         qph.active_date_second_type,
858         qph.limit_exists_flag,
859         qplatq.derived_qualifier_flag   -- Added for TCA
860 from
861         (select distinct list_header_id,list_line_id
862          from qp_preq_qual_tmp
863          where pricing_status_code = G_STATUS_UNCHANGED
864          and   pricing_phase_id = p_pricing_phase_id) qptq,
865         qp_qualifiers qpq ,
866         qp_npreq_line_attrs_tmp qplatq,
867         qp_list_headers_b qph,
868 	qp_price_req_sources_v qprs
869 where
870         qpq.list_header_id = qptq.list_header_id
871 and     qpq.list_line_id = qptq.list_line_id
872 and     qpq.qualifier_grouping_no = -1
873 and     qpq.qualifier_context      = qplatq.context
874 and     qpq.qualifier_attribute    = qplatq.attribute
875 and     qpq.qualifier_attr_value = qplatq.value_from
876 and     qpq.comparison_operator_code = '='
877 and     qpq.search_ind =  2
878 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
879          OR
880          qph.currency_code IS NULL) -- optional currency
881 -- bug 2799120
882 --added for moac -- commented references to security profile
883 --security will be built into qp_list_headers_b
884 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
885 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
886 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
887 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
888                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
889 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
890                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
891 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
892                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
893 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
894                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
895 and    qph.list_type_code not in ('PRL','AGR')
896 and    qph.active_flag = G_YES
897 and    qpq.active_flag = G_YES
898 and    qpq.list_header_id = qph.list_header_id
899 and    qplatq.line_index > 0
900 and    qplatq.distinct_qualifier_flag = G_YES
901 and    qplatq.pricing_status_code = G_STATUS_UNCHANGED
902 and    qplatq.attribute_type = G_QUALIFIER_TYPE
903 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
904 and    qph.source_system_code = qprs.source_system_code
905 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
906          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
907 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
908 --and    qptq.pricing_phase_id = p_pricing_phase_id
909 union  all
910 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 */
911        qpq.list_header_id,
912        qpq.list_line_id list_line_id,
913        qpq.qualifier_group_cnt,
914        qpq.others_group_cnt,
915        qpq.header_quals_exist_flag,
916        qpq.search_ind,
917        G_NO validated_flag,
918        G_NO applied_flag,
919        G_LINE_LEVEL attribute_level,
920        G_QUALIFIER_TYPE attribute_type,
921        qplatq.context          ,
922        qplatq.attribute        ,
923        qplatq.value_from       ,
924        qpq.qualifier_grouping_no qualifier_grouping_no ,
925        qpq.qualifier_precedence  ,
926        qpq.qualifier_datatype,
927        qpq.qualifier_attr_value    ,
928        qpq.qualifier_attr_value_to ,
929        qpq.start_date_active,
930        qpq.end_date_active,
931        G_NO pricing_attr_flag,
932        qpq.comparison_operator_code ,
933        qph.list_type_code,
934        qph.ask_for_flag,
935        qplatq.pricing_status_code,
936        'OHQ1' ,
937         NULL line_index,
938         NULL pricing_effective_date,
939         qph.start_date_active_first start_date_active_first,
940         qph.end_date_active_first   end_date_active_first,
941         NULL line_type_code,
942         p_pricing_phase_id pricing_phase_id,
943         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
944         qph.start_date_active start_date_active_h,
945         qph.end_date_active end_date_active_h,
946         qph.start_date_active_second start_date_active_second,
947         qph.end_date_active_second end_date_active_second,
948         qph.active_date_first_type,
949         qph.active_date_second_type,
950         qph.limit_exists_flag,
951         qplatq.derived_qualifier_flag   -- Added for TCA
952 from
953         (select distinct list_header_id,list_line_id,qualifier_grouping_no
954          from qp_preq_qual_tmp
955          where pricing_status_code = G_STATUS_UNCHANGED
956          and   pricing_phase_id = p_pricing_phase_id) qptq,
957         qp_qualifiers qpq ,
958         qp_npreq_line_attrs_tmp qplatq,
959         qp_list_headers_b qph,
960 	qp_price_req_sources_v qprs
961 where
962         qpq.list_header_id = qptq.list_header_id
963 and     qpq.list_line_id = qptq.list_line_id
964 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
965 and     qpq.qualifier_grouping_no <> -1
966 and     qpq.qualifier_context      = qplatq.context
967 and     qpq.qualifier_attribute    = qplatq.attribute
968 and     qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
969 and     qpq.qualifier_datatype =  G_NUMERIC
970 and     qpq.search_ind =  2
971 and     qpq.qualifier_group_cnt > 1
972 and     qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
973 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
974 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
975          OR
976          qph.currency_code IS NULL) -- optional currency
977 -- bug 2799120
978 --added for moac -- commented references to security profile
979 --security will be built into qp_list_headers_b
980 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
981 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
982 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
983 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
984                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
985 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
986                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
987 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
988                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
989 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
990                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
991 and    qph.list_type_code not in ('PRL','AGR')
992 and     qph.active_flag = G_YES
993 and     qpq.active_flag = G_YES
994 and     qpq.list_header_id = qph.list_header_id
995 and     qplatq.line_index > 0
996 and     qplatq.distinct_qualifier_flag = G_YES
997 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
998 and     qplatq.attribute_type = G_QUALIFIER_TYPE
999 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1000 and    qph.source_system_code = qprs.source_system_code
1001 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1002          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1003 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1004 --and    qptq.pricing_phase_id = p_pricing_phase_id
1005 union all
1006 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
1007 ter_qual_cur_mod */
1008        qpq.list_header_id,
1009        qpq.list_line_id list_line_id,
1010        qpq.qualifier_group_cnt,
1011        qpq.others_group_cnt,
1012        qpq.header_quals_exist_flag,
1013        qpq.search_ind,
1014        G_NO validated_flag,
1015        G_NO applied_flag,
1016        G_LINE_LEVEL attribute_level,
1017        G_QUALIFIER_TYPE attribute_type,
1018        qplatq.context          ,
1019        qplatq.attribute        ,
1020        qplatq.value_from       ,
1021        qpq.qualifier_grouping_no qualifier_grouping_no ,
1022        qpq.qualifier_precedence  ,
1023        qpq.qualifier_datatype,
1024        qpq.qualifier_attr_value    ,
1025        qpq.qualifier_attr_value_to ,
1026        qpq.start_date_active,
1027        qpq.end_date_active,
1028        G_NO pricing_attr_flag,
1029        qpq.comparison_operator_code ,
1030        qph.list_type_code,
1031        qph.ask_for_flag,
1032        qplatq.pricing_status_code,
1033        'OHQ1' ,
1034         NULL line_index,
1035         NULL pricing_effective_date,
1036         qph.start_date_active_first start_date_active_first,
1037         qph.end_date_active_first   end_date_active_first,
1038         NULL line_type_code,
1039         p_pricing_phase_id pricing_phase_id,
1040         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1041         qph.start_date_active start_date_active_h,
1042         qph.end_date_active end_date_active_h,
1043         qph.start_date_active_second start_date_active_second,
1044         qph.end_date_active_second end_date_active_second,
1045         qph.active_date_first_type,
1046         qph.active_date_second_type,
1047         qph.limit_exists_flag,
1048         qplatq.derived_qualifier_flag  -- Added for TCA
1049 from
1050         (select distinct list_header_id,list_line_id
1051          from qp_preq_qual_tmp
1052          where pricing_status_code = G_STATUS_UNCHANGED
1053          and   pricing_phase_id = p_pricing_phase_id) qptq,
1054         qp_qualifiers qpq ,
1055         qp_npreq_line_attrs_tmp qplatq,
1056         qp_list_headers_b qph,
1057 	qp_price_req_sources_v qprs
1058 where
1059         qpq.list_header_id = qptq.list_header_id
1060 and     qpq.list_line_id = qptq.list_line_id
1061 and     qpq.qualifier_grouping_no = -1
1062 and     qpq.qualifier_context      = qplatq.context
1063 and     qpq.qualifier_attribute    = qplatq.attribute
1064 and     qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
1065 and     qpq.qualifier_datatype =  G_NUMERIC
1066 and     qpq.search_ind =  2
1067 and     qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
1068 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
1069 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1070          OR
1071          qph.currency_code IS NULL) -- optional currency
1072 -- bug 2799120
1073 --added for moac -- commented references to security profile
1074 --security will be built into qp_list_headers_b
1075 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1076 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1077 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1078 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1079                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1080 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1081                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1082 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1083                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1084 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1085                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1086 and    qph.list_type_code not in ('PRL','AGR')
1087 and     qph.active_flag = G_YES
1088 and     qpq.active_flag = G_YES
1089 and     qpq.list_header_id = qph.list_header_id
1090 and     qplatq.line_index > 0
1091 and     qplatq.distinct_qualifier_flag = G_YES
1092 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1093 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1094 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1095 and    qph.source_system_code = qprs.source_system_code
1096 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1097          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1098 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1099 --and    qptq.pricing_phase_id = p_pricing_phase_id
1100 union all
1101 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 */
1102        qpq.list_header_id,
1103        qpq.list_line_id list_line_id,
1104        qpq.qualifier_group_cnt,
1105        qpq.others_group_cnt,
1106        qpq.header_quals_exist_flag,
1107        qpq.search_ind,
1108        G_NO validated_flag,
1109        G_NO applied_flag,
1110        G_LINE_LEVEL attribute_level,
1111        G_QUALIFIER_TYPE attribute_type,
1112        qplatq.context          ,
1113        qplatq.attribute        ,
1114        qplatq.value_from       ,
1115        qpq.qualifier_grouping_no qualifier_grouping_no ,
1116        qpq.qualifier_precedence  ,
1117        qpq.qualifier_datatype,
1118        qpq.qualifier_attr_value    ,
1119        qpq.qualifier_attr_value_to ,
1120        qpq.start_date_active,
1121        qpq.end_date_active,
1122        G_NO pricing_attr_flag,
1123        qpq.comparison_operator_code ,
1124        qph.list_type_code,
1125        qph.ask_for_flag,
1126        qplatq.pricing_status_code,
1127        'OHQ1' ,
1128         NULL line_index,
1129         NULL pricing_effective_date,
1130         qph.start_date_active_first start_date_active_first,
1131         qph.end_date_active_first   end_date_active_first,
1132         NULL line_type_code,
1133         p_pricing_phase_id pricing_phase_id,
1134         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1135         qph.start_date_active start_date_active_h,
1136         qph.end_date_active end_date_active_h,
1137         qph.start_date_active_second start_date_active_second,
1138         qph.end_date_active_second end_date_active_second,
1139         qph.active_date_first_type,
1140         qph.active_date_second_type,
1141         qph.limit_exists_flag,
1142         qplatq.derived_qualifier_flag  -- Added for TCA
1143 from
1144         (select distinct list_header_id,list_line_id,qualifier_grouping_no
1145          from qp_preq_qual_tmp
1146          where pricing_status_code = G_STATUS_UNCHANGED
1147          and   pricing_phase_id = p_pricing_phase_id) qptq,
1148         qp_qualifiers qpq ,
1149         qp_npreq_line_attrs_tmp qplatq,
1150         qp_list_headers_b qph,
1151 	qp_price_req_sources_v qprs
1152 where
1153         qpq.list_header_id = qptq.list_header_id
1154 and     qpq.list_line_id = qptq.list_line_id
1155 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
1156 and     qpq.qualifier_grouping_no <> -1
1157 and     qpq.qualifier_context      = qplatq.context
1158 and     qpq.qualifier_attribute    = qplatq.attribute
1159 and     qpq.comparison_operator_code = G_OPERATOR_BETWEEN
1160 and     qpq.search_ind =  2
1161 and     qpq.qualifier_group_cnt > 1
1162 and     qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
1163 --and     decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
1164 -- G_DATE_Y,qplatq.value_from,null)
1165 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
1166 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1167          OR
1168          qph.currency_code IS NULL) -- optional currency
1169 -- bug 2799120
1170 --added for moac -- commented references to security profile
1171 --security will be built into qp_list_headers_b
1172 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1173 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1174 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1175 and     qph.active_flag = G_YES
1176 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1177                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1178 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1179                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1180 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1181                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1182 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1183                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1184 and    qph.list_type_code not in ('PRL','AGR')
1185 and      qpq.active_flag = G_YES
1186 and    qplatq.line_index > 0
1187 and      qplatq.distinct_qualifier_flag = G_YES
1188 and    qpq.list_header_id = qph.list_header_id
1189 and      qplatq.pricing_status_code = G_STATUS_UNCHANGED
1190 and      qplatq.attribute_type = G_QUALIFIER_TYPE
1191 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1192 and    qph.source_system_code = qprs.source_system_code
1193 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1194          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1195 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1196 --and    qptq.pricing_phase_id = p_pricing_phase_id
1197 union all
1198 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
1199 er_qual_cur_mod */
1200        qpq.list_header_id,
1201        qpq.list_line_id list_line_id,
1202        qpq.qualifier_group_cnt,
1203        qpq.others_group_cnt,
1204        qpq.header_quals_exist_flag,
1205        qpq.search_ind,
1206        G_NO validated_flag,
1207        G_NO applied_flag,
1208        G_LINE_LEVEL attribute_level,
1209        G_QUALIFIER_TYPE attribute_type,
1210        qplatq.context          ,
1211        qplatq.attribute        ,
1212        qplatq.value_from       ,
1213        qpq.qualifier_grouping_no qualifier_grouping_no ,
1214        qpq.qualifier_precedence  ,
1215        qpq.qualifier_datatype,
1216        qpq.qualifier_attr_value    ,
1217        qpq.qualifier_attr_value_to ,
1218        qpq.start_date_active,
1219        qpq.end_date_active,
1220        G_NO pricing_attr_flag,
1221        qpq.comparison_operator_code ,
1222        qph.list_type_code,
1223        qph.ask_for_flag,
1224        qplatq.pricing_status_code,
1225        'OHQ1' ,
1226         NULL line_index,
1227         NULL pricing_effective_date,
1228         qph.start_date_active_first start_date_active_first,
1229         qph.end_date_active_first   end_date_active_first,
1230         NULL line_type_code,
1231         p_pricing_phase_id pricing_phase_id,
1232         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1233         qph.start_date_active start_date_active_h,
1234         qph.end_date_active end_date_active_h,
1235         qph.start_date_active_second start_date_active_second,
1236         qph.end_date_active_second end_date_active_second,
1237         qph.active_date_first_type,
1238         qph.active_date_second_type,
1239         qph.limit_exists_flag,
1240         qplatq.derived_qualifier_flag    -- Added for TCA
1241 from
1242         (select distinct list_header_id,list_line_id
1243          from qp_preq_qual_tmp
1244          where pricing_status_code = G_STATUS_UNCHANGED
1245          and   pricing_phase_id = p_pricing_phase_id) qptq,
1246         qp_qualifiers qpq ,
1247         qp_npreq_line_attrs_tmp qplatq,
1248         qp_list_headers_b qph,
1249 	qp_price_req_sources_v qprs
1250 where
1251         qpq.list_header_id = qptq.list_header_id
1252 and     qpq.list_line_id = qptq.list_line_id
1253 and     qpq.qualifier_grouping_no = -1
1254 and     qpq.qualifier_context      = qplatq.context
1255 and     qpq.qualifier_attribute    = qplatq.attribute
1256 and     qpq.comparison_operator_code = G_OPERATOR_BETWEEN
1257 and     qpq.search_ind =  2
1258 and     qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
1259 --and     decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
1260 -- G_DATE_Y,qplatq.value_from,null)
1261 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
1262 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1263          OR
1264          qph.currency_code IS NULL) -- optional currency
1265 -- bug 2799120
1266 --added for moac -- commented references to security profile
1267 --security will be built into qp_list_headers_b
1268 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1269 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1270 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1271 and     qph.active_flag = G_YES
1272 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1273                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1274 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1275                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1276 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1277                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1278 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1279                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1280 and    qph.list_type_code not in ('PRL','AGR')
1281 and      qpq.active_flag = G_YES
1282 and    qplatq.line_index > 0
1283 and      qplatq.distinct_qualifier_flag = G_YES
1284 and    qpq.list_header_id = qph.list_header_id
1285 and      qplatq.pricing_status_code = G_STATUS_UNCHANGED
1286 and      qplatq.attribute_type = G_QUALIFIER_TYPE
1287 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1288 and    qph.source_system_code = qprs.source_system_code
1289 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1290          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1291 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1292 --and    qptq.pricing_phase_id = p_pricing_phase_id
1293 union all
1294 select /*+ ORDERED USE_NL(qpq qplh qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N7)
1295        index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
1296        qpq.list_header_id,
1297        qpq.list_line_id list_line_id,
1298        qpq.qualifier_group_cnt,
1299        qpq.others_group_cnt,
1300        qpq.header_quals_exist_flag,
1301        qpq.search_ind,
1302        G_NO validated_flag,
1303        G_NO applied_flag,
1304        G_LINE_LEVEL attribute_level,
1305        G_QUALIFIER_TYPE attribute_type,
1306        qplatq.context          ,
1307        qplatq.attribute        ,
1308        qplatq.value_from       ,
1309        qpq.qualifier_grouping_no qualifier_grouping_no ,
1310        qpq.qualifier_precedence  ,
1311        qpq.qualifier_datatype,
1312        qpq.qualifier_attr_value    ,
1313        qpq.qualifier_attr_value_to ,
1314        qpq.start_date_active,
1315        qpq.end_date_active,
1316        G_NO pricing_attr_flag,
1317        qpq.comparison_operator_code ,
1318        qph.list_type_code,
1319        qph.ask_for_flag,
1320        qplatq.pricing_status_code,
1321        'OHQ1' ,
1322         NULL line_index,
1323         NULL pricing_effective_date,
1324         qph.start_date_active_first start_date_active_first,
1325         qph.end_date_active_first   end_date_active_first,
1326         NULL line_type_code,
1327         p_pricing_phase_id pricing_phase_id,
1328         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1329         qph.start_date_active start_date_active_h,
1330         qph.end_date_active end_date_active_h,
1331         qph.start_date_active_second start_date_active_second,
1332         qph.end_date_active_second end_date_active_second,
1333         qph.active_date_first_type,
1334         qph.active_date_second_type,
1335         qph.limit_exists_flag,
1336         qplatq.derived_qualifier_flag    -- Added for TCA
1337 from
1338         (select distinct list_header_id,list_line_id,qualifier_grouping_no
1339          from qp_preq_qual_tmp
1340          where pricing_status_code = G_STATUS_UNCHANGED
1341          and   pricing_phase_id = p_pricing_phase_id) qptq,
1342         qp_qualifiers qpq ,
1343         qp_npreq_line_attrs_tmp qplatq,
1344         qp_list_headers_b qph,
1345 	qp_price_req_sources_v qprs
1346 where
1347         qpq.list_header_id = qptq.list_header_id
1348 and     qpq.list_line_id = qptq.list_line_id
1349 and     qpq.qualifier_grouping_no = qptq.qualifier_grouping_no
1350 and     qpq.qualifier_grouping_no <> -1
1351 and     qpq.qualifier_context      = qplatq.context
1352 and     qpq.qualifier_attribute    = qplatq.attribute
1353 and     qpq.comparison_operator_code = 'NOT ='
1354 and     qpq.qualifier_attr_value <> qplatq.value_from
1355 and     qpq.search_ind =  2
1356 and     qpq.qualifier_group_cnt > 1
1357 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1358          OR
1359          qph.currency_code IS NULL) -- optional currency
1360 -- bug 2799120
1361 --added for moac -- commented references to security profile
1362 --security will be built into qp_list_headers_b
1363 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1364 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1365 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1366 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1367                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1368 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1369                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1370 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1371                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1372 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1373                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1374 and    qph.list_type_code not in ('PRL','AGR')
1375 and     qph.active_flag = G_YES
1376 and     qpq.active_flag = G_YES
1377 and     qpq.list_header_id = qph.list_header_id
1378 and    qplatq.line_index > 0
1379 and     qplatq.distinct_qualifier_flag = G_YES
1380 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1381 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1382 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1383 and    qph.source_system_code = qprs.source_system_code
1384 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1385          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1386 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1387 --and    qptq.pricing_phase_id = p_pricing_phase_id
1388 union all
1389 select /*+ ORDERED USE_NL(qpq qplh qph)  index (qplatq,QP_PREQ_LINE_ATTRS_TMP_N7)
1390        index(qpq qp_qualifiers_n1) index(qph qp_list_headers_b_n7) l_mini_outer_qual_cur_mod */
1391        qpq.list_header_id,
1392        qpq.list_line_id list_line_id,
1393        qpq.qualifier_group_cnt,
1394        qpq.others_group_cnt,
1395        qpq.header_quals_exist_flag,
1396        qpq.search_ind,
1397        G_NO validated_flag,
1398        G_NO applied_flag,
1399        G_LINE_LEVEL attribute_level,
1400        G_QUALIFIER_TYPE attribute_type,
1401        qplatq.context          ,
1402        qplatq.attribute        ,
1403        qplatq.value_from       ,
1404        qpq.qualifier_grouping_no qualifier_grouping_no ,
1405        qpq.qualifier_precedence  ,
1406        qpq.qualifier_datatype,
1407        qpq.qualifier_attr_value    ,
1408        qpq.qualifier_attr_value_to ,
1409        qpq.start_date_active,
1410        qpq.end_date_active,
1411        G_NO pricing_attr_flag,
1412        qpq.comparison_operator_code ,
1413        qph.list_type_code,
1414        qph.ask_for_flag,
1415        qplatq.pricing_status_code,
1416        'OHQ1' ,
1417         NULL line_index,
1418         NULL pricing_effective_date,
1419         qph.start_date_active_first start_date_active_first,
1420         qph.end_date_active_first   end_date_active_first,
1421         NULL line_type_code,
1422         p_pricing_phase_id pricing_phase_id,
1423         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1424         qph.start_date_active start_date_active_h,
1425         qph.end_date_active end_date_active_h,
1426         qph.start_date_active_second start_date_active_second,
1427         qph.end_date_active_second end_date_active_second,
1428         qph.active_date_first_type,
1429         qph.active_date_second_type,
1430         qph.limit_exists_flag,
1431         qplatq.derived_qualifier_flag   -- Added for TCA
1432 from
1433         (select distinct list_header_id,list_line_id
1434          from qp_preq_qual_tmp
1435          where pricing_status_code = G_STATUS_UNCHANGED
1436          and   pricing_phase_id = p_pricing_phase_id) qptq,
1437         qp_qualifiers qpq ,
1438         qp_npreq_line_attrs_tmp qplatq,
1439         qp_list_headers_b qph,
1440 	qp_price_req_sources_v qprs
1441 where
1442         qpq.list_header_id = qptq.list_header_id
1443 and     qpq.list_line_id = qptq.list_line_id
1444 and     qpq.qualifier_grouping_no = -1
1445 and     qpq.qualifier_context      = qplatq.context
1446 and     qpq.qualifier_attribute    = qplatq.attribute
1447 and     qpq.comparison_operator_code = 'NOT ='
1448 and     qpq.qualifier_attr_value <> qplatq.value_from
1449 and     qpq.search_ind =  2
1450 and     ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1451          OR
1452          qph.currency_code IS NULL) -- optional currency
1453 -- bug 2799120
1454 --added for moac -- commented references to security profile
1455 --security will be built into qp_list_headers_b
1456 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1457 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1458 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1459 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1460                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1461 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1462                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1463 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1464                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1465 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1466                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1467 and    qph.list_type_code not in ('PRL','AGR')
1468 and     qph.active_flag = G_YES
1469 and     qpq.active_flag = G_YES
1470 and     qpq.list_header_id = qph.list_header_id
1471 and    qplatq.line_index > 0
1472 and     qplatq.distinct_qualifier_flag = G_YES
1473 and     qplatq.pricing_status_code = G_STATUS_UNCHANGED
1474 and     qplatq.attribute_type = G_QUALIFIER_TYPE
1475 and    qprs.request_type_code = G_REQUEST_TYPE_CODE
1476 and    qph.source_system_code = qprs.source_system_code
1477 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1478          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'));  -- Added for TCA
1479 
1480 --and    qptq.pricing_status_code = G_STATUS_UNCHANGED
1481 --and    qptq.pricing_phase_id = p_pricing_phase_id;
1482 
1483 nROWS CONSTANT NUMBER := 1000;
1484 
1485 l_status_code VARCHAR2(30);
1486 l_status_text VARCHAR2(240);
1487 E_ROUTINE_ERRORS EXCEPTION;
1488 
1489 BEGIN
1490 
1491  --Delete from QP_PREQ_QUAL_TMP;
1492 
1493  --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_EMPTY;
1494 
1495  OPEN l_mini_outer_qual_cur;
1496 
1497  LOOP
1498   G_LIST_HEADER_ID_TBL_Q.delete;
1499   G_LIST_LINE_ID_TBL_Q.delete;
1500   G_VALIDATED_FLAG_TBL_Q.delete;
1501   G_APPLIED_FLAG_TBL_Q.delete;
1502   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
1503   G_ATTRIBUTE_TYPE_TBL_Q.delete;
1504   G_CONTEXT_TBL_Q.delete;
1505   G_ATTRIBUTE_TBL_Q.delete;
1506   G_VALUE_FROM_TBL_Q.delete;
1507   G_GROUPING_NO_TBL_Q.delete;
1508   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
1509   G_DATATYPE_TBL_Q.delete;
1510   G_SETUP_VALUE_FROM_TBL_Q.delete;
1511   G_SETUP_VALUE_TO_TBL_Q.delete;
1512   G_PRICING_ATTR_FLAG_TBL_Q.delete;
1513   G_OPERATOR_TYPE_TBL_Q.delete;
1514   G_QUALIFIER_TYPE_TBL_Q.delete;
1515   G_LIST_TYPE_CODE_TBL_Q.delete;
1516   G_ASK_FOR_FLAG_TBL_Q.delete;
1517   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
1518   G_OTHERS_GROUP_CNT_TBL_Q.delete;
1519   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
1520   G_SEARCH_IND_TBL_Q.delete;
1521   G_PRICING_STATUS_CODE_TBL_Q.delete;
1522   G_START_DATE_ACTIVE_TBL_Q.delete;
1523   G_END_DATE_ACTIVE_TBL_Q.delete;
1524   G_LINE_INDEX_TBL_Q.delete;
1525   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
1526   G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
1527   G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
1528   G_LINE_TYPE_CODE_TBL_Q.delete;
1529   G_PRICING_PHASE_ID_TBL_Q.delete;
1530   G_UNIQUE_KEY_TBL_Q.delete;
1531   G_START_DATE_ACTIVE_TBL_H_Q.delete;
1532   G_END_DATE_ACTIVE_TBL_H_Q.delete;
1533   G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
1534   G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
1535   G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
1536   G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
1537   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
1538   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;   -- Added for TCA
1539 
1540   FETCH l_mini_outer_qual_cur
1541   BULK COLLECT INTO
1542      G_LIST_HEADER_ID_TBL_Q
1543    , G_LIST_LINE_ID_TBL_Q
1544    , G_QUALIFIER_GROUP_CNT_TBL_Q
1545    , G_OTHERS_GROUP_CNT_TBL_Q
1546    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
1547    , G_SEARCH_IND_TBL_Q
1548    , G_VALIDATED_FLAG_TBL_Q
1549    , G_APPLIED_FLAG_TBL_Q
1550    , G_ATTRIBUTE_LEVEL_TBL_Q
1551    , G_ATTRIBUTE_TYPE_TBL_Q
1552    , G_CONTEXT_TBL_Q
1553    , G_ATTRIBUTE_TBL_Q
1554    , G_VALUE_FROM_TBL_Q
1555    , G_GROUPING_NO_TBL_Q
1556    , G_QUALIFIER_PRECEDENCE_TBL_Q
1557    , G_DATATYPE_TBL_Q
1558    , G_SETUP_VALUE_FROM_TBL_Q
1559    , G_SETUP_VALUE_TO_TBL_Q
1560    , G_START_DATE_ACTIVE_TBL_Q
1561    , G_END_DATE_ACTIVE_TBL_Q
1562    , G_PRICING_ATTR_FLAG_TBL_Q
1563    , G_OPERATOR_TYPE_TBL_Q
1564    , G_LIST_TYPE_CODE_TBL_Q
1565    , G_ASK_FOR_FLAG_TBL_Q
1566    , G_PRICING_STATUS_CODE_TBL_Q
1567    , G_QUALIFIER_TYPE_TBL_Q
1568    , G_LINE_INDEX_TBL_Q
1569    , G_PRICING_EFFECTIVE_DATE_TBL_Q
1570    , G_START_DATE_ACTIVE_FIR_TBL_Q
1571    , G_END_DATE_ACTIVE_FIR_TBL_Q
1572    , G_LINE_TYPE_CODE_TBL_Q
1573    , G_PRICING_PHASE_ID_TBL_Q
1574    , G_UNIQUE_KEY_TBL_Q
1575    , G_START_DATE_ACTIVE_TBL_H_Q
1576    , G_END_DATE_ACTIVE_TBL_H_Q
1577    , G_START_DATE_ACTIVE_SEC_TBL_Q
1578    , G_END_DATE_ACTIVE_SEC_TBL_Q
1579    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
1580    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
1581    , G_HEADER_LIMIT_EXISTS_TBL_Q
1582    , G_DERIVED_QUALIFIER_FLAG_TBL_Q LIMIT nROWS;   -- Added for TCA
1583    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
1584 
1585  IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
1586      --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_UPDATED;
1587       INSERT_QUAL(
1588        G_LIST_HEADER_ID_TBL_Q
1589      , G_LIST_LINE_ID_TBL_Q
1590      , G_VALIDATED_FLAG_TBL_Q
1591      , G_APPLIED_FLAG_TBL_Q
1592      , G_ATTRIBUTE_LEVEL_TBL_Q
1593      , G_ATTRIBUTE_TYPE_TBL_Q
1594      , G_CONTEXT_TBL_Q
1595      , G_ATTRIBUTE_TBL_Q
1596      , G_VALUE_FROM_TBL_Q
1597      , G_GROUPING_NO_TBL_Q
1598      , G_QUALIFIER_PRECEDENCE_TBL_Q
1599      , G_DATATYPE_TBL_Q
1600      , G_SETUP_VALUE_FROM_TBL_Q
1601      , G_SETUP_VALUE_TO_TBL_Q
1602      , G_PRICING_ATTR_FLAG_TBL_Q
1603      , G_OPERATOR_TYPE_TBL_Q
1604      , G_LIST_TYPE_CODE_TBL_Q
1605      , G_ASK_FOR_FLAG_TBL_Q
1606      , G_QUALIFIER_TYPE_TBL_Q
1607      , G_QUALIFIER_GROUP_CNT_TBL_Q
1608      , G_OTHERS_GROUP_CNT_TBL_Q
1609      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
1610      , G_SEARCH_IND_TBL_Q
1611      , G_PRICING_STATUS_CODE_TBL_Q
1612      , G_START_DATE_ACTIVE_TBL_Q
1613      , G_END_DATE_ACTIVE_TBL_Q
1614      , G_LINE_INDEX_TBL_Q
1615      , G_PRICING_EFFECTIVE_DATE_TBL_Q
1616      , G_START_DATE_ACTIVE_FIR_TBL_Q
1617      , G_END_DATE_ACTIVE_FIR_TBL_Q
1618      , G_LINE_TYPE_CODE_TBL_Q
1619      , G_PRICING_PHASE_ID_TBL_Q
1620      , G_UNIQUE_KEY_TBL_Q
1621      , G_START_DATE_ACTIVE_TBL_H_Q
1622      , G_END_DATE_ACTIVE_TBL_H_Q
1623      , G_START_DATE_ACTIVE_SEC_TBL_Q
1624      , G_END_DATE_ACTIVE_SEC_TBL_Q
1625      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
1626      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
1627      , G_HEADER_LIMIT_EXISTS_TBL_Q
1628      , G_DERIVED_QUALIFIER_FLAG_TBL_Q     -- Added for TCA
1629      , l_status_code
1630      , l_status_text);
1631 
1632      IF l_status_code = FND_API.G_RET_STS_ERROR THEN
1633         RAISE E_ROUTINE_ERRORS;
1634      END IF;
1635 
1636  END IF;
1637 
1638 END LOOP;
1639 CLOSE l_mini_outer_qual_cur;
1640 
1641 EXCEPTION
1642   WHEN OTHERS THEN
1643   x_status_code := FND_API.G_RET_STS_ERROR;
1644   x_status_text :=l_routine||' '||SQLERRM;
1645   IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
1646    engine_debug(l_routine||' '||SQLERRM);
1647   END IF;
1648 
1649 END Mini_Cache_Qualifiers;
1650 
1651 /*+--------------------------------------------------------------------
1652   |Cache_Line_Qualifiers
1653   |To get the pure line level quals  and
1654   |To get the line level quals for satisfied headers
1655   |
1656   +--------------------------------------------------------------------
1657 */
1658 PROCEDURE Cache_Line_Qualifiers(p_pricing_phase_id IN NUMBER,
1659 					  x_status_code OUT NOCOPY VARCHAR2,
1660 					  x_status_text OUT NOCOPY VARCHAR2) As
1661 /*
1662 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,DISTINCT_QUALIFIER_FLAG,1
1663 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,ATTRIBUTE_TYPE,2
1664 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,PRICING_STATUS_CODE,3
1665 
1666 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_CONTEXT,1
1667 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTRIBUTE,2
1668 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTR_VALUE,3
1669 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,COMPARISON_OPERATOR_CODE,4
1670 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,ACTIVE_FLAG,5
1671 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,SEARCH_IND,6
1672 
1673 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,PRICING_PHASE_ID,1
1674 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,LIST_HEADER_ID,2
1675 
1676 INDX,QP_PREQ_GRP.cache_line_qualifiers.l_outer_qual_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
1677 */
1678 -- Changed the cursor l_outer_qual_cur for bug#3002632
1679 -- [julin/4396043/4471795] perform header filter before prod check, go to qp_pricing_attributes
1680 -- before qp_npreq_line_attrs_tmp during prod check.
1681 CURSOR l_OUTER_QUAL_CUR IS
1682 -- Qualifier Only
1683 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 */
1684        qpq.list_header_id,
1685        qpq.list_line_id list_line_id,
1686        qpq.qualifier_group_cnt,
1687        qpq.others_group_cnt,
1688        qpq.header_quals_exist_flag,
1689        qpq.search_ind,
1690        G_NO validated_flag,
1691        G_NO applied_flag,
1692        G_LINE_LEVEL attribute_level,
1693        G_QUALIFIER_TYPE attribute_type,
1694        qplatq.context          ,
1695        qplatq.attribute        ,
1696        qplatq.value_from       ,
1697        qpq.qualifier_grouping_no qualifier_grouping_no ,
1698        qpq.qualifier_precedence  ,
1699        qpq.qualifier_datatype,
1700        qpq.qualifier_attr_value    ,
1701        qpq.qualifier_attr_value_to ,
1702        qpq.start_date_active,
1703        qpq.end_date_active,
1704        G_NO pricing_attr_flag,
1705        qpq.comparison_operator_code ,
1706        qph.list_type_code,
1707        qph.ask_for_flag,
1708        qplatq.pricing_status_code,
1709        'OHQ' ,
1710         NULL line_index,
1711         NULL pricing_effective_date,
1712         qph.start_date_active_first start_date_active_first,
1713         qph.end_date_active_first   end_date_active_first,
1714         NULL line_type_code,
1715 	p_pricing_phase_id pricing_phase_id,
1716         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1717         qph.start_date_active start_date_active_h,
1718         qph.end_date_active end_date_active_h,
1719         qph.start_date_active_second start_date_active_second,
1720         qph.end_date_active_second end_date_active_second,
1721         qph.active_date_first_type,
1722         qph.active_date_second_type,
1723         qph.limit_exists_flag,
1724         qplatq.derived_qualifier_flag    -- Added for TCA
1725 from
1726 	   qp_npreq_line_attrs_tmp qplatq,
1727 	   qp_qualifiers qpq ,
1728 	   qp_list_header_phases qplh,
1729 	   qp_list_headers_b qph,
1730            qp_price_req_sources_v qprs
1731 where
1732       qpq.list_header_id = qplh.list_header_id
1733 and   qplh.list_header_id = qph.list_header_id
1734 -- bug 2799120
1735 --added for moac -- commented references to security profile
1736 --security will be built into qp_list_headers_b
1737 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1738 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1739 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1740 and   qplh.pricing_phase_id = p_pricing_phase_id
1741 and 	 qpq.qualifier_context      = qplatq.context
1742 and 	 qpq.qualifier_attribute    = qplatq.attribute
1743 and   qpq.qualifier_attr_value = qplatq.value_from
1744 and   qpq.comparison_operator_code = '='
1745 and   qpq.search_ind = 1
1746 and   qpq.list_line_id <> -1
1747 and   ( qpq.list_header_id in (SELECT distinct list_header_id -- for qualified headers from Cache_Header_Qualifiers
1748                              FROM qp_preq_qual_tmp
1749                              WHERE pricing_phase_id = p_pricing_phase_id
1750                              AND   pricing_status_code = G_STATUS_UNCHANGED)
1751          or
1752         qpq.header_quals_exist_flag = G_NO) -- Pure line level qualifiers
1753 and   (not exists (select 'x'                                   --3520634 start
1754                      from qp_pricing_attributes qp_pa           -- if no product defined,select the header
1755                     where qp_pa.list_line_id = qpq.list_line_id
1756                       and rownum = 1)
1757        OR  -- If product defined on line level,select headers for which product matches.
1758        exists (select  /*+ ORDERED USE_NL(qpprod) */ 'x'
1759                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
1760                    WHERE c.list_header_id = qpq.list_header_id
1761                    AND   c.list_line_id = qpq.list_line_id
1762                    AND   c.pricing_phase_id = p_pricing_phase_id
1763                    AND   qpprod.context = c.product_attribute_context
1764                    AND   qpprod.attribute = c.product_attribute
1765                    AND   qpprod.value_from = c.product_attr_value
1766                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
1767                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
1768                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
1769                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
1770                    AND   c.excluder_flag = G_NO
1771       --3683298             AND   qpprod.line_index = qplatq.line_index
1772                    AND   rownum = 1)
1773       )                                                         --3520634 end
1774 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1775        OR
1776        qph.currency_code IS NULL) -- optional currency
1777 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1778                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1779 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1780                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1781 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1782                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1783 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1784                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1785 and   qph.list_type_code not in ('PRL','AGR')
1786 and   qpq.list_type_code not in ('PRL','AGR')
1787 and   qph.active_flag = G_YES
1788 and   qpq.active_flag = G_YES
1789 and   qplatq.distinct_qualifier_flag = G_YES
1790 and   qpq.list_header_id = qph.list_header_id
1791 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
1792 and   qplatq.attribute_type = G_QUALIFIER_TYPE
1793 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
1794 and   qph.source_system_code = qprs.source_system_code
1795 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1796          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1797 union all
1798 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 */
1799        qpq.list_header_id,
1800        qpq.list_line_id list_line_id,
1801        qpq.qualifier_group_cnt,
1802        qpq.others_group_cnt,
1803        qpq.header_quals_exist_flag,
1804        qpq.search_ind,
1805        G_NO validated_flag,
1806        G_NO applied_flag,
1807        G_LINE_LEVEL attribute_level,
1808        G_QUALIFIER_TYPE attribute_type,
1809        qplatq.context          ,
1810        qplatq.attribute        ,
1811        qplatq.value_from       ,
1812        qpq.qualifier_grouping_no qualifier_grouping_no ,
1813        qpq.qualifier_precedence  ,
1814        qpq.qualifier_datatype,
1815        qpq.qualifier_attr_value    ,
1816        qpq.qualifier_attr_value_to ,
1817        qpq.start_date_active,
1818        qpq.end_date_active,
1819        G_NO pricing_attr_flag,
1820        qpq.comparison_operator_code ,
1821        qph.list_type_code,
1822        qph.ask_for_flag,
1823        qplatq.pricing_status_code,
1824        'OHQ' ,
1825         NULL line_index,
1826         NULL pricing_effective_date,
1827         qph.start_date_active_first start_date_active_first,
1828         qph.end_date_active_first   end_date_active_first,
1829         NULL line_type_code,
1830         p_pricing_phase_id pricing_phase_id,
1831         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1832         qph.start_date_active start_date_active_h,
1833         qph.end_date_active end_date_active_h,
1834         qph.start_date_active_second start_date_active_second,
1835         qph.end_date_active_second end_date_active_second,
1836         qph.active_date_first_type,
1837         qph.active_date_second_type,
1838         qph.limit_exists_flag,
1839         qplatq.derived_qualifier_flag    -- Added for TCA
1840 from
1841 	   qp_npreq_line_attrs_tmp qplatq,
1842 	   qp_qualifiers qpq ,
1843 	   qp_list_header_phases qplh,
1844 	   qp_list_headers_b qph,
1845 	   qp_price_req_sources_v qprs
1846 where
1847       qpq.list_header_id = qplh.list_header_id
1848 and   qplh.list_header_id = qph.list_header_id
1849 -- bug 2799120
1850 --added for moac -- commented references to security profile
1851 --security will be built into qp_list_headers_b
1852 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1853 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1854 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1855 and   qplh.pricing_phase_id = p_pricing_phase_id
1856 and 	 qpq.qualifier_context      = qplatq.context
1857 and 	 qpq.qualifier_attribute    = qplatq.attribute
1858 and   qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
1859 and   qpq.qualifier_datatype =  G_NUMERIC
1860 and   qpq.search_ind = 1
1861 and   qpq.list_line_id <> -1
1862 and   ( qpq.list_header_id in (SELECT distinct list_header_id
1863                              FROM qp_preq_qual_tmp
1864                              WHERE pricing_phase_id = p_pricing_phase_id
1865                              AND   pricing_status_code = G_STATUS_UNCHANGED)
1866          or
1867         qpq.header_quals_exist_flag = G_NO)
1868 and   (not exists (select 'x'      --3520634 start
1869                      from qp_pricing_attributes qp_pa  -- if no product defined,select the header
1870                     where qp_pa.list_line_id = qpq.list_line_id
1871                       and rownum = 1)
1872        OR -- If product defined on line level,select headers for which product matches.
1873        exists (select  /*+ ORDERED USE_NL(qpprod) */ 'x'
1874                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
1875                    WHERE c.list_header_id = qpq.list_header_id
1876                    AND   c.list_line_id = qpq.list_line_id
1877                    AND   c.pricing_phase_id = p_pricing_phase_id
1878                    AND   qpprod.context = c.product_attribute_context
1879                    AND   qpprod.attribute = c.product_attribute
1880                    AND   qpprod.value_from = c.product_attr_value
1881                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
1882                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
1883                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
1884                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
1885                    AND   c.excluder_flag = G_NO
1886 --3683298                   AND   qpprod.line_index = qplatq.line_index
1887                    AND   rownum = 1)
1888       )                          --3520634 end
1889 and   qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
1890 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
1891 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
1892        OR
1893        qph.currency_code IS NULL) -- optional currency
1894 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
1895                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
1896 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
1897                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
1898 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
1899                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
1900 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
1901                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
1902 and   qph.list_type_code not in ('PRL','AGR')
1903 and   qpq.list_type_code not in ('PRL','AGR')
1904 and   qph.active_flag = G_YES
1905 and   qpq.active_flag = G_YES
1906 and   qplatq.distinct_qualifier_flag = G_YES
1907 and   qpq.list_header_id = qph.list_header_id
1908 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
1909 and   qplatq.attribute_type = G_QUALIFIER_TYPE
1910 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
1911 and   qph.source_system_code = qprs.source_system_code
1912 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
1913          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
1914 union all
1915 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 */
1916        qpq.list_header_id,
1917        qpq.list_line_id list_line_id,
1918        qpq.qualifier_group_cnt,
1919        qpq.others_group_cnt,
1920        qpq.header_quals_exist_flag,
1921        qpq.search_ind,
1922        G_NO validated_flag,
1923        G_NO applied_flag,
1924        G_LINE_LEVEL attribute_level,
1925        G_QUALIFIER_TYPE attribute_type,
1926        qplatq.context          ,
1927        qplatq.attribute        ,
1928        qplatq.value_from       ,
1929        qpq.qualifier_grouping_no qualifier_grouping_no ,
1930        qpq.qualifier_precedence  ,
1931        qpq.qualifier_datatype,
1932        qpq.qualifier_attr_value    ,
1933        qpq.qualifier_attr_value_to ,
1934        qpq.start_date_active,
1935        qpq.end_date_active,
1936        G_NO pricing_attr_flag,
1937        qpq.comparison_operator_code ,
1938        qph.list_type_code,
1939        qph.ask_for_flag,
1940        qplatq.pricing_status_code,
1941        'OHQ' ,
1942         NULL line_index,
1943         NULL pricing_effective_date,
1944         qph.start_date_active_first start_date_active_first,
1945         qph.end_date_active_first   end_date_active_first,
1946         NULL line_type_code,
1947         p_pricing_phase_id pricing_phase_id,
1948         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
1949         qph.start_date_active start_date_active_h,
1950         qph.end_date_active end_date_active_h,
1951         qph.start_date_active_second start_date_active_second,
1952         qph.end_date_active_second end_date_active_second,
1953         qph.active_date_first_type,
1954         qph.active_date_second_type,
1955         qph.limit_exists_flag,
1956         qplatq.derived_qualifier_flag   -- Added for TCA
1957 from
1958 	   qp_npreq_line_attrs_tmp qplatq,
1959 	   qp_qualifiers qpq ,
1960 	   qp_list_header_phases qplh,
1961 	   qp_list_headers_b qph,
1962 	   qp_price_req_sources_v qprs
1963 where
1964       qpq.list_header_id = qplh.list_header_id
1965 and   qplh.list_header_id = qph.list_header_id
1966 -- bug 2799120
1967 --added for moac -- commented references to security profile
1968 --security will be built into qp_list_headers_b
1969 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
1970 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
1971 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
1972 and   qplh.pricing_phase_id = p_pricing_phase_id
1973 and 	 qpq.qualifier_context      = qplatq.context
1974 and 	 qpq.qualifier_attribute    = qplatq.attribute
1975 and   qpq.comparison_operator_code = G_OPERATOR_BETWEEN
1976 and   qpq.search_ind = 1
1977 and   qpq.list_line_id <> -1
1978 and   ( qpq.list_header_id in (SELECT distinct list_header_id
1979                              FROM qp_preq_qual_tmp
1980                              WHERE pricing_phase_id = p_pricing_phase_id
1981                              AND   pricing_status_code = G_STATUS_UNCHANGED)
1982          or
1983         qpq.header_quals_exist_flag = G_NO)
1984 and   (not exists (select 'x'    --3520634 start
1985                      from qp_pricing_attributes qp_pa    -- if no product defined,select the header
1986                     where qp_pa.list_line_id = qpq.list_line_id
1987                       and rownum = 1)
1988        OR  -- If product defined on line level,select headers for which product matches.
1989        exists (select  /*+ ORDERED USE_NL(qpprod) */ 'x'
1990                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
1991                    WHERE c.list_header_id = qpq.list_header_id
1992                    AND   c.list_line_id = qpq.list_line_id
1993                    AND   c.pricing_phase_id = p_pricing_phase_id
1994                    AND   qpprod.context = c.product_attribute_context
1995                    AND   qpprod.attribute = c.product_attribute
1996                    AND   qpprod.value_from = c.product_attr_value
1997                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
1998                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
1999                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
2000                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
2001                    AND   c.excluder_flag = G_NO
2002 --3683298                   AND   qpprod.line_index = qplatq.line_index
2003                    AND   rownum = 1)
2004       )                            --3520634 end
2005 and   qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
2006 --and   decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
2007 -- G_DATE_Y,qplatq.value_from,null)
2008 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
2009 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2010        OR
2011        qph.currency_code IS NULL) -- optional currency
2012 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2013                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2014 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2015                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2016 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2017                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2018 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2019                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
2020 and   qph.list_type_code not in ('PRL','AGR')
2021 and   qpq.list_type_code not in ('PRL','AGR')
2022 and   qph.active_flag = G_YES
2023 and   qpq.active_flag = G_YES
2024 and   qplatq.distinct_qualifier_flag = G_YES
2025 and   qpq.list_header_id = qph.list_header_id
2026 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2027 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2028 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2029 and   qph.source_system_code = qprs.source_system_code
2030 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2031          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2032 union all
2033 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 */
2034        qpq.list_header_id,
2035        qpq.list_line_id list_line_id,
2036        qpq.qualifier_group_cnt,
2037        qpq.others_group_cnt,
2038        qpq.header_quals_exist_flag,
2039        qpq.search_ind,
2040        G_NO validated_flag,
2041        G_NO applied_flag,
2042        G_LINE_LEVEL attribute_level,
2043        G_QUALIFIER_TYPE attribute_type,
2044        qplatq.context          ,
2045        qplatq.attribute        ,
2046        qplatq.value_from       ,
2047        qpq.qualifier_grouping_no qualifier_grouping_no ,
2048        qpq.qualifier_precedence  ,
2049        qpq.qualifier_datatype,
2050        qpq.qualifier_attr_value    ,
2051        qpq.qualifier_attr_value_to ,
2052        qpq.start_date_active,
2053        qpq.end_date_active,
2054        G_NO pricing_attr_flag,
2055        qpq.comparison_operator_code ,
2056        qph.list_type_code,
2057        qph.ask_for_flag,
2058        qplatq.pricing_status_code,
2059        'OHQ' ,
2060         NULL line_index,
2061         NULL pricing_effective_date,
2062         qph.start_date_active_first start_date_active_first,
2063         qph.end_date_active_first   end_date_active_first,
2064         NULL line_type_code,
2065         p_pricing_phase_id pricing_phase_id,
2066         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2067         qph.start_date_active start_date_active_h,
2068         qph.end_date_active end_date_active_h,
2069         qph.start_date_active_second start_date_active_second,
2070         qph.end_date_active_second end_date_active_second,
2071         qph.active_date_first_type,
2072         qph.active_date_second_type,
2073         qph.limit_exists_flag,
2074         qplatq.derived_qualifier_flag     -- Added for TCA
2075 from
2076 	   qp_npreq_line_attrs_tmp qplatq,
2077 	   qp_qualifiers qpq ,
2078 	   qp_list_header_phases qplh,
2079 	   qp_list_headers_b qph,
2080 	   qp_price_req_sources_v qprs
2081 where
2082       qpq.list_header_id = qplh.list_header_id
2083 and   qplh.list_header_id = qph.list_header_id
2084 -- bug 2799120
2085 --added for moac -- commented references to security profile
2086 --security will be built into qp_list_headers_b
2087 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2088 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2089 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2090 and   qplh.pricing_phase_id = p_pricing_phase_id
2091 and 	 qpq.qualifier_context      = qplatq.context
2092 and 	 qpq.qualifier_attribute    = qplatq.attribute
2093 and   qpq.comparison_operator_code = 'NOT ='
2094 and   qpq.qualifier_attr_value <> qplatq.value_from
2095 and   qpq.search_ind = 1
2096 and   qpq.list_line_id <> -1
2097 and   ( qpq.list_header_id in (SELECT distinct list_header_id
2098                              FROM qp_preq_qual_tmp
2099                              WHERE pricing_phase_id = p_pricing_phase_id
2100                              AND   pricing_status_code = G_STATUS_UNCHANGED)
2101          or
2102         qpq.header_quals_exist_flag = G_NO)
2103 and   (not exists (select 'x'    --3520634 start
2104                      from qp_pricing_attributes qp_pa            -- if no product defined,select the header
2105                     where qp_pa.list_line_id = qpq.list_line_id
2106                       and rownum = 1)
2107        OR  -- If product defined on line level,select headers for which product matches.
2108        exists (select  /*+ ORDERED USE_NL(qpprod) */ 'x'
2109                    FROM   qp_pricing_attributes c, qp_npreq_line_attrs_tmp qpprod
2110                    WHERE c.list_header_id = qpq.list_header_id
2111                    AND   c.list_line_id = qpq.list_line_id
2112                    AND   c.pricing_phase_id = p_pricing_phase_id
2113                    AND   qpprod.context = c.product_attribute_context
2114                    AND   qpprod.attribute = c.product_attribute
2115                    AND   qpprod.value_from = c.product_attr_value
2116                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
2117                    AND   c.qualification_ind in (G_YES_PROD_LINE_QUAL_IND, G_YES_PROD_PRIC_LINE_QUAL_IND,
2118                                                  G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
2119                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
2120                    AND   c.excluder_flag = G_NO
2121 --3683298                   AND   qpprod.line_index = qplatq.line_index
2122                    AND   rownum = 1)
2123       )                        --3520634 end
2124 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2125        OR
2126        qph.currency_code IS NULL) -- optional currency
2127 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2128                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2129 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2130                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2131 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2132                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2133 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2134                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
2135 and   qph.list_type_code not in ('PRL','AGR')
2136 and   qpq.list_type_code not in ('PRL','AGR')
2137 and   qph.active_flag = G_YES
2138 and   qpq.active_flag = G_YES
2139 and   qplatq.distinct_qualifier_flag = G_YES
2140 and   qpq.list_header_id = qph.list_header_id
2141 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2142 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2143 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2144 and   qph.source_system_code = qprs.source_system_code
2145 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2146          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'));  -- Added for TCA
2147 
2148 
2149 nROWS CONSTANT NUMBER := 1000;
2150 
2151 l_status_code VARCHAR2(30);
2152 l_status_text VARCHAR2(240);
2153 
2154 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Cache_Line_Qualifiers';
2155 
2156 BEGIN
2157 
2158  --Delete from QP_PREQ_QUAL_TMP;
2159 
2160  G_LINE_QUALIFIER_TEMP := 'E';
2161 
2162  OPEN l_outer_qual_cur;
2163 
2164  LOOP
2165   G_LIST_HEADER_ID_TBL_Q.delete;
2166   G_LIST_LINE_ID_TBL_Q.delete;
2167   G_VALIDATED_FLAG_TBL_Q.delete;
2168   G_APPLIED_FLAG_TBL_Q.delete;
2169   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
2170   G_ATTRIBUTE_TYPE_TBL_Q.delete;
2171   G_CONTEXT_TBL_Q.delete;
2172   G_ATTRIBUTE_TBL_Q.delete;
2173   G_VALUE_FROM_TBL_Q.delete;
2174   G_GROUPING_NO_TBL_Q.delete;
2175   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
2176   G_DATATYPE_TBL_Q.delete;
2177   G_SETUP_VALUE_FROM_TBL_Q.delete;
2178   G_SETUP_VALUE_TO_TBL_Q.delete;
2179   G_PRICING_ATTR_FLAG_TBL_Q.delete;
2180   G_OPERATOR_TYPE_TBL_Q.delete;
2181   G_QUALIFIER_TYPE_TBL_Q.delete;
2182   G_LIST_TYPE_CODE_TBL_Q.delete;
2183   G_ASK_FOR_FLAG_TBL_Q.delete;
2184   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
2185   G_OTHERS_GROUP_CNT_TBL_Q.delete;
2186   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
2187   G_SEARCH_IND_TBL_Q.delete;
2188   G_PRICING_STATUS_CODE_TBL_Q.delete;
2189   G_START_DATE_ACTIVE_TBL_Q.delete;
2190   G_END_DATE_ACTIVE_TBL_Q.delete;
2191   G_LINE_INDEX_TBL_Q.delete;
2192   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
2193   G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
2194   G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
2195   G_LINE_TYPE_CODE_TBL_Q.delete;
2196   G_PRICING_PHASE_ID_TBL_Q.delete;
2197   G_UNIQUE_KEY_TBL_Q.delete;
2198   G_START_DATE_ACTIVE_TBL_H_Q.delete;
2199   G_END_DATE_ACTIVE_TBL_H_Q.delete;
2200   G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
2201   G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
2202   G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
2203   G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
2204   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
2205   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;    -- Added for TCA
2206 
2207   FETCH l_outer_qual_cur
2208   BULK COLLECT INTO
2209      G_LIST_HEADER_ID_TBL_Q
2210    , G_LIST_LINE_ID_TBL_Q
2211    , G_QUALIFIER_GROUP_CNT_TBL_Q
2212    , G_OTHERS_GROUP_CNT_TBL_Q
2213    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2214    , G_SEARCH_IND_TBL_Q
2215    , G_VALIDATED_FLAG_TBL_Q
2216    , G_APPLIED_FLAG_TBL_Q
2217    , G_ATTRIBUTE_LEVEL_TBL_Q
2218    , G_ATTRIBUTE_TYPE_TBL_Q
2219    , G_CONTEXT_TBL_Q
2220    , G_ATTRIBUTE_TBL_Q
2221    , G_VALUE_FROM_TBL_Q
2222    , G_GROUPING_NO_TBL_Q
2223    , G_QUALIFIER_PRECEDENCE_TBL_Q
2224    , G_DATATYPE_TBL_Q
2225    , G_SETUP_VALUE_FROM_TBL_Q
2226    , G_SETUP_VALUE_TO_TBL_Q
2227    , G_START_DATE_ACTIVE_TBL_Q
2228    , G_END_DATE_ACTIVE_TBL_Q
2229    , G_PRICING_ATTR_FLAG_TBL_Q
2230    , G_OPERATOR_TYPE_TBL_Q
2231    , G_LIST_TYPE_CODE_TBL_Q
2232    , G_ASK_FOR_FLAG_TBL_Q
2233    , G_PRICING_STATUS_CODE_TBL_Q
2234    , G_QUALIFIER_TYPE_TBL_Q
2235    , G_LINE_INDEX_TBL_Q
2236    , G_PRICING_EFFECTIVE_DATE_TBL_Q
2237    , G_START_DATE_ACTIVE_FIR_TBL_Q
2238    , G_END_DATE_ACTIVE_FIR_TBL_Q
2239    , G_LINE_TYPE_CODE_TBL_Q
2240    , G_PRICING_PHASE_ID_TBL_Q
2241    , G_UNIQUE_KEY_TBL_Q
2242    , G_START_DATE_ACTIVE_TBL_H_Q
2243    , G_END_DATE_ACTIVE_TBL_H_Q
2244    , G_START_DATE_ACTIVE_SEC_TBL_Q
2245    , G_END_DATE_ACTIVE_SEC_TBL_Q
2246    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
2247    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
2248    , G_HEADER_LIMIT_EXISTS_TBL_Q
2249    , G_DERIVED_QUALIFIER_FLAG_TBL_Q LIMIT nROWS;     -- Added for TCA
2250    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
2251 
2252  IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
2253 
2254      G_LINE_QUALIFIER_TEMP := 'U';
2255 
2256       INSERT_QUAL(
2257        G_LIST_HEADER_ID_TBL_Q
2258      , G_LIST_LINE_ID_TBL_Q
2259      , G_VALIDATED_FLAG_TBL_Q
2260      , G_APPLIED_FLAG_TBL_Q
2261      , G_ATTRIBUTE_LEVEL_TBL_Q
2262      , G_ATTRIBUTE_TYPE_TBL_Q
2263      , G_CONTEXT_TBL_Q
2264      , G_ATTRIBUTE_TBL_Q
2265      , G_VALUE_FROM_TBL_Q
2266      , G_GROUPING_NO_TBL_Q
2267      , G_QUALIFIER_PRECEDENCE_TBL_Q
2268      , G_DATATYPE_TBL_Q
2269      , G_SETUP_VALUE_FROM_TBL_Q
2270      , G_SETUP_VALUE_TO_TBL_Q
2271      , G_PRICING_ATTR_FLAG_TBL_Q
2272      , G_OPERATOR_TYPE_TBL_Q
2273      , G_LIST_TYPE_CODE_TBL_Q
2274      , G_ASK_FOR_FLAG_TBL_Q
2275      , G_QUALIFIER_TYPE_TBL_Q
2276      , G_QUALIFIER_GROUP_CNT_TBL_Q
2277      , G_OTHERS_GROUP_CNT_TBL_Q
2278      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2279      , G_SEARCH_IND_TBL_Q
2280      , G_PRICING_STATUS_CODE_TBL_Q
2281      , G_START_DATE_ACTIVE_TBL_Q
2282      , G_END_DATE_ACTIVE_TBL_Q
2283      , G_LINE_INDEX_TBL_Q
2284      , G_PRICING_EFFECTIVE_DATE_TBL_Q
2285      , G_START_DATE_ACTIVE_FIR_TBL_Q
2286      , G_END_DATE_ACTIVE_FIR_TBL_Q
2287      , G_LINE_TYPE_CODE_TBL_Q
2288      , G_PRICING_PHASE_ID_TBL_Q
2289      , G_UNIQUE_KEY_TBL_Q
2290      , G_START_DATE_ACTIVE_TBL_H_Q
2291      , G_END_DATE_ACTIVE_TBL_H_Q
2292      , G_START_DATE_ACTIVE_SEC_TBL_Q
2293      , G_END_DATE_ACTIVE_SEC_TBL_Q
2294      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
2295      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
2296      , G_HEADER_LIMIT_EXISTS_TBL_Q
2297      , G_DERIVED_QUALIFIER_FLAG_TBL_Q     -- Added for TCA
2298      , l_status_code
2299      , l_status_text);
2300      IF l_status_code = FND_API.G_RET_STS_ERROR THEN
2301         RAISE FND_API.G_EXC_ERROR;
2302      END IF;
2303  END IF;
2304 
2305 END LOOP;
2306 CLOSE l_outer_qual_cur;
2307 
2308 -- Nitin
2309 -- addeded check to delete header level qualifiers if no line qualifier is selected
2310 -- and the header has no lines without line level qualifier in that phase.
2311 
2312 	UPDATE QP_PREQ_QUAL_TMP a
2313      	SET   a.PRICING_STATUS_CODE = G_DELETED_GRP
2314     	WHERE
2315 		a.list_line_id = '-1'
2316     	AND   a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
2317     	AND   a.PRICING_PHASE_ID = p_pricing_phase_id
2318 	and 	a.line_index is null
2319 	and 	not exists
2320 		(select 'x' from qp_preq_qual_tmp b where
2321 			b.list_header_id = a.list_header_id
2322 			and b.list_line_id <> '-1'
2323 			and b.pricing_phase_id = p_pricing_phase_id
2324 			and b.pricing_status_code = G_STATUS_UNCHANGED
2325 			and b.line_index is null)
2326 	and 	a.list_header_id in
2327 		(select list_header_id from
2328 			qp_list_header_phases
2329 			where
2330 			pricing_phase_id = p_pricing_phase_id
2331 			and qualifier_flag = 'Y');
2332 
2333  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
2334 	engine_debug('Nitin - Delete headers - rows deleted '||sql%rowcount);
2335 
2336  END IF;
2337 EXCEPTION
2338   WHEN OTHERS THEN
2339   x_status_code := FND_API.G_RET_STS_ERROR;
2340   x_status_text :=l_routine||' '||SQLERRM;
2341   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
2342   engine_debug(l_routine||' '||SQLERRM);
2343   END IF;
2344 END Cache_Line_Qualifiers;
2345 
2346 /*+--------------------------------------------------------------------
2347   |Cache_Header_Qualifiers
2348   |To match only the header level qualifiers and get qualified headers (list_line_id = -1)
2349   |
2350   +--------------------------------------------------------------------
2351 */
2352 PROCEDURE Cache_Header_Qualifiers(p_pricing_phase_id IN NUMBER,
2353 					  x_status_code OUT NOCOPY VARCHAR2,
2354 					  x_status_text OUT NOCOPY VARCHAR2) As
2355 /*
2356 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,DISTINCT_QUALIFIER_FLAG,1
2357 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,ATTRIBUTE_TYPE,2
2358 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,qp_npreq_line_attrs_tmp_N4,PRICING_STATUS_CODE,3
2359 
2360 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_CONTEXT,1
2361 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTRIBUTE,2
2362 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTR_VALUE,3
2363 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,COMPARISON_OPERATOR_CODE,4
2364 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,ACTIVE_FLAG,5
2365 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_QUALIFIERS_N4,SEARCH_IND,6
2366 
2367 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,PRICING_PHASE_ID,1
2368 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_LIST_HEADER_PHASES_U1,LIST_HEADER_ID,2
2369 
2370 INDX,QP_PREQ_GRP.cache_header_qualifiers.l_outer_qual_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
2371 */
2372 -- Changed the cursor l_outer_qual_cur for bug#3002632
2373 CURSOR l_OUTER_QUAL_CUR IS
2374 -- Qualifier Only
2375 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 */
2376        qpq.list_header_id,
2377        qpq.list_line_id list_line_id,
2378        qpq.qualifier_group_cnt,
2379        qpq.others_group_cnt,
2380        qpq.header_quals_exist_flag,
2381        qpq.search_ind,
2382        G_NO validated_flag,
2383        G_NO applied_flag,
2384        G_LINE_LEVEL attribute_level,
2385        G_QUALIFIER_TYPE attribute_type,
2386        qplatq.context          ,
2387        qplatq.attribute        ,
2388        qplatq.value_from       ,
2389        qpq.qualifier_grouping_no qualifier_grouping_no ,
2390        qpq.qualifier_precedence  ,
2391        qpq.qualifier_datatype,
2392        qpq.qualifier_attr_value    ,
2393        qpq.qualifier_attr_value_to ,
2394        qpq.start_date_active,
2395        qpq.end_date_active,
2396        G_NO pricing_attr_flag,
2397        qpq.comparison_operator_code ,
2398        qph.list_type_code,
2399        qph.ask_for_flag,
2400        qplatq.pricing_status_code,
2401        'OHQ' ,
2402         NULL line_index,
2403         NULL pricing_effective_date,
2404         qph.start_date_active_first start_date_active_first,
2405         qph.end_date_active_first   end_date_active_first,
2406         NULL line_type_code,
2407 	p_pricing_phase_id pricing_phase_id,
2408         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2409         qph.start_date_active start_date_active_h,
2410         qph.end_date_active end_date_active_h,
2411         qph.start_date_active_second start_date_active_second,
2412         qph.end_date_active_second end_date_active_second,
2413         qph.active_date_first_type,
2414         qph.active_date_second_type,
2415         qph.limit_exists_flag,
2416         qplatq.derived_qualifier_flag    -- Added for TCA
2417 from
2418 	   qp_npreq_line_attrs_tmp qplatq,
2419 	   qp_qualifiers qpq ,
2420 	   qp_list_header_phases qplh,
2421 	   qp_list_headers_b qph,
2422 	   qp_price_req_sources_v qprs
2423 where
2424       qpq.list_header_id = qplh.list_header_id
2425 and   qplh.list_header_id = qph.list_header_id
2426 -- bug 2799120
2427 --added for moac -- commented references to security profile
2428 --security will be built into qp_list_headers_b
2429 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2430 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2431 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2432 and   qplh.pricing_phase_id = p_pricing_phase_id
2433 and 	 qpq.qualifier_context      = qplatq.context
2434 and 	 qpq.qualifier_attribute    = qplatq.attribute
2435 and   qpq.qualifier_attr_value = qplatq.value_from
2436 and   qpq.comparison_operator_code = '='
2437 and   qpq.list_line_id = -1 -- only Header level quals
2438 and   qpq.search_ind = 1
2439 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2440        OR
2441        qph.currency_code IS NULL) -- optional currency
2442 and   ((qph.ask_for_flag = G_YES and
2443         qph.list_header_id in (SELECT list_header_id
2444                                FROM qp_npreq_line_attrs_tmp
2445                                WHERE attribute_type = 'QUALIFIER'
2446                                AND pricing_status_code = G_STATUS_UNCHANGED
2447                                AND validated_flag = G_NO
2448                                AND list_header_id IS NOT NULL))
2449         OR qph.ask_for_flag = G_NO)
2450 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2451                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2452 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2453                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2454 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2455                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2456 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2457                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
2458 and   qph.list_type_code not in ('PRL','AGR')
2459 and   qpq.list_type_code not in ('PRL','AGR')
2460 and   qph.active_flag = G_YES
2461 and   qpq.active_flag = G_YES
2462 and   qplatq.distinct_qualifier_flag = G_YES
2463 and   qpq.list_header_id = qph.list_header_id
2464 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2465 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2466 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2467 and   qph.source_system_code = qprs.source_system_code
2468 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2469          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2470 union all
2471 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 */
2472        qpq.list_header_id,
2473        qpq.list_line_id list_line_id,
2474        qpq.qualifier_group_cnt,
2475        qpq.others_group_cnt,
2476        qpq.header_quals_exist_flag,
2477        qpq.search_ind,
2478        G_NO validated_flag,
2479        G_NO applied_flag,
2480        G_LINE_LEVEL attribute_level,
2481        G_QUALIFIER_TYPE attribute_type,
2482        qplatq.context          ,
2483        qplatq.attribute        ,
2484        qplatq.value_from       ,
2485        qpq.qualifier_grouping_no qualifier_grouping_no ,
2486        qpq.qualifier_precedence  ,
2487        qpq.qualifier_datatype,
2488        qpq.qualifier_attr_value    ,
2489        qpq.qualifier_attr_value_to ,
2490        qpq.start_date_active,
2491        qpq.end_date_active,
2492        G_NO pricing_attr_flag,
2493        qpq.comparison_operator_code ,
2494        qph.list_type_code,
2495        qph.ask_for_flag,
2496        qplatq.pricing_status_code,
2497        'OHQ' ,
2498         NULL line_index,
2499         NULL pricing_effective_date,
2500         qph.start_date_active_first start_date_active_first,
2501         qph.end_date_active_first   end_date_active_first,
2502         NULL line_type_code,
2503         p_pricing_phase_id pricing_phase_id,
2504         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2505         qph.start_date_active start_date_active_h,
2506         qph.end_date_active end_date_active_h,
2507         qph.start_date_active_second start_date_active_second,
2508         qph.end_date_active_second end_date_active_second,
2509         qph.active_date_first_type,
2510         qph.active_date_second_type,
2511         qph.limit_exists_flag,
2512         qplatq.derived_qualifier_flag     -- Added for TCA
2513 from
2514 	   qp_npreq_line_attrs_tmp qplatq,
2515 	   qp_qualifiers qpq ,
2516 	   qp_list_header_phases qplh,
2517 	   qp_list_headers_b qph,
2518 	   qp_price_req_sources_v qprs
2519 where
2520       qpq.list_header_id = qplh.list_header_id
2521 and   qplh.list_header_id = qph.list_header_id
2522 -- bug 2799120
2523 --added for moac -- commented references to security profile
2524 --security will be built into qp_list_headers_b
2525 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2526 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2527 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2528 and   qplh.pricing_phase_id = p_pricing_phase_id
2529 and 	 qpq.qualifier_context      = qplatq.context
2530 and 	 qpq.qualifier_attribute    = qplatq.attribute
2531 and   qpq.comparison_operator_code =  G_OPERATOR_BETWEEN
2532 and   qpq.qualifier_datatype =  G_NUMERIC
2533 and   qpq.search_ind = 1
2534 and   qpq.list_line_id = -1 -- Header level quals
2535 and   qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
2536 between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number
2537 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2538        OR
2539        qph.currency_code IS NULL) -- optional currency
2540 and   ((qph.ask_for_flag = G_YES and
2541         qph.list_header_id in (SELECT list_header_id
2542                                FROM qp_npreq_line_attrs_tmp
2543                                WHERE attribute_type = 'QUALIFIER'
2544                                AND pricing_status_code = G_STATUS_UNCHANGED
2545                                AND validated_flag = G_NO
2546                                AND list_header_id IS NOT NULL))
2547         OR qph.ask_for_flag = G_NO)
2548 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2549                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2550 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2551                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2552 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2553                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2554 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2555                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
2556 and   qph.list_type_code not in ('PRL','AGR')
2557 and   qpq.list_type_code not in ('PRL','AGR')
2558 and   qph.active_flag = G_YES
2559 and   qpq.active_flag = G_YES
2560 and   qplatq.distinct_qualifier_flag = G_YES
2561 and   qpq.list_header_id = qph.list_header_id
2562 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2563 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2564 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2565 and   qph.source_system_code = qprs.source_system_code
2566 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2567          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2568 union all
2569 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 */
2570        qpq.list_header_id,
2571        qpq.list_line_id list_line_id,
2572        qpq.qualifier_group_cnt,
2573        qpq.others_group_cnt,
2574        qpq.header_quals_exist_flag,
2575        qpq.search_ind,
2576        G_NO validated_flag,
2577        G_NO applied_flag,
2578        G_LINE_LEVEL attribute_level,
2579        G_QUALIFIER_TYPE attribute_type,
2580        qplatq.context          ,
2581        qplatq.attribute        ,
2582        qplatq.value_from       ,
2583        qpq.qualifier_grouping_no qualifier_grouping_no ,
2584        qpq.qualifier_precedence  ,
2585        qpq.qualifier_datatype,
2586        qpq.qualifier_attr_value    ,
2587        qpq.qualifier_attr_value_to ,
2588        qpq.start_date_active,
2589        qpq.end_date_active,
2590        G_NO pricing_attr_flag,
2591        qpq.comparison_operator_code ,
2592        qph.list_type_code,
2593        qph.ask_for_flag,
2594        qplatq.pricing_status_code,
2595        'OHQ' ,
2596         NULL line_index,
2597         NULL pricing_effective_date,
2598         qph.start_date_active_first start_date_active_first,
2599         qph.end_date_active_first   end_date_active_first,
2600         NULL line_type_code,
2601         p_pricing_phase_id pricing_phase_id,
2602         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2603         qph.start_date_active start_date_active_h,
2604         qph.end_date_active end_date_active_h,
2605         qph.start_date_active_second start_date_active_second,
2606         qph.end_date_active_second end_date_active_second,
2607         qph.active_date_first_type,
2608         qph.active_date_second_type,
2609         qph.limit_exists_flag,
2610         qplatq.derived_qualifier_flag      -- Added for TCA
2611 
2612 from
2613 	   qp_npreq_line_attrs_tmp qplatq,
2614 	   qp_qualifiers qpq ,
2615 	   qp_list_header_phases qplh,
2616 	   qp_list_headers_b qph,
2617 	   qp_price_req_sources_v qprs
2618 where
2619       qpq.list_header_id = qplh.list_header_id
2620 and   qplh.list_header_id = qph.list_header_id
2621 -- bug 2799120
2622 --added for moac -- commented references to security profile
2623 --security will be built into qp_list_headers_b
2624 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2625 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2626 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2627 and   qplh.pricing_phase_id = p_pricing_phase_id
2628 and 	 qpq.qualifier_context      = qplatq.context
2629 and 	 qpq.qualifier_attribute    = qplatq.attribute
2630 and   qpq.comparison_operator_code = G_OPERATOR_BETWEEN
2631 and   qpq.search_ind = 1
2632 and   qpq.list_line_id = -1 -- Header level quals
2633 and   qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y)
2634 --and   decode(qpq.qualifier_datatype,G_VARCHAR,qplatq.value_from,G_DATE_X,qplatq.value_from,
2635 -- G_DATE_Y,qplatq.value_from,null)
2636 and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to
2637 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2638        OR
2639        qph.currency_code IS NULL) -- optional currency
2640 and   ((qph.ask_for_flag = G_YES and
2641         qph.list_header_id in (SELECT list_header_id
2642                                FROM qp_npreq_line_attrs_tmp
2643                                WHERE attribute_type = 'QUALIFIER'
2644                                AND pricing_status_code = G_STATUS_UNCHANGED
2645                                AND validated_flag = G_NO
2646                                AND list_header_id IS NOT NULL))
2647         OR qph.ask_for_flag = G_NO)
2648 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2649                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2650 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2651                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2652 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2653                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2654 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2655                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
2656 and   qph.list_type_code not in ('PRL','AGR')
2657 and   qpq.list_type_code not in ('PRL','AGR')
2658 and   qph.active_flag = G_YES
2659 and   qpq.active_flag = G_YES
2660 and   qplatq.distinct_qualifier_flag = G_YES
2661 and   qpq.list_header_id = qph.list_header_id
2662 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2663 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2664 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2665 and   qph.source_system_code = qprs.source_system_code
2666 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2667          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'))  -- Added for TCA
2668 union all
2669 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 */
2670        qpq.list_header_id,
2671        qpq.list_line_id list_line_id,
2672        qpq.qualifier_group_cnt,
2673        qpq.others_group_cnt,
2674        qpq.header_quals_exist_flag,
2675        qpq.search_ind,
2676        G_NO validated_flag,
2677        G_NO applied_flag,
2678        G_LINE_LEVEL attribute_level,
2679        G_QUALIFIER_TYPE attribute_type,
2680        qplatq.context          ,
2681        qplatq.attribute        ,
2682        qplatq.value_from       ,
2683        qpq.qualifier_grouping_no qualifier_grouping_no ,
2684        qpq.qualifier_precedence  ,
2685        qpq.qualifier_datatype,
2686        qpq.qualifier_attr_value    ,
2687        qpq.qualifier_attr_value_to ,
2688        qpq.start_date_active,
2689        qpq.end_date_active,
2690        G_NO pricing_attr_flag,
2691        qpq.comparison_operator_code ,
2692        qph.list_type_code,
2693        qph.ask_for_flag,
2694        qplatq.pricing_status_code,
2695        'OHQ' ,
2696         NULL line_index,
2697         NULL pricing_effective_date,
2698         qph.start_date_active_first start_date_active_first,
2699         qph.end_date_active_first   end_date_active_first,
2700         NULL line_type_code,
2701         p_pricing_phase_id pricing_phase_id,
2702         qpq.LIST_HEADER_ID || '-' || qpq.LIST_LINE_ID || '-' || qpq.QUALIFIER_GROUPING_NO UNIQUE_KEY,
2703         qph.start_date_active start_date_active_h,
2704         qph.end_date_active end_date_active_h,
2705         qph.start_date_active_second start_date_active_second,
2706         qph.end_date_active_second end_date_active_second,
2707         qph.active_date_first_type,
2708         qph.active_date_second_type,
2709         qph.limit_exists_flag,
2710         qplatq.derived_qualifier_flag    -- Added for TCA
2711 
2712 from
2713 	   qp_npreq_line_attrs_tmp qplatq,
2714 	   qp_qualifiers qpq ,
2715 	   qp_list_header_phases qplh,
2716 	   qp_list_headers_b qph,
2717 	   qp_price_req_sources_v qprs
2718 where
2719       qpq.list_header_id = qplh.list_header_id
2720 and   qplh.list_header_id = qph.list_header_id
2721 -- bug 2799120
2722 --added for moac -- commented references to security profile
2723 --security will be built into qp_list_headers_b
2724 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
2725 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
2726 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
2727 and   qplh.pricing_phase_id = p_pricing_phase_id
2728 and 	 qpq.qualifier_context      = qplatq.context
2729 and 	 qpq.qualifier_attribute    = qplatq.attribute
2730 and   qpq.comparison_operator_code = 'NOT ='
2731 and   qpq.qualifier_attr_value <> qplatq.value_from
2732 and   qpq.search_ind = 1
2733 and   qpq.list_line_id = -1 -- Header Level Quals
2734 and   ((qph.currency_code IS NOT NULL AND qph.currency_code = G_CURRENCY_CODE)
2735        OR
2736        qph.currency_code IS NULL) -- optional currency
2737 and   ((qph.ask_for_flag = G_YES and
2738         qph.list_header_id in (SELECT list_header_id
2739                                FROM qp_npreq_line_attrs_tmp
2740                                WHERE attribute_type = 'QUALIFIER'
2741                                AND pricing_status_code = G_STATUS_UNCHANGED
2742                                AND validated_flag = G_NO
2743                                AND list_header_id IS NOT NULL))
2744         OR qph.ask_for_flag = G_NO)
2745 and    ((G_MIN_PRICING_DATE between nvl(qph.start_date_active , G_MIN_PRICING_DATE)
2746                                          and nvl(qph.end_date_active,G_MIN_PRICING_DATE)
2747 or      G_MAX_PRICING_DATE between nvl(qph.start_date_active , G_MAX_PRICING_DATE)
2748                                          and nvl(qph.end_date_active,G_MAX_PRICING_DATE)))
2749 and    ((G_MIN_PRICING_DATE between nvl(qpq.start_date_active , G_MIN_PRICING_DATE)
2750                                          and nvl(qpq.end_date_active,G_MIN_PRICING_DATE)
2751 or      G_MAX_PRICING_DATE between nvl(qpq.start_date_active , G_MAX_PRICING_DATE)
2752                                          and nvl(qpq.end_date_active,G_MAX_PRICING_DATE)))
2753 and   qph.list_type_code not in ('PRL','AGR')
2754 and   qpq.list_type_code not in ('PRL','AGR')
2755 and   qph.active_flag = G_YES
2756 and   qpq.active_flag = G_YES
2757 and   qplatq.distinct_qualifier_flag = G_YES
2758 and   qpq.list_header_id = qph.list_header_id
2759 and   qplatq.pricing_status_code = G_STATUS_UNCHANGED
2760 and   qplatq.attribute_type = G_QUALIFIER_TYPE
2761 and   qprs.request_type_code = G_REQUEST_TYPE_CODE
2762 and   qph.source_system_code = qprs.source_system_code
2763 and    ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') = 'N')
2764          OR (qplatq.DERIVED_QUALIFIER_FLAG = 'Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y'));  -- Added for TCA
2765 
2766 
2767 nROWS CONSTANT NUMBER := 1000;
2768 
2769 l_status_code VARCHAR2(30);
2770 l_status_text VARCHAR2(240);
2771 
2772 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Cache_Header_Qualifiers';
2773 
2774 BEGIN
2775 
2776  --Delete from QP_PREQ_QUAL_TMP;
2777 
2778  G_QUALIFIER_TEMP := 'E';
2779 
2780  OPEN l_outer_qual_cur;
2781 
2782  LOOP
2783   G_LIST_HEADER_ID_TBL_Q.delete;
2784   G_LIST_LINE_ID_TBL_Q.delete;
2785   G_VALIDATED_FLAG_TBL_Q.delete;
2786   G_APPLIED_FLAG_TBL_Q.delete;
2787   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
2788   G_ATTRIBUTE_TYPE_TBL_Q.delete;
2789   G_CONTEXT_TBL_Q.delete;
2790   G_ATTRIBUTE_TBL_Q.delete;
2791   G_VALUE_FROM_TBL_Q.delete;
2792   G_GROUPING_NO_TBL_Q.delete;
2793   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
2794   G_DATATYPE_TBL_Q.delete;
2795   G_SETUP_VALUE_FROM_TBL_Q.delete;
2796   G_SETUP_VALUE_TO_TBL_Q.delete;
2797   G_PRICING_ATTR_FLAG_TBL_Q.delete;
2798   G_OPERATOR_TYPE_TBL_Q.delete;
2799   G_QUALIFIER_TYPE_TBL_Q.delete;
2800   G_LIST_TYPE_CODE_TBL_Q.delete;
2801   G_ASK_FOR_FLAG_TBL_Q.delete;
2802   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
2803   G_OTHERS_GROUP_CNT_TBL_Q.delete;
2804   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
2805   G_SEARCH_IND_TBL_Q.delete;
2806   G_PRICING_STATUS_CODE_TBL_Q.delete;
2807   G_START_DATE_ACTIVE_TBL_Q.delete;
2808   G_END_DATE_ACTIVE_TBL_Q.delete;
2809   G_LINE_INDEX_TBL_Q.delete;
2810   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
2811   G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
2812   G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
2813   G_LINE_TYPE_CODE_TBL_Q.delete;
2814   G_PRICING_PHASE_ID_TBL_Q.delete;
2815   G_UNIQUE_KEY_TBL_Q.delete;
2816   G_START_DATE_ACTIVE_TBL_H_Q.delete;
2817   G_END_DATE_ACTIVE_TBL_H_Q.delete;
2818   G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
2819   G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
2820   G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
2821   G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
2822   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
2823   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;   -- Added for TCA
2824 
2825   FETCH l_outer_qual_cur
2826   BULK COLLECT INTO
2827      G_LIST_HEADER_ID_TBL_Q
2828    , G_LIST_LINE_ID_TBL_Q
2829    , G_QUALIFIER_GROUP_CNT_TBL_Q
2830    , G_OTHERS_GROUP_CNT_TBL_Q
2831    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2832    , G_SEARCH_IND_TBL_Q
2833    , G_VALIDATED_FLAG_TBL_Q
2834    , G_APPLIED_FLAG_TBL_Q
2835    , G_ATTRIBUTE_LEVEL_TBL_Q
2836    , G_ATTRIBUTE_TYPE_TBL_Q
2837    , G_CONTEXT_TBL_Q
2838    , G_ATTRIBUTE_TBL_Q
2839    , G_VALUE_FROM_TBL_Q
2840    , G_GROUPING_NO_TBL_Q
2841    , G_QUALIFIER_PRECEDENCE_TBL_Q
2842    , G_DATATYPE_TBL_Q
2843    , G_SETUP_VALUE_FROM_TBL_Q
2844    , G_SETUP_VALUE_TO_TBL_Q
2845    , G_START_DATE_ACTIVE_TBL_Q
2846    , G_END_DATE_ACTIVE_TBL_Q
2847    , G_PRICING_ATTR_FLAG_TBL_Q
2848    , G_OPERATOR_TYPE_TBL_Q
2849    , G_LIST_TYPE_CODE_TBL_Q
2850    , G_ASK_FOR_FLAG_TBL_Q
2851    , G_PRICING_STATUS_CODE_TBL_Q
2852    , G_QUALIFIER_TYPE_TBL_Q
2853    , G_LINE_INDEX_TBL_Q
2854    , G_PRICING_EFFECTIVE_DATE_TBL_Q
2855    , G_START_DATE_ACTIVE_FIR_TBL_Q
2856    , G_END_DATE_ACTIVE_FIR_TBL_Q
2857    , G_LINE_TYPE_CODE_TBL_Q
2858    , G_PRICING_PHASE_ID_TBL_Q
2859    , G_UNIQUE_KEY_TBL_Q
2860    , G_START_DATE_ACTIVE_TBL_H_Q
2861    , G_END_DATE_ACTIVE_TBL_H_Q
2862    , G_START_DATE_ACTIVE_SEC_TBL_Q
2863    , G_END_DATE_ACTIVE_SEC_TBL_Q
2864    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
2865    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
2866    , G_HEADER_LIMIT_EXISTS_TBL_Q
2867    , G_DERIVED_QUALIFIER_FLAG_TBL_Q  LIMIT nROWS;     -- Added for TCA
2868    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
2869 
2870  IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
2871 
2872      G_QUALIFIER_TEMP := 'U';
2873 
2874       INSERT_QUAL(
2875        G_LIST_HEADER_ID_TBL_Q
2876      , G_LIST_LINE_ID_TBL_Q
2877      , G_VALIDATED_FLAG_TBL_Q
2878      , G_APPLIED_FLAG_TBL_Q
2879      , G_ATTRIBUTE_LEVEL_TBL_Q
2880      , G_ATTRIBUTE_TYPE_TBL_Q
2881      , G_CONTEXT_TBL_Q
2882      , G_ATTRIBUTE_TBL_Q
2883      , G_VALUE_FROM_TBL_Q
2884      , G_GROUPING_NO_TBL_Q
2885      , G_QUALIFIER_PRECEDENCE_TBL_Q
2886      , G_DATATYPE_TBL_Q
2887      , G_SETUP_VALUE_FROM_TBL_Q
2888      , G_SETUP_VALUE_TO_TBL_Q
2889      , G_PRICING_ATTR_FLAG_TBL_Q
2890      , G_OPERATOR_TYPE_TBL_Q
2891      , G_LIST_TYPE_CODE_TBL_Q
2892      , G_ASK_FOR_FLAG_TBL_Q
2893      , G_QUALIFIER_TYPE_TBL_Q
2894      , G_QUALIFIER_GROUP_CNT_TBL_Q
2895      , G_OTHERS_GROUP_CNT_TBL_Q
2896      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
2897      , G_SEARCH_IND_TBL_Q
2898      , G_PRICING_STATUS_CODE_TBL_Q
2899      , G_START_DATE_ACTIVE_TBL_Q
2900      , G_END_DATE_ACTIVE_TBL_Q
2901      , G_LINE_INDEX_TBL_Q
2902      , G_PRICING_EFFECTIVE_DATE_TBL_Q
2903      , G_START_DATE_ACTIVE_FIR_TBL_Q
2904      , G_END_DATE_ACTIVE_FIR_TBL_Q
2905      , G_LINE_TYPE_CODE_TBL_Q
2906      , G_PRICING_PHASE_ID_TBL_Q
2907      , G_UNIQUE_KEY_TBL_Q
2908      , G_START_DATE_ACTIVE_TBL_H_Q
2909      , G_END_DATE_ACTIVE_TBL_H_Q
2910      , G_START_DATE_ACTIVE_SEC_TBL_Q
2911      , G_END_DATE_ACTIVE_SEC_TBL_Q
2912      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
2913      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
2914      , G_HEADER_LIMIT_EXISTS_TBL_Q
2915      , G_DERIVED_QUALIFIER_FLAG_TBL_Q     -- Added for TCA
2916      , l_status_code
2917      , l_status_text);
2918  END IF;
2919 
2920 END LOOP;
2921 CLOSE l_outer_qual_cur;
2922 EXCEPTION
2923   WHEN OTHERS THEN
2924   x_status_code := FND_API.G_RET_STS_ERROR;
2925   x_status_text :=l_routine||' '||SQLERRM;
2926   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
2927   engine_debug(l_routine||' '||SQLERRM);
2928 
2929   END IF;
2930 END Cache_Header_Qualifiers;
2931 
2932 /*+--------------------------------------------------------------------
2933   |Reset_All_Tbls
2934   |To Reset all pl/sql tables.
2935   +--------------------------------------------------------------------
2936 */
2937 PROCEDURE Reset_All_Tbls(x_status_code OUT NOCOPY VARCHAR2,
2938                          x_status_text OUT NOCOPY VARCHAR2)
2939 AS
2940 l_routine VARCHAR2(240):='QP_PREQ_GRP.Reset_All_Tbls';
2941 BEGIN
2942  G_LINE_INDEX_tbl.delete;
2943  G_USAGE_PRICING_TYPE_TBL.delete;
2944  G_LINE_CATEGORY_TBL.delete;
2945  G_LINE_CATEGORY_DEF_TBL.delete;
2946  G_CONTRACT_START_DATE_TBL.delete;	/* shulin */
2947  G_CONTRACT_END_DATE_TBL.delete;	/* shulin */
2948  G_LINE_UNIT_PRICE_TBL.delete;	/* shu_latest */
2949  G_CONTRACT_START_DATE_DEF_TBL.delete;	/* shulin */
2950  G_CONTRACT_END_DATE_DEF_TBL.delete;	/* shulin */
2951  G_LINE_UNIT_PRICE_DEF_TBL.delete;	/* shu_latest */
2952  G_CHARGE_PERIODICITY_CODE_TBL.delete;
2953  G_CURRENCY_HEADER_ID_DEF_TBL.delete;    /* vivek */
2954  G_SELLING_ROUNDING_DEF_TBL.delete;    /* vivek */
2955  G_ORDER_CURRENCY_DEF_TBL.delete;        /* vivek */
2956  G_PRICING_EFF_DATE_DEF_TBL.delete;      /* vivek */
2957  G_BASE_CURRENCY_DEF_TBL.delete;         /* vivek */
2958  G_CURRENCY_DETAIL_ID_DEF_TBL.delete;    /* sunilpandey */
2959 
2960  G_LINE_DETAIL_INDEX_tbl.delete;
2961  G_ATTRIBUTE_LEVEL_tbl.delete;
2962  G_ATTRIBUTE_TYPE_tbl.delete;
2963  G_LIST_HEADER_ID_tbl.delete;
2964  G_LIST_LINE_ID_tbl.delete;
2965  G_CONTEXT_tbl.delete;
2966  G_ATTRIBUTE_tbl.delete;
2967  G_VALUE_FROM_tbl.delete;
2968  G_SETUP_VALUE_FROM_tbl.delete;
2969  G_VALUE_TO_tbl.delete;
2970  G_SETUP_VALUE_TO_tbl.delete;
2971  G_GROUPING_NUMBER_tbl.delete;
2972  G_NO_QUALIFIERS_IN_GRP_tbl.delete;
2973  G_COMPARISON_OPERATOR_TYPE_tbl.delete;
2974  G_VALIDATED_FLAG_tbl.delete;
2975  G_APPLIED_FLAG_tbl.delete;
2976  G_PRICING_STATUS_CODE_tbl.delete;
2977  G_PRICING_STATUS_TEXT_tbl.delete;
2978  G_QUALIFIER_PRECEDENCE_tbl.delete;
2979  G_DATATYPE_tbl.delete;
2980  G_PRICING_ATTR_FLAG_tbl.delete;
2981  G_QUALIFIER_TYPE_tbl.delete;
2982  G_product_uom_code_tbl.delete;
2983 
2984  G_ROUNDING_FLAG_TBL.delete;
2985  G_LINE_TYPE_CODE_TBL.delete          ;
2986  G_PRICING_EFFECTIVE_DATE_TBL.delete  ;
2987  G_ACTIVE_DATE_FIRST_TBL.delete       ;
2988  G_ACTIVE_DATE_FIRST_TYPE_TBL.delete  ;
2989  G_ACTIVE_DATE_SECOND_TBL.delete      ;
2990  G_ACTIVE_DATE_SECOND_TYPE_TBL.delete ;
2991  G_LINE_QUANTITY_TBL.delete           ;
2992  G_LINE_UOM_CODE_TBL.delete           ;
2993  G_REQUEST_TYPE_CODE_TBL.delete       ;
2994  G_PRICED_QUANTITY_TBL.delete         ;
2995  G_UOM_QUANTITY_TBL.delete         ;
2996  G_PRICED_UOM_CODE_TBL.delete         ;
2997  G_CURRENCY_CODE_TBL.delete           ;
2998  G_UNIT_PRICE_TBL.delete              ;
2999  G_PERCENT_PRICE_TBL.delete           ;
3000  G_ADJUSTED_UNIT_PRICE_TBL.delete     ;
3001  G_UPD_ADJUSTED_UNIT_PRICE_TBL.delete;
3002  G_PROCESSED_FLAG_TBL.delete          ;
3003  G_PRICE_FLAG_TBL.delete              ;
3004  G_LINE_ID_TBL.delete                 ;
3005  G_PROCESSING_ORDER_TBL.delete        ;
3006  G_EXCLUDER_FLAG_TBL.delete               ;
3007  G_PRICE_REQUEST_CODE_TBL.delete;
3008  G_HEADER_LIMIT_EXISTS_TBL.delete;
3009  G_LINE_LIMIT_EXISTS_TBL.delete;
3010  G_CHARGE_TYPE_CODE_TBL.delete;
3011  G_CHARGE_SUBTYPE_CODE_TBL.delete;
3012  G_CURRENCY_HEADER_ID_TBL.delete;           /* vivek */
3013  G_SELLING_ROUNDING_TBL.delete;           /* vivek */
3014  G_ORDER_CURRENCY_TBL.delete;               /* vivek */
3015  G_BASE_CURRENCY_CODE_TBL.delete;           /* vivek */
3016  G_CURRENCY_DETAIL_ID_TBL.delete;           /* sunilpandey */
3017  G_ACCUM_CONTEXT_TBL.delete;   -- accum range break
3018  G_ACCUM_ATTRIBUTE_TBL.delete; -- accum range break
3019  G_ACCUM_FLAG_TBL.delete;      -- accum range break
3020  G_UPDATED_FLAG_TBL.delete;       -- 3215497
3021  G_CALCULATION_CODE_TBL.delete;   -- 3215497
3022  G_CHANGE_REASON_CODE_TBL.delete; -- 3215497
3023  G_CHANGE_REASON_TEXT_TBL.delete; -- 3215497
3024  G_PROCESS_CODE_TBL.delete;       -- 3215497
3025   G_LINE_DETAIL_TYPE_CODE_TBL.delete        ;
3026   G_PRICE_BREAK_TYPE_CODE_TBL.delete        ;
3027   G_LIST_PRICE_TBL.delete                   ;
3028   G_LIST_LINE_TYPE_TBL.delete               ;
3029   G_LIST_TYPE_CODE_TBL.delete               ;
3030   G_CREATED_FROM_SQL_TBL.delete             ;
3031   G_PRICING_GROUP_SEQUENCE_TBL.delete       ;
3032   G_PRICING_PHASE_ID_TBL.delete             ;
3033   G_OPERAND_CALCULATION_CODE_TBL.delete     ;
3034   G_OPERAND_VALUE_TBL.delete                ;
3035   G_SUBSTITUTION_TYPE_CODE_TBL.delete       ;
3036   G_SUBSTITUTION_VALUE_FROM_TBL.delete      ;
3037   G_SUBSTITUTION_VALUE_TO_TBL.delete        ;
3038   G_ASK_FOR_FLAG_TBL.delete                 ;
3039   G_PRICE_FORMULA_ID_TBL.delete             ;
3040   G_PRODUCT_PRECEDENCE_TBL.delete           ;
3041   G_INCOMP_GRP_CODE_TBL.delete              ;
3042   G_AUTOMATIC_FLAG_TBL.delete               ;
3043   G_OVERRIDE_FLAG_TBL.delete                ;
3044   G_PRIMARY_UOM_FLAG_TBL.delete             ;
3045   G_PRINT_ON_INVOICE_FLAG_TBL.delete        ;
3046   G_MODIFIER_LEVEL_CODE_TBL.delete          ;
3047   G_BENEFIT_QTY_TBL.delete                  ;
3048   G_BENEFIT_UOM_CODE_TBL.delete             ;
3049   G_LIST_LINE_NO_TBL.delete                 ;
3050   G_ACCRUAL_FLAG_TBL.delete                 ;
3051   G_ACCRUAL_CONVERSION_RATE_TBL.delete      ;
3052   G_ESTIM_ACCRUAL_RATE_TBL.delete           ;
3053   G_RECURRING_FLAG_TBL.delete               ;
3054   G_QUALIFIERS_EXIST_FLAG_TBL.delete;
3055   G_PRICING_ATTRS_EXIST_FLAG_TBL.delete;
3056   G_SELECTED_VOLUME_ATTR_TBL.delete         ;
3057   G_ROUNDING_FACTOR_TBL.delete              ;
3058   G_LINE_INDEX_LD_TBL.delete                ;
3059   G_LINE_DETAIL_INDEX_LD_TBL.delete         ;
3060   G_LIST_HEADER_ID_LD_TBL.delete            ;
3061   G_LIST_LINE_ID_LD_TBL.delete              ;
3062   G_PRICING_STATUS_CODE_LD_TBL.delete       ;
3063   G_PRICING_STATUS_TEXT_LD_TBL.delete       ;
3064   G_APPLIED_FLAG_LD_TBL.delete;
3065   G_PROCESSED_FLAG_LD_TBL.delete;
3066   G_LINE_INDEX_l_TBL.delete;
3067   G_LINE_DETAIL_INDEX_l_TBL.delete;
3068   G_PRICING_STATUS_CODE_L_TBL.delete;
3069   G_PRICING_STATUS_TEXT_L_TBL.delete;
3070 
3071   G_LIST_HEADER_ID_TBL_Q.delete;
3072   G_LIST_LINE_ID_TBL_Q.delete;
3073   G_LINE_INDEX_TBL_Q.delete;
3074   G_VALIDATED_FLAG_TBL_Q.delete;
3075   G_APPLIED_FLAG_TBL_Q.delete;
3076   G_START_DATE_ACTIVE_TBL_Q.delete;
3077   G_END_DATE_ACTIVE_TBL_Q.delete;
3078   G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
3079   G_LINE_TYPE_CODE_TBL_Q.delete;
3080   G_ATTRIBUTE_LEVEL_TBL_Q.delete;
3081   G_ATTRIBUTE_TYPE_TBL_Q.delete;
3082   G_CONTEXT_TBL_Q.delete;
3083   G_ATTRIBUTE_TBL_Q.delete;
3084   G_VALUE_FROM_TBL_Q.delete;
3085   G_GROUPING_NO_TBL_Q.delete;
3086   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
3087   G_DATATYPE_TBL_Q.delete;
3088   G_SETUP_VALUE_FROM_TBL_Q.delete;
3089   G_SETUP_VALUE_TO_TBL_Q.delete;
3090   G_PRICING_ATTR_FLAG_TBL_Q.delete;
3091   G_OPERATOR_TYPE_TBL_Q.delete;
3092   G_CURRENCY_CODE_TBL_Q.delete;
3093   G_ASK_FOR_FLAG_TBL_Q.delete;
3094   G_LIST_TYPE_CODE_TBL_Q.delete;
3095   G_QUALIFIER_TYPE_TBL_Q.delete;
3096   G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
3097   G_OTHERS_GROUP_CNT_TBL_Q.delete;
3098   G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
3099   G_SEARCH_IND_TBL_Q.delete;
3100   G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
3101   G_LIST_LINE_NO_TBL_Q.delete;
3102 
3103   G_LINE_INDEX_TBL_P.delete;
3104   G_LINE_DETAIL_INDEX_TBL_P.delete;
3105   G_LIST_HEADER_ID_TBL_P.delete;
3106   G_LIST_LINE_ID_TBL_P.delete;
3107   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
3108   G_LIST_PRICE_TBL_P.delete;
3109   G_LIST_LINE_TYPE_TBL_P.delete;
3110   G_LIST_TYPE_CODE_TBL_P.delete;
3111   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
3112   G_PRICING_PHASE_ID_TBL_P.delete;
3113   G_OPER_CALCULATION_CODE_TBL_P.delete;
3114   G_OPERAND_VALUE_TBL_P.delete;
3115   G_ASK_FOR_FLAG_TBL_P.delete;
3116   G_PRICE_FORMULA_ID_TBL_P.delete;
3117   G_PRODUCT_PRECEDENCE_TBL_P.delete;
3118   G_INCOMP_GRP_CODE_TBL_P.delete;
3119   G_AUTOMATIC_FLAG_TBL_P.delete;
3120   G_OVERRIDE_FLAG_TBL_P.delete;
3121   G_PRIMARY_UOM_FLAG_TBL_P.delete;
3122   G_PRINT_ON_INVOICE_FLAG_TBL_P.delete;
3123   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
3124   G_BENEFIT_QTY_TBL_P.delete;
3125   G_BENEFIT_UOM_CODE_TBL_P.delete;
3126   G_LIST_LINE_NO_TBL_P.delete;
3127   G_ACCRUAL_FLAG_TBL_P.delete;
3128   G_ACCR_CONVERSION_RATE_TBL_P.delete;
3129   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
3130   G_ATTRIBUTE_LEVEL_TBL_P.delete;
3131   G_ATTRIBUTE_TYPE_TBL_P.delete;
3132   G_CONTEXT_TBL_P.delete;
3133   G_ATTRIBUTE_TBL_P.delete;
3134   G_VALUE_FROM_TBL_P.delete;
3135   G_SETUP_VALUE_FROM_TBL_P.delete;
3136   G_VALIDATED_FLAG_TBL_P.delete;
3137   G_APPLIED_FLAG_TBL_P.delete;
3138   G_PRICING_ATTR_FLAG_TBL_P.delete;
3139   G_GROUPING_NUMBER_TBL_P.delete;
3140   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
3141   G_EXCLUDER_FLAG_TBL_P.delete;
3142   G_PRODUCT_UOM_CODE_TBL_P.delete;
3143   G_QUALIFIER_TYPE_TBL_P.delete;
3144   G_ROUNDING_FACTOR_TBL_P.delete;
3145   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
3146   G_LINE_LIMIT_EXISTS_TBL_P.delete;
3147   G_CHARGE_TYPE_CODE_TBL_P.delete;
3148   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
3149   G_CURRENCY_HEADER_ID_TBL_P.delete;      /* vivek */
3150   G_SELLING_ROUNDING_TBL_P.delete;      /* vivek */
3151   G_ORDER_CURRENCY_TBL_P.delete;          /* vivek */
3152   G_PRICING_EFFECTIVE_DATE_TBL_P.delete;  /* vivek */
3153   G_BASE_CURRENCY_CODE_TBL_P.delete;      /* vivek */
3154   G_CURRENCY_DETAIL_ID_TBL_P.delete;      /* sunilpandey */
3155   G_ACCUM_CONTEXT_TBL_P.delete;   -- accum range break
3156   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- accum range break
3157   G_ACCUM_FLAG_TBL_P.delete;      -- accum range break
3158 
3159   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
3160   G_ATTRIBUTE_TYPE_TBL_PR.delete;
3161   G_CONTEXT_TBL_PR.delete;
3162   G_ATTRIBUTE_TBL_PR.delete;
3163   G_VALUE_FROM_TBL_PR.delete;
3164   G_OPERATOR_TYPE_TBL_PR.delete;
3165   G_SETUP_VALUE_FROM_TBL_PR.delete;
3166   G_SETUP_VALUE_TO_TBL_PR.delete;
3167   G_DATATYPE_TBL_PR.delete;
3168 
3169   G_LINE_INDEX_TBL_B.delete;
3170   G_LIST_HEADER_ID_TBL_B.delete;
3171   G_LIST_LINE_ID_TBL_B.delete;
3172   G_PRICE_BREAK_TYPE_CODE_TBL_B.delete;
3173   G_LIST_PRICE_TBL_B.delete;
3174   G_LIST_LINE_TYPE_TBL_B.delete;
3175   G_LIST_TYPE_CODE_TBL_B.delete;
3176   G_PRICING_GROUP_SEQUENCE_TBL_B.delete;
3177   G_PRICING_PHASE_ID_TBL_B.delete;
3178   G_OPER_CALCULATION_CODE_TBL_B.delete;
3179   G_OPERAND_VALUE_TBL_B.delete;
3180   G_ASK_FOR_FLAG_TBL_B.delete;
3181   G_PRICE_FORMULA_ID_TBL_B.delete;
3182   G_PRODUCT_PRECEDENCE_TBL_B.delete;
3183   G_INCOMP_GRP_CODE_TBL_B.delete;
3184   G_AUTOMATIC_FLAG_TBL_B.delete;
3185   G_OVERRIDE_FLAG_TBL_B.delete;
3186   G_PRIMARY_UOM_FLAG_TBL_B.delete;
3187   G_PRINT_ON_INVOICE_FLAG_TBL_B.delete;
3188   G_MODIFIER_LEVEL_CODE_TBL_B.delete;
3189   G_BENEFIT_QTY_TBL_B.delete;
3190   G_BENEFIT_UOM_CODE_TBL_B.delete;
3191   G_LIST_LINE_NO_TBL_B.delete;
3192   G_ACCRUAL_FLAG_TBL_B.delete;
3193   G_ACCR_CONVERSION_RATE_TBL_B.delete;
3194   G_ESTIM_ACCRUAL_RATE_TBL_B.delete;
3195   G_LINE_INDEX_TBL_G.delete;
3196   G_LIST_HEADER_ID_TBL_G.delete;
3197   G_LIST_LINE_ID_TBL_G.delete;
3198   G_NO_OF_PATTS_IN_GRP_TBL_G.delete;
3199 
3200   G_PRICING_PHASE_ID_TBL_A.delete;
3201   G_INCOMP_GRP_CODE_TBL_A.delete;
3202   G_LINE_DETAIL_TYPE_CODE_TBL_A.delete;
3203   G_MODIFIER_LEVEL_CODE_TBL_A.delete;
3204   G_PRIMARY_UOM_FLAG_TBL_A.delete;
3205 
3206 EXCEPTION
3207 WHEN OTHERS THEN
3208  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3209   engine_debug(l_routine||': '||SQLERRM);
3210  END IF;
3211  x_status_code := FND_API.G_RET_STS_ERROR;
3212  x_status_text := l_routine || ': '  || SQLERRM;
3213 END Reset_All_Tbls;
3214 
3215 /*+---------------------------------------------------------------------
3216   |Update Processing_Order
3217   |For service lines, two request lines might be related to each other and one
3218   |might be the parent and the other might be child.
3219   |This relationship are passed by the calling application
3220   |thru rltd_tbl structure. From this structure, we can find
3221   |the which is the parent and child.  Parent lines
3222   |need to be process before the child lines.  This information
3223   |is store in processing_order column in temp by this procedure
3224   +---------------------------------------------------------------------
3225 */
3226 PROCEDURE Update_Processing_Order (x_status_code OUT NOCOPY VARCHAR2,
3227                                    x_status_text OUT NOCOPY VARCHAR2)
3228 AS
3229 
3230 /*
3231 INDX,QP_PREQ_GRP.Update_Processing_Order.l_Service_Cur,-No Index Used-,NA,NA
3232 */
3233 CURSOR l_Service_Cur IS
3234   SELECT LINE_INDEX,
3235          RELATED_LINE_INDEX
3236   FROM qp_npreq_rltd_lines_tmp
3237   WHERE LINE_INDEX IS NOT NULL
3238   AND   RELATED_LINE_INDEX IS NOT NULL
3239   AND   RELATIONSHIP_TYPE_CODE = G_SERVICE_LINE;
3240 
3241 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Update_Processing_Order';
3242 l_line_index_tbl NUMBER_TYPE;
3243 l_related_line_index_tbl NUMBER_TYPE;
3244 
3245 BEGIN
3246 x_status_code := FND_API.G_RET_STS_SUCCESS;
3247 /*
3248 INDX,QP_PREQ_GRP.Update_Processing_Order.Update_Processing_Order_upd1,qp_npreq_lines_tmp_U1,LINE_INDEX,1
3249 */
3250 
3251   -- julin [3805113]: using bulk collect and update
3252   OPEN l_Service_Cur;
3253   LOOP
3254     FETCH l_Service_Cur BULK COLLECT INTO
3255        l_line_index_tbl,
3256        l_related_line_index_tbl
3257        LIMIT G_BATCH_SIZE;
3258     EXIT WHEN l_line_index_tbl.count = 0;
3259 
3260      -- julin [3805113]: bulk update
3261      FORALL I IN l_line_index_tbl.first..l_line_index_tbl.last
3262        UPDATE qp_npreq_lines_tmp --upd1
3263        SET PROCESSING_ORDER = 1
3264        WHERE LINE_INDEX = l_line_index_tbl(I);
3265 
3266 --Assuming that parent line has it index on related_line_index column
3267 /*
3268 INDX,QP_PREQ_GRP.Update_Processing_Order.Update_Processing_Order_upd2,qp_npreq_lines_tmp_U1,LINE_INDEX,1
3269 */
3270      -- julin [3805113]: bulk update
3271      FORALL I IN l_related_line_index_tbl.first..l_related_line_index_tbl.last
3272        UPDATE qp_npreq_lines_tmp --upd2
3273        SET PROCESSING_ORDER = 2
3274        WHERE LINE_INDEX = l_related_line_index_tbl(I);
3275 
3276   END LOOP;
3277   CLOSE l_Service_Cur;
3278 
3279 --added for 4900095
3280 --marking the service lines with uom_quantity as null
3281 --this will be used in lumpsum calculation
3282 for cl in (select line_index from qp_npreq_lines_tmp line
3283            where processing_order = 2
3284            and (contract_start_date is not null or contract_end_date is not null)
3285            and uom_quantity is null)
3286 loop
3287   G_service_line_ind_tbl(cl.line_index) := cl.line_index;
3288   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3289     IF G_service_line_ind_tbl.exists(cl.line_index) THEN
3290       engine_debug('service line with uom_qty as null line_index: '||G_service_line_ind_tbl(cl.line_index));
3291     END IF;--G_service_line_ind_tbl.exists
3292   END IF;--G_DEBUG_ENGINE
3293 end loop;
3294 
3295 EXCEPTION
3296   WHEN OTHERS THEN
3297    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3298    engine_debug(l_routine||' '||SQLERRM);
3299    END IF;
3300    x_status_code := FND_API.G_RET_STS_ERROR;
3301    x_status_text := 'Error in '||l_routine||SQLERRM;
3302 END;
3303 
3304 /*+----------------------------------------------------------------------
3305   | Function GET_LINE_DETAIL_INDEX
3306   | Output: Unique number
3307   | This function behave like a sequence, to return uniq
3308   +----------------------------------------------------------------------
3309 */
3310 FUNCTION GET_LINE_DETAIL_INDEX RETURN PLS_INTEGER IS
3311 BEGIN
3312  G_LINE_DETAIL_INDEX :=G_LINE_DETAIL_INDEX + 1;
3313  RETURN G_LINE_DETAIL_INDEX;
3314 END;
3315 
3316 /*+----------------------------------------------------------------------
3317   |PROCEDURE SET_STATUS_CODE
3318   +----------------------------------------------------------------------
3319 */
3320 PROCEDURE SET_STATUS_CODE (p_status_code IN VARCHAR2,
3321                            p_status_text IN VARCHAR2:=NULL,
3322                            p_line_index    IN NUMBER,
3323                            p_line_detail_index IN PLS_INTEGER:=NULL,
3324                            p_temp_table  IN VARCHAR2,
3325                            x_status_code OUT NOCOPY VARCHAR2,
3326                            x_status_text OUT NOCOPY VARCHAR2)
3327 AS
3328 l_routine VARCHAR2(240):='QP_PREQ_GRP.SET_STATUS_CODE';
3329 BEGIN
3330    IF(p_temp_table = 'LINES') THEN
3331 /*
3332 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd1,qp_npreq_lines_tmp_N1,LINE_INDEX,1
3333 */
3334 	-- shulin fix bug1745788, widen substr to 2000
3335    UPDATE qp_npreq_lines_tmp --upd1
3336       SET PRICING_STATUS_CODE = p_status_code,
3337           PRICING_STATUS_TEXT = substr(p_status_text,1,2000)
3338       WHERE LINE_INDEX = p_line_index;
3339    ELSIF (p_temp_table = 'LDETS' AND p_line_index IS NOT NULL) THEN
3340 /*
3341 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd2,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
3342 */
3343 	-- shulin fix bug1745788, widen substr to 2000
3344       UPDATE qp_npreq_ldets_tmp     --upd2
3345         SET PRICING_STATUS_CODE = p_status_code,
3346             PRICING_STATUS_TEXT =
3347                   substr(pricing_status_code||'+'||p_status_code||'+'||p_status_text,1,2000)
3348         WHERE LINE_INDEX = p_line_index
3349 	   AND   PRICING_STATUS_CODE <> G_STATUS_UNCHANGED;
3350    ELSIF (p_temp_table = 'ATTRS' AND p_line_index IS NOT NULL
3351           AND p_line_detail_index IS NULL) THEN
3352         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3353         engine_debug('----Updating status code for LDETS---------');
3354         END IF;
3355 /*
3356 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd3,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
3357 INDX,QP_PREQ_GRP.set_status_code.set_status_code_upd3,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
3358 */
3359         UPDATE /*+ dynamic_sampling(1) */ qp_npreq_line_attrs_tmp     --upd3
3360         SET PRICING_STATUS_CODE = p_status_code,
3361             PRICING_STATUS_TEXT = substr(p_status_text,1,240)
3362         WHERE LINE_INDEX = p_line_index
3363         AND   PRICING_STATUS_CODE <> G_STATUS_UNCHANGED;
3364    END IF;
3365 EXCEPTION
3366   WHEN OTHERS THEN
3367    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3368    engine_debug(l_routine||' '||SQLERRM);
3369    END IF;
3370    x_status_code := FND_API.G_RET_STS_ERROR;
3371    x_status_text := l_routine||': '||SQLERRM;
3372 
3373 END SET_STATUS_CODE;
3374 
3375 
3376 /*+----------------------------------------------------------------------
3377   |PROCEDURE SET_PROCESSED_CODE
3378   +----------------------------------------------------------------------
3379 */
3380 PROCEDURE SET_PROCESSED_CODE (p_processed_code IN VARCHAR2,
3381                               p_line_index    IN NUMBER,
3382                               p_line_detail_index IN PLS_INTEGER:=NULL,
3383                               p_temp_table  IN VARCHAR2,
3384                               x_status_code OUT NOCOPY VARCHAR2,
3385                               x_status_text OUT NOCOPY VARCHAR2)
3386 AS
3387 l_routine VARCHAR2(240):='QP_PREQ_GRP.SET_PROCESSED_CODE';
3388 BEGIN
3389    IF(p_temp_table = 'LINES') THEN
3390 /*
3391 INDX,QP_PREQ_GRP.set_processed_code.set_processed_code_upd1,qp_npreq_lines_tmp_N1,LINE_INDEX,1
3392 */
3393    UPDATE qp_npreq_lines_tmp --upd1
3394       SET PROCESSED_CODE = p_processed_code
3395       WHERE LINE_INDEX = p_line_index;
3396     ELSIF (p_temp_table = 'ATTRS' AND p_line_index IS NOT NULL
3397           AND p_line_detail_index IS NULL) THEN
3398         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3399         engine_debug('----Updating status code for LDETS---------');
3400         END IF;
3401 /*
3402 INDX,QP_PREQ_GRP.set_processed_code.set_processed_code_upd2,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
3403 */
3404         UPDATE qp_npreq_line_attrs_tmp      --upd2
3405         SET PROCESSED_CODE = p_processed_code
3406         WHERE LINE_INDEX = p_line_index;
3407    END IF;
3408 EXCEPTION
3409   WHEN OTHERS THEN
3410    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3411    engine_debug(l_routine||' '||SQLERRM);
3412    END IF;
3413    x_status_code := FND_API.G_RET_STS_ERROR;
3414    x_status_text := l_routine||': '||SQLERRM;
3415 
3416 END SET_PROCESSED_CODE;
3417 
3418 /*+----------------------------------------------------
3419   |PROCEDURE DELETE_ALL_LINES
3420   |This procedure mark qp_npreq_line_attrs_tmp and qp_npreq_ldets_tmp
3421   |for delete. And mark qp_preq_lines status code as
3422   |whatever calling procedure wanted. Which is usually
3423   |not a 'Delete' because record in qp_npreq_lines_tmp
3424   |is the only one which communicates with outside
3425   |world (order managment for example).
3426   +----------------------------------------------------
3427 */
3428 
3429 PROCEDURE DELETE_LINES(p_line_index       IN NUMBER,
3430                        p_line_status_code IN VARCHAR2,
3431                        p_status_text      IN VARCHAR2,
3432                        x_status_code OUT NOCOPY VARCHAR2,
3433                        x_status_text OUT NOCOPY VARCHAR2) AS
3434 
3435 l_routine VARCHAR2(240):='QP_PREQ_GRP.DELETE_LINES';
3436 
3437 l_error_status_code VARCHAR2(30);
3438 l_error_status_text VARCHAR2(240);
3439 
3440 E_ROUTINE_ERRORS EXCEPTION;
3441 
3442 BEGIN
3443        SET_STATUS_CODE(p_line_status_code,
3444                        p_status_text,
3445                        P_LINE_INDEX,
3446                        NULL,
3447                       'LINES',
3448                        l_error_status_code,
3449                        l_error_status_text);
3450 
3451        IF (l_error_status_code = FND_API.G_RET_STS_ERROR) THEN
3452         RAISE E_ROUTINE_ERRORS;
3453        END IF;
3454 
3455        SET_STATUS_CODE(G_STATUS_DELETED,
3456                        p_status_text,
3457                        P_LINE_INDEX,
3458                        NULL,
3459                       'ATTRS',
3460                        l_error_status_code,
3461                        l_error_status_text);
3462 
3463        IF (l_error_status_code = FND_API.G_RET_STS_ERROR) THEN
3464         RAISE E_ROUTINE_ERRORS;
3465        END IF;
3466 
3467        SET_STATUS_CODE(G_STATUS_DELETED,
3468                        p_status_text,
3469                        P_LINE_INDEX,
3470                        NULL,
3471                       'LDETS',
3472                        l_error_status_code,
3473                        l_error_status_text);
3474 
3475        IF (l_error_status_code = FND_API.G_RET_STS_ERROR) THEN
3476         RAISE E_ROUTINE_ERRORS;
3477        END IF;
3478 
3479 EXCEPTION
3480   WHEN E_ROUTINE_ERRORS THEN
3481     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3482      engine_debug(l_routine||': '||l_error_status_text);
3483      END IF;
3484      x_status_code := FND_API.G_RET_STS_ERROR;
3485      x_status_text := l_routine||': '||l_error_status_text;
3486   WHEN OTHERS THEN
3487    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3488      engine_debug(l_routine||' '||SQLERRM);
3489    END IF;
3490    x_status_code := FND_API.G_RET_STS_ERROR;
3491    x_status_text := 'Error in '||l_routine||SQLERRM;
3492 END DELETE_LINES;
3493 
3494 /*+----------------------------------------------------------------------
3495   |Procedure Group INSERT_LINE_ATTRS2_AT
3496   +----------------------------------------------------------------------
3497 */
3498 
3499 PROCEDURE INSERT_LINE_ATTRS2_AT
3500    (    p_LINE_INDEX_tbl                number_type,
3501         p_LINE_DETAIL_INDEX_tbl         pls_integer_type ,
3502         p_ATTRIBUTE_TYPE_tbl            varchar_type,
3503         p_CONTEXT_tbl                   varchar_type,
3504         p_ATTRIBUTE_tbl                 varchar_type,
3505         p_VALUE_FROM_tbl                varchar_type,
3506         p_VALUE_TO_tbl                  varchar_type,
3507         p_VALIDATED_FLAG_tbl            varchar_type,
3508         x_status_code                   OUT NOCOPY VARCHAR2,
3509         x_status_text                   OUT NOCOPY VARCHAR2)
3510 AS
3511  PRAGMA AUTONOMOUS_TRANSACTION;
3512  l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT';
3513  l_request_id number;
3514 
3515 BEGIN
3516  x_status_code := FND_API.G_RET_STS_SUCCESS;
3517  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
3518 
3519 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3520  INSERT INTO QP_INT_LINE_ATTRS_T
3521                 (LINE_INDEX,
3522                  LINE_DETAIL_INDEX,
3523                  ATTRIBUTE_TYPE,
3524                  CONTEXT,
3525                  ATTRIBUTE,
3526                  VALUE_FROM,
3527                  VALUE_TO,
3528                  VALIDATED_FLAG,
3529                  request_id)
3530 VALUES          (p_LINE_INDEX_tbl(i),
3531                  p_LINE_DETAIL_INDEX_tbl(i),
3532                  p_ATTRIBUTE_TYPE_tbl(i),
3533                  p_CONTEXT_tbl(i),
3534                  p_ATTRIBUTE_tbl(i),
3535                  p_VALUE_FROM_tbl(i),
3536                  p_VALUE_TO_tbl(i),
3537                  p_VALIDATED_FLAG_tbl(i),
3538                  l_request_id);
3539  /*INSERT INTO QP_INT_LINE_ATTRS
3540                 (LINE_INDEX,
3541                  LINE_DETAIL_INDEX,
3542                  ATTRIBUTE_TYPE,
3543                  CONTEXT,
3544                  ATTRIBUTE,
3545                  VALUE_FROM,
3546                  VALUE_TO,
3547                  VALIDATED_FLAG)
3548 VALUES          (p_LINE_INDEX_tbl(i),
3549                  p_LINE_DETAIL_INDEX_tbl(i),
3550                  p_ATTRIBUTE_TYPE_tbl(i),
3551                  p_CONTEXT_tbl(i),
3552                  p_ATTRIBUTE_tbl(i),
3553                  p_VALUE_FROM_tbl(i),
3554                  p_VALUE_TO_tbl(i),
3555                  p_VALIDATED_FLAG_tbl(i));
3556 */
3557  QP_PREQ_GRP.G_INT_ATTRS_NO := QP_PREQ_GRP.G_INT_ATTRS_NO + p_LINE_INDEX_tbl.count;
3558  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3559    QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_ATTRS_NO='||QP_PREQ_GRP.G_INT_ATTRS_NO);
3560  END IF;
3561 COMMIT;
3562 EXCEPTION
3563   WHEN OTHERS THEN
3564   x_status_code := FND_API.G_RET_STS_ERROR;
3565   x_status_text :=l_routine||' '||SQLERRM;
3566   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3567    QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
3568   END IF;
3569 END;
3570 
3571 /*+----------------------------------------------------------------------
3572   |Procedure Group INSERT_LINE_ATTRS2
3573   +----------------------------------------------------------------------
3574 */
3575 
3576 PROCEDURE INSERT_LINE_ATTRS2
3577    (    p_LINE_INDEX_tbl                number_type,
3578         p_LINE_DETAIL_INDEX_tbl         pls_integer_type ,
3579         p_ATTRIBUTE_TYPE_tbl            varchar_type,
3580         p_CONTEXT_tbl                   varchar_type,
3581         p_ATTRIBUTE_tbl                 varchar_type,
3582         p_VALUE_FROM_tbl                varchar_type,
3583         p_VALUE_TO_tbl                  varchar_type,
3584         p_VALIDATED_FLAG_tbl            varchar_type,
3585         x_status_code                   OUT NOCOPY VARCHAR2,
3586         x_status_text                   OUT NOCOPY VARCHAR2)
3587 AS
3588  l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2';
3589 --added by yangli for Java Engine 3086881
3590  l_debug varchar2(3);
3591 --added by yangli for Java Engine 3086881
3592 BEGIN
3593 
3594 --added by yangli for Java Engine 3086881
3595 -- Set the global variable G_DEBUG_ENGINE
3596   QP_PREQ_GRP.Set_QP_Debug;
3597 
3598   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
3599 
3600 --added by yangli for Java Engine project
3601 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
3602  IF l_debug = FND_API.G_TRUE THEN
3603         ENGINE_DEBUG('Java Engine not Installed ----------');
3604  END IF;
3605 --added by yangli for Java Engine 3086881
3606  x_status_code := FND_API.G_RET_STS_SUCCESS;
3607 
3608 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3609  INSERT INTO qp_npreq_line_attrs_tmp
3610                 (LINE_INDEX,
3611                  LINE_DETAIL_INDEX,
3612                  ATTRIBUTE_TYPE,
3613                  CONTEXT,
3614                  ATTRIBUTE,
3615                  VALUE_FROM,
3616                  VALUE_TO,
3617                  VALIDATED_FLAG)
3618 VALUES          (p_LINE_INDEX_tbl(i),
3619                  p_LINE_DETAIL_INDEX_tbl(i),
3620                  p_ATTRIBUTE_TYPE_tbl(i),
3621                  p_CONTEXT_tbl(i),
3622                  p_ATTRIBUTE_tbl(i),
3623                  p_VALUE_FROM_tbl(i),
3624                  p_VALUE_TO_tbl(i),
3625                  p_VALIDATED_FLAG_tbl(i));
3626 --added by yangli for Java Engine 3086881
3627 ELSE
3628   IF l_debug = FND_API.G_TRUE THEN
3629         ENGINE_DEBUG('Java Engine Installed ----------');
3630   END IF;
3631   QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT(
3632         p_LINE_INDEX_tbl               ,
3633         p_LINE_DETAIL_INDEX_tbl        ,
3634         p_ATTRIBUTE_TYPE_tbl           ,
3635         p_CONTEXT_tbl                  ,
3636         p_ATTRIBUTE_tbl                ,
3637         p_VALUE_FROM_tbl               ,
3638         p_VALUE_TO_tbl                 ,
3639         p_VALIDATED_FLAG_tbl           ,
3640         x_status_code                  ,
3641         x_status_text
3642 );
3643 
3644 END IF;
3645 --added by yangli for Java Engine 3086881
3646 
3647 EXCEPTION
3648   WHEN OTHERS THEN
3649   x_status_code := FND_API.G_RET_STS_ERROR;
3650   x_status_text :=l_routine||' '||SQLERRM;
3651   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3652   engine_debug(l_routine||' '||SQLERRM);
3653   END IF;
3654 END;
3655 
3656 
3657 /*+-----------------------------------------------------------------------
3658   | PROCEDURE INSERT_LINE_ATTRS
3659   +-----------------------------------------------------------------------
3660 */
3661 PROCEDURE INSERT_LINE_ATTRS
3662    (    p_LINE_INDEX                      IN PLS_INTEGER,
3663         p_LINE_DETAIL_INDEX               IN PLS_INTEGER   :=NULL,
3664         p_ATTRIBUTE_LEVEL                 IN VARCHAR2,
3665         p_ATTRIBUTE_TYPE                  IN VARCHAR2,
3666         p_LIST_HEADER_ID                  IN NUMBER   :=NULL,
3667         p_LIST_LINE_ID                    IN NUMBER   :=NULL,
3668         p_CONTEXT                         IN VARCHAR2,
3669         p_ATTRIBUTE                       IN VARCHAR2,
3670         p_VALUE_FROM                      IN VARCHAR2,
3671         p_SETUP_VALUE_FROM                IN VARCHAR2 :=NULL,
3672         p_VALUE_TO                        IN VARCHAR2 :=NULL,
3673         p_SETUP_VALUE_TO                  IN VARCHAR2 :=NULL,
3674         p_GROUPING_NUMBER                 IN PLS_INTEGER   :=NULL,
3675         p_NO_QUALIFIERS_IN_GRP            IN PLS_INTEGER   :=NULL,
3676         p_COMPARISON_OPERATOR_TYPE        IN VARCHAR2 :=NULL,
3677         p_VALIDATED_FLAG                  IN VARCHAR2 :=NULL,
3678         p_APPLIED_FLAG                    IN VARCHAR2 :=NULL,
3679         p_PRICING_STATUS_CODE             IN VARCHAR2,
3680         p_PRICING_STATUS_TEXT             IN VARCHAR2 :=NULL,
3681         p_QUALIFIER_PRECEDENCE            IN PLS_INTEGER   :=NULL,
3682         p_DATATYPE                        IN VARCHAR2 :=NULL,
3683         p_PRICING_ATTR_FLAG               IN VARCHAR2 :=NULL,
3684         p_QUALIFIER_TYPE                  IN VARCHAR2 :=NULL,
3685         p_product_uom_code                IN VARCHAR2 :=NULL,
3686         p_excluder_flag                   IN VARCHAR2 :=NULL,
3687         x_status_code                     OUT NOCOPY VARCHAR2,
3688         x_status_text                     OUT NOCOPY VARCHAR2)
3689 AS
3690 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS';
3691 BEGIN
3692  x_status_code := FND_API.G_RET_STS_SUCCESS;
3693  INSERT INTO qp_npreq_line_attrs_tmp
3694                 (LINE_INDEX,
3695                  LINE_DETAIL_INDEX,
3696                  ATTRIBUTE_LEVEL,
3697                  ATTRIBUTE_TYPE,
3698                  LIST_HEADER_ID,
3699                  LIST_LINE_ID,
3700                  CONTEXT,
3701                  ATTRIBUTE,
3702                  VALUE_FROM,
3703                  SETUP_VALUE_FROM,
3704                  VALUE_TO,
3705                  SETUP_VALUE_TO,
3706                  GROUPING_NUMBER,
3707                  COMPARISON_OPERATOR_TYPE_CODE,
3708                  VALIDATED_FLAG,
3709                  APPLIED_FLAG,
3710                  PRICING_STATUS_CODE,
3711                  PRICING_STATUS_TEXT,
3712                  QUALIFIER_PRECEDENCE,
3713                  DATATYPE,
3714                  PRICING_ATTR_FLAG,
3715                  QUALIFIER_TYPE,
3716                  PRODUCT_UOM_CODE,
3717                  EXCLUDER_FLAG
3718                 )
3719 VALUES          (p_LINE_INDEX,
3720                  p_LINE_DETAIL_INDEX,
3721                  p_ATTRIBUTE_LEVEL,
3722                  p_ATTRIBUTE_TYPE,
3723                  p_LIST_HEADER_ID,
3724                  p_LIST_LINE_ID,
3725                  p_CONTEXT,
3726                  p_ATTRIBUTE,
3727                  p_VALUE_FROM,
3728                  p_SETUP_VALUE_FROM,
3729                  p_VALUE_TO,
3730                  p_SETUP_VALUE_TO,
3731                  p_GROUPING_NUMBER,
3732                  p_COMPARISON_OPERATOR_TYPE,
3733                  p_VALIDATED_FLAG,
3734                  p_APPLIED_FLAG,
3735                  p_PRICING_STATUS_CODE,
3736                  p_PRICING_STATUS_TEXT,
3737                  p_QUALIFIER_PRECEDENCE,
3738                  p_DATATYPE,
3739                  p_PRICING_ATTR_FLAG,
3740                  p_QUALIFIER_TYPE,
3741                  p_PRODUCT_UOM_CODE,
3742                  p_EXCLUDER_FLAG
3743                 );
3744 EXCEPTION
3745   WHEN OTHERS THEN
3746   x_status_code := FND_API.G_RET_STS_ERROR;
3747   x_status_text :=l_routine||' '||SQLERRM;
3748   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3749   engine_debug(l_routine||' '||SQLERRM);
3750   END IF;
3751 END;
3752 
3753 /*+-----------------------------------------------------------------------
3754   | PROCEDURE INSERT_PRICE_LIST_ATTRS
3755   +-----------------------------------------------------------------------
3756 */
3757 PROCEDURE INSERT_PRICE_LIST_ATTRS
3758    (    p_LINE_INDEX_tbl         pls_integer_type,
3759         p_LINE_DETAIL_INDEX_tbl  pls_integer_type ,
3760         p_ATTRIBUTE_LEVEL_tbl    varchar_type,
3761         p_ATTRIBUTE_TYPE_tbl     varchar_type,
3762         p_LIST_HEADER_ID_tbl     number_type,
3763         p_LIST_LINE_ID_tbl       number_type,
3764         p_CONTEXT_tbl            varchar_type,
3765         p_ATTRIBUTE_tbl          varchar_type,
3766         p_VALUE_FROM_tbl         varchar_type,
3767         p_SETUP_VALUE_FROM_tbl   varchar_type,
3768         p_SETUP_VALUE_TO_tbl     varchar_type,
3769         p_GROUPING_NUMBER_tbl    pls_integer_type,
3770         p_COMPARISON_OPERATOR_TYPE_tbl  varchar_type,
3771         p_VALIDATED_FLAG_tbl            varchar_type,
3772         p_APPLIED_FLAG_tbl              varchar_type,
3773         p_PRICING_STATUS_CODE_tbl       varchar_type,
3774         p_PRICING_STATUS_TEXT_tbl       varchar_type,
3775         p_QUALIFIER_PRECEDENCE_tbl      pls_integer_type,
3776         p_DATATYPE_tbl                  varchar_type,
3777         p_PRICING_ATTR_FLAG_tbl         varchar_type,
3778         p_QUALIFIER_TYPE_tbl            varchar_type,
3779         p_PRODUCT_UOM_CODE_TBL          varchar_type,
3780         p_EXCLUDER_FLAG_TBL             varchar_type ,
3781         p_PRICING_PHASE_ID_TBL          pls_integer_type ,
3782         p_INCOMPATABILITY_GRP_CODE_TBL  varchar_type ,
3783         p_LINE_DETAIL_TYPE_CODE_TBL     varchar_type ,
3784         p_MODIFIER_LEVEL_CODE_TBL       varchar_type ,
3785         p_PRIMARY_UOM_FLAG_TBL          varchar_type ,
3786         x_status_code                   OUT NOCOPY VARCHAR2,
3787         x_status_text                   OUT NOCOPY VARCHAR2)
3788 AS
3789 
3790 
3791 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_PRICE_LIST_ATTRS';
3792 BEGIN
3793  x_status_code := FND_API.G_RET_STS_SUCCESS;
3794 
3795 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3796  INSERT INTO qp_npreq_line_attrs_tmp
3797                 (LINE_INDEX,
3798                  LINE_DETAIL_INDEX,
3799                  ATTRIBUTE_LEVEL,
3800                  ATTRIBUTE_TYPE,
3801                  LIST_HEADER_ID,
3802                  LIST_LINE_ID,
3803                  CONTEXT,
3804                  ATTRIBUTE,
3805                  VALUE_FROM,
3806                  SETUP_VALUE_FROM,
3807                  SETUP_VALUE_TO,
3808                  GROUPING_NUMBER,
3809                  COMPARISON_OPERATOR_TYPE_CODE,
3810                  VALIDATED_FLAG,
3811                  APPLIED_FLAG,
3812                  PRICING_STATUS_CODE,
3813                  PRICING_STATUS_TEXT,
3814                  QUALIFIER_PRECEDENCE,
3815                  DATATYPE,
3816                  PRICING_ATTR_FLAG,
3817                  QUALIFIER_TYPE,
3818                  PRODUCT_UOM_CODE,
3819                  EXCLUDER_FLAG,
3820                  PRICING_PHASE_ID,
3821                  INCOMPATABILITY_GRP_CODE,
3822                  LINE_DETAIL_TYPE_CODE,
3823                  MODIFIER_LEVEL_CODE,
3824                  PRIMARY_UOM_FLAG
3825                 )
3826 VALUES          (p_LINE_INDEX_tbl(i),
3827                  p_LINE_DETAIL_INDEX_tbl(i),
3828                  p_ATTRIBUTE_LEVEL_tbl(i),
3829                  p_ATTRIBUTE_TYPE_tbl(i),
3830                  p_LIST_HEADER_ID_tbl(i),
3831                  p_LIST_LINE_ID_tbl(i),
3832                  p_CONTEXT_tbl(i),
3833                  p_ATTRIBUTE_tbl(i),
3834                  p_VALUE_FROM_tbl(i),
3835                  p_SETUP_VALUE_FROM_tbl(i),
3836                  p_SETUP_VALUE_TO_tbl(i),
3837                  p_GROUPING_NUMBER_tbl(i),
3838                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
3839                  p_VALIDATED_FLAG_tbl(i),
3840                  p_APPLIED_FLAG_tbl(i),
3841                  p_PRICING_STATUS_CODE_tbl(i),
3842                  p_PRICING_STATUS_TEXT_tbl(i),
3843                  p_QUALIFIER_PRECEDENCE_tbl(i),
3844                  p_DATATYPE_tbl(i),
3845                  p_PRICING_ATTR_FLAG_tbl(i),
3846                  p_QUALIFIER_TYPE_tbl(i),
3847                  p_PRODUCT_UOM_CODE_tbl(i),
3848                  p_EXCLUDER_FLAG_TBL(i),
3849                  p_PRICING_PHASE_ID_TBL(i),
3850                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
3851                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
3852                  p_MODIFIER_LEVEL_CODE_TBL(i),
3853                  p_PRIMARY_UOM_FLAG_TBL(i)
3854                 );
3855 EXCEPTION
3856   WHEN OTHERS THEN
3857   x_status_code := FND_API.G_RET_STS_ERROR;
3858   x_status_text :=l_routine||' '||SQLERRM;
3859   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
3860   engine_debug(l_routine||' '||SQLERRM);
3861   END IF;
3862 END;
3863 
3864 /*+-----------------------------------------------------------------------
3865   | PROCEDURE INSERT_LINE_ATTRS2_AT
3866   +-----------------------------------------------------------------------
3867 */
3868 PROCEDURE INSERT_LINE_ATTRS2_AT
3869    (    p_LINE_INDEX_tbl         pls_integer_type,
3870         p_LINE_DETAIL_INDEX_tbl  pls_integer_type ,
3871         p_ATTRIBUTE_LEVEL_tbl    varchar_type,
3872         p_ATTRIBUTE_TYPE_tbl     varchar_type,
3873         p_LIST_HEADER_ID_tbl     number_type,
3874         p_LIST_LINE_ID_tbl       number_type,
3875         p_CONTEXT_tbl            varchar_type,
3876         p_ATTRIBUTE_tbl          varchar_type,
3877         p_VALUE_FROM_tbl         varchar_type,
3878         p_SETUP_VALUE_FROM_tbl   varchar_type,
3879         p_VALUE_TO_tbl           varchar_type,
3880         p_SETUP_VALUE_TO_tbl     varchar_type,
3881         p_GROUPING_NUMBER_tbl    pls_integer_type,
3882         p_NO_QUALIFIERS_IN_GRP_tbl      pls_integer_type,
3883         p_COMPARISON_OPERATOR_TYPE_tbl  varchar_type,
3884         p_VALIDATED_FLAG_tbl            varchar_type,
3885         p_APPLIED_FLAG_tbl              varchar_type,
3886         p_PRICING_STATUS_CODE_tbl       varchar_type,
3887         p_PRICING_STATUS_TEXT_tbl       varchar_type,
3888         p_QUALIFIER_PRECEDENCE_tbl      pls_integer_type,
3889         p_DATATYPE_tbl                  varchar_type,
3890         p_PRICING_ATTR_FLAG_tbl         varchar_type,
3891         p_QUALIFIER_TYPE_tbl            varchar_type,
3892         p_PRODUCT_UOM_CODE_TBL          varchar_type,
3893         p_EXCLUDER_FLAG_TBL             varchar_type ,
3894         p_PRICING_PHASE_ID_TBL          pls_integer_type ,
3895         p_INCOMPATABILITY_GRP_CODE_TBL  varchar_type ,
3896         p_LINE_DETAIL_TYPE_CODE_TBL     varchar_type ,
3897         p_MODIFIER_LEVEL_CODE_TBL       varchar_type ,
3898         p_PRIMARY_UOM_FLAG_TBL          varchar_type ,
3899         x_status_code                   OUT NOCOPY VARCHAR2,
3900         x_status_text                   OUT NOCOPY VARCHAR2)
3901 AS
3902 PRAGMA AUTONOMOUS_TRANSACTION;
3903 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT';
3904 l_request_id number;
3905 BEGIN
3906  x_status_code := FND_API.G_RET_STS_SUCCESS;
3907  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
3908 
3909  FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
3910  /*INSERT INTO QP_INT_LINE_ATTRS
3911                 ( LINE_INDEX,
3912                  LINE_DETAIL_INDEX,
3913                  ATTRIBUTE_LEVEL,
3914                  ATTRIBUTE_TYPE,
3915                  LIST_HEADER_ID,
3916                  LIST_LINE_ID,
3917                  CONTEXT,
3918                  ATTRIBUTE,
3919                  VALUE_FROM,
3920                  SETUP_VALUE_FROM,
3921                  VALUE_TO,
3922                  SETUP_VALUE_TO,
3923                  GROUPING_NUMBER,
3924                  COMPARISON_OPERATOR_TYPE_CODE,
3925                  VALIDATED_FLAG,
3926                  APPLIED_FLAG,
3927                  PRICING_STATUS_CODE,
3928                  PRICING_STATUS_TEXT,
3929                  QUALIFIER_PRECEDENCE,
3930                  DATATYPE,
3931                  PRICING_ATTR_FLAG,
3932                  QUALIFIER_TYPE,
3933                  PRODUCT_UOM_CODE,
3934                  EXCLUDER_FLAG,
3935                  PRICING_PHASE_ID,
3936                  INCOMPATABILITY_GRP_CODE,
3937                  LINE_DETAIL_TYPE_CODE,
3938                  MODIFIER_LEVEL_CODE,
3939                  PRIMARY_UOM_FLAG
3940                 )
3941 VALUES          ( p_LINE_INDEX_tbl(i),
3942                  p_LINE_DETAIL_INDEX_tbl(i),
3943                  p_ATTRIBUTE_LEVEL_tbl(i),
3944                  p_ATTRIBUTE_TYPE_tbl(i),
3945                  --made changes to fix bug 2374591 ask for promotions not
3946                  --getting applied in performance code path
3947                  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)),
3948                  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)),
3949                  p_CONTEXT_tbl(i),
3950                  p_ATTRIBUTE_tbl(i),
3951                  p_VALUE_FROM_tbl(i),
3952                  p_SETUP_VALUE_FROM_tbl(i),
3953                  p_VALUE_TO_tbl(i),
3954                  p_SETUP_VALUE_TO_tbl(i),
3955                  p_GROUPING_NUMBER_tbl(i),
3956                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
3957                  p_VALIDATED_FLAG_tbl(i),
3958                  p_APPLIED_FLAG_tbl(i),
3959                  p_PRICING_STATUS_CODE_tbl(i),
3960                  p_PRICING_STATUS_TEXT_tbl(i),
3961                  p_QUALIFIER_PRECEDENCE_tbl(i),
3962                  p_DATATYPE_tbl(i),
3963                  p_PRICING_ATTR_FLAG_tbl(i),
3964                  p_QUALIFIER_TYPE_tbl(i),
3965                  p_PRODUCT_UOM_CODE_tbl(i),
3966                  p_EXCLUDER_FLAG_TBL(i),
3967                  p_PRICING_PHASE_ID_TBL(i),
3968                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
3969                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
3970                  p_MODIFIER_LEVEL_CODE_TBL(i),
3971                  p_PRIMARY_UOM_FLAG_TBL(i)
3972                 );*/
3973  INSERT INTO QP_INT_LINE_ATTRS_T
3974                 ( LINE_INDEX,
3975                  LINE_DETAIL_INDEX,
3976                  ATTRIBUTE_LEVEL,
3977                  ATTRIBUTE_TYPE,
3978                  LIST_HEADER_ID,
3979                  LIST_LINE_ID,
3980                  CONTEXT,
3981                  ATTRIBUTE,
3982                  VALUE_FROM,
3983                  SETUP_VALUE_FROM,
3984                  VALUE_TO,
3985                  SETUP_VALUE_TO,
3986                  GROUPING_NUMBER,
3987                  COMPARISON_OPERATOR_TYPE_CODE,
3988                  VALIDATED_FLAG,
3989                  APPLIED_FLAG,
3990                  PRICING_STATUS_CODE,
3991                  PRICING_STATUS_TEXT,
3992                  QUALIFIER_PRECEDENCE,
3993                  DATATYPE,
3994                  PRICING_ATTR_FLAG,
3995                  QUALIFIER_TYPE,
3996                  PRODUCT_UOM_CODE,
3997                  EXCLUDER_FLAG,
3998                  PRICING_PHASE_ID,
3999                  INCOMPATABILITY_GRP_CODE,
4000                  LINE_DETAIL_TYPE_CODE,
4001                  MODIFIER_LEVEL_CODE,
4002                  PRIMARY_UOM_FLAG,
4003                  request_id
4004                 )
4005 VALUES          ( p_LINE_INDEX_tbl(i),
4006                  p_LINE_DETAIL_INDEX_tbl(i),
4007                  p_ATTRIBUTE_LEVEL_tbl(i),
4008                  p_ATTRIBUTE_TYPE_tbl(i),
4009                  --made changes to fix bug 2374591 ask for promotions not
4010                  --getting applied in performance code path
4011                  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)),
4012                  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)),
4013                  p_CONTEXT_tbl(i),
4014                  p_ATTRIBUTE_tbl(i),
4015                  p_VALUE_FROM_tbl(i),
4016                  p_SETUP_VALUE_FROM_tbl(i),
4017                  p_VALUE_TO_tbl(i),
4018                  p_SETUP_VALUE_TO_tbl(i),
4019                  p_GROUPING_NUMBER_tbl(i),
4020                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
4021                  p_VALIDATED_FLAG_tbl(i),
4022                  p_APPLIED_FLAG_tbl(i),
4023                  p_PRICING_STATUS_CODE_tbl(i),
4024                  p_PRICING_STATUS_TEXT_tbl(i),
4025                  p_QUALIFIER_PRECEDENCE_tbl(i),
4026                  p_DATATYPE_tbl(i),
4027                  p_PRICING_ATTR_FLAG_tbl(i),
4028                  p_QUALIFIER_TYPE_tbl(i),
4029                  p_PRODUCT_UOM_CODE_tbl(i),
4030                  p_EXCLUDER_FLAG_TBL(i),
4031                  p_PRICING_PHASE_ID_TBL(i),
4032                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
4033                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
4034                  p_MODIFIER_LEVEL_CODE_TBL(i),
4035                  p_PRIMARY_UOM_FLAG_TBL(i),
4036                  l_request_id
4037                 );
4038  QP_PREQ_GRP.G_INT_ATTRS_NO := QP_PREQ_GRP.G_INT_ATTRS_NO + p_LINE_INDEX_tbl.count;
4039   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4040     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_ATTRS_NO='||QP_PREQ_GRP.G_INT_ATTRS_NO);
4041   END IF;
4042 
4043  COMMIT;
4044 EXCEPTION
4045   WHEN OTHERS THEN
4046   x_status_code := FND_API.G_RET_STS_ERROR;
4047   x_status_text :=l_routine||' '||SQLERRM;
4048   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4049     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
4050   END IF;
4051 END;
4052 
4053 /*+-----------------------------------------------------------------------
4054   | PROCEDURE INSERT_LINE_ATTRS2
4055   +-----------------------------------------------------------------------
4056 */
4057 PROCEDURE INSERT_LINE_ATTRS2
4058    (    p_LINE_INDEX_tbl         pls_integer_type,
4059         p_LINE_DETAIL_INDEX_tbl  pls_integer_type ,
4060         p_ATTRIBUTE_LEVEL_tbl    varchar_type,
4061         p_ATTRIBUTE_TYPE_tbl     varchar_type,
4062         p_LIST_HEADER_ID_tbl     number_type,
4063         p_LIST_LINE_ID_tbl       number_type,
4064         p_CONTEXT_tbl            varchar_type,
4065         p_ATTRIBUTE_tbl          varchar_type,
4066         p_VALUE_FROM_tbl         varchar_type,
4067         p_SETUP_VALUE_FROM_tbl   varchar_type,
4068         p_VALUE_TO_tbl           varchar_type,
4069         p_SETUP_VALUE_TO_tbl     varchar_type,
4070         p_GROUPING_NUMBER_tbl    pls_integer_type,
4071         p_NO_QUALIFIERS_IN_GRP_tbl      pls_integer_type,
4072         p_COMPARISON_OPERATOR_TYPE_tbl  varchar_type,
4073         p_VALIDATED_FLAG_tbl            varchar_type,
4074         p_APPLIED_FLAG_tbl              varchar_type,
4075         p_PRICING_STATUS_CODE_tbl       varchar_type,
4076         p_PRICING_STATUS_TEXT_tbl       varchar_type,
4077         p_QUALIFIER_PRECEDENCE_tbl      pls_integer_type,
4078         p_DATATYPE_tbl                  varchar_type,
4079         p_PRICING_ATTR_FLAG_tbl         varchar_type,
4080         p_QUALIFIER_TYPE_tbl            varchar_type,
4081         p_PRODUCT_UOM_CODE_TBL          varchar_type,
4082         p_EXCLUDER_FLAG_TBL             varchar_type ,
4083         p_PRICING_PHASE_ID_TBL          pls_integer_type ,
4084         p_INCOMPATABILITY_GRP_CODE_TBL  varchar_type ,
4085         p_LINE_DETAIL_TYPE_CODE_TBL     varchar_type ,
4086         p_MODIFIER_LEVEL_CODE_TBL       varchar_type ,
4087         p_PRIMARY_UOM_FLAG_TBL          varchar_type ,
4088         x_status_code                   OUT NOCOPY VARCHAR2,
4089         x_status_text                   OUT NOCOPY VARCHAR2)
4090 AS
4091 
4092 
4093 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LINE_ATTRS2';
4094 --added by yangli for Java Engine 3086881
4095 l_debug varchar2(3);
4096 BEGIN
4097 --added by yangli for Java Engine 3086881
4098 -- Set the global variable G_DEBUG_ENGINE
4099   QP_PREQ_GRP.Set_QP_Debug;
4100 
4101   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
4102 
4103 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
4104  IF l_debug = FND_API.G_TRUE THEN
4105         ENGINE_DEBUG('Java Engine not Installed ----------');
4106  END IF;
4107 --added by yangli for Java Engine 3086881
4108 
4109  x_status_code := FND_API.G_RET_STS_SUCCESS;
4110 
4111 FORALL i in p_line_index_tbl.FIRST..p_line_index_tbl.LAST
4112  INSERT INTO qp_npreq_line_attrs_tmp
4113                 (LINE_INDEX,
4114                  LINE_DETAIL_INDEX,
4115                  ATTRIBUTE_LEVEL,
4116                  ATTRIBUTE_TYPE,
4117                  LIST_HEADER_ID,
4118                  LIST_LINE_ID,
4119                  CONTEXT,
4120                  ATTRIBUTE,
4121                  VALUE_FROM,
4122                  SETUP_VALUE_FROM,
4123                  VALUE_TO,
4124                  SETUP_VALUE_TO,
4125                  GROUPING_NUMBER,
4126                  COMPARISON_OPERATOR_TYPE_CODE,
4127                  VALIDATED_FLAG,
4128                  APPLIED_FLAG,
4129                  PRICING_STATUS_CODE,
4130                  PRICING_STATUS_TEXT,
4131                  QUALIFIER_PRECEDENCE,
4132                  DATATYPE,
4133                  PRICING_ATTR_FLAG,
4134                  QUALIFIER_TYPE,
4135                  PRODUCT_UOM_CODE,
4136                  EXCLUDER_FLAG,
4137                  PRICING_PHASE_ID,
4138                  INCOMPATABILITY_GRP_CODE,
4139                  LINE_DETAIL_TYPE_CODE,
4140                  MODIFIER_LEVEL_CODE,
4141                  PRIMARY_UOM_FLAG
4142                 )
4143 VALUES          (p_LINE_INDEX_tbl(i),
4144                  p_LINE_DETAIL_INDEX_tbl(i),
4145                  p_ATTRIBUTE_LEVEL_tbl(i),
4146                  p_ATTRIBUTE_TYPE_tbl(i),
4147 		 --made changes to fix bug 2374591 ask for promotions not
4148 		 --getting applied in performance code path
4149                  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)),
4150                  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)),
4151                  p_CONTEXT_tbl(i),
4152                  p_ATTRIBUTE_tbl(i),
4153                  p_VALUE_FROM_tbl(i),
4154                  p_SETUP_VALUE_FROM_tbl(i),
4155                  p_VALUE_TO_tbl(i),
4156                  p_SETUP_VALUE_TO_tbl(i),
4157                  p_GROUPING_NUMBER_tbl(i),
4158                  p_COMPARISON_OPERATOR_TYPE_tbl(i),
4159                  p_VALIDATED_FLAG_tbl(i),
4160                  p_APPLIED_FLAG_tbl(i),
4161                  p_PRICING_STATUS_CODE_tbl(i),
4162                  p_PRICING_STATUS_TEXT_tbl(i),
4163                  p_QUALIFIER_PRECEDENCE_tbl(i),
4164                  p_DATATYPE_tbl(i),
4165                  p_PRICING_ATTR_FLAG_tbl(i),
4166                  p_QUALIFIER_TYPE_tbl(i),
4167                  p_PRODUCT_UOM_CODE_tbl(i),
4168                  p_EXCLUDER_FLAG_TBL(i),
4169                  p_PRICING_PHASE_ID_TBL(i),
4170                  p_INCOMPATABILITY_GRP_CODE_TBL(i),
4171                  p_LINE_DETAIL_TYPE_CODE_TBL(i),
4172                  p_MODIFIER_LEVEL_CODE_TBL(i),
4173                  p_PRIMARY_UOM_FLAG_TBL(i)
4174                 );
4175 --added by yangli for Java Engine 3086881
4176 ELSE
4177  IF l_debug = FND_API.G_TRUE THEN
4178         ENGINE_DEBUG('Java Engine Installed ----------');
4179  END IF;
4180 QP_PREQ_GRP.INSERT_LINE_ATTRS2_AT
4181 (   p_LINE_INDEX_tbl         ,
4182         p_LINE_DETAIL_INDEX_tbl  ,
4183         p_ATTRIBUTE_LEVEL_tbl    ,
4184         p_ATTRIBUTE_TYPE_tbl     ,
4185         p_LIST_HEADER_ID_tbl     ,
4186         p_LIST_LINE_ID_tbl       ,
4187         p_CONTEXT_tbl            ,
4188         p_ATTRIBUTE_tbl          ,
4189         p_VALUE_FROM_tbl         ,
4190         p_SETUP_VALUE_FROM_tbl   ,
4191         p_VALUE_TO_tbl           ,
4192         p_SETUP_VALUE_TO_tbl     ,
4193         p_GROUPING_NUMBER_tbl    ,
4194         p_NO_QUALIFIERS_IN_GRP_tbl      ,
4195         p_COMPARISON_OPERATOR_TYPE_tbl  ,
4196         p_VALIDATED_FLAG_tbl            ,
4197         p_APPLIED_FLAG_tbl              ,
4198         p_PRICING_STATUS_CODE_tbl       ,
4199         p_PRICING_STATUS_TEXT_tbl       ,
4200         p_QUALIFIER_PRECEDENCE_tbl      ,
4201         p_DATATYPE_tbl                  ,
4202         p_PRICING_ATTR_FLAG_tbl         ,
4203         p_QUALIFIER_TYPE_tbl            ,
4204         p_PRODUCT_UOM_CODE_TBL          ,
4205         p_EXCLUDER_FLAG_TBL             ,
4206         p_PRICING_PHASE_ID_TBL          ,
4207         p_INCOMPATABILITY_GRP_CODE_TBL  ,
4208         p_LINE_DETAIL_TYPE_CODE_TBL     ,
4209         p_MODIFIER_LEVEL_CODE_TBL       ,
4210         p_PRIMARY_UOM_FLAG_TBL          ,
4211         x_status_code                   ,
4212         x_status_text                   );
4213 
4214 END IF;
4215 --added by yangli for Java Engine 3086881
4216 
4217 EXCEPTION
4218   WHEN OTHERS THEN
4219   x_status_code := FND_API.G_RET_STS_ERROR;
4220   x_status_text :=l_routine||' '||SQLERRM;
4221   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4222   engine_debug(l_routine||' '||SQLERRM);
4223   END IF;
4224 END;
4225 
4226 /*+-----------------------------------------------------------------------
4227   |PROCEDURE INSERT_LINES
4228   +-----------------------------------------------------------------------
4229 */
4230 PROCEDURE INSERT_LINES
4231                 (p_LINE_INDEX              IN PLS_INTEGER,
4232                  p_LINE_TYPE_CODE          IN VARCHAR2,
4233                  p_PRICING_EFFECTIVE_DATE  IN DATE   :=NULL,
4234                  p_ACTIVE_DATE_FIRST       IN DATE   :=NULL,
4235                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR2 :=NULL,
4236                  p_ACTIVE_DATE_SECOND      IN DATE   :=NULL,
4237                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR2 :=NULL,
4238                  p_LINE_QUANTITY           IN NUMBER :=NULL,
4239                  p_LINE_UOM_CODE          IN VARCHAR2:=NULL,
4240                  p_REQUEST_TYPE_CODE      IN VARCHAR2:=NULL,
4241                  p_PRICED_QUANTITY        IN NUMBER :=NULL,
4242                  p_PRICED_UOM_CODE        IN VARCHAR2:=NULL,
4243                  p_CURRENCY_CODE          IN VARCHAR2:=NULL,
4244                  p_UNIT_PRICE             IN NUMBER:=NULL,
4245                  p_PERCENT_PRICE          IN NUMBER:=NULL,
4246                  p_UOM_QUANTITY           IN NUMBER :=NULL,
4247                  p_ADJUSTED_UNIT_PRICE    IN NUMBER:=NULL,
4248                  p_PROCESSED_FLAG         IN VARCHAR2:=NULL,
4249                  p_PRICE_FLAG             IN VARCHAR2,
4250                  p_LINE_ID                IN NUMBER:=NULL,
4251                  p_PROCESSING_ORDER       IN PLS_INTEGER:=NULL,
4252                  p_PRICING_STATUS_CODE    IN VARCHAR2,
4253                  p_PRICING_STATUS_TEXT    IN VARCHAR2:=NULL,
4254                  p_ROUNDING_FLAG          IN VARCHAR2:=NULL,
4255                  p_LINE_CATEGORY          IN VARCHAR2:=NULL,
4256                  p_charge_periodicity_code IN VARCHAR2:=NULL,
4257                  x_status_code            OUT NOCOPY VARCHAR2,
4258                  x_status_text            OUT NOCOPY VARCHAR2 )
4259 AS
4260 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES';
4261 BEGIN
4262 x_status_code := FND_API.G_RET_STS_SUCCESS;
4263 INSERT INTO qp_npreq_lines_tmp
4264                 (LINE_INDEX,
4265                  LINE_TYPE_CODE,
4266                  PRICING_EFFECTIVE_DATE,
4267                  START_DATE_ACTIVE_FIRST,
4268                  ACTIVE_DATE_FIRST_TYPE,
4269                  START_DATE_ACTIVE_SECOND,
4270                  ACTIVE_DATE_SECOND_TYPE,
4271                  LINE_QUANTITY,
4272                  LINE_UOM_CODE,
4273                  REQUEST_TYPE_CODE,
4274                  PRICED_QUANTITY,
4275                  PRICED_UOM_CODE,
4276                  CURRENCY_CODE,
4277                  UNIT_PRICE,
4278                  PERCENT_PRICE,
4279                  UOM_QUANTITY,
4280                  ADJUSTED_UNIT_PRICE,
4281                  PROCESSED_FLAG,
4282                  PRICE_FLAG,
4283                  LINE_ID,
4284                  PROCESSING_ORDER,
4285                  ROUNDING_FLAG,
4286                  PRICING_STATUS_CODE,
4287                  PRICING_STATUS_TEXT,
4288                  LINE_CATEGORY,
4289                  CHARGE_PERIODICITY_CODE)
4290 VALUES (         p_LINE_INDEX,
4291                  p_LINE_TYPE_CODE,
4292                  p_PRICING_EFFECTIVE_DATE,
4293                  p_ACTIVE_DATE_FIRST,
4294                  p_ACTIVE_DATE_FIRST_TYPE,
4295                  p_ACTIVE_DATE_SECOND,
4296                  p_ACTIVE_DATE_SECOND_TYPE,
4297                  p_LINE_QUANTITY,
4298                  p_LINE_UOM_CODE,
4299                  p_REQUEST_TYPE_CODE,
4300                  p_PRICED_QUANTITY,
4301                  p_PRICED_UOM_CODE ,
4302                  p_CURRENCY_CODE,
4303                  p_UNIT_PRICE ,
4304                  p_PERCENT_PRICE,
4305                  p_UOM_QUANTITY,
4306                  p_ADJUSTED_UNIT_PRICE,
4307                  p_PROCESSED_FLAG,
4308                  p_PRICE_FLAG,
4309                  p_LINE_ID,
4310                  P_PROCESSING_ORDER,
4311                  P_ROUNDING_FLAG,
4312                  p_PRICING_STATUS_CODE,
4313                  p_PRICING_STATUS_TEXT,
4314                  p_LINE_CATEGORY,
4315                  p_CHARGE_PERIODICITY_CODE
4316                  );
4317 EXCEPTION
4318   WHEN OTHERS THEN
4319   x_status_code := FND_API.G_RET_STS_ERROR;
4320   x_status_text :=l_routine||' '||SQLERRM;
4321   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4322   engine_debug(l_routine||' '||SQLERRM);
4323   engine_debug(SQLERRM);
4324   END IF;
4325 END;
4326 
4327 /*+----------------------------------------------------------------------
4328   |Procedure Group INSERT_LINES2_AT
4329   +----------------------------------------------------------------------
4330 */
4331 
4332 PROCEDURE INSERT_LINES2_AT
4333                 (p_LINE_INDEX              IN NUMBER_TYPE,
4334                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4335                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4336                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4337                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4338                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4339                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4340                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4341                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4342                  p_REQUEST_TYPE_CODE       IN VARCHAR_TYPE,
4343                  p_PRICED_QUANTITY         IN NUMBER_TYPE,
4344                  p_PRICED_UOM_CODE         IN VARCHAR_TYPE,
4345                  p_CURRENCY_CODE           IN VARCHAR_TYPE,
4346                  p_UNIT_PRICE              IN NUMBER_TYPE,
4347                  p_ADJUSTED_UNIT_PRICE     IN NUMBER_TYPE,
4348                  p_UPD_ADJUSTED_UNIT_PRICE IN NUMBER_TYPE,
4349                  p_UOM_QUANTITY            IN NUMBER_TYPE,
4350                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4351                  p_LINE_ID                IN NUMBER_TYPE,
4352                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4353                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4354                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4355 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4356                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4357                  p_CONTRACT_START_DATE	  IN DATE_TYPE,
4358                  p_CONTRACT_END_DATE	  IN DATE_TYPE,
4359 		 p_CATCHWEIGHT_QTY	  IN NUMBER_TYPE,
4360 		 p_ACTUAL_ORDER_QTY	  IN NUMBER_TYPE,
4361 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE,
4362                  p_charge_periodicity_code IN  VARCHAR_3_TYPE,
4363                  x_status_code            OUT NOCOPY VARCHAR2,
4364                  x_status_text            OUT NOCOPY VARCHAR2 )
4365 AS
4366 PRAGMA AUTONOMOUS_TRANSACTION;
4367  l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2_AT';
4368  l_request_id number;
4369 BEGIN
4370  x_status_code := FND_API.G_RET_STS_SUCCESS;
4371  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
4372 
4373 FORALL i in p_line_index.FIRST..p_line_index.LAST
4374 /*INSERT INTO QP_INT_LINES
4375                 (LINE_INDEX,
4376                  LINE_TYPE_CODE,
4377                  PRICING_EFFECTIVE_DATE,
4378                  START_DATE_ACTIVE_FIRST,
4379                  ACTIVE_DATE_FIRST_TYPE,
4380                  START_DATE_ACTIVE_SECOND,
4381                  ACTIVE_DATE_SECOND_TYPE,
4382                  LINE_QUANTITY,
4383                  LINE_UOM_CODE,
4384                  REQUEST_TYPE_CODE,
4385                  PRICED_QUANTITY,
4386                  PRICED_UOM_CODE,
4387                  CURRENCY_CODE,
4388                  UNIT_PRICE,
4389                  ADJUSTED_UNIT_PRICE,
4390                  PRICE_FLAG,
4391                  UOM_QUANTITY,
4392                  LINE_ID,
4393                  ROUNDING_FACTOR,
4394                  UPDATED_ADJUSTED_UNIT_PRICE,
4395                  PRICE_LIST_HEADER_ID,
4396                  PRICE_REQUEST_CODE,
4397                  USAGE_PRICING_TYPE,
4398                  LINE_CATEGORY,
4399                  CONTRACT_START_DATE,
4400                  CONTRACT_END_DATE,
4401                  CATCHWEIGHT_QTY,
4402                  ACTUAL_ORDER_QUANTITY,
4403 		 LIST_PRICE_OVERRIDE_FLAG, --po integration
4404                  CHARGE_PERIODICITY_CODE,
4405 		 ORDER_UOM_SELLING_PRICE
4406 	        )
4407 VALUES (         p_LINE_INDEX(i),
4408                  p_LINE_TYPE_CODE(i),
4409                  p_PRICING_EFFECTIVE_DATE(i),
4410                  p_ACTIVE_DATE_FIRST(i),
4411                  p_ACTIVE_DATE_FIRST_TYPE(i),
4412                  p_ACTIVE_DATE_SECOND(i),
4413                  p_ACTIVE_DATE_SECOND_TYPE(i),
4414                  p_LINE_QUANTITY(i),
4415                  p_LINE_UOM_CODE(i),
4416                  p_REQUEST_TYPE_CODE(i),
4417                  p_PRICED_QUANTITY(i),
4418                  p_PRICED_UOM_CODE (i),
4419                  p_CURRENCY_CODE(i),
4420                  p_UNIT_PRICE (i),
4421                  p_ADJUSTED_UNIT_PRICE(i),
4422                  p_PRICE_FLAG(i),
4423                  p_UOM_QUANTITY(i),
4424                  p_LINE_ID(i),
4425                  P_ROUNDING_FACTOR(i),
4426                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4427                  nvl(p_PRICE_LIST_ID(i),-9999),
4428                  p_PRICE_REQUEST_CODE(i),
4429                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4430                  p_LINE_CATEGORY(i),
4431                  p_CONTRACT_START_DATE(i),
4432                  p_CONTRACT_END_DATE(i),
4433                  p_CATCHWEIGHT_QTY(i),
4434                  p_ACTUAL_ORDER_QTY(i),
4435 		 nvl (p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'),
4436                  p_CHARGE_PERIODICITY_CODE,
4437 		 p_UNIT_PRICE(i)-- po integration
4438      );*/
4439 INSERT INTO QP_INT_LINES_t
4440                 (LINE_INDEX,
4441                  LINE_TYPE_CODE,
4442                  PRICING_EFFECTIVE_DATE,
4443                  START_DATE_ACTIVE_FIRST,
4444                  ACTIVE_DATE_FIRST_TYPE,
4445                  START_DATE_ACTIVE_SECOND,
4446                  ACTIVE_DATE_SECOND_TYPE,
4447                  LINE_QUANTITY,
4448                  LINE_UOM_CODE,
4449                  REQUEST_TYPE_CODE,
4450                  PRICED_QUANTITY,
4451                  PRICED_UOM_CODE,
4452                  CURRENCY_CODE,
4453                  UNIT_PRICE,
4454                  ADJUSTED_UNIT_PRICE,
4455                  PRICE_FLAG,
4456                  UOM_QUANTITY,
4457                  LINE_ID,
4458                  ROUNDING_FACTOR,
4459                  UPDATED_ADJUSTED_UNIT_PRICE,
4460                  PRICE_LIST_HEADER_ID,
4461                  PRICE_REQUEST_CODE,
4462                  USAGE_PRICING_TYPE,
4463                  LINE_CATEGORY,
4464                  CONTRACT_START_DATE,
4465                  CONTRACT_END_DATE,
4466                  CATCHWEIGHT_QTY,
4467                  ACTUAL_ORDER_QUANTITY,
4468 		 LIST_PRICE_OVERRIDE_FLAG, --po integration
4469 		 ORDER_UOM_SELLING_PRICE ,
4470                  CHARGE_PERIODICITY_CODE,
4471                  request_id
4472 	        )
4473 VALUES (         p_LINE_INDEX(i),
4474                  p_LINE_TYPE_CODE(i),
4475                  p_PRICING_EFFECTIVE_DATE(i),
4476                  p_ACTIVE_DATE_FIRST(i),
4477                  p_ACTIVE_DATE_FIRST_TYPE(i),
4478                  p_ACTIVE_DATE_SECOND(i),
4479                  p_ACTIVE_DATE_SECOND_TYPE(i),
4480                  p_LINE_QUANTITY(i),
4481                  p_LINE_UOM_CODE(i),
4482                  p_REQUEST_TYPE_CODE(i),
4483                  p_PRICED_QUANTITY(i),
4484                  p_PRICED_UOM_CODE (i),
4485                  p_CURRENCY_CODE(i),
4486                  p_UNIT_PRICE (i),
4487                  p_ADJUSTED_UNIT_PRICE(i),
4488                  p_PRICE_FLAG(i),
4489                  p_UOM_QUANTITY(i),
4490                  p_LINE_ID(i),
4491                  P_ROUNDING_FACTOR(i),
4492                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4493                  nvl(p_PRICE_LIST_ID(i),-9999),
4494                  p_PRICE_REQUEST_CODE(i),
4495                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4496                  p_LINE_CATEGORY(i),
4497                  p_CONTRACT_START_DATE(i),
4498                  p_CONTRACT_END_DATE(i),
4499                  p_CATCHWEIGHT_QTY(i),
4500                  p_ACTUAL_ORDER_QTY(i),
4501 		 nvl (p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'),
4502 		 p_UNIT_PRICE(i), -- po integration
4503                  p_CHARGE_PERIODICITY_CODE(i),
4504                  l_request_id
4505      );
4506 QP_PREQ_GRP.G_INT_LINES_NO := QP_PREQ_GRP.G_INT_LINES_NO + p_LINE_INDEX.count;
4507   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4508   QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LINES_NO='||QP_PREQ_GRP.G_INT_LINES_NO);
4509   END IF;
4510 COMMIT;
4511 EXCEPTION
4512   WHEN OTHERS THEN
4513   x_status_code := FND_API.G_RET_STS_ERROR;
4514   x_status_text :=l_routine||' '||SQLERRM;
4515   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4516   QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
4517   END IF;
4518 END ;
4519 
4520 /*+----------------------------------------------------------------------
4521   |Procedure Group INSERT_LINES2
4522   +----------------------------------------------------------------------
4523 */
4524 
4525 PROCEDURE INSERT_LINES2
4526                 (p_LINE_INDEX              IN NUMBER_TYPE,
4527                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4528                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4529                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4530                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4531                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4532                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4533                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4534                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4535                  p_REQUEST_TYPE_CODE       IN VARCHAR_TYPE,
4536                  p_PRICED_QUANTITY         IN NUMBER_TYPE,
4537                  p_PRICED_UOM_CODE         IN VARCHAR_TYPE,
4538                  p_CURRENCY_CODE           IN VARCHAR_TYPE,
4539                  p_UNIT_PRICE              IN NUMBER_TYPE,
4540                  p_ADJUSTED_UNIT_PRICE     IN NUMBER_TYPE,
4541                  p_UPD_ADJUSTED_UNIT_PRICE IN NUMBER_TYPE,
4542                  p_UOM_QUANTITY            IN NUMBER_TYPE,
4543                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4544                  p_LINE_ID                IN NUMBER_TYPE,
4545                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4546                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4547                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4548 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4549                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4550                  p_CONTRACT_START_DATE	  IN DATE_TYPE,
4551                  p_CONTRACT_END_DATE	  IN DATE_TYPE,
4552 		 p_CATCHWEIGHT_QTY	  IN NUMBER_TYPE,
4553 		 p_ACTUAL_ORDER_QTY	  IN NUMBER_TYPE,
4554 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE,
4555                  p_charge_periodicity_code  IN VARCHAR_3_TYPE,
4556                  x_status_code            OUT NOCOPY VARCHAR2,
4557                  x_status_text            OUT NOCOPY VARCHAR2 )
4558 AS
4559  l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2';
4560  --added by yangli for Java Engine project 3086881
4561  l_debug varchar2(3);
4562 BEGIN
4563   --added by yangli for Java Engine project 3086881
4564   -- Set the global variable G_DEBUG_ENGINE
4565   QP_PREQ_GRP.Set_QP_Debug;
4566 
4567   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
4568 
4569 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
4570  IF l_debug = FND_API.G_TRUE THEN
4571         ENGINE_DEBUG('Java Engine not Installed ----------');
4572  END IF;
4573  --added by yangli for Java Engine project 3086881
4574 
4575  x_status_code := FND_API.G_RET_STS_SUCCESS;
4576 
4577 FORALL i in p_line_index.FIRST..p_line_index.LAST
4578 INSERT INTO qp_npreq_lines_tmp
4579                 (LINE_INDEX,
4580                  LINE_TYPE_CODE,
4581                  PRICING_EFFECTIVE_DATE,
4582                  START_DATE_ACTIVE_FIRST,
4583                  ACTIVE_DATE_FIRST_TYPE,
4584                  START_DATE_ACTIVE_SECOND,
4585                  ACTIVE_DATE_SECOND_TYPE,
4586                  LINE_QUANTITY,
4587                  LINE_UOM_CODE,
4588                  REQUEST_TYPE_CODE,
4589                  PRICED_QUANTITY,
4590                  PRICED_UOM_CODE,
4591                  CURRENCY_CODE,
4592                  UNIT_PRICE,
4593                  ADJUSTED_UNIT_PRICE,
4594                  PRICE_FLAG,
4595                  UOM_QUANTITY,
4596                  LINE_ID,
4597                  ROUNDING_FACTOR,
4598                  UPDATED_ADJUSTED_UNIT_PRICE,
4599                  PRICE_LIST_HEADER_ID,
4600                  PRICE_REQUEST_CODE,
4601                  USAGE_PRICING_TYPE,
4602                  LINE_CATEGORY,
4603                  CONTRACT_START_DATE,
4604                  CONTRACT_END_DATE,
4605 		 CATCHWEIGHT_QTY,
4606                  ACTUAL_ORDER_QUANTITY,
4607 		 LIST_PRICE_OVERRIDE_FLAG, --po integration
4608                  CHARGE_PERIODICITY_CODE,
4609 		 ORDER_UOM_SELLING_PRICE
4610 		 )
4611 VALUES (         p_LINE_INDEX(i),
4612                  p_LINE_TYPE_CODE(i),
4613                  p_PRICING_EFFECTIVE_DATE(i),
4614                  p_ACTIVE_DATE_FIRST(i),
4615                  p_ACTIVE_DATE_FIRST_TYPE(i),
4616                  p_ACTIVE_DATE_SECOND(i),
4617                  p_ACTIVE_DATE_SECOND_TYPE(i),
4618                  p_LINE_QUANTITY(i),
4619                  p_LINE_UOM_CODE(i),
4620                  p_REQUEST_TYPE_CODE(i),
4621                  p_PRICED_QUANTITY(i),
4622                  p_PRICED_UOM_CODE (i),
4623                  p_CURRENCY_CODE(i),
4624                  p_UNIT_PRICE (i),
4625                  p_ADJUSTED_UNIT_PRICE(i),
4626                  p_PRICE_FLAG(i),
4627                  p_UOM_QUANTITY(i),
4628                  p_LINE_ID(i),
4629                  P_ROUNDING_FACTOR(i),
4630                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4631                  nvl(p_PRICE_LIST_ID(i),-9999),
4632                  p_PRICE_REQUEST_CODE(i),
4633                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4634                  p_LINE_CATEGORY(i),
4635                  p_CONTRACT_START_DATE(i),
4636                  p_CONTRACT_END_DATE(i),
4637 		 p_CATCHWEIGHT_QTY(i),
4638 		 p_ACTUAL_ORDER_QTY(i),
4639 		 nvl (p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'),
4640                  p_CHARGE_PERIODICITY_CODE(i),
4641 		 p_UNIT_PRICE(i)
4642 		 ); --po integration
4643  --added by yangli for Java Engine project 3086881
4644 ELSE
4645  IF l_debug = FND_API.G_TRUE THEN
4646         ENGINE_DEBUG('Java Engine Installed ----------');
4647  END IF;
4648 QP_PREQ_GRP.INSERT_LINES2_AT
4649                 (p_LINE_INDEX             ,
4650                  p_LINE_TYPE_CODE         ,
4651                  p_PRICING_EFFECTIVE_DATE ,
4652                  p_ACTIVE_DATE_FIRST      ,
4653                  p_ACTIVE_DATE_FIRST_TYPE ,
4654                  p_ACTIVE_DATE_SECOND     ,
4655                  p_ACTIVE_DATE_SECOND_TYPE,
4656                  p_LINE_QUANTITY          ,
4657                  p_LINE_UOM_CODE          ,
4658                  p_REQUEST_TYPE_CODE      ,
4659                  p_PRICED_QUANTITY        ,
4660                  p_PRICED_UOM_CODE        ,
4661                  p_CURRENCY_CODE          ,
4662                  p_UNIT_PRICE             ,
4663                  p_ADJUSTED_UNIT_PRICE    ,
4664                  p_UPD_ADJUSTED_UNIT_PRICE,
4665                  p_UOM_QUANTITY           ,
4666                  p_PRICE_FLAG             ,
4667                  p_LINE_ID                ,
4668                  p_ROUNDING_FACTOR        ,
4669                  p_PRICE_LIST_ID          ,
4670                  p_PRICE_REQUEST_CODE     ,
4671                  p_USAGE_PRICING_TYPE     ,
4672                  p_LINE_CATEGORY          ,
4673                  p_CONTRACT_START_DATE    ,
4674                  p_CONTRACT_END_DATE      ,
4675                  p_CATCHWEIGHT_QTY        ,
4676                  p_ACTUAL_ORDER_QTY       ,
4677 		 p_LIST_PRICE_OVERRIDE_FLAG, --po integration
4678                  p_charge_periodicity_code,
4679                  x_status_code            ,
4680                  x_status_text            );
4681 
4682 END IF;
4683  --added by yangli for Java Engine project 3086881
4684 
4685 EXCEPTION
4686   WHEN OTHERS THEN
4687   x_status_code := FND_API.G_RET_STS_ERROR;
4688   x_status_text :=l_routine||' '||SQLERRM;
4689   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4690   engine_debug(l_routine||' '||SQLERRM);
4691   END IF;
4692 END ;
4693 
4694 /*+-----------------------------------------------------------------------
4695   |PROCEDURE INSERT_LINES2_AT for bulk binding
4696   +-----------------------------------------------------------------------
4697 */
4698 PROCEDURE INSERT_LINES2_AT
4699                 (p_LINE_INDEX              IN PLS_INTEGER_TYPE,
4700                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4701                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4702                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4703                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4704                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4705                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4706                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4707                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4708                  p_REQUEST_TYPE_CODE      IN VARCHAR_TYPE,
4709                  p_PRICED_QUANTITY        IN NUMBER_TYPE,
4710                  p_PRICED_UOM_CODE        IN VARCHAR_TYPE,
4711                  p_CURRENCY_CODE          IN VARCHAR_TYPE,
4712                  p_UNIT_PRICE             IN NUMBER_TYPE,
4713                  p_PERCENT_PRICE          IN NUMBER_TYPE,
4714                  p_UOM_QUANTITY           IN NUMBER_TYPE,
4715                  p_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
4716                  p_UPD_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
4717                  p_PROCESSED_FLAG         IN VARCHAR_TYPE,
4718                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4719                  p_LINE_ID                IN NUMBER_TYPE,
4720                  p_PROCESSING_ORDER       IN PLS_INTEGER_TYPE,
4721                  p_PRICING_STATUS_CODE    IN VARCHAR_TYPE,
4722                  p_PRICING_STATUS_TEXT    IN VARCHAR_TYPE,
4723                  p_ROUNDING_FLAG          IN FLAG_TYPE,
4724                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4725                  p_QUALIFIERS_EXIST_FLAG  IN VARCHAR_TYPE,
4726                  p_PRICING_ATTRS_EXIST_FLAG IN VARCHAR_TYPE,
4727                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4728                  p_VALIDATED_FLAG         IN VARCHAR_TYPE,
4729                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4730 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4731                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4732                  p_CONTRACT_START_DATE    IN DATE_TYPE,
4733                  p_CONTRACT_END_DATE    IN DATE_TYPE,
4734                  p_LINE_UNIT_PRICE    IN NUMBER_TYPE,
4735                  p_CATCHWEIGHT_QTY    IN NUMBER_TYPE,
4736                  p_ACTUAL_ORDER_QTY    IN NUMBER_TYPE,
4737 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE,--po integration
4738                  p_charge_periodicity_code IN VARCHAR_3_TYPE,
4739                  x_status_code            OUT NOCOPY VARCHAR2,
4740                  x_status_text            OUT NOCOPY VARCHAR2 )
4741 AS
4742 PRAGMA AUTONOMOUS_TRANSACTION;
4743 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2_AT';
4744 l_request_id number;
4745 BEGIN
4746   x_status_code := FND_API.G_RET_STS_SUCCESS;
4747   l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
4748   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4749     QP_PREQ_GRP.engine_debug('Before bulk inserting lines...');
4750     QP_PREQ_GRP.engine_debug('line index size:'||p_line_index.count());
4751   END IF;
4752 
4753   FORALL i in p_line_index.FIRST..p_line_index.LAST
4754     /*INSERT INTO QP_INT_LINES
4755                 ( LINE_INDEX,
4756                  LINE_TYPE_CODE,
4757                  PRICING_EFFECTIVE_DATE,
4758                  START_DATE_ACTIVE_FIRST,
4759                  ACTIVE_DATE_FIRST_TYPE,
4760                  START_DATE_ACTIVE_SECOND,
4761                  ACTIVE_DATE_SECOND_TYPE,
4762                  LINE_QUANTITY,
4763                  LINE_UOM_CODE,
4764                  REQUEST_TYPE_CODE,
4765                  PRICED_QUANTITY,
4766                  PRICED_UOM_CODE,
4767                  CURRENCY_CODE,
4768                  UNIT_PRICE,
4769                  PERCENT_PRICE,
4770                  UOM_QUANTITY,
4771                  ADJUSTED_UNIT_PRICE,
4772                  PROCESSED_FLAG,
4773                  PRICE_FLAG,
4774                  LINE_ID,
4775                  PROCESSING_ORDER,
4776                  ROUNDING_FLAG,
4777                  ROUNDING_FACTOR,
4778                  PRICING_STATUS_CODE,
4779                  PRICING_STATUS_TEXT,
4780                  UPDATED_ADJUSTED_UNIT_PRICE,
4781                  QUALIFIERS_EXIST_FLAG,
4782                  PRICING_ATTRS_EXIST_FLAG,
4783                  PRICE_LIST_HEADER_ID,
4784                  VALIDATED_FLAG,
4785                  PRICE_REQUEST_CODE,
4786                  USAGE_PRICING_TYPE,
4787                  LINE_CATEGORY,
4788                  CONTRACT_START_DATE,  -- shulin
4789                  CONTRACT_END_DATE,    -- shulin
4790                  LINE_UNIT_PRICE,      -- shu_latest
4791                  CATCHWEIGHT_QTY,
4792                  ACTUAL_ORDER_QUANTITY,
4793 		 LIST_PRICE_OVERRIDE_FLAG, -- po integration
4794                  CHARGE_PERIODICITY_CODE,
4795 		 ORDER_UOM_SELLING_PRICE)
4796       VALUES (   p_LINE_INDEX(i),
4797                  p_LINE_TYPE_CODE(i),
4798                  p_PRICING_EFFECTIVE_DATE(i),
4799                  p_ACTIVE_DATE_FIRST(i),
4800                  p_ACTIVE_DATE_FIRST_TYPE(i),
4801                  p_ACTIVE_DATE_SECOND(i),
4802                  p_ACTIVE_DATE_SECOND_TYPE(i),
4803                  p_LINE_QUANTITY(i),
4804                  p_LINE_UOM_CODE(i),
4805                  p_REQUEST_TYPE_CODE(i),
4806                  p_PRICED_QUANTITY(i),
4807                  p_PRICED_UOM_CODE (i),
4808                  p_CURRENCY_CODE(i),
4809                  p_UNIT_PRICE (i),
4810                  p_PERCENT_PRICE(i),
4811                  p_UOM_QUANTITY(i),
4812                  p_ADJUSTED_UNIT_PRICE(i),
4813                  p_PROCESSED_FLAG(i),
4814                  p_PRICE_FLAG(i),
4815                  p_LINE_ID(i),
4816                  P_PROCESSING_ORDER(i),
4817                  P_ROUNDING_FLAG(i),
4818                  P_ROUNDING_FACTOR(i),
4819                  p_PRICING_STATUS_CODE(i),
4820                  p_PRICING_STATUS_TEXT(i),
4821                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4822                  nvl(p_QUALIFIERS_EXIST_FLAG(i),'N'),
4823                  nvl(p_PRICING_ATTRS_EXIST_FLAG(i),'N'),
4824                  nvl(p_PRICE_LIST_ID(i),-9999),
4825                  nvl(p_VALIDATED_FLAG(i),'N'),
4826                  p_PRICE_REQUEST_CODE(i),
4827                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4828                  G_LINE_CATEGORY_DEF_TBL(i),
4829                  G_CONTRACT_START_DATE_DEF_TBL(i),
4830                  G_CONTRACT_END_DATE_DEF_TBL(i),
4831                  G_LINE_UNIT_PRICE_DEF_TBL(i),
4832                  G_CATCHWEIGHT_QTY_DEF_TBL(i),
4833                  G_ACTUAL_ORDER_QTY_DEF_TBL(i),
4834 		 NVL(p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'), --po integration
4835                  p_CHARGE_PERIODICITY_CODE(i),
4836 		 p_UNIT_PRICE(i)
4837                  );*/
4838     INSERT INTO QP_INT_LINES_T
4839                 ( LINE_INDEX,
4840                  LINE_TYPE_CODE,
4841                  PRICING_EFFECTIVE_DATE,
4842                  START_DATE_ACTIVE_FIRST,
4843                  ACTIVE_DATE_FIRST_TYPE,
4844                  START_DATE_ACTIVE_SECOND,
4845                  ACTIVE_DATE_SECOND_TYPE,
4846                  LINE_QUANTITY,
4847                  LINE_UOM_CODE,
4848                  REQUEST_TYPE_CODE,
4849                  PRICED_QUANTITY,
4850                  PRICED_UOM_CODE,
4851                  CURRENCY_CODE,
4852                  UNIT_PRICE,
4853                  PERCENT_PRICE,
4854                  UOM_QUANTITY,
4855                  ADJUSTED_UNIT_PRICE,
4856                  PROCESSED_FLAG,
4857                  PRICE_FLAG,
4858                  LINE_ID,
4859                  PROCESSING_ORDER,
4860                  ROUNDING_FLAG,
4861                  ROUNDING_FACTOR,
4862                  PRICING_STATUS_CODE,
4863                  PRICING_STATUS_TEXT,
4864                  UPDATED_ADJUSTED_UNIT_PRICE,
4865                  QUALIFIERS_EXIST_FLAG,
4866                  PRICING_ATTRS_EXIST_FLAG,
4867                  PRICE_LIST_HEADER_ID,
4868                  VALIDATED_FLAG,
4869                  PRICE_REQUEST_CODE,
4870                  USAGE_PRICING_TYPE,
4871                  LINE_CATEGORY,
4872                  CONTRACT_START_DATE,  -- shulin
4873                  CONTRACT_END_DATE,    -- shulin
4874                  LINE_UNIT_PRICE,      -- shu_latest
4875                  CATCHWEIGHT_QTY,
4876                  ACTUAL_ORDER_QUANTITY,
4877 		 LIST_PRICE_OVERRIDE_FLAG, -- po integration
4878                  CHARGE_PERIODICITY_CODE,
4879 		 ORDER_UOM_SELLING_PRICE,
4880                  request_id)
4881       VALUES (   p_LINE_INDEX(i),
4882                  p_LINE_TYPE_CODE(i),
4883                  p_PRICING_EFFECTIVE_DATE(i),
4884                  p_ACTIVE_DATE_FIRST(i),
4885                  p_ACTIVE_DATE_FIRST_TYPE(i),
4886                  p_ACTIVE_DATE_SECOND(i),
4887                  p_ACTIVE_DATE_SECOND_TYPE(i),
4888                  p_LINE_QUANTITY(i),
4889                  p_LINE_UOM_CODE(i),
4890                  p_REQUEST_TYPE_CODE(i),
4891                  p_PRICED_QUANTITY(i),
4892                  p_PRICED_UOM_CODE (i),
4893                  p_CURRENCY_CODE(i),
4894                  p_UNIT_PRICE (i),
4895                  p_PERCENT_PRICE(i),
4896                  p_UOM_QUANTITY(i),
4897                  p_ADJUSTED_UNIT_PRICE(i),
4898                  p_PROCESSED_FLAG(i),
4899                  p_PRICE_FLAG(i),
4900                  p_LINE_ID(i),
4901                  P_PROCESSING_ORDER(i),
4902                  P_ROUNDING_FLAG(i),
4903                  P_ROUNDING_FACTOR(i),
4904                  p_PRICING_STATUS_CODE(i),
4905                  p_PRICING_STATUS_TEXT(i),
4906                  p_UPD_ADJUSTED_UNIT_PRICE(i),
4907                  nvl(p_QUALIFIERS_EXIST_FLAG(i),'N'),
4908                  nvl(p_PRICING_ATTRS_EXIST_FLAG(i),'N'),
4909                  nvl(p_PRICE_LIST_ID(i),-9999),
4910                  nvl(p_VALIDATED_FLAG(i),'N'),
4911                  p_PRICE_REQUEST_CODE(i),
4912                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
4913                  G_LINE_CATEGORY_DEF_TBL(i),
4914                  G_CONTRACT_START_DATE_DEF_TBL(i), /* shulin */
4915                  G_CONTRACT_END_DATE_DEF_TBL(i), /* shulin */
4916                  G_LINE_UNIT_PRICE_DEF_TBL(i), /* shu_latest */
4917                  G_CATCHWEIGHT_QTY_DEF_TBL(i),
4918                  G_ACTUAL_ORDER_QTY_DEF_TBL(i),
4919 		 NVL(p_LIST_PRICE_OVERRIDE_FLAG(i), 'N'), --po integration
4920                  p_CHARGE_PERIODICITY_CODE(i),
4921 		 p_UNIT_PRICE(i),
4922                  l_request_id
4923                  );
4924   QP_PREQ_GRP.G_INT_LINES_NO := QP_PREQ_GRP.G_INT_LINES_NO + p_LINE_INDEX.count;
4925   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4926     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LINES_NO='||QP_PREQ_GRP.G_INT_LINES_NO);
4927   END IF;
4928 
4929   COMMIT;
4930 
4931 EXCEPTION
4932   WHEN OTHERS THEN
4933   x_status_code := FND_API.G_RET_STS_ERROR;
4934   x_status_text :=l_routine||' '||SQLERRM;
4935   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
4936     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
4937     QP_PREQ_GRP.engine_debug(SQLERRM);
4938   END IF;
4939 END;
4940 
4941 /*+-----------------------------------------------------------------------
4942   |PROCEDURE INSERT_LINES2 for bulk binding
4943   +-----------------------------------------------------------------------
4944 */
4945 PROCEDURE INSERT_LINES2
4946                 (p_LINE_INDEX              IN PLS_INTEGER_TYPE,
4947                  p_LINE_TYPE_CODE          IN VARCHAR_TYPE,
4948                  p_PRICING_EFFECTIVE_DATE  IN DATE_TYPE   ,
4949                  p_ACTIVE_DATE_FIRST       IN DATE_TYPE   ,
4950                  p_ACTIVE_DATE_FIRST_TYPE  IN VARCHAR_TYPE,
4951                  p_ACTIVE_DATE_SECOND      IN DATE_TYPE   ,
4952                  p_ACTIVE_DATE_SECOND_TYPE IN VARCHAR_TYPE ,
4953                  p_LINE_QUANTITY           IN NUMBER_TYPE ,
4954                  p_LINE_UOM_CODE           IN VARCHAR_TYPE,
4955                  p_REQUEST_TYPE_CODE      IN VARCHAR_TYPE,
4956                  p_PRICED_QUANTITY        IN NUMBER_TYPE,
4957                  p_PRICED_UOM_CODE        IN VARCHAR_TYPE,
4958                  p_CURRENCY_CODE          IN VARCHAR_TYPE,
4959                  p_UNIT_PRICE             IN NUMBER_TYPE,
4960                  p_PERCENT_PRICE          IN NUMBER_TYPE,
4961                  p_UOM_QUANTITY           IN NUMBER_TYPE,
4962                  p_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
4963                  p_UPD_ADJUSTED_UNIT_PRICE    IN NUMBER_TYPE,
4964                  p_PROCESSED_FLAG         IN VARCHAR_TYPE,
4965                  p_PRICE_FLAG             IN VARCHAR_TYPE,
4966                  p_LINE_ID                IN NUMBER_TYPE,
4967                  p_PROCESSING_ORDER       IN PLS_INTEGER_TYPE,
4968                  p_PRICING_STATUS_CODE    IN VARCHAR_TYPE,
4969                  p_PRICING_STATUS_TEXT    IN VARCHAR_TYPE,
4970                  p_ROUNDING_FLAG          IN FLAG_TYPE,
4971                  p_ROUNDING_FACTOR        IN PLS_INTEGER_TYPE,
4972                  p_QUALIFIERS_EXIST_FLAG  IN VARCHAR_TYPE,
4973                  p_PRICING_ATTRS_EXIST_FLAG IN VARCHAR_TYPE,
4974                  p_PRICE_LIST_ID          IN NUMBER_TYPE,
4975                  p_VALIDATED_FLAG         IN VARCHAR_TYPE,
4976                  p_PRICE_REQUEST_CODE     IN VARCHAR_TYPE,
4977 		 p_USAGE_PRICING_TYPE     IN VARCHAR_TYPE,
4978                  p_LINE_CATEGORY          IN VARCHAR_TYPE,
4979                  p_CONTRACT_START_DATE    IN DATE_TYPE,
4980                  p_CONTRACT_END_DATE    IN DATE_TYPE,
4981                  p_LINE_UNIT_PRICE    IN NUMBER_TYPE,
4982                  p_CATCHWEIGHT_QTY    IN NUMBER_TYPE,
4983                  p_ACTUAL_ORDER_QTY    IN NUMBER_TYPE,
4984 		 p_LIST_PRICE_OVERRIDE_FLAG IN VARCHAR_TYPE, --po integration
4985                  p_charge_periodicity_code IN VARCHAR_3_TYPE,
4986                  x_status_code            OUT NOCOPY VARCHAR2,
4987                  x_status_text            OUT NOCOPY VARCHAR2 )
4988 AS
4989 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.INSERT_LINES2';
4990 --added by yangli for Java Engine project
4991 l_debug varchar2(3);
4992 --added by yangli for Java Engine project
4993 BEGIN
4994 --added by yangli for Java Engine project
4995 -- Set the global variable G_DEBUG_ENGINE
4996   QP_PREQ_GRP.Set_QP_Debug;
4997 
4998   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
4999 --added by yangli for Java Engine project
5000 
5001 x_status_code := FND_API.G_RET_STS_SUCCESS;
5002 
5003 -- Defaulting
5004 IF (p_line_category.count = 0) THEN -- p_line_category not passed at all
5005  FOR i in p_line_index.FIRST .. p_line_index.LAST
5006  LOOP
5007   G_LINE_CATEGORY_DEF_TBL(i) := NULL;
5008  END LOOP;
5009 ELSE
5010  FOR i in p_line_index.FIRST .. p_line_index.LAST
5011  LOOP
5012   G_LINE_CATEGORY_DEF_TBL(i) := p_LINE_CATEGORY(i);
5013  END LOOP;
5014 END IF;
5015 
5016 -- shulin
5017 -- Defaulting
5018 IF (p_contract_start_date.count = 0) THEN -- p_contract_start_date not passed at all
5019  FOR i in p_line_index.FIRST .. p_line_index.LAST
5020  LOOP
5021   G_CONTRACT_START_DATE_DEF_TBL(i) := NULL;
5022  END LOOP;
5023 ELSE
5024  FOR i in p_line_index.FIRST .. p_line_index.LAST
5025  LOOP
5026   G_CONTRACT_START_DATE_DEF_TBL(i) := p_CONTRACT_START_DATE(i); /* shulin */
5027  END LOOP;
5028 END IF;
5029 
5030 IF (p_contract_end_date.count = 0) THEN -- p_contract_end_date not passed at all
5031  FOR i in p_line_index.FIRST .. p_line_index.LAST
5032  LOOP
5033   G_CONTRACT_END_DATE_DEF_TBL(i) := NULL;
5034  END LOOP;
5035 ELSE
5036  FOR i in p_line_index.FIRST .. p_line_index.LAST
5037  LOOP
5038   G_CONTRACT_END_DATE_DEF_TBL(i) := p_CONTRACT_END_DATE(i); /* shulin */
5039  END LOOP;
5040 END IF;
5041 
5042 IF (p_line_unit_price.count = 0) THEN -- p_line_unit_price not passed at all
5043  FOR i in p_line_index.FIRST .. p_line_index.LAST
5044  LOOP
5045   G_LINE_UNIT_PRICE_DEF_TBL(i) := NULL;
5046  END LOOP;
5047 ELSE
5048  FOR i in p_line_index.FIRST .. p_line_index.LAST
5049  LOOP
5050   G_LINE_UNIT_PRICE_DEF_TBL(i) := p_LINE_UNIT_PRICE(i); /* shu_latest */
5051  END LOOP;
5052 END IF;
5053 
5054 IF (p_catchweight_qty.count = 0) THEN -- p_catchweight_qty not passed at all
5055  FOR i in p_line_index.FIRST .. p_line_index.LAST
5056  LOOP
5057   G_CATCHWEIGHT_QTY_DEF_TBL(i) := NULL;
5058  END LOOP;
5059 ELSE
5060  FOR i in p_line_index.FIRST .. p_line_index.LAST
5061  LOOP
5062   G_CATCHWEIGHT_QTY_DEF_TBL(i) := p_catchweight_qty(i); /* shu_latest */
5063  END LOOP;
5064 END IF;
5065 
5066 IF (p_actual_order_qty.count = 0) THEN
5067  FOR i in p_line_index.FIRST .. p_line_index.LAST
5068  LOOP
5069   G_ACTUAL_ORDER_QTY_DEF_TBL(i) := NULL;
5070  END LOOP;
5071 ELSE
5072  FOR i in p_line_index.FIRST .. p_line_index.LAST
5073  LOOP
5074   G_ACTUAL_ORDER_QTY_DEF_TBL(i) := p_actual_order_qty(i);
5075  END LOOP;
5076 END IF;
5077 
5078 -- start po integration
5079 IF (p_list_price_override_flag.count= 0)
5080 THEN
5081  FOR i in p_line_index.FIRST .. p_line_index.LAST
5082  LOOP
5083   G_LIST_PRICE_OVERRIDE_FLAG_TBL(i) := 'N';
5084  END LOOP;
5085 ELSE
5086  FOR i in p_line_index.FIRST .. p_line_index.LAST
5087  LOOP
5088   G_LIST_PRICE_OVERRIDE_FLAG_TBL(i) := nvl (p_list_price_override_flag(i), 'N');
5089  END LOOP;
5090 End IF;
5091 -- end po integration
5092 
5093 IF (p_charge_periodicity_code.count = 0) THEN
5094   FOR i in p_line_index.FIRST .. p_line_index.LAST LOOP
5095     G_CHARGE_PERIODICITY_CODE_TBL(i) := NULL;
5096   END LOOP;
5097 ELSE
5098   FOR i in p_line_index.FIRST .. p_line_index.LAST LOOP
5099     G_CHARGE_PERIODICITY_CODE_TBL(i) := p_charge_periodicity_code(i);
5100   END LOOP;
5101 END IF;
5102 
5103 --added by yangli for Java Engine project
5104 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
5105  IF l_debug = FND_API.G_TRUE THEN
5106         ENGINE_DEBUG('Java Engine not Installed ----------');
5107  END IF;
5108 --added by yangli for Java Engine project
5109 
5110 FORALL i in p_line_index.FIRST..p_line_index.LAST
5111 
5112 INSERT INTO qp_npreq_lines_tmp
5113                 (LINE_INDEX,
5114                  LINE_TYPE_CODE,
5115                  PRICING_EFFECTIVE_DATE,
5116                  START_DATE_ACTIVE_FIRST,
5117                  ACTIVE_DATE_FIRST_TYPE,
5118                  START_DATE_ACTIVE_SECOND,
5119                  ACTIVE_DATE_SECOND_TYPE,
5120                  LINE_QUANTITY,
5121                  LINE_UOM_CODE,
5122                  REQUEST_TYPE_CODE,
5123                  PRICED_QUANTITY,
5124                  PRICED_UOM_CODE,
5125                  CURRENCY_CODE,
5126                  UNIT_PRICE,
5127                  PERCENT_PRICE,
5128                  UOM_QUANTITY,
5129                  ADJUSTED_UNIT_PRICE,
5130                  PROCESSED_FLAG,
5131                  PRICE_FLAG,
5132                  LINE_ID,
5133                  PROCESSING_ORDER,
5134                  ROUNDING_FLAG,
5135                  ROUNDING_FACTOR,
5136                  PRICING_STATUS_CODE,
5137                  PRICING_STATUS_TEXT,
5138                  UPDATED_ADJUSTED_UNIT_PRICE,
5139                  QUALIFIERS_EXIST_FLAG,
5140                  PRICING_ATTRS_EXIST_FLAG,
5141                  PRICE_LIST_HEADER_ID,
5142                  VALIDATED_FLAG,
5143                  PRICE_REQUEST_CODE,
5144                  USAGE_PRICING_TYPE,
5145                  LINE_CATEGORY,
5146                  CONTRACT_START_DATE,  -- shulin
5147                  CONTRACT_END_DATE,    -- shulin
5148                  LINE_UNIT_PRICE,      -- shu_latest
5149 		 CATCHWEIGHT_QTY,
5150                  ACTUAL_ORDER_QUANTITY,
5151 		 LIST_PRICE_OVERRIDE_FLAG, -- po integration
5152                  CHARGE_PERIODICITY_CODE,
5153 		 ORDER_UOM_SELLING_PRICE
5154 		 )
5155 VALUES (         p_LINE_INDEX(i),
5156                  p_LINE_TYPE_CODE(i),
5157                  p_PRICING_EFFECTIVE_DATE(i),
5158                  p_ACTIVE_DATE_FIRST(i),
5159                  p_ACTIVE_DATE_FIRST_TYPE(i),
5160                  p_ACTIVE_DATE_SECOND(i),
5161                  p_ACTIVE_DATE_SECOND_TYPE(i),
5162                  p_LINE_QUANTITY(i),
5163                  p_LINE_UOM_CODE(i),
5164                  p_REQUEST_TYPE_CODE(i),
5165                  p_PRICED_QUANTITY(i),
5166                  p_PRICED_UOM_CODE (i),
5167                  p_CURRENCY_CODE(i),
5168                  p_UNIT_PRICE (i),
5169                  p_PERCENT_PRICE(i),
5170                  p_UOM_QUANTITY(i),
5171                  p_ADJUSTED_UNIT_PRICE(i),
5172                  p_PROCESSED_FLAG(i),
5173                  p_PRICE_FLAG(i),
5174                  p_LINE_ID(i),
5175                  P_PROCESSING_ORDER(i),
5176                  P_ROUNDING_FLAG(i),
5177                  P_ROUNDING_FACTOR(i),
5178                  p_PRICING_STATUS_CODE(i),
5179                  p_PRICING_STATUS_TEXT(i),
5180                  p_UPD_ADJUSTED_UNIT_PRICE(i),
5181                  nvl(p_QUALIFIERS_EXIST_FLAG(i),'N'),
5182                  nvl(p_PRICING_ATTRS_EXIST_FLAG(i),'N'),
5183                  nvl(p_PRICE_LIST_ID(i),-9999),
5184                  nvl(p_VALIDATED_FLAG(i),'N'),
5185                  p_PRICE_REQUEST_CODE(i),
5186                  nvl(p_USAGE_PRICING_TYPE(i),'REGULAR'),
5187                  G_LINE_CATEGORY_DEF_TBL(i),
5188                  G_CONTRACT_START_DATE_DEF_TBL(i), /* shulin */
5189                  G_CONTRACT_END_DATE_DEF_TBL(i), /* shulin */
5190                  G_LINE_UNIT_PRICE_DEF_TBL(i), /* shu_latest */
5191 		 G_CATCHWEIGHT_QTY_DEF_TBL(i),
5192 		 G_ACTUAL_ORDER_QTY_DEF_TBL(i),
5193 		 nvl (G_LIST_PRICE_OVERRIDE_FLAG_TBL(i), 'N'), -- po integration
5194                  G_CHARGE_PERIODICITY_CODE_TBL(i),
5195 		 p_UNIT_PRICE(i)
5196                  );
5197 --added by yangli for Java Engine project
5198 ELSE
5199  IF l_debug = FND_API.G_TRUE THEN
5200         ENGINE_DEBUG('Java Engine Installed ----------');
5201  END IF;
5202 QP_PREQ_GRP.INSERT_LINES2_AT(
5203      p_LINE_INDEX,
5204      p_LINE_TYPE_CODE         ,
5205      p_PRICING_EFFECTIVE_DATE ,
5206      p_ACTIVE_DATE_FIRST      ,
5207      p_ACTIVE_DATE_FIRST_TYPE ,
5208      p_ACTIVE_DATE_SECOND     ,
5209      p_ACTIVE_DATE_SECOND_TYPE,
5210      p_LINE_QUANTITY          ,
5211      p_LINE_UOM_CODE          ,
5212      p_REQUEST_TYPE_CODE      ,
5213      p_PRICED_QUANTITY        ,
5214      p_PRICED_UOM_CODE        ,
5215      p_CURRENCY_CODE          ,
5216      p_UNIT_PRICE             ,
5217      p_PERCENT_PRICE          ,
5218      p_UOM_QUANTITY           ,
5219      p_ADJUSTED_UNIT_PRICE    ,
5220      p_UPD_ADJUSTED_UNIT_PRICE,
5221      p_PROCESSED_FLAG         ,
5222      p_PRICE_FLAG             ,
5223      p_LINE_ID                ,
5224      p_PROCESSING_ORDER       ,
5225      p_PRICING_STATUS_CODE    ,
5226      p_PRICING_STATUS_TEXT    ,
5227      p_ROUNDING_FLAG          ,
5228      p_ROUNDING_FACTOR        ,
5229      p_QUALIFIERS_EXIST_FLAG  ,
5230      p_PRICING_ATTRS_EXIST_FLAG ,
5231      p_PRICE_LIST_ID          ,
5232      p_VALIDATED_FLAG         ,
5233      p_PRICE_REQUEST_CODE    ,
5234      p_USAGE_PRICING_TYPE    ,
5235      G_LINE_CATEGORY_DEF_TBL,
5236      G_CONTRACT_START_DATE_DEF_TBL,
5237      G_CONTRACT_END_DATE_DEF_TBL,
5238      G_LINE_UNIT_PRICE_DEF_TBL,
5239      G_CATCHWEIGHT_QTY_DEF_TBL,
5240      G_ACTUAL_ORDER_QTY_DEF_TBL,
5241      G_LIST_PRICE_OVERRIDE_FLAG_TBL, --po integration
5242      G_CHARGE_PERIODICITY_CODE_TBL,
5243      x_status_code       ,
5244      x_status_text
5245 );
5246 END IF;
5247 --added by yangli for Java Engine project
5248 
5249 G_LINE_CATEGORY_DEF_TBL.delete;
5250 G_CONTRACT_START_DATE_DEF_TBL.delete;
5251 G_CONTRACT_END_DATE_DEF_TBL.delete;
5252 G_LINE_UNIT_PRICE_DEF_TBL.delete;
5253 G_CATCHWEIGHT_QTY_DEF_TBL.delete;
5254 G_ACTUAL_ORDER_QTY_DEF_TBL.delete;
5255 G_LIST_PRICE_OVERRIDE_FLAG_TBL.delete;
5256 G_CHARGE_PERIODICITY_CODE_TBL.delete;
5257 
5258 EXCEPTION
5259   WHEN OTHERS THEN
5260   x_status_code := FND_API.G_RET_STS_ERROR;
5261   x_status_text :=l_routine||' '||SQLERRM;
5262   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5263   engine_debug(l_routine||' '||SQLERRM);
5264   engine_debug(SQLERRM);
5265   END IF;
5266 END;
5267 
5268 /*+----------------------------------------------------------------------
5269   |Procedure INSERT_LDETS
5270   +----------------------------------------------------------------------
5271 */
5272 PROCEDURE INSERT_LDETS
5273                 (p_LINE_DETAIL_index IN PLS_INTEGER,
5274                  p_LINE_DETAIL_TYPE_CODE   IN VARCHAR2,
5275                  p_PRICE_BREAK_TYPE_CODE   IN VARCHAR2:=NULL,
5276                  p_LIST_PRICE              IN NUMBER:=NULL,
5277                  p_LINE_INDEX                  IN PLS_INTEGER,
5278                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER,
5279                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER,
5280                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR2,
5281                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR2:=NULL,
5282                  p_CREATED_FROM_SQL            IN VARCHAR2:=NULL,
5283                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER:=NULL,
5284                  P_PRICING_PHASE_ID            IN PLS_INTEGER:=NULL,
5285                  p_OPERAND_CALCULATION_CODE    IN VARCHAR2:=NULL,
5286                  p_OPERAND_VALUE               IN VARCHAR2:=NULL,
5287                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR2:=NULL,
5288                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR2:=NULL,
5289                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR2:=NULL,
5290                  p_ASK_FOR_FLAG                IN VARCHAR2:=NULL,
5291                  p_PRICE_FORMULA_ID            IN NUMBER:=NULL,
5292                  p_PRICING_STATUS_CODE         IN VARCHAR2,
5293                  p_PRICING_STATUS_TEXT         IN VARCHAR2:=NULL,
5294                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER:=NULL,
5295                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR2:=NULL,
5296                  p_PROCESSED_FLAG              IN VARCHAR2:=NULL,
5297                  p_APPLIED_FLAG                IN VARCHAR2:=NULL,
5298                  p_AUTOMATIC_FLAG              IN VARCHAR2:=NULL,
5299                  p_OVERRIDE_FLAG               IN VARCHAR2:=NULL,
5300                  p_PRIMARY_UOM_FLAG            IN VARCHAR2:=NULL,
5301                  p_PRINT_ON_INVOICE_FLAG       IN VARCHAR2:=NULL,
5302                  p_MODIFIER_LEVEL_CODE         IN VARCHAR2:=NULL,
5303                  p_BENEFIT_QTY                 IN NUMBER:=NULL,
5304                  p_BENEFIT_UOM_CODE            IN VARCHAR2:=NULL,
5305                  p_LIST_LINE_NO                IN VARCHAR2:=NULL,
5306                  p_ACCRUAL_FLAG                IN VARCHAR2:=NULL,
5307                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER:=NULL,
5308                  p_ESTIM_ACCRUAL_RATE          IN NUMBER:=NULL,
5309                  p_RECURRING_FLAG              IN VARCHAR2:=NULL,
5310                  p_RECURRING_VALUE             IN NUMBER:=NULL, -- block pricing
5311                  p_SELECTED_VOLUME_ATTR        IN VARCHAR2:=NULL,
5312                  p_ROUNDING_FACTOR             IN NUMBER:=NULL,
5313                  p_SECONDARY_PRICELIST_IND     IN VARCHAR2:=NULL,
5314                  p_UPDATED_FLAG                IN VARCHAR := NULL,
5315                  p_PROCESS_CODE                IN VARCHAR := NULL,
5316                  p_CHARGE_TYPE_CODE            IN VARCHAR := NULL,
5317                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR := NULL,
5318                  p_GROUP_QUANTITY              IN NUMBER :=NULL,
5319                  p_GROUP_AMOUNT                IN NUMBER :=NULL,
5320 		 p_CALCULATION_CODE	       IN VARCHAR2 := NULL,
5321                  p_CURRENCY_DETAIL_ID          IN NUMBER :=NULL, /*vivek */
5322                  p_CURRENCY_HEADER_ID          IN NUMBER :=NULL, /*vivek */
5323                  p_SELLING_ROUNDING_FACTOR          IN NUMBER :=NULL, /*vivek */
5324                  p_ORDER_CURRENCY              IN VARCHAR := NULL, /*vivek */
5325                  p_PRICING_EFFECTIVE_DATE      IN DATE := NULL,/*vivek */
5326                  p_BASE_CURRENCY_CODE          IN VARCHAR := NULL,/*vivek */
5327 		 p_CHANGE_REASON_CODE		IN VARCHAR2 := NULL,
5328 		 p_CHANGE_REASON_TEXT		IN VARCHAR2 := NULL,
5329 		 p_LINE_QUANTITY		IN NUMBER := NULL,
5330                  p_BREAK_UOM_CODE              IN VARCHAR2 := NULL, /* Proration */
5331                  p_BREAK_UOM_CONTEXT           IN VARCHAR2 := NULL, /* Proration */
5332                  p_BREAK_UOM_ATTRIBUTE         IN VARCHAR2 := NULL, /* Proration */
5333                  x_status_code                 OUT NOCOPY VARCHAR2,
5334                  x_status_text                 OUT NOCOPY VARCHAR2)
5335 AS
5336 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS';
5337 BEGIN
5338  INSERT INTO qp_npreq_ldets_tmp
5339                 (LINE_DETAIL_INDEX,
5340                  LINE_DETAIL_TYPE_CODE,
5341                  PRICE_BREAK_TYPE_CODE,
5342                  LINE_INDEX,
5343                  CREATED_FROM_LIST_HEADER_ID,
5344                  CREATED_FROM_LIST_LINE_ID,
5345                  CREATED_FROM_LIST_LINE_TYPE,
5346                  CREATED_FROM_LIST_TYPE_CODE,
5347                  CREATED_FROM_SQL,
5348                  PRICING_GROUP_SEQUENCE,
5349                  PRICING_PHASE_ID,
5350                  OPERAND_CALCULATION_CODE,
5351                  OPERAND_VALUE,
5352                  SUBSTITUTION_TYPE_CODE,
5353                  SUBSTITUTION_VALUE_FROM,
5354                  SUBSTITUTION_VALUE_TO,
5355                  ASK_FOR_FLAG,
5356                  PRICE_FORMULA_ID,
5357                  PRICING_STATUS_CODE,
5358                  PRICING_STATUS_TEXT,
5359                  PRODUCT_PRECEDENCE,
5360                  INCOMPATABILITY_GRP_CODE,
5361                  PROCESSED_FLAG,
5362                  APPLIED_FLAG,
5363                  AUTOMATIC_FLAG,
5364                  OVERRIDE_FLAG,
5365                  PRINT_ON_INVOICE_FLAG,
5366                  PRIMARY_UOM_FLAG,
5367                  MODIFIER_LEVEL_CODE,
5368                  BENEFIT_QTY,
5369                  BENEFIT_UOM_CODE,
5370                  LIST_LINE_NO,
5371                  ACCRUAL_FLAG,
5372                  ACCRUAL_CONVERSION_RATE,
5373                  ESTIM_ACCRUAL_RATE,
5374                  RECURRING_FLAG,
5375                  RECURRING_VALUE, -- block pricing
5376                  SELECTED_VOLUME_ATTR,
5377                  ROUNDING_FACTOR,
5378                  UPDATED_FLAG,
5379                  PROCESS_CODE,
5380                  CHARGE_TYPE_CODE,
5381                  CHARGE_SUBTYPE_CODE,
5382                  GROUP_QUANTITY,
5383                  GROUP_AMOUNT,
5384 		 CALCULATION_CODE,
5385                  CURRENCY_DETAIL_ID, /*vivek */
5386                  CURRENCY_HEADER_ID, /*vivek */
5387                  SELLING_ROUNDING_FACTOR, /*vivek */
5388                  ORDER_CURRENCY, /*vivek */
5389                  PRICING_EFFECTIVE_DATE,/*vivek */
5390                  BASE_CURRENCY_CODE,/*vivek */
5391 		 CHANGE_REASON_CODE,
5392 		 CHANGE_REASON_TEXT,
5393 		 LINE_QUANTITY
5394                 ,BREAK_UOM_CODE /* Proration */
5395                 ,BREAK_UOM_CONTEXT /* Proration */
5396                 ,BREAK_UOM_ATTRIBUTE /* Proration */
5397           )
5398   VALUES (       p_LINE_DETAIL_INDEX,
5399                  p_LINE_DETAIL_TYPE_CODE,
5400                  p_PRICE_BREAK_TYPE_CODE,
5401                  p_LINE_INDEX,
5402                  p_CREATED_FROM_LIST_HEADER_ID,
5403                  p_CREATED_FROM_LIST_LINE_ID,
5404                  p_CREATED_FROM_LIST_LINE_TYPE,
5405                  p_CREATED_FROM_LIST_TYPE_CODE,
5406                  p_CREATED_FROM_SQL,
5407                  p_PRICING_GROUP_SEQUENCE,
5408                  p_PRICING_PHASE_ID,
5409                  p_OPERAND_CALCULATION_CODE,
5410                  p_OPERAND_VALUE,
5411                  p_SUBSTITUTION_TYPE_CODE,
5412                  p_SUBSTITUTION_VALUE_FROM,
5413                  p_SUBSTITUTION_VALUE_TO,
5414                  p_ASK_FOR_FLAG,
5415                  p_PRICE_FORMULA_ID,
5416                  p_PRICING_STATUS_CODE,
5417                  p_PRICING_STATUS_TEXT,
5418                  p_PRODUCT_PRECEDENCE,
5419                  p_INCOMPATABLILITY_GRP_CODE,
5420                  p_PROCESSED_FLAG,
5421                  p_APPLIED_FLAG,
5422                  p_AUTOMATIC_FLAG,
5423                  p_OVERRIDE_FLAG,
5424                  p_PRINT_ON_INVOICE_FLAG,
5425                  p_PRIMARY_UOM_FLAG,
5426                  p_MODIFIER_LEVEL_CODE,
5427                  p_BENEFIT_QTY,
5428                  p_BENEFIT_UOM_CODE,
5429                  p_LIST_LINE_NO,
5430                  p_ACCRUAL_FLAG,
5431                  p_ACCRUAL_CONVERSION_RATE,
5432                  p_ESTIM_ACCRUAL_RATE,
5433                  p_RECURRING_FLAG,
5434                  p_RECURRING_VALUE, -- block pricing
5435                  p_SELECTED_VOLUME_ATTR,
5436                  p_ROUNDING_FACTOR,
5437                  p_UPDATED_FLAG,
5438                  nvl(p_PROCESS_CODE,G_STATUS_NEW),
5439                  p_CHARGE_TYPE_CODE,
5440                  p_CHARGE_SUBTYPE_CODE,
5441                  p_GROUP_QUANTITY,
5442                  p_GROUP_AMOUNT,
5443 		 p_CALCULATION_CODE,
5444                  P_CURRENCY_DETAIL_ID, /*vivek */
5445                  P_CURRENCY_HEADER_ID, /*vivek */
5446                  P_SELLING_ROUNDING_FACTOR, /*vivek */
5447                  P_ORDER_CURRENCY, /*vivek */
5448                  P_PRICING_EFFECTIVE_DATE,/*vivek */
5449                  P_BASE_CURRENCY_CODE,/*vivek */
5450 		 p_CHANGE_REASON_CODE,
5451 		 p_CHANGE_REASON_TEXT,
5452 		 p_LINE_QUANTITY
5453                 ,p_BREAK_UOM_CODE /* Proration */
5454                 ,p_BREAK_UOM_CONTEXT /* Proration */
5455                 ,p_BREAK_UOM_ATTRIBUTE /* Proration */
5456            );
5457 EXCEPTION
5458   WHEN OTHERS THEN
5459   x_status_code := FND_API.G_RET_STS_ERROR;
5460   x_status_text :=l_routine||' '||SQLERRM;
5461   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5462   engine_debug(l_routine||' '||SQLERRM);
5463   engine_debug(SQLERRM);
5464   END IF;
5465 END;
5466 
5467 /*+----------------------------------------------------------------------
5468   |Procedure INSERT_LDETS_PRICE_LIST_PVT
5469   +----------------------------------------------------------------------
5470 */
5471 PROCEDURE INSERT_LDETS_PRICE_LIST_PVT
5472                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
5473                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5474                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5475                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
5476                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
5477                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
5478                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
5479                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
5480                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
5481                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5482                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5483                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5484                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5485                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5486                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
5487                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
5488                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5489                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5490                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
5491                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5492                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5493                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
5494                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5495                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5496                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
5497                  p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration */
5498                  p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration */
5499                  p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration */
5500                  x_status_code                 OUT NOCOPY VARCHAR2,
5501                  x_status_text                 OUT NOCOPY VARCHAR2)
5502 AS
5503 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS_PRICE_LIST_PVT';
5504 
5505 BEGIN
5506 
5507    FORALL i in p_line_index.FIRST..p_line_index.LAST
5508    INSERT INTO qp_npreq_ldets_tmp
5509                 (LINE_DETAIL_INDEX,
5510                  LINE_DETAIL_TYPE_CODE,
5511                  PRICE_BREAK_TYPE_CODE,
5512                  LINE_INDEX,
5513                  CREATED_FROM_LIST_HEADER_ID,
5514                  CREATED_FROM_LIST_LINE_ID,
5515                  CREATED_FROM_LIST_LINE_TYPE,
5516                  CREATED_FROM_LIST_TYPE_CODE,
5517                  CREATED_FROM_SQL,
5518                  PRICING_GROUP_SEQUENCE,
5519                  PRICING_PHASE_ID,
5520                  OPERAND_CALCULATION_CODE,
5521                  OPERAND_VALUE,
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                  PRIMARY_UOM_FLAG,
5531                  MODIFIER_LEVEL_CODE,
5532                  LIST_LINE_NO,
5533 		 PROCESS_CODE,
5534                  ROUNDING_FACTOR
5535                 ,BREAK_UOM_CODE /* Proration */
5536                 ,BREAK_UOM_CONTEXT /* Proration */
5537                 ,BREAK_UOM_ATTRIBUTE /* Proration */
5538            )
5539    VALUES (      p_LINE_DETAIL_INDEX(i),
5540                  p_LINE_DETAIL_TYPE_CODE(i),
5541                  p_PRICE_BREAK_TYPE_CODE(i),
5542                  p_LINE_INDEX(i),
5543                  p_CREATED_FROM_LIST_HEADER_ID(i),
5544                  p_CREATED_FROM_LIST_LINE_ID(i),
5545                  p_CREATED_FROM_LIST_LINE_TYPE(i),
5546                  p_CREATED_FROM_LIST_TYPE_CODE(i),
5547                  p_CREATED_FROM_SQL(i),
5548                  p_PRICING_GROUP_SEQUENCE(i),
5549                  p_PRICING_PHASE_ID(i),
5550                  p_OPERAND_CALCULATION_CODE(i),
5551                  p_OPERAND_VALUE(i),
5552                  p_PRICE_FORMULA_ID(i),
5553                  p_PRICING_STATUS_CODE(i),
5554                  p_PRICING_STATUS_TEXT(i),
5555                  p_PRODUCT_PRECEDENCE(i),
5556                  p_INCOMPATABLILITY_GRP_CODE(i),
5557                  p_PROCESSED_FLAG(i),
5558                  p_APPLIED_FLAG(i),
5559                  p_AUTOMATIC_FLAG(i),
5560                  p_PRIMARY_UOM_FLAG(i),
5561                  p_MODIFIER_LEVEL_CODE(i),
5562                  p_LIST_LINE_NO(i),
5563 		 G_STATUS_NEW,
5564                  p_ROUNDING_FACTOR(i)
5565                 ,p_BREAK_UOM_CODE(i) /* Proration */
5566                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
5567                 ,p_BREAK_UOM_ATTRIBUTE(i) /* Proration */
5568           );
5569 EXCEPTION
5570   WHEN OTHERS THEN
5571   x_status_code := FND_API.G_RET_STS_ERROR;
5572   x_status_text :=l_routine||' '||SQLERRM;
5573   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5574   engine_debug(l_routine||' '||SQLERRM);
5575   engine_debug(SQLERRM);
5576   END IF;
5577 END;
5578 
5579 /*+----------------------------------------------------------------------
5580   |Procedure INSERT_LDETS_PRICE_LIST_MULT
5581   +----------------------------------------------------------------------
5582 */
5583 PROCEDURE INSERT_LDETS_PRICE_LIST_MULT
5584                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
5585                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5586                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5587                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
5588                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
5589                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
5590                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
5591                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
5592                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
5593                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5594                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5595                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5596                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5597                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5598                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
5599                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
5600                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5601                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5602                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
5603                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5604                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5605                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
5606                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5607                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5608                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
5609                  p_CURRENCY_DETAIL_ID          IN NUMBER_TYPE,
5610                  p_CURRENCY_HEADER_ID          IN NUMBER_TYPE,
5611                  p_SELLING_ROUNDING_FACTOR     IN NUMBER_TYPE,
5612                  p_ORDER_CURRENCY              IN VARCHAR_TYPE,
5613                  p_PRICING_EFFECTIVE_DATE      IN DATE_TYPE,
5614                  p_BASE_CURRENCY_CODE          IN VARCHAR_TYPE,
5615                  p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration */
5616                  p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration */
5617                  p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration */
5618                  x_status_code                 OUT NOCOPY VARCHAR2,
5619                  x_status_text                 OUT NOCOPY VARCHAR2)
5620 AS
5621 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS_PRICE_LIST_MULT';
5622 
5623 BEGIN
5624 
5625  FORALL i in p_line_index.FIRST..p_line_index.LAST
5626  INSERT INTO qp_npreq_ldets_tmp
5627                 (LINE_DETAIL_INDEX,
5628                  LINE_DETAIL_TYPE_CODE,
5629                  PRICE_BREAK_TYPE_CODE,
5630                  LINE_INDEX,
5631                  CREATED_FROM_LIST_HEADER_ID,
5632                  CREATED_FROM_LIST_LINE_ID,
5633                  CREATED_FROM_LIST_LINE_TYPE,
5634                  CREATED_FROM_LIST_TYPE_CODE,
5635                  CREATED_FROM_SQL,
5636                  PRICING_GROUP_SEQUENCE,
5637                  PRICING_PHASE_ID,
5638                  OPERAND_CALCULATION_CODE,
5639                  OPERAND_VALUE,
5640                  PRICE_FORMULA_ID,
5641                  PRICING_STATUS_CODE,
5642                  PRICING_STATUS_TEXT,
5643                  PRODUCT_PRECEDENCE,
5644                  INCOMPATABILITY_GRP_CODE,
5645                  PROCESSED_FLAG,
5646                  APPLIED_FLAG,
5647                  AUTOMATIC_FLAG,
5648                  PRIMARY_UOM_FLAG,
5649                  MODIFIER_LEVEL_CODE,
5650                  LIST_LINE_NO,
5651                  ROUNDING_FACTOR,
5652                  CURRENCY_DETAIL_ID,
5653                  CURRENCY_HEADER_ID,
5654                  SELLING_ROUNDING_FACTOR,
5655                  ORDER_CURRENCY,
5656                  PRICING_EFFECTIVE_DATE,
5657 		 PROCESS_CODE,
5658                  BASE_CURRENCY_CODE
5659                 ,BREAK_UOM_CODE /* Proration */
5660                 ,BREAK_UOM_CONTEXT /* Proration */
5661                 ,BREAK_UOM_ATTRIBUTE /* Proration */
5662           )
5663   VALUES (       p_LINE_DETAIL_INDEX(i),
5664                  p_LINE_DETAIL_TYPE_CODE(i),
5665                  p_PRICE_BREAK_TYPE_CODE(i),
5666                  p_LINE_INDEX(i),
5667                  p_CREATED_FROM_LIST_HEADER_ID(i),
5668                  p_CREATED_FROM_LIST_LINE_ID(i),
5669                  p_CREATED_FROM_LIST_LINE_TYPE(i),
5670                  p_CREATED_FROM_LIST_TYPE_CODE(i),
5671                  p_CREATED_FROM_SQL(i),
5672                  p_PRICING_GROUP_SEQUENCE(i),
5673                  p_PRICING_PHASE_ID(i),
5674                  p_OPERAND_CALCULATION_CODE(i),
5675                  p_OPERAND_VALUE(i),
5676                  p_PRICE_FORMULA_ID(i),
5677                  p_PRICING_STATUS_CODE(i),
5678                  p_PRICING_STATUS_TEXT(i),
5679                  p_PRODUCT_PRECEDENCE(i),
5680                  p_INCOMPATABLILITY_GRP_CODE(i),
5681                  p_PROCESSED_FLAG(i),
5682                  p_APPLIED_FLAG(i),
5683                  p_AUTOMATIC_FLAG(i),
5684                  p_PRIMARY_UOM_FLAG(i),
5685                  p_MODIFIER_LEVEL_CODE(i),
5686                  p_LIST_LINE_NO(i),
5687                  p_ROUNDING_FACTOR(i),
5688                  p_CURRENCY_DETAIL_ID(i),
5689                  p_CURRENCY_HEADER_ID(i),
5690                  p_SELLING_ROUNDING_FACTOR(i),
5691                  p_ORDER_CURRENCY(i),
5692                  p_PRICING_EFFECTIVE_DATE(i),
5693 		 G_STATUS_NEW,
5694                  p_BASE_CURRENCY_CODE(i)
5695                 ,p_BREAK_UOM_CODE(i) /* Proration */
5696                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
5697                 ,p_BREAK_UOM_ATTRIBUTE(i) /* Proration */
5698          );
5699 
5700 EXCEPTION
5701   WHEN OTHERS THEN
5702   x_status_code := FND_API.G_RET_STS_ERROR;
5703   x_status_text :=l_routine||' '||SQLERRM;
5704   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5705   engine_debug(l_routine||' '||SQLERRM);
5706   engine_debug(SQLERRM);
5707   END IF;
5708 END;
5709 
5710 /*+----------------------------------------------------------------------
5711   |Procedure Group INSERT_LDETS2_AT
5712   +----------------------------------------------------------------------
5713 */
5714 
5715 PROCEDURE INSERT_LDETS2_AT
5716                 (p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
5717                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5718                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5719                  p_LINE_INDEX                  IN NUMBER_TYPE,
5720                  p_LIST_HEADER_ID              IN NUMBER_TYPE,
5721                  p_LIST_LINE_ID                IN NUMBER_TYPE,
5722                  p_LIST_LINE_TYPE_CODE         IN VARCHAR_TYPE,
5723                  p_LIST_TYPE_CODE              IN VARCHAR_TYPE,
5724                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5725                  p_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5726                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5727                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5728                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
5729                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
5730                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
5731                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5732                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5733                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5734                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5735                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5736                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
5737                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5738                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
5739                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
5740                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5741                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
5742                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
5743 		 p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
5744                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
5745                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
5746 		 p_LINE_QUANTITY               IN NUMBER_TYPE,
5747 		 p_UPDATED_FLAG                IN VARCHAR_TYPE,
5748 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
5749 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
5750 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
5751                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
5752                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
5753                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
5754 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
5755 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
5756 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
5757                  x_status_code                 OUT NOCOPY VARCHAR2,
5758                  x_status_text                 OUT NOCOPY VARCHAR2) AS
5759 PRAGMA AUTONOMOUS_TRANSACTION;
5760 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2_AT';
5761 l_request_id number;
5762 BEGIN
5763  l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
5764  FORALL i in p_line_index.FIRST..p_line_index.LAST
5765  /*INSERT INTO QP_INT_LDETS
5766                 (LINE_DETAIL_INDEX,
5767                  LINE_DETAIL_TYPE_CODE,
5768                  PRICE_BREAK_TYPE_CODE,
5769                  LINE_INDEX,
5770                  CREATED_FROM_LIST_HEADER_ID,
5771                  CREATED_FROM_LIST_LINE_ID,
5772                  CREATED_FROM_LIST_LINE_TYPE,
5773                  CREATED_FROM_LIST_TYPE_CODE,
5774                  PRICING_GROUP_SEQUENCE,
5775                  PRICING_PHASE_ID,
5776                  OPERAND_CALCULATION_CODE,
5777                  OPERAND_VALUE,
5778                  SUBSTITUTION_TYPE_CODE,
5779                  SUBSTITUTION_VALUE_FROM,
5780                  SUBSTITUTION_VALUE_TO,
5781                  PRICE_FORMULA_ID,
5782                  PRICING_STATUS_CODE,
5783                  PRODUCT_PRECEDENCE,
5784                  INCOMPATABILITY_GRP_CODE,
5785                  APPLIED_FLAG,
5786                  AUTOMATIC_FLAG,
5787                  OVERRIDE_FLAG,
5788                  MODIFIER_LEVEL_CODE,
5789                  BENEFIT_QTY,
5790                  BENEFIT_UOM_CODE,
5791                  LIST_LINE_NO,
5792                  ACCRUAL_FLAG,
5793                  ACCRUAL_CONVERSION_RATE,
5794                  ESTIM_ACCRUAL_RATE,
5795                  CHARGE_TYPE_CODE,
5796                  CHARGE_SUBTYPE_CODE,
5797                  PROCESS_CODE,
5798                  LINE_QUANTITY,
5799                  UPDATED_FLAG, -- begin shu, fix Bug 2599822
5800                  CALCULATION_CODE,
5801                  CHANGE_REASON_CODE,
5802                  CHANGE_REASON_TEXT,
5803                  ACCUM_CONTEXT, -- accum range break
5804                  ACCUM_ATTRIBUTE, -- accum range break
5805                  ACCUM_ATTR_RUN_SRC_FLAG,
5806                  BREAK_UOM_CODE,
5807                  BREAK_UOM_CONTEXT,
5808                  BREAK_UOM_ATTRIBUTE)
5809   VALUES (
5810                  p_LINE_DETAIL_INDEX(i),
5811                  'NULL',
5812                  p_PRICE_BREAK_TYPE_CODE(i),
5813                  p_LINE_INDEX(i),
5814                  p_LIST_HEADER_ID(i),
5815                  p_LIST_LINE_ID(i),
5816                  p_LIST_LINE_TYPE_CODE(i),
5817                  p_LIST_TYPE_CODE(i),
5818                  p_PRICING_GROUP_SEQUENCE(i),
5819                  p_PRICING_PHASE_ID(i),
5820                  p_OPERAND_CALCULATION_CODE(i),
5821                  p_OPERAND_VALUE(i),
5822                  p_SUBSTITUTION_TYPE_CODE(i),
5823                  p_SUBSTITUTION_VALUE_FROM(i),
5824                  p_SUBSTITUTION_VALUE_TO(i),
5825                  p_PRICE_FORMULA_ID(i),
5826                  G_STATUS_NEW,
5827                  p_PRODUCT_PRECEDENCE(i),
5828                  p_INCOMPATABLILITY_GRP_CODE(i),
5829                  p_APPLIED_FLAG(i),
5830                  p_AUTOMATIC_FLAG(i),
5831                  p_OVERRIDE_FLAG(i),
5832                  p_MODIFIER_LEVEL_CODE(i),
5833                  p_BENEFIT_QTY(i),
5834                  p_BENEFIT_UOM_CODE(i),
5835                  p_LIST_LINE_NO(i),
5836                  p_ACCRUAL_FLAG(i),
5837                  p_ACCRUAL_CONVERSION_RATE(i),
5838                  p_ESTIM_ACCRUAL_RATE(i),
5839                  p_CHARGE_TYPE_CODE(i),
5840                  p_CHARGE_SUBTYPE_CODE(i),
5841                  G_STATUS_NEW,
5842                  p_LINE_QUANTITY(i),
5843                  p_UPDATED_FLAG(i),
5844                  p_CALCULATION_CODE(i),
5845                  p_CHANGE_REASON_CODE(i),
5846                  p_CHANGE_REASON_TEXT(i),
5847                  p_ACCUM_CONTEXT(i), -- accum range break
5848                  p_ACCUM_ATTRIBUTE(i), -- accum range break
5849                  p_ACCUM_FLAG(i)
5850                 ,p_BREAK_UOM_CODE(i)
5851                 ,p_BREAK_UOM_CONTEXT(i)
5852                 ,p_BREAK_UOM_ATTRIBUTE(i)
5853           );*/
5854  INSERT INTO QP_INT_LDETS_T
5855                 (LINE_DETAIL_INDEX,
5856                  LINE_DETAIL_TYPE_CODE,
5857                  PRICE_BREAK_TYPE_CODE,
5858                  LINE_INDEX,
5859                  CREATED_FROM_LIST_HEADER_ID,
5860                  CREATED_FROM_LIST_LINE_ID,
5861                  CREATED_FROM_LIST_LINE_TYPE,
5862                  CREATED_FROM_LIST_TYPE_CODE,
5863                  PRICING_GROUP_SEQUENCE,
5864                  PRICING_PHASE_ID,
5865                  OPERAND_CALCULATION_CODE,
5866                  OPERAND_VALUE,
5867                  SUBSTITUTION_TYPE_CODE,
5868                  SUBSTITUTION_VALUE_FROM,
5869                  SUBSTITUTION_VALUE_TO,
5870                  PRICE_FORMULA_ID,
5871                  PRICING_STATUS_CODE,
5872                  PRODUCT_PRECEDENCE,
5873                  INCOMPATABILITY_GRP_CODE,
5874                  APPLIED_FLAG,
5875                  AUTOMATIC_FLAG,
5876                  OVERRIDE_FLAG,
5877                  MODIFIER_LEVEL_CODE,
5878                  BENEFIT_QTY,
5879                  BENEFIT_UOM_CODE,
5880                  LIST_LINE_NO,
5881                  ACCRUAL_FLAG,
5882                  ACCRUAL_CONVERSION_RATE,
5883                  ESTIM_ACCRUAL_RATE,
5884                  CHARGE_TYPE_CODE,
5885                  CHARGE_SUBTYPE_CODE,
5886                  PROCESS_CODE,
5887                  LINE_QUANTITY,
5888                  UPDATED_FLAG, -- begin shu, fix Bug 2599822
5889                  CALCULATION_CODE,
5890                  CHANGE_REASON_CODE,
5891                  CHANGE_REASON_TEXT,
5892                  ACCUM_CONTEXT, -- accum range break
5893                  ACCUM_ATTRIBUTE, -- accum range break
5894                  ACCUM_ATTR_RUN_SRC_FLAG,
5895                  BREAK_UOM_CODE, /* Proration */
5896                  BREAK_UOM_CONTEXT, /* Proration */
5897                  BREAK_UOM_ATTRIBUTE, /* Proration */
5898                  request_id)
5899   VALUES (
5900                  p_LINE_DETAIL_INDEX(i),
5901                  'NULL',
5902                  p_PRICE_BREAK_TYPE_CODE(i),
5903                  p_LINE_INDEX(i),
5904                  p_LIST_HEADER_ID(i),
5905                  p_LIST_LINE_ID(i),
5906                  p_LIST_LINE_TYPE_CODE(i),
5907                  p_LIST_TYPE_CODE(i),
5908                  p_PRICING_GROUP_SEQUENCE(i),
5909                  p_PRICING_PHASE_ID(i),
5910                  p_OPERAND_CALCULATION_CODE(i),
5911                  p_OPERAND_VALUE(i),
5912                  p_SUBSTITUTION_TYPE_CODE(i),
5913                  p_SUBSTITUTION_VALUE_FROM(i),
5914                  p_SUBSTITUTION_VALUE_TO(i),
5915                  p_PRICE_FORMULA_ID(i),
5916                  G_STATUS_NEW,
5917                  p_PRODUCT_PRECEDENCE(i),
5918                  p_INCOMPATABLILITY_GRP_CODE(i),
5919                  p_APPLIED_FLAG(i),
5920                  p_AUTOMATIC_FLAG(i),
5921                  p_OVERRIDE_FLAG(i),
5922                  p_MODIFIER_LEVEL_CODE(i),
5923                  p_BENEFIT_QTY(i),
5924                  p_BENEFIT_UOM_CODE(i),
5925                  p_LIST_LINE_NO(i),
5926                  p_ACCRUAL_FLAG(i),
5927                  p_ACCRUAL_CONVERSION_RATE(i),
5928                  p_ESTIM_ACCRUAL_RATE(i),
5929                  p_CHARGE_TYPE_CODE(i),
5930                  p_CHARGE_SUBTYPE_CODE(i),
5931                  G_STATUS_NEW,
5932                  p_LINE_QUANTITY(i),
5933                  p_UPDATED_FLAG(i),
5934                  p_CALCULATION_CODE(i),
5935                  p_CHANGE_REASON_CODE(i),
5936                  p_CHANGE_REASON_TEXT(i),
5937                  p_ACCUM_CONTEXT(i), -- accum range break
5938                  p_ACCUM_ATTRIBUTE(i), -- accum range break
5939                  p_ACCUM_FLAG(i)
5940                 ,p_BREAK_UOM_CODE(i) /* Proration */
5941                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
5942                 ,p_BREAK_UOM_ATTRIBUTE(i), /* Proration */
5943                  l_request_id
5944           );
5945   QP_PREQ_GRP.G_INT_LDETS_NO := QP_PREQ_GRP.G_INT_LDETS_NO + p_LINE_DETAIL_INDEX.count;
5946   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5947     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LDETS_NO='||QP_PREQ_GRP.G_INT_LDETS_NO);
5948   END IF;
5949 
5950 COMMIT;
5951 EXCEPTION
5952   WHEN OTHERS THEN
5953   x_status_code := FND_API.G_RET_STS_ERROR;
5954   x_status_text :=l_routine||' '||SQLERRM;
5955   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
5956   QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
5957   QP_PREQ_GRP.engine_debug(SQLERRM);
5958   END IF;
5959 END;
5960 
5961 /*+----------------------------------------------------------------------
5962   |Procedure Group INSERT_LDETS2
5963   +----------------------------------------------------------------------
5964 */
5965 
5966 PROCEDURE INSERT_LDETS2
5967                 (p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
5968                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
5969                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
5970                  p_LINE_INDEX                  IN NUMBER_TYPE,
5971                  p_LIST_HEADER_ID              IN NUMBER_TYPE,
5972                  p_LIST_LINE_ID                IN NUMBER_TYPE,
5973                  p_LIST_LINE_TYPE_CODE         IN VARCHAR_TYPE,
5974                  p_LIST_TYPE_CODE              IN VARCHAR_TYPE,
5975                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
5976                  p_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
5977                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
5978                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
5979                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
5980                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
5981                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
5982                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
5983                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
5984                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
5985                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
5986                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
5987                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
5988                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
5989                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
5990                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
5991                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
5992                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
5993                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
5994 		 p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
5995                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
5996                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
5997 		 p_LINE_QUANTITY               IN NUMBER_TYPE,
5998 		 p_UPDATED_FLAG                IN VARCHAR_TYPE,
5999 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
6000 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
6001 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
6002                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6003                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6004                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6005 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
6006 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
6007 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
6008                  x_status_code                 OUT NOCOPY VARCHAR2,
6009                  x_status_text                 OUT NOCOPY VARCHAR2) AS
6010 
6011 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2';
6012 --added by yangli for Java Engine project
6013 l_debug varchar2(3);
6014 --added by yangli for Java Engine project
6015 BEGIN
6016 --added by yangli for Java Engine project
6017 -- Set the global variable G_DEBUG_ENGINE
6018   QP_PREQ_GRP.Set_QP_Debug;
6019 
6020   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
6021 
6022 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
6023  IF l_debug = FND_API.G_TRUE THEN
6024         ENGINE_DEBUG('Java Engine not Installed ----------');
6025  END IF;
6026 --added by yangli for Java Engine project
6027 
6028  FORALL i in p_line_index.FIRST..p_line_index.LAST
6029  INSERT INTO qp_npreq_ldets_tmp
6030                 (LINE_DETAIL_INDEX,
6031                  LINE_DETAIL_TYPE_CODE,
6032                  PRICE_BREAK_TYPE_CODE,
6033                  LINE_INDEX,
6034                  CREATED_FROM_LIST_HEADER_ID,
6035                  CREATED_FROM_LIST_LINE_ID,
6036                  CREATED_FROM_LIST_LINE_TYPE,
6037                  CREATED_FROM_LIST_TYPE_CODE,
6038                  PRICING_GROUP_SEQUENCE,
6039                  PRICING_PHASE_ID,
6040                  OPERAND_CALCULATION_CODE,
6041                  OPERAND_VALUE,
6042                  SUBSTITUTION_TYPE_CODE,
6043                  SUBSTITUTION_VALUE_FROM,
6044                  SUBSTITUTION_VALUE_TO,
6045                  PRICE_FORMULA_ID,
6046                  PRICING_STATUS_CODE,
6047                  PRODUCT_PRECEDENCE,
6048                  INCOMPATABILITY_GRP_CODE,
6049                  APPLIED_FLAG,
6050                  AUTOMATIC_FLAG,
6051                  OVERRIDE_FLAG,
6052                  MODIFIER_LEVEL_CODE,
6053                  BENEFIT_QTY,
6054                  BENEFIT_UOM_CODE,
6055                  LIST_LINE_NO,
6056                  ACCRUAL_FLAG,
6057                  ACCRUAL_CONVERSION_RATE,
6058                  ESTIM_ACCRUAL_RATE,
6059                  CHARGE_TYPE_CODE,
6060                  CHARGE_SUBTYPE_CODE,
6061 		 PROCESS_CODE,
6062 		 LINE_QUANTITY,
6063 		 UPDATED_FLAG, -- begin shu, fix Bug 2599822
6064 		 CALCULATION_CODE,
6065 		 CHANGE_REASON_CODE,
6066 		 CHANGE_REASON_TEXT,
6067                  ACCUM_CONTEXT, -- accum range break
6068                  ACCUM_ATTRIBUTE, -- accum range break
6069                  ACCUM_ATTR_RUN_SRC_FLAG
6070                 ,BREAK_UOM_CODE /* Proration */
6071                 ,BREAK_UOM_CONTEXT /* Proration */
6072                 ,BREAK_UOM_ATTRIBUTE /* Proration */
6073          )
6074   VALUES (
6075                  p_LINE_DETAIL_INDEX(i),
6076                  'NULL',
6077                  p_PRICE_BREAK_TYPE_CODE(i),
6078                  p_LINE_INDEX(i),
6079                  p_LIST_HEADER_ID(i),
6080                  p_LIST_LINE_ID(i),
6081                  p_LIST_LINE_TYPE_CODE(i),
6082                  p_LIST_TYPE_CODE(i),
6083                  p_PRICING_GROUP_SEQUENCE(i),
6084                  p_PRICING_PHASE_ID(i),
6085                  p_OPERAND_CALCULATION_CODE(i),
6086                  p_OPERAND_VALUE(i),
6087                  p_SUBSTITUTION_TYPE_CODE(i),
6088                  p_SUBSTITUTION_VALUE_FROM(i),
6089                  p_SUBSTITUTION_VALUE_TO(i),
6090                  p_PRICE_FORMULA_ID(i),
6091                  G_STATUS_NEW,
6092                  p_PRODUCT_PRECEDENCE(i),
6093                  p_INCOMPATABLILITY_GRP_CODE(i),
6094                  p_APPLIED_FLAG(i),
6095                  p_AUTOMATIC_FLAG(i),
6096                  p_OVERRIDE_FLAG(i),
6097                  p_MODIFIER_LEVEL_CODE(i),
6098                  p_BENEFIT_QTY(i),
6099                  p_BENEFIT_UOM_CODE(i),
6100                  p_LIST_LINE_NO(i),
6101                  p_ACCRUAL_FLAG(i),
6102                  p_ACCRUAL_CONVERSION_RATE(i),
6103                  p_ESTIM_ACCRUAL_RATE(i),
6104                  p_CHARGE_TYPE_CODE(i),
6105                  p_CHARGE_SUBTYPE_CODE(i),
6106 		 G_STATUS_NEW,
6107 		 p_LINE_QUANTITY(i),
6108 		 p_UPDATED_FLAG(i),
6109 		 p_CALCULATION_CODE(i),
6110 		 p_CHANGE_REASON_CODE(i),
6111 		 p_CHANGE_REASON_TEXT(i),
6112                  p_ACCUM_CONTEXT(i), -- accum range break
6113                  p_ACCUM_ATTRIBUTE(i), -- accum range break
6114                  p_ACCUM_FLAG(i)
6115                 ,p_BREAK_UOM_CODE(i) /* Proration */
6116                 ,p_BREAK_UOM_CONTEXT(i) /* Proration */
6117                 ,p_BREAK_UOM_ATTRIBUTE(i) /* Proration */
6118           );
6119 --added by yangli for Java Engine project
6120 ELSE
6121  IF l_debug = FND_API.G_TRUE THEN
6122         ENGINE_DEBUG('Java Engine Installed ----------');
6123  END IF;
6124 QP_PREQ_GRP.INSERT_LDETS2_AT
6125                 (p_LINE_DETAIL_INDEX           ,
6126                  p_LINE_DETAIL_TYPE_CODE       ,
6127                  p_PRICE_BREAK_TYPE_CODE       ,
6128                  p_LINE_INDEX                  ,
6129                  p_LIST_HEADER_ID              ,
6130                  p_LIST_LINE_ID                ,
6131                  p_LIST_LINE_TYPE_CODE         ,
6132                  p_LIST_TYPE_CODE              ,
6133                  p_PRICING_GROUP_SEQUENCE      ,
6134                  p_PRICING_PHASE_ID            ,
6135                  p_OPERAND_CALCULATION_CODE    ,
6136                  p_OPERAND_VALUE               ,
6137                  p_SUBSTITUTION_TYPE_CODE      ,
6138                  p_SUBSTITUTION_VALUE_FROM     ,
6139                  p_SUBSTITUTION_VALUE_TO       ,
6140                  p_PRICE_FORMULA_ID            ,
6141                  p_PRODUCT_PRECEDENCE          ,
6142                  p_INCOMPATABLILITY_GRP_CODE   ,
6143                  p_APPLIED_FLAG                ,
6144                  p_AUTOMATIC_FLAG              ,
6145                  p_OVERRIDE_FLAG               ,
6146                  p_MODIFIER_LEVEL_CODE         ,
6147                  p_BENEFIT_QTY                 ,
6148                  p_BENEFIT_UOM_CODE            ,
6149                  p_LIST_LINE_NO                ,
6150 
6151                  p_ACCRUAL_FLAG                ,
6152 
6153                  p_ACCRUAL_CONVERSION_RATE     ,
6154                  p_ESTIM_ACCRUAL_RATE          ,
6155 
6156                  p_CHARGE_TYPE_CODE            ,
6157                  p_CHARGE_SUBTYPE_CODE         ,
6158                  p_LINE_QUANTITY               ,
6159                  p_UPDATED_FLAG                ,
6160                  p_CALCULATION_CODE            ,
6161                  p_CHANGE_REASON_CODE          ,
6162                  p_CHANGE_REASON_TEXT          ,
6163                  p_ACCUM_CONTEXT, -- accum range break
6164                  p_ACCUM_ATTRIBUTE, -- accum range break
6165                  p_ACCUM_FLAG,
6166                  p_BREAK_UOM_CODE, /* Proration */
6167                  p_BREAK_UOM_CONTEXT, /* Proration */
6168                  p_BREAK_UOM_ATTRIBUTE, /* Proration */
6169                  x_status_code                 ,
6170                  x_status_text                 );
6171 END IF;
6172 --added by yangli for Java Engine project
6173 
6174 EXCEPTION
6175   WHEN OTHERS THEN
6176   x_status_code := FND_API.G_RET_STS_ERROR;
6177   x_status_text :=l_routine||' '||SQLERRM;
6178   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6179   engine_debug(l_routine||' '||SQLERRM);
6180   engine_debug(SQLERRM);
6181   END IF;
6182 END;
6183 
6184 /*+----------------------------------------------------------------------
6185   |Procedure INSERT_LDETS_PVT
6186   +----------------------------------------------------------------------
6187 */
6188 PROCEDURE INSERT_LDETS_PVT
6189                 (p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
6190                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6191                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6192                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
6193                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
6194                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
6195                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
6196                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
6197                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
6198                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6199                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6200                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6201                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6202                  p_NET_AMOUNT_FLAG             IN VARCHAR_TYPE, --2720717, net_amount
6203                  p_ASK_FOR_FLAG                IN VARCHAR_TYPE,
6204                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6205                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
6206                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
6207                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6208                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6209                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
6210                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6211                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6212                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6213                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
6214                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6215                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6216                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6217                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6218                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6219                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6220                  p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6221                  p_HEADER_LIMIT_EXISTS         IN VARCHAR_TYPE,
6222                  p_LINE_LIMIT_EXISTS           IN VARCHAR_TYPE,
6223                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6224                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6225                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6226                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6227                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6228                  x_status_code                 OUT NOCOPY VARCHAR2,
6229                  x_status_text                 OUT NOCOPY VARCHAR2)
6230 AS
6231 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS_PVT';
6232 
6233 BEGIN
6234 
6235    FORALL i in p_line_index.FIRST..p_line_index.LAST
6236    INSERT INTO qp_npreq_ldets_tmp
6237                 (LINE_DETAIL_INDEX,
6238                  LINE_DETAIL_TYPE_CODE,
6239                  PRICE_BREAK_TYPE_CODE,
6240                  LINE_INDEX,
6241                  CREATED_FROM_LIST_HEADER_ID,
6242                  CREATED_FROM_LIST_LINE_ID,
6243                  CREATED_FROM_LIST_LINE_TYPE,
6244                  CREATED_FROM_LIST_TYPE_CODE,
6245                  CREATED_FROM_SQL,
6246                  PRICING_GROUP_SEQUENCE,
6247                  PRICING_PHASE_ID,
6248                  OPERAND_CALCULATION_CODE,
6249                  OPERAND_VALUE,
6250                  NET_AMOUNT_FLAG,     --2720717, net_amount
6251                  ASK_FOR_FLAG,
6252                  PRICE_FORMULA_ID,
6253                  PRICING_STATUS_CODE,
6254                  PRICING_STATUS_TEXT,
6255                  PRODUCT_PRECEDENCE,
6256                  INCOMPATABILITY_GRP_CODE,
6257                  PROCESSED_FLAG,
6258                  APPLIED_FLAG,
6259                  AUTOMATIC_FLAG,
6260                  OVERRIDE_FLAG,
6261                  PRIMARY_UOM_FLAG,
6262                  MODIFIER_LEVEL_CODE,
6263                  BENEFIT_QTY,
6264                  BENEFIT_UOM_CODE,
6265                  LIST_LINE_NO,
6266                  ACCRUAL_FLAG,
6267                  ACCRUAL_CONVERSION_RATE,
6268                  ESTIM_ACCRUAL_RATE,
6269                  HEADER_LIMIT_EXISTS,
6270                  LINE_LIMIT_EXISTS,
6271 		 PROCESS_CODE,
6272                  CHARGE_TYPE_CODE,
6273                  CHARGE_SUBTYPE_CODE,
6274                  ACCUM_CONTEXT,
6275                  ACCUM_ATTRIBUTE,
6276                  ACCUM_ATTR_RUN_SRC_FLAG)
6277    VALUES (      p_LINE_DETAIL_INDEX(i),
6278                  p_LINE_DETAIL_TYPE_CODE(i),
6279                  p_PRICE_BREAK_TYPE_CODE(i),
6280                  p_LINE_INDEX(i),
6281                  p_CREATED_FROM_LIST_HEADER_ID(i),
6282                  p_CREATED_FROM_LIST_LINE_ID(i),
6283                  p_CREATED_FROM_LIST_LINE_TYPE(i),
6284                  p_CREATED_FROM_LIST_TYPE_CODE(i),
6285                  p_CREATED_FROM_SQL(i),
6286                  p_PRICING_GROUP_SEQUENCE(i),
6287                  p_PRICING_PHASE_ID(i),
6288                  p_OPERAND_CALCULATION_CODE(i),
6289                  p_OPERAND_VALUE(i),
6290                  p_NET_AMOUNT_FLAG(i),      --2720717, net_amount
6291                  p_ASK_FOR_FLAG(i),
6292                  p_PRICE_FORMULA_ID(i),
6293                  p_PRICING_STATUS_CODE(i),
6294                  p_PRICING_STATUS_TEXT(i),
6295                  p_PRODUCT_PRECEDENCE(i),
6296                  p_INCOMPATABLILITY_GRP_CODE(i),
6297                  p_PROCESSED_FLAG(i),
6298                  p_APPLIED_FLAG(i),
6299                  p_AUTOMATIC_FLAG(i),
6300                  p_OVERRIDE_FLAG(i),
6301                  p_PRIMARY_UOM_FLAG(i),
6302                  p_MODIFIER_LEVEL_CODE(i),
6303                  p_BENEFIT_QTY(i),
6304                  p_BENEFIT_UOM_CODE(i),
6305                  p_LIST_LINE_NO(i),
6306                  p_ACCRUAL_FLAG(i),
6307                  p_ACCRUAL_CONVERSION_RATE(i),
6308                  p_ESTIM_ACCRUAL_RATE(i),
6309                  decode(p_HEADER_LIMIT_EXISTS(i),'Y','Y',decode(p_LINE_LIMIT_EXISTS(i),'Y','Y','N')),
6310                  p_LINE_LIMIT_EXISTS(i),
6311 		 G_STATUS_NEW,
6312                  p_CHARGE_TYPE_CODE(i),
6313                  p_CHARGE_SUBTYPE_CODE(i),
6314                  p_ACCUM_CONTEXT(i),
6315                  p_ACCUM_ATTRIBUTE(i),
6316                  p_ACCUM_FLAG(i));
6317 EXCEPTION
6318   WHEN OTHERS THEN
6319   x_status_code := FND_API.G_RET_STS_ERROR;
6320   x_status_text :=l_routine||' '||SQLERRM;
6321   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6322   engine_debug(l_routine||' '||SQLERRM);
6323   engine_debug(SQLERRM);
6324   END IF;
6325 END;
6326 
6327 /*+----------------------------------------------------------------------
6328   |Procedure Public INSERT_LDETS2_AT
6329   +----------------------------------------------------------------------
6330 */
6331 PROCEDURE INSERT_LDETS2_AT
6332                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
6333                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6334                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6335                  p_LIST_PRICE                  IN NUMBER_TYPE,
6336                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
6337                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
6338                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
6339                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
6340                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
6341                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
6342                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6343                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6344                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6345                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6346                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
6347                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
6348                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
6349                  p_ASK_FOR_FLAG                IN VARCHAR_TYPE,
6350                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6351                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
6352                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
6353                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6354                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6355                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
6356                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6357                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6358                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6359                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
6360                  p_PRINT_ON_INVOICE_FLAG       IN VARCHAR_TYPE,
6361                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6362                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6363                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6364                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6365                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6366                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6367                  p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6368                  p_RECURRING_FLAG              IN VARCHAR_TYPE,
6369                  p_SELECTED_VOLUME_ATTR        IN VARCHAR_TYPE,
6370                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
6371                  p_HEADER_LIMIT_EXISTS         IN VARCHAR_TYPE,
6372                  p_LINE_LIMIT_EXISTS           IN VARCHAR_TYPE,
6373                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6374                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6375                  p_CURRENCY_DETAIL_ID          IN NUMBER_TYPE,
6376                  p_CURRENCY_HEADER_ID          IN NUMBER_TYPE,
6377                  p_SELLING_ROUNDING_FACTOR     IN NUMBER_TYPE,
6378                  p_ORDER_CURRENCY              IN VARCHAR_TYPE,
6379                  p_PRICING_EFFECTIVE_DATE      IN DATE_TYPE,
6380                  p_BASE_CURRENCY_CODE          IN VARCHAR_TYPE,
6381 		 p_LINE_QUANTITY	       IN NUMBER_TYPE,
6382                  p_UPDATED_FLAG                IN VARCHAR_TYPE,
6383 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
6384 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
6385 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
6386                  p_PRICE_ADJUSTMENT_ID         IN NUMBER_TYPE, -- bug 3099847
6387                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6388                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6389                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6390 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
6391 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
6392 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
6393                  p_PROCESS_CODE                IN VARCHAR_TYPE, -- 3215497
6394                  x_status_code                 OUT NOCOPY VARCHAR2,
6395                  x_status_text                 OUT NOCOPY VARCHAR2)
6396 AS
6397 PRAGMA AUTONOMOUS_TRANSACTION;
6398 l_request_id number;
6399 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2';
6400 BEGIN
6401   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6402     QP_PREQ_GRP.engine_debug('G_LINE_DETAIL_INDEX b4 insert_ldets2 '||G_LINE_DETAIL_INDEX);
6403     QP_PREQ_GRP.engine_debug('current request_id: '||sys_context('qp_context','request_id'));
6404   END IF;
6405   l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
6406 
6407   FORALL i in p_line_index.FIRST..p_line_index.LAST
6408   INSERT INTO QP_INT_LDETS_T
6409                 ( LINE_DETAIL_INDEX,
6410                  LINE_DETAIL_TYPE_CODE,
6411                  PRICE_BREAK_TYPE_CODE,
6412                  LINE_INDEX,
6413                  CREATED_FROM_LIST_HEADER_ID,
6414                  CREATED_FROM_LIST_LINE_ID,
6415                  CREATED_FROM_LIST_LINE_TYPE,
6416                  CREATED_FROM_LIST_TYPE_CODE,
6417                  CREATED_FROM_SQL,
6418                  PRICING_GROUP_SEQUENCE,
6419                  PRICING_PHASE_ID,
6420                  OPERAND_CALCULATION_CODE,
6421                  OPERAND_VALUE,
6422                  SUBSTITUTION_TYPE_CODE,
6423                  SUBSTITUTION_VALUE_FROM,
6424                  SUBSTITUTION_VALUE_TO,
6425                  ASK_FOR_FLAG,
6426                  PRICE_FORMULA_ID,
6427                  PRICING_STATUS_CODE,
6428                  PRICING_STATUS_TEXT,
6429                  PRODUCT_PRECEDENCE,
6430                  INCOMPATABILITY_GRP_CODE,
6431                  PROCESSED_FLAG,
6432                  APPLIED_FLAG,
6433                  AUTOMATIC_FLAG,
6434                  OVERRIDE_FLAG,
6435                  PRINT_ON_INVOICE_FLAG,
6436                  PRIMARY_UOM_FLAG,
6437                  MODIFIER_LEVEL_CODE,
6438                  BENEFIT_QTY,
6439                  BENEFIT_UOM_CODE,
6440                  LIST_LINE_NO,
6441                  ACCRUAL_FLAG,
6442                  ACCRUAL_CONVERSION_RATE,
6443                  ESTIM_ACCRUAL_RATE,
6444                  RECURRING_FLAG,
6445                  SELECTED_VOLUME_ATTR,
6446                  ROUNDING_FACTOR,
6447                  HEADER_LIMIT_EXISTS,
6448                  LINE_LIMIT_EXISTS,
6449                  CHARGE_TYPE_CODE,
6450                  CHARGE_SUBTYPE_CODE,
6451                  CURRENCY_DETAIL_ID, /*sunilpandey */
6452                  CURRENCY_HEADER_ID, /*vivek */
6453                  SELLING_ROUNDING_FACTOR, /*vivek */
6454                  ORDER_CURRENCY, /*vivek */
6455                  PRICING_EFFECTIVE_DATE,/*vivek */
6456                  BASE_CURRENCY_CODE,/*vivek */
6457                  PROCESS_CODE,
6458                  LINE_QUANTITY,
6459                  UPDATED_FLAG, -- begin shu fix bug 2599822
6460                  CALCULATION_CODE,
6461                  CHANGE_REASON_CODE,
6462                  CHANGE_REASON_TEXT, -- end shu fix bug 2599822
6463                  PRICE_ADJUSTMENT_ID, -- bug 3099847
6464                  ACCUM_CONTEXT,          -- accum range break
6465                  ACCUM_ATTRIBUTE,        -- accum range break
6466                  ACCUM_ATTR_RUN_SRC_FLAG, -- accum range break
6467                  BREAK_UOM_CODE, /* Proration */
6468                  BREAK_UOM_CONTEXT, /* Proration */
6469                  BREAK_UOM_ATTRIBUTE, /* Proration */
6470                  request_id
6471                  )
6472     VALUES (     p_LINE_DETAIL_INDEX(i),
6473                  p_LINE_DETAIL_TYPE_CODE(i),
6474                  p_PRICE_BREAK_TYPE_CODE(i),
6475                  p_LINE_INDEX(i),
6476                  p_CREATED_FROM_LIST_HEADER_ID(i),
6477                  p_CREATED_FROM_LIST_LINE_ID(i),
6478                  p_CREATED_FROM_LIST_LINE_TYPE(i),
6479                  p_CREATED_FROM_LIST_TYPE_CODE(i),
6480                  p_CREATED_FROM_SQL(i),
6481                  p_PRICING_GROUP_SEQUENCE(i),
6482                  p_PRICING_PHASE_ID(i),
6483                  p_OPERAND_CALCULATION_CODE(i),
6484                  p_OPERAND_VALUE(i),
6485                  p_SUBSTITUTION_TYPE_CODE(i),
6486                  p_SUBSTITUTION_VALUE_FROM(i),
6487                  p_SUBSTITUTION_VALUE_TO(i),
6488                  p_ASK_FOR_FLAG(i),
6489                  p_PRICE_FORMULA_ID(i),
6490                  p_PRICING_STATUS_CODE(i),
6491                  p_PRICING_STATUS_TEXT(i),
6492                  p_PRODUCT_PRECEDENCE(i),
6493                  p_INCOMPATABLILITY_GRP_CODE(i),
6494                  p_PROCESSED_FLAG(i),
6495                  p_APPLIED_FLAG(i),
6496                  p_AUTOMATIC_FLAG(i),
6497                  p_OVERRIDE_FLAG(i),
6498                  p_PRINT_ON_INVOICE_FLAG(i),
6499                  p_PRIMARY_UOM_FLAG(i),
6500                  p_MODIFIER_LEVEL_CODE(i),
6501                  p_BENEFIT_QTY(i),
6502                  p_BENEFIT_UOM_CODE(i),
6503                  p_LIST_LINE_NO(i),
6504                  p_ACCRUAL_FLAG(i),
6505                  p_ACCRUAL_CONVERSION_RATE(i),
6506                  p_ESTIM_ACCRUAL_RATE(i),
6507                  p_RECURRING_FLAG(i),
6508                  p_SELECTED_VOLUME_ATTR(i),
6509                  p_ROUNDING_FACTOR(i),
6510                  decode(p_HEADER_LIMIT_EXISTS(i),'Y','Y',decode(p_LINE_LIMIT_EXISTS(i),'Y','Y','N')),
6511                  p_LINE_LIMIT_EXISTS(i),
6512                  p_CHARGE_TYPE_CODE(i),
6513                  p_CHARGE_SUBTYPE_CODE(i),
6514                  p_CURRENCY_DETAIL_ID(i),    /* sunilpandey */
6515                  p_CURRENCY_HEADER_ID(i),    /* vivek */
6516                  p_SELLING_ROUNDING_FACTOR(i),    /* vivek */
6517                  p_ORDER_CURRENCY(i),        /* vivek */
6518                  p_PRICING_EFFECTIVE_DATE(i),      /* vivek */
6519                  p_BASE_CURRENCY_CODE(i),         /* vivek */
6520                  p_PROCESS_CODE(i), -- 3215497, changed from G_STATUS_NEW
6521                  p_LINE_QUANTITY(i),
6522                  p_UPDATED_FLAG(i),  -- begin shu fix bug 2599822
6523                  p_CALCULATION_CODE(i),
6524                  p_CHANGE_REASON_CODE(i),
6525                  p_CHANGE_REASON_TEXT(i),     -- end shu fix bug 2599822
6526                  p_PRICE_ADJUSTMENT_ID(i), -- bug 3099847
6527                  p_ACCUM_CONTEXT(i),   -- accum range break
6528                  p_ACCUM_ATTRIBUTE(i), -- accum range break
6529                  p_ACCUM_FLAG(i),       -- accum range break
6530                  p_BREAK_UOM_CODE(i), /* Proration */
6531                  p_BREAK_UOM_CONTEXT(i), /* Proration */
6532                  p_BREAK_UOM_ATTRIBUTE(i), /* Proration */
6533                  l_request_id
6534              );
6535   QP_PREQ_GRP.G_INT_LDETS_NO := QP_PREQ_GRP.G_INT_LDETS_NO + p_LINE_DETAIL_INDEX.count;
6536   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6537     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_LDETS_NO='||QP_PREQ_GRP.G_INT_LDETS_NO);
6538   END IF;
6539   COMMIT;
6540 
6541 EXCEPTION
6542   WHEN OTHERS THEN
6543   x_status_code := FND_API.G_RET_STS_ERROR;
6544   x_status_text :=l_routine||' '||SQLERRM;
6545   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6546     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
6547     QP_PREQ_GRP.engine_debug(SQLERRM);
6548   END IF;
6549 END;
6550 
6551 /*+----------------------------------------------------------------------
6552   |Procedure Public INSERT_LDETS2
6553   +----------------------------------------------------------------------
6554 */
6555 PROCEDURE INSERT_LDETS2
6556                 (p_LINE_DETAIL_index           IN PLS_INTEGER_TYPE,
6557                  p_LINE_DETAIL_TYPE_CODE       IN VARCHAR_TYPE,
6558                  p_PRICE_BREAK_TYPE_CODE       IN VARCHAR_TYPE,
6559                  p_LIST_PRICE                  IN NUMBER_TYPE,
6560                  p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
6561                  p_CREATED_FROM_LIST_HEADER_ID IN NUMBER_TYPE,
6562                  p_CREATED_FROM_LIST_LINE_ID   IN NUMBER_TYPE,
6563                  p_CREATED_FROM_LIST_LINE_TYPE IN VARCHAR_TYPE,
6564                  p_CREATED_FROM_LIST_TYPE_CODE IN VARCHAR_TYPE,
6565                  p_CREATED_FROM_SQL            IN VARCHAR_TYPE,
6566                  p_PRICING_GROUP_SEQUENCE      IN PLS_INTEGER_TYPE,
6567                  P_PRICING_PHASE_ID            IN PLS_INTEGER_TYPE,
6568                  p_OPERAND_CALCULATION_CODE    IN VARCHAR_TYPE,
6569                  p_OPERAND_VALUE               IN VARCHAR_TYPE,
6570                  p_SUBSTITUTION_TYPE_CODE      IN VARCHAR_TYPE,
6571                  p_SUBSTITUTION_VALUE_FROM     IN VARCHAR_TYPE,
6572                  p_SUBSTITUTION_VALUE_TO       IN VARCHAR_TYPE,
6573                  p_ASK_FOR_FLAG                IN VARCHAR_TYPE,
6574                  p_PRICE_FORMULA_ID            IN NUMBER_TYPE,
6575                  p_PRICING_STATUS_CODE         IN VARCHAR_TYPE,
6576                  p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE,
6577                  p_PRODUCT_PRECEDENCE          IN PLS_INTEGER_TYPE,
6578                  p_INCOMPATABLILITY_GRP_CODE   IN VARCHAR_TYPE,
6579                  p_PROCESSED_FLAG              IN VARCHAR_TYPE,
6580                  p_APPLIED_FLAG                IN VARCHAR_TYPE,
6581                  p_AUTOMATIC_FLAG              IN VARCHAR_TYPE,
6582                  p_OVERRIDE_FLAG               IN VARCHAR_TYPE,
6583                  p_PRIMARY_UOM_FLAG            IN VARCHAR_TYPE,
6584                  p_PRINT_ON_INVOICE_FLAG       IN VARCHAR_TYPE,
6585                  p_MODIFIER_LEVEL_CODE         IN VARCHAR_TYPE,
6586                  p_BENEFIT_QTY                 IN NUMBER_TYPE,
6587                  p_BENEFIT_UOM_CODE            IN VARCHAR_TYPE,
6588                  p_LIST_LINE_NO                IN VARCHAR_TYPE,
6589                  p_ACCRUAL_FLAG                IN VARCHAR_TYPE,
6590                  p_ACCRUAL_CONVERSION_RATE     IN NUMBER_TYPE,
6591                  p_ESTIM_ACCRUAL_RATE          IN NUMBER_TYPE,
6592                  p_RECURRING_FLAG              IN VARCHAR_TYPE,
6593                  p_SELECTED_VOLUME_ATTR        IN VARCHAR_TYPE,
6594                  p_ROUNDING_FACTOR             IN PLS_INTEGER_TYPE,
6595                  p_HEADER_LIMIT_EXISTS         IN VARCHAR_TYPE,
6596                  p_LINE_LIMIT_EXISTS           IN VARCHAR_TYPE,
6597                  p_CHARGE_TYPE_CODE            IN VARCHAR_TYPE,
6598                  p_CHARGE_SUBTYPE_CODE         IN VARCHAR_TYPE,
6599                  p_CURRENCY_DETAIL_ID          IN NUMBER_TYPE,
6600                  p_CURRENCY_HEADER_ID          IN NUMBER_TYPE,
6601                  p_SELLING_ROUNDING_FACTOR     IN NUMBER_TYPE,
6602                  p_ORDER_CURRENCY              IN VARCHAR_TYPE,
6603                  p_PRICING_EFFECTIVE_DATE      IN DATE_TYPE,
6604                  p_BASE_CURRENCY_CODE          IN VARCHAR_TYPE,
6605 		 p_LINE_QUANTITY	       IN NUMBER_TYPE,
6606                  p_UPDATED_FLAG                IN VARCHAR_TYPE,
6607 		 p_CALCULATION_CODE            IN VARCHAR_TYPE,
6608 		 p_CHANGE_REASON_CODE          IN VARCHAR_TYPE,
6609 		 p_CHANGE_REASON_TEXT          IN VARCHAR_TYPE,
6610 		 p_PRICE_ADJUSTMENT_ID         IN NUMBER_TYPE, -- bug 3099847
6611                  p_ACCUM_CONTEXT               IN VARCHAR_TYPE, -- accum range break
6612                  p_ACCUM_ATTRIBUTE             IN VARCHAR_TYPE, -- accum range break
6613                  p_ACCUM_FLAG                  IN VARCHAR_TYPE, -- accum range break
6614 		 p_BREAK_UOM_CODE              IN VARCHAR_TYPE, /* Proration*/
6615 		 p_BREAK_UOM_CONTEXT           IN VARCHAR_TYPE, /* Proration*/
6616 		 p_BREAK_UOM_ATTRIBUTE         IN VARCHAR_TYPE, /* Proration*/
6617                  p_PROCESS_CODE                IN VARCHAR_TYPE, -- 3215497
6618                  x_status_code                 OUT NOCOPY VARCHAR2,
6619                  x_status_text                 OUT NOCOPY VARCHAR2)
6620 AS
6621 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_LDETS2';
6622 --added by yangli for Java Engine project
6623 l_debug varchar2(3);
6624 --added by yangli for Java Engine project
6625 BEGIN
6626 --added by yangli for Java Engine project
6627 -- Set the global variable G_DEBUG_ENGINE
6628   QP_PREQ_GRP.Set_QP_Debug;
6629 
6630   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
6631 --added by yangli for Java Engine project
6632 
6633 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
6634 engine_debug('G_LINE_DETAIL_INDEX b4 insert_ldets2 '||G_LINE_DETAIL_INDEX);
6635 
6636 engine_debug('current request_id: '||sys_context('qp_context','request_id'));
6637 
6638 END IF;
6639 -- sunilpandey, begin defaulting for multi-currency
6640 IF (p_currency_detail_id.count = 0) THEN -- p_currency_detail_id not passed at all
6641  FOR i in p_line_index.FIRST .. p_line_index.LAST
6642  LOOP
6643   G_CURRENCY_DETAIL_ID_DEF_TBL(i) := NULL;
6644  END LOOP;
6645 ELSE
6646  FOR i in p_line_index.FIRST .. p_line_index.LAST
6647  LOOP
6648   G_CURRENCY_DETAIL_ID_DEF_TBL(i) := p_currency_detail_id(i);
6649  END LOOP;
6650 END IF;
6651 -- sunilpandey, begin defaulting for multi-currency
6652 
6653 -- vivek, begin defaulting for multi-currency
6654 IF (p_currency_header_id.count = 0) THEN -- p_currency_header_id not passed at all
6655  FOR i in p_line_index.FIRST .. p_line_index.LAST
6656  LOOP
6657   G_CURRENCY_HEADER_ID_DEF_TBL(i) := NULL;
6658  END LOOP;
6659 ELSE
6660  FOR i in p_line_index.FIRST .. p_line_index.LAST
6661  LOOP
6662   G_CURRENCY_HEADER_ID_DEF_TBL(i) := p_currency_header_id(i);
6663  END LOOP;
6664 END IF;
6665 
6666 -- vivek, begin defaulting for multi-currency - selling_rounding_factor
6667 IF (p_selling_rounding_factor.count = 0) THEN -- p_selling_rounding_factor not passed at all
6668  FOR i in p_line_index.FIRST .. p_line_index.LAST
6669  LOOP
6670   G_SELLING_ROUNDING_DEF_TBL(i) := NULL;
6671  END LOOP;
6672 ELSE
6673  FOR i in p_line_index.FIRST .. p_line_index.LAST
6674  LOOP
6675   G_SELLING_ROUNDING_DEF_TBL(i) := p_selling_rounding_factor(i);
6676  END LOOP;
6677 END IF;
6678 
6679 IF (p_order_currency.count = 0) THEN -- p_order_currency not passed at all
6680  FOR i in p_line_index.FIRST .. p_line_index.LAST
6681  LOOP
6682   G_ORDER_CURRENCY_DEF_TBL(i) := NULL;
6683  END LOOP;
6684 ELSE
6685  FOR i in p_line_index.FIRST .. p_line_index.LAST
6686  LOOP
6687   G_ORDER_CURRENCY_DEF_TBL(i) := p_order_currency(i);
6688  END LOOP;
6689 END IF;
6690 
6691 IF (p_pricing_effective_date.count = 0) THEN -- p_pricing_effective_date not passed at all
6692  FOR i in p_line_index.FIRST .. p_line_index.LAST
6693  LOOP
6694   G_PRICING_EFF_DATE_DEF_TBL(i) := NULL;
6695  END LOOP;
6696 ELSE
6697  FOR i in p_line_index.FIRST .. p_line_index.LAST
6698  LOOP
6699   G_PRICING_EFF_DATE_DEF_TBL(i) := p_pricing_effective_date(i);
6700  END LOOP;
6701 END IF;
6702 
6703 IF (p_base_currency_code.count = 0) THEN -- p_base_currency_code not passed at all
6704  FOR i in p_line_index.FIRST .. p_line_index.LAST
6705  LOOP
6706   G_BASE_CURRENCY_DEF_TBL(i) := NULL;
6707  END LOOP;
6708 ELSE
6709  FOR i in p_line_index.FIRST .. p_line_index.LAST
6710  LOOP
6711   G_BASE_CURRENCY_DEF_TBL(i) := p_base_currency_code(i);
6712  END LOOP;
6713 END IF;
6714 
6715 -- vivek, end defaulting for multi-currency
6716 
6717 --added by spgopal for user-passed line_quantity
6718 IF p_LINE_QUANTITY.count = 0
6719 THEN
6720 FOR i IN p_LINE_DETAIL_INDEX.FIRST..p_LINE_DETAIL_INDEX.LAST
6721 LOOP
6722 	G_LDET_LINE_QUANTITY_TBL(i) := NULL;
6723 END LOOP;
6724 ELSE
6725 FOR i IN p_LINE_DETAIL_INDEX.FIRST..p_LINE_DETAIL_INDEX.LAST
6726 LOOP
6727 	G_LDET_LINE_QUANTITY_TBL(i) := p_LINE_QUANTITY(i);
6728 END LOOP;
6729 END IF;--p_LINE_QUANTITY.count
6730 
6731 -- begin shu fix bug 2599822
6732 IF p_UPDATED_FLAG.count = 0 THEN
6733   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6734     G_UPDATED_FLAG_DEF_TBL(i) := NULL;
6735   END LOOP;
6736 ELSE
6737   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6738     G_UPDATED_FLAG_DEF_TBL(i) := p_UPDATED_FLAG(i);
6739   END LOOP;
6740 END IF;
6741 
6742 IF p_CALCULATION_CODE.count = 0 THEN
6743   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6744     G_CALCULATION_CODE_DEF_TBL(i) := NULL;
6745   END LOOP;
6746 ELSE
6747   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6748     G_CALCULATION_CODE_DEF_TBL(i) := p_CALCULATION_CODE(i);
6749   END LOOP;
6750 END IF;
6751 
6752 
6753 IF p_CHANGE_REASON_CODE.count = 0 THEN
6754   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6755     G_CHANGE_REASON_CODE_DEF_TBL(i) := NULL;
6756   END LOOP;
6757 ELSE
6758   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6759     G_CHANGE_REASON_CODE_DEF_TBL(i) := p_CHANGE_REASON_CODE(i);
6760   END LOOP;
6761 END IF;
6762 
6763 IF p_CHANGE_REASON_TEXT.count = 0 THEN
6764   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6765     G_CHANGE_REASON_TEXT_DEF_TBL(i) := NULL;
6766   END LOOP;
6767 ELSE
6768   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6769     G_CHANGE_REASON_TEXT_DEF_TBL(i) := p_CHANGE_REASON_TEXT(i);
6770   END LOOP;
6771 END IF; -- end shu fix bug 2599822
6772 
6773 -- bug 3099847
6774 IF p_PRICE_ADJUSTMENT_ID.count = 0 THEN
6775   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6776     G_PRICE_ADJUSTMENT_ID_DEF_TBL(i) := null;
6777   END LOOP;
6778 ELSE
6779   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6780     G_PRICE_ADJUSTMENT_ID_DEF_TBL(i) := p_PRICE_ADJUSTMENT_ID(i);
6781   END LOOP;
6782 END IF;
6783 
6784 -- begin accum range break
6785 IF p_ACCUM_CONTEXT.count = 0 THEN
6786   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6787     G_ACCUM_CONTEXT_DEF_TBL(i) := null;
6788   END LOOP;
6789 ELSE
6790   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6791     G_ACCUM_CONTEXT_DEF_TBL(i) := p_ACCUM_CONTEXT(i);
6792   END LOOP;
6793 END IF;
6794 
6795 IF p_ACCUM_ATTRIBUTE.count = 0 THEN
6796   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6797     G_ACCUM_ATTRIBUTE_DEF_TBL(i) := null;
6798   END LOOP;
6799 ELSE
6800   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6801     G_ACCUM_ATTRIBUTE_DEF_TBL(i) := p_ACCUM_ATTRIBUTE(i);
6802   END LOOP;
6803 END IF;
6804 
6805 IF p_ACCUM_FLAG.count = 0 THEN
6806   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6807     G_ACCUM_FLAG_DEF_TBL(i) := null;
6808   END LOOP;
6809 ELSE
6810   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6811     G_ACCUM_FLAG_DEF_TBL(i) := p_ACCUM_FLAG(i);
6812   END LOOP;
6813 END IF;
6814 -- end accum range break
6815 /* Proration defaulting START*/
6816 IF p_BREAK_UOM_CODE.count = 0 THEN
6817   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6818     G_BREAK_UOM_CODE_DEF_TBL(i) := NULL;
6819   END LOOP;
6820 ELSE
6821   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6822     G_BREAK_UOM_CODE_DEF_TBL(i) := p_BREAK_UOM_CODE(i);
6823   END LOOP;
6824 END IF;
6825 
6826 IF p_BREAK_UOM_CONTEXT.count = 0 THEN
6827   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6828     G_BREAK_UOM_CONTEXT_DEF_TBL(i) := NULL;
6829   END LOOP;
6830 ELSE
6831   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6832     G_BREAK_UOM_CONTEXT_DEF_TBL(i) := p_BREAK_UOM_CONTEXT(i);
6833   END LOOP;
6834 END IF;
6835 
6836 IF p_BREAK_UOM_ATTRIBUTE.count = 0 THEN
6837   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6838     G_BREAK_UOM_ATTRIBUTE_DEF_TBL(i) := NULL;
6839   END LOOP;
6840 ELSE
6841   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6842     G_BREAK_UOM_ATTRIBUTE_DEF_TBL(i) := p_BREAK_UOM_ATTRIBUTE(i);
6843   END LOOP;
6844 END IF;
6845 /* Proration defaulting END*/
6846 
6847 -- 3215497, defaulting process_code
6848 IF p_PROCESS_CODE.count = 0 THEN
6849   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6850     G_PROCESS_CODE_DEF_TBL(i) := G_STATUS_NEW;
6851   END LOOP;
6852 ELSE
6853   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
6854     G_PROCESS_CODE_DEF_TBL(i) := p_PROCESS_CODE(i);
6855   END LOOP;
6856 END IF;
6857 
6858 --added by yangli for Java Engine project
6859 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
6860  IF l_debug = FND_API.G_TRUE THEN
6861         ENGINE_DEBUG('Java Engine not Installed ----------');
6862  END IF;
6863 
6864 --added by yangli for Java Engine project
6865 FORALL i in p_line_index.FIRST..p_line_index.LAST
6866  INSERT INTO qp_npreq_ldets_tmp
6867                 (LINE_DETAIL_INDEX,
6868                  LINE_DETAIL_TYPE_CODE,
6869                  PRICE_BREAK_TYPE_CODE,
6870                  LINE_INDEX,
6871                  CREATED_FROM_LIST_HEADER_ID,
6872                  CREATED_FROM_LIST_LINE_ID,
6873                  CREATED_FROM_LIST_LINE_TYPE,
6874                  CREATED_FROM_LIST_TYPE_CODE,
6875                  CREATED_FROM_SQL,
6876                  PRICING_GROUP_SEQUENCE,
6877                  PRICING_PHASE_ID,
6878                  OPERAND_CALCULATION_CODE,
6879                  OPERAND_VALUE,
6880                  SUBSTITUTION_TYPE_CODE,
6881                  SUBSTITUTION_VALUE_FROM,
6882                  SUBSTITUTION_VALUE_TO,
6883                  ASK_FOR_FLAG,
6884                  PRICE_FORMULA_ID,
6885                  PRICING_STATUS_CODE,
6886                  PRICING_STATUS_TEXT,
6887                  PRODUCT_PRECEDENCE,
6888                  INCOMPATABILITY_GRP_CODE,
6889                  PROCESSED_FLAG,
6890                  APPLIED_FLAG,
6891                  AUTOMATIC_FLAG,
6892                  OVERRIDE_FLAG,
6893                  PRINT_ON_INVOICE_FLAG,
6894                  PRIMARY_UOM_FLAG,
6895                  MODIFIER_LEVEL_CODE,
6896                  BENEFIT_QTY,
6897                  BENEFIT_UOM_CODE,
6898                  LIST_LINE_NO,
6899                  ACCRUAL_FLAG,
6900                  ACCRUAL_CONVERSION_RATE,
6901                  ESTIM_ACCRUAL_RATE,
6902                  RECURRING_FLAG,
6903                  SELECTED_VOLUME_ATTR,
6904                  ROUNDING_FACTOR,
6905                  HEADER_LIMIT_EXISTS,
6906                  LINE_LIMIT_EXISTS,
6907                  CHARGE_TYPE_CODE,
6908                  CHARGE_SUBTYPE_CODE,
6909                  CURRENCY_DETAIL_ID, /*sunilpandey */
6910                  CURRENCY_HEADER_ID, /*vivek */
6911                  SELLING_ROUNDING_FACTOR, /*vivek */
6912                  ORDER_CURRENCY, /*vivek */
6913                  PRICING_EFFECTIVE_DATE,/*vivek */
6914                  BASE_CURRENCY_CODE,/*vivek */
6915 		 PROCESS_CODE,
6916 		 LINE_QUANTITY,
6917 		 UPDATED_FLAG, -- begin shu fix bug 2599822
6918 		 CALCULATION_CODE,
6919 		 CHANGE_REASON_CODE,
6920 		 CHANGE_REASON_TEXT, -- end shu fix bug 2599822
6921 		 PRICE_ADJUSTMENT_ID, -- bug 3099847
6922                  ACCUM_CONTEXT,          -- accum range break
6923                  ACCUM_ATTRIBUTE,        -- accum range break
6924                  ACCUM_ATTR_RUN_SRC_FLAG, -- accum range break
6925                  BREAK_UOM_CODE, /* Proration */
6926                  BREAK_UOM_CONTEXT, /* Proration */
6927                  BREAK_UOM_ATTRIBUTE /* Proration */
6928                  )
6929   VALUES (       p_LINE_DETAIL_INDEX(i),
6930                  p_LINE_DETAIL_TYPE_CODE(i),
6931                  p_PRICE_BREAK_TYPE_CODE(i),
6932                  p_LINE_INDEX(i),
6933                  p_CREATED_FROM_LIST_HEADER_ID(i),
6934                  p_CREATED_FROM_LIST_LINE_ID(i),
6935                  p_CREATED_FROM_LIST_LINE_TYPE(i),
6936                  p_CREATED_FROM_LIST_TYPE_CODE(i),
6937                  p_CREATED_FROM_SQL(i),
6938                  p_PRICING_GROUP_SEQUENCE(i),
6939                  p_PRICING_PHASE_ID(i),
6940                  p_OPERAND_CALCULATION_CODE(i),
6941                  p_OPERAND_VALUE(i),
6942                  p_SUBSTITUTION_TYPE_CODE(i),
6943                  p_SUBSTITUTION_VALUE_FROM(i),
6944                  p_SUBSTITUTION_VALUE_TO(i),
6945                  p_ASK_FOR_FLAG(i),
6946                  p_PRICE_FORMULA_ID(i),
6947                  p_PRICING_STATUS_CODE(i),
6948                  p_PRICING_STATUS_TEXT(i),
6949                  p_PRODUCT_PRECEDENCE(i),
6950                  p_INCOMPATABLILITY_GRP_CODE(i),
6951                  p_PROCESSED_FLAG(i),
6952                  p_APPLIED_FLAG(i),
6953                  p_AUTOMATIC_FLAG(i),
6954                  p_OVERRIDE_FLAG(i),
6955                  p_PRINT_ON_INVOICE_FLAG(i),
6956                  p_PRIMARY_UOM_FLAG(i),
6957                  p_MODIFIER_LEVEL_CODE(i),
6958                  p_BENEFIT_QTY(i),
6959                  p_BENEFIT_UOM_CODE(i),
6960                  p_LIST_LINE_NO(i),
6961                  p_ACCRUAL_FLAG(i),
6962                  p_ACCRUAL_CONVERSION_RATE(i),
6963                  p_ESTIM_ACCRUAL_RATE(i),
6964                  p_RECURRING_FLAG(i),
6965                  p_SELECTED_VOLUME_ATTR(i),
6966                  p_ROUNDING_FACTOR(i),
6967                  decode(p_HEADER_LIMIT_EXISTS(i),'Y','Y',decode(p_LINE_LIMIT_EXISTS(i),'Y','Y','N')),
6968                  p_LINE_LIMIT_EXISTS(i),
6969                  p_CHARGE_TYPE_CODE(i),
6970                  p_CHARGE_SUBTYPE_CODE(i),
6971                  G_CURRENCY_DETAIL_ID_DEF_TBL(i),    /* sunilpandey */
6972                  G_CURRENCY_HEADER_ID_DEF_TBL(i),    /* vivek */
6973                  G_SELLING_ROUNDING_DEF_TBL(i),    /* vivek */
6974                  G_ORDER_CURRENCY_DEF_TBL(i),        /* vivek */
6975                  G_PRICING_EFF_DATE_DEF_TBL(i),      /* vivek */
6976                  G_BASE_CURRENCY_DEF_TBL(i),         /* vivek */
6977 		 G_PROCESS_CODE_DEF_TBL(i), -- 3215497, changed from G_STATUS_NEW,
6978 		 G_LDET_LINE_QUANTITY_TBL(i),
6979 		 G_UPDATED_FLAG_DEF_TBL(i),  -- begin shu fix bug 2599822
6980 		 G_CALCULATION_CODE_DEF_TBL(i),
6981 		 G_CHANGE_REASON_CODE_DEF_TBL(i),
6982 		 G_CHANGE_REASON_TEXT_DEF_TBL(i),    -- end shu fix bug 2599822
6983 		 G_PRICE_ADJUSTMENT_ID_DEF_TBL(i), -- bug 3099847
6984                  G_ACCUM_CONTEXT_DEF_TBL(i),   -- accum range break
6985                  G_ACCUM_ATTRIBUTE_DEF_TBL(i), -- accum range break
6986                  G_ACCUM_FLAG_DEF_TBL(i),       -- accum range break
6987 		 G_BREAK_UOM_CODE_DEF_TBL(i), /* Proration */
6988 		 G_BREAK_UOM_CONTEXT_DEF_TBL(i), /* Proration */
6989 		 G_BREAK_UOM_ATTRIBUTE_DEF_TBL(i) /* Proration */
6990              );
6991 --added by yangli for Java Engine project
6992 ELSE
6993  IF l_debug = FND_API.G_TRUE THEN
6994         ENGINE_DEBUG('Java Engine Installed ----------');
6995  END IF;
6996   QP_PREQ_GRP.INSERT_LDETS2_AT
6997                 (p_LINE_DETAIL_index           ,
6998                  p_LINE_DETAIL_TYPE_CODE       ,
6999                  p_PRICE_BREAK_TYPE_CODE       ,
7000                  p_LIST_PRICE                  ,
7001                  p_LINE_INDEX                  ,
7002                  p_CREATED_FROM_LIST_HEADER_ID ,
7003                  p_CREATED_FROM_LIST_LINE_ID   ,
7004                  p_CREATED_FROM_LIST_LINE_TYPE ,
7005                  p_CREATED_FROM_LIST_TYPE_CODE ,
7006                  p_CREATED_FROM_SQL            ,
7007                  p_PRICING_GROUP_SEQUENCE      ,
7008                  P_PRICING_PHASE_ID            ,
7009                  p_OPERAND_CALCULATION_CODE    ,
7010                  p_OPERAND_VALUE               ,
7011                  p_SUBSTITUTION_TYPE_CODE      ,
7012                  p_SUBSTITUTION_VALUE_FROM     ,
7013                  p_SUBSTITUTION_VALUE_TO       ,
7014                  p_ASK_FOR_FLAG                ,
7015                  p_PRICE_FORMULA_ID            ,
7016                  p_PRICING_STATUS_CODE         ,
7017                  p_PRICING_STATUS_TEXT         ,
7018                  p_PRODUCT_PRECEDENCE          ,
7019                  p_INCOMPATABLILITY_GRP_CODE   ,
7020                  p_PROCESSED_FLAG              ,
7021                  p_APPLIED_FLAG                ,
7022                  p_AUTOMATIC_FLAG              ,
7023                  p_OVERRIDE_FLAG               ,
7024                  p_PRIMARY_UOM_FLAG            ,
7025                  p_PRINT_ON_INVOICE_FLAG       ,
7026                  p_MODIFIER_LEVEL_CODE         ,
7027                  p_BENEFIT_QTY                 ,
7028                  p_BENEFIT_UOM_CODE            ,
7029                  p_LIST_LINE_NO                ,
7030                  p_ACCRUAL_FLAG                ,
7031                  p_ACCRUAL_CONVERSION_RATE     ,
7032                  p_ESTIM_ACCRUAL_RATE          ,
7033                  p_RECURRING_FLAG              ,
7034                  p_SELECTED_VOLUME_ATTR        ,
7035                  p_ROUNDING_FACTOR             ,
7036                  p_HEADER_LIMIT_EXISTS         ,
7037                  p_LINE_LIMIT_EXISTS           ,
7038                  p_CHARGE_TYPE_CODE            ,
7039                  p_CHARGE_SUBTYPE_CODE         ,
7040                  G_CURRENCY_DETAIL_ID_DEF_TBL,    /* sunilpandey */
7041                  G_CURRENCY_HEADER_ID_DEF_TBL,    /* vivek */
7042                  G_SELLING_ROUNDING_DEF_TBL,    /* vivek */
7043                  G_ORDER_CURRENCY_DEF_TBL,        /* vivek */
7044                  G_PRICING_EFF_DATE_DEF_TBL,      /* vivek */
7045                  G_BASE_CURRENCY_DEF_TBL,         /* vivek */
7046                  G_LDET_LINE_QUANTITY_TBL,
7047                  G_UPDATED_FLAG_DEF_TBL,  -- begin shu fix bug 2599822
7048                  G_CALCULATION_CODE_DEF_TBL,
7049                  G_CHANGE_REASON_CODE_DEF_TBL,
7050                  G_CHANGE_REASON_TEXT_DEF_TBL,     -- end shu fix bug 2599822
7051 		 G_PRICE_ADJUSTMENT_ID_DEF_TBL, -- bug 3099847
7052                  G_ACCUM_CONTEXT_DEF_TBL,   -- accum range break
7053                  G_ACCUM_ATTRIBUTE_DEF_TBL, -- accum range break
7054                  G_ACCUM_FLAG_DEF_TBL,       -- accum range break
7055 		 G_BREAK_UOM_CODE_DEF_TBL, /* Proration */
7056 		 G_BREAK_UOM_CONTEXT_DEF_TBL, /* Proration */
7057 		 G_BREAK_UOM_ATTRIBUTE_DEF_TBL, /* Proration */
7058                  G_PROCESS_CODE_DEF_TBL, -- 3215497
7059                  x_status_code                 ,
7060                  x_status_text                 );
7061 END IF;
7062 --added by yangli for Java Engine project
7063 
7064 G_CURRENCY_DETAIL_ID_DEF_TBL.delete;
7065 G_CURRENCY_HEADER_ID_DEF_TBL.delete;
7066 G_SELLING_ROUNDING_DEF_TBL.delete;
7067 G_ORDER_CURRENCY_DEF_TBL.delete;
7068 G_PRICING_EFF_DATE_DEF_TBL.delete;
7069 G_BASE_CURRENCY_DEF_TBL.delete;
7070 G_LDET_LINE_QUANTITY_TBL.delete;
7071 G_UPDATED_FLAG_DEF_TBL.delete;  -- begin shu fix bug 2599822
7072 G_CALCULATION_CODE_DEF_TBL.delete;
7073 G_CHANGE_REASON_CODE_DEF_TBL.delete;
7074 G_CHANGE_REASON_TEXT_DEF_TBL.delete; -- end shu fix bug 2599822
7075 G_PRICE_ADJUSTMENT_ID_DEF_TBL.delete; -- bug 3099847
7076 G_ACCUM_CONTEXT_DEF_TBL.delete;   -- accum range break
7077 G_ACCUM_ATTRIBUTE_DEF_TBL.delete; -- accum range break
7078 G_ACCUM_FLAG_DEF_TBL.delete;      -- accum range break
7079 G_BREAK_UOM_CODE_DEF_TBL.delete;  /* Proration */
7080 G_BREAK_UOM_CONTEXT_DEF_TBL.delete;  /* Proration */
7081 G_BREAK_UOM_ATTRIBUTE_DEF_TBL.delete;  /* Proration */
7082 G_PROCESS_CODE_DEF_TBL.delete; -- 3215497
7083 
7084 EXCEPTION
7085   WHEN OTHERS THEN
7086   x_status_code := FND_API.G_RET_STS_ERROR;
7087   x_status_text :=l_routine||' '||SQLERRM;
7088   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7089   engine_debug(l_routine||' '||SQLERRM);
7090   engine_debug(SQLERRM);
7091   END IF;
7092 END;
7093 
7094 /*+----------------------------------------------------------------------
7095   |Procedure INSERT_RLTD_LINES2_AT, API to insert relationship data
7096   +----------------------------------------------------------------------
7097 */
7098 PROCEDURE INSERT_RLTD_LINES2_AT(
7099               p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
7100               p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
7101               p_RELATIONSHIP_TYPE_CODE      IN VARCHAR_TYPE,
7102               p_RELATED_LINE_INDEX          IN PLS_INTEGER_TYPE,
7103               p_RELATED_LINE_DETAIL_INDEX   IN PLS_INTEGER_TYPE,
7104               x_status_code                 OUT NOCOPY VARCHAR2,
7105               x_status_text                 OUT NOCOPY VARCHAR2,
7106               p_LIST_LINE_ID                IN NUMBER_TYPE, /* bug 3020816 */
7107               p_RELATED_LIST_LINE_ID        IN NUMBER_TYPE, /* bug 3020816 */
7108               p_pricing_status_text         IN VARCHAR_TYPE)
7109 IS
7110 PRAGMA AUTONOMOUS_TRANSACTION;
7111 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_RLTD_LINES2_AT';
7112 l_request_id number;
7113 BEGIN
7114   l_request_id := nvl(SYS_CONTEXT('QP_CONTEXT','request_id'),-9999);
7115   FORALL i in p_line_index.FIRST..p_line_index.LAST
7116   INSERT INTO QP_INT_RLTD_LINES_T (
7117               LINE_INDEX,
7118               LINE_DETAIL_INDEX,
7119               RELATIONSHIP_TYPE_CODE,
7120               RELATED_LINE_INDEX,
7121               RELATED_LINE_DETAIL_INDEX,
7122               REQUEST_TYPE_CODE,
7123               PRICING_STATUS_CODE,
7124               LIST_LINE_ID,
7125               RELATED_LIST_LINE_ID,
7126               PRICING_STATUS_TEXT,
7127               request_id)
7128 
7129  VALUES     ( p_LINE_INDEX (i),
7130               p_LINE_DETAIL_INDEX(i),
7131               p_RELATIONSHIP_TYPE_CODE(i),
7132               p_RELATED_LINE_INDEX(i),
7133               p_RELATED_LINE_DETAIL_INDEX(i),
7134               'NULL',          -- ASK PRIYA
7135               G_STATUS_NEW,     -- SHOULD THIS BE UNCHANGED??, SHU, WHAT HAPPENED TO SERVICE LINE
7136               p_list_line_id(i),
7137               p_related_list_line_id(i),
7138               p_pricing_status_text(i),
7139               l_request_id
7140             );
7141   QP_PREQ_GRP.G_INT_RELS_NO := QP_PREQ_GRP.G_INT_RELS_NO + p_LINE_INDEX.count;
7142   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7143     QP_PREQ_GRP.engine_debug('QP_PREQ_GRP.G_INT_RELS_NO='||QP_PREQ_GRP.G_INT_RELS_NO);
7144   END IF;
7145  COMMIT;
7146 EXCEPTION
7147   WHEN OTHERS THEN
7148   x_status_code := FND_API.G_RET_STS_ERROR;
7149   x_status_text :=l_routine||' '||SQLERRM;
7150   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7151     QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
7152     QP_PREQ_GRP.engine_debug(SQLERRM);
7153   END IF;
7154 END;
7155 
7156 
7157 /*+----------------------------------------------------------------------
7158   |Procedure INSERT_RLTD_LINES2, API to insert relationship data
7159   +----------------------------------------------------------------------
7160 */
7161 PROCEDURE INSERT_RLTD_LINES2(
7162               p_LINE_INDEX                  IN PLS_INTEGER_TYPE,
7163               p_LINE_DETAIL_INDEX           IN PLS_INTEGER_TYPE,
7164               p_RELATIONSHIP_TYPE_CODE      IN VARCHAR_TYPE,
7165               p_RELATED_LINE_INDEX          IN PLS_INTEGER_TYPE,
7166               p_RELATED_LINE_DETAIL_INDEX   IN PLS_INTEGER_TYPE,
7167               x_status_code                 OUT NOCOPY VARCHAR2,
7168               x_status_text                 OUT NOCOPY VARCHAR2,
7169               p_LIST_LINE_ID                IN NUMBER_TYPE, /* bug 3020816 */
7170               p_RELATED_LIST_LINE_ID        IN NUMBER_TYPE, /* bug 3020816 */
7171               p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE) --added for Java Engine
7172 IS
7173   l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.INSERT_RLTD_LINES2';
7174 --added by yangli for Java Engine project
7175  l_debug varchar2(3);
7176 --added by yangli for Java Engine project
7177 BEGIN
7178 --added by yangli for Java Engine project
7179 -- Set the global variable G_DEBUG_ENGINE
7180   QP_PREQ_GRP.Set_QP_Debug;
7181 
7182   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
7183 --added by yangli for Java Engine project
7184 
7185   -- bug 3020816 - need to allow insert into list_line_id and related_list_line_id columns
7186   IF (p_list_line_id.count = 0) THEN -- p_list_line_id not passed at all
7187    FOR i in p_line_index.FIRST .. p_line_index.LAST
7188    LOOP
7189     G_LIST_LINE_ID_DEF_TBL(i) := NULL;
7190    END LOOP;
7191   ELSE
7192    FOR i in p_line_index.FIRST .. p_line_index.LAST
7193    LOOP
7194     G_LIST_LINE_ID_DEF_TBL(i) := p_list_line_id(i);
7195    END LOOP;
7196   END IF;
7197 
7198   IF (p_related_list_line_id.count = 0) THEN -- p_related_list_line_id not passed at all
7199    FOR i in p_line_index.FIRST .. p_line_index.LAST
7200    LOOP
7201     G_RLTD_LIST_LINE_ID_DEF_TBL(i) := NULL;
7202    END LOOP;
7203   ELSE
7204    FOR i in p_line_index.FIRST .. p_line_index.LAST
7205    LOOP
7206     G_RLTD_LIST_LINE_ID_DEF_TBL(i) := p_related_list_line_id(i);
7207    END LOOP;
7208   END IF;
7209 
7210 --added by yangli for Java Engine project
7211   IF (p_pricing_status_text.count = 0) THEN -- p_pricing_status_text not passed at all
7212    FOR i in p_line_index.FIRST .. p_line_index.LAST
7213    LOOP
7214     G_PRICING_STATUS_TEXT_DEF_TBL(i) := NULL;
7215    END LOOP;
7216   ELSE
7217    FOR i in p_line_index.FIRST .. p_line_index.LAST
7218    LOOP
7219     G_PRICING_STATUS_TEXT_DEF_TBL(i) := p_pricing_status_text(i);
7220    END LOOP;
7221   END IF;
7222 
7223 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
7224  IF l_debug = FND_API.G_TRUE THEN
7225         ENGINE_DEBUG('Java Engine not Installed ----------');
7226  END IF;
7227 --added by yangli for Java Engine project
7228 
7229   FORALL i in p_line_index.FIRST..p_line_index.LAST
7230   INSERT INTO qp_npreq_rltd_lines_tmp (
7231               LINE_INDEX,
7232               LINE_DETAIL_INDEX,
7233               RELATIONSHIP_TYPE_CODE,
7234               RELATED_LINE_INDEX,
7235               RELATED_LINE_DETAIL_INDEX,
7236               REQUEST_TYPE_CODE,
7237               PRICING_STATUS_CODE,
7238               LIST_LINE_ID,
7239               RELATED_LIST_LINE_ID)
7240 
7241  VALUES     (
7242               p_LINE_INDEX (i),
7243               p_LINE_DETAIL_INDEX(i),
7244               p_RELATIONSHIP_TYPE_CODE(i),
7245               p_RELATED_LINE_INDEX(i),
7246               p_RELATED_LINE_DETAIL_INDEX(i),
7247               'NULL',          -- ASK PRIYA
7248               G_STATUS_NEW,     -- SHOULD THIS BE UNCHANGED??, SHU, WHAT HAPPENED TO SERVICE LINE
7249               G_LIST_LINE_ID_DEF_TBL(i),
7250               G_RLTD_LIST_LINE_ID_DEF_TBL(i)
7251             );
7252 --added by yangli for Java Engine project
7253 ELSE
7254  IF l_debug = FND_API.G_TRUE THEN
7255         ENGINE_DEBUG('Java Engine Installed ----------');
7256  END IF;
7257 QP_PREQ_GRP.INSERT_RLTD_LINES2_AT
7258               (p_LINE_INDEX  ,
7259               p_LINE_DETAIL_INDEX           ,
7260               p_RELATIONSHIP_TYPE_CODE      ,
7261               p_RELATED_LINE_INDEX          ,
7262               p_RELATED_LINE_DETAIL_INDEX   ,
7263               x_status_code                 ,
7264               x_status_text,
7265               G_LIST_LINE_ID_DEF_TBL,
7266               G_RLTD_LIST_LINE_ID_DEF_TBL,
7267               G_PRICING_STATUS_TEXT_DEF_TBL);
7268 END IF;
7269 --added by yangli for Java Engine project
7270 
7271    G_LIST_LINE_ID_DEF_TBL.delete;
7272    G_RLTD_LIST_LINE_ID_DEF_TBL.delete;
7273 --added by yangli for Java Engine project
7274    G_PRICING_STATUS_TEXT_DEF_TBL.delete;
7275 EXCEPTION
7276   WHEN OTHERS THEN
7277   x_status_code := FND_API.G_RET_STS_ERROR;
7278   x_status_text :=l_routine||' '||SQLERRM;
7279   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7280   engine_debug(l_routine||' '||SQLERRM);
7281   engine_debug(SQLERRM);
7282   END IF;
7283 END INSERT_RLTD_LINES2; -- public version
7284 
7285 /*+----------------------------------------------------------------------
7286   |Procedure INSERT_RLTD_LINES2, overloaded version, bug 3215497
7287   +----------------------------------------------------------------------*/
7288 PROCEDURE INSERT_RLTD_LINES2(
7289               p_LINE_INDEX                  IN NUMBER_TYPE,
7290               p_LINE_DETAIL_INDEX           IN NUMBER_TYPE,
7291               p_RELATIONSHIP_TYPE_CODE      IN VARCHAR_TYPE,
7292               p_RELATED_LINE_INDEX          IN NUMBER_TYPE,
7293               p_RELATED_LINE_DETAIL_INDEX   IN NUMBER_TYPE,
7294               x_status_code                 OUT NOCOPY VARCHAR2,
7295               x_status_text                 OUT NOCOPY VARCHAR2,
7296               p_LIST_LINE_ID                IN NUMBER_TYPE, /* bug 3020816 */
7297               p_RELATED_LIST_LINE_ID        IN NUMBER_TYPE, /* bug 3020816 */
7298               p_PRICING_STATUS_TEXT         IN VARCHAR_TYPE) --added for Java Engine
7299 IS
7300   i NUMBER;
7301   l_line_index PLS_INTEGER_TYPE;
7302   l_ldet_index PLS_INTEGER_TYPE;
7303   l_rltd_line_index PLS_INTEGER_TYPE;
7304   l_rltd_ldet_index PLS_INTEGER_TYPE;
7305 BEGIN
7306   FOR i IN p_LINE_INDEX.FIRST .. p_LINE_INDEX.LAST LOOP
7307     l_line_index(i) := p_LINE_INDEX(i);
7308   END LOOP;
7309   FOR i IN p_LINE_DETAIL_INDEX.FIRST .. p_LINE_DETAIL_INDEX.LAST LOOP
7310     l_ldet_index(i) := p_LINE_DETAIL_INDEX(i);
7311   END LOOP;
7312   FOR i IN p_RELATED_LINE_INDEX.FIRST .. p_RELATED_LINE_INDEX.LAST LOOP
7313     l_rltd_line_index(i) := p_RELATED_LINE_INDEX(i);
7314   END LOOP;
7315   FOR i IN p_RELATED_LINE_DETAIL_INDEX.FIRST .. p_RELATED_LINE_DETAIL_INDEX.LAST LOOP
7316     l_rltd_ldet_index(i) := p_RELATED_LINE_DETAIL_INDEX(i);
7317   END LOOP;
7318 
7319   -- call new version
7320   INSERT_RLTD_LINES2(
7321     p_LINE_INDEX => l_line_index,
7322     p_LINE_DETAIL_INDEX => l_ldet_index,
7323     p_RELATIONSHIP_TYPE_CODE => p_RELATIONSHIP_TYPE_CODE,
7324     p_RELATED_LINE_INDEX => l_rltd_line_index,
7325     p_RELATED_LINE_DETAIL_INDEX => l_rltd_ldet_index,
7326     x_status_code => x_status_code,
7327     x_status_text => x_status_text,
7328     p_LIST_LINE_ID => p_LIST_LINE_ID,
7329     p_RELATED_LIST_LINE_ID => p_RELATED_LIST_LINE_ID,
7330     p_PRICING_STATUS_TEXT => p_PRICING_STATUS_TEXT
7331   );
7332 END INSERT_RLTD_LINES2; -- overloaded version
7333 
7334 /*
7335   +------------------------------------------------------------------------
7336   |PROCEDURE Source_Vol_Contexts_Attributes
7337   +-------------------------------------------------------------------------
7338 */
7339 
7340 PROCEDURE Source_Vol_Contexts_Attributes(p_pricing_phase_seq    PLS_INTEGER,
7341                                          p_freeze_override_flag VARCHAR2,
7342                                          p_ordr_amt_flag        VARCHAR2,
7343                                          x_status_code OUT NOCOPY     VARCHAR2,
7344                                          x_status_text OUT NOCOPY     VARCHAR2) AS
7345 /*
7346 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_request_lines_cur,- No Index Used-,NA,NA
7347 */
7348 CURSOR get_request_lines_cur IS
7349 SELECT LINE_INDEX,
7350        LINE_QUANTITY,
7351        PRICED_QUANTITY,
7352        UNIT_PRICE,
7353        LINE_TYPE_CODE,
7354 	  LINE_UOM_CODE,
7355 	  PRICED_UOM_CODE,
7356 	  PRICE_FLAG
7357 FROM   qp_npreq_lines_tmp;
7358 --WHERE  LINE_UOM_CODE <> PRICED_UOM_CODE;
7359 /*WHERE  (PRICE_FLAG = G_YES
7360        OR
7361        (PRICE_FLAG = G_PHASE
7362         AND
7363         p_freeze_override_flag = G_YES)
7364        );*/
7365 
7366 /*
7367 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7368 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7369 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7370 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7371 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.get_inventory_item_id_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7372 */
7373 CURSOR get_inventory_item_id_cur(p_line_index PLS_INTEGER) IS
7374 SELECT /*+ dynamic_sampling(1) */ to_number(VALUE_FROM)
7375 FROM   qp_npreq_line_attrs_tmp
7376 WHERE  CONTEXT = G_PRIC_ITEM_CONTEXT
7377 AND    ATTRIBUTE = G_PRIC_ATTRIBUTE1
7378 AND    ATTRIBUTE_TYPE = G_PRODUCT_TYPE
7379 AND    LINE_INDEX = p_line_index
7380 AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7381 
7382 /*
7383 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.order_amount_cur,- No Index Used -,NA,NA
7384 */
7385 CURSOR order_amount_cur IS
7386 --SELECT nvl(SUM(UNIT_PRICE * PRICED_QUANTITY),0)
7387 select nvl(sum(nvl(line_unit_price * line_quantity, UNIT_PRICE * PRICED_QUANTITY)),0) /* 3143535 */
7388 FROM   qp_npreq_lines_tmp
7389 WHERE charge_periodicity_code is NULL;   -- added for recurring charges Bug # 4465168
7390 
7391 
7392 
7393 v_order_amt         NUMBER;
7394 v_count             PLS_INTEGER;
7395 v_inventory_item_id	NUMBER;
7396 v_uom_rate		NUMBER;
7397 l_status_code       VARCHAR2(30);
7398 l_status_text       VARCHAR2(240);
7399 l_routine      	CONSTANT VARCHAR2(240) := 'QP_PREQ_GRP.Source_Vol_Contexts_Attributes';
7400 
7401 l_l_line_index_tbl      NUMBER_TYPE;
7402 l_l_line_quantity_tbl   NUMBER_TYPE;
7403 l_l_priced_quantity_tbl NUMBER_TYPE;
7404 l_l_unit_price_tbl      NUMBER_TYPE;
7405 l_l_line_type_code_tbl  VARCHAR_30_TYPE;
7406 l_l_line_uom_code_tbl   VARCHAR_30_TYPE;
7407 l_l_priced_uom_code_tbl VARCHAR_30_TYPE;
7408 l_l_price_flag_tbl      VARCHAR_30_TYPE;
7409 
7410 l_co_line_index_tbl  NUMBER_TYPE;
7411 l_co_bulk_count      NUMBER := 0;
7412 
7413 l_ia_value_from_tbl  VARCHAR_TYPE;
7414 l_ia_line_index_tbl  NUMBER_TYPE;
7415 l_ia_attribute_tbl   VARCHAR_TYPE;
7416 l_ia_bulk_count      NUMBER := 0;
7417 
7418 BEGIN
7419 
7420   -- julin [3805113]: bulk fetch request lines
7421   OPEN get_request_lines_cur;
7422   LOOP
7423     FETCH get_request_lines_cur BULK COLLECT INTO
7424       l_l_line_index_tbl,
7425       l_l_line_quantity_tbl,
7426       l_l_priced_quantity_tbl,
7427       l_l_unit_price_tbl,
7428       l_l_line_type_code_tbl,
7429       l_l_line_uom_code_tbl,
7430       l_l_priced_uom_code_tbl,
7431       l_l_price_flag_tbl
7432       LIMIT G_BATCH_SIZE;
7433     EXIT WHEN l_l_line_index_tbl.count = 0;
7434 
7435     l_co_line_index_tbl.delete;
7436     l_ia_value_from_tbl.delete;
7437     l_ia_line_index_tbl.delete;
7438     l_ia_attribute_tbl.delete;
7439 
7440   FOR I in l_l_line_index_tbl.first .. l_l_line_index_tbl.last
7441   LOOP
7442 
7443   -- ITEM QUANTITY(Price List Sequence)
7444   /* IF (p_pricing_phase_seq = G_PRICE_LIST_SEQUENCE AND i.LINE_TYPE_CODE = G_LINE_LEVEL) THEN
7445 
7446      UPDATE qp_npreq_line_attrs_tmp
7447      SET VALUE_FROM = qp_number.number_to_canonical(nvl(I.LINE_QUANTITY,0))
7448      WHERE  LINE_INDEX = I.LINE_INDEX
7449      AND    CONTEXT = G_PRIC_VOLUME_CONTEXT
7450      AND    ATTRIBUTE = G_QUANTITY_ATTRIBUTE
7451      AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7452      AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7453 
7454      IF SQL%ROWCOUNT = 0 THEN
7455        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7456        engine_debug('No volume context in temp table, inserting one');
7457        END IF;
7458         INSERT_LINE_ATTRS
7459        (p_LINE_INDEX               =>I.LINE_INDEX,
7460         p_ATTRIBUTE_LEVEL          =>G_LINE_LEVEL,
7461         p_ATTRIBUTE_TYPE           =>G_PRICING_TYPE,
7462         p_CONTEXT                  =>G_PRIC_VOLUME_CONTEXT,
7463         p_ATTRIBUTE                =>G_QUANTITY_ATTRIBUTE,
7464         p_VALUE_FROM               =>qp_number.number_to_canonical(NVL(I.LINE_QUANTITY,0)),
7465         p_VALIDATED_FLAG           =>G_NO,
7466         p_APPLIED_FLAG             =>G_LIST_NOT_APPLIED,
7467         p_PRICING_STATUS_CODE      =>G_STATUS_UNCHANGED,
7468         P_PRICING_ATTR_FLAG        =>G_PRICING_YES,
7469         x_status_code              =>l_status_code,
7470         x_status_text              =>l_status_text);
7471 
7472         IF l_status_code = FND_API.G_RET_STS_ERROR THEN
7473 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7474         END IF;
7475      END IF;
7476 	-- Reset the unit price if price event occurs
7477   IF (i.PRICE_FLAG = G_YES OR (i.PRICE_FLAG = G_PHASE AND p_freeze_override_flag = G_YES)) THEN
7478 	 UPDATE qp_npreq_lines_tmp
7479 	 SET UNIT_PRICE = NULL
7480 	 WHERE LINE_INDEX = I.LINE_INDEX;
7481   END IF;
7482 
7483  END IF;  */
7484 
7485   -- PRICED QUANTITY(Discounts Sequence)
7486   -- bug 3572594 - update the cross order volume period qty even if there is no price phase in the current engine call
7487   IF (p_pricing_phase_seq <> G_PRICE_LIST_SEQUENCE AND l_l_line_type_code_tbl(I) = G_LINE_LEVEL ) THEN
7488        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7489        engine_debug('Trying to update cross order volume period qty in temp table');
7490 
7491        END IF;
7492 	 -- Cross Order Quantities
7493       OPEN get_inventory_item_id_cur(l_l_line_index_tbl(I));
7494       FETCH get_inventory_item_id_cur INTO v_inventory_item_id;
7495       CLOSE get_inventory_item_id_cur;
7496 
7497        -- Get the pricing uom qty with the uom conversion routine
7498       Inv_convert.inv_um_conversion(l_l_line_uom_code_tbl(I),
7499 				               l_l_priced_uom_code_tbl(I),
7500 				               v_inventory_item_id,
7501 				               v_uom_rate);
7502 
7503       -- Update Period1 Item Qty, Period2 Item Qty , Period3 Item Qty with conversion from order uom to pricing uom
7504       IF (v_uom_rate = -99999) THEN
7505      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7506 	    engine_debug('Uom Rate cannot be -99999');
7507      END IF;
7508       ELSE
7509          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7510          engine_debug('Uom Rate Is: ' || v_uom_rate );
7511          END IF;
7512 
7513          -- bug 3572594 - round the multiplied value to profile QP_INV_DECIMAL_PRECISION
7514          if G_INV_DECIMAL_PRECISION is null then
7515            G_INV_DECIMAL_PRECISION := nvl(FND_PROFILE.Value('QP_INV_DECIMAL_PRECISION'),10);
7516          end if;
7517 /*
7518 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7519 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7520 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7521 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7522 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd4,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7523 */
7524 
7525          -- julin [3805113]: bulk update
7526          l_co_line_index_tbl(l_co_bulk_count) := l_l_line_index_tbl(I);
7527          l_co_bulk_count := l_co_bulk_count + 1;
7528       END IF;
7529   END IF;
7530 
7531   -- ITEM AMOUNT(Discounts Sequence)
7532    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
7533   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7534 	 engine_debug ('Trying to update line quantity and line amount in temp table');
7535 
7536   END IF;
7537 /*
7538 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7539 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7540 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7541 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7542 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd3,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7543 */
7544      -- julin [3805113]: bulk update
7545      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));
7546      l_ia_line_index_tbl(l_ia_bulk_count) := l_l_line_index_tbl(I);
7547      l_ia_attribute_tbl(l_ia_bulk_count) := G_QUANTITY_ATTRIBUTE;
7548      l_ia_bulk_count := l_ia_bulk_count + 1;
7549 
7550      /* IF SQL%ROWCOUNT = 0 THEN
7551       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7552       engine_debug('No volume context in temp table, inserting one');
7553       END IF;
7554       INSERT_LINE_ATTRS
7555        (p_LINE_INDEX               =>I.LINE_INDEX,
7556         p_ATTRIBUTE_LEVEL          =>G_LINE_LEVEL,
7557         p_ATTRIBUTE_TYPE           =>G_PRICING_TYPE,
7558         p_CONTEXT                  =>G_PRIC_VOLUME_CONTEXT,
7559         p_ATTRIBUTE                =>G_QUANTITY_ATTRIBUTE,
7560         p_VALUE_FROM               =>qp_number.number_to_canonical(nvl(NVL(I.PRICED_QUANTITY,I.LINE_QUANTITY),0)),
7561         p_VALIDATED_FLAG           =>G_NO,
7562         p_APPLIED_FLAG             =>G_LIST_NOT_APPLIED,
7563         p_PRICING_STATUS_CODE      =>G_STATUS_UNCHANGED,
7564         P_PRICING_ATTR_FLAG        =>G_PRICING_YES,
7565         x_status_code              =>l_status_code,
7566         x_status_text              =>l_status_text);
7567      END IF; */ -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
7568 
7569 /*
7570 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7571 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7572 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7573 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7574 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd5,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7575 */
7576      -- julin [3805113]: bulk update
7577      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));
7578      l_ia_line_index_tbl(l_ia_bulk_count) := l_l_line_index_tbl(I);
7579      l_ia_attribute_tbl(l_ia_bulk_count) := G_LINE_AMT_ATTRIBUTE;
7580      l_ia_bulk_count := l_ia_bulk_count + 1;
7581 
7582       /* IF SQL%ROWCOUNT = 0 THEN
7583          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7584          engine_debug('No volume context and line amt in temp table, inserting one');
7585          END IF;
7586         INSERT_LINE_ATTRS
7587          (p_LINE_INDEX              =>I.LINE_INDEX,
7588           p_ATTRIBUTE_LEVEL         =>G_LINE_LEVEL,
7589           p_ATTRIBUTE_TYPE          =>G_PRICING_TYPE,
7590           p_CONTEXT                 =>G_PRIC_VOLUME_CONTEXT,
7591           p_ATTRIBUTE               =>G_LINE_AMT_ATTRIBUTE,
7592           p_VALUE_FROM              =>qp_number.number_to_canonical(nvl(nvl(I.PRICED_QUANTITY,I.LINE_QUANTITY) * I.UNIT_PRICE ,0)),
7593           p_VALIDATED_FLAG          =>G_NO,
7594           p_APPLIED_FLAG            =>G_LIST_NOT_APPLIED,
7595           p_PRICING_STATUS_CODE     =>G_STATUS_UNCHANGED,
7596           P_PRICING_ATTR_FLAG       =>G_PRICING_YES,
7597           x_status_code             =>l_status_code,
7598           x_status_text             =>l_status_text);
7599       END IF;  */ -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
7600 
7601 
7602     /*UPDATE qp_npreq_lines_tmp
7603     SET    LINE_AMOUNT = nvl(nvl(I.PRICED_QUANTITY,I.LINE_QUANTITY) * I.UNIT_PRICE,0)
7604     WHERE  LINE_INDEX = I.LINE_INDEX; */
7605 
7606     G_QUALIFIER_TEMP := 'N';
7607 
7608   END IF;
7609 
7610  END LOOP;
7611 
7612   -- julin [3805113]: bulk update for CROSS ORDER VOLUME
7613   IF (l_co_line_index_tbl.count > 0) THEN
7614     FORALL I IN l_co_line_index_tbl.first..l_co_line_index_tbl.last
7615       UPDATE /*+ index(qp_npreq_line_attrs_tmp qp_preq_line_attrs_tmp_n2) */ qp_npreq_line_attrs_tmp --upd4
7616         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))
7617 	WHERE  LINE_INDEX = l_co_line_index_tbl(I)
7618 	AND    CONTEXT = G_PRIC_VOLUME_CONTEXT
7619 	AND    ATTRIBUTE IN ('PRICING_ATTRIBUTE3','PRICING_ATTRIBUTE1','PRICING_ATTRIBUTE11')
7620 	AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7621 	AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7622   END IF;
7623 
7624   -- julin [3805113]: bulk update for ITEM AMOUNT
7625   IF (l_ia_line_index_tbl.count > 0) THEN
7626     FORALL I IN l_ia_line_index_tbl.first..l_ia_line_index_tbl.last
7627       UPDATE /*+ index(qp_npreq_line_attrs_tmp qp_preq_line_attrs_tmp_n2) */ qp_npreq_line_attrs_tmp --upd3, upd5
7628         SET VALUE_FROM = l_ia_value_from_tbl(I)
7629         WHERE  LINE_INDEX = l_ia_line_index_tbl(I)
7630         AND    CONTEXT = G_PRIC_VOLUME_CONTEXT
7631         AND    ATTRIBUTE = l_ia_attribute_tbl(I)
7632         AND    ATTRIBUTE_TYPE = G_PRICING_TYPE
7633         AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7634   END IF;
7635 
7636   -- ORDER AMOUNT(Discounts Sequence) only for BATCH event
7637   IF (p_pricing_phase_seq <> G_PRICE_LIST_SEQUENCE and p_ordr_amt_flag = G_YES) THEN
7638   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7639 	 engine_debug ('Trying to update order amount in temp table');
7640 
7641   END IF;
7642      OPEN order_amount_cur;
7643      FETCH order_amount_cur INTO v_order_amt;
7644      CLOSE order_amount_cur;
7645 
7646   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7647      engine_debug ('v_order_amt = ' || v_order_amt);
7648      engine_debug ('G_BEFORE_PRICING_ORD_AMT = ' || G_BEFORE_PRICING_ORD_AMT);
7649   END IF;
7650 
7651 /*
7652 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7653 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7654 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7655 INDX,QP_PREQ_GRP.source_vol_contexts_attributes.source_vol_contexts_attributes_upd6,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7656 */
7657      -- Bug 3143535 - ORDER AMOUNT CALCULATION ISSUE
7658      UPDATE qp_npreq_line_attrs_tmp --upd6
7659      --SET VALUE_FROM = qp_number.number_to_canonical(v_order_amt)
7660      SET VALUE_FROM = qp_number.number_to_canonical(qp_number.canonical_to_number(value_from)
7661                                                      - G_BEFORE_PRICING_ORD_AMT
7662                                                      + v_order_amt)
7663      WHERE
7664             CONTEXT = G_PRIC_VOLUME_CONTEXT
7665      AND    ATTRIBUTE = G_ORDER_AMOUNT_ATTRIBUTE
7666      AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
7667      AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
7668 
7669       IF SQL%ROWCOUNT = 0 THEN
7670          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7671          engine_debug('No volume context and order amt in temp table, inserting one');
7672 
7673          END IF;
7674         INSERT INTO qp_npreq_line_attrs_tmp
7675 	   (LINE_INDEX,ATTRIBUTE_LEVEL,ATTRIBUTE_TYPE,CONTEXT,ATTRIBUTE,VALUE_FROM,
7676 	    VALIDATED_FLAG,APPLIED_FLAG,PRICING_STATUS_CODE,PRICING_ATTR_FLAG)
7677         SELECT
7678          LINE_INDEX,
7679          LINE_TYPE_CODE,
7680          G_QUALIFIER_TYPE,
7681          G_PRIC_VOLUME_CONTEXT,
7682          G_ORDER_AMOUNT_ATTRIBUTE,
7683          qp_number.number_to_canonical(v_order_amt),
7684          G_NO,
7685          G_NO,
7686          G_STATUS_UNCHANGED,
7687          G_NO
7688         FROM qp_npreq_lines_tmp;
7689 
7690       END IF;
7691 
7692       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7693          declare
7694             l_value_from   varchar2(240);
7695          begin
7696            select value_from
7697            into l_value_from
7698           from qp_npreq_line_attrs_tmp
7699          where CONTEXT = G_PRIC_VOLUME_CONTEXT
7700            AND ATTRIBUTE = G_ORDER_AMOUNT_ATTRIBUTE
7701            AND ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
7702            AND PRICING_STATUS_CODE = G_STATUS_UNCHANGED
7703            and rownum = 1;
7704 
7705             engine_debug ('final order amount attribute = ' || l_value_from);
7706          exception
7707            when no_data_found then
7708              null;
7709            when others then
7710              null;
7711          end;
7712       END IF;
7713 
7714   END IF;
7715 
7716   END LOOP;
7717   CLOSE get_request_lines_cur;
7718 
7719 EXCEPTION
7720    WHEN OTHERS THEN
7721    x_status_code := FND_API.G_RET_STS_ERROR;
7722    x_status_text := l_routine ||': '||SQLERRM;
7723    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7724    engine_debug(x_status_text);
7725    END IF;
7726 END Source_Vol_Contexts_Attributes;
7727 
7728 PROCEDURE Update_Distinct_Qualifier_Flag( x_status_code OUT NOCOPY VARCHAR2,
7729                                           x_status_text OUT NOCOPY VARCHAR2) AS
7730 
7731  l_routine VARCHAR2(40) := 'Update_Distinct_Qualifier_Flag';
7732 BEGIN
7733 
7734 /*
7735 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7736 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7737 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7738 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7739 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7740 INDX,QP_PREQ_GRP.update_distinct_qualifier_flag.sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
7741 */
7742  UPDATE /*+ dynamic_sampling(1) */ qp_npreq_line_attrs_tmp a
7743  SET    distinct_qualifier_flag = 'Y'
7744  WHERE  pricing_status_code = G_STATUS_UNCHANGED
7745  AND    attribute_type = G_QUALIFIER_TYPE
7746  AND    rowid = (SELECT /*+ dynamic_sampling(1) */ min(rowid)
7747                  FROM qp_npreq_line_attrs_tmp b
7748                  WHERE a.context = b.context
7749                  AND   a.attribute = b.attribute
7750                  AND   a.value_from = b.value_from
7751                  AND   b.attribute_type = G_QUALIFIER_TYPE
7752                  AND   b.pricing_status_code = G_STATUS_UNCHANGED);
7753 
7754  -- This is much performant than the previous sql
7755   /* UPDATE qp_npreq_line_attrs_tmp a
7756   SET    distinct_qualifier_flag = 'Y'
7757   WHERE  pricing_status_code = G_STATUS_UNCHANGED
7758   AND    attribute_type = G_QUALIFIER_TYPE
7759   AND    rowid = (SELECT min(rowid)
7760                   FROM qp_npreq_line_attrs_tmp b
7761                   WHERE b.attribute_type = G_QUALIFIER_TYPE
7762                   AND   b.pricing_status_code = G_STATUS_UNCHANGED
7763                   GROUP BY b.context , b.attribute , b.value_from); */
7764 EXCEPTION
7765   WHEN OTHERS THEN
7766    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7767    engine_debug(l_routine||' '||SQLERRM);
7768    END IF;
7769    x_status_code := FND_API.G_RET_STS_ERROR;
7770    x_status_text := 'Error in '||l_routine||SQLERRM;
7771 
7772 END Update_Distinct_Qualifier_Flag;
7773 
7774 
7775 /*+-----------------------------------------------------------------------
7776   |PROCEDURE  Delete_Duplicate_List_Lines
7777   +------------------------------------------------------------------------
7778 */
7779 
7780 -- shu fix bug 1915355
7781 
7782 PROCEDURE Delete_Duplicate_List_Lines(p_pricing_phase_id NUMBER,
7783                            x_status_code OUT NOCOPY VARCHAR2,
7784                            x_status_text OUT NOCOPY VARCHAR2) AS
7785 
7786 l_routine VARCHAR2(40) := 'Delete_Duplicate_List_Lines';
7787 
7788 CURSOR get_duplicate_list_lines_count IS
7789 SELECT count(*)
7790 FROM qp_npreq_ldets_tmp
7791 WHERE pricing_status_code = G_STATUS_NEW
7792 AND   pricing_phase_id = p_pricing_phase_id
7793 GROUP BY line_index,created_from_list_line_id
7794 HAVING count(*) > 1;
7795 
7796 l_count NUMBER := 0;
7797 
7798 BEGIN
7799 
7800 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7801 engine_debug('In Delete Duplicate List Lines procedure');
7802 
7803 END IF;
7804 OPEN get_duplicate_list_lines_count;
7805 FETCH get_duplicate_list_lines_count INTO l_count;
7806 CLOSE get_duplicate_list_lines_count;
7807 
7808 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7809 engine_debug('Duplicate List Lines Count : ' || l_count);
7810 END IF;
7811 
7812 IF (l_count > 0) THEN
7813  UPDATE qp_npreq_ldets_tmp a
7814  SET pricing_status_code = 'DUPLICATE_LIST_LINE'
7815  WHERE pricing_status_code = G_STATUS_NEW
7816  AND   pricing_phase_id = p_pricing_phase_id
7817  AND rowid not in (SELECT min(rowid)
7818  		FROM qp_npreq_ldets_tmp
7819  		WHERE pricing_status_code = G_STATUS_NEW
7820    		AND   pricing_phase_id = p_pricing_phase_id
7821                 GROUP BY line_index,created_from_list_line_id);
7822 END IF;
7823 EXCEPTION
7824   WHEN OTHERS THEN
7825    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7826    engine_debug(l_routine||' '||SQLERRM);
7827    END IF;
7828    x_status_code := FND_API.G_RET_STS_ERROR;
7829    x_status_text := 'Error in '||l_routine||SQLERRM;
7830 
7831 END Delete_Duplicate_List_Lines;
7832 --Added new procedure Delete_Hdrs_With_No_ProdAttr for 3520634
7833 /*+-----------------------------------------------------------------------
7834   |PROCEDURE Delete_Hdrs_With_No_ProdAttr
7835   +------------------------------------------------------------------------
7836 */
7837 --Added index hints for bug#7480862
7838 PROCEDURE Delete_Hdrs_With_No_ProdAttr(p_pricing_phase_id NUMBER,
7839                                        x_status_code OUT NOCOPY VARCHAR2,
7840                                        x_status_text OUT NOCOPY VARCHAR2) AS
7841 
7842  l_routine VARCHAR2(40) := 'Delete_Hdrs_With_No_ProdAttr';
7843 
7844 BEGIN
7845 
7846    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7847         engine_debug('Entering '||l_routine);
7848    END IF;
7849  UPDATE /*+ index(a qpprod QP_PREQ_QUAL_TMP_N1) dynamic_sampling(1) */ qp_preq_qual_tmp a   --5658579
7850  --UPDATE qp_preq_qual_tmp a
7851  SET    pricing_status_code = G_STATUS_DELETED
7852  WHERE pricing_status_code = G_STATUS_UNCHANGED
7853    AND pricing_phase_id = p_pricing_phase_id
7854    AND list_line_id = -1
7855    AND NOT EXISTS (select /*+ NO_UNNEST
7856                               leading (c)
7857                               use_nl (c qpprod)
7858                               index (qpprod, QP_PREQ_LINE_ATTRS_TMP_N6)
7859                               index(c qp_pricing_attributes_n13) */
7860 		'x'
7861                    FROM  qp_npreq_line_attrs_tmp qpprod, qp_pricing_attributes c
7862                    WHERE c.list_header_id = a.list_header_id        -- delete header for which product does
7863                    AND   c.pricing_phase_id = p_pricing_phase_id    -- not match
7864                    AND   qpprod.context = c.product_attribute_context
7865                    AND   qpprod.attribute = c.product_attribute
7866                    AND   qpprod.value_from = c.product_attr_value
7867                    AND   qpprod.pricing_status_code = G_STATUS_UNCHANGED
7868                    AND   c.qualification_ind in (G_YES_PROD_HDR_LINE_QUAL_IND, G_YES_PROD_HDR_QUAL_IND,
7869                                                  G_YES_PROD_PRIC_HDR_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
7870                    AND   qpprod.attribute_type = G_PRODUCT_TYPE
7871                    AND   c.excluder_flag = G_NO
7872                    AND   rownum = 1
7873                    --UNION
7874                    --SELECT /*+ ORDERED USE_NL(d qppric) index(d qp_pricing_attributes_n5) */ 'x'
7875                    /*FROM  qp_npreq_line_attrs_tmp qpprod,
7876                          qp_pricing_attributes d,
7877                          qp_preq_line_attrs_tmp qppric
7878                    WHERE d.list_header_id = a.list_header_id      -- delete header for which product and
7879                    AND   d.pricing_phase_id = p_pricing_phase_id  -- pricing attrbutes do not match
7880                    AND   d.QUALIFICATION_IND in (G_YES_PROD_PRIC_HDR_QUAL_IND, G_YES_PRIC_HDR_LINE_QUAL_IND)
7881                    AND   d.product_attribute_context = qpprod.context
7882                    AND   d.product_attribute = qpprod.attribute
7883                    AND   d.product_attr_value = qpprod.value_from
7884                    AND   d.excluder_flag = G_NO
7885                    AND   d.pricing_attribute_context = qppric.context
7886                    AND   d.pricing_attribute = qppric.attribute
7887                    AND   (d.pricing_attr_value_from = qppric.value_from
7888                           or d.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
7889                    AND   qpprod.attribute_type='PRODUCT'
7890                    AND   qpprod.pricing_status_code=G_STATUS_UNCHANGED
7891                    AND   qppric.attribute_type = 'PRICING'
7892                    AND   qppric.pricing_status_code = G_STATUS_UNCHANGED
7893                    AND   qpprod.line_index = qppric.line_index
7894                    AND   rownum = 1*/
7895                   )
7896  AND  NOT EXISTS (SELECT 'x'              --do not delete header for which product is not defined
7897                   FROM  qp_list_lines d
7898                   WHERE d.list_header_id = a.list_header_id
7899                   AND   d.qualification_ind in (G_YES_HDR_LINE_QUAL_IND,G_YES_HDR_QUAL_IND)
7900                   AND   d.pricing_phase_id = p_pricing_phase_id
7901                   AND   rownum=1);
7902 
7903  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7904   engine_debug('No of headers deleted from qual tmp due to non-matching of product : ' || l_routine || ' ' || SQL%ROWCOUNT);
7905  END IF;
7906 
7907 EXCEPTION
7908   WHEN OTHERS THEN
7909    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
7910    engine_debug(l_routine||' '||SQLERRM);
7911    END IF;
7912    x_status_code := FND_API.G_RET_STS_ERROR;
7913    x_status_text := 'Error in '||l_routine||SQLERRM;
7914 
7915 END Delete_Hdrs_With_No_ProdAttr;
7916 
7917 
7918 
7919 PROCEDURE Delete_Un_Asked_For_Promotions (p_line_index            IN NUMBER,
7920                                           p_pricing_phase_id      IN NUMBER,
7921                                           p_incompat_resolve_code IN VARCHAR2,
7922                                           x_return_status       OUT NOCOPY
7923 VARCHAR2,
7924                                           x_return_status_txt   OUT NOCOPY
7925 VARCHAR2) AS
7926 l_debug varchar2(3);
7927 l_pricing_status_code varchar2(30);
7928 BEGIN
7929      l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
7930 
7931      -- [julin/4116856]: moved from QP_Resolve_Incompatability_PVT.Best_Price_-
7932      -- For_Phase; required to delete un-asked-for promotions before they are
7933      -- processed.
7934      -- Delete lines which are actually ask_for in setup , but are not asked for in the Order
7935      -- Because Engine selects these lines irrespective of their ask_for_flag
7936      -- Index Certificate
7937      /*
7938             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
7939             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
7940             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
7941             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
7942             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
7943             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
7944             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
7945             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
7946             INDX,QP_Resolve_Incompatability_PVTRUN.best_price_for_phase.upd1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
7947        */
7948      IF (p_incompat_resolve_code = G_INCOMP_BEST_PRICE) THEN
7949  l_pricing_status_code := QP_PREQ_GRP.G_STATUS_BEST_PRICE_EVAL;
7950      ELSE
7951        l_pricing_status_code := QP_PREQ_GRP.G_STATUS_INCOMP_LOGIC;
7952      END IF;
7953 
7954 
7955      UPDATE qp_npreq_ldets_tmp a  --upd1
7956      SET PRICING_STATUS_CODE = l_pricing_status_code
7957      WHERE a.ASK_FOR_FLAG = QP_PREQ_GRP.G_YES
7958      AND a.PRICING_PHASE_ID = p_pricing_phase_id
7959      AND a.LINE_INDEX = p_line_index
7960      AND NOT EXISTS (
7961        SELECT /*+ index(b QP_PREQ_LINE_ATTRS_TMP_N2) */ 'X' -- This can use N2 instead of N7
7962        FROM  qp_npreq_line_attrs_tmp b
7963        WHERE  b.LINE_INDEX = p_line_index
7964        AND b.PRICING_STATUS_CODE = QP_PREQ_GRP.G_STATUS_UNCHANGED
7965        AND b.ATTRIBUTE_TYPE = QP_PREQ_GRP.G_QUALIFIER_TYPE
7966        AND b.CONTEXT = QP_PREQ_GRP.G_LIST_HEADER_CONTEXT
7967        AND b.ATTRIBUTE IN (QP_PREQ_GRP.G_QUAL_ATTRIBUTE1,
7968                       QP_PREQ_GRP.G_QUAL_ATTRIBUTE2,
7969                       QP_PREQ_GRP.G_QUAL_ATTRIBUTE6)
7970        AND b.VALUE_FROM = decode(b.ATTRIBUTE,
7971                      QP_PREQ_GRP.G_QUAL_ATTRIBUTE1,to_char(a.CREATED_FROM_LIST_HEADER_ID),
7972                      QP_PREQ_GRP.G_QUAL_ATTRIBUTE2,to_char(a.CREATED_FROM_LIST_LINE_ID),
7973                      QP_PREQ_GRP.G_QUAL_ATTRIBUTE6,to_char(a.CREATED_FROM_LIST_HEADER_ID)));
7974 
7975      IF l_debug = FND_API.G_TRUE THEN
7976        QP_PREQ_GRP.engine_debug ('Deleted Un Asked for promotions:'||l_pricing_status_code);
7977      END IF;
7978 
7979 EXCEPTION
7980   WHEN OTHERS THEN
7981     x_return_status := FND_API.G_RET_STS_ERROR;
7982     x_return_status_txt := 'Unexpected error in QP_PREQ_GRP.Delete_Un_Asked_For_Promotions: ' || SQLERRM;
7983 END Delete_Un_Asked_For_Promotions;
7984 
7985 
7986 
7987 /*+-----------------------------------------------------------------------
7988   |PROCEDURE  Populate_Temp_Tables
7989   +------------------------------------------------------------------------
7990 */
7991 PROCEDURE Populate_Temp_Tables
7992 (p_line_tbl               IN   LINE_TBL_TYPE,
7993  p_qual_tbl               IN   QUAL_TBL_TYPE,
7994  p_line_attr_tbl          IN   LINE_ATTR_TBL_TYPE,
7995  p_LINE_DETAIL_tbl        IN   LINE_DETAIL_TBL_TYPE,
7996  p_LINE_DETAIL_qual_tbl   IN   LINE_DETAIL_QUAL_TBL_TYPE,
7997  p_LINE_DETAIL_attr_tbl   IN   LINE_DETAIL_ATTR_TBL_TYPE,
7998  p_rltd_lines_tbl         IN   RELATED_LINES_TBL_TYPE,
7999  p_rounding_flag          IN   VARCHAR2,
8000  p_pricing_status_code    IN   VARCHAR2,
8001  p_price_phase_flag       IN   BOOLEAN,
8002  p_freeze_override_flag   IN   VARCHAR2,
8003  p_pricing_event          IN   VARCHAR2,
8004  p_calculate_flag         IN   VARCHAR2,
8005  x_status_code            OUT NOCOPY VARCHAR2,
8006  x_status_text            OUT NOCOPY VARCHAR2
8007 )
8008 
8009 AS
8010 
8011 I PLS_INTEGER;
8012 v_error_code NUMBER;
8013 v_error_message VARCHAR2(255);
8014 l_message VARCHAR2(255);
8015 l_status_code VARCHAR2(240);
8016 l_status_text VARCHAR2(240);
8017 l_pricing_status_code VARCHAR2(30);
8018 v_pricing_status_code VARCHAR2(30);
8019 J PLS_INTEGER:=1;
8020 K PLS_INTEGER:=1;
8021 TYPE line_index_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8022 l_line_index_tbl line_index_type;
8023 E_DATE_IS_NULL EXCEPTION;
8024 E_CURRENCY_CODE_IS_NULL EXCEPTION;
8025 l_routine VARCHAR2(240):='QP_PREQ_GRP.Populate_Temp_Tables';
8026 l_count   PLS_INTEGER;
8027 l_attribute_type VARCHAR2(30);
8028 l_line_quantity  NUMBER;
8029 l_line_amount    NUMBER;
8030 l_unit_price     NUMBER;
8031 l_order_header_id  VARCHAR2(200) := 'MISSING HEADER';
8032 l_order_line_id NUMBER;
8033 l_not_insert_order_line_flag BOOLEAN := FALSE;
8034 l_summary_line_index PLS_INTEGER;
8035 l_price_flag    VARCHAR2(1);
8036 l_source_qty_flag VARCHAR2(1);
8037 l_source_amt_flag VARCHAR2(1);
8038 
8039 E_ROUTINE_ERRORS EXCEPTION;
8040 
8041 /*
8042 INDX,QP_PREQ_GRP.populate_temp_tables.l_get_count_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
8043 */
8044 CURSOR l_get_count_cur IS
8045  SELECT COUNT(*)
8046  FROM   qp_npreq_line_attrs_tmp
8047  WHERE  PRICING_STATUS_CODE = 'X';
8048 
8049 --added by yangli for Java Engine project
8050 /*
8051 INDX,QP_PREQ_GRP.populate_temp_tables.l_int_count_cur,qp_int_line_attrs_N2,PRICING_STATUS_CODE,1
8052 */
8053 CURSOR l_int_count_cur IS
8054  SELECT COUNT(*)
8055  FROM   qp_int_line_attrs
8056  WHERE  PRICING_STATUS_CODE = 'X';
8057 --added by yangli for Java Engine project
8058 
8059    -- begin declare shu fix bug 1728757
8060   l_list_header_id qp_qualifiers.list_header_id%type := NULL;
8061   --l_cascade_ask_for_profile VARCHAR2(2):= nvl(FND_PROFILE.value ('QP_CASCADE_ASK_FOR_PROMOTION'), G_NO);
8062   l_cascade_ask_for_profile VARCHAR2(2):= G_NO;
8063   l_ask_for_flag qp_list_headers_b.ask_for_flag%type := NULL;
8064 
8065   CURSOR get_ask_for_flag_cur (l_list_header_id IN NUMBER) IS
8066 	SELECT a.ask_for_flag
8067 	FROM qp_list_headers_b a
8068  	WHERE a.list_header_id = l_list_header_id;
8069 
8070   CURSOR l_ask_for_child_ids (l_list_header_id IN NUMBER) IS
8071  	SELECT
8072     		qp_lhdr_b.list_header_id
8073  	FROM
8074    		qp_list_headers_b qp_lhdr_b
8075  	WHERE
8076     		qp_lhdr_b.parent_list_header_id = l_list_header_id AND qp_lhdr_b.ask_for_flag = G_YES;
8077 
8078   -- end shu fix bug 1728757
8079 
8080 BEGIN
8081  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8082  engine_debug('Rounding Flag: '||p_rounding_flag);
8083  engine_debug ('Passed in Attribute Count : ' || p_line_attr_tbl.count);
8084  engine_debug ('Passed in Qualifier Count : ' || p_qual_tbl.count);
8085  engine_debug ('Passed in Lines Count : ' || p_line_tbl.count);
8086  engine_debug ('Passed in Line dtls Count : ' || p_LINE_DETAIL_tbl.count);
8087  engine_debug ('-----Line information passed-----');
8088  END IF;
8089  I:=  p_line_tbl.FIRST;
8090 
8091  --if the control record says it is calculate_only
8092  --then it will bypass search so, pricing_status_code should
8093  --be G_STATUS_NEW as is it is selected by search engine.
8094 
8095  l_pricing_status_code := p_pricing_status_code;
8096 
8097 
8098 --Reset_all_tbls;
8099 Reset_All_Tbls(l_status_code ,l_status_text );
8100 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8101  RAISE E_ROUTINE_ERRORS;
8102 END IF;
8103 
8104 K:=1;
8105 WHILE I IS NOT NULL LOOP
8106 
8107 
8108    IF ( p_line_tbl(I).CURRENCY_CODE IS NULL or
8109      p_line_tbl(I).CURRENCY_CODE = FND_API.G_MISS_CHAR ) THEN
8110      RAISE E_CURRENCY_CODE_IS_NULL;
8111    ELSE
8112     --IF (G_CURRENCY_CODE IS NULL) THEN
8113      G_CURRENCY_CODE := p_line_tbl(I).CURRENCY_CODE;
8114     --END IF;
8115    END IF;
8116 
8117 
8118    IF ( p_line_tbl(I).PRICING_EFFECTIVE_DATE IS NULL ) THEN
8119      RAISE E_DATE_IS_NULL;
8120    END IF;
8121 
8122   -- IF (G_MIN_PRICING_DATE IS NULL) THEN  --FP 7321922
8123     G_MIN_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8124     G_MAX_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8125 /*  --FP 7321922
8126    ELSE
8127     IF (TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE) < TRUNC(G_MIN_PRICING_DATE) AND
8128               p_line_tbl(I).LINE_TYPE_CODE <> 'ORDER') THEN
8129      G_MIN_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8130     END IF;
8131     IF (TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE) > TRUNC(G_MAX_PRICING_DATE) AND
8132               p_line_tbl(I).LINE_TYPE_CODE <> 'ORDER') THEN
8133      G_MAX_PRICING_DATE             := TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8134     END IF;
8135    END IF;
8136 */
8137    IF (instr(p_pricing_event || ',' ,'PRICE,',1,1) > 0 OR instr(p_pricing_event || ',' ,'LINE,',1,1) > 0) THEN
8138    --IF (p_pricing_event in ('PRICE','LINE')) THEN
8139     l_not_insert_order_line_flag := TRUE;
8140    ELSE
8141     l_not_insert_order_line_flag := FALSE;
8142    END IF;
8143 
8144    l_summary_line_index := -99999; -- Reset
8145    l_price_flag := p_line_tbl(I).price_flag ; -- Default/Reset
8146 
8147    IF (p_line_tbl(I).LINE_TYPE_CODE = G_ORDER_LEVEL) THEN
8148     l_summary_line_index := p_line_tbl(I).LINE_INDEX;
8149     l_order_header_id := to_char(p_line_tbl(I).LINE_ID);
8150     G_ORDER_ID := p_line_tbl(I).LINE_ID; -- accum range break
8151     --Global variable for limits
8152     G_ORDER_PRICE_REQUEST_CODE := p_line_tbl(I).REQUEST_TYPE_CODE || '-' || l_order_header_id;
8153     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8154     engine_debug( ' Order Price Request Code : ' || G_ORDER_PRICE_REQUEST_CODE);
8155     END IF;
8156    END IF;
8157 
8158    IF (p_line_tbl(I).LINE_TYPE_CODE = G_ORDER_LEVEL AND l_not_insert_order_line_flag = TRUE) THEN
8159     l_price_flag := 'N'; -- for summary line
8160    END IF;
8161 
8162    --dbms_output.put_line ('Min Sysdate : ' || G_MIN_PRICING_DATE);
8163    --dbms_output.put_line ('Max Sysdate : ' || G_MAX_PRICING_DATE);
8164 
8165    -- do not overwrite the list price if it is a calculate call
8166    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))
8167        AND p_price_phase_flag = TRUE AND G_MANUAL_ADJUSTMENTS_CALL_FLAG = G_NO
8168        AND p_calculate_flag IN (G_SEARCH_ONLY,G_SEARCH_N_CALCULATE))
8169        AND NVL (p_line_tbl(I).LIST_PRICE_OVERRIDE_FLAG, 'N') = 'N'  --po integration
8170   THEN
8171     l_unit_price := NULL;
8172    ELSE
8173     l_unit_price := p_line_tbl(I).UNIT_PRICE;
8174    END IF;
8175 
8176   --IF (l_not_insert_order_line_flag = TRUE and p_line_tbl(I).LINE_TYPE_CODE <> G_ORDER_LEVEL or
8177   --    l_not_insert_order_line_flag = FALSE) THEN
8178    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8179    engine_debug (' Loading the line info into plsql tables');
8180 
8181    END IF;
8182    G_LINE_INDEX_TBL(K)            :=  p_line_tbl(I).LINE_INDEX;
8183    G_LINE_TYPE_CODE_TBL(K)        :=  p_line_tbl(I).LINE_TYPE_CODE;
8184    G_PRICING_EFFECTIVE_DATE_TBL(K):=  TRUNC(p_line_tbl(I).PRICING_EFFECTIVE_DATE);
8185    G_ACTIVE_DATE_FIRST_TBL(K)     :=  TRUNC(p_line_tbl(I).ACTIVE_DATE_FIRST);
8186    G_ACTIVE_DATE_FIRST_TYPE_TBL(K):=  p_line_tbl(I).ACTIVE_DATE_FIRST_TYPE;
8187    G_ACTIVE_DATE_SECOND_TBL(K)    :=  TRUNC(p_line_tbl(I).ACTIVE_DATE_SECOND);
8188    G_ACTIVE_DATE_SECOND_TYPE_TBL(K):= p_line_tbl(I).ACTIVE_DATE_SECOND_TYPE;
8189    G_LINE_QUANTITY_TBL(K)          := p_line_tbl(I).LINE_QUANTITY;
8190    G_LINE_UOM_CODE_TBL(K)          := p_line_tbl(I).LINE_UOM_CODE;
8191    G_REQUEST_TYPE_CODE_TBL(K)      := p_line_tbl(I).REQUEST_TYPE_CODE;
8192    G_UOM_QUANTITY_TBL(K)           := p_line_tbl(I).UOM_QUANTITY;
8193 
8194    If p_price_phase_flag = TRUE AND p_line_tbl(I).LIST_PRICE_OVERRIDE_FLAG IN (
8195 'Y', 'O')
8196    Then  --po integration
8197    	G_PRICED_QUANTITY_TBL(K)        := p_line_tbl(I).LINE_QUANTITY;
8198    	G_PRICED_UOM_CODE_TBL(K)        := p_line_tbl(I).LINE_UOM_CODE;
8199         G_ADJUSTED_UNIT_PRICE_TBL(K)    := l_unit_price;
8200    	G_LINE_UNIT_PRICE_TBL(K) 	:= l_unit_price; /* shu_latest */
8201    Else
8202    	G_PRICED_QUANTITY_TBL(K)        := p_line_tbl(I).PRICED_QUANTITY;
8203    	G_PRICED_UOM_CODE_TBL(K)        := p_line_tbl(I).PRICED_UOM_CODE;
8204    	G_ADJUSTED_UNIT_PRICE_TBL(K)    := p_line_tbl(I).ADJUSTED_UNIT_PRICE;
8205    	G_LINE_UNIT_PRICE_TBL(K) 	:= p_line_tbl(I).LINE_UNIT_PRICE; /* shu_latest */
8206    End If;  --po integration
8207 
8208    G_CURRENCY_CODE_TBL(K)          := p_line_tbl(I).CURRENCY_CODE;
8209    G_UNIT_PRICE_TBL(K)             := l_unit_price;
8210    G_PERCENT_PRICE_TBL(K)          := p_line_tbl(I).PERCENT_PRICE;
8211    G_UPD_ADJUSTED_UNIT_PRICE_TBL(K):= p_line_tbl(I).UPDATED_ADJUSTED_UNIT_PRICE;
8212    G_PROCESSED_FLAG_TBL(K)         := G_NOT_PROCESSED;
8213    G_PRICE_FLAG_TBL(K)             := l_price_flag;
8214    G_LINE_ID_TBL(K)                := p_line_tbl(I).LINE_ID;
8215    G_ROUNDING_FLAG_TBL(K)          := p_rounding_flag;
8216    G_ROUNDING_FACTOR_TBL(K)        := p_line_tbl(I).ROUNDING_FACTOR;
8217    G_PROCESSING_ORDER_TBL(K)       := NULL;
8218    G_PRICING_STATUS_CODE_tbl(K)    := G_STATUS_UNCHANGED; -- always when inserted
8219    G_PRICING_STATUS_TEXT_tbl(K)    := NULL;
8220    G_QUALIFIERS_EXIST_FLAG_TBL(K)  := 'N';
8221    G_PRICING_ATTRS_EXIST_FLAG_TBL(K) := 'N';
8222    G_PRICE_LIST_ID_TBL(K) := -9999;
8223    G_PL_VALIDATED_FLAG_TBL(K) := 'N';
8224    G_USAGE_PRICING_TYPE_TBL(K)     := nvl(p_line_tbl(I).USAGE_PRICING_TYPE,G_REGULAR_USAGE_TYPE);
8225    G_LINE_CATEGORY_TBL(K) := p_line_tbl(I).LINE_CATEGORY;
8226    G_CONTRACT_START_DATE_TBL(K) := p_line_tbl(I).CONTRACT_START_DATE; /* shulin */
8227    G_CONTRACT_END_DATE_TBL(K) := p_line_tbl(I).CONTRACT_END_DATE; /* shulin */
8228    G_LIST_PRICE_OVERRIDE_FLAG_TBL(K)   := nvl (p_line_tbl(I).LIST_PRICE_OVERRIDE_FLAG, 'N'); --po integration
8229    G_CHARGE_PERIODICITY_CODE_TBL(K) := p_line_tbl(I).CHARGE_PERIODICITY_CODE;
8230 
8231    /* IF (p_line_tbl(I).HEADER_ID IS NULL) THEN
8232     l_order_header_id := 'MISSING HEADER';
8233    ELSE
8234     l_order_header_id := to_char(p_line_tbl(I).HEADER_ID);
8235    END IF; */
8236 
8237    IF (p_line_tbl(I).LINE_ID IS NULL) THEN
8238     SELECT qp_limit_price_request_code_s.nextval
8239     INTO l_order_line_id
8240     FROM dual;
8241    ELSE
8242     l_order_line_id := p_line_tbl(I).LINE_ID;
8243    END IF;
8244 
8245    IF (p_line_tbl(I).LINE_TYPE_CODE = G_LINE_LEVEL) THEN
8246     IF (p_line_tbl(I).PRICE_REQUEST_CODE IS NULL) THEN
8247      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).REQUEST_TYPE_CODE || '-' || l_order_header_id || '-' || l_order_line_id;
8248     ELSE
8249      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).PRICE_REQUEST_CODE;
8250     END IF;
8251    ELSE
8252     IF (p_line_tbl(I).PRICE_REQUEST_CODE IS NULL) THEN
8253      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).REQUEST_TYPE_CODE || '-' || l_order_header_id;
8254     ELSE
8255      G_PRICE_REQUEST_CODE_TBL(K):=p_line_tbl(I).PRICE_REQUEST_CODE;
8256     END IF;
8257    END IF;
8258 
8259   --END IF;
8260 
8261  I:=  p_line_tbl.NEXT(I);
8262  K:=K+1;
8263 END LOOP;
8264 
8265   IF K > 1 THEN
8266             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8267             engine_debug ('Bulk Inserting the actual lines : ' || G_PRICE_LIST_ID_TBL(1));
8268             END IF;
8269             INSERT_LINES2
8270                 (p_LINE_INDEX =>   G_LINE_INDEX_TBL,
8271                  p_LINE_TYPE_CODE =>  G_LINE_TYPE_CODE_TBL,
8272                  p_PRICING_EFFECTIVE_DATE =>G_PRICING_EFFECTIVE_DATE_TBL,
8273                  p_ACTIVE_DATE_FIRST       =>G_ACTIVE_DATE_FIRST_TBL,
8274                  p_ACTIVE_DATE_FIRST_TYPE  =>G_ACTIVE_DATE_FIRST_TYPE_TBL,
8275                  p_ACTIVE_DATE_SECOND      =>G_ACTIVE_DATE_SECOND_TBL,
8276                  p_ACTIVE_DATE_SECOND_TYPE =>G_ACTIVE_DATE_SECOND_TYPE_TBL,
8277                  p_LINE_QUANTITY =>     G_LINE_QUANTITY_TBL,
8278                  p_LINE_UOM_CODE =>     G_LINE_UOM_CODE_TBL,
8279                  p_REQUEST_TYPE_CODE => G_REQUEST_TYPE_CODE_TBL,
8280                  p_PRICED_QUANTITY =>   G_PRICED_QUANTITY_TBL,
8281                  p_PRICED_UOM_CODE =>   G_PRICED_UOM_CODE_TBL,
8282                  p_CURRENCY_CODE   =>   G_CURRENCY_CODE_TBL,
8283                  p_UNIT_PRICE      =>   G_UNIT_PRICE_TBL,
8284                  p_PERCENT_PRICE   =>   G_PERCENT_PRICE_TBL,
8285                  p_UOM_QUANTITY =>      G_UOM_QUANTITY_TBL,
8286                  p_ADJUSTED_UNIT_PRICE =>G_ADJUSTED_UNIT_PRICE_TBL,
8287                  p_UPD_ADJUSTED_UNIT_PRICE =>G_UPD_ADJUSTED_UNIT_PRICE_TBL,
8288                  p_PROCESSED_FLAG      =>G_PROCESSED_FLAG_TBL,
8289                  p_PRICE_FLAG          =>G_PRICE_FLAG_TBL,
8290                  p_LINE_ID             =>G_LINE_ID_TBL,
8291                  p_PROCESSING_ORDER    =>G_PROCESSING_ORDER_TBL,
8292                  p_PRICING_STATUS_CODE =>G_PRICING_STATUS_CODE_tbl,
8293                  p_PRICING_STATUS_TEXT =>G_PRICING_STATUS_TEXT_tbl,
8294                  p_ROUNDING_FLAG       =>G_ROUNDING_FLAG_TBL,
8295                  p_ROUNDING_FACTOR     =>G_ROUNDING_FACTOR_TBL,
8296                  p_QUALIFIERS_EXIST_FLAG => G_QUALIFIERS_EXIST_FLAG_TBL,
8297                  p_PRICING_ATTRS_EXIST_FLAG =>G_PRICING_ATTRS_EXIST_FLAG_TBL,
8298                  p_PRICE_LIST_ID          => G_PRICE_LIST_ID_TBL,
8299                  p_VALIDATED_FLAG         => G_PL_VALIDATED_FLAG_TBL,
8300                  p_PRICE_REQUEST_CODE     => G_PRICE_REQUEST_CODE_TBL,
8301 		 p_USAGE_PRICING_TYPE  =>G_USAGE_PRICING_TYPE_tbl,
8302                  p_LINE_CATEGORY       =>G_LINE_CATEGORY_TBL,
8303                  p_CONTRACT_START_DATE =>G_CONTRACT_START_DATE_TBL, /* shulin */
8304                  p_CONTRACT_END_DATE =>G_CONTRACT_END_DATE_TBL, /* shulin */
8305                  p_LINE_UNIT_PRICE =>G_LINE_UNIT_PRICE_TBL, /* shu_latest */
8306 		 p_LIST_PRICE_OVERRIDE_FLAG => G_LIST_PRICE_OVERRIDE_FLAG_TBL, -- po integration
8307                  p_CHARGE_PERIODICITY_CODE => G_CHARGE_PERIODICITY_CODE_TBL,
8308                  x_status_code         =>l_status_code,
8309                  x_status_text         =>l_status_text);
8310 
8311         IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8312             RAISE E_ROUTINE_ERRORS;
8313         END IF;
8314  END IF;
8315 
8316 /*************************populating line attributes *****************************/
8317 
8318 --Reset_all_tbls;
8319 Reset_All_Tbls(l_status_code ,l_status_text );
8320 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8321  RAISE E_ROUTINE_ERRORS;
8322 END IF;
8323 
8324 I:= p_qual_tbl.FIRST;
8325 K:=1;
8326 
8327 WHILE (I IS NOT NULL AND
8328       (l_not_insert_order_line_flag = TRUE
8329        and p_qual_tbl(I).LINE_INDEX <> l_summary_line_index or
8330        l_not_insert_order_line_flag = FALSE)) LOOP
8331  G_LINE_INDEX_tbl(K)          := p_qual_tbl(I).LINE_INDEX;
8332  G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8333  G_ATTRIBUTE_TYPE_tbl(K)      := G_QUALIFIER_TYPE;
8334  G_CONTEXT_tbl(K)             := p_qual_tbl(I).QUALIFIER_CONTEXT;
8335  G_ATTRIBUTE_tbl(K)           := p_qual_tbl(I).QUALIFIER_ATTRIBUTE;
8336  G_VALUE_FROM_tbl(K)          := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM;
8337  G_VALUE_TO_tbl(K)            := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO;
8338  G_COMPARISON_OPERATOR_TYPE_tbl(K):=p_qual_tbl(I).COMPARISON_OPERATOR_CODE;
8339  G_VALIDATED_FLAG_tbl(K)  := p_qual_tbl(I).VALIDATED_FLAG;
8340  G_APPLIED_FLAG_tbl(K)    := G_LIST_NOT_APPLIED;
8341  G_PRICING_STATUS_CODE_tbl(K)    :=  l_pricing_status_code;
8342  G_PRICING_ATTR_FLAG_tbl(K)      := G_YES;
8343  G_LINE_DETAIL_INDEX_tbl(K)      := NULL;
8344  G_LIST_HEADER_ID_tbl(K)         :=NULL;
8345  G_LIST_LINE_ID_tbl(K)           :=NULL;
8346  G_SETUP_VALUE_FROM_tbl(K)       :=NULL;
8347  G_SETUP_VALUE_TO_tbl(K)         :=NULL;
8348  G_GROUPING_NUMBER_tbl(K)        :=NULL;
8349  G_NO_QUALIFIERS_IN_GRP_tbl(K)   :=NULL;
8350  G_PRICING_STATUS_TEXT_tbl(K)    :=NULL;
8351  G_QUALIFIER_PRECEDENCE_tbl(K)   :=NULL;
8352  G_DATATYPE_tbl(K)               :=NULL;
8353  G_PRODUCT_UOM_CODE_TBL(K)       :=NULL;
8354  G_QUALIFIER_TYPE_TBL(K)         :=NULL;
8355  G_EXCLUDER_FLAG_TBL(K)          :=NULL;
8356  G_PRICING_PHASE_ID_TBL_A(K)       :=NULL;
8357  G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8358  G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8359  G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8360  G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8361 
8362  -- begin shu_promo, fix bug 1728757
8363 
8364  	IF p_qual_tbl(I).QUALIFIER_CONTEXT = 'MODLIST' AND
8365  	   p_qual_tbl(I).QUALIFIER_ATTRIBUTE IN ('QUALIFIER_ATTRIBUTE1','QUALIFIER_ATTRIBUTE6')-- promotion no.
8366  	THEN
8367  	   G_LIST_HEADER_ID_TBL(K) := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM; -- promotion hdr id
8368         END IF;
8369 
8370  	IF p_qual_tbl(I).QUALIFIER_CONTEXT = 'MODLIST' AND
8371  	   p_qual_tbl(I).QUALIFIER_ATTRIBUTE IN ('QUALIFIER_ATTRIBUTE2')-- list line id
8372  	THEN
8373  	   --G_LIST_LINE_ID_TBL(K) := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM; -- promotion list line id
8374            -- Get the list header id for the list line
8375           BEGIN
8376            SELECT list_header_id
8377            INTO G_LIST_HEADER_ID_TBL(K)
8378            FROM qp_list_lines
8379            WHERE list_line_id = to_number(p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM);
8380           EXCEPTION
8381            WHEN NO_DATA_FOUND THEN
8382              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8383              engine_debug('Error in Finding List Header Id for List Line : '||
8384                           p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM);
8385              END IF;
8386 			 l_status_code := FND_API.G_RET_STS_ERROR;
8387 			 l_status_text := 'Error in Finding List Header Id for List Line : '||
8388                           p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM;
8389              RAISE E_ROUTINE_ERRORS;
8390           END ;
8391         END IF;
8392 
8393         -- if it is a promotion
8394  	IF p_qual_tbl(I).QUALIFIER_CONTEXT = 'MODLIST' AND
8395  	   p_qual_tbl(I).QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE1' -- promotion no.
8396  	THEN
8397  	   l_list_header_id := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM; -- promotion hdr id
8398     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8399 	   engine_debug ('promotion hdr id: '|| l_list_header_id);
8400     END IF;
8401 
8402 	   -- get ask_for_flag of this promotion
8403 	   OPEN get_ask_for_flag_cur(l_list_header_id);
8404       		FETCH get_ask_for_flag_cur INTO l_ask_for_flag;
8405      		CLOSE get_ask_for_flag_cur;
8406 
8407 	   IF ( l_cascade_ask_for_profile = G_YES AND l_ask_for_flag = G_YES) THEN
8408     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8409 	   engine_debug ('perform cascading ask for pormotion to ask for deals...');
8410     END IF;
8411      	   -- cascade ask_for_promotion to ask_for_deals
8412 
8413  	 	--cursor gets ask for deals' list_header_ids
8414  	   	for l_ask_for_child_ids_data in l_ask_for_child_ids (l_list_header_id) loop
8415    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8416 			engine_debug ('cascaded ask for deals: ' || l_ask_for_child_ids_data.list_header_id);
8417    END IF;
8418 			K:= K+1;
8419 			G_LINE_INDEX_tbl(K)          := p_qual_tbl(I).LINE_INDEX;
8420  			G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8421  			G_ATTRIBUTE_TYPE_tbl(K)      := G_QUALIFIER_TYPE;
8422  			G_CONTEXT_tbl(K)             := p_qual_tbl(I).QUALIFIER_CONTEXT;
8423  			G_ATTRIBUTE_tbl(K)           := p_qual_tbl(I).QUALIFIER_ATTRIBUTE;
8424  			G_VALUE_FROM_tbl(K)          := l_ask_for_child_ids_data.list_header_id;
8425  			G_VALUE_TO_tbl(K)            := p_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO;
8426  			G_COMPARISON_OPERATOR_TYPE_tbl(K):=p_qual_tbl(I).COMPARISON_OPERATOR_CODE;
8427  			G_VALIDATED_FLAG_tbl(K)  := p_qual_tbl(I).VALIDATED_FLAG;
8428  			G_APPLIED_FLAG_tbl(K)    := G_LIST_NOT_APPLIED;
8429  			G_PRICING_STATUS_CODE_tbl(K)    :=  l_pricing_status_code;
8430  			G_PRICING_ATTR_FLAG_tbl(K)      := G_YES;
8431  			G_LINE_DETAIL_INDEX_tbl(K)      := NULL;
8432  			G_LIST_HEADER_ID_tbl(K)         :=NULL;
8433  			G_LIST_LINE_ID_tbl(K)           :=NULL;
8434  			G_SETUP_VALUE_FROM_tbl(K)       :=NULL;
8435  			G_SETUP_VALUE_TO_tbl(K)         :=NULL;
8436  			G_GROUPING_NUMBER_tbl(K)        :=NULL;
8437  			G_NO_QUALIFIERS_IN_GRP_tbl(K)   :=NULL;
8438  			G_PRICING_STATUS_TEXT_tbl(K)    :=NULL;
8439  			G_QUALIFIER_PRECEDENCE_tbl(K)   :=NULL;
8440  			G_DATATYPE_tbl(K)               :=NULL;
8441  			G_PRODUCT_UOM_CODE_TBL(K)       :=NULL;
8442  			G_QUALIFIER_TYPE_TBL(K)         :=NULL;
8443  			G_EXCLUDER_FLAG_TBL(K)          :=NULL;
8444  			G_PRICING_PHASE_ID_TBL_A(K)       :=NULL;
8445  			G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8446  			G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8447  			G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8448  			G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8449  		end loop; --end cursor l_ask_for_child_ids loop
8450  	   END IF; -- end if cascade ask_for_promotion
8451  	END IF; -- end if if is a promotion
8452 
8453         -- end shu_promo
8454  K:= K+1;
8455  I:= p_qual_tbl.NEXT(I);
8456 END LOOP;
8457 
8458 I := p_line_attr_tbl.FIRST;
8459 
8460 WHILE I IS NOT NULL LOOP
8461  IF (p_line_attr_tbl(I).PRICING_CONTEXT = G_ITEM_CONTEXT) THEN
8462   l_attribute_type := G_PRODUCT_TYPE;
8463  ELSE
8464   l_attribute_type := G_PRICING_TYPE;
8465  END IF;
8466 
8467  G_LINE_INDEX_tbl(K)          := p_line_attr_tbl(I).LINE_INDEX;
8468  G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8469  G_ATTRIBUTE_TYPE_tbl(K)      := l_attribute_type;
8470  G_CONTEXT_tbl(K)             := p_line_attr_tbl(I).PRICING_CONTEXT;
8471  G_ATTRIBUTE_tbl(K)           := p_line_attr_tbl(I).PRICING_ATTRIBUTE;
8472  G_VALUE_FROM_tbl(K)          := p_line_attr_tbl(I).PRICING_ATTR_VALUE_FROM;
8473  G_VALUE_TO_tbl(K)            := p_line_attr_tbl(I).PRICING_ATTR_VALUE_TO;
8474  G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
8475  G_VALIDATED_FLAG_tbl(K)      := p_line_attr_tbl(I).VALIDATED_FLAG;
8476  G_APPLIED_FLAG_tbl(K)        := G_LIST_NOT_APPLIED;
8477  G_PRICING_STATUS_CODE_tbl(K) := l_pricing_status_code;
8478  G_PRICING_ATTR_FLAG_tbl(K)   := G_YES;
8479  G_LINE_DETAIL_INDEX_tbl(K)   := NULL;
8480  G_LIST_HEADER_ID_tbl(K)      :=NULL;
8481  G_LIST_LINE_ID_tbl(K)        :=NULL;
8482  G_SETUP_VALUE_FROM_tbl(K)    :=NULL;
8483  G_SETUP_VALUE_TO_tbl(K)      :=NULL;
8484  G_GROUPING_NUMBER_tbl(K)     :=NULL;
8485  G_NO_QUALIFIERS_IN_GRP_tbl(K):=NULL;
8486  G_PRICING_STATUS_TEXT_tbl(K) :=NULL;
8487  G_QUALIFIER_PRECEDENCE_tbl(K):=NULL;
8488  G_DATATYPE_tbl(K)            :=NULL;
8489  G_PRODUCT_UOM_CODE_TBL(K)    :=NULL;
8490  G_QUALIFIER_TYPE_TBL(K)      :=NULL;
8491  G_EXCLUDER_FLAG_TBL(K)       :=NULL;
8492  G_PRICING_PHASE_ID_TBL_A(K)    :=NULL;
8493  G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8494  G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8495  G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8496  G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8497  K:= K+1;
8498  I:= p_line_attr_tbl.NEXT(I);
8499 END LOOP;
8500 
8501 
8502 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8503 engine_debug('Before Sourcing Volume Attributes');
8504 
8505 END IF;
8506 l_source_qty_flag := QP_BUILD_SOURCING_PVT.Is_Attribute_Used('VOLUME','PRICING_ATTRIBUTE10');
8507 l_source_amt_flag := QP_BUILD_SOURCING_PVT.Is_Attribute_Used('VOLUME','PRICING_ATTRIBUTE12');
8508 
8509 IF (l_source_qty_flag = G_YES) THEN
8510 
8511  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8512  engine_debug('Sourcing Quantity Attribute');
8513 
8514  END IF;
8515  FOR G IN p_line_tbl.first .. p_line_tbl.last
8516  LOOP
8517 
8518   IF (p_price_phase_flag = TRUE) THEN
8519    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8520    engine_debug('Pricing Phase Exists.. Sourcing Line Quantity');
8521    END IF;
8522    l_line_quantity := nvl(p_line_tbl(G).LINE_QUANTITY,0);
8523   ELSE
8524    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8525    engine_debug('Pricing Phase Does not Exist.. Sourcing Priced Quantity');
8526    END IF;
8527    l_line_quantity := nvl(nvl(p_line_tbl(G).PRICED_QUANTITY,p_line_tbl(G).LINE_QUANTITY),0);
8528   END IF;
8529 
8530   --dbms_output.put_line ('Sourcing Item Qty for Line : ' ||p_line_tbl(G).LINE_INDEX );
8531 
8532   -- Source Item Quantity
8533   G_LINE_INDEX_tbl(K)          := p_line_tbl(G).LINE_INDEX;
8534   G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8535   G_ATTRIBUTE_TYPE_tbl(K)      := G_PRICING_TYPE;
8536   G_CONTEXT_tbl(K)             := G_PRIC_VOLUME_CONTEXT;
8537   G_ATTRIBUTE_tbl(K)           := G_QUANTITY_ATTRIBUTE;
8538   G_VALUE_FROM_tbl(K)          := qp_number.number_to_canonical(l_line_quantity);
8539   G_VALUE_TO_tbl(K)            := NULL;
8540   G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
8541   G_VALIDATED_FLAG_tbl(K)      := G_NO;
8542   G_APPLIED_FLAG_tbl(K)        := G_LIST_NOT_APPLIED;
8543   G_PRICING_STATUS_CODE_tbl(K) := G_STATUS_UNCHANGED;
8544   G_PRICING_ATTR_FLAG_tbl(K)   := G_YES;
8545   G_LINE_DETAIL_INDEX_tbl(K)   := NULL;
8546   G_LIST_HEADER_ID_tbl(K)      :=NULL;
8547   G_LIST_LINE_ID_tbl(K)        :=NULL;
8548   G_SETUP_VALUE_FROM_tbl(K)    :=NULL;
8549   G_SETUP_VALUE_TO_tbl(K)      :=NULL;
8550   G_GROUPING_NUMBER_tbl(K)     :=NULL;
8551   G_NO_QUALIFIERS_IN_GRP_tbl(K):=NULL;
8552   G_PRICING_STATUS_TEXT_tbl(K) :=NULL;
8553   G_QUALIFIER_PRECEDENCE_tbl(K):=NULL;
8554   G_DATATYPE_tbl(K)            :=NULL;
8555   G_PRODUCT_UOM_CODE_TBL(K)    :=NULL;
8556   G_QUALIFIER_TYPE_TBL(K)      :=NULL;
8557   G_EXCLUDER_FLAG_TBL(K)       :=NULL;
8558   G_PRICING_PHASE_ID_TBL_A(K)    :=NULL;
8559   G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8560   G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8561   G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8562   G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8563 
8564   K:= K+1;
8565 
8566  END LOOP;    -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
8567 END IF;
8568 
8569 IF (l_source_amt_flag = G_YES) THEN
8570 
8571  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8572  engine_debug('Sourcing Amount Attribute');
8573 
8574  END IF;
8575  FOR G IN p_line_tbl.first .. p_line_tbl.last
8576  LOOP
8577 
8578  IF (p_price_phase_flag = TRUE) THEN
8579   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8580   engine_debug('Pricing Phase Exists.. Sourcing Line Quantity');
8581   END IF;
8582   l_line_amount := nvl(p_line_tbl(G).LINE_QUANTITY * p_line_tbl(G).UNIT_PRICE,0);
8583  ELSE
8584   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8585   engine_debug('Pricing Phase Does not Exist.. ,l_status_textSourcing Priced Quantity');
8586   END IF;
8587   l_line_amount := nvl(nvl(p_line_tbl(G).PRICED_QUANTITY,p_line_tbl(G).LINE_QUANTITY) * p_line_tbl(G).UNIT_PRICE,0);
8588  END IF;
8589 
8590   --dbms_output.put_line ('Sourcing Item Qty for Line : ' ||p_line_tbl(G).LINE_INDEX );
8591 
8592   -- Source Item Amount
8593   G_LINE_INDEX_tbl(K)          := p_line_tbl(G).LINE_INDEX;
8594   G_ATTRIBUTE_LEVEL_tbl(K)     := G_LINE_LEVEL;
8595   G_ATTRIBUTE_TYPE_tbl(K)      := G_PRICING_TYPE;
8596   G_CONTEXT_tbl(K)             := G_PRIC_VOLUME_CONTEXT;
8597   G_ATTRIBUTE_tbl(K)           := G_LINE_AMT_ATTRIBUTE;
8598   G_VALUE_FROM_tbl(K)          := qp_number.number_to_canonical(l_line_amount);
8599   G_VALUE_TO_tbl(K)            := NULL;
8600   G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
8601   G_VALIDATED_FLAG_tbl(K)      := G_NO;
8602   G_APPLIED_FLAG_tbl(K)        := G_LIST_NOT_APPLIED;
8603   G_PRICING_STATUS_CODE_tbl(K) := G_STATUS_UNCHANGED;
8604   G_PRICING_ATTR_FLAG_tbl(K)   := G_YES;
8605   G_LINE_DETAIL_INDEX_tbl(K)   := NULL;
8606   G_LIST_HEADER_ID_tbl(K)      :=NULL;
8607   G_LIST_LINE_ID_tbl(K)        :=NULL;
8608   G_SETUP_VALUE_FROM_tbl(K)    :=NULL;
8609   G_SETUP_VALUE_TO_tbl(K)      :=NULL;
8610   G_GROUPING_NUMBER_tbl(K)     :=NULL;
8611   G_NO_QUALIFIERS_IN_GRP_tbl(K):=NULL;
8612   G_PRICING_STATUS_TEXT_tbl(K) :=NULL;
8613   G_QUALIFIER_PRECEDENCE_tbl(K):=NULL;
8614   G_DATATYPE_tbl(K)            :=NULL;
8615   G_PRODUCT_UOM_CODE_TBL(K)    :=NULL;
8616   G_QUALIFIER_TYPE_TBL(K)      :=NULL;
8617   G_EXCLUDER_FLAG_TBL(K)       :=NULL;
8618   G_PRICING_PHASE_ID_TBL_A(K)    :=NULL;
8619   G_INCOMP_GRP_CODE_TBL_A(K) := NULL;
8620   G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := NULL;
8621   G_MODIFIER_LEVEL_CODE_TBL_A(K) := NULL;
8622   G_PRIMARY_UOM_FLAG_TBL_A(K) := NULL;
8623 
8624   K:= K+1;
8625 
8626  END LOOP;    -- Attribute Mapping is sourcing Volume Attributes 01/14/02, AC Nielsen Performance
8627 END IF;
8628 
8629 --Insert record only if there is record
8630 IF K > 1 THEN
8631 INSERT_LINE_ATTRS2
8632    (    G_LINE_INDEX_tbl,
8633         G_LINE_DETAIL_INDEX_tbl  ,
8634         G_ATTRIBUTE_LEVEL_tbl    ,
8635         G_ATTRIBUTE_TYPE_tbl     ,
8636         G_LIST_HEADER_ID_tbl     ,
8637         G_LIST_LINE_ID_tbl       ,
8638         G_CONTEXT_tbl            ,
8639         G_ATTRIBUTE_tbl          ,
8640         G_VALUE_FROM_tbl         ,
8641         G_SETUP_VALUE_FROM_tbl   ,
8642         G_VALUE_TO_tbl           ,
8643         G_SETUP_VALUE_TO_tbl     ,
8644         G_GROUPING_NUMBER_tbl         ,
8645         G_NO_QUALIFIERS_IN_GRP_tbl      ,
8646         G_COMPARISON_OPERATOR_TYPE_tbl  ,
8647         G_VALIDATED_FLAG_tbl            ,
8648         G_APPLIED_FLAG_tbl              ,
8649         G_PRICING_STATUS_CODE_tbl       ,
8650         G_PRICING_STATUS_TEXT_tbl       ,
8651         G_QUALIFIER_PRECEDENCE_tbl      ,
8652         G_DATATYPE_tbl                  ,
8653         G_PRICING_ATTR_FLAG_tbl         ,
8654         G_QUALIFIER_TYPE_tbl            ,
8655         G_PRODUCT_UOM_CODE_TBL          ,
8656         G_EXCLUDER_FLAG_TBL             ,
8657         G_PRICING_PHASE_ID_TBL_A        ,
8658         G_INCOMP_GRP_CODE_TBL_A         ,
8659         G_LINE_DETAIL_TYPE_CODE_TBL_A   ,
8660         G_MODIFIER_LEVEL_CODE_TBL_A     ,
8661         G_PRIMARY_UOM_FLAG_TBL_A        ,
8662         l_status_code                   ,
8663         l_status_text                   );
8664 
8665        IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8666             RAISE E_ROUTINE_ERRORS;
8667        END IF;
8668 
8669 END IF;
8670 
8671 /* begin bulk insert ldets -- 3215497 */
8672 -- first reset global tables
8673 Reset_All_Tbls(l_status_code, l_status_text);
8674 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8675  RAISE E_ROUTINE_ERRORS;
8676 END IF;
8677 
8678 I := p_LINE_DETAIL_tbl.FIRST;
8679 K := 1;
8680 
8681 IF (G_PUBLIC_API_CALL_FLAG = G_YES) THEN
8682   v_pricing_status_code := G_STATUS_UNCHANGED; -- insert passed adjustments with X
8683 ELSE
8684   v_pricing_status_code := G_STATUS_NEW; -- passed adjustments with N if called from qp_preq_grp
8685 END IF;
8686 
8687 WHILE (I IS NOT NULL AND
8688        (l_not_insert_order_line_flag = TRUE and
8689         p_line_detail_tbl(I).LINE_INDEX <> l_summary_line_index or
8690         l_not_insert_order_line_flag = FALSE)
8691       )
8692 LOOP
8693   -- populate relevant tables
8694   G_LINE_DETAIL_INDEX_tbl(K) := p_LINE_DETAIL_tbl(I).LINE_DETAIL_INDEX;
8695   G_LINE_DETAIL_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).LINE_DETAIL_TYPE_CODE;
8696   G_PRICE_BREAK_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).PRICE_BREAK_TYPE_CODE;
8697   G_LINE_INDEX_tbl(K) := p_LINE_DETAIL_tbl(I).LINE_INDEX;
8698   G_LIST_HEADER_ID_tbl(K) := p_LINE_DETAIL_tbl(I).LIST_HEADER_ID;
8699   G_LIST_LINE_ID_tbl(K) := p_LINE_DETAIL_tbl(I).LIST_LINE_ID;
8700   G_LIST_LINE_TYPE_TBL(K) := p_LINE_DETAIL_tbl(I).LIST_LINE_TYPE_CODE;
8701   G_LIST_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).CREATED_FROM_LIST_TYPE_CODE;
8702   G_PRICING_GROUP_SEQUENCE_TBL(K) := p_LINE_DETAIL_tbl(I).PRICING_GROUP_SEQUENCE;
8703   G_PRICING_PHASE_ID_TBL(K) := p_LINE_DETAIL_tbl(I).PRICING_PHASE_ID; --added for usage_pricing
8704   G_OPERAND_CALCULATION_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).OPERAND_CALCULATION_CODE;
8705   G_OPERAND_VALUE_TBL(K) := p_LINE_DETAIL_tbl(I).OPERAND_VALUE;
8706   G_SUBSTITUTION_TYPE_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).SUBSTITUTION_TYPE_CODE;
8707   G_SUBSTITUTION_VALUE_FROM_TBL(K) := p_LINE_DETAIL_tbl(I).SUBSTITUTION_FROM;
8708   G_SUBSTITUTION_VALUE_TO_TBL(K) := p_LINE_DETAIL_tbl(I).SUBSTITUTION_TO;
8709   G_PRICING_STATUS_CODE_tbl(K) := v_pricing_status_code;
8710   G_APPLIED_FLAG_tbl(K) := p_LINE_DETAIL_tbl(I).APPLIED_FLAG;
8711   G_AUTOMATIC_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).AUTOMATIC_FLAG;
8712   G_OVERRIDE_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).OVERRIDE_FLAG;
8713   G_PRINT_ON_INVOICE_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).PRINT_ON_INVOICE_FLAG;
8714   G_MODIFIER_LEVEL_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).MODIFIER_LEVEL_CODE;
8715   G_LIST_LINE_NO_TBL(K) := p_LINE_DETAIL_tbl(I).LIST_LINE_NO; --shu, fix bug 2226344
8716   G_CHARGE_TYPE_CODE_TBL(K) := nvl(p_LINE_DETAIL_tbl(I).CHARGE_TYPE_CODE,'');
8717   G_CHARGE_SUBTYPE_CODE_TBL(K) := nvl(p_LINE_DETAIL_tbl(I).CHARGE_SUBTYPE_CODE,'');
8718   G_LINE_QUANTITY_TBL(K) := p_LINE_DETAIL_tbl(I).LINE_QUANTITY;
8719   G_UPDATED_FLAG_TBL(K) := p_LINE_DETAIL_tbl(I).UPDATED_FLAG;
8720   G_CALCULATION_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).CALCULATION_CODE;
8721   G_CHANGE_REASON_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).CHANGE_REASON_CODE;
8722   G_CHANGE_REASON_TEXT_TBL(K) := p_LINE_DETAIL_tbl(I).CHANGE_REASON_TEXT;
8723   G_PROCESS_CODE_TBL(K) := p_LINE_DETAIL_tbl(I).PROCESS_CODE;
8724   -- remaining tables defaulted to null
8725   G_LIST_PRICE_TBL(K) := null;
8726   G_CREATED_FROM_SQL_TBL(K) := null;
8727   G_ASK_FOR_FLAG_TBL(K) := null;
8728   G_PRICE_FORMULA_ID_TBL(K) := null;
8729   G_PRICING_STATUS_TEXT_tbl(K) := null;
8730   G_PRODUCT_PRECEDENCE_TBL(K) := null;
8731   G_INCOMP_GRP_CODE_TBL(K) := null;
8732   G_PROCESSED_FLAG_TBL(K) := null;
8733   G_PRIMARY_UOM_FLAG_TBL(K) := null;
8734   G_BENEFIT_QTY_TBL(K) := null;
8735   G_BENEFIT_UOM_CODE_TBL(K) := null;
8736   G_ACCRUAL_FLAG_TBL(K) := null;
8737   G_ACCRUAL_CONVERSION_RATE_TBL(K) := null;
8738   G_ESTIM_ACCRUAL_RATE_TBL(K) := null;
8739   G_RECURRING_FLAG_TBL(K) := null;
8740   G_SELECTED_VOLUME_ATTR_TBL(K) := null;
8741   G_ROUNDING_FACTOR_TBL(K) := null;
8742   G_HEADER_LIMIT_EXISTS_TBL(K) := null;
8743   G_LINE_LIMIT_EXISTS_TBL(K) := null;
8744 
8745   I := p_LINE_DETAIL_tbl.NEXT(I);
8746   K := K+1;
8747 END LOOP;
8748 
8749 -- perform bulk insert (using public API) if any records present
8750 IF (K > 1) THEN
8751   INSERT_LDETS2(
8752     p_LINE_DETAIL_index => G_LINE_DETAIL_INDEX_tbl,
8753     p_LINE_DETAIL_TYPE_CODE => G_LINE_DETAIL_TYPE_CODE_TBL,
8754     p_PRICE_BREAK_TYPE_CODE => G_PRICE_BREAK_TYPE_CODE_TBL,
8755     p_LIST_PRICE => G_LIST_PRICE_TBL,
8756     p_LINE_INDEX => G_LINE_INDEX_tbl,
8757     p_CREATED_FROM_LIST_HEADER_ID => G_LIST_HEADER_ID_tbl,
8758     p_CREATED_FROM_LIST_LINE_ID => G_LIST_LINE_ID_tbl,
8759     p_CREATED_FROM_LIST_LINE_TYPE => G_LIST_LINE_TYPE_TBL,
8760     p_CREATED_FROM_LIST_TYPE_CODE => G_LIST_TYPE_CODE_TBL,
8761     p_CREATED_FROM_SQL => G_CREATED_FROM_SQL_TBL,
8762     p_PRICING_GROUP_SEQUENCE => G_PRICING_GROUP_SEQUENCE_TBL,
8763     p_PRICING_PHASE_ID => G_PRICING_PHASE_ID_TBL,
8764     p_OPERAND_CALCULATION_CODE => G_OPERAND_CALCULATION_CODE_TBL,
8765     p_OPERAND_VALUE => G_OPERAND_VALUE_TBL,
8766     p_SUBSTITUTION_TYPE_CODE => G_SUBSTITUTION_TYPE_CODE_TBL,
8767     p_SUBSTITUTION_VALUE_FROM => G_SUBSTITUTION_VALUE_FROM_TBL,
8768     p_SUBSTITUTION_VALUE_TO => G_SUBSTITUTION_VALUE_TO_TBL,
8769     p_ASK_FOR_FLAG => G_ASK_FOR_FLAG_TBL,
8770     p_PRICE_FORMULA_ID => G_PRICE_FORMULA_ID_TBL,
8771     p_PRICING_STATUS_CODE => G_PRICING_STATUS_CODE_tbl,
8772     p_PRICING_STATUS_TEXT => G_PRICING_STATUS_TEXT_tbl,
8773     p_PRODUCT_PRECEDENCE => G_PRODUCT_PRECEDENCE_TBL,
8774     p_INCOMPATABLILITY_GRP_CODE => G_INCOMP_GRP_CODE_TBL,
8775     p_PROCESSED_FLAG => G_PROCESSED_FLAG_TBL,
8776     p_APPLIED_FLAG => G_APPLIED_FLAG_tbl,
8777     p_AUTOMATIC_FLAG => G_AUTOMATIC_FLAG_TBL,
8778     p_OVERRIDE_FLAG => G_OVERRIDE_FLAG_TBL,
8779     p_PRIMARY_UOM_FLAG => G_PRIMARY_UOM_FLAG_TBL,
8780     p_PRINT_ON_INVOICE_FLAG => G_PRINT_ON_INVOICE_FLAG_TBL,
8781     p_MODIFIER_LEVEL_CODE => G_MODIFIER_LEVEL_CODE_TBL,
8782     p_BENEFIT_QTY => G_BENEFIT_QTY_TBL,
8783     p_BENEFIT_UOM_CODE => G_BENEFIT_UOM_CODE_TBL,
8784     p_LIST_LINE_NO => G_LIST_LINE_NO_TBL,
8785     p_ACCRUAL_FLAG => G_ACCRUAL_FLAG_TBL,
8786     p_ACCRUAL_CONVERSION_RATE => G_ACCRUAL_CONVERSION_RATE_TBL,
8787     p_ESTIM_ACCRUAL_RATE => G_ESTIM_ACCRUAL_RATE_TBL,
8788     p_RECURRING_FLAG => G_RECURRING_FLAG_TBL,
8789     p_SELECTED_VOLUME_ATTR => G_SELECTED_VOLUME_ATTR_TBL,
8790     p_ROUNDING_FACTOR => G_ROUNDING_FACTOR_TBL,
8791     p_HEADER_LIMIT_EXISTS => G_HEADER_LIMIT_EXISTS_TBL,
8792     p_LINE_LIMIT_EXISTS => G_LINE_LIMIT_EXISTS_TBL,
8793     p_CHARGE_TYPE_CODE => G_CHARGE_TYPE_CODE_TBL,
8794     p_CHARGE_SUBTYPE_CODE => G_CHARGE_SUBTYPE_CODE_TBL,
8795     p_LINE_QUANTITY => G_LINE_QUANTITY_TBL,
8796     p_UPDATED_FLAG => G_UPDATED_FLAG_TBL,
8797     p_CALCULATION_CODE => G_CALCULATION_CODE_TBL,
8798     p_CHANGE_REASON_CODE =>G_CHANGE_REASON_CODE_TBL,
8799     p_CHANGE_REASON_TEXT => G_CHANGE_REASON_TEXT_TBL,
8800     p_PROCESS_CODE => G_PROCESS_CODE_TBL,
8801     x_status_code => l_status_code,
8802     x_status_text => l_status_text
8803   );
8804   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8805     RAISE E_ROUTINE_ERRORS;
8806   END IF;
8807 END IF;
8808 /* end bulk insert ldets */
8809 
8810 
8811 /* begin bulk insert ldet qualifiers -- 3215497 */
8812 -- first reset global tables
8813 Reset_All_Tbls(l_status_code, l_status_text);
8814 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8815  RAISE E_ROUTINE_ERRORS;
8816 END IF;
8817 
8818 I := p_LINE_DETAIL_qual_tbl.FIRST;
8819 K := 1;
8820 WHILE I IS NOT NULL LOOP
8821   -- populate relevant tables
8822   G_LINE_DETAIL_INDEX_tbl(K) := p_LINE_DETAIL_qual_tbl(I).LINE_DETAIL_INDEX;
8823   G_ATTRIBUTE_LEVEL_tbl(K) := G_DETAIL_LEVEL;
8824   G_ATTRIBUTE_TYPE_tbl(K) := G_QUALIFIER_TYPE;
8825   G_CONTEXT_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_CONTEXT;
8826   G_ATTRIBUTE_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_ATTRIBUTE;
8827   G_VALUE_FROM_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM;
8828   G_VALUE_TO_tbl(K) := p_LINE_DETAIL_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO;
8829   G_COMPARISON_OPERATOR_TYPE_tbl(K) := p_LINE_DETAIL_qual_tbl(I).COMPARISON_OPERATOR_CODE;
8830   G_VALIDATED_FLAG_tbl(K) := p_LINE_DETAIL_qual_tbl(I).VALIDATED_FLAG;
8831   -- remaining tables defaulted to null
8832   G_LINE_INDEX_tbl(K) := null;
8833   G_LIST_HEADER_ID_tbl(K) := null;
8834   G_LIST_LINE_ID_tbl(K) := null;
8835   G_SETUP_VALUE_FROM_tbl(K) := null;
8836   G_SETUP_VALUE_TO_tbl(K) := null;
8837   G_GROUPING_NUMBER_tbl(K) := null;
8838   G_NO_QUALIFIERS_IN_GRP_tbl(K) := null;
8839   G_APPLIED_FLAG_tbl(K) := null;
8840   G_PRICING_STATUS_CODE_tbl(K) := null;
8841   G_PRICING_STATUS_TEXT_tbl(K) := null;
8842   G_QUALIFIER_PRECEDENCE_tbl(K) := null;
8843   G_DATATYPE_tbl(K) := null;
8844   G_PRICING_ATTR_FLAG_tbl(K) := null;
8845   G_QUALIFIER_TYPE_tbl(K) := null;
8846   G_PRODUCT_UOM_CODE_tbl(K) := null;
8847   G_EXCLUDER_FLAG_tbl(K) := null;
8848   G_PRICING_PHASE_ID_tbl(K) := null;
8849   G_INCOMP_GRP_CODE_tbl(K) := null;
8850   G_LINE_DETAIL_TYPE_CODE_tbl(K) := null;
8851   G_MODIFIER_LEVEL_CODE_tbl(K) := null;
8852   G_PRIMARY_UOM_FLAG_tbl(K) := null;
8853 
8854   I := p_LINE_DETAIL_qual_tbl.NEXT(I);
8855   K := K+1;
8856 END LOOP;
8857 
8858 -- the next piece of code, which handles ldet line attributes, also calls
8859 -- INSERT_LINE_ATTRS2, so don't reset the global tables, and wait until the
8860 -- tables are completely populated before making one call to the insert API
8861 /* end bulk insert ldet qualifiers */
8862 
8863 /* begin bulk insert ldet line attributes -- 3215497 */
8864 -- continue using global tables where last left off
8865 I := p_LINE_DETAIL_attr_tbl.FIRST;
8866 WHILE I IS NOT NULL LOOP
8867   -- populate relevant tables
8868   G_LINE_INDEX_tbl(K) := p_LINE_DETAIL_attr_tbl(I).LINE_INDEX;
8869   G_LINE_DETAIL_INDEX_tbl(K) := p_LINE_DETAIL_attr_tbl(I).LINE_DETAIL_INDEX;
8870   G_PRICING_STATUS_CODE_tbl(K) := G_STATUS_NEW;
8871   G_ATTRIBUTE_LEVEL_tbl(K) := G_LINE_LEVEL;
8872   G_CONTEXT_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_CONTEXT;
8873   G_ATTRIBUTE_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_ATTRIBUTE;
8874   G_VALUE_FROM_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_ATTR_VALUE_FROM;
8875   G_VALIDATED_FLAG_tbl(K) := p_LINE_DETAIL_attr_tbl(I).VALIDATED_FLAG;
8876   IF (p_LINE_DETAIL_attr_tbl(I).PRICING_CONTEXT = G_ITEM_CONTEXT) THEN
8877     G_ATTRIBUTE_TYPE_tbl(K) := G_PRODUCT_TYPE;
8878     G_VALUE_TO_tbl(K) := null;
8879   ELSIF (p_LINE_DETAIL_attr_tbl(I).PRICING_CONTEXT IS NOT NULL) THEN
8880     G_ATTRIBUTE_TYPE_tbl(K) := G_PRICING_TYPE;
8881     G_VALUE_TO_tbl(K) := p_LINE_DETAIL_attr_tbl(I).PRICING_ATTR_VALUE_TO;
8882   ELSE
8883     G_ATTRIBUTE_TYPE_tbl(K) := null;
8884     G_VALUE_TO_tbl(K) := null;
8885   END IF;
8886   -- remaining tables defaulted to null
8887   G_LIST_HEADER_ID_tbl(K) := null;
8888   G_LIST_LINE_ID_tbl(K) := null;
8889   G_SETUP_VALUE_FROM_tbl(K) := null;
8890   G_SETUP_VALUE_TO_tbl(K) := null;
8891   G_GROUPING_NUMBER_tbl(K) := null;
8892   G_NO_QUALIFIERS_IN_GRP_tbl(K) := null;
8893   G_COMPARISON_OPERATOR_TYPE_tbl(K) := null;
8894   G_APPLIED_FLAG_tbl(K) := null;
8895   G_PRICING_STATUS_TEXT_tbl(K) := null;
8896   G_QUALIFIER_PRECEDENCE_tbl(K) := null;
8897   G_DATATYPE_tbl(K) := null;
8898   G_PRICING_ATTR_FLAG_tbl(K) := null;
8899   G_QUALIFIER_TYPE_tbl(K) := null;
8900   G_PRODUCT_UOM_CODE_tbl(K) := null;
8901   G_EXCLUDER_FLAG_tbl(K) := null;
8902   G_PRICING_PHASE_ID_tbl(K) := null;
8903   G_INCOMP_GRP_CODE_tbl(K) := null;
8904   G_LINE_DETAIL_TYPE_CODE_tbl(K) := null;
8905   G_MODIFIER_LEVEL_CODE_tbl(K) := null;
8906   G_PRIMARY_UOM_FLAG_tbl(K) := null;
8907 
8908   I := p_LINE_DETAIL_attr_tbl.NEXT(I);
8909   K := K+1;
8910 END LOOP;
8911 
8912 -- perform bulk insert (using public API) if any records present
8913 IF (K > 1) THEN
8914   INSERT_LINE_ATTRS2(
8915     p_LINE_INDEX_tbl => G_LINE_INDEX_tbl,
8916     p_LINE_DETAIL_INDEX_tbl => G_LINE_DETAIL_INDEX_tbl,
8917     p_ATTRIBUTE_LEVEL_tbl => G_ATTRIBUTE_LEVEL_tbl,
8918     p_ATTRIBUTE_TYPE_tbl => G_ATTRIBUTE_TYPE_tbl,
8919     p_LIST_HEADER_ID_tbl => G_LIST_HEADER_ID_tbl,
8920     p_LIST_LINE_ID_tbl => G_LIST_LINE_ID_tbl,
8921     p_CONTEXT_tbl => G_CONTEXT_tbl,
8922     p_ATTRIBUTE_tbl => G_ATTRIBUTE_tbl,
8923     p_VALUE_FROM_tbl => G_VALUE_FROM_tbl,
8924     p_SETUP_VALUE_FROM_tbl => G_SETUP_VALUE_FROM_tbl,
8925     p_VALUE_TO_tbl => G_VALUE_TO_tbl,
8926     p_SETUP_VALUE_TO_tbl => G_SETUP_VALUE_TO_tbl,
8927     p_GROUPING_NUMBER_tbl => G_GROUPING_NUMBER_tbl,
8928     p_NO_QUALIFIERS_IN_GRP_tbl => G_NO_QUALIFIERS_IN_GRP_tbl,
8929     p_COMPARISON_OPERATOR_TYPE_tbl => G_COMPARISON_OPERATOR_TYPE_tbl,
8930     p_VALIDATED_FLAG_tbl => G_VALIDATED_FLAG_tbl,
8931     p_APPLIED_FLAG_tbl => G_APPLIED_FLAG_tbl,
8932     p_PRICING_STATUS_CODE_tbl => G_PRICING_STATUS_CODE_tbl,
8933     p_PRICING_STATUS_TEXT_tbl => G_PRICING_STATUS_TEXT_tbl,
8934     p_QUALIFIER_PRECEDENCE_tbl => G_QUALIFIER_PRECEDENCE_tbl,
8935     p_DATATYPE_tbl => G_DATATYPE_tbl,
8936     p_PRICING_ATTR_FLAG_tbl => G_PRICING_ATTR_FLAG_tbl,
8937     p_QUALIFIER_TYPE_tbl => G_QUALIFIER_TYPE_tbl,
8938     p_PRODUCT_UOM_CODE_TBL => G_PRODUCT_UOM_CODE_tbl,
8939     p_EXCLUDER_FLAG_TBL => G_EXCLUDER_FLAG_tbl,
8940     p_PRICING_PHASE_ID_TBL => G_PRICING_PHASE_ID_tbl,
8941     p_INCOMPATABILITY_GRP_CODE_TBL => G_INCOMP_GRP_CODE_tbl,
8942     p_LINE_DETAIL_TYPE_CODE_TBL => G_LINE_DETAIL_TYPE_CODE_tbl,
8943     p_MODIFIER_LEVEL_CODE_TBL => G_MODIFIER_LEVEL_CODE_tbl,
8944     p_PRIMARY_UOM_FLAG_TBL => G_PRIMARY_UOM_FLAG_tbl,
8945     x_status_code => l_status_code,
8946     x_status_text => l_status_text
8947   );
8948   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8949     RAISE E_ROUTINE_ERRORS;
8950   END IF;
8951 END IF;
8952 /* end bulk insert ldet line attributes */
8953 
8954 
8955 /* begin bulk insert rltd lines -- 3215497 */
8956 -- first reset global tables
8957 Reset_All_Tbls(l_status_code, l_status_text);
8958 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
8959  RAISE E_ROUTINE_ERRORS;
8960 END IF;
8961 
8962 I := p_rltd_lines_tbl.FIRST;
8963 K := 1;
8964 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8965   engine_debug('RLTD first in populate_temp_table: '||I);
8966 END IF;
8967 WHILE I IS NOT NULL LOOP
8968   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8969     engine_debug('Collecting in rltd table');
8970   END IF;
8971   -- populate relevant tables
8972   G_LINE_INDEX_tbl(K) := p_rltd_lines_tbl(I).LINE_INDEX;
8973   G_LINE_DETAIL_INDEX_tbl(K) := p_rltd_lines_tbl(I).LINE_DETAIL_INDEX;
8974   G_RELATIONSHIP_TYPE_TBL(K) := p_rltd_lines_tbl(I).RELATIONSHIP_TYPE_CODE;
8975   G_RLTD_LINE_INDEX_TBL(K) := p_rltd_lines_tbl(I).RELATED_LINE_INDEX;
8976   G_RLTD_LINE_DETAIL_INDEX_TBL(K) := p_rltd_lines_tbl(I).RELATED_LINE_DETAIL_INDEX;
8977 
8978   I := p_rltd_lines_tbl.NEXT(I);
8979   K := K+1;
8980 END LOOP;
8981 
8982 -- perform bulk insert (using public API) if any records present
8983 IF (K > 1) THEN
8984   INSERT_RLTD_LINES2(
8985     p_LINE_INDEX => G_LINE_INDEX_tbl,
8986     p_LINE_DETAIL_INDEX => G_LINE_DETAIL_INDEX_tbl,
8987     p_RELATIONSHIP_TYPE_CODE => G_RELATIONSHIP_TYPE_TBL,
8988     p_RELATED_LINE_INDEX => G_RLTD_LINE_INDEX_TBL,
8989     p_RELATED_LINE_DETAIL_INDEX => G_RLTD_LINE_DETAIL_INDEX_TBL,
8990     x_status_code => l_status_code,
8991     x_status_text => l_status_text
8992   );
8993   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
8994     RAISE E_ROUTINE_ERRORS;
8995   END IF;
8996   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
8997     engine_debug('after bulk insert rltd lines');
8998   END IF;
8999 END IF;
9000 /* end bulk insert rltd lines */
9001 
9002 
9003 
9004 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9005   OPEN l_get_count_cur;
9006   FETCH l_get_count_cur INTO l_count;
9007   CLOSE l_get_count_cur;
9008   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9009   engine_debug ('Culprit Attribute Count :' || l_count);
9010   END IF;
9011 END IF;
9012 
9013 --x_status_code := FND_API.G_RET_STS_SUCCESS;
9014 
9015 
9016 --Reset_all_tbls;
9017 Reset_All_Tbls(l_status_code ,l_status_text );
9018 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
9019  RAISE E_ROUTINE_ERRORS;
9020 END IF;
9021 
9022 EXCEPTION
9023 WHEN E_ROUTINE_ERRORS THEN
9024   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9025   engine_debug(l_routine||': '||l_status_text);
9026   END IF;
9027   x_status_text := l_status_text;
9028   x_status_code := FND_API.G_RET_STS_ERROR;
9029 WHEN E_DATE_IS_NULL THEN
9030   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9031   engine_debug('Date or date type is null');
9032   engine_debug('Date or date type is null');
9033   END IF;
9034   x_status_code :=  FND_API.G_RET_STS_ERROR;
9035   x_status_text := 'Error in QP_PREQ_GRP.populate_temp_tables: One of the three dates is null';
9036 WHEN E_CURRENCY_CODE_IS_NULL THEN
9037   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9038   engine_debug('Currency code can not be null');
9039   engine_debug('Currency code can not be null');
9040   END IF;
9041   x_status_code :=  FND_API.G_RET_STS_ERROR;
9042   x_status_text := 'Error in QP_PREQ_GRP.populate_temp_tables: Currency can not be null';
9043 WHEN OTHERS THEN
9044   v_error_code :=SQLCODE;
9045   v_error_message:=SQLERRM;
9046   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9047   engine_debug('Error in QP_PREQ_GRP.populate_temp_tables: '||SQLERRM);
9048   END IF;
9049   x_status_code := FND_API.G_RET_STS_ERROR;
9050   x_status_text :='Error in QP_PREQ_GRP.populate_temp_tables:'||SQLERRM;
9051 
9052 END Populate_Temp_Tables;
9053 
9054 /*+------------------------------------------------------------
9055   |PROCEDURE SET_EXPIRATION_DATES
9056   +------------------------------------------------------------
9057 */
9058 
9059 PROCEDURE SET_EXPIRATION_DATES (p_number_expiration_period   IN  NUMBER,
9060                                 p_expiration_period_uom_code IN  VARCHAR2,
9061                                 p_line_index                 IN  NUMBER,
9062                                 x_expiration_period_end_date OUT NOCOPY DATE,
9063                                 x_status_code                OUT NOCOPY VARCHAR2,
9064                                 x_status_text                OUT NOCOPY VARCHAR2) AS
9065 E_Coupon_Error EXCEPTION;
9066 l_expiration_period_end_date Date;
9067 l_dummy                      Date;
9068 l_status_code                VARCHAR2(240);
9069 l_status_text                VARCHAR2(240);
9070 l_routine VARCHAR2(240):='QP_PRQ_GRP.SET_EXPIRATION_DATES';
9071 l_pricing_effective_date Date;
9072 l_debug varchar2(3);
9073 
9074 /*
9075 INDX,QP_PREQ_GRP.set_expiration_dates.l_get_pricing_effective_date,qp_npreq_lines_tmp_N1,LINE_INDEX,1
9076 */
9077 CURSOR l_get_pricing_effective_date (p_line_index IN PLS_INTEGER) IS
9078 SELECT pricing_effective_date
9079 FROM   qp_npreq_lines_tmp
9080 WHERE  line_index = p_line_index;
9081 
9082 --added by yangli for Java Engine interface tables
9083 /*
9084 INDX,QP_PREQ_GRP.set_expiration_dates.l_int_pricing_effective_date,qp_int_lines_N1,LINE_INDEX,1
9085 */
9086 CURSOR l_int_pricing_effective_date (p_line_index IN PLS_INTEGER) IS
9087 SELECT pricing_effective_date
9088 FROM   qp_int_lines
9089 WHERE  line_index = p_line_index;
9090 
9091 BEGIN
9092   x_status_code := FND_API.G_RET_STS_SUCCESS;
9093 
9094   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
9095   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9096   IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
9097     IF l_debug = FND_API.G_TRUE THEN
9098      QP_PREQ_GRP.ENGINE_DEBUG('Populate_Price_Adj_ID: Java Engine not Installed ----------');
9099     END IF;
9100   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9101     OPEN  l_get_pricing_effective_date (p_line_index);
9102     FETCH l_get_pricing_effective_date into l_pricing_effective_date;
9103     CLOSE l_get_pricing_effective_date;
9104   ELSE
9105     IF l_debug = FND_API.G_TRUE THEN
9106      QP_PREQ_GRP.ENGINE_DEBUG('Set_Expiration_Dates: Java Engine is Installed ----------');
9107     END IF;
9108     OPEN  l_int_pricing_effective_date (p_line_index);
9109     FETCH l_int_pricing_effective_date into l_pricing_effective_date;
9110     CLOSE l_int_pricing_effective_date;
9111   END IF;
9112 
9113   QP_COUPON_PVT.Set_Expiration_Dates
9114           (l_dummy,
9115            l_expiration_period_end_date,
9116            p_number_expiration_period,
9117            p_expiration_period_uom_code,
9118            l_pricing_effective_date,
9119            l_status_code,
9120            l_status_text);
9121 
9122 IF (l_status_code <> FND_API.G_RET_STS_SUCCESS) Then
9123   Raise E_Coupon_Error;
9124 END IF;
9125 
9126    x_expiration_period_end_date := l_expiration_period_end_date;
9127 
9128 EXCEPTION
9129 
9130 WHEN  E_Coupon_Error THEN
9131   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9132   engine_debug('Error returned by QP_COUPON_PVT.Set_Expiration_Dates');
9133   END IF;
9134   x_status_code := FND_API.G_RET_STS_ERROR;
9135   x_status_text :=l_routine||':'||l_status_text;
9136 WHEN OTHERS THEN
9137   x_status_code := FND_API.G_RET_STS_ERROR;
9138   x_status_code := l_routine||':'||SQLERRM;
9139   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9140   engine_debug(l_routine||':'||SQLERRM);
9141   END IF;
9142 END;
9143 
9144 
9145 /*+-----------------------------------------------------------
9146   |PROCEDURE Populate_OutPut
9147   +-----------------------------------------------------------
9148 */
9149 PROCEDURE Populate_Output
9150 (x_line_tbl             OUT NOCOPY LINE_TBL_TYPE,
9151  x_line_qual_tbl        OUT NOCOPY QUAL_TBL_TYPE,
9152  x_line_attr_tbl        OUT NOCOPY LINE_ATTR_TBL_TYPE,
9153  x_line_detail_tbl      OUT NOCOPY LINE_DETAIL_TBL_TYPE,
9154  x_line_detail_qual_tbl OUT NOCOPY LINE_DETAIL_QUAL_TBL_TYPE,
9155  x_line_detail_attr_tbl OUT NOCOPY LINE_DETAIL_ATTR_TBL_TYPE,
9156  x_related_lines_tbl    OUT NOCOPY RELATED_LINES_TBL_TYPE)
9157 AS
9158 /*
9159 INDX,QP_PREQ_GRP.populate_output.l_lines_cur,- No Index Used -,NA,NA
9160 */
9161   CURSOR l_lines_cur IS
9162     SELECT LINE_INDEX,
9163            LINE_ID,
9164            PRICE_LIST_HEADER_ID, -- shu, print out this
9165            LINE_TYPE_CODE,
9166            LINE_QUANTITY,
9167            LINE_UOM_CODE,
9168            LINE_UNIT_PRICE, -- shu
9169            ROUNDING_FACTOR, -- shu
9170            PRICED_QUANTITY,
9171            UOM_QUANTITY,
9172            PRICED_UOM_CODE,
9173            CURRENCY_CODE,
9174            UNIT_PRICE,
9175            PERCENT_PRICE,
9176            PARENT_PRICE,
9177            PARENT_QUANTITY,
9178            PARENT_UOM_CODE,
9179            PRICE_FLAG,
9180            ADJUSTED_UNIT_PRICE,
9181            UPDATED_ADJUSTED_UNIT_PRICE,
9182            PROCESSING_ORDER,
9183            PROCESSED_CODE,
9184            PRICING_STATUS_CODE,
9185            PRICING_STATUS_TEXT,
9186            HOLD_CODE,
9187            HOLD_TEXT,
9188            PRICE_REQUEST_CODE,
9189            PRICING_EFFECTIVE_DATE,
9190            EXTENDED_PRICE 		/* block pricing */
9191            --EXTENDED_SELLING_PRICE_UR,    --[prarasto:Post Round]New fields for unrounded values, [julin/postround] redesign
9192            --ORDER_UOM_SELLING_PRICE_UR,   --[prarasto:Post Round]
9193            --ADJUSTED_UNIT_PRICE_UR        --[prarasto:Post Round]
9194     FROM   qp_npreq_lines_tmp;
9195 
9196 /*
9197 INDX,QP_PREQ_GRP.populate_output.l_qual_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,1
9198 
9199 INDX,QP_PREQ_GRP.populate_output.l_qual_cur,qp_npreq_line_attrs_tmp_N3,LINE_DETAIL_INDEX,1
9200 INDX,QP_PREQ_GRP.populate_output.l_qual_cur,qp_npreq_line_attrs_tmp_N3,ATTRIBUTE_TYPE,2
9201 */
9202   CURSOR l_qual_cur (L_ATTRIBUTE_LEVEL VARCHAR2)IS
9203     SELECT /*+ dynamic_sampling(1) */ QPLAT.LINE_INDEX,
9204            QPLAT.LINE_DETAIL_INDEX,
9205            QPLAT.CONTEXT,
9206            QPLAT.ATTRIBUTE,
9207            QPLAT.SETUP_VALUE_FROM,
9208            QPLAT.SETUP_VALUE_TO,
9209            QPLAT.COMPARISON_OPERATOR_TYPE_CODE,
9210            QPLAT.VALIDATED_FLAG,
9211            QPLAT.PRICING_STATUS_CODE,
9212            QPLAT.PRICING_STATUS_TEXT
9213      FROM  qp_npreq_ldets_tmp QPLD ,
9214            qp_npreq_line_attrs_tmp QPLAT
9215      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT.LINE_DETAIL_INDEX
9216      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9217      AND   QPLAT.ATTRIBUTE_TYPE = 'QUALIFIER';
9218            --AND QPLAT.PRICING_STATUS_CODE = G_STATUS_NEW;
9219 
9220 /*
9221 INDX,QP_PREQ_GRP.populate_output.l_pricing_attr_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,1
9222 
9223 INDX,QP_PREQ_GRP.populate_output.l_pricing_attr_cur,qp_npreq_line_attrs_tmp_N3,LINE_DETAIL_INDEX,1
9224 INDX,QP_PREQ_GRP.populate_output.l_pricing_attr_cur,qp_npreq_line_attrs_tmp_N3,ATTRIBUTE_TYPE,2
9225 */
9226   CURSOR l_pricing_attr_cur IS
9227     SELECT /*+ dynamic_sampling(1) */ QPLAT_PRICING.CONTEXT        PRICING_CONTEXT,
9228            QPLAT_PRICING.ATTRIBUTE      PRICING_ATTRIBUTE,
9229            nvl(QPLAT_PRICING.SETUP_VALUE_FROM,QPLAT_PRICING.VALUE_FROM)     PRICING_ATTR_VALUE_FROM,
9230            QPLAT_PRICING.SETUP_VALUE_TO       PRICING_ATTR_VALUE_TO,
9231            QPLAT_PRICING.COMPARISON_OPERATOR_TYPE_CODE,
9232            QPLAT_PRICING.LINE_DETAIL_INDEX,
9233            QPLAT_PRICING.LINE_INDEX,
9234            QPLAT_PRICING.VALIDATED_FLAG
9235      FROM  qp_npreq_ldets_tmp QPLD ,
9236            qp_npreq_line_attrs_tmp QPLAT_PRICING
9237      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT_PRICING.LINE_DETAIL_INDEX
9238      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9239      AND   QPLAT_PRICING.ATTRIBUTE_TYPE IN ('PRICING','PRODUCT');
9240            --AND QPLAT_PRICING.PRICING_STATUS_CODE = G_STATUS_NEW;
9241 
9242 /*
9243 INDX,QP_PREQ_GRP.populate_output.l_ldets_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
9244 
9245 INDX,QP_PREQ_GRP.populate_output.l_ldets_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,1
9246 
9247 INDX,QP_PREQ_GRP.populate_output.l_ldets_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
9248 */
9249   CURSOR l_ldets_cur IS
9250 
9251     SELECT /*+ ORDERED USE_NL(A B C) l_ldets_cur */
9252 
9253            a.LINE_DETAIL_INDEX,
9254            a.LINE_DETAIL_TYPE_CODE,
9255            a.LINE_INDEX,
9256            a.CREATED_FROM_LIST_HEADER_ID LIST_HEADER_ID,
9257            a.CREATED_FROM_LIST_LINE_ID   LIST_LINE_ID,
9258            a.CREATED_FROM_LIST_LINE_TYPE LIST_LINE_TYPE_CODE,
9259            a.PRICE_BREAK_TYPE_CODE,
9260            a.LINE_QUANTITY,
9261            a.ADJUSTMENT_AMOUNT,
9262            a.AUTOMATIC_FLAG,
9263            a.PRICING_PHASE_ID,
9264            a.OPERAND_CALCULATION_CODE,
9265            a.OPERAND_VALUE,
9266            a.PRICING_GROUP_SEQUENCE,
9267            a.CREATED_FROM_LIST_TYPE_CODE,
9268            a.APPLIED_FLAG,
9269            a.PRICING_STATUS_CODE,
9270            a.PRICING_STATUS_TEXT,
9271            a.LIMIT_CODE,
9272            a.LIMIT_TEXT,
9273            a.LIST_LINE_NO,
9274            a.GROUP_QUANTITY,
9275            a.GROUP_AMOUNT, -- 2388011_new
9276            a.UPDATED_FLAG,
9277 	   a.PROCESS_CODE,
9278 	   a.CALCULATION_CODE,
9279 	   a.CHANGE_REASON_CODE,
9280 	   a.CHANGE_REASON_TEXT,
9281            b.SUBSTITUTION_VALUE SUBSTITUTION_VALUE_TO,
9282            b.SUBSTITUTION_ATTRIBUTE,
9283            b.ACCRUAL_FLAG,
9284            b.modifier_level_code,
9285            b.ESTIM_GL_VALUE,
9286            b.ACCRUAL_CONVERSION_RATE,
9287            --Pass throuh components
9288            b.OVERRIDE_FLAG,
9289            b.PRINT_ON_INVOICE_FLAG,
9290            b.INVENTORY_ITEM_ID,
9291            b.ORGANIZATION_ID,
9292            b.RELATED_ITEM_ID,
9293            b.RELATIONSHIP_TYPE_ID,
9294            b.ESTIM_ACCRUAL_RATE,
9295            b.EXPIRATION_DATE,
9296            b.BENEFIT_PRICE_LIST_LINE_ID,
9297            b.RECURRING_FLAG,
9298            b.RECURRING_VALUE,  --for block pricing bug 3657116
9299            b.BENEFIT_LIMIT,
9300            b.CHARGE_TYPE_CODE,
9301            b.CHARGE_SUBTYPE_CODE,
9302            b.BENEFIT_QTY,
9303            b.BENEFIT_UOM_CODE,
9304            b.PRORATION_TYPE_CODE,
9305            b.INCLUDE_ON_RETURNS_FLAG,
9306            b.REBATE_TRANSACTION_TYPE_CODE,
9307            b.NUMBER_EXPIRATION_PERIODS,
9308            b.EXPIRATION_PERIOD_UOM,
9309            b.COMMENTS,
9310            b.break_uom_code, /* proration */
9311            b.break_uom_context, /* proration */
9312            b.break_uom_attribute /* proration */
9313     FROM  qp_npreq_ldets_tmp a,
9314           QP_LIST_LINES     b
9315     WHERE a.CREATED_FROM_LIST_LINE_ID = b.LIST_LINE_ID
9316     AND   a.PRICING_STATUS_CODE = G_STATUS_NEW;
9317 
9318 /*
9319 INDX,QP_PREQ_GRP.populate_output.l_rltd_lines_cur,- No Index Used -,NA,NA
9320 */
9321   CURSOR l_rltd_lines_cur IS
9322     SELECT  LINE_INDEX,
9323             LINE_DETAIL_INDEX,
9324             RELATIONSHIP_TYPE_CODE,
9325             RELATED_LINE_INDEX,
9326             RELATED_LINE_DETAIL_INDEX,
9327             PRICING_STATUS_CODE,
9328             PRICING_STATUS_TEXT
9329     FROM qp_npreq_rltd_lines_tmp
9330     WHERE PRICING_STATUS_CODE = G_STATUS_NEW
9331     ORDER BY SETUP_VALUE_FROM;
9332 
9333 --for Java Engine interface tables
9334 /*
9335 INDX,QP_PREQ_GRP.populate_output.l_int_lines_cur,- No Index Used -,NA,NA
9336 */
9337   CURSOR l_int_lines_cur IS
9338     SELECT LINE_INDEX,
9339            LINE_ID,
9340            PRICE_LIST_HEADER_ID, -- shu, print out this
9341            LINE_TYPE_CODE,
9342            LINE_QUANTITY,
9343            LINE_UOM_CODE,
9344            LINE_UNIT_PRICE, -- shu
9345            ROUNDING_FACTOR, -- shu
9346            PRICED_QUANTITY,
9347            UOM_QUANTITY,
9348            PRICED_UOM_CODE,
9349            CURRENCY_CODE,
9350            UNIT_PRICE,
9351            PERCENT_PRICE,
9352            PARENT_PRICE,
9353            PARENT_QUANTITY,
9354            PARENT_UOM_CODE,
9355            PRICE_FLAG,
9356            ADJUSTED_UNIT_PRICE,
9357            UPDATED_ADJUSTED_UNIT_PRICE,
9358            PROCESSING_ORDER,
9359            PROCESSED_CODE,
9360            PRICING_STATUS_CODE,
9361            PRICING_STATUS_TEXT,
9362            HOLD_CODE,
9363            HOLD_TEXT,
9364            PRICE_REQUEST_CODE,
9365            PRICING_EFFECTIVE_DATE,
9366            EXTENDED_PRICE 		/* block pricing */
9367     FROM   qp_int_lines;
9368 
9369 /*
9370 INDX,QP_PREQ_GRP.populate_output.l_int_qual_cur,qp_int_ldets_N4,PRICING_STATUS_CODE,1
9371 
9372 INDX,QP_PREQ_GRP.populate_output.l_int_qual_cur,qp_int_line_attrs_N3,LINE_DETAIL_INDEX,1
9373 INDX,QP_PREQ_GRP.populate_output.l_int_qual_cur,qp_int_line_attrs_N3,ATTRIBUTE_TYPE,2
9374 */
9375   CURSOR l_int_qual_cur (L_ATTRIBUTE_LEVEL VARCHAR2)IS
9376     SELECT /*+ dynamic_sampling(1) */ QPLAT.LINE_INDEX,
9377            QPLAT.LINE_DETAIL_INDEX,
9378            QPLAT.CONTEXT,
9379            QPLAT.ATTRIBUTE,
9380            QPLAT.SETUP_VALUE_FROM,
9381            QPLAT.SETUP_VALUE_TO,
9382            QPLAT.COMPARISON_OPERATOR_TYPE_CODE,
9383            QPLAT.VALIDATED_FLAG,
9384            QPLAT.PRICING_STATUS_CODE,
9385            QPLAT.PRICING_STATUS_TEXT
9386      FROM  qp_int_ldets QPLD ,
9387            qp_int_line_attrs QPLAT
9388      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT.LINE_DETAIL_INDEX
9389      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9390      AND   QPLAT.ATTRIBUTE_TYPE = 'QUALIFIER';
9391            --AND QPLAT.PRICING_STATUS_CODE = G_STATUS_NEW;
9392 
9393 /*
9394 INDX,QP_PREQ_GRP.populate_output.l_int_pricing_attr_cur,qp_int_ldets_N4,PRICING_STATUS_CODE,1
9395 
9396 INDX,QP_PREQ_GRP.populate_output.l_int_pricing_attr_cur,qp_int_line_attrs_N3,LINE_DETAIL_INDEX,1
9397 INDX,QP_PREQ_GRP.populate_output.l_int_pricing_attr_cur,qp_int_line_attrs_N3,ATTRIBUTE_TYPE,2
9398 */
9399   CURSOR l_int_pricing_attr_cur IS
9400     SELECT QPLAT_PRICING.CONTEXT        PRICING_CONTEXT,
9401            QPLAT_PRICING.ATTRIBUTE      PRICING_ATTRIBUTE,
9402            nvl(QPLAT_PRICING.SETUP_VALUE_FROM,QPLAT_PRICING.VALUE_FROM)     PRICING_ATTR_VALUE_FROM,
9403            QPLAT_PRICING.SETUP_VALUE_TO       PRICING_ATTR_VALUE_TO,
9404            QPLAT_PRICING.COMPARISON_OPERATOR_TYPE_CODE,
9405            QPLAT_PRICING.LINE_DETAIL_INDEX,
9406            QPLAT_PRICING.LINE_INDEX,
9407            QPLAT_PRICING.VALIDATED_FLAG
9408      FROM  qp_int_ldets QPLD ,
9409            qp_int_line_attrs QPLAT_PRICING
9410      WHERE QPLD.LINE_DETAIL_INDEX = QPLAT_PRICING.LINE_DETAIL_INDEX
9411      AND   QPLD.PRICING_STATUS_CODE = G_STATUS_NEW
9412      AND   QPLAT_PRICING.ATTRIBUTE_TYPE IN ('PRICING','PRODUCT');
9413            --AND QPLAT_PRICING.PRICING_STATUS_CODE = G_STATUS_NEW;
9414 
9415 /*
9416 INDX,QP_PREQ_GRP.populate_output.l_int_ldets_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
9417 
9418 INDX,QP_PREQ_GRP.populate_output.l_int_ldets_cur,qp_int_ldets_N4,PRICING_STATUS_CODE,1
9419 
9420 INDX,QP_PREQ_GRP.populate_output.l_int_ldets_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
9421 */
9422   CURSOR l_int_ldets_cur IS
9423 
9424     SELECT /*+ ORDERED USE_NL(A B C) l_int_ldets_cur */
9425 
9426            a.LINE_DETAIL_INDEX,
9427            a.LINE_DETAIL_TYPE_CODE,
9428            a.LINE_INDEX,
9429            a.CREATED_FROM_LIST_HEADER_ID LIST_HEADER_ID,
9430            a.CREATED_FROM_LIST_LINE_ID   LIST_LINE_ID,
9431            a.CREATED_FROM_LIST_LINE_TYPE LIST_LINE_TYPE_CODE,
9432            a.PRICE_BREAK_TYPE_CODE,
9433            a.LINE_QUANTITY,
9434            a.ADJUSTMENT_AMOUNT,
9435            a.AUTOMATIC_FLAG,
9436            a.PRICING_PHASE_ID,
9437            a.OPERAND_CALCULATION_CODE,
9438            a.OPERAND_VALUE,
9439            a.PRICING_GROUP_SEQUENCE,
9440            a.CREATED_FROM_LIST_TYPE_CODE,
9441            a.APPLIED_FLAG,
9442            a.PRICING_STATUS_CODE,
9443            a.PRICING_STATUS_TEXT,
9444            a.LIMIT_CODE,
9445            a.LIMIT_TEXT,
9446            a.LIST_LINE_NO,
9447            a.GROUP_QUANTITY,
9448            a.GROUP_AMOUNT, -- 2388011_new
9449            a.UPDATED_FLAG,
9450 	   a.PROCESS_CODE,
9451 	   a.CALCULATION_CODE,
9452 	   a.CHANGE_REASON_CODE,
9453 	   a.CHANGE_REASON_TEXT,
9454            b.SUBSTITUTION_VALUE SUBSTITUTION_VALUE_TO,
9455            b.SUBSTITUTION_ATTRIBUTE,
9456            b.ACCRUAL_FLAG,
9457            b.modifier_level_code,
9458            b.ESTIM_GL_VALUE,
9459            b.ACCRUAL_CONVERSION_RATE,
9460            --Pass throuh components
9461            b.OVERRIDE_FLAG,
9462            b.PRINT_ON_INVOICE_FLAG,
9463            b.INVENTORY_ITEM_ID,
9464            b.ORGANIZATION_ID,
9465            b.RELATED_ITEM_ID,
9466            b.RELATIONSHIP_TYPE_ID,
9467            b.ESTIM_ACCRUAL_RATE,
9468            b.EXPIRATION_DATE,
9469            b.BENEFIT_PRICE_LIST_LINE_ID,
9470            b.RECURRING_FLAG,
9471            b.BENEFIT_LIMIT,
9472            b.CHARGE_TYPE_CODE,
9473            b.CHARGE_SUBTYPE_CODE,
9474            b.BENEFIT_QTY,
9475            b.BENEFIT_UOM_CODE,
9476            b.PRORATION_TYPE_CODE,
9477            b.INCLUDE_ON_RETURNS_FLAG,
9478            b.REBATE_TRANSACTION_TYPE_CODE,
9479            b.NUMBER_EXPIRATION_PERIODS,
9480            b.EXPIRATION_PERIOD_UOM,
9481            b.COMMENTS,
9482            b.break_uom_code, /* proration */
9483            b.break_uom_context, /* proration */
9484            b.break_uom_attribute /* proration */
9485     FROM  qp_int_ldets a,
9486           QP_LIST_LINES     b
9487     WHERE a.CREATED_FROM_LIST_LINE_ID = b.LIST_LINE_ID
9488     AND   a.PRICING_STATUS_CODE = G_STATUS_NEW;
9489 
9490 /*
9491 INDX,QP_PREQ_GRP.populate_output.l_int_rltd_lines_cur,- No Index Used -,NA,NA
9492 */
9493   CURSOR l_int_rltd_lines_cur IS
9494     SELECT  LINE_INDEX,
9495             LINE_DETAIL_INDEX,
9496             RELATIONSHIP_TYPE_CODE,
9497             RELATED_LINE_INDEX,
9498             RELATED_LINE_DETAIL_INDEX,
9499             PRICING_STATUS_CODE,
9500             PRICING_STATUS_TEXT
9501     FROM qp_int_rltd_lines
9502     WHERE PRICING_STATUS_CODE = G_STATUS_NEW
9503     ORDER BY SETUP_VALUE_FROM;
9504 
9505 I PLS_INTEGER :=1;
9506 J PLS_INTEGER :=1;
9507 l_expiration_period_end_date Date;
9508 l_status_code VARCHAR2(30);
9509 l_status_text VARCHAR2(30);
9510 E_ROUTINE_ERROR EXCEPTION;
9511 l_routine VARCHAR2(240):='QP_PREQ_GRP.POPULATE_OUTPUT';
9512 l_debug varchar2(3);
9513 
9514 BEGIN
9515   l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
9516 
9517   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9518   engine_debug('----Before populate l_line_tbl-----');
9519   engine_debug('----Line information return back to caller----');
9520   END IF;
9521 
9522   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9523   IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
9524     IF l_debug = FND_API.G_TRUE THEN
9525       QP_PREQ_GRP.ENGINE_DEBUG('Populate_output: Java Engine not Installed ----------');
9526     END IF;
9527   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9528 
9529   FOR l_line IN l_lines_cur LOOP
9530     --requirement from Jay, will cause holes in pl/sql table.
9531     I :=  l_line.LINE_INDEX;
9532     x_line_tbl(I).LINE_INDEX := l_line.LINE_INDEX;
9533     x_line_tbl(I).LINE_ID    := l_line.LINE_ID;
9534     x_line_tbl(I).HEADER_ID    := l_line.PRICE_LIST_HEADER_ID;
9535     x_line_tbl(I).LINE_TYPE_CODE := l_line.LINE_TYPE_CODE;
9536     x_line_tbl(I).PRICED_QUANTITY := l_line.PRICED_QUANTITY;
9537     x_line_tbl(I).CURRENCY_CODE := l_line.CURRENCY_CODE;
9538     x_line_tbl(I).ROUNDING_FACTOR := l_line.ROUNDING_FACTOR;
9539     x_line_tbl(I).PRICED_UOM_CODE := l_line.PRICED_UOM_CODE;
9540     x_line_tbl(I).UNIT_PRICE := l_line.UNIT_PRICE; --shu_latest
9541     x_line_tbl(I).LINE_QUANTITY:=l_line.LINE_QUANTITY;
9542     x_line_tbl(I).LINE_UOM_CODE:=l_line.LINE_UOM_CODE;
9543     x_line_tbl(I).LINE_UNIT_PRICE := l_line.LINE_UNIT_PRICE; --shu_latest
9544     x_line_tbl(I).UOM_QUANTITY := l_line.UOM_QUANTITY; --shu_latest
9545     x_line_tbl(I).PERCENT_PRICE := l_line.PERCENT_PRICE;
9546     x_line_tbl(I).ADJUSTED_UNIT_PRICE := l_line.ADJUSTED_UNIT_PRICE;
9547     x_line_tbl(I).UPDATED_ADJUSTED_UNIT_PRICE := l_line.UPDATED_ADJUSTED_UNIT_PRICE;
9548     x_line_tbl(I).PARENT_PRICE := l_line.PARENT_PRICE;
9549     x_line_tbl(I).PARENT_QUANTITY := l_line.PARENT_QUANTITY;
9550     x_line_tbl(I).PARENT_UOM_CODE := l_line.PARENT_UOM_CODE;
9551     x_line_tbl(I).PROCESSED_CODE := l_line.PROCESSED_CODE;
9552     x_line_tbl(I).PRICE_FLAG := l_line.PRICE_FLAG;
9553     x_line_tbl(I).STATUS_CODE := l_line.PRICING_STATUS_CODE;
9554     x_line_tbl(I).STATUS_TEXT := substr(l_line.PRICING_STATUS_TEXT,1,2000); -- shulin, fix bug 1745788
9555     x_line_tbl(I).HOLD_CODE := l_line.HOLD_CODE;
9556     x_line_tbl(I).HOLD_TEXT := substr(l_line.HOLD_TEXT,1,240);
9557     x_line_tbl(I).PRICE_REQUEST_CODE := l_line.PRICE_REQUEST_CODE;
9558     x_line_tbl(I).PRICING_EFFECTIVE_DATE := l_line.PRICING_EFFECTIVE_DATE;
9559     x_line_tbl(I).EXTENDED_PRICE := l_line.EXTENDED_PRICE; -- block pricing
9560     --x_line_tbl(I).EXTENDED_SELLING_PRICE_UR := l_line.EXTENDED_SELLING_PRICE_UR;   --[prarasto:Post Round], [julin/postround] redesign
9561     --x_line_tbl(I).ORDER_UOM_SELLING_PRICE_UR := l_line.ORDER_UOM_SELLING_PRICE_UR; --[prarasto:Post Round]
9562     --x_line_tbl(I).ADJUSTED_UNIT_PRICE_UR := l_line.ADJUSTED_UNIT_PRICE_UR;         --[prarasto:Post Round]
9563 
9564     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9565     engine_debug('LINE_INDEX :='||l_line.LINE_INDEX);
9566     engine_debug('LINE_ID    :='||l_line.LINE_ID);
9567     engine_debug('PRICE_LIST_HEADER_ID   :='||l_line.PRICE_LIST_HEADER_ID); -- shu, print out this
9568     engine_debug('LINE_TYPE_CODE :='||l_line.LINE_TYPE_CODE);
9569     engine_debug('UOM_QUANTITY :='||l_line.UOM_QUANTITY);
9570     engine_debug('CURRENCY_CODE :='||l_line.CURRENCY_CODE);
9571     engine_debug('ROUNDING_FACTOR :='||l_line.ROUNDING_FACTOR);
9572     engine_debug('PRICED_QUANTITY :='||l_line.PRICED_QUANTITY);
9573     engine_debug('PRICED_UOM_CODE :='||l_line.PRICED_UOM_CODE);
9574     engine_debug('UNIT_PRICE :='||l_line.UNIT_PRICE);
9575     engine_debug('LINE_QUANTITY:='||l_line.LINE_QUANTITY);
9576     engine_debug('LINE_UOM_CODE:='||l_line.LINE_UOM_CODE);
9577     engine_debug('LINE_UNIT_PRICE:='||l_line.LINE_UNIT_PRICE); -- shu_latest
9578     engine_debug('PERCENT_PRICE :='||l_line.PERCENT_PRICE);
9579     engine_debug('ADJUSTED_UNIT_PRICE :='||l_line.ADJUSTED_UNIT_PRICE);
9580     engine_debug('PARENT_PRICE :='||l_line.PARENT_PRICE);
9581     engine_debug('PARENT_QUANTITY :='||l_line.PARENT_QUANTITY);
9582     engine_debug('PARENT_UOM_CODE :='||l_line.PARENT_UOM_CODE);
9583     engine_debug('processed_code :='||l_line.processed_code);
9584     engine_debug('Price Flag :='||l_line.price_flag);
9585     engine_debug('STATUS_CODE :='||l_line.PRICING_STATUS_CODE);
9586     engine_debug('STATUS_TEXT :='|| substr(l_line.PRICING_STATUS_TEXT,1,2000));
9587     engine_debug('HOLD_CODE := '||l_line.HOLD_CODE);
9588     engine_debug('HOLD_TEXT := '||substr(l_line.HOLD_TEXT,1,240));
9589     engine_debug('PRICE_REQUEST_CODE := '||l_line.PRICE_REQUEST_CODE);
9590     engine_debug('PRICING_DATE := '||l_line.PRICING_EFFECTIVE_DATE);
9591     engine_debug('EXTENDED_PRICE := '||l_line.EXTENDED_PRICE);
9592     --engine_debug('EXTENDED_SELLING_PRICE_UR := '|| l_line.EXTENDED_SELLING_PRICE_UR);   --[prarasto:Post Round], [julin/postround] redesign
9593     --engine_debug('ORDER_UOM_SELLING_PRICE_UR := '|| l_line.ORDER_UOM_SELLING_PRICE_UR); --[prarasto:Post Round]
9594     --engine_debug('ADJUSTED_UNIT_PRICE_UR := '|| l_line.ADJUSTED_UNIT_PRICE_UR);         --[prarasto:Post Round]
9595     END IF;
9596 
9597   END LOOP;
9598   I:=1;
9599 
9600 
9601 --Populate Line detail
9602      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9603      engine_debug('----Line detail information return back to caller----');
9604      END IF;
9605   FOR l_dets IN l_ldets_cur LOOP
9606     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9607     engine_debug('----populating line detail output------');
9608     END IF;
9609 
9610     --requirement by Jay, will cause holes in pl/sql tbl
9611     I := l_dets.line_detail_index;
9612     x_line_detail_tbl(I).LINE_DETAIL_INDEX := l_dets.LINE_DETAIL_INDEX;
9613     x_line_detail_tbl(I).LINE_DETAIL_TYPE_CODE:=l_dets.LINE_DETAIL_TYPE_CODE;
9614     x_line_detail_tbl(I).LINE_INDEX:=l_dets.LINE_INDEX;
9615     x_line_detail_tbl(I).LIST_HEADER_ID:=l_dets.LIST_HEADER_ID;
9616     x_line_detail_tbl(I).LIST_LINE_ID:=l_dets.LIST_LINE_ID;
9617     x_line_detail_tbl(I).LIST_LINE_TYPE_CODE:=l_dets.LIST_LINE_TYPE_CODE;
9618     x_line_detail_tbl(I).SUBSTITUTION_TO:=l_dets.SUBSTITUTION_VALUE_TO;
9619     x_line_detail_tbl(I).LINE_QUANTITY :=l_dets.LINE_QUANTITY;
9620     x_line_detail_tbl(I).ADJUSTMENT_AMOUNT := l_dets.ADJUSTMENT_AMOUNT;
9621     x_line_detail_tbl(I).AUTOMATIC_FLAG    := l_dets.AUTOMATIC_FLAG;
9622     x_line_detail_tbl(I).APPLIED_FLAG      := l_dets.APPLIED_FLAG;
9623     x_line_detail_tbl(I).PRICING_GROUP_SEQUENCE := l_dets.PRICING_GROUP_SEQUENCE;
9624     x_line_detail_tbl(I).CREATED_FROM_LIST_TYPE_CODE:=l_dets.CREATED_FROM_LIST_TYPE_CODE;
9625     x_line_detail_tbl(I).PRICE_BREAK_TYPE_CODE := l_dets.PRICE_BREAK_TYPE_CODE;
9626     x_line_detail_tbl(I).OVERRIDE_FLAG   := l_dets.override_flag;
9627     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG :=l_dets.print_on_invoice_flag;
9628     x_line_detail_tbl(I).PRICING_PHASE_ID := l_dets.PRICING_PHASE_ID;
9629     x_line_detail_tbl(I).APPLIED_FLAG := l_dets.APPLIED_FLAG;
9630     x_line_detail_tbl(I).OPERAND_CALCULATION_CODE := l_dets.OPERAND_CALCULATION_CODE;
9631     x_line_detail_tbl(I).OPERAND_VALUE := l_dets.OPERAND_VALUE;
9632     x_line_detail_tbl(I).STATUS_CODE:=l_dets.PRICING_STATUS_CODE;
9633     x_line_detail_tbl(I).STATUS_TEXT:=substr(l_dets.PRICING_STATUS_TEXT,1,240);
9634     x_line_detail_tbl(I).SUBSTITUTION_ATTRIBUTE:=l_dets.SUBSTITUTION_ATTRIBUTE;
9635     x_line_detail_tbl(I).ACCRUAL_FLAG:=l_dets.ACCRUAL_FLAG;
9636     x_line_detail_tbl(I).LIST_LINE_NO:=l_dets.LIST_LINE_NO;
9637     x_line_detail_tbl(I).ESTIM_GL_VALUE:=l_dets.ESTIM_GL_VALUE;
9638     x_line_detail_tbl(I).ACCRUAL_CONVERSION_RATE:=l_dets.ACCRUAL_CONVERSION_RATE;
9639            --Pass throuh components
9640     x_line_detail_tbl(I).OVERRIDE_FLAG:= l_dets.OVERRIDE_FLAG;
9641     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG:=l_dets.PRINT_ON_INVOICE_FLAG;
9642     x_line_detail_tbl(I).INVENTORY_ITEM_ID:=l_dets.INVENTORY_ITEM_ID;
9643     x_line_detail_tbl(I).ORGANIZATION_ID:=l_dets.ORGANIZATION_ID;
9644     x_line_detail_tbl(I).RELATED_ITEM_ID:= l_dets.RELATED_ITEM_ID;
9645     x_line_detail_tbl(I).RELATIONSHIP_TYPE_ID:=l_dets.RELATIONSHIP_TYPE_ID;
9646     x_line_detail_tbl(I).ESTIM_ACCRUAL_RATE:=l_dets.ESTIM_ACCRUAL_RATE;
9647 
9648     x_line_detail_tbl(I).BENEFIT_PRICE_LIST_LINE_ID:=l_dets.BENEFIT_PRICE_LIST_LINE_ID;
9649     x_line_detail_tbl(I).RECURRING_FLAG:= l_dets.RECURRING_FLAG;
9650     x_line_detail_tbl(I).RECURRING_VALUE:= l_dets.RECURRING_VALUE; --for block pricing bug 3657116
9651     x_line_detail_tbl(I).BENEFIT_LIMIT:= l_dets.BENEFIT_LIMIT;
9652     x_line_detail_tbl(I).CHARGE_TYPE_CODE:=  l_dets.CHARGE_TYPE_CODE;
9653     x_line_detail_tbl(I).CHARGE_SUBTYPE_CODE:=l_dets.CHARGE_SUBTYPE_CODE;
9654     x_line_detail_tbl(I).BENEFIT_QTY:=l_dets.BENEFIT_QTY;
9655     x_line_detail_tbl(I).BENEFIT_UOM_CODE:=l_dets.BENEFIT_UOM_CODE;
9656     x_line_detail_tbl(I).PRORATION_TYPE_CODE:=l_dets.PRORATION_TYPE_CODE;
9657     x_line_detail_tbl(I).INCLUDE_ON_RETURNS_FLAG := l_dets.INCLUDE_ON_RETURNS_FLAG;
9658     x_line_detail_tbl(I).LIST_LINE_NO := l_dets.LIST_LINE_NO;
9659     x_line_detail_tbl(I).MODIFIER_LEVEL_CODE := l_dets.MODIFIER_LEVEL_CODE;
9660     x_line_detail_tbl(I).GROUP_VALUE := nvl(l_dets.GROUP_QUANTITY,l_dets.GROUP_AMOUNT); -- 2388011_new
9661     x_line_detail_tbl(I).COMMENTS := l_dets.COMMENTS;
9662     x_line_detail_tbl(I).UPDATED_FLAG := l_dets.UPDATED_FLAG;
9663     x_line_detail_tbl(I).PROCESS_CODE := l_dets.PROCESS_CODE;
9664     x_line_detail_tbl(I).LIMIT_CODE := l_dets.LIMIT_CODE;
9665     x_line_detail_tbl(I).LIMIT_TEXT := substr(l_dets.LIMIT_TEXT,1,240);
9666     x_line_detail_tbl(I).CALCULATION_CODE := l_dets.CALCULATION_CODE;
9667     x_line_detail_tbl(I).CHANGE_REASON_CODE := l_dets.CHANGE_REASON_CODE;
9668     x_line_detail_tbl(I).CHANGE_REASON_CODE := substr(l_dets.CHANGE_REASON_CODE,1,240);
9669     x_line_detail_tbl(I).BREAK_UOM_CODE := l_dets.BREAK_UOM_CODE; /* proration */
9670     x_line_detail_tbl(I).BREAK_UOM_CONTEXT := l_dets.BREAK_UOM_CONTEXT; /* proration */
9671     x_line_detail_tbl(I).BREAK_UOM_ATTRIBUTE := l_dets.BREAK_UOM_ATTRIBUTE; /* proration */
9672 
9673     IF (l_dets.LINE_DETAIL_TYPE_CODE = G_COUPON_ISSUE) THEN
9674      SET_EXPIRATION_DATES (l_dets.number_expiration_periods,
9675                           l_dets.EXPIRATION_PERIOD_UOM,
9676                           l_dets.line_index,
9677                           l_expiration_period_end_date,
9678                           l_status_code,
9679                           l_status_text);
9680     END IF;
9681 
9682     IF l_status_code = FND_API.G_RET_STS_ERROR THEN
9683         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9684         engine_debug(l_routine||':'||substr(l_status_text,1,240));
9685         END IF;
9686     END IF;
9687 
9688     x_line_detail_tbl(I).EXPIRATION_DATE :=l_expiration_period_end_date;
9689     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9690     engine_debug('LINE_DETAIL_INDEX :='|| l_dets.LINE_DETAIL_INDEX);
9691     engine_debug('LINE_DETAIL_TYPE_CODE:='||l_dets.LINE_DETAIL_TYPE_CODE);
9692     engine_debug('LINE_INDEX:='||l_dets.LINE_INDEX);
9693     engine_debug('LIST_HEADER_ID:='||l_dets.LIST_HEADER_ID);
9694     engine_debug('LIST_LINE_ID:='||l_dets.LIST_LINE_ID);
9695     engine_debug('LIST_LINE_TYPE_CODE:='||l_dets.LIST_LINE_TYPE_CODE);
9696     engine_debug('SUBSTITUTION_TO:='||l_dets.SUBSTITUTION_VALUE_TO);
9697     engine_debug('LINE_QUANTITY :='||l_dets.LINE_QUANTITY);
9698     engine_debug('ADJUSTMENT_AMOUNT :='|| l_dets.ADJUSTMENT_AMOUNT);
9699     engine_debug('AUTOMATIC_FLAG    :='|| l_dets.AUTOMATIC_FLAG);
9700     engine_debug('APPLIED_FLAG      :='|| l_dets.APPLIED_FLAG);
9701     engine_debug('PRICING_GROUP_SEQUENCE :='|| l_dets.PRICING_GROUP_SEQUENCE);
9702     engine_debug('CREATED_FROM_LIST_TYPE_CODE:='||l_dets.CREATED_FROM_LIST_TYPE_CODE);
9703     engine_debug('PRICE_BREAK_TYPE_CODE :='|| l_dets.PRICE_BREAK_TYPE_CODE);
9704     engine_debug('OVERRIDE_FLAG   :='|| l_dets.override_flag);
9705     engine_debug('PRINT_ON_INVOICE_FLAG :='||l_dets.print_on_invoice_flag);
9706     engine_debug('PRICING_PHASE_ID :='|| l_dets.PRICING_PHASE_ID);
9707     engine_debug('OPERAND_CALCULATION_CODE :='|| l_dets.OPERAND_CALCULATION_CODE);
9708     engine_debug('OPERAND_VALUE :='|| l_dets.OPERAND_VALUE);
9709     engine_debug('STATUS_CODE:='||l_dets.PRICING_STATUS_CODE);
9710     engine_debug('STATUS_TEXT:='||substr(l_dets.PRICING_STATUS_TEXT,1,240));
9711     engine_debug('SUBSTITUTION_ATTRIBUTE:='||l_dets.SUBSTITUTION_ATTRIBUTE);
9712     engine_debug('ACCRUAL_FLAG:='||l_dets.ACCRUAL_FLAG);
9713     engine_debug('LIST_LINE_NO:='||l_dets.LIST_LINE_NO);
9714     engine_debug('ESTIM_GL_VALUE:='||l_dets.ESTIM_GL_VALUE);
9715     engine_debug('ACCRUAL_CONVERSION_RATE:='||l_dets.ACCRUAL_CONVERSION_RATE);
9716     END IF;
9717            --Pass throuh components
9718     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9719     engine_debug('OVERRIDE_FLAG:='|| l_dets.OVERRIDE_FLAG);
9720     engine_debug('INVENTORY_ITEM_ID:='||l_dets.INVENTORY_ITEM_ID);
9721     engine_debug('ORGANIZATION_ID:='||l_dets.ORGANIZATION_ID);
9722     engine_debug('RELATED_ITEM_ID:='|| l_dets.RELATED_ITEM_ID);
9723     engine_debug('RELATIONSHIP_TYPE_ID:='||l_dets.RELATIONSHIP_TYPE_ID);
9724     engine_debug('ESTIM_ACCRUAL_RATE:='||l_dets.ESTIM_ACCRUAL_RATE);
9725     engine_debug('EXPIRATION_DATE:='||l_dets.EXPIRATION_DATE);
9726     engine_debug('BENEFIT_PRICE_LIST_LINE_ID:='||l_dets.BENEFIT_PRICE_LIST_LINE_ID);
9727     engine_debug('RECURRING_FLAG:='|| l_dets.RECURRING_FLAG);
9728     engine_debug('BENEFIT_LIMIT:='|| l_dets.BENEFIT_LIMIT);
9729     engine_debug('CHARGE_TYPE_CODE:='||  l_dets.CHARGE_TYPE_CODE);
9730     engine_debug('CHARGE_SUBTYPE_CODE:='||l_dets.CHARGE_SUBTYPE_CODE);
9731     engine_debug('BENEFIT_QTY:='||l_dets.BENEFIT_QTY);
9732     engine_debug('BENEFIT_UOM_CODE:='||l_dets.BENEFIT_UOM_CODE);
9733     engine_debug('PRORATION_TYPE_CODE:='||l_dets.PRORATION_TYPE_CODE);
9734     engine_debug('INCLUDE_ON_RETURNS_FLAG :='|| l_dets.INCLUDE_ON_RETURNS_FLAG);
9735     engine_debug('MODIFIER_LEVEL_CODE :='|| l_dets.MODIFIER_LEVEL_CODE);
9736     engine_debug('GROUP VALUE :='|| l_dets.GROUP_QUANTITY);
9737     engine_debug('LIMIT_CODE :='|| l_dets.LIMIT_CODE);
9738     engine_debug('LIMIT_TEXT :='|| substr(l_dets.LIMIT_TEXT,1,240));
9739     engine_debug('CHANGE_REASON_CODE :='|| l_dets.CHANGE_REASON_CODE);
9740     engine_debug('CHANGE_REASON_TEXT :='|| substr(l_dets.CHANGE_REASON_TEXT,1,240));
9741     engine_debug('BREAK_UOM_CODE :='|| l_dets.BREAK_UOM_CODE); /* proration */
9742     engine_debug('BREAK_UOM_CONTEXT :='|| l_dets.BREAK_UOM_CONTEXT); /* proration */
9743     engine_debug('BREAK_UOM_ATTRIBUTE :='|| l_dets.BREAK_UOM_ATTRIBUTE); /* proration */
9744 
9745     END IF;
9746   --I:=I+1;
9747   END LOOP;
9748 I:=1;
9749 
9750 --Populate Qualifier detail
9751   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9752   engine_debug('----Before populate x_qual_tbl-----');
9753   END IF;
9754   FOR l_qual IN l_qual_cur(G_DETAIL_LEVEL) LOOP
9755     x_line_detail_qual_tbl(I).LINE_DETAIL_INDEX := l_qual.LINE_DETAIL_INDEX;
9756     x_line_detail_qual_tbl(I).QUALIFIER_CONTEXT := l_qual.CONTEXT;
9757     x_line_detail_qual_tbl(I).QUALIFIER_ATTRIBUTE := l_qual.ATTRIBUTE;
9758     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM := l_qual.SETUP_VALUE_FROM;
9759     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO := l_qual.SETUP_VALUE_TO;
9760     x_line_detail_qual_tbl(I).COMPARISON_OPERATOR_CODE := l_qual.COMPARISON_OPERATOR_TYPE_CODE;
9761     x_line_detail_qual_tbl(I).status_code := l_qual.PRICING_STATUS_CODE;
9762     x_line_detail_qual_tbl(I).VALIDATED_FLAG :=l_qual.VALIDATED_FLAG;
9763 
9764   I:=I+1;
9765   END LOOP;
9766   I:=1;
9767 
9768 --LINE ATTRIBUTE DETAIL NEEDED
9769   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9770   engine_debug('----Before populate attr_tbl-----');
9771   END IF;
9772  FOR l_prc IN l_pricing_attr_cur LOOP
9773     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9774     engine_debug('--------populating x_line_detail_attr----------');
9775     engine_debug('Line Detail Index: '||l_prc.LINE_DETAIL_INDEX);
9776     END IF;
9777     x_line_detail_attr_tbl(I).LINE_DETAIL_INDEX := l_prc.LINE_DETAIL_INDEX;
9778     x_line_detail_attr_tbl(I).PRICING_CONTEXT := l_prc.PRICING_CONTEXT;
9779     x_line_detail_attr_tbl(I).PRICING_ATTRIBUTE := l_prc.PRICING_ATTRIBUTE;
9780     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_FROM :=l_prc.PRICING_ATTR_VALUE_FROM;
9781     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_TO :=l_prc.PRICING_ATTR_VALUE_TO;
9782     x_line_detail_attr_tbl(I).VALIDATED_FLAG :=l_prc.VALIDATED_FLAG;
9783     --x_line_attr_tbl(I).PRICING_STATUS_CODE := l_prc.PRICING_STATUS_CODE;
9784     --x_line_attr_tbl(I).PRICING_STATUS_TEXT := l_prc.PRICING_STATUS_TEXT;
9785   I:=I+1;
9786   END LOOP;
9787 
9788   I:=1;
9789 
9790   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9791   engine_debug('----Before populate l_rltd_lines_tbl-----');
9792   END IF;
9793   FOR l_rltd IN l_rltd_lines_cur LOOP
9794      x_related_lines_tbl(I).LINE_INDEX := l_rltd.Line_index;
9795      x_related_lines_tbl(I).LINE_DETAIL_INDEX :=  l_rltd.LINE_DETAIL_INDEX;
9796      x_related_lines_tbl(I).RELATIONSHIP_TYPE_CODE :=l_rltd.RELATIONSHIP_TYPE_CODE;
9797      x_related_lines_tbl(I).RELATED_LINE_INDEX     :=l_rltd.RELATED_LINE_INDEX;
9798      x_related_lines_tbl(I).RELATED_LINE_DETAIL_INDEX :=l_rltd.RELATED_LINE_DETAIL_INDEX;
9799      x_related_lines_tbl(I).STATUS_CODE :=l_rltd.PRICING_STATUS_CODE;
9800      x_related_lines_tbl(I).STATUS_TEXT :=l_rltd.PRICING_STATUS_TEXT;
9801   I:=I+1;
9802   END LOOP;
9803 ELSE
9804     IF l_debug = FND_API.G_TRUE THEN
9805       QP_PREQ_GRP.ENGINE_DEBUG('Populate_output: Java Engine is Installed ----------');
9806     END IF;
9807   --ADDED BY YANGLI FOR JAVA ENGINE PUB 3086881
9808 
9809   FOR l_line IN l_int_lines_cur LOOP
9810     --requirement from Jay, will cause holes in pl/sql table.
9811     I :=  l_line.LINE_INDEX;
9812     x_line_tbl(I).LINE_INDEX := l_line.LINE_INDEX;
9813     x_line_tbl(I).LINE_ID    := l_line.LINE_ID;
9814     x_line_tbl(I).HEADER_ID    := l_line.PRICE_LIST_HEADER_ID;
9815     x_line_tbl(I).LINE_TYPE_CODE := l_line.LINE_TYPE_CODE;
9816     x_line_tbl(I).PRICED_QUANTITY := l_line.PRICED_QUANTITY;
9817     x_line_tbl(I).CURRENCY_CODE := l_line.CURRENCY_CODE;
9818     x_line_tbl(I).ROUNDING_FACTOR := l_line.ROUNDING_FACTOR;
9819     x_line_tbl(I).PRICED_UOM_CODE := l_line.PRICED_UOM_CODE;
9820     x_line_tbl(I).UNIT_PRICE := l_line.UNIT_PRICE; --shu_latest
9821     x_line_tbl(I).LINE_QUANTITY:=l_line.LINE_QUANTITY;
9822     x_line_tbl(I).LINE_UOM_CODE:=l_line.LINE_UOM_CODE;
9823     x_line_tbl(I).LINE_UNIT_PRICE := l_line.LINE_UNIT_PRICE; --shu_latest
9824     x_line_tbl(I).UOM_QUANTITY := l_line.UOM_QUANTITY; --shu_latest
9825     x_line_tbl(I).PERCENT_PRICE := l_line.PERCENT_PRICE;
9826     x_line_tbl(I).ADJUSTED_UNIT_PRICE := l_line.ADJUSTED_UNIT_PRICE;
9827     x_line_tbl(I).UPDATED_ADJUSTED_UNIT_PRICE := l_line.UPDATED_ADJUSTED_UNIT_PRICE;
9828     x_line_tbl(I).PARENT_PRICE := l_line.PARENT_PRICE;
9829     x_line_tbl(I).PARENT_QUANTITY := l_line.PARENT_QUANTITY;
9830     x_line_tbl(I).PARENT_UOM_CODE := l_line.PARENT_UOM_CODE;
9831     x_line_tbl(I).PROCESSED_CODE := l_line.PROCESSED_CODE;
9832     x_line_tbl(I).PRICE_FLAG := l_line.PRICE_FLAG;
9833     x_line_tbl(I).STATUS_CODE := l_line.PRICING_STATUS_CODE;
9834     x_line_tbl(I).STATUS_TEXT := substr(l_line.PRICING_STATUS_TEXT,1,2000); -- shulin, fix bug 1745788
9835     x_line_tbl(I).HOLD_CODE := l_line.HOLD_CODE;
9836     x_line_tbl(I).HOLD_TEXT := substr(l_line.HOLD_TEXT,1,240);
9837     x_line_tbl(I).PRICE_REQUEST_CODE := l_line.PRICE_REQUEST_CODE;
9838     x_line_tbl(I).PRICING_EFFECTIVE_DATE := l_line.PRICING_EFFECTIVE_DATE;
9839     x_line_tbl(I).EXTENDED_PRICE := l_line.EXTENDED_PRICE; -- block pricing
9840 
9841     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9842     engine_debug('LINE_INDEX :='||l_line.LINE_INDEX);
9843     engine_debug('LINE_ID    :='||l_line.LINE_ID);
9844     engine_debug('PRICE_LIST_HEADER_ID   :='||l_line.PRICE_LIST_HEADER_ID); -- shu, print out this
9845     engine_debug('LINE_TYPE_CODE :='||l_line.LINE_TYPE_CODE);
9846     engine_debug('UOM_QUANTITY :='||l_line.UOM_QUANTITY);
9847     engine_debug('CURRENCY_CODE :='||l_line.CURRENCY_CODE);
9848     engine_debug('ROUNDING_FACTOR :='||l_line.ROUNDING_FACTOR);
9849     engine_debug('PRICED_QUANTITY :='||l_line.PRICED_QUANTITY);
9850     engine_debug('PRICED_UOM_CODE :='||l_line.PRICED_UOM_CODE);
9851     engine_debug('UNIT_PRICE :='||l_line.UNIT_PRICE);
9852     engine_debug('LINE_QUANTITY:='||l_line.LINE_QUANTITY);
9853     engine_debug('LINE_UOM_CODE:='||l_line.LINE_UOM_CODE);
9854     engine_debug('LINE_UNIT_PRICE:='||l_line.LINE_UNIT_PRICE); -- shu_latest
9855     engine_debug('PERCENT_PRICE :='||l_line.PERCENT_PRICE);
9856     engine_debug('ADJUSTED_UNIT_PRICE :='||l_line.ADJUSTED_UNIT_PRICE);
9857     engine_debug('PARENT_PRICE :='||l_line.PARENT_PRICE);
9858     engine_debug('PARENT_QUANTITY :='||l_line.PARENT_QUANTITY);
9859     engine_debug('PARENT_UOM_CODE :='||l_line.PARENT_UOM_CODE);
9860     engine_debug('processed_code :='||l_line.processed_code);
9861     engine_debug('Price Flag :='||l_line.price_flag);
9862     engine_debug('STATUS_CODE :='||l_line.PRICING_STATUS_CODE);
9863     engine_debug('STATUS_TEXT :='|| substr(l_line.PRICING_STATUS_TEXT,1,2000));
9864     engine_debug('HOLD_CODE := '||l_line.HOLD_CODE);
9865     engine_debug('HOLD_TEXT := '||substr(l_line.HOLD_TEXT,1,240));
9866     engine_debug('PRICE_REQUEST_CODE := '||l_line.PRICE_REQUEST_CODE);
9867     engine_debug('PRICING_DATE := '||l_line.PRICING_EFFECTIVE_DATE);
9868     engine_debug('EXTENDED_PRICE := '||l_line.EXTENDED_PRICE);
9869     END IF;
9870 
9871   END LOOP;
9872   I:=1;
9873 
9874 
9875 --Populate Line detail
9876      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9877      engine_debug('----Line detail information return back to caller----');
9878      END IF;
9879   FOR l_dets IN l_int_ldets_cur LOOP
9880     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9881     engine_debug('----populating line detail output------');
9882     END IF;
9883 
9884     --requirement by Jay, will cause holes in pl/sql tbl
9885     I := l_dets.line_detail_index;
9886     x_line_detail_tbl(I).LINE_DETAIL_INDEX := l_dets.LINE_DETAIL_INDEX;
9887     x_line_detail_tbl(I).LINE_DETAIL_TYPE_CODE:=l_dets.LINE_DETAIL_TYPE_CODE;
9888     x_line_detail_tbl(I).LINE_INDEX:=l_dets.LINE_INDEX;
9889     x_line_detail_tbl(I).LIST_HEADER_ID:=l_dets.LIST_HEADER_ID;
9890     x_line_detail_tbl(I).LIST_LINE_ID:=l_dets.LIST_LINE_ID;
9891     x_line_detail_tbl(I).LIST_LINE_TYPE_CODE:=l_dets.LIST_LINE_TYPE_CODE;
9892     x_line_detail_tbl(I).SUBSTITUTION_TO:=l_dets.SUBSTITUTION_VALUE_TO;
9893     x_line_detail_tbl(I).LINE_QUANTITY :=l_dets.LINE_QUANTITY;
9894     x_line_detail_tbl(I).ADJUSTMENT_AMOUNT := l_dets.ADJUSTMENT_AMOUNT;
9895     x_line_detail_tbl(I).AUTOMATIC_FLAG    := l_dets.AUTOMATIC_FLAG;
9896     x_line_detail_tbl(I).APPLIED_FLAG      := l_dets.APPLIED_FLAG;
9897     x_line_detail_tbl(I).PRICING_GROUP_SEQUENCE := l_dets.PRICING_GROUP_SEQUENCE;
9898     x_line_detail_tbl(I).CREATED_FROM_LIST_TYPE_CODE:=l_dets.CREATED_FROM_LIST_TYPE_CODE;
9899     x_line_detail_tbl(I).PRICE_BREAK_TYPE_CODE := l_dets.PRICE_BREAK_TYPE_CODE;
9900     x_line_detail_tbl(I).OVERRIDE_FLAG   := l_dets.override_flag;
9901     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG :=l_dets.print_on_invoice_flag;
9902     x_line_detail_tbl(I).PRICING_PHASE_ID := l_dets.PRICING_PHASE_ID;
9903     x_line_detail_tbl(I).APPLIED_FLAG := l_dets.APPLIED_FLAG;
9904     x_line_detail_tbl(I).OPERAND_CALCULATION_CODE := l_dets.OPERAND_CALCULATION_CODE;
9905     x_line_detail_tbl(I).OPERAND_VALUE := l_dets.OPERAND_VALUE;
9906     x_line_detail_tbl(I).STATUS_CODE:=l_dets.PRICING_STATUS_CODE;
9907     x_line_detail_tbl(I).STATUS_TEXT:=substr(l_dets.PRICING_STATUS_TEXT,1,240);
9908     x_line_detail_tbl(I).SUBSTITUTION_ATTRIBUTE:=l_dets.SUBSTITUTION_ATTRIBUTE;
9909     x_line_detail_tbl(I).ACCRUAL_FLAG:=l_dets.ACCRUAL_FLAG;
9910     x_line_detail_tbl(I).LIST_LINE_NO:=l_dets.LIST_LINE_NO;
9911     x_line_detail_tbl(I).ESTIM_GL_VALUE:=l_dets.ESTIM_GL_VALUE;
9912     x_line_detail_tbl(I).ACCRUAL_CONVERSION_RATE:=l_dets.ACCRUAL_CONVERSION_RATE;
9913            --Pass throuh components
9914     x_line_detail_tbl(I).OVERRIDE_FLAG:= l_dets.OVERRIDE_FLAG;
9915     x_line_detail_tbl(I).PRINT_ON_INVOICE_FLAG:=l_dets.PRINT_ON_INVOICE_FLAG;
9916     x_line_detail_tbl(I).INVENTORY_ITEM_ID:=l_dets.INVENTORY_ITEM_ID;
9917     x_line_detail_tbl(I).ORGANIZATION_ID:=l_dets.ORGANIZATION_ID;
9918     x_line_detail_tbl(I).RELATED_ITEM_ID:= l_dets.RELATED_ITEM_ID;
9919     x_line_detail_tbl(I).RELATIONSHIP_TYPE_ID:=l_dets.RELATIONSHIP_TYPE_ID;
9920     x_line_detail_tbl(I).ESTIM_ACCRUAL_RATE:=l_dets.ESTIM_ACCRUAL_RATE;
9921 
9922     x_line_detail_tbl(I).BENEFIT_PRICE_LIST_LINE_ID:=l_dets.BENEFIT_PRICE_LIST_LINE_ID;
9923     x_line_detail_tbl(I).RECURRING_FLAG:= l_dets.RECURRING_FLAG;
9924     x_line_detail_tbl(I).BENEFIT_LIMIT:= l_dets.BENEFIT_LIMIT;
9925     x_line_detail_tbl(I).CHARGE_TYPE_CODE:=  l_dets.CHARGE_TYPE_CODE;
9926     x_line_detail_tbl(I).CHARGE_SUBTYPE_CODE:=l_dets.CHARGE_SUBTYPE_CODE;
9927     x_line_detail_tbl(I).BENEFIT_QTY:=l_dets.BENEFIT_QTY;
9928     x_line_detail_tbl(I).BENEFIT_UOM_CODE:=l_dets.BENEFIT_UOM_CODE;
9929     x_line_detail_tbl(I).PRORATION_TYPE_CODE:=l_dets.PRORATION_TYPE_CODE;
9930     x_line_detail_tbl(I).INCLUDE_ON_RETURNS_FLAG := l_dets.INCLUDE_ON_RETURNS_FLAG;
9931     x_line_detail_tbl(I).LIST_LINE_NO := l_dets.LIST_LINE_NO;
9932     x_line_detail_tbl(I).MODIFIER_LEVEL_CODE := l_dets.MODIFIER_LEVEL_CODE;
9933     x_line_detail_tbl(I).GROUP_VALUE := nvl(l_dets.GROUP_QUANTITY,l_dets.GROUP_AMOUNT); -- 2388011_new
9934     x_line_detail_tbl(I).COMMENTS := l_dets.COMMENTS;
9935     x_line_detail_tbl(I).UPDATED_FLAG := l_dets.UPDATED_FLAG;
9936     x_line_detail_tbl(I).PROCESS_CODE := l_dets.PROCESS_CODE;
9937     x_line_detail_tbl(I).LIMIT_CODE := l_dets.LIMIT_CODE;
9938     x_line_detail_tbl(I).LIMIT_TEXT := substr(l_dets.LIMIT_TEXT,1,240);
9939     x_line_detail_tbl(I).CALCULATION_CODE := l_dets.CALCULATION_CODE;
9940     x_line_detail_tbl(I).CHANGE_REASON_CODE := l_dets.CHANGE_REASON_CODE;
9941     x_line_detail_tbl(I).CHANGE_REASON_CODE := substr(l_dets.CHANGE_REASON_CODE,1,240);
9942     x_line_detail_tbl(I).BREAK_UOM_CODE := l_dets.BREAK_UOM_CODE; /* proration */
9943     x_line_detail_tbl(I).BREAK_UOM_CONTEXT := l_dets.BREAK_UOM_CONTEXT; /* proration */
9944     x_line_detail_tbl(I).BREAK_UOM_ATTRIBUTE := l_dets.BREAK_UOM_ATTRIBUTE; /* proration */
9945 
9946     IF (l_dets.LINE_DETAIL_TYPE_CODE = G_COUPON_ISSUE) THEN
9947      SET_EXPIRATION_DATES (l_dets.number_expiration_periods,
9948                           l_dets.EXPIRATION_PERIOD_UOM,
9949                           l_dets.line_index,
9950                           l_expiration_period_end_date,
9951                           l_status_code,
9952                           l_status_text);
9953     END IF;
9954 
9955     IF l_status_code = FND_API.G_RET_STS_ERROR THEN
9956         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9957         engine_debug(l_routine||':'||substr(l_status_text,1,240));
9958         END IF;
9959     END IF;
9960 
9961     x_line_detail_tbl(I).EXPIRATION_DATE :=l_expiration_period_end_date;
9962     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9963     engine_debug('LINE_DETAIL_INDEX :='|| l_dets.LINE_DETAIL_INDEX);
9964     engine_debug('LINE_DETAIL_TYPE_CODE:='||l_dets.LINE_DETAIL_TYPE_CODE);
9965     engine_debug('LINE_INDEX:='||l_dets.LINE_INDEX);
9966     engine_debug('LIST_HEADER_ID:='||l_dets.LIST_HEADER_ID);
9967     engine_debug('LIST_LINE_ID:='||l_dets.LIST_LINE_ID);
9968     engine_debug('LIST_LINE_TYPE_CODE:='||l_dets.LIST_LINE_TYPE_CODE);
9969     engine_debug('SUBSTITUTION_TO:='||l_dets.SUBSTITUTION_VALUE_TO);
9970     engine_debug('LINE_QUANTITY :='||l_dets.LINE_QUANTITY);
9971     engine_debug('ADJUSTMENT_AMOUNT :='|| l_dets.ADJUSTMENT_AMOUNT);
9972     engine_debug('AUTOMATIC_FLAG    :='|| l_dets.AUTOMATIC_FLAG);
9973     engine_debug('APPLIED_FLAG      :='|| l_dets.APPLIED_FLAG);
9974     engine_debug('PRICING_GROUP_SEQUENCE :='|| l_dets.PRICING_GROUP_SEQUENCE);
9975     engine_debug('CREATED_FROM_LIST_TYPE_CODE:='||l_dets.CREATED_FROM_LIST_TYPE_CODE);
9976     engine_debug('PRICE_BREAK_TYPE_CODE :='|| l_dets.PRICE_BREAK_TYPE_CODE);
9977     engine_debug('OVERRIDE_FLAG   :='|| l_dets.override_flag);
9978     engine_debug('PRINT_ON_INVOICE_FLAG :='||l_dets.print_on_invoice_flag);
9979     engine_debug('PRICING_PHASE_ID :='|| l_dets.PRICING_PHASE_ID);
9980     engine_debug('OPERAND_CALCULATION_CODE :='|| l_dets.OPERAND_CALCULATION_CODE);
9981     engine_debug('OPERAND_VALUE :='|| l_dets.OPERAND_VALUE);
9982     engine_debug('STATUS_CODE:='||l_dets.PRICING_STATUS_CODE);
9983     engine_debug('STATUS_TEXT:='||substr(l_dets.PRICING_STATUS_TEXT,1,240));
9984     engine_debug('SUBSTITUTION_ATTRIBUTE:='||l_dets.SUBSTITUTION_ATTRIBUTE);
9985     engine_debug('ACCRUAL_FLAG:='||l_dets.ACCRUAL_FLAG);
9986     engine_debug('LIST_LINE_NO:='||l_dets.LIST_LINE_NO);
9987     engine_debug('ESTIM_GL_VALUE:='||l_dets.ESTIM_GL_VALUE);
9988     engine_debug('ACCRUAL_CONVERSION_RATE:='||l_dets.ACCRUAL_CONVERSION_RATE);
9989     END IF;
9990            --Pass throuh components
9991     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
9992     engine_debug('OVERRIDE_FLAG:='|| l_dets.OVERRIDE_FLAG);
9993     engine_debug('INVENTORY_ITEM_ID:='||l_dets.INVENTORY_ITEM_ID);
9994     engine_debug('ORGANIZATION_ID:='||l_dets.ORGANIZATION_ID);
9995     engine_debug('RELATED_ITEM_ID:='|| l_dets.RELATED_ITEM_ID);
9996     engine_debug('RELATIONSHIP_TYPE_ID:='||l_dets.RELATIONSHIP_TYPE_ID);
9997     engine_debug('ESTIM_ACCRUAL_RATE:='||l_dets.ESTIM_ACCRUAL_RATE);
9998     engine_debug('EXPIRATION_DATE:='||l_dets.EXPIRATION_DATE);
9999     engine_debug('BENEFIT_PRICE_LIST_LINE_ID:='||l_dets.BENEFIT_PRICE_LIST_LINE_ID);
10000     engine_debug('RECURRING_FLAG:='|| l_dets.RECURRING_FLAG);
10001     engine_debug('BENEFIT_LIMIT:='|| l_dets.BENEFIT_LIMIT);
10002     engine_debug('CHARGE_TYPE_CODE:='||  l_dets.CHARGE_TYPE_CODE);
10003     engine_debug('CHARGE_SUBTYPE_CODE:='||l_dets.CHARGE_SUBTYPE_CODE);
10004     engine_debug('BENEFIT_QTY:='||l_dets.BENEFIT_QTY);
10005     engine_debug('BENEFIT_UOM_CODE:='||l_dets.BENEFIT_UOM_CODE);
10006     engine_debug('PRORATION_TYPE_CODE:='||l_dets.PRORATION_TYPE_CODE);
10007     engine_debug('INCLUDE_ON_RETURNS_FLAG :='|| l_dets.INCLUDE_ON_RETURNS_FLAG);
10008     engine_debug('MODIFIER_LEVEL_CODE :='|| l_dets.MODIFIER_LEVEL_CODE);
10009     engine_debug('GROUP VALUE :='|| l_dets.GROUP_QUANTITY);
10010     engine_debug('LIMIT_CODE :='|| l_dets.LIMIT_CODE);
10011     engine_debug('LIMIT_TEXT :='|| substr(l_dets.LIMIT_TEXT,1,240));
10012     engine_debug('CHANGE_REASON_CODE :='|| l_dets.CHANGE_REASON_CODE);
10013     engine_debug('CHANGE_REASON_TEXT :='|| substr(l_dets.CHANGE_REASON_TEXT,1,240));
10014     engine_debug('BREAK_UOM_CODE :='|| l_dets.BREAK_UOM_CODE); /* proration */
10015     engine_debug('BREAK_UOM_CONTEXT :='|| l_dets.BREAK_UOM_CONTEXT); /* proration */
10016     engine_debug('BREAK_UOM_ATTRIBUTE :='|| l_dets.BREAK_UOM_ATTRIBUTE); /* proration */
10017 
10018     END IF;
10019   --I:=I+1;
10020   END LOOP;
10021 I:=1;
10022 
10023 --Populate Qualifier detail
10024   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10025   engine_debug('----Before populate x_qual_tbl-----');
10026   END IF;
10027   FOR l_qual IN l_int_qual_cur(G_DETAIL_LEVEL) LOOP
10028     x_line_detail_qual_tbl(I).LINE_DETAIL_INDEX := l_qual.LINE_DETAIL_INDEX;
10029     x_line_detail_qual_tbl(I).QUALIFIER_CONTEXT := l_qual.CONTEXT;
10030     x_line_detail_qual_tbl(I).QUALIFIER_ATTRIBUTE := l_qual.ATTRIBUTE;
10031     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_FROM := l_qual.SETUP_VALUE_FROM;
10032     x_line_detail_qual_tbl(I).QUALIFIER_ATTR_VALUE_TO := l_qual.SETUP_VALUE_TO;
10033     x_line_detail_qual_tbl(I).COMPARISON_OPERATOR_CODE := l_qual.COMPARISON_OPERATOR_TYPE_CODE;
10034     x_line_detail_qual_tbl(I).status_code := l_qual.PRICING_STATUS_CODE;
10035     x_line_detail_qual_tbl(I).VALIDATED_FLAG :=l_qual.VALIDATED_FLAG;
10036 
10037   I:=I+1;
10038   END LOOP;
10039   I:=1;
10040 
10041 --LINE ATTRIBUTE DETAIL NEEDED
10042   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10043   engine_debug('----Before populate attr_tbl-----');
10044   END IF;
10045  FOR l_prc IN l_int_pricing_attr_cur LOOP
10046     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10047     engine_debug('--------populating x_line_detail_attr----------');
10048     engine_debug('Line Detail Index: '||l_prc.LINE_DETAIL_INDEX);
10049     END IF;
10050     x_line_detail_attr_tbl(I).LINE_DETAIL_INDEX := l_prc.LINE_DETAIL_INDEX;
10051     x_line_detail_attr_tbl(I).PRICING_CONTEXT := l_prc.PRICING_CONTEXT;
10052     x_line_detail_attr_tbl(I).PRICING_ATTRIBUTE := l_prc.PRICING_ATTRIBUTE;
10053     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_FROM :=l_prc.PRICING_ATTR_VALUE_FROM;
10054     x_line_detail_attr_tbl(I).PRICING_ATTR_VALUE_TO :=l_prc.PRICING_ATTR_VALUE_TO;
10055     x_line_detail_attr_tbl(I).VALIDATED_FLAG :=l_prc.VALIDATED_FLAG;
10056     --x_line_attr_tbl(I).PRICING_STATUS_CODE := l_prc.PRICING_STATUS_CODE;
10057     --x_line_attr_tbl(I).PRICING_STATUS_TEXT := l_prc.PRICING_STATUS_TEXT;
10058   I:=I+1;
10059   END LOOP;
10060 
10061   I:=1;
10062 
10063   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10064   engine_debug('----Before populate l_rltd_lines_tbl-----');
10065   END IF;
10066   FOR l_rltd IN l_int_rltd_lines_cur LOOP
10067      x_related_lines_tbl(I).LINE_INDEX := l_rltd.Line_index;
10068      x_related_lines_tbl(I).LINE_DETAIL_INDEX :=  l_rltd.LINE_DETAIL_INDEX;
10069      x_related_lines_tbl(I).RELATIONSHIP_TYPE_CODE :=l_rltd.RELATIONSHIP_TYPE_CODE;
10070      x_related_lines_tbl(I).RELATED_LINE_INDEX     :=l_rltd.RELATED_LINE_INDEX;
10071      x_related_lines_tbl(I).RELATED_LINE_DETAIL_INDEX :=l_rltd.RELATED_LINE_DETAIL_INDEX;
10072      x_related_lines_tbl(I).STATUS_CODE :=l_rltd.PRICING_STATUS_CODE;
10073      x_related_lines_tbl(I).STATUS_TEXT :=l_rltd.PRICING_STATUS_TEXT;
10074   I:=I+1;
10075   END LOOP;
10076 END IF;
10077 
10078 EXCEPTION
10079 WHEN E_ROUTINE_ERROR THEN
10080    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10081    engine_debug(l_routine||':'||substr(l_status_text,1,240));
10082    END IF;
10083 
10084 END;
10085 
10086 PROCEDURE Eliminate_Multiple_Hierarchies(p_pricing_phase_id NUMBER,
10087                                          x_status_code OUT NOCOPY VARCHAR2,
10088                                          x_status_text OUT NOCOPY VARCHAR2) AS
10089 
10090 /*
10091 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
10092 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
10093 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
10094 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
10095 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
10096 
10097 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_multiple_exclude_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10098 
10099 */
10100 
10101 --Pricing Phase Change
10102 CURSOR l_get_multiple_exclude_cur IS
10103 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) l_get_multiple_exclude_cur */
10104        distinct a.line_index , a.list_header_id , a.list_line_id , a.grouping_number grouping_no,
10105        a.context , a.attribute , a.setup_value_from
10106 FROM   qp_npreq_line_attrs_tmp a , qp_npreq_ldets_tmp b
10107 WHERE
10108        a.comparison_operator_type_code = 'NOT ='
10109 AND    a.attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE)
10110 AND    a.pricing_status_code = G_STATUS_NEW
10111 AND    a.pricing_phase_id = p_pricing_phase_id
10112 AND    a.line_index > 0
10113 AND    a.line_detail_index = b.line_detail_index
10114 AND    b.pricing_status_code = G_STATUS_NEW
10115 order  by a.line_index,a.list_header_id,a.list_line_id, a.grouping_number;
10116 
10117 /*
10118 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,line_index,1
10119 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
10120 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,context,3
10121 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,attribute,4
10122 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
10123 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.l_get_passed_hierarchy_cur,qp_npreq_line_attrs_tmp_N2,value_from,6
10124 */
10125 CURSOR l_get_passed_hierarchy_cur(p_line_index NUMBER,
10126                                   p_context   VARCHAR2,
10127                                   p_attribute VARCHAR2,
10128                                   p_value     VARCHAR2) IS
10129 SELECT value_from
10130 FROM   qp_npreq_line_attrs_tmp
10131 WHERE  context = p_context
10132 AND    attribute = p_attribute
10133 AND    value_from = p_value
10134 AND    line_index = p_line_index
10135 AND    attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE )
10136 AND    pricing_status_code = G_STATUS_UNCHANGED;
10137 
10138 l_del_list_line_tbl    NUMBER_TYPE;
10139 l_del_list_header_tbl  NUMBER_TYPE;
10140 l_del_line_index_tbl   NUMBER_TYPE;
10141 l_del_ind              PLS_INTEGER := 0;
10142 l_list_line_index      NUMBER := -9999;
10143 l_list_line_id         NUMBER := -9999;
10144 l_list_header_id       NUMBER := -9999;
10145 l_list_attr_type       VARCHAR2(30) := 'NULL';
10146 l_grouping_no          NUMBER := -9999999999999;
10147 l_setup_context        VARCHAR2(240);
10148 l_setup_attribute      VARCHAR2(240);
10149 l_setup_value_from     VARCHAR2(240);
10150 l_passed_value_from    VARCHAR2(240);
10151 l_deleted_flag         BOOLEAN := FALSE;
10152 l_status_code          VARCHAR2(30);
10153 l_status_text          VARCHAR2(240);
10154 l_routine              CONSTANT VARCHAR2(240) := 'QP_PREQ_GRP.Eliminate_Multiple_Hierarchies';
10155 
10156 E_ROUTINE_ERRORS        EXCEPTION;
10157 
10158 BEGIN
10159  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10160  engine_debug('In procedure Eliminate_Multiple_Hierarchies');
10161 
10162  END IF;
10163  FOR i IN l_get_multiple_exclude_cur
10164  LOOP
10165 
10166   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
10167 	    l_deleted_flag = FALSE) THEN
10168 
10169    l_passed_value_from := NULL; -- Init
10170    l_deleted_flag := FALSE;
10171 
10172    --l_setup_context := i.context;
10173    --l_setup_attribute := i.attribute;
10174    --l_setup_value_from := i.setup_value_from;
10175 
10176    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10177    engine_debug('EMH Context:' || i.context || ' EMH Attribute:' || i.attribute || ' EMH Passed Value : '||i.setup_value_from);
10178    engine_debug('EMH Excluded Passed Value From Setup: ' || i.setup_value_from);
10179 
10180    END IF;
10181    OPEN  l_get_passed_hierarchy_cur(i.line_index,i.context,i.attribute,i.setup_value_from);
10182    FETCH l_get_passed_hierarchy_cur INTO l_passed_value_from;
10183    CLOSE l_get_passed_hierarchy_cur;
10184 
10185    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10186    engine_debug('EMH Excluded Passed Value From Sourcing: ' || l_passed_value_from);
10187 
10188    END IF;
10189    IF (l_passed_value_from IS NOT NULL) THEN
10190     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10191     engine_debug('EMH Deleted Flag is True');
10192     END IF;
10193     l_del_ind := l_del_ind + 1;
10194     l_del_list_line_tbl(l_del_ind) := i.list_line_id;
10195     l_del_list_header_tbl(l_del_ind) := i.list_header_id;
10196     l_del_line_index_tbl(l_del_ind) := i.line_index;
10197     l_deleted_flag := TRUE;
10198    END IF;
10199 
10200   END IF;
10201 
10202   l_list_line_index := i.line_index;
10203   l_list_line_id := i.list_line_id;
10204   l_list_header_id := i.list_header_id;
10205   l_grouping_no := i.grouping_no;
10206 
10207  END LOOP;
10208 
10209  -- Delete the multiple hierarchies
10210  IF (l_del_list_line_tbl.COUNT > 0) THEN
10211   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10212   engine_debug('Actually Deleting');
10213   END IF;
10214   FORALL j IN l_del_list_line_tbl.FIRST .. l_del_list_line_tbl.LAST
10215 /*
10216 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
10217 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
10218 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
10219 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
10220 INDX,QP_PREQ_GRP.eliminate_multiple_hierarchies.upd1,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
10221 */
10222   UPDATE qp_npreq_line_attrs_tmp --upd1
10223   SET    pricing_status_code = G_DELETED_EXCLUDER
10224   WHERE  list_header_id = l_del_list_header_tbl(j)
10225   AND    list_line_id = l_del_list_line_tbl(j)
10226   AND    line_index = l_del_line_index_tbl(j)
10227   AND    comparison_operator_type_code = 'NOT ='
10228   AND    pricing_status_code = G_STATUS_NEW -- Expect an issue because of this join condition
10229   AND    attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE);
10230 
10231   /* FORALL j IN l_del_list_line_tbl.FIRST .. l_del_list_line_tbl.LAST
10232   UPDATE qp_npreq_ldets_tmp
10233   SET    pricing_status_code = G_DELETED_EXCLUDER
10234   WHERE  created_from_list_header_id = l_del_list_header_tbl(j)
10235   AND    created_from_list_line_id = l_del_list_line_tbl(j)
10236   AND    line_index = l_del_line_index_tbl(j)
10237   AND    pricing_phase_id = p_pricing_phase_id; */
10238  END IF;
10239 
10240  -- shu fix bug 1915355
10241  -- To delete duplicate list lines selected by ask for and regular cursors
10242  IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN
10243   Delete_Duplicate_List_Lines(p_pricing_phase_id,l_status_code,l_status_text);
10244   IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
10245    RAISE E_ROUTINE_ERRORS;
10246   END IF;
10247  END IF;
10248 
10249 EXCEPTION
10250   WHEN E_ROUTINE_ERRORS THEN
10251     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10252     engine_debug(l_routine||': '||l_status_text);
10253    END IF;
10254    x_status_code := FND_API.G_RET_STS_ERROR;
10255    x_status_text := l_routine||': '||l_status_text;
10256   WHEN OTHERS THEN
10257    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10258    engine_debug(l_routine||' '||SQLERRM);
10259    END IF;
10260    x_status_code := FND_API.G_RET_STS_ERROR;
10261    x_status_text := 'Error in '||l_routine||SQLERRM;
10262 
10263 END Eliminate_Multiple_Hierarchies;
10264 
10265 /*+--------------------------------------------------------
10266   |PROCEDURE PROCESS_LINE_GROUP
10267   |This procedure sum OUT quantity/amt
10268   |across all lines that have same product context,attribute,value
10269   |, pricing context,attribute and have list_line which is
10270   |line group.  The output on the sum will be populated
10271   |either on GROUP_QUANTITY or qualifier_amt column
10272   |of qp_npreq_lines_tmp.
10273   +--------------------------------------------------------
10274 */
10275 
10276 PROCEDURE PROCESS_LINE_GROUP(p_pricing_phase_id NUMBER,
10277                            x_status_code OUT NOCOPY VARCHAR2,
10278                            x_status_text OUT NOCOPY VARCHAR2) AS
10279 /*
10280 -- Might need a new index with pricing_phase_id
10281 */
10282 
10283 l_routine VARCHAR2(30) := 'Process_Line_Group';
10284 
10285 CURSOR line_grp_cur  IS
10286 select  /*+ ORDERED USE_NL(c a ) index(a qp_pricing_attributes_n2) line_grp_cur */
10287 b.created_from_list_line_id list_line_id , c.context , c.attribute ,
10288  sum(qp_number.canonical_to_number(c.value_from)) group_value
10289 from
10290  qp_npreq_ldets_tmp b , qp_npreq_line_attrs_tmp c , qp_pricing_attributes a
10291 where
10292     b.modifier_level_code  = G_LINE_GROUP
10293 and b.pricing_phase_id = p_pricing_phase_id
10294 and c.pricing_status_code = G_STATUS_UNCHANGED
10295 and c.context = G_PRIC_VOLUME_CONTEXT
10296 and c.attribute_type = G_PRICING_TYPE
10297 and b.line_index = c.line_index
10298 and b.pricing_status_code = G_STATUS_NEW
10299 and a.list_line_id = b.created_from_list_line_id
10300 and a.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT
10301 and a.pricing_attribute = c.attribute
10302 group by b.created_from_list_line_id , c.context , c.attribute;
10303 
10304 /*select  c.list_line_id list_line_id , c.context , c.attribute ,
10305  sum(qp_number.canonical_to_number(c.value_from)) group_value
10306 from
10307  qp_npreq_line_attrs_tmp c
10308 where
10309     c.modifier_level_code  = G_LINE_GROUP
10310 and c.pricing_phase_id = p_pricing_phase_id
10311 and c.pricing_status_code = G_STATUS_NEW
10312 and c.context = G_PRIC_VOLUME_CONTEXT
10313 and c.attribute_type = G_PRICING_TYPE
10314 and c.pricing_status_code = G_STATUS_NEW
10315 group by c.list_line_id , c.context , c.attribute ; */
10316 
10317 --begin 2388011, grp_pbh_amt
10318 CURSOR l_get_list_price_cur(p_list_line_id NUMBER) IS
10319    SELECT a.LINE_INDEX ,a.UNIT_PRICE
10320    FROM   qp_npreq_lines_tmp a,qp_npreq_ldets_tmp b
10321    WHERE  a.LINE_INDEX  = b.LINE_INDEX
10322    AND    b.CREATED_FROM_LIST_LINE_ID = p_list_line_id;
10323 --end 2388011, grp_pbh_amt
10324 
10325 l_GROUP_QUANTITY NUMBER;
10326 l_GROUP_AMOUNT   NUMBER;
10327 l_dummy          VARCHAR2(1);
10328 
10329 -- begin shu,  2388011, grp_pbh_amt
10330 l_list_price     NUMBER;
10331 l_group_amount_per_unit NUMBER;
10332 G_LINE_INDEX_TBL_G             PLS_INTEGER_TYPE;
10333 G_UNIT_PRICE_TBL_G             NUMBER_TYPE;
10334 G_GROUP_AMOUNT_PER_UNIT_TBL_G  NUMBER_TYPE;
10335 nROWS CONSTANT NUMBER := 1000;
10336 -- end shu,  2388011, grp_pbh_amt
10337 
10338 
10339 BEGIN
10340 
10341 --If no data has LINE_GROUP Modifier
10342 --don't bother to proceed
10343 
10344 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10345 engine_debug('Starting process linegroup');
10346 
10347 END IF;
10348 FOR J IN line_grp_cur LOOP
10349 
10350   IF J.attribute = G_QUANTITY_ATTRIBUTE THEN
10351       l_group_quantity := J.group_value;
10352       l_group_amount   := NULL;
10353   ELSE
10354       l_group_amount   := J.group_value;
10355       l_group_quantity := NULL;
10356   END IF;
10357 
10358   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10359   engine_debug('J.context : '||J.context);
10360   engine_debug('J.product_attribute : '||J.attribute);
10361   engine_debug('J.value_from : '||J.group_value);
10362   engine_debug('l_GROUP_QUANTITY: '||l_group_quantity);
10363   engine_debug('l_GROUP_AMOUNT: '  ||l_group_amount);
10364   engine_debug('List Line Id: '  ||j.list_line_id);
10365 
10366   END IF;
10367  IF (j.attribute = G_QUANTITY_ATTRIBUTE) THEN
10368 
10369   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10370   engine_debug('Updating Quantity Attribute');
10371 
10372   END IF;
10373 
10374 /*
10375 INDX,QP_PREQ_GRP.process_line_group.upd1,-No Index Used-,NA,NA
10376 */
10377   /*UPDATE qp_npreq_line_attrs_tmp --upd1
10378   SET GROUP_QUANTITY = l_group_quantity
10379   WHERE LIST_LINE_ID = j.list_line_id;*/
10380 
10381 /*
10382 INDX,QP_PREQ_GRP.process_line_group.upd2,-No Index Used-,NA,NA
10383 */
10384   UPDATE qp_npreq_ldets_tmp --upd2
10385   SET LINE_QUANTITY = l_group_quantity,  -- 2388011_latest, shu fix pbh_grp_amt
10386   GROUP_QUANTITY = l_group_quantity,  -- 2388011_latest, shu fix pbh_grp_amt
10387   SELECTED_VOLUME_ATTR = G_QUANTITY -- 2388011_latest
10388   WHERE CREATED_FROM_LIST_LINE_ID = j.list_line_id;
10389 
10390  ELSE
10391   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10392    engine_debug('Updating Amount Attribute');
10393   END IF;
10394 
10395    -- begin shu, fix group of lines lumpsum based on ITEM_AMOUNT, 2388011
10396 
10397   OPEN l_get_list_price_cur(j.list_line_id);
10398 
10399   LOOP
10400     G_LINE_INDEX_TBL_G.delete;
10401     G_UNIT_PRICE_TBL_G.delete;
10402 
10403   FETCH l_get_list_price_cur BULK COLLECT INTO
10404      G_LINE_INDEX_TBL_G
10405    , G_UNIT_PRICE_TBL_G LIMIT nROWS;
10406   EXIT WHEN G_LINE_INDEX_TBL_G.COUNT = 0;
10407 
10408    IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
10409     FOR I in G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
10410     LOOP
10411   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10412      engine_debug('Line Index : '  ||g_line_index_tbl_g(I));
10413      engine_debug('Unit Price : '  ||g_unit_price_tbl_g(I));
10414    END IF; -- 4033618
10415      IF (G_UNIT_PRICE_TBL_G(I) IS NOT NULL and G_UNIT_PRICE_TBL_G(I) <> 0) THEN -- avoid division by zero
10416         G_GROUP_AMOUNT_PER_UNIT_TBL_G(I) := l_group_amount/G_UNIT_PRICE_TBL_G(I);
10417      ELSE
10418         IF (G_UNIT_PRICE_TBL_G(I) = 0 ) THEN
10419          G_GROUP_AMOUNT_PER_UNIT_TBL_G(I):= 0;
10420         ELSE -- unit price is NULL
10421          G_GROUP_AMOUNT_PER_UNIT_TBL_G(I) :=l_group_amount; -- ASK RAVI? why not 0
10422         END IF;
10423      END IF;
10424    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10425      engine_debug('Group Amount Per Unit: '  ||g_group_amount_per_unit_tbl_g(I));
10426    END IF; -- 4033618
10427     END LOOP;
10428    END IF;
10429 
10430 /*
10431 INDX,QP_PREQ_GRP11.process_line_group.upd4,-No Index Used-,NA,NA
10432 */
10433    IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
10434     FORALL I IN G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
10435      UPDATE qp_npreq_ldets_tmp --upd4
10436      SET GROUP_AMOUNT = G_GROUP_AMOUNT_PER_UNIT_TBL_G(I),
10437         LINE_QUANTITY = l_group_amount, -- 2388011_latest
10438         SELECTED_VOLUME_ATTR = G_AMOUNT -- 2388011_latest
10439      WHERE CREATED_FROM_LIST_LINE_ID = j.list_line_id
10440      AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I);
10441    END IF;
10442 
10443   END LOOP;
10444   CLOSE l_get_list_price_cur;
10445  END IF;
10446 
10447 END LOOP;
10448 
10449 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10450 engine_debug('End process line group');
10451 
10452 END IF;
10453 EXCEPTION
10454   WHEN NO_DATA_FOUND THEN
10455   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10456   engine_debug('No line group data');
10457   engine_debug('End process line group');
10458   END IF;
10459   RETURN;
10460  WHEN OTHERS THEN
10461    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10462    engine_debug(l_routine||' '||SQLERRM);
10463    END IF;
10464    x_status_code := FND_API.G_RET_STS_ERROR;
10465    x_status_text := l_routine||': '||SQLERRM;
10466 END PROCESS_LINE_GROUP;
10467 
10468 /*+----------------------------------------------------------
10469   |Is_Line_Group
10470   +---------------------------------------------------------
10471 */
10472 FUNCTION Is_Line_Group (p_line_detail_index IN PLS_INTEGER:=NULL,
10473                         p_line_index        IN NUMBER:=NULL) RETURN BOOLEAN
10474 AS
10475 l_dummy VARCHAR2(30);
10476 l_routine VARCHAR2(240):='QP_PREQ_GRP.Is_Line_Group';
10477 BEGIN
10478 
10479   IF (p_line_detail_index IS NOT NULL) THEN
10480 /*
10481 INDX,QP_PREQ_GRP.is_line_group.is_line_group_sel1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10482 */
10483      SELECT 'X'
10484      INTO   l_dummy
10485      FROM   qp_npreq_ldets_tmp
10486      WHERE  line_detail_index = p_line_detail_index
10487      AND    modifier_level_code = G_LINE_GROUP;
10488   ELSE
10489 /*
10490 INDX,QP_PREQ_GRP.is_line_group.is_line_group_sel2,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
10491 */
10492       SELECT 'X'
10493       INTO   l_dummy
10494       FROM   qp_npreq_ldets_tmp
10495       WHERE  line_index = p_line_index
10496       AND    modifier_level_code = G_LINE_GROUP;
10497   END IF;
10498 
10499 RETURN TRUE;
10500 
10501 EXCEPTION
10502   WHEN NO_DATA_FOUND THEN
10503     RETURN FALSE;
10504 END Is_Line_Group;
10505 
10506 /*+------------------------------------------------------
10507   |Is_Uom_Match
10508   |
10509   +-----------------------------------------------------
10510 */
10511 
10512 Function Is_Uom_Match(p_line_index       IN PLS_INTEGER,
10513                       p_product_uom_code IN VARCHAR2
10514                       ) RETURN BOOLEAN
10515 AS
10516 
10517 l_dummy VARCHAR2(1);
10518 
10519 BEGIN
10520   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10521   engine_debug('p_line_index : '||p_line_index);
10522   engine_debug('p_product_uom_code: '||nvl(p_product_uom_code,'Null'));
10523   END IF;
10524 /*
10525 INDX,QP_PREQ_GRP.is_uom_match.is_uom_match_sel1,qp_npreq_lines_tmp_N1,LINE_INDEX,1
10526 */
10527   SELECT 'X'
10528   INTO l_dummy
10529   FROM qp_npreq_lines_tmp qplines
10530   WHERE qplines.LINE_INDEX = p_line_index
10531   AND   nvl(qplines.PRICED_UOM_CODE,qplines.LINE_UOM_CODE)  =
10532 	   nvl(p_product_uom_code,nvl(qplines.PRICED_UOM_CODE,qplines.LINE_UOM_CODE));
10533 
10534 RETURN TRUE;
10535 
10536 EXCEPTION
10537  WHEN NO_DATA_FOUND THEN
10538  RETURN FALSE;
10539 
10540 END;
10541 
10542 /*+-----------------------------------------------------------
10543   |Covert_Uom
10544   |This procedure will try to convert ordered uom to
10545   |primary uom.
10546   +-----------------------------------------------------------
10547 */
10548 
10549 PROCEDURE Convert_Uom(p_order_uom_code      IN  VARCHAR2,
10550                       p_primary_uom_code IN  VARCHAR2,
10551                       p_value            IN  NUMBER,
10552                       x_converted_value  OUT NOCOPY NUMBER,
10553                       x_status_code      OUT NOCOPY VARCHAR2,
10554                       x_status_text      OUT NOCOPY VARCHAR2) AS
10555 
10556 --l_primary_uom VARCHAR2(3):=NULL;
10557 --l_line_uom_code VARCHAR2(3):=NULL;
10558 E_INVALID_UOM EXCEPTION;
10559 l_item_id     NUMBER := 0;
10560 l_uom_rate    NUMBER;
10561 l_routine VARCHAR2(240):= 'QP_PREQ_GRP.Convert_Uom';
10562 BEGIN
10563 
10564 x_status_code := FND_API.G_RET_STS_SUCCESS;
10565 
10566             INV_CONVERT.INV_UM_CONVERSION(p_order_uom_code,
10567                                           p_primary_uom_code,
10568                                           l_item_id,
10569                                           l_uom_rate);
10570 
10571              IF (l_uom_rate >= 0) THEN
10572               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10573              	engine_debug ('conversion rate: '||l_uom_rate);
10574               END IF;
10575                x_converted_value := p_value * l_uom_rate;
10576              ELSE
10577                Raise E_INVALID_UOM;
10578              END IF;
10579 
10580 
10581 EXCEPTION
10582 
10583   WHEN E_INVALID_UOM THEN
10584      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10585      engine_debug('Invalid UOM');
10586      END IF;
10587      x_status_code := FND_API.G_RET_STS_ERROR;
10588      x_status_text := 'Invalid UOM';
10589   WHEN OTHERS THEN
10590      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10591      engine_debug(l_routine||': '||SQLERRM);
10592      END IF;
10593      x_status_code := FND_API.G_RET_STS_ERROR;
10594      x_status_text := l_routine||': '||SQLERRM;
10595 END Convert_Uom;
10596 
10597 /*+----------------------------------------------------------
10598   |Update_Request_Line_Status(For request lines that have price list passed)
10599   +----------------------------------------------------------
10600 */
10601 PROCEDURE Update_Request_Line_Status(p_control_rec  CONTROL_RECORD_TYPE,
10602                                      p_status_code  VARCHAR2,
10603                                      p_freeze_override_flag IN VARCHAR2, --[julin/4708044]
10604                                      x_status_code OUT NOCOPY VARCHAR2,
10605                                      x_status_text OUT NOCOPY VARCHAR2) AS
10606 
10607 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.Update_Request_Line_Status';
10608 l_rounding_factor NUMBER:= NULL;
10609 
10610 BEGIN
10611  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10612  engine_debug('In Update Request Line Status : ' || p_status_code);
10613  END IF;
10614 
10615 /*  --po integration start
10616   UPDATE qp_npreq_lines_tmp a
10617   SET    pricing_status_code = G_STATUS_UPDATED
10618   Where    list_price_override_flag in ('Y', 'O')  --po integration
10619   AND   line_type_code <> G_ORDER_LEVEL;
10620   --po integration end
10621 */
10622 
10623 
10624  IF (p_status_code = 'SUCCESS') THEN
10625 /*
10626 INDX,QP_PREQ_GRP.update_request_line_status.update_request_line_status_upd1,-No Index Used-,NA,NA
10627 */
10628 /*
10629 INDX,QP_PREQ_GRP.update_request_line_status.sel1,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
10630 INDX,QP_PREQ_GRP.update_request_line_status.sel1,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
10631 INDX,QP_PREQ_GRP.update_request_line_status.sel1,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
10632 */
10633 
10634   UPDATE qp_npreq_lines_tmp a
10635   SET    pricing_status_code = G_STATUS_UPDATED
10636         ,processed_code = NULL -- bug 3501150
10637   WHERE  EXISTS (SELECT 'x'
10638   		from qp_npreq_ldets_tmp b
10639                 WHERE a.line_index = b.line_index
10640                 AND   b.pricing_status_code = G_STATUS_NEW
10641   		AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
10642   AND   line_type_code <> G_ORDER_LEVEL;
10643 
10644   -- To make sure lines which did not get the price and do not have a record in qp_npreq_ldets_tmp get picked up
10645   UPDATE qp_npreq_lines_tmp a
10646   SET    processed_code = G_STS_LHS_NOT_FOUND
10647   WHERE  NOT EXISTS (SELECT 'x'
10648                 FROM   qp_npreq_ldets_tmp b
10649                 WHERE a.line_index = b.line_index
10650                 AND   b.pricing_status_code = G_STATUS_NEW
10651                 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
10652   AND   line_type_code <> G_ORDER_LEVEL
10653   AND   list_price_override_flag = 'N' --po integration
10654   AND   pricing_status_code NOT IN (G_STATUS_DUP_PRICE_LIST,G_STATUS_INVALID_UOM_CONV)
10655   AND  (price_flag = G_YES OR --[julin/4708044]
10656         (price_flag = G_PHASE AND p_freeze_override_flag = G_YES));
10657 
10658 
10659   /* --IF (nvl(p_control_rec.rounding_flag,G_YES) = G_YES) THEN
10660   -- need rounding_factor when 'Y', 'Q', 'U'
10661   IF (nvl(p_control_rec.rounding_flag,G_YES) <> 'N') THEN -- shu new rounding
10662 
10663         DECLARE
10664 
10665         	CURSOR tmp_data IS
10666 		SELECT rounding_factor FROM qp_npreq_lines_tmp;
10667         BEGIN
10668 
10669   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10670 		engine_debug ('G_MCURR_PROFILE: '||G_MULTI_CURRENCY_PROFILE);
10671 		engine_debug ('p_control_rec.use_multi_currency: '||p_control_rec.use_multi_currency);
10672   END IF;
10673 		-- cannot use IF G_MCURR_INSTALLED_USED here, it is null
10674 		IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
10675 
10676                         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10677                         engine_debug ('get rounding_factor from qp_currency_details table...');
10678                         END IF;
10679 
10680                         UPDATE qp_npreq_lines_tmp a
10681    			SET    ROUNDING_FACTOR = (SELECT qcdt.selling_rounding_factor
10682 					FROM qp_currency_details qcdt, qp_list_headers_b qhdr
10683 					WHERE qhdr.list_header_id = a.price_list_header_id
10684 					AND qhdr.currency_header_id = qcdt.currency_header_id
10685 					AND qcdt.to_currency_code = a.currency_code
10686 					AND a.pricing_effective_date BETWEEN
10687                            		NVL(TRUNC(qcdt.start_date_active),a.pricing_effective_date)
10688                            		AND NVL(TRUNC(qcdt.end_date_active),a.pricing_effective_date)
10689                            		AND ROWNUM <2) -- there maybe more than one rows rtrns here
10690                				WHERE ROUNDING_FACTOR IS NULL;
10691 
10692 		ELSE -- multi curr not installed not used, obtain rounding_factor from qp_list_headers_b
10693 
10694    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10695 			engine_debug('get rounding factor from qp_list_headers_b...');
10696    END IF;
10697 			UPDATE qp_npreq_lines_tmp a
10698    			SET    ROUNDING_FACTOR = (SELECT qhdr.rounding_factor
10699                         	FROM  qp_list_headers_b qhdr
10700                         	WHERE qhdr.list_header_id = a.price_list_header_id)
10701                 	WHERE ROUNDING_FACTOR IS NULL;
10702 
10703                 END IF; -- END IF G_MCURR_INSTALLED_USED = G_YES
10704 
10705 
10706                 FOR i IN tmp_data LOOP
10707                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10708                 	engine_debug ('final rounding_factor ' ||i.rounding_factor);
10709                  END IF;
10710 		end LOOP;
10711 
10712 
10713 	EXCEPTION
10714 		WHEN no_data_found THEN
10715    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10716 			engine_debug ('no_data_found occurred while obtaining rounding_factor');
10717    END IF;
10718 		WHEN others THEN
10719    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10720 			engine_debug ('error obtaining_rounding_factor: ' || SQLERRM);
10721    END IF;
10722 	END; -- end declare
10723   END IF; -- end p_rounding_flag = 'Y' */
10724 
10725  ELSE
10726 
10727   /*
10728   INDX,QP_PREQ_GRP.update_request_line_status.sel3,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
10729   INDX,QP_PREQ_GRP.update_request_line_status.sel3,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
10730   INDX,QP_PREQ_GRP.update_request_line_status.sel3,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
10731   */
10732 
10733   UPDATE qp_npreq_lines_tmp a
10734   SET    processed_code = G_STS_LHS_NOT_FOUND
10735   WHERE  NOT EXISTS (SELECT 'x'
10736                 FROM   qp_npreq_ldets_tmp b
10737                 WHERE a.line_index = b.line_index
10738                 AND   b.pricing_status_code = G_STATUS_NEW
10739                 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
10740   AND   line_type_code <> G_ORDER_LEVEL
10741   AND   list_price_override_flag in ( 'N', 'O') --po integration
10742   AND  (price_flag = G_YES OR --[julin/4708044]
10743         (price_flag = G_PHASE AND p_freeze_override_flag = G_YES));
10744 
10745  END IF;
10746 EXCEPTION
10747  WHEN OTHERS THEN
10748      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10749      engine_debug(l_routine || ' ' || SQLERRM);
10750      END IF;
10751      x_status_code := FND_API.G_RET_STS_ERROR;
10752      x_status_text := l_routine||' '||SQLERRM;
10753 
10754 END Update_Request_Line_Status;
10755 
10756 /*+----------------------------------------------------------
10757   |Evaluate_Between
10758   +----------------------------------------------------------
10759 */
10760 -- Pricing Phase Change
10761 PROCEDURE Evaluate_Between (p_pricing_phase_id IN PLS_INTEGER,
10762                             p_line_group_flag IN VARCHAR2 :=NULL,
10763                             p_line_index IN NUMBER := NULL,
10764                             x_status_code OUT NOCOPY VARCHAR2,
10765                             x_status_text OUT NOCOPY VARCHAR2) AS
10766 
10767 
10768 /*
10769 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
10770 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
10771 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
10772 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
10773 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
10774 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
10775 
10776 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10777 
10778 */
10779 
10780 CURSOR l_pric_between_cur(p_datatype VARCHAR2) IS
10781 SELECT /*+ ORDERED USE_NL(ldets) index(pricing qp_preq_line_attrs_tmp_N5) l_pric_between_cur */
10782           pricing.line_detail_index,
10783 	  pricing.line_index,
10784 	  pricing.value_from,
10785           -- line group not applicable for price lists.ignore any code around line group for price lists
10786 	  pricing.group_quantity,
10787 	  pricing.group_amount,
10788 	  pricing.setup_value_from,
10789 	  pricing.setup_value_to,
10790 	  pricing.product_uom_code,
10791 	  pricing.attribute,
10792 	  pricing.context,
10793           pricing.attribute_type
10794 FROM  qp_npreq_line_attrs_tmp pricing,qp_npreq_ldets_tmp ldets
10795 WHERE pricing.comparison_operator_type_code = G_OPERATOR_BETWEEN
10796 AND   pricing.datatype = p_datatype
10797 AND   pricing.pricing_phase_id = G_PRICE_LIST_PHASE_ID
10798 AND   pricing.attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE)
10799 AND   pricing.pricing_status_code IN (G_STATUS_UNCHANGED,  G_STATUS_NEW)
10800 AND   pricing.line_index > 0
10801 AND   pricing.line_detail_index = ldets.line_detail_index
10802 AND   ldets.pricing_status_code = G_STATUS_NEW
10803 FOR UPDATE of pricing.pricing_status_code;
10804 
10805 /*
10806 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
10807 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
10808 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
10809 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
10810 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
10811 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
10812 
10813 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10814 
10815 */
10816 
10817 CURSOR l_mod_between_cur(p_datatype VARCHAR2) IS
10818 SELECT /*+ ORDERED USE_NL(ldets) index(pricing qp_preq_line_attrs_tmp_N5) l_mod_between_cur */
10819           pricing.line_detail_index,
10820 	  pricing.line_index,
10821 	  pricing.value_from,
10822 	  ldets.group_quantity,
10823 	  ldets.line_quantity group_amount,
10824 	  pricing.setup_value_from,
10825 	  pricing.setup_value_to,
10826 	  pricing.product_uom_code,
10827 	  pricing.attribute,
10828 	  pricing.context,
10829           pricing.attribute_type
10830 FROM  qp_npreq_line_attrs_tmp pricing,qp_npreq_ldets_tmp ldets
10831 WHERE pricing.comparison_operator_type_code = G_OPERATOR_BETWEEN
10832 AND   pricing.datatype = p_datatype
10833 AND   pricing.pricing_phase_id = p_pricing_phase_id
10834 AND   pricing.attribute_type = G_PRICING_TYPE
10835 AND   pricing.pricing_status_code IN (G_STATUS_UNCHANGED,  G_STATUS_NEW)
10836 AND   pricing.line_index > 0
10837 AND   pricing.line_detail_index = ldets.line_detail_index
10838 AND   ldets.pricing_status_code = G_STATUS_NEW
10839 FOR UPDATE of pricing.pricing_status_code;
10840 
10841 /*
10842 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
10843 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
10844 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
10845 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
10846 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
10847 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
10848 
10849 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10850 
10851 */
10852 
10853 CURSOR l_pric_character_between_cur IS
10854 SELECT /*+ ORDERED USE_NL(c) index(b qp_preq_line_attrs_tmp_N5) l_pric_character_between_cur */
10855        b.line_detail_index,
10856        b.line_index,
10857        b.value_from,
10858        b.setup_value_from,
10859        b.setup_value_to,
10860        b.product_uom_code,
10861        b.attribute,
10862        b.context,
10863        b.attribute_type
10864 FROM  qp_npreq_line_attrs_tmp b,qp_npreq_ldets_tmp c
10865 WHERE comparison_operator_type_code = G_OPERATOR_BETWEEN
10866 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID
10867 AND   datatype in (G_DATE_X,G_DATE_Y,G_VARCHAR)
10868 AND   attribute_type IN (G_PRICING_TYPE,G_QUALIFIER_TYPE)
10869 AND   b.pricing_status_code IN (G_STATUS_UNCHANGED,G_STATUS_NEW)
10870 AND   b.pricing_phase_id = p_pricing_phase_id
10871 AND   b.line_index > 0
10872 AND   b.line_detail_index = c.line_detail_index
10873 AND   c.pricing_status_code = G_STATUS_NEW
10874 FOR update of b.pricing_status_code;
10875 
10876 /*
10877 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
10878 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
10879 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
10880 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,LINE_INDEX,4
10881 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,COMPARISON_OPERATOR_CODE,5
10882 INDX,QP_PREQ_GRP.Evaluate_Between.l_mod_character_between_cur,qp_npreq_line_attrs_tmp_N5,DATATYPE,6
10883 
10884 INDX,QP_PREQ_GRP.Evaluate_Between.l_pric_character_between_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
10885 
10886 */
10887 
10888 CURSOR l_mod_character_between_cur IS
10889 SELECT /*+ ORDERED USE_NL(c) index(b qp_preq_line_attrs_tmp_N5) l_mod_character_between_cur */
10890        b.line_detail_index,
10891        b.line_index,
10892        b.value_from,
10893        b.setup_value_from,
10894        b.setup_value_to,
10895        b.product_uom_code,
10896        b.attribute,
10897        b.context,
10898        b.attribute_type
10899 FROM  qp_npreq_line_attrs_tmp b,qp_npreq_ldets_tmp c
10900 WHERE comparison_operator_type_code = G_OPERATOR_BETWEEN
10901 AND   b.pricing_phase_id = p_pricing_phase_id
10902 AND   datatype in (G_DATE_X,G_DATE_Y,G_VARCHAR)
10903 AND   attribute_type = G_PRICING_TYPE
10904 AND   b.pricing_status_code IN (G_STATUS_UNCHANGED,G_STATUS_NEW)
10905 AND   b.pricing_phase_id = p_pricing_phase_id
10906 AND   b.line_index > 0
10907 AND   b.line_detail_index = c.line_detail_index
10908 AND   c.pricing_status_code = G_STATUS_NEW
10909 FOR update of b.pricing_status_code;
10910 
10911 --[julin/5085310]
10912 CURSOR l_line_amount_cur(p_line_index NUMBER,
10913                        p_line_detail_index NUMBER,
10914                        p_context VARCHAR2,
10915                        p_attribute VARCHAR2,
10916                        p_attribute_type VARCHAR2)
10917 IS
10918 SELECT  /*+ ORDERED USE_NL(a) l_line_amount_cur */
10919        fnd_number.canonical_to_number(c.value_from) group_value,
10920        a.priced_quantity
10921 FROM   qp_npreq_line_attrs_tmp c, qp_npreq_lines_tmp a
10922 WHERE  a.line_index = p_line_index
10923 AND    a.LINE_INDEX  = c.LINE_INDEX
10924 AND    c.line_detail_index = p_line_detail_index
10925 AND    c.context = p_context
10926 AND    c.attribute_type = p_attribute_type
10927 AND    c.attribute = p_attribute;
10928 
10929 l_group_amount		NUMBER;	--shu
10930 l_list_price 		NUMBER;	--shu
10931 
10932 l_line_amount           NUMBER;
10933 l_priced_quantity       NUMBER;
10934 
10935 l_value_from_date       DATE;
10936 l_setup_value_from_date DATE;
10937 l_setup_value_to_date   DATE;
10938 l_value_from_num        NUMBER;
10939 l_setup_value_from_num  NUMBER;
10940 l_setup_value_to_num    NUMBER;
10941 l_dummy                 VARCHAR2(3);
10942 l_qualifier_qty         NUMBER;
10943 l_qualifier_amt         NUMBER;
10944 l_primary_uom           VARCHAR2(3);
10945 l_item_id               NUMBER;
10946 l_uom_rate              NUMBER;
10947 l_line_uom_code         VARCHAR2(3);
10948 l_status_code           VARCHAR2(30);
10949 l_status_text           VARCHAR2(240);
10950 l_deleted_between       VARCHAR2(1);
10951 l_is_line_group_flag    VARCHAR2(1);
10952 l_line_detail_tbl       NUMBER_TYPE;
10953 l_count                 PLS_INTEGER := 0;
10954 l_selected_volume_attr  VARCHAR2(1); -- 2388011_new
10955 
10956 l_routine VARCHAR2(30) := 'Evaluate_Between';
10957 BEGIN
10958 
10959                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10960 QP_PREQ_GRP.engine_debug('In Evaluate Between' );
10961 
10962                  END IF;
10963 --Evaluate Between operator
10964 IF (p_line_group_flag IS NULL) THEN
10965 
10966   --Character and date between
10967  IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
10968                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10969    QP_PREQ_GRP.engine_debug('Before Opening Price List Character Date Between Cur');
10970                     END IF;
10971   FOR I IN l_pric_character_between_cur LOOP
10972                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10973    QP_PREQ_GRP.engine_debug('In Price List Character Date Between Cur');
10974                     END IF;
10975    IF (I.value_from NOT BETWEEN nvl(I.setup_value_from,I.value_from) and nvl(I.setup_value_to,I.value_from)) THEN
10976 
10977     -- If it is a pricing attribute and it fails on between we can delete it right away
10978     IF (I.attribute_type = 'PRICING') THEN
10979      l_count := l_count + 1;
10980      l_line_detail_tbl(l_count) := I.line_detail_index;
10981     ELSE
10982      UPDATE qp_npreq_line_attrs_tmp
10983      SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
10984      WHERE CURRENT OF l_pric_character_between_cur;
10985     END IF;
10986    END IF;
10987   END LOOP;
10988  ELSE
10989                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10990   QP_PREQ_GRP.engine_debug('Before Opening Modifiers Character Date Between Cur');
10991                    END IF;
10992   FOR I IN l_mod_character_between_cur LOOP
10993                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
10994    QP_PREQ_GRP.engine_debug('In Modifiers Character Date Between Cur');
10995                     END IF;
10996    IF (I.value_from NOT BETWEEN nvl(I.setup_value_from,I.value_from) and nvl(I.setup_value_to,I.value_from)) THEN
10997 
10998     -- If it is a pricing attribute and it fails on between we can delete it right away
10999     IF (I.attribute_type = 'PRICING') THEN
11000      l_count := l_count + 1;
11001      l_line_detail_tbl(l_count) := I.line_detail_index;
11002     ELSE
11003      UPDATE qp_npreq_line_attrs_tmp
11004      SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11005      WHERE CURRENT OF l_mod_character_between_cur;
11006     END IF;
11007    END IF;
11008   END LOOP;
11009  END IF; -- IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID)
11010 
11011 END IF; -- p_line_group_flag is null
11012 
11013  --Handle between with numeric data type
11014 
11015 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
11016                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11017  QP_PREQ_GRP.engine_debug('Before Opening Price List Numeric Between Cur');
11018 
11019                   END IF;
11020  FOR I IN l_pric_between_cur(p_datatype => G_NUMERIC) LOOP
11021 
11022                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11023   QP_PREQ_GRP.engine_debug('In Price List Numeric Between Cur');
11024 
11025                    END IF;
11026   l_deleted_between := 'F';
11027 
11028   IF I.context = G_PRIC_VOLUME_CONTEXT THEN
11029    IF(Is_Line_Group(p_line_detail_index => I.line_detail_index) = TRUE) THEN
11030                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11031     QP_PREQ_GRP.engine_debug('Is Line Group #100');
11032 
11033                      END IF;
11034     l_is_line_group_flag := 'T';
11035 
11036     IF (p_line_group_flag IS NOT NULL) THEN
11037      IF I.attribute = G_QUANTITY_ATTRIBUTE THEN
11038           l_value_from_num := I.group_quantity;
11039           l_selected_volume_attr := G_QUANTITY; -- 2388011_new
11040      ELSIF (I.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11041       IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN
11042            l_value_from_num := I.group_amount;
11043       END IF;
11044       l_selected_volume_attr := G_AMOUNT; -- 2388011_new
11045      ELSE -- For Order Amount,Period1 Amount  kind of attributes
11046       l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11047      END IF;
11048     ELSE -- Make it a success,because line group between is done again,so do not delete
11049       l_value_from_num :=  NULL;
11050     END IF;
11051 
11052      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11053      engine_debug('Is line group');
11054      engine_debug('Group Quantity : ' || l_value_from_num);
11055      engine_debug('Line detail index: '||I.line_detail_index);
11056      END IF;
11057    ELSE  -- is not a line group
11058      l_is_line_group_flag := 'F';
11059      l_value_from_num := qp_number.canonical_to_number(I.value_from);
11060      -- begin 2388011_new
11061      IF (I.attribute = G_QUANTITY_ATTRIBUTE) THEN
11062       l_selected_volume_attr := G_QUANTITY;
11063      ELSIF (I.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11064       l_selected_volume_attr := G_AMOUNT;
11065      ELSE -- 2388011_latest
11066        l_selected_volume_attr := 'O'; -- 2388011_latest, for weight volume attribute
11067      END IF;
11068      -- end 2388011_new
11069    END IF;-- END is a line group
11070  ELSE    --else Not a Volume Context
11071   l_is_line_group_flag := 'F';
11072   l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11073  END IF;
11074 
11075 
11076   IF (I.setup_value_from IS NULL) THEN
11077     l_setup_value_from_num := l_value_from_num;
11078   ELSE
11079     l_setup_value_from_num :=  qp_number.canonical_to_number(I.setup_value_from);
11080   END IF;
11081 
11082   IF (I.setup_value_to IS NULL) THEN
11083     l_setup_value_to_num := l_value_from_num;
11084   ELSE
11085     l_setup_value_to_num :=  qp_number.canonical_to_number(I.setup_value_to);
11086   END IF;
11087 
11088   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11089   engine_debug('1VALUE: '||l_value_from_num);
11090   engine_debug('2VALUE_FROM: '||l_setup_value_from_num);
11091   engine_debug('3VALUE_TO: '||l_setup_value_to_num);
11092 
11093   END IF;
11094   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
11095 
11096     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11097     engine_debug('4NOT BETWEEN');
11098 
11099     END IF;
11100    -- If it is a pricing attribute and it fails on between we can delete it right away
11101    IF (I.attribute_type = 'PRICING') THEN
11102     l_count := l_count + 1;
11103     l_line_detail_tbl(l_count) := I.line_detail_index;
11104    ELSE
11105     UPDATE qp_npreq_line_attrs_tmp
11106     SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11107     WHERE CURRENT OF l_pric_between_cur;
11108     l_deleted_between := 'T';
11109    END IF;
11110   END IF;
11111 
11112   IF (l_deleted_between = 'F') THEN
11113 
11114    IF (I.group_quantity IS NOT NULL and I.group_quantity <> l_value_from_num and l_value_from_num IS NOT NULL
11115 	  and p_line_group_flag IS NOT NULL) THEN
11116    /*
11117    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11118    */
11119     UPDATE qp_npreq_ldets_tmp
11120     SET GROUP_QUANTITY = l_value_from_num
11121     WHERE LINE_INDEX = i.line_index
11122     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11123    END IF;
11124 
11125    -- shu debug msg
11126                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11127     QP_PREQ_GRP.engine_debug('check condition...');
11128     QP_PREQ_GRP.engine_debug('i.group_amount: : '||i.group_amount);
11129     QP_PREQ_GRP.engine_debug('l_value_from_num: '||l_value_from_num);
11130     QP_PREQ_GRP.engine_debug('p_line_group_flag: '||p_line_group_flag);
11131                      END IF;
11132 
11133 
11134    IF (I.group_amount IS NOT NULL and l_value_from_num IS NOT NULL -- shu
11135 	  and p_line_group_flag IS NOT NULL) THEN
11136    /*
11137    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11138    */
11139 
11140 
11141    -- begin shu, fix group of lines lumpsum based on ITEM_AMOUNT
11142 
11143    SELECT UNIT_PRICE INTO l_list_price
11144    FROM   qp_npreq_lines_tmp
11145    WHERE  LINE_INDEX = i.line_index;
11146 
11147    /* Handled l_list_price = 0 bug2385874 */
11148    IF (l_list_price IS NOT NULL and l_list_price <>0) THEN -- avoid division by zero
11149 
11150         l_group_amount := I.group_amount /l_list_price;
11151    ELSE
11152         if l_list_price = 0 then
11153         l_group_amount := 0;
11154         else
11155         l_group_amount :=I.group_amount;
11156         end if;
11157    END IF;
11158 
11159                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11160     QP_PREQ_GRP.engine_debug('line_index: '||i.line_index);
11161     QP_PREQ_GRP.engine_debug('list price: '||l_list_price);
11162     QP_PREQ_GRP.engine_debug('i.group_amount: '||i.group_amount);
11163     QP_PREQ_GRP.engine_debug('group_value: '||l_group_amount);
11164                      END IF;
11165     -- end shu fix
11166 
11167     UPDATE qp_npreq_ldets_tmp
11168     SET   GROUP_AMOUNT = l_group_amount -- shu
11169     WHERE LINE_INDEX = i.line_index
11170     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11171 
11172    END IF;
11173 
11174    --Need the LINE_QUANTITY column to be updated for regular lines with volume attributes, for Calculation purposes
11175    IF (p_line_group_flag IS NULL and l_is_line_group_flag = 'F'
11176        and i.context = G_PRIC_VOLUME_CONTEXT) -- added for [5005328/4911264]
11177    THEN
11178                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11179     QP_PREQ_GRP.engine_debug('Line Index: ' || i.line_index || ' LD Index : ' || i.line_detail_index ||
11180 						' '||l_value_from_num);
11181                      END IF;
11182    /*
11183    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11184    */
11185     UPDATE qp_npreq_ldets_tmp
11186     SET   LINE_QUANTITY = l_value_from_num
11187     WHERE LINE_INDEX = i.line_index
11188     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11189    END IF;
11190 
11191   END IF;
11192  END LOOP;
11193 ELSE
11194                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11195  QP_PREQ_GRP.engine_debug('Before Opening Modifiers Numeric Between Cur');
11196                   END IF;
11197  FOR I IN l_mod_between_cur(p_datatype => G_NUMERIC) LOOP
11198 
11199                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11200   QP_PREQ_GRP.engine_debug('In Modifiers Numeric Between Cur');
11201 
11202                    END IF;
11203   l_deleted_between := 'F';
11204 
11205   IF I.context = G_PRIC_VOLUME_CONTEXT THEN
11206    IF(Is_Line_Group(p_line_detail_index => I.line_detail_index) = TRUE) THEN
11207                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11208     QP_PREQ_GRP.engine_debug('Is Line Group #100');
11209 
11210                      END IF;
11211     l_is_line_group_flag := 'T';
11212 
11213     IF (p_line_group_flag IS NOT NULL) THEN
11214       IF I.attribute = G_QUANTITY_ATTRIBUTE THEN
11215           l_value_from_num := I.group_quantity;
11216       ELSIF (I.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11217        IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN
11218            l_value_from_num := I.group_amount;
11219        END IF;
11220       ELSE -- For Order Amount,Period1 Amount  kind of attributes
11221        l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11222       END IF;
11223     ELSE -- Make it a success,because line group between is done again,so do not delete
11224       l_value_from_num :=  NULL;
11225     END IF;
11226 
11227      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11228      engine_debug('Is line group');
11229      engine_debug('Group Quantity : ' || l_value_from_num);
11230      engine_debug('Line detail index: '||I.line_detail_index);
11231      END IF;
11232    ELSE  -- is not a line group
11233      l_is_line_group_flag := 'F';
11234      l_value_from_num := qp_number.canonical_to_number(I.value_from);
11235    END IF;
11236  ELSE    --else Not a Volume Context
11237   l_is_line_group_flag := 'F';
11238   l_value_from_num :=  qp_number.canonical_to_number(I.value_from);
11239  END IF;
11240 
11241 
11242   IF (I.setup_value_from IS NULL) THEN
11243     l_setup_value_from_num := l_value_from_num;
11244   ELSE
11245     l_setup_value_from_num :=  qp_number.canonical_to_number(I.setup_value_from);
11246   END IF;
11247 
11248   IF (I.setup_value_to IS NULL) THEN
11249     l_setup_value_to_num := l_value_from_num;
11250   ELSE
11251     l_setup_value_to_num :=  qp_number.canonical_to_number(I.setup_value_to);
11252   END IF;
11253 
11254   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11255   engine_debug('1VALUE: '||l_value_from_num);
11256   engine_debug('2VALUE_FROM: '||l_setup_value_from_num);
11257   engine_debug('3VALUE_TO: '||l_setup_value_to_num);
11258 
11259   END IF;
11260   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
11261 
11262     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11263     engine_debug('4NOT BETWEEN');
11264 
11265     END IF;
11266    -- If it is a pricing attribute and it fails on between we can delete it right away
11267    IF (I.attribute_type = 'PRICING') THEN
11268     l_count := l_count + 1;
11269     l_line_detail_tbl(l_count) := I.line_detail_index;
11270    ELSE
11271     UPDATE qp_npreq_line_attrs_tmp
11272     SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11273     WHERE CURRENT OF l_mod_between_cur;
11274     l_deleted_between := 'T';
11275    END IF;
11276   END IF;
11277 
11278   IF (l_deleted_between = 'F') THEN
11279 
11280    IF (I.group_quantity IS NOT NULL and I.group_quantity <> l_value_from_num and l_value_from_num IS NOT NULL
11281 	  and p_line_group_flag IS NOT NULL) THEN
11282    /*
11283    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11284    */
11285     UPDATE qp_npreq_ldets_tmp
11286     SET GROUP_QUANTITY = l_value_from_num, --2388011_new
11287         SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new
11288     WHERE LINE_INDEX = i.line_index
11289     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11290    END IF;
11291 
11292     -- shu debug msg
11293                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11294     QP_PREQ_GRP.engine_debug('for modifiers...');
11295     QP_PREQ_GRP.engine_debug('check condition...');
11296     QP_PREQ_GRP.engine_debug('i.group_amount: : '||i.group_amount);
11297     QP_PREQ_GRP.engine_debug('l_value_from_num: '||l_value_from_num);
11298     QP_PREQ_GRP.engine_debug('p_line_group_flag: '||p_line_group_flag);
11299 
11300                      END IF;
11301    IF (I.group_amount IS NOT NULL and l_value_from_num IS NOT NULL
11302 	  and p_line_group_flag IS NOT NULL) THEN
11303    /*
11304    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11305    */
11306 
11307 
11308    -- [julin/5085310]
11309    IF (i.attribute = G_LINE_AMT_ATTRIBUTE) THEN
11310 
11311      SELECT UNIT_PRICE INTO l_list_price
11312      FROM   qp_npreq_lines_tmp
11313      WHERE  LINE_INDEX = i.line_index;
11314 
11315     /* Handled l_list_price = 0 bug2385874 */
11316      IF (l_list_price IS NOT NULL and l_list_price <>0) THEN -- avoid division by zero
11317 
11318         l_group_amount := I.group_amount /l_list_price;
11319      ELSE
11320         if l_list_price = 0 then
11321         l_group_amount := 0;
11322         else
11323         l_group_amount :=I.group_amount;
11324         end if;
11325      END IF;
11326    ELSE
11327      OPEN l_line_amount_cur(i.line_index, i.line_detail_index, i.context, i.attribute, i.attribute_type);
11328      FETCH l_line_amount_cur into l_line_amount, l_priced_quantity;
11329      CLOSE l_line_amount_cur;
11330 
11331      IF (l_line_amount IS NOT NULL and l_line_amount <>0) THEN -- avoid division by zero
11332        l_group_amount := (I.group_amount /l_line_amount) * l_priced_quantity;
11333      ELSE
11334        if l_line_amount = 0 then
11335          l_group_amount := 0;
11336        else
11337          l_group_amount :=I.group_amount;
11338        end if;
11339      END IF;
11340    END IF;
11341 
11342     -- shu, for modifiers
11343                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11344     QP_PREQ_GRP.engine_debug('for modifiers...');
11345     QP_PREQ_GRP.engine_debug('line_index: '||i.line_index);
11346     QP_PREQ_GRP.engine_debug('list price: '||l_list_price);
11347     QP_PREQ_GRP.engine_debug('i.group_amount: '||i.group_amount);
11348     QP_PREQ_GRP.engine_debug('group_value: '||l_group_amount);
11349                      END IF;
11350 
11351     UPDATE qp_npreq_ldets_tmp
11352     SET   GROUP_AMOUNT = l_group_amount, -- 2388011_new, fix group of lines lumpsum based on ITEM_AMOUNT
11353           SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new
11354     WHERE LINE_INDEX = i.line_index
11355     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11356    END IF;
11357 
11358    --Need the LINE_QUANTITY column to be updated for regular lines with volume attributes, for Calculation purposes
11359    IF (p_line_group_flag IS NULL and l_is_line_group_flag = 'F'
11360        and i.context = G_PRIC_VOLUME_CONTEXT) -- added for [5005328/4911264]
11361    THEN
11362                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11363     QP_PREQ_GRP.engine_debug('Line Index: ' || i.line_index || ' LD Index : ' || i.line_detail_index ||
11364 						' '||l_value_from_num);
11365                      END IF;
11366    /*
11367    INDX,QP_PREQ_GRP.evaluate_between.evaluate_between_upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11368    */
11369     UPDATE qp_npreq_ldets_tmp
11370     SET   LINE_QUANTITY = l_value_from_num, --2388011_new
11371           SELECTED_VOLUME_ATTR = l_selected_volume_attr --2388011_new
11372     WHERE LINE_INDEX = i.line_index
11373     AND   LINE_DETAIL_INDEX = i.line_detail_index;
11374    END IF;
11375 
11376   END IF;
11377 
11378  END LOOP;
11379 
11380 END IF; -- IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID)
11381 
11382  -- If it is a pricing attribute and it fails on between we can delete it right away..Delete all line details where pricing
11383  -- attribute BETWEEN fails
11384  FORALL I IN 1 .. l_line_detail_tbl.COUNT
11385 
11386     /*
11387     INDX,QP_PREQ_GRP.evaluate_between.upd4,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
11388     */
11389     UPDATE qp_npreq_ldets_tmp --upd4
11390     SET    PRICING_STATUS_CODE = G_DELETED_BETWEEN
11391     WHERE  LINE_DETAIL_INDEX  = l_line_detail_tbl(i);
11392 
11393 EXCEPTION
11394   WHEN OTHERS THEN
11395    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11396    engine_debug(l_routine||' '||SQLERRM);
11397    END IF;
11398    x_status_code := FND_API.G_RET_STS_ERROR;
11399    x_status_text := l_routine||': '||SQLERRM;
11400 
11401 END Evaluate_Between;
11402 
11403 /*+---------------------------------------------------------
11404   |PROCEDURE handle_break called by get_eligible_break_lines
11405   +----------------------------------------------------------
11406 */
11407 
11408 PROCEDURE Handle_Break(p_list_header_id    IN  NUMBER,
11409                        p_list_line_id      IN  NUMBER,
11410                        p_pricing_phase_id  IN  PLS_INTEGER,
11411                        p_line_detail_index IN  PLS_INTEGER,
11412                        p_line_index        IN  PLS_INTEGER,
11413                        p_group_quantity    IN  NUMBER,
11414                        p_group_amount      IN  NUMBER,
11415                        p_list_type_code    IN  VARCHAR2, /* Vivek */
11416                        x_is_break_satisfy  OUT NOCOPY BOOLEAN,
11417                        x_status_code OUT NOCOPY VARCHAR2,
11418                        x_status_text OUT NOCOPY VARCHAR2) AS
11419 
11420 /*
11421 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_RLTD_MODIFIERS_N1,FROM_RLTD_MODIFIER_ID,1
11422 
11423 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
11424 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
11425 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
11426 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
11427 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
11428 
11429 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
11430 
11431 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE_CONTEXT,1
11432 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE,2
11433 
11434 INDX,QP_PREQ_GRP.handle_break.l_price_break_detail_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
11435 */
11436 
11437 cursor l_price_break_detail_multi_cur(p_reduced_pbh_processing VARCHAR2) is
11438    SELECT /*+ ordered use_nl(qplines, qprm, qppa, qpll, qph, qcdt) */
11439        qpll.pricing_group_sequence,
11440        qpll.list_header_id,
11441        qppa.list_line_id,
11442        qppa.product_attribute_context,  --setup values
11443        qppa.product_attribute,
11444        qppa.product_attr_value,
11445        qppa.pricing_attribute_context,
11446        qppa.pricing_attribute,
11447        qppa.pricing_attr_value_from,
11448        qppa.pricing_attr_value_to,
11449        qppa.product_uom_code,
11450        qplat_pricing.value_from,
11451        qplat_pricing.attribute,
11452        nvl(qplines.priced_uom_code,qplines.line_uom_code) line_uom_code,
11453        qplines.line_uom_code order_uom_code, -- shulin, for total_item_quantity uom conversion
11454        qplines.line_index,
11455        nvl(qplines.priced_quantity,qplines.line_quantity) line_quantity,
11456        qpll.list_line_type_code,
11457        qpll.modifier_level_code,
11458        qpll.benefit_qty,
11459        qpll.benefit_uom_code,
11460        qpll.list_line_no,
11461        qpll.accrual_flag,
11462        qpll.accrual_conversion_rate,
11463        qpll.estim_accrual_rate,
11464        qpll.recurring_value, -- block pricing
11465        qpll.arithmetic_operator,
11466        qpll.operand,
11467        qpll.list_price,
11468        qpll.pricing_phase_id,
11469        qpll.automatic_flag,
11470        qpll.price_break_type_code,
11471        qpll.incompatibility_GRP_CODE,
11472        qpll.override_flag,
11473        qpll.print_on_invoice_flag,
11474        qpll.price_by_formula_id,
11475        qpll.product_precedence,
11476        nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) usage_pricing_type,
11477        QCDT.ROUNDING_FACTOR, /* vivek */
11478        QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
11479        QCDT.CURRENCY_HEADER_ID,  /* vivek */
11480        QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
11481        QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
11482        QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
11483        QPH.CURRENCY_CODE   BASE_CURRENCY_CODE,  /* vivek */
11484        qplines.contract_start_date, -- R12 partial period pricing
11485        qplines.contract_end_date    -- R12 partial period pricing
11486    FROM
11487        qp_npreq_line_attrs_tmp qplat_pricing,
11488        qp_npreq_lines_tmp      qplines,
11489        qp_rltd_modifiers qprm,
11490        qp_pricing_attributes  qppa,
11491        qp_list_lines          qpll
11492       ,qp_list_headers_b qph   /* Vivek */
11493       ,qp_currency_details qcdt /* Vivek */
11494    WHERE qprm.from_rltd_modifier_id = p_list_line_id
11495    AND   qprm.to_rltd_modifier_id = qppa.list_line_id
11496    AND   qppa.list_line_id = qpll.list_line_id
11497    AND   qplat_pricing.context = G_PRIC_VOLUME_CONTEXT
11498    AND   qppa.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT
11499    AND   qplat_pricing.attribute = qppa.pricing_attribute
11500    AND   qplat_pricing.attribute_type = G_PRICING_TYPE
11501    AND   qplat_pricing.line_index = qplines.line_index
11502    AND   qplat_pricing.pricing_status_code = G_STATUS_UNCHANGED
11503    AND   qplat_pricing.line_index = p_line_index
11504 -- and   qp_number.canonical_to_number(qplat_pricing.value_from) <> 0 -- 5158413
11505 -- commented above for bug#6896139 as fix for bug#5158413 did not consider for G_LINE_GROUP,lines with line qty as 0
11506 --(i.e qplat_pricing.value_from=0) even when the qualifier group count for G_LINE_GROUP was greater than zero
11507    and   qpll.list_header_id = qph.list_header_id /* Vivek */
11508    and   QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
11509             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
11510             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
11511                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11512                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11513    AND (   /* Vivek */
11514         (qcdt.curr_attribute_context is null   /* Vivek */
11515          and not exists   /* Vivek */
11516              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
11517                from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
11518                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
11519                  and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
11520                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
11521                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
11522                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
11523                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
11524                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
11525                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
11526                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
11527                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
11528                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11529                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11530              )   /* Vivek */
11531         )   /* Vivek */
11532         OR   /* Vivek */
11533         (qcdt.curr_attribute_context is not null   /* Vivek */
11534          and qcdt.precedence =
11535              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
11536                from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
11537                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
11538                  and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
11539                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
11540                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
11541                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
11542                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
11543                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
11544                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
11545                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
11546                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
11547                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11548                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
11549              )   /* Vivek */
11550         )   /* Vivek */
11551        )   /* Vivek */
11552    and (( (p_reduced_pbh_processing = G_YES) --[julin/3783009/4712794]
11553          and (nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) <> G_AUTHORING_TYPE)
11554          and ( (qpll.price_break_type_code = G_POINT_BREAK and qp_number.canonical_to_number(qplat_pricing.value_from)
11555                                                        between qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11556                                                            and qp_number.canonical_to_number(qppa.pricing_attr_value_to)
11557                ) OR
11558                (qpll.price_break_type_code = G_RANGE_BREAK and qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11559                                                           <= qp_number.canonical_to_number(qplat_pricing.value_from)
11560                )
11561              )
11562         )
11563        or
11564         (p_reduced_pbh_processing = G_NO)
11565        )
11566    ORDER BY qp_number.canonical_to_number(qppa.pricing_attr_value_from);  --bug#1819397
11567 
11568 cursor l_price_break_detail_cur(p_reduced_pbh_processing VARCHAR2) is
11569    SELECT /*+ ordered use_nl(qplines, qprm, qppa, qpll) */
11570        qpll.pricing_group_sequence,
11571        qpll.list_header_id,
11572        qppa.list_line_id,
11573        qppa.product_attribute_context,  --setup values
11574        qppa.product_attribute,
11575        qppa.product_attr_value,
11576        qppa.pricing_attribute_context,
11577        qppa.pricing_attribute,
11578        qppa.pricing_attr_value_from,
11579        qppa.pricing_attr_value_to,
11580        qppa.product_uom_code,
11581        qplat_pricing.value_from,
11582        qplat_pricing.attribute,
11583        nvl(qplines.priced_uom_code,qplines.line_uom_code) line_uom_code,
11584        qplines.line_uom_code order_uom_code, -- shulin, for total_item_quantity uom conversion
11585        qplines.line_index,
11586        nvl(qplines.priced_quantity,qplines.line_quantity) line_quantity,
11587        qpll.list_line_type_code,
11588        qpll.modifier_level_code,
11589        qpll.benefit_qty,
11590        qpll.benefit_uom_code,
11591        qpll.list_line_no,
11592        qpll.accrual_flag,
11593        qpll.accrual_conversion_rate,
11594        qpll.estim_accrual_rate,
11595        qpll.recurring_value, -- block pricing
11596        qpll.arithmetic_operator,
11597        qpll.operand,
11598        qpll.list_price,
11599        qpll.pricing_phase_id,
11600        qpll.automatic_flag,
11601        qpll.price_break_type_code,
11602        qpll.incompatibility_GRP_CODE,
11603        qpll.override_flag,
11604        qpll.print_on_invoice_flag,
11605        qpll.price_by_formula_id,
11606        qpll.product_precedence,
11607        nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) usage_pricing_type,
11608        NULL ROUNDING_FACTOR, /* vivek */
11609        NULL CURRENCY_DETAIL_ID,  /* sunilpandey */
11610        NULL CURRENCY_HEADER_ID,  /* vivek */
11611        NULL SELLING_ROUNDING_FACTOR,  /* vivek */
11612        NULL ORDER_CURRENCY,  /* vivek */
11613        NULL PRICING_EFFECTIVE_DATE,  /* vivek */
11614        NULL BASE_CURRENCY_CODE,  /* vivek */
11615        qplines.contract_start_date, -- R12 partial period pricing
11616        qplines.contract_end_date    -- R12 partial period pricing
11617    FROM
11618        qp_npreq_line_attrs_tmp qplat_pricing,
11619        qp_npreq_lines_tmp      qplines,
11620        qp_rltd_modifiers qprm,
11621        qp_pricing_attributes  qppa,
11622        qp_list_lines          qpll
11623    WHERE qprm.from_rltd_modifier_id = p_list_line_id
11624    AND   qprm.to_rltd_modifier_id = qppa.list_line_id
11625    AND   qppa.list_line_id = qpll.list_line_id
11626    AND   qplat_pricing.context = G_PRIC_VOLUME_CONTEXT
11627    AND   qppa.pricing_attribute_context = G_PRIC_VOLUME_CONTEXT
11628    AND   qplat_pricing.attribute = qppa.pricing_attribute
11629    AND   qplat_pricing.attribute_type = G_PRICING_TYPE
11630    AND   qplat_pricing.line_index = qplines.line_index
11631    AND   qplat_pricing.pricing_status_code = G_STATUS_UNCHANGED
11632    AND   qplat_pricing.line_index = p_line_index
11633 -- and   qp_number.canonical_to_number(qplat_pricing.value_from) <> 0 -- 5158413
11634 -- commented above for bug#6896139 as fix for bug#5158413 did not consider for G_LINE_GROUP,lines with line qty as 0
11635 --(i.e qplat_pricing.value_from=0) even when the qualifier group count for G_LINE_GROUP was greater than zero
11636    and (( (p_reduced_pbh_processing = G_YES) --[julin/3783009/4712794]
11637           and (nvl(qplines.usage_pricing_type,G_REGULAR_USAGE_TYPE) <> G_AUTHORING_TYPE)
11638           and ( (qpll.price_break_type_code = G_POINT_BREAK and qp_number.canonical_to_number(qplat_pricing.value_from)
11639                                                         between qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11640                                                             and qp_number.canonical_to_number(qppa.pricing_attr_value_to)
11641                 ) OR
11642                 (qpll.price_break_type_code = G_RANGE_BREAK and qp_number.canonical_to_number(qppa.pricing_attr_value_from)
11643                                                            <= qp_number.canonical_to_number(qplat_pricing.value_from)
11644                 )
11645               )
11646         )
11647        or
11648         (p_reduced_pbh_processing = G_NO)
11649        )
11650    ORDER BY qp_number.canonical_to_number(qppa.pricing_attr_value_from);  --bug#1819397
11651 
11652 CURSOR l_pbh_cur IS
11653 SELECT net_amount_flag
11654 FROM   qp_list_lines
11655 WHERE  list_line_id = p_list_line_id;
11656 
11657 J PLS_INTEGER:=1;
11658 N PLS_INTEGER:=1;
11659 --l_line_detail_index PLS_INTEGER;
11660 --l_line_detail_tbl LINE_DETAIL_TBL_TYPE;
11661 --l_line_attrs_tbl  LINE_ATTR_TBL_TYPE;
11662 l_VALID_PBH_FLAG VARCHAR2(1):='N';
11663 l_VALUE_TO NUMBER:=0;
11664 l_VALUE_FROM NUMBER;
11665 l_order_uom_code VARCHAR2(3);
11666 l_primary_uom    VARCHAR2(3);
11667 l_product_uom    VARCHAR2(3);
11668 l_quantity NUMBER;
11669 l_item_id NUMBER;
11670 l_uom_rate NUMBER;
11671 l_status_code VARCHAR2(30);
11672 l_status_text VARCHAR2(240);
11673 E_INVALID_PRICE_BREAK_TYPE EXCEPTION;
11674 E_INVALID_UOM_CONVERSION EXCEPTION;
11675 e_proration_fac_oks_error exception; /* Proration */
11676 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.HANDLE_BREAK';
11677 rowid_tbl ROWID_TYPE;
11678 index_tbl PLS_INTEGER_TYPE;
11679 l_count PLS_INTEGER:=0;
11680 l_grp_quantity NUMBER:=0;
11681 l_selected_volume_attr VARCHAR2(1);
11682 l_setup_value_from NUMBER;
11683 l_continuous_flag BOOLEAN := FALSE; -- 4061138, maintained only if proration involved
11684 
11685 -- julin [3805113]: local tables populated via cursor
11686 l_h_pricing_group_sequence_tbl    NUMBER_TYPE;
11687 l_h_list_header_id_tbl            NUMBER_TYPE;
11688 l_h_list_line_id_tbl              NUMBER_TYPE;
11689 l_h_product_attr_context_tbl VARCHAR_TYPE;
11690 l_h_product_attribute_tbl         VARCHAR_TYPE;
11691 l_h_product_attr_value_tbl        VARCHAR_TYPE;
11692 l_h_pricing_attr_context_tbl VARCHAR_TYPE;
11693 l_h_pricing_attribute_tbl         VARCHAR_TYPE;
11694 l_h_pricing_attr_val_from_tbl   VARCHAR_TYPE;
11695 l_h_pricing_attr_val_to_tbl     VARCHAR_TYPE;
11696 l_h_product_uom_code_tbl          VARCHAR_30_TYPE;
11697 l_h_value_from_tbl                VARCHAR_TYPE;
11698 l_h_attribute_tbl                 VARCHAR_TYPE;
11699 l_h_line_uom_code_tbl             VARCHAR_30_TYPE;
11700 l_h_order_uom_code_tbl            VARCHAR_30_TYPE; -- shu, for total_item_qty
11701 l_h_line_index_tbl                NUMBER_TYPE;
11702 l_h_line_quantity_tbl             NUMBER_TYPE;
11703 l_h_list_line_type_code_tbl       VARCHAR_30_TYPE;
11704 l_h_modifier_level_code_tbl       VARCHAR_30_TYPE;
11705 l_h_benefit_qty_tbl               NUMBER_TYPE;
11706 l_h_benefit_uom_code_tbl          VARCHAR_30_TYPE;
11707 l_h_list_line_no_tbl              NUMBER_TYPE;
11708 l_h_accrual_flag_tbl              VARCHAR_30_TYPE;
11709 l_h_accrual_conv_rate_tbl   NUMBER_TYPE;
11710 l_h_estim_accrual_rate_tbl        NUMBER_TYPE;
11711 l_h_recurring_value_tbl           NUMBER_TYPE; -- block pricing
11712 l_h_arithmetic_operator_tbl       VARCHAR_30_TYPE;
11713 l_h_operand_tbl                   NUMBER_TYPE;
11714 l_h_list_price_tbl                NUMBER_TYPE;
11715 l_h_pricing_phase_id_tbl          NUMBER_TYPE;
11716 l_h_automatic_flag_tbl            VARCHAR_30_TYPE;
11717 l_h_price_break_type_code_tbl     VARCHAR_30_TYPE;
11718 l_h_incompat_grp_code_tbl  VARCHAR_30_TYPE;
11719 l_h_override_flag_tbl             VARCHAR_30_TYPE;
11720 l_h_print_on_invoice_flag_tbl     VARCHAR_30_TYPE;
11721 l_h_price_by_formula_id_tbl       NUMBER_TYPE;
11722 l_h_product_precedence_tbl        NUMBER_TYPE;
11723 l_h_usage_pricing_type_tbl        VARCHAR_30_TYPE;
11724 l_h_rounding_factor_tbl           NUMBER_TYPE; /* Vivek */
11725 l_h_currency_detail_id_tbl        NUMBER_TYPE; /* Vivek */
11726 l_h_currency_header_id_tbl        NUMBER_TYPE; /* Vivek */
11727 l_h_selling_round_factor_tbl   NUMBER_TYPE; /* Vivek */
11728 l_h_order_currency_tbl            VARCHAR_30_TYPE; /* Vivek */
11729 l_h_pricing_effective_date_tbl    DATE_TYPE; /* Vivek */
11730 l_h_base_currency_code_tbl        VARCHAR_30_TYPE; /* Vivek */
11731 l_h_contract_start_date_tbl       DATE_TYPE; -- R12 partial period pricing
11732 l_h_contract_end_date_tbl         DATE_TYPE; -- R12 partial period pricing
11733 
11734 -- julin [3805113]: local tables not populated via cursor
11735 l_l_line_detail_index_tbl         NUMBER_TYPE;
11736 l_l_selected_volume_attr_tbl      FLAG_TYPE; -- only need VARCHAR(1)
11737 l_l_G_CHILD_DETAIL_TYPE_tbl       VARCHAR_30_TYPE;
11738 l_l_p_line_index_tbl                PLS_INTEGER_TYPE;
11739 l_l_G_STATUS_NEW_tbl              VARCHAR_30_TYPE;
11740 l_l_G_NOT_PROCESSED_tbl           VARCHAR_30_TYPE;
11741 l_l_group_quantity_tbl            NUMBER_TYPE;
11742 l_l_group_amount_tbl              NUMBER_TYPE;
11743 l_l_list_type_code_tbl            VARCHAR_TYPE;
11744 l_l_G_DETAIL_LEVEL_tbl            VARCHAR_30_TYPE;
11745 l_l_G_PRICING_TYPE_tbl            VARCHAR_30_TYPE;
11746 l_l_G_BY_PBH_tbl                  VARCHAR_30_TYPE;
11747 l_l_G_OPERATOR_BETWEEN_tbl        VARCHAR_30_TYPE;
11748 l_l_p_list_line_id_tbl            NUMBER_TYPE;
11749 l_l_G_PBH_LINE_tbl                VARCHAR_30_TYPE;
11750 l_l_G_PROCESSED_tbl               VARCHAR_30_TYPE;
11751 l_l_quantity_tbl                  NUMBER_TYPE;
11752 l_l_p_line_detail_index_tbl       NUMBER_TYPE;
11753 
11754 --type refcur is ref cursor;
11755 
11756 --l_price_break_detail_cur    refcur;
11757 l_total_item_quantity NUMBER;	-- shu
11758 l_max_decimal_digits PLS_INTEGER := nvl(FND_PROFILE.Value ('QP_INV_DECIMAL_PRECISION'),10); --shu
11759 
11760 l_break_uom_code      VARCHAR2(3); /* Proration */
11761 l_break_uom_context   VARCHAR2(30); /* Proration */
11762 l_break_uom_attribute VARCHAR2(30); /* Proration */
11763 l_passed_break_uom    VARCHAR2(3); /* Proration */
11764 l_proration_factor    NUMBER; /* Proration */
11765 l_contract_start_date date; /* Proration */
11766 l_contract_end_date   date; /* Proration */
11767 l_proration_processed VARCHAR2(1) := 'N'; /* Proration */
11768 l_value_temp          NUMBER; /* Proration */
11769 l_first_time_flag     VARCHAR2(1) := 'Y'; /* Proration */
11770 l_prev_setup_to_value  number; /* ER 3637202 */
11771 l_prev_prorated_to_value  number; /* ER 3637202 */
11772 l_gap  number; /* ER 3637202 */
11773 l_reduced_pbh_processing varchar2(1); --[julin/3783009/4712794]
11774 l_net_amount_flag varchar2(1); --[julin/4671446]
11775 
11776 BEGIN
11777 
11778 --product uom code is different than order uom code
11779 --and attribute is quantity than we need to do uom conversion
11780 if G_BREAK_UOM_PRORATION is null then
11781   G_BREAK_UOM_PRORATION := nvl(fnd_profile.value('QP_BREAK_UOM_PRORATION'), G_NULL_PROFILE_VALUE);
11782 end if;
11783 
11784 N := 1;
11785 
11786  --[julin/3783009/4712794] ER - reduced pbh process should be done when following conditions are met
11787  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
11788    l_reduced_pbh_processing := G_YES;
11789  else
11790    l_reduced_pbh_processing := G_NO;
11791  end if;
11792 
11793   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11794     engine_debug('G_BREAK_UOM_PRORATION ' || G_BREAK_UOM_PRORATION);
11795     engine_debug('p_list_type_code ' || p_list_type_code);
11796     engine_debug('G_REQUEST_TYPE_CODE ' || G_REQUEST_TYPE_CODE);
11797     engine_debug('l_reduced_pbh_processing ' || l_reduced_pbh_processing);
11798 
11799   END IF;
11800 
11801 --[julin/4671446]
11802 OPEN l_pbh_cur;
11803 FETCH l_pbh_cur into l_net_amount_flag;
11804 CLOSE l_pbh_cur;
11805 
11806 -- julin [3805113]: bulk fetch
11807 IF (p_pricing_phase_id = 1 and G_MULTI_CURRENCY_PROFILE = G_YES
11808     and G_USE_MULTI_CURRENCY = G_YES) THEN
11809   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11810     engine_debug ('Multi-Currency Pricing Phase Price Break');
11811   END IF;
11812   OPEN l_price_break_detail_multi_cur(l_reduced_pbh_processing);
11813   FETCH l_price_break_detail_multi_cur BULK COLLECT INTO
11814        l_h_pricing_group_sequence_tbl,
11815        l_h_list_header_id_tbl,
11816        l_h_list_line_id_tbl,
11817        l_h_product_attr_context_tbl,
11818        l_h_product_attribute_tbl,
11819        l_h_product_attr_value_tbl,
11820        l_h_pricing_attr_context_tbl,
11821        l_h_pricing_attribute_tbl,
11822        l_h_pricing_attr_val_from_tbl,
11823        l_h_pricing_attr_val_to_tbl,
11824        l_h_product_uom_code_tbl,
11825        l_h_value_from_tbl,
11826        l_h_attribute_tbl,
11827        l_h_line_uom_code_tbl,
11828        l_h_order_uom_code_tbl, -- shulin_tbl, for total_item_quantity uom conversion
11829        l_h_line_index_tbl,
11830        l_h_line_quantity_tbl,
11831        l_h_list_line_type_code_tbl,
11832        l_h_modifier_level_code_tbl,
11833        l_h_benefit_qty_tbl,
11834        l_h_benefit_uom_code_tbl,
11835        l_h_list_line_no_tbl,
11836        l_h_accrual_flag_tbl,
11837        l_h_accrual_conv_rate_tbl,
11838        l_h_estim_accrual_rate_tbl,
11839        l_h_recurring_value_tbl, -- block pricing
11840        l_h_arithmetic_operator_tbl,
11841        l_h_operand_tbl,
11842        l_h_list_price_tbl,
11843        l_h_pricing_phase_id_tbl,
11844        l_h_automatic_flag_tbl,
11845        l_h_price_break_type_code_tbl,
11846        l_h_incompat_grp_code_tbl,
11847        l_h_override_flag_tbl,
11848        l_h_print_on_invoice_flag_tbl,
11849        l_h_price_by_formula_id_tbl,
11850        l_h_product_precedence_tbl,
11851        l_h_usage_pricing_type_tbl,
11852        l_h_rounding_factor_tbl, /* Vivek */
11853        l_h_currency_detail_id_tbl, /* Vivek */
11854        l_h_currency_header_id_tbl, /* Vivek */
11855        l_h_selling_round_factor_tbl,  /* Vivek */
11856        l_h_order_currency_tbl,     /* Vivek */
11857        l_h_pricing_effective_date_tbl, /* Vivek */
11858        l_h_base_currency_code_tbl,     /* Vivek */
11859        l_h_contract_start_date_tbl, -- R12 partial period pricing
11860        l_h_contract_end_date_tbl;    -- R12 partial period pricing
11861   CLOSE l_price_break_detail_multi_cur;
11862 ELSE
11863   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11864     engine_debug ('Discounts Based Price Break');
11865   END IF;
11866   OPEN l_price_break_detail_cur(l_reduced_pbh_processing);
11867   FETCH l_price_break_detail_cur BULK COLLECT INTO
11868        l_h_pricing_group_sequence_tbl,
11869        l_h_list_header_id_tbl,
11870        l_h_list_line_id_tbl,
11871        l_h_product_attr_context_tbl,
11872        l_h_product_attribute_tbl,
11873        l_h_product_attr_value_tbl,
11874        l_h_pricing_attr_context_tbl,
11875        l_h_pricing_attribute_tbl,
11876        l_h_pricing_attr_val_from_tbl,
11877        l_h_pricing_attr_val_to_tbl,
11878        l_h_product_uom_code_tbl,
11879        l_h_value_from_tbl,
11880        l_h_attribute_tbl,
11881        l_h_line_uom_code_tbl,
11882        l_h_order_uom_code_tbl, -- shulin_tbl, for total_item_quantity uom conversion
11883        l_h_line_index_tbl,
11884        l_h_line_quantity_tbl,
11885        l_h_list_line_type_code_tbl,
11886        l_h_modifier_level_code_tbl,
11887        l_h_benefit_qty_tbl,
11888        l_h_benefit_uom_code_tbl,
11889        l_h_list_line_no_tbl,
11890        l_h_accrual_flag_tbl,
11891        l_h_accrual_conv_rate_tbl,
11892        l_h_estim_accrual_rate_tbl,
11893        l_h_recurring_value_tbl, -- block pricing
11894        l_h_arithmetic_operator_tbl,
11895        l_h_operand_tbl,
11896        l_h_list_price_tbl,
11897        l_h_pricing_phase_id_tbl,
11898        l_h_automatic_flag_tbl,
11899        l_h_price_break_type_code_tbl,
11900        l_h_incompat_grp_code_tbl,
11901        l_h_override_flag_tbl,
11902        l_h_print_on_invoice_flag_tbl,
11903        l_h_price_by_formula_id_tbl,
11904        l_h_product_precedence_tbl,
11905        l_h_usage_pricing_type_tbl,
11906        l_h_rounding_factor_tbl, /* Vivek */
11907        l_h_currency_detail_id_tbl, /* Vivek */
11908        l_h_currency_header_id_tbl, /* Vivek */
11909        l_h_selling_round_factor_tbl,  /* Vivek */
11910        l_h_order_currency_tbl,     /* Vivek */
11911        l_h_pricing_effective_date_tbl, /* Vivek */
11912        l_h_base_currency_code_tbl,     /* Vivek */
11913        l_h_contract_start_date_tbl, -- R12 partial period pricing
11914        l_h_contract_end_date_tbl;    -- R12 partial period pricing
11915   CLOSE l_price_break_detail_cur;
11916 END IF;
11917 
11918 IF (l_h_list_line_id_tbl.COUNT > 0) THEN
11919   FOR I in l_h_list_line_id_tbl.FIRST .. l_h_list_line_id_tbl.LAST
11920   LOOP
11921 
11922    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11923    engine_debug('Modifier_level_code: '||l_h_modifier_level_code_tbl(i));
11924    engine_debug('Attribute: '||l_h_ATTRIBUTE_tbl(i));
11925 
11926    END IF;
11927 IF l_h_value_from_tbl(i) <> 0 OR (l_h_value_from_tbl(i) = 0 AND--bug#6896139.If Condition to consider 0 value only for G_LINE_GROUP
11928 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
11929    IF l_h_modifier_level_code_tbl(i) = G_LINE_GROUP THEN
11930       IF l_h_attribute_tbl(i) = G_QUANTITY_ATTRIBUTE THEN
11931         l_quantity := p_group_quantity;
11932         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11933         engine_debug('l_quantity :'||l_quantity);
11934         END IF;
11935         l_selected_volume_attr := G_QUANTITY;
11936       ELSE
11937         l_quantity := p_group_amount;
11938         l_selected_volume_attr := G_AMOUNT;
11939       END IF;
11940 
11941       IF (p_group_quantity <> l_quantity) THEN
11942 
11943        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11944        engine_debug('UOM l_quantity : '||l_quantity);
11945        engine_debug('UOM p_group_quantity :'||p_group_quantity);
11946 
11947        END IF;
11948       /*
11949       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
11950       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
11951       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
11952       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
11953       INDX,QP_PREQ_GRP.handle_break.upd1,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
11954       */
11955 
11956        UPDATE qp_npreq_ldets_tmp --upd1
11957        SET GROUP_QUANTITY = l_quantity, --2388011_new
11958            SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new, ASK RAVI, commented out??
11959        WHERE CREATED_FROM_LIST_HEADER_ID = p_list_header_id
11960        AND   PRICING_PHASE_ID = p_pricing_phase_id
11961        AND   PRICING_STATUS_CODE = QP_PREQ_GRP.G_STATUS_NEW
11962        AND   CREATED_FROM_LIST_LINE_ID = p_list_line_id
11963        AND   LINE_INDEX = p_line_index;
11964 
11965       END IF;
11966 
11967    ELSE  --not a line group
11968 
11969       IF l_h_ATTRIBUTE_tbl(i) = G_QUANTITY_ATTRIBUTE THEN
11970         IF l_h_product_uom_code_tbl(i) IS NULL THEN
11971           l_product_uom := l_h_line_uom_code_tbl(i);
11972         ELSE
11973           l_product_uom := l_h_product_uom_code_tbl(i);
11974         END IF;
11975         l_quantity :=  l_h_line_quantity_tbl(i);
11976         l_selected_volume_attr := G_QUANTITY;
11977 
11978       -- begin, shu fix
11979       ELSIF l_h_ATTRIBUTE_tbl(i) = 'PRICING_ATTRIBUTE20' THEN -- shulin, for fte total_item_quantity uom conversion
11980        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11981       	engine_debug ('TOTAL_ITEM_QUANTITY...');
11982        END IF;
11983       	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
11984         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11985       		engine_debug ('no uom conversion, pricing_uom_code is same as order_uom_code: '||l_h_line_uom_code_tbl(i));
11986         END IF;
11987       		l_quantity :=  qp_number.canonical_to_number(l_h_value_from_tbl(i));
11988         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11989       		engine_debug ('l_quantity: '||l_quantity);
11990         END IF;
11991       	ELSE	-- uom conversion
11992         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11993       		engine_debug ('uom conversion...');
11994       		engine_debug ('order_uom_code: '||l_h_order_uom_code_tbl(i));
11995       		engine_debug ('primary_uom_code: '||l_h_product_uom_code_tbl(i));
11996         END IF;
11997       		l_total_item_quantity :=  qp_number.canonical_to_number(l_h_value_from_tbl(i));
11998         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
11999       		engine_debug ('l_quantity before uom convertion: '||l_total_item_quantity );
12000         END IF;
12001 
12002       		convert_uom (	l_h_order_uom_code_tbl(i),
12003                       		l_h_product_uom_code_tbl(i),
12004                       		l_total_item_quantity,  --total_item_qty
12005                       		l_quantity,		-- qty_after_uom_conversion
12006                       		l_status_code,
12007                       		l_status_text);
12008                  IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12009                  	raise E_INVALID_UOM_CONVERSION;
12010                  END IF;
12011 
12012                  -- shu, fix bug2368445
12013                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12014                  engine_debug ('l_quantity before rounded by inv_decimal_precision: '||l_quantity);
12015                  engine_debug ('inv_decimal_precision: '||l_max_decimal_digits);
12016                  END IF;
12017                  IF (l_quantity IS NOT NULL AND l_max_decimal_digits IS NOT NULL) THEN -- it will have sql err if null
12018                  	l_quantity := round (l_quantity, l_max_decimal_digits);
12019                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12020                  	engine_debug ('l_quantity after rounded by inv_decimal_precision: '||l_quantity);
12021                   END IF;
12022    		 END IF;
12023       	END IF;
12024       	l_selected_volume_attr := 'O'; --2388011_latest
12025       -- end, shu fix
12026       ELSE
12027         l_quantity :=  qp_number.canonical_to_number(l_h_value_from_tbl(i));
12028         l_selected_volume_attr := G_AMOUNT;
12029       END IF;
12030 
12031 	 -- This LINE_QUANTITY is column is needed for knowing the right value for
12032 	 -- PBH based on modifier level code 'LINE' for calculation purposes
12033 
12034        /*
12035        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
12036        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
12037        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
12038        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
12039        INDX,QP_PREQ_GRP.handle_break.upd2,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
12040        */
12041 
12042        UPDATE qp_npreq_ldets_tmp --upd2
12043        SET LINE_QUANTITY = l_quantity, --2388011_new
12044            SELECTED_VOLUME_ATTR = l_selected_volume_attr -- 2388011_new
12045        WHERE CREATED_FROM_LIST_HEADER_ID = p_list_header_id
12046        AND   PRICING_PHASE_ID = p_pricing_phase_id
12047        AND   PRICING_STATUS_CODE = QP_PREQ_GRP.G_STATUS_NEW
12048        AND   CREATED_FROM_LIST_LINE_ID = p_list_line_id
12049        AND   LINE_INDEX = p_line_index;
12050 
12051    END IF;
12052 
12053 
12054      l_setup_value_from := qp_number.canonical_to_number(l_h_pricing_attr_val_from_tbl(i));
12055 
12056      --handle the case when value_to is null
12057      IF (l_h_pricing_attr_val_to_tbl(i) IS NULL) THEN
12058          IF l_quantity >= l_setup_value_from THEN
12059            l_value_to := l_quantity;
12060          ELSIF l_quantity < l_setup_value_from THEN
12061            l_value_to := l_setup_value_from;
12062          END IF;
12063      ELSE
12064          l_value_to := qp_number.canonical_to_number(l_h_pricing_attr_val_to_tbl(i));
12065      END IF;
12066 
12067      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12068      engine_debug(l_routine||' Line quantity: '||l_quantity);
12069      engine_debug(l_routine||' value from: '||l_setup_value_from);
12070      engine_debug(l_routine||' value to : '||l_value_to);
12071      engine_debug(l_routine||' usage pricing type: '||l_h_usage_pricing_type_tbl(i));
12072 
12073      END IF;
12074 
12075      /* Proration Changes START  */
12076      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12077        engine_debug(l_routine||'  QP_CODE_CONTROL.CODE_RELEASE_LEVEL : '|| QP_CODE_CONTROL.CODE_RELEASE_LEVEL);
12078        engine_debug(l_routine||'  profile QP_BREAK_UOM_PRORATION : '|| G_BREAK_UOM_PRORATION);
12079        engine_debug(l_routine||'  G_REGULAR_USAGE_TYPE : '|| G_REGULAR_USAGE_TYPE);
12080      END IF;
12081 
12082 -- feb 22 toi comment start
12083 -- proration makes sense for regular usage call and not for authoring call
12084 -- proration is not supported for the authoring call from Calling application
12085 -- feb 22 toi comment end
12086 
12087      if QP_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510'
12088        and G_BREAK_UOM_PRORATION = 'Y'
12089        and l_h_usage_pricing_type_tbl(i) = G_REGULAR_USAGE_TYPE
12090      then
12091 
12092         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12093           engine_debug(l_routine||' Proration allowed profile is set ');
12094         END IF;
12095 
12096 	-- feb 22 toi comment start
12097         -- Using l_first_time_flag ensures that the follwoing logic is executed once
12098         -- only since break related information is same across all the break lines
12099 	-- feb 22 toi comment end
12100         -- get the proration set up data only once
12101 
12102         if l_first_time_flag = 'Y' then
12103           select break_uom_code, break_uom_context, break_uom_attribute
12104             into l_break_uom_code, l_break_uom_context, l_break_uom_attribute
12105             from qp_npreq_ldets_tmp
12106            where line_detail_index = p_line_detail_index;
12107 
12108            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12109              engine_debug(l_routine||' l_break_uom_code = ' || l_break_uom_code);
12110              engine_debug(l_routine||' l_break_uom_context = ' || l_break_uom_context);
12111              engine_debug(l_routine||' l_break_uom_attribute = ' || l_break_uom_attribute);
12112            END IF;
12113         end if; --l_first_time_flag = 'Y'
12114 
12115 	IF l_break_uom_code IS NOT null THEN
12116         -- feb 22 toi comment start
12117           -- if break uom was set up, then get the passed break uom
12118           -- if break_uom is not set up, then no proration and proceed with normal price break evaluation
12119         -- feb 22 toi comment end
12120 	  -- price book
12121           IF nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES THEN
12122             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12123               engine_debug('call from price book with proration ==> skip this break entirely');
12124             END IF;
12125             EXIT; -- exit big loop to stop processing remaining child lines
12126           END IF;
12127         begin
12128             if l_first_time_flag = 'Y' then
12129               -- get the passed break uom only once
12130               select value_from
12131                 into l_passed_break_uom
12132                 from qp_npreq_line_attrs_tmp
12133                where line_index = p_line_index
12134                  and context = l_break_uom_context
12135                  and attribute = l_break_uom_attribute
12136                  and pricing_status_code = G_STATUS_UNCHANGED
12137                  and attribute_type = G_PRICING_TYPE;
12138             end if; --l_first_time_flag = 'Y'
12139 
12140             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12141               engine_debug(l_routine||' l_passed_break_uom = '|| l_passed_break_uom);
12142             END IF;
12143 
12144             -- break uom has been passed, do the proration
12145             l_proration_processed := 'Y';
12146 
12147             --if G_TIME_UOM_CONVERSION = 'ORACLE_CONTRACTS' then
12148             -- changed for R12 partial period pricing
12149             if (l_h_contract_start_date_tbl(i) is not null and
12150                 l_h_contract_end_date_tbl(i) is not null)
12151             then
12152               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12153                 engine_debug(l_routine||' OKS UOM conversion ');
12154               END IF;
12155 
12156                -- get the conversion factor by calling oks api
12157                -- call the oks api only once
12158                if l_first_time_flag = 'Y' then
12159                  select contract_start_date, contract_end_date
12160                    into l_contract_start_date, l_contract_end_date
12161                    from qp_npreq_lines_tmp
12162                   where line_index = p_line_index;
12163 
12164                  -- OKS_QP_INT.get_conversion_factor was replaced by
12165                  -- OKS_OMINT_PUB.get_quantity in R12 for partial period pricing
12166                  l_proration_factor := OKS_OMINT_PUB.get_quantity(
12167                                p_start_date => l_contract_start_date,
12168                                p_end_date   => l_contract_end_date,
12169                                p_source_uom => l_break_uom_code,
12170                                p_org_id     => QP_PREQ_GRP.G_CURRENT_USER_OP_UNIT);
12171 
12172                  IF l_proration_factor = 0 THEN
12173                     raise e_proration_fac_oks_error;
12174                  END IF;
12175                end if;
12176 
12177                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12178                  engine_debug(l_routine||' l_proration_factor = '|| l_proration_factor);
12179                END IF;
12180 
12181                if l_proration_factor is not null then
12182                   /* ER 3637202
12183                      bug fix 3715261 - after multiplying with proration factor, truncate the values
12184                      For 1st break line prorate as below
12185                      -----------------------------------
12186                         trunc(From * Proration Factor)          trunc(To * Proration Factor) ** changed behavior
12187 
12188                      For remaining break lines follow the below steps -
12189                      --------------------------------------------------
12190                      Gap = BreakLine (n) "From" - BreakLine (n-1) "To"
12191 
12192                      If Gap = 1
12193                        Prorated BreakLine (n-1) To + 1                  trunc(To * Proration Factor) ** changed behaviour
12194                      Else
12195                        trunc(BreakLine (n) From * Proration Factor) 		trunc(To * Proration Factor) ** changed behavior
12196                      End If
12197 
12198                      -- feb 22 toi comment start
12199                      Setup with fraction may cause issue as previous to value and current from value may become same and
12200                      currently pricing engine does not support overlapping price break ranges.
12201                      e.g   Value from     Value to
12202                               2             5
12203                               5.1           10
12204 
12205                      If this needs to be prorated by proration factor 2 the new price_break ranges will be
12206                             Value from     Value to
12207 		                1            2
12208                                 2            5
12209                       Thus, first break's value_to becomes equal to the second break's value_from.
12210                       This needs to be added to the Implementation Manual.
12211                      -- feb 22 toi comment end
12212 
12213                      ER 4061138 (Continuous Price Breaks)
12214                      For prorated break lines that are CONTINUOUS, the unrounded Value From is copied into
12215                      the previous break's Value To.   This deals with the problem inherent to mixed price
12216                      breaks with proration.
12217                      e.g.  Value From    Value To
12218                               1             100      <-- non-continuous break
12219                               100           200      <-- continuous
12220 
12221                            Apply a proration factor of 1/3
12222                            New From      New To
12223                               0             33       <-- 33 is trunc(33 1/3), old proration rule
12224                               33 1/3        66 2/3   <-- continuous = no trunc
12225 
12226                            Problem here is that the proration has introduced a gap between the first and
12227                            second break lines, and result can be that total satisfied qty <> ordered qty.
12228                            To fix this, we "borrow" the Value From to eliminate the unwanted gap.
12229                            New From      Newer To
12230                               0             33 1/3   <-- magic!
12231                               33 1/3        66 2/3
12232 
12233                      Refer to the enhancement document on Continuous Price Breaks for more details.
12234                   */
12235                  if l_first_time_flag = 'Y' then --means first price break
12236                    l_setup_value_from := trunc(l_setup_value_from * l_proration_factor);
12237                    l_prev_setup_to_value := l_value_to; -- store the un-prorated to value to determine setup gap
12238                    l_value_to := trunc(l_value_to * l_proration_factor);
12239                    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
12240                  else -- second break onwards
12241                    l_gap := l_setup_value_from - l_prev_setup_to_value;
12242                    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12243                      engine_debug(l_routine||' l_gap = '|| l_gap);
12244                    END IF;
12245                    if l_gap = 0 then
12246                      -- 4061138, only for continuous breaks
12247                      l_continuous_flag := TRUE;
12248                      l_setup_value_from := l_setup_value_from * l_proration_factor;
12249                      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12250                        engine_debug(l_routine||' * continuous price break');
12251                      END IF;
12252                    elsif l_gap = 1 then
12253                      -- non-continuous breaks with gap 1
12254                      -- 4687551, gap becomes precision of previous prorated to value
12255                      l_gap := abs(l_prev_prorated_to_value);
12256                      l_gap := power(10, -(length(to_char(l_gap-trunc(l_gap))) - 1));
12257                      l_setup_value_from := l_prev_prorated_to_value + l_gap;
12258                    else
12259                       l_setup_value_from := trunc(l_setup_value_from * l_proration_factor);
12260                    end if; -- if l_gap = 0
12261                    l_prev_setup_to_value := l_value_to;
12262                    l_value_to := l_value_to * l_proration_factor;
12263                    IF l_continuous_flag <> TRUE THEN
12264                      l_value_to := trunc(l_value_to);
12265                    END IF;
12266                    l_prev_prorated_to_value := l_value_to;
12267                  end if; -- if l_first_time_flag
12268                end if; --  if l_proration_factor is not null
12269                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12270                 engine_debug(l_routine||' l_setup_value_from = '|| l_setup_value_from);
12271                 engine_debug(l_routine||' l_value_to = '|| l_value_to);
12272                END IF;
12273 
12274             else
12275               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12276                 engine_debug(l_routine||' Standard UOM conversion ');
12277               END IF;
12278 
12279               -- OKS profile is not set, do standard uom conversion
12280               if l_first_time_flag = 'Y' then --means first price break
12281       	        convert_uom(l_passed_break_uom,
12282                           l_break_uom_code,
12283                       	  l_setup_value_from,  -- before conversion
12284                       	  l_value_temp,  -- after conversion
12285                       	  l_status_code,
12286                       	  l_status_text);
12287                 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12288                   raise E_INVALID_UOM_CONVERSION;
12289                 END IF;
12290 
12291                 -- 4061138 continuous break
12292                 -- remain non-continuous when value_from = 0, for OKS proration requirement
12293                 IF l_setup_value_from = 0 THEN
12294                   l_continuous_flag := FALSE;
12295                 END IF;
12296 
12297                 l_setup_value_from := trunc(l_value_temp);
12298 
12299                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12300                   engine_debug(l_routine||' l_setup_value_from = '|| l_setup_value_from);
12301                 END IF;
12302 
12303                 l_prev_setup_to_value := l_value_to; -- store the un-prorated to value to determine setup gap
12304 
12305       	        convert_uom(l_passed_break_uom,
12306                           l_break_uom_code,
12307                       	  l_value_to,  -- before conversion
12308                       	  l_value_temp,  -- after conversion
12309                       	  l_status_code,
12310                       	  l_status_text);
12311                 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12312                   raise E_INVALID_UOM_CONVERSION;
12313                 END IF;
12314 
12315                 -- 4061138, rewritten for continuous break logic
12316                 IF l_continuous_flag = TRUE THEN
12317                    -- first continuous break: do not trunc Value To
12318                    -- also, unset l_continuous flag even though this is continuous, because
12319                    -- later on when updating ldets, we don't want the flag to trigger an update
12320                    -- of the non-existent previous break's Value To
12321                   l_value_to := l_value_temp;
12322                   l_continuous_flag := FALSE;
12323                 ELSE
12324                   l_value_to := trunc(l_value_temp);
12325                 END IF;
12326 
12327                 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
12328                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12329                   engine_debug(l_routine||' l_value_to = '|| l_value_to);
12330                 END IF;
12331               else -- second breaks onwards
12332                 l_gap := l_setup_value_from - l_prev_setup_to_value;
12333                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12334                   engine_debug(l_routine||' l_gap = '|| l_gap);
12335                 END IF;
12336 
12337                 if l_gap = 1 then
12338                   -- 4687551, gap becomes precision of previous prorated to value
12339                   l_gap := abs(l_prev_prorated_to_value);
12340                   l_gap := power(10, -(length(to_char(l_gap-trunc(l_gap))) - 1));
12341                   l_setup_value_from := l_prev_prorated_to_value + l_gap;
12342                 else
12343       	          convert_uom(l_passed_break_uom,
12344                           l_break_uom_code,
12345                       	  l_setup_value_from,  -- before conversion
12346                       	  l_value_temp,  -- after conversion
12347                       	  l_status_code,
12348                       	  l_status_text);
12349                   IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12350                     raise E_INVALID_UOM_CONVERSION;
12351                   END IF;
12352 
12353                   -- 4061138 continuous breaks
12354                   IF l_gap = 0 THEN
12355                     l_continuous_flag := TRUE;
12356                     l_setup_value_from := l_value_temp;
12357                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12358                       engine_debug(l_routine||' * continuous price break');
12359                     END IF;
12360                   ELSE
12361                     l_setup_value_from := trunc(l_value_temp);
12362                   END IF;
12363 
12364                 end if; -- if l_gap = 1
12365 
12366                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12367                   engine_debug(l_routine||' l_setup_value_from = '|| l_setup_value_from);
12368                 END IF;
12369 
12370                 l_prev_setup_to_value := l_value_to;
12371 
12372       	        convert_uom(l_passed_break_uom,
12373                           l_break_uom_code,
12374                       	  l_value_to,  -- before conversion
12375                       	  l_value_temp,  -- after conversion
12376                       	  l_status_code,
12377                       	  l_status_text);
12378                 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
12379                   raise E_INVALID_UOM_CONVERSION;
12380                 END IF;
12381 
12382                 l_value_to := l_value_temp;
12383                 IF l_continuous_flag <> TRUE THEN -- 4061138
12384                   l_value_to := trunc(l_value_to);
12385                 END IF;
12386 
12387                 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
12388                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12389                   engine_debug(l_routine||' l_value_to = '|| l_value_to);
12390                 END IF;
12391               end if; -- if l_first_time_flag
12392 
12393             end if; -- OKS profile
12394 
12395           exception
12396             when no_data_found then
12397               -- if proration attribute is not passed, then no proration
12398               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12399                 engine_debug(l_routine||' no proration attribute passed ');
12400               END IF;
12401               null;
12402 
12403             when others then
12404               -- if proration attribute is not passed, then no proration
12405               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12406                 engine_debug(l_routine||' others exception, trying to find whether proration attr passed');
12407               END IF;
12408               null;
12409           end;
12410 
12411         end if; --l_break_uom_code is not null
12412      end if;
12413      /* Proration Changes END  */
12414 
12415      --pricing engine shd insert child lines for auth call even if no qty passed
12416      --if atleast one range is satisfied for RANGE break then only insert the chld lines
12417      -- for RANGE break bug# 2723612
12418      -- note for 4061138 continuous breaks: at this point, l_value_to has not
12419      -- been remapped with the next break's l_setup_value_from, so the between
12420      -- check may erroneously fail.  Further down the code during remapping
12421      -- the check if performed again.
12422      IF ((l_quantity BETWEEN l_setup_value_from AND l_value_to) OR  -- for POINT
12423          (l_h_price_break_type_code_tbl(i) = G_RANGE_BREAK AND l_quantity >= l_setup_value_from) OR  -- for RANGE
12424          (l_h_usage_pricing_type_tbl(i) = G_AUTHORING_TYPE) OR -- for AUTHORING call
12425          (nvl(l_net_amount_flag, 'N') <> 'N')) --[julin/4671446] all net amount breaks pass here, to be qualified during calculation
12426      THEN
12427          l_VALID_PBH_FLAG := G_YES;
12428          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12429          engine_debug('In price break detail');
12430          END IF;
12431      END IF;
12432 
12433      -- Invariably insert the line details as we need all the line details even for POINT BREAK
12434      --IF (l_VALID_PBH_FLAG = G_YES) THEN
12435          -- julin [3805113]: table of records replaced by record of tables for bulk operations
12436          /*
12437          l_line_detail_tbl(N).list_header_id      := l_h_list_header_id_tbl(i);
12438          l_line_detail_tbl(N).list_line_id        := l_h_list_line_id_tbl(i);
12439          l_line_detail_tbl(N).list_line_type_code := l_h_list_line_type_code_tbl(i);
12440          l_line_detail_tbl(N).operand_calculation_code := l_h_arithmetic_operator_tbl(i);
12441          l_line_detail_tbl(N).operand_value       := l_h_operand_tbl(i);
12442          l_line_detail_tbl(N).list_price          := l_h_list_price_tbl(i);
12443          l_line_detail_tbl(N).pricing_group_sequence := l_h_pricing_group_sequence_tbl(i);
12444          l_line_detail_tbl(N).price_break_type_code  := l_h_price_break_type_code_tbl(i);
12445          l_line_detail_tbl(N).pricing_phase_id       := l_h_pricing_phase_id_tbl(i);
12446          l_line_detail_tbl(N).modifier_level_code    := l_h_modifier_level_code_tbl(i);
12447          l_line_detail_tbl(N).benefit_qty            := l_h_benefit_qty_tbl(i);
12448          l_line_detail_tbl(N).benefit_uom_code       := l_h_benefit_uom_code_tbl(i);
12449          l_line_detail_tbl(N).list_line_no           := l_h_list_line_no_tbl(i);
12450          l_line_detail_tbl(N).accrual_flag           := l_h_accrual_flag_tbl(i);
12451          l_line_detail_tbl(N).accrual_conversion_rate:= l_h_accrual_conv_rate_tbl(i);
12452          l_line_detail_tbl(N).estim_accrual_rate     := l_h_estim_accrual_rate_tbl(i);
12453          l_line_detail_tbl(N).recurring_value        := l_h_recurring_value_tbl(i); -- block pricing
12454          l_line_attrs_tbl(N).pricing_context         := l_h_pricing_attr_context_tbl(i);
12455          l_line_attrs_tbl(N).pricing_attribute       := l_h_pricing_attribute_tbl(i);
12456 
12457          l_line_detail_tbl(N).automatic_flag         := l_h_automatic_flag_tbl(i);
12458          l_line_detail_tbl(N).override_flag          := l_h_override_flag_tbl(i);
12459          l_line_detail_tbl(N).print_on_invoice_flag  := l_h_print_on_invoice_flag_tbl(i);
12460          l_line_detail_tbl(N).formula_id             := l_h_price_by_formula_id_tbl(i);
12461          l_line_detail_tbl(N).rounding_factor        := l_h_rounding_factor_tbl(i); /* Vivek /
12462          l_line_detail_tbl(N).currency_detail_id     := l_h_currency_detail_id_tbl(i); /* Vivek /
12463          l_line_detail_tbl(N).currency_header_id     := l_h_currency_header_id_tbl(i); /* Vivek /
12464          l_line_detail_tbl(N).selling_rounding_factor := l_h_selling_round_factor_tbl(i); /* Vivek /
12465          l_line_detail_tbl(N).order_currency         := l_h_order_currency_tbl(i); /* Vivek /
12466          l_line_detail_tbl(N).pricing_effective_date := l_h_pricing_effective_date_tbl(i); /* Vivek /
12467          l_line_detail_tbl(N).base_currency_code     := l_h_base_currency_code_tbl(i); /* Vivek /
12468          */
12469          /* Proration START */
12470          if l_proration_processed = 'Y' then
12471            l_h_pricing_attr_val_from_tbl(i) := qp_number.number_to_canonical(l_setup_value_from);
12472            l_h_pricing_attr_val_to_tbl(i) := qp_number.number_to_canonical(l_value_to);
12473            if l_continuous_flag = TRUE then
12474              -- 4061138
12475              l_h_pricing_attr_val_to_tbl(i-1) := l_h_pricing_attr_val_from_tbl(i);
12476              -- here, we do the aforementioned BETWEEN check again to catch the
12477              -- corner case where it failed because l_value_to was not remapped
12478              IF l_VALID_PBH_FLAG = G_NO and i>1 THEN
12479                -- only need to recheck the POINT break condition
12480                IF (l_quantity BETWEEN l_h_pricing_attr_val_from_tbl(i-1)
12481                    AND l_h_pricing_attr_val_to_tbl(i-1))
12482                THEN
12483                  l_VALID_PBH_FLAG := G_YES;
12484                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12485                    engine_debug(l_routine||' * passed between check after continuous break remapping');
12486                  END IF;
12487                END IF;
12488              END IF;
12489            end if;
12490          else
12491            l_h_pricing_attr_val_to_tbl(i) := nvl(l_h_pricing_attr_val_to_tbl(i),l_value_to);
12492          end if;
12493          --l_line_attrs_tbl(N).pricing_attr_value_from := l_h_pricing_attr_val_from_tbl(i);
12494          --l_line_attrs_tbl(N).pricing_attr_value_to   := nvl(l_h_pricing_attr_val_to_tbl(i),l_value_to);
12495          /* Proration END */
12496 
12497          N:=N+1;
12498      --END IF;
12499          l_first_time_flag := 'N';
12500 
12501          l_l_line_detail_index_tbl(i) := GET_LINE_DETAIL_INDEX;
12502 
12503          --VALIDATE price_break_type_code
12504          IF  (l_h_price_break_type_code_tbl(i) IS NULL) OR
12505              (l_h_price_break_type_code_tbl(i) NOT IN(G_RANGE_BREAK,G_POINT_BREAK))
12506          THEN
12507            --Data error, ignore this goto the end of loop
12508            RAISE E_INVALID_PRICE_BREAK_TYPE;
12509          END IF;
12510 
12511          l_l_selected_volume_attr_tbl(i)   := l_selected_volume_attr;
12512          l_l_G_CHILD_DETAIL_TYPE_tbl(i)    := G_CHILD_DETAIL_TYPE;
12513          l_l_p_line_index_tbl(i)           := p_line_index;
12514          l_l_G_STATUS_NEW_tbl(i)           := G_STATUS_NEW;
12515          l_l_G_NOT_PROCESSED_tbl(i)        := G_NOT_PROCESSED;
12516          l_l_group_quantity_tbl(i)         := p_group_quantity;
12517          l_l_group_amount_tbl(i)           := p_group_amount;
12518          l_l_list_type_code_tbl(i)         := p_list_type_code;
12519          l_l_G_DETAIL_LEVEL_tbl(i)         := G_DETAIL_LEVEL;
12520          l_l_G_PRICING_TYPE_tbl(i)         := G_PRICING_TYPE;
12521          l_l_G_BY_PBH_tbl(i)               := G_BY_PBH;
12522          l_l_G_OPERATOR_BETWEEN_tbl(i)     := G_OPERATOR_BETWEEN;
12523          l_l_p_list_line_id_tbl(i)         := p_list_line_id;
12524          l_l_G_PBH_LINE_tbl(i)             := G_PBH_LINE;
12525          l_l_G_PROCESSED_tbl(i)            := G_PROCESSED;
12526          l_l_quantity_tbl(i)               := l_quantity;
12527          l_l_p_line_detail_index_tbl(i)    := p_line_detail_index;
12528 
12529          -- julin [3805113]: storing to be used in call_calculation_engine()
12530          G_CHILD_VALUE_FROM_TBL(l_l_line_detail_index_tbl(i)) := l_h_pricing_attr_val_from_tbl(i);
12531          G_CHILD_VALUE_TO_TBL(l_l_line_detail_index_tbl(i)) := l_h_pricing_attr_val_to_tbl(i);
12532          G_PARENT_LINE_DETAIL_INDEX_TBL(l_l_line_detail_index_tbl(i)) := l_l_p_line_detail_index_tbl(i);
12533          -- 4061138
12534          if l_continuous_flag = TRUE then
12535            G_CHILD_VALUE_TO_TBL(l_l_line_detail_index_tbl(i-1)) := l_h_pricing_attr_val_from_tbl(i);
12536          end if;
12537 
12538          l_continuous_flag := FALSE; -- reset every break
12539 END IF;--bug#6896139
12540 END LOOP;
12541 END IF; -- l_h_list_line_id_tbl.COUNT > 0
12542 
12543   --after checking each break line, if any one of the break lines satified, insert all
12544   --the break lines to qp_npreq_ldets_tmp table and qp_npreq_rltd_lines_tmp table
12545   --and do not delete the parent line
12546   -- This flag tells that either it was a range break or atleast one of the break lines was satisfied in case of point break
12547   IF (l_VALID_PBH_FLAG = G_YES) THEN
12548     --FOR J IN 1..N-1 LOOP
12549 
12550 
12551                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12552                 engine_debug('Inserting line_detail');
12553                 END IF;
12554 
12555     -- julin [3805113]: bulk insert into qp_npreq_ldets_tmp
12556     IF (l_l_p_line_index_tbl.COUNT > 0) THEN
12557       FORALL i in l_l_p_line_index_tbl.FIRST..l_l_p_line_index_tbl.LAST
12558         INSERT INTO qp_npreq_ldets_tmp
12559                 (LINE_DETAIL_INDEX,
12560                  LINE_DETAIL_TYPE_CODE,
12561                  PRICE_BREAK_TYPE_CODE,
12562                  LINE_INDEX,
12563                  CREATED_FROM_LIST_HEADER_ID,
12564                  CREATED_FROM_LIST_LINE_ID,
12565                  CREATED_FROM_LIST_LINE_TYPE,
12566                  CREATED_FROM_LIST_TYPE_CODE,
12567                  PRICING_GROUP_SEQUENCE,
12568                  PRICING_PHASE_ID,
12569                  OPERAND_CALCULATION_CODE,
12570                  OPERAND_VALUE,
12571                  PRICE_FORMULA_ID,
12572                  PRICING_STATUS_CODE,
12573                  PROCESSED_FLAG,
12574                  AUTOMATIC_FLAG,
12575                  OVERRIDE_FLAG,
12576                  PRINT_ON_INVOICE_FLAG,
12577                  MODIFIER_LEVEL_CODE,
12578                  BENEFIT_QTY,
12579                  BENEFIT_UOM_CODE,
12580                  LIST_LINE_NO,
12581                  ACCRUAL_FLAG,
12582                  ACCRUAL_CONVERSION_RATE,
12583                  ESTIM_ACCRUAL_RATE,
12584                  RECURRING_VALUE,
12585                  SELECTED_VOLUME_ATTR,
12586                  GROUP_QUANTITY,
12587                  GROUP_AMOUNT,
12588                  ROUNDING_FACTOR,
12589                  CURRENCY_DETAIL_ID,
12590                  CURRENCY_HEADER_ID,
12591                  SELLING_ROUNDING_FACTOR,
12592                  ORDER_CURRENCY,
12593                  PRICING_EFFECTIVE_DATE,
12594                  BASE_CURRENCY_CODE
12595                  )
12596         VALUES (l_l_line_detail_index_tbl(i),
12597               l_l_G_CHILD_DETAIL_TYPE_tbl(i),
12598               l_h_price_break_type_code_tbl(i),
12599               l_l_p_line_index_tbl(i),
12600               l_h_list_header_id_tbl(i),
12601               l_h_list_line_id_tbl(i),
12602               l_h_list_line_type_code_tbl(i),
12603               l_l_list_type_code_tbl(i),
12604               l_h_pricing_group_sequence_tbl(i),
12605               l_h_pricing_phase_id_tbl(i),
12606               l_h_arithmetic_operator_tbl(i),
12607               l_h_operand_tbl(i),
12608               l_h_price_by_formula_id_tbl(i),
12609               l_l_G_STATUS_NEW_tbl(i),
12610               l_l_G_NOT_PROCESSED_tbl(i),
12611               l_h_automatic_flag_tbl(i),
12612               l_h_override_flag_tbl(i),
12613               l_h_print_on_invoice_flag_tbl(i),
12614               l_h_modifier_level_code_tbl(i),
12615               l_h_BENEFIT_QTY_tbl(i),
12616               l_h_BENEFIT_UOM_CODE_tbl(i),
12617               l_h_LIST_LINE_NO_tbl(i),
12618               l_h_ACCRUAL_FLAG_tbl(i),
12619               l_h_accrual_conv_rate_tbl(i),
12620               l_h_ESTIM_ACCRUAL_RATE_tbl(i),
12621               l_h_RECURRING_VALUE_tbl(i), -- block pricing
12622               l_l_selected_volume_attr_tbl(i),
12623               l_l_group_quantity_tbl(i),
12624               l_l_group_amount_tbl(i),
12625               l_h_ROUNDING_FACTOR_tbl(i),
12626               l_h_CURRENCY_DETAIL_ID_tbl(i),
12627               l_h_CURRENCY_HEADER_ID_tbl(i),
12628               l_h_selling_round_factor_tbl(i),
12629               l_h_ORDER_CURRENCY_tbl(i),
12630               l_h_PRICING_EFFECTIVE_DATE_tbl(i),
12631               l_h_BASE_CURRENCY_CODE_tbl(i)
12632              );
12633     END IF;
12634 
12635      --set the parents PBH type. PBH can be either discount break or price list break
12636      --also set the processed_flag to indicate that this parent have been processed.
12637 
12638 /*
12639 INDX,QP_PREQ_GRP.handle_break.upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
12640 */
12641     UPDATE qp_npreq_ldets_tmp  --upd3
12642     SET processed_flag = G_PROCESSED -- indicates that this PBH is processed
12643     WHERE line_detail_index = p_line_detail_index;
12644 
12645     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12646      engine_debug('#L1');
12647     END IF;
12648 
12649     -- julin [3805113]: bulk insert into qp_npreq_line_attrs_tmp
12650     IF (l_l_p_line_index_tbl.COUNT > 0) THEN
12651       FORALL J IN l_l_p_line_index_tbl.first..l_l_p_line_index_tbl.last
12652         INSERT INTO qp_npreq_line_attrs_tmp
12653          (LINE_INDEX,
12654           LINE_DETAIL_INDEX,
12655           ATTRIBUTE_LEVEL,
12656           ATTRIBUTE_TYPE,
12657           CONTEXT,
12658           ATTRIBUTE,
12659           VALUE_FROM,
12660           VALUE_TO,
12661           SETUP_VALUE_FROM,
12662           SETUP_VALUE_TO,
12663           PROCESSED_CODE,
12664           COMPARISON_OPERATOR_TYPE_CODE,
12665           PRICING_STATUS_CODE
12666          )
12667         VALUES (l_l_p_line_index_tbl(J),
12668               l_l_line_detail_index_tbl(J),
12669               l_l_G_DETAIL_LEVEL_tbl(J),
12670               l_l_G_PRICING_TYPE_tbl(J),
12671               l_h_pricing_attr_context_tbl(J),
12672               l_h_pricing_attribute_tbl(J),
12673               l_h_pricing_attr_val_from_tbl(J),
12674               l_h_pricing_attr_val_to_tbl(J),
12675               l_h_pricing_attr_val_from_tbl(J),
12676               l_h_pricing_attr_val_to_tbl(J),
12677               l_l_G_BY_PBH_tbl(J),
12678               l_l_G_OPERATOR_BETWEEN_tbl(J),
12679               l_l_G_STATUS_NEW_tbl(J)
12680             );
12681     END IF;
12682 
12683     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12684      engine_debug('#L2');
12685     END IF;
12686 
12687     -- julin [3805113]: bulk insert into qp_npreq_rltd_lines_tmp
12688     IF (l_l_p_line_index_tbl.COUNT > 0) THEN
12689       FORALL J IN l_l_p_line_index_tbl.first..l_l_p_line_index_tbl.last
12690         INSERT INTO qp_npreq_rltd_lines_tmp
12691           (LINE_INDEX,
12692            LINE_DETAIL_INDEX,
12693            RELATIONSHIP_TYPE_CODE,
12694            RELATED_LINE_INDEX,
12695            RELATED_LINE_DETAIL_INDEX,
12696            PRICING_STATUS_CODE,
12697            PRICING_STATUS_TEXT,
12698            LIST_LINE_ID,
12699            RELATED_LIST_LINE_ID,
12700            RELATED_LIST_LINE_TYPE,
12701            OPERAND_CALCULATION_CODE,
12702            OPERAND,
12703            PRICING_GROUP_SEQUENCE,
12704            RELATIONSHIP_TYPE_DETAIL,
12705            SETUP_VALUE_FROM,
12706            SETUP_VALUE_TO,
12707            QUALIFIER_VALUE
12708           )
12709         VALUES (l_l_p_line_index_tbl(J),
12710                 l_l_p_line_detail_index_tbl(J),
12711                 l_l_G_PBH_LINE_tbl(J),
12712                 l_l_p_line_index_tbl(J),
12713                 l_l_line_detail_index_tbl(J),
12714                 l_l_G_STATUS_NEW_tbl(J),
12715                 l_l_G_PROCESSED_tbl(J),
12716                 l_l_p_list_line_id_tbl(J),
12717                 l_h_list_line_id_tbl(J),
12718                 l_h_list_line_type_code_tbl(J),
12719                 l_h_arithmetic_operator_tbl(J),
12720                 l_h_operand_tbl(J),
12721                 l_h_pricing_group_sequence_tbl(J),
12722                 l_h_price_break_type_code_tbl(J),
12723                 qp_number.canonical_to_number(l_h_pricing_attr_val_from_tbl(J)),
12724                 qp_number.canonical_to_number(l_h_pricing_attr_val_to_tbl(J)),
12725                 l_l_quantity_tbl(J));
12726     END IF;
12727 
12728      IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12729       engine_debug('#L3');
12730      END IF;
12731     --END LOOP;  --END J LOOP
12732 
12733     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12734      engine_debug('#L4');
12735     END IF;
12736   ELSE
12737     --None of the child price break statifies, hence parent is disqualified
12738    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12739    engine_debug(l_routine||' CHILD LINES ARE NOT SATISFIED');
12740 
12741    END IF;
12742    x_is_break_satisfy := FALSE;
12743 
12744   END IF;
12745 
12746     IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
12747      engine_debug('#L5');
12748     END IF;
12749 
12750   l_VALID_PBH_FLAG := 'N';
12751   l_total_item_quantity := NULL; -- shu, reset
12752   l_quantity := NULL; --shu, reset
12753 
12754 EXCEPTION
12755   WHEN E_INVALID_PRICE_BREAK_TYPE THEN
12756     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12757      engine_debug('PRICE BREAK TYPE CODE IS NULL OR INVALID');
12758     END IF;
12759       SET_STATUS_CODE(G_STATUS_OTHER_ERRORS,
12760                       '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),
12761                        P_LINE_INDEX,
12762                        NULL,
12763                       'LINES',
12764                        l_status_code,
12765                        l_status_text);
12766   WHEN E_INVALID_UOM_CONVERSION THEN-- shulin
12767    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12768   	engine_debug('INVALID UOM CONVERSION FOR TOTAL_ITEM_QUANTITY');
12769    END IF;
12770       	SET_STATUS_CODE(G_STATUS_OTHER_ERRORS,
12771                       'INVALID UOM CONVERSION FOR TOTAL_ITEM_QUANTITY : '||l_status_text,
12772                        P_LINE_INDEX,
12773                        NULL,
12774                       'LINES',
12775                        l_status_code,
12776                        l_status_text);
12777   -- Proration Start
12778   WHEN e_proration_fac_oks_error then
12779    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12780   	engine_debug('Error while calling oks api to get proration factor');
12781    END IF;
12782       	SET_STATUS_CODE(G_STATUS_OTHER_ERRORS,
12783                       'Error while calling oks api to get proration factor',
12784                        P_LINE_INDEX,
12785                        NULL,
12786                       'LINES',
12787                        l_status_code,
12788                        l_status_text);
12789 
12790   -- Proration End
12791 
12792   WHEN OTHERS THEN
12793      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12794       engine_debug('#Exception L6');
12795       engine_debug(l_routine || ' ' || SQLERRM);
12796      END IF;
12797      x_status_code := FND_API.G_RET_STS_ERROR;
12798      x_status_text := l_routine||': '||SQLERRM;
12799 
12800 END Handle_Break; --end procedure
12801 
12802 /*+------------------------------------------------------------
12803   |delete children pbh lines if the parent fails
12804   +-----------------------------------------------------------
12805 */
12806 
12807 PROCEDURE Delete_Invalid_PBH_Children(p_line_index IN PLS_INTEGER,
12808                                       p_pricing_phase_id NUMBER,
12809                                       x_status_code OUT NOCOPY VARCHAR2,
12810                                       x_status_text OUT NOCOPY VARCHAR2) AS
12811 /*
12812 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
12813 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
12814 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
12815 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
12816 */
12817 CURSOR l_check_deleted_pbh_cur(p_line_index IN PLS_INTEGER) IS
12818 SELECT line_detail_index
12819 FROM   qp_npreq_ldets_tmp
12820 WHERE  created_from_list_line_type = G_PRICE_BREAK_TYPE
12821 AND   line_index = p_line_index
12822 AND   pricing_phase_id = p_pricing_phase_id
12823 AND   pricing_status_code <> G_STATUS_NEW
12824 AND   nvl(updated_flag,'N') = 'N'; -- to not delete passed adj by the calling app since updated_flag='Y'
12825 
12826 l_routine VARCHAR2(240):='QP_PREQ_GRP.Delete_invalid_PBH_Children';
12827 BEGIN
12828   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12829   engine_debug('in Delete_Invalid_PBH_Children');
12830   END IF;
12831   FOR I IN l_check_deleted_pbh_cur(p_line_index) LOOP
12832 /*
12833 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.delete_invalid_pbh_children_upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
12834 */
12835 /*
12836 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.delete_invalid_pbh_children_sel1,-No Index Used-,NA,NA
12837 */
12838     UPDATE qp_npreq_ldets_tmp a
12839     SET PRICING_STATUS_CODE = G_DELETED_PARENT_FAILS
12840     WHERE line_detail_index IN
12841     (SELECT related_line_detail_index
12842      FROM qp_npreq_rltd_lines_tmp
12843      WHERE line_detail_index = I.line_detail_index);
12844 /*
12845 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.upd2,-No Index Used-,NA,NA
12846 */
12847     UPDATE qp_npreq_rltd_lines_tmp --upd2
12848     SET PRICING_STATUS_CODE = G_DELETED_PARENT_FAILS
12849     WHERE line_detail_index = I.line_detail_index;
12850 
12851   END LOOP;
12852 
12853 EXCEPTION
12854   WHEN OTHERS THEN
12855    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12856    engine_debug(l_routine||' '||SQLERRM);
12857    END IF;
12858    x_status_code := FND_API.G_RET_STS_ERROR;
12859    x_status_text := l_routine||': '||SQLERRM;
12860 END Delete_Invalid_PBH_Children;
12861 
12862 /*+------------------------------------------------------------
12863  |GET_ELIGIBLE_PRICE_BREAK
12864  +--------------------------------------------------------------
12865 */
12866 
12867 PROCEDURE GET_ELIGIBLE_PRICE_BREAK(p_pricing_phase_id NUMBER,
12868                                    p_line_index NUMBER := NULL,
12869                                    x_status_code OUT NOCOPY VARCHAR2,
12870                                    x_status_text OUT NOCOPY VARCHAR2)
12871 AS
12872 --Index Certificate
12873 /*
12874 Can use N2 instead of N4
12875 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
12876 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
12877 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,LINE_INDEX,3
12878 INDX,QP_PREQ_GRP.get_eligible_price_break.l_price_break_parent_cur,qp_npreq_ldets_tmp_N2,CREATED_FROM_LIST_LINE_TYPE,4
12879 */
12880 -- Do price break processing only for unprocessed lines(line_index) in a phase bug 2386934
12881 -- without the not exists clause price break processing was hapenning 2 times if there is an
12882 -- order line where in price list is not passed and there is an order line where price list was passed and
12883 -- price break processing was done for the passed price list line. Price break processing is hapenning again
12884 -- when big search is done for the line where price list not passed.
12885 -- process only the price break lines that are not processed -- Bug #2717117
12886 CURSOR l_price_break_parent_cur IS
12887      SELECT created_from_list_header_id list_header_id , created_from_list_line_id list_line_id,
12888             group_quantity ,group_amount, line_detail_index, line_index, line_quantity -- 2388011, pbh_grp_lines
12889             , created_from_list_type_code
12890      FROM   qp_npreq_ldets_tmp  a
12891      WHERE  created_from_list_line_type = G_PRICE_BREAK_TYPE
12892      AND    pricing_status_code = G_STATUS_NEW
12893      AND    pricing_phase_id = p_pricing_phase_id
12894      AND    nvl(processed_flag,G_NOT_PROCESSED) = G_NOT_PROCESSED;
12895      --AND    line_index > 0
12896      --AND    not exists (select 'X'
12897      --                   from qp_npreq_rltd_lines_tmp b
12898      --                   where a.line_index = b.line_index
12899      --                   and  a.created_from_list_line_id = b.list_line_id
12900      --                   and  b.relationship_type_code = G_PBH_LINE
12901      --                   and  nvl(b.pricing_status_text,G_NOT_PROCESSED) <> G_PROCESSED);
12902 
12903      --AND    line_index = nvl(p_line_index,line_index);
12904 
12905 l_routine VARCHAR2(240):='Routine: QP_PREQ_GRP.GET_ELIGIBLE_PRICE_BREAK';
12906 l_is_break_satisfy Boolean:=TRUE;
12907 G_LIST_HEADER_ID_TBL_G    NUMBER_TYPE;
12908 G_LIST_LINE_ID_TBL_G      NUMBER_TYPE;
12909 G_GROUP_QUANTITY_TBL_G    NUMBER_TYPE;
12910 G_GROUP_AMOUNT_TBL_G      NUMBER_TYPE;
12911 G_LINE_DETAIL_INDEX_TBL_G NUMBER_TYPE;
12912 G_LINE_INDEX_TBL_G        NUMBER_TYPE;
12913 G_LINE_QUANTITY_TBL_G     NUMBER_TYPE;
12914 G_LIST_TYPE_CODE_TBL_G    VARCHAR_TYPE;
12915 g_failed_ld_tbl_g         NUMBER_TYPE;
12916 v_count                   PLS_INTEGER := 1;
12917 l_status_code             VARCHAR2(30);
12918 l_status_text             VARCHAR2(240);
12919 
12920 nROWS CONSTANT NUMBER := 1000;
12921 E_ROUTINE_ERRORS EXCEPTION;
12922 
12923 BEGIN
12924 
12925  OPEN l_price_break_parent_cur;
12926 
12927  LOOP
12928 
12929   G_LIST_HEADER_ID_TBL_G.delete;
12930   G_LIST_LINE_ID_TBL_G.delete;
12931   G_GROUP_QUANTITY_TBL_G.delete;
12932   G_GROUP_AMOUNT_TBL_G.delete;
12933   G_LINE_DETAIL_INDEX_TBL_G.delete;
12934   G_LINE_INDEX_TBL_G.delete;
12935   G_LINE_QUANTITY_TBL_G.delete;
12936   G_LIST_TYPE_CODE_TBL_G.delete;
12937 
12938  FETCH l_price_break_parent_cur BULK COLLECT INTO
12939     G_LIST_HEADER_ID_TBL_G
12940   , G_LIST_LINE_ID_TBL_G
12941   , G_GROUP_QUANTITY_TBL_G
12942   , G_GROUP_AMOUNT_TBL_G
12943   , G_LINE_DETAIL_INDEX_TBL_G
12944   , G_LINE_INDEX_TBL_G
12945   , G_LINE_QUANTITY_TBL_G
12946   , G_LIST_TYPE_CODE_TBL_G LIMIT nROWS;
12947  EXIT WHEN G_LINE_INDEX_TBL_G.COUNT = 0;
12948 
12949  IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
12950   FOR I in G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
12951   LOOP
12952 
12953      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
12954       engine_debug('Checking break for: '||g_list_line_id_tbl_g(i) || ' Line Index : ' || g_line_index_tbl_g(i));
12955      END IF;
12956 
12957      l_is_break_satisfy := TRUE;
12958 
12959      HANDLE_BREAK(p_list_header_id    => g_list_header_id_tbl_g(i),
12960                   p_list_line_id      => g_list_line_id_tbl_g(i),
12961                   p_pricing_phase_id  => p_pricing_phase_id,
12962                   p_line_detail_index => g_line_detail_index_tbl_g(i),
12963                   p_line_index        => g_line_index_tbl_g(i),
12964                   p_group_quantity    => g_group_quantity_tbl_g(i),
12965                   --p_group_amount      => I.group_amount,
12966                   p_group_amount      => g_line_quantity_tbl_g(i), -- 2388011
12967                   p_list_type_code      => g_list_type_code_tbl_g(i),
12968                   x_is_break_satisfy  => l_is_break_satisfy,
12969                   x_status_code       => l_status_code,
12970                   x_status_text       => l_status_text);
12971 	 IF l_status_code=FND_API.G_RET_STS_ERROR THEN
12972 	   RAISE E_ROUTINE_ERRORS;
12973 	 END IF;
12974 
12975      IF(l_is_break_satisfy = FALSE) THEN
12976        v_count := v_count + 1;
12977        g_failed_ld_tbl_g(v_count) := g_line_detail_index_tbl_g(i);
12978      END IF;
12979 
12980   END LOOP;
12981  END IF;
12982    --END LOOP;
12983  END LOOP;
12984  CLOSE l_price_break_parent_cur;
12985 
12986  IF (g_failed_ld_tbl_g.count > 0) THEN
12987   FORALL i in g_failed_ld_tbl_g.first .. g_failed_ld_tbl_g.last
12988    UPDATE qp_npreq_ldets_tmp
12989    SET PRICING_STATUS_CODE = G_DELETED_PBH
12990    WHERE LINE_DETAIL_INDEX = g_failed_ld_tbl_g(i);
12991  END IF;
12992 
12993  -- if price break price lists are deleted at this point , then mark the status on the line for
12994  -- secondary or big search. Do this only for pricing phase
12995  IF (g_failed_ld_tbl_g.count > 0 and p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
12996   -- To make sure lines which did not get the price and do not have a record in qp_npreq_ldets_tmp get picked up
12997   UPDATE qp_npreq_lines_tmp a
12998   SET    processed_code = G_STS_LHS_NOT_FOUND
12999   WHERE  NOT EXISTS (SELECT 'x'
13000                 FROM   qp_npreq_ldets_tmp b
13001                 WHERE a.line_index = b.line_index
13002                 AND   b.pricing_status_code = G_STATUS_NEW
13003                 AND   b.pricing_phase_id = G_PRICE_LIST_PHASE_ID)
13004   AND   line_type_code <> G_ORDER_LEVEL;
13005 
13006  END IF;
13007 
13008 EXCEPTION
13009   WHEN E_ROUTINE_ERRORS THEN
13010     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13011       engine_debug(l_routine || ': ' ||l_status_text);
13012      END IF;
13013      x_status_code := FND_API.G_RET_STS_ERROR;
13014      x_status_text := l_routine || ': ' ||l_status_text;
13015   WHEN OTHERS THEN
13016      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13017       engine_debug(l_routine || ' ' || SQLERRM);
13018      END IF;
13019      x_status_code := FND_API.G_RET_STS_ERROR;
13020      x_status_text := l_routine||' '||SQLERRM;
13021 
13022 END Get_Eligible_Price_Break;
13023 
13024 /*+--------------------------------------------------------
13025   | PROCEDURE PERFORM_GROUPING
13026   +--------------------------------------------------------
13027 */
13028 PROCEDURE PERFORM_GROUPING(p_pricing_phase_id NUMBER,
13029                            p_line_index NUMBER := NULL,
13030                            x_status_code OUT NOCOPY VARCHAR2,
13031                            x_status_text OUT NOCOPY VARCHAR2) AS
13032 
13033 -- Header Level Quals Passed
13034 -- We need to include the records deleted in NOT= and Between Processing here , otherwise the cursor
13035 -- would not fetch any records and grouping would be successful .
13036 -- Even when deleted in NOT= and Between processing they need to go thru grouping and get deleted
13037 
13038 /*
13039 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
13040 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
13041 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
13042 
13043 INDX,QP_PREQ_GRP.Perform_Grouping.header_level_qual_attrs_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13044 
13045 */
13046 
13047 --Pricing Phase Change
13048 CURSOR header_level_qual_attrs_cur IS
13049 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) header_level_qual_attrs_cur */
13050        a.LIST_HEADER_ID,
13051        a.LIST_LINE_ID,
13052        a.LINE_INDEX,
13053        a.GROUPING_NUMBER,
13054        a.LINE_DETAIL_INDEX,
13055        COUNT(distinct CONTEXT || ATTRIBUTE || SETUP_VALUE_FROM ) NO_OF_QUALIFIERS_IN_GRP --#bug1761272
13056 FROM   qp_npreq_line_attrs_tmp a,qp_npreq_ldets_tmp b
13057 WHERE  a.PRICING_PHASE_ID = p_pricing_phase_id
13058 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13059 AND    a.QUALIFIER_TYPE = G_HEADER_QUALIFIER
13060 AND    a.LINE_DETAIL_INDEX = b.LINE_DETAIL_INDEX
13061 AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
13062 AND    a.PRICING_STATUS_CODE IN (G_STATUS_NEW,G_DELETED_EXCLUDER,G_DELETED_BETWEEN)
13063 GROUP  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER
13064 ORDER  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER ;
13065 
13066 -- Index Certificate
13067 --Pricing Phase Change
13068 /*
13069 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
13070 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
13071 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
13072 
13073 INDX,QP_PREQ_GRP.Perform_Grouping.line_level_qual_attrs_cur2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13074 
13075 */
13076 
13077 CURSOR line_level_qual_attrs_cur2 IS
13078 SELECT /*+ ORDERED USE_NL(b) index(a qp_preq_line_attrs_tmp_N5) line_level_qual_attrs_cur2 */
13079        a.LIST_HEADER_ID,
13080        a.LIST_LINE_ID,
13081        a.LINE_INDEX,
13082        a.GROUPING_NUMBER,
13083        a.LINE_DETAIL_INDEX,
13084        COUNT(distinct CONTEXT || ATTRIBUTE || SETUP_VALUE_FROM ) NO_OF_QUALIFIERS_IN_GRP --#bug1761272
13085 FROM   qp_npreq_line_attrs_tmp a,qp_npreq_ldets_tmp b
13086 WHERE  a.PRICING_PHASE_ID = p_pricing_phase_id
13087 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13088 AND    a.QUALIFIER_TYPE = G_LINE_QUALIFIER
13089 AND    a.PRICING_STATUS_CODE IN (G_STATUS_NEW,G_DELETED_EXCLUDER,G_DELETED_BETWEEN)
13090 AND    a.LINE_DETAIL_INDEX = b.LINE_DETAIL_INDEX
13091 AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
13092 GROUP  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER
13093 ORDER  BY a.LIST_HEADER_ID, a.LINE_INDEX,a.LINE_DETAIL_INDEX,a.LIST_LINE_ID,a.GROUPING_NUMBER ;
13094 
13095 -- Get the count of records where Price list is a qualifier(for secondary price lists only)
13096 /*
13097 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13098 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13099 
13100 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_pl_quals_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
13101 */
13102 CURSOR hdr_lvl_setup_pl_quals_cur(p_list_header_id  NUMBER) IS
13103 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13104 FROM   QP_QUALIFIERS a , QP_LIST_HEADERS_B b
13105 WHERE  a.LIST_HEADER_ID = p_list_header_id
13106 AND    a.list_line_id = -1
13107 AND    a.QUALIFIER_CONTEXT = 'MODLIST'
13108 AND    a.QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE4'
13109 AND    a.LIST_HEADER_ID = b.LIST_HEADER_ID
13110 AND    b.LIST_TYPE_CODE IN ('AGR', 'PRL') ;
13111 
13112 -- Get the count of records where Price list is a qualifier(for secondary price lists only)
13113 /*
13114 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13115 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_pl_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13116 
13117 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_pl_quals_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
13118 */
13119 
13120 CURSOR line_level_setup_pl_quals_cur(p_list_header_id  NUMBER,
13121 							  p_list_line_id    NUMBER) IS
13122 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13123 FROM   QP_QUALIFIERS a , QP_LIST_HEADERS_B b
13124 WHERE  a.LIST_HEADER_ID = p_list_header_id
13125 AND    a.list_line_id = p_list_line_id
13126 AND    a.QUALIFIER_CONTEXT = 'MODLIST'
13127 AND    a.QUALIFIER_ATTRIBUTE = 'QUALIFIER_ATTRIBUTE4'
13128 AND    a.LIST_HEADER_ID = b.LIST_HEADER_ID
13129 AND    b.LIST_TYPE_CODE IN ('AGR', 'PRL') ;
13130 
13131 
13132 /*
13133 INDX,QP_PREQ_GRP.perform_grouping.header_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13134 INDX,QP_PREQ_GRP.perform_grouping.header_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13135 INDX,QP_PREQ_GRP.perform_grouping.header_level_setup_quals_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13136 */
13137 CURSOR header_level_setup_quals_cur(p_list_header_id  NUMBER,
13138                                     p_grouping_number NUMBER) IS
13139 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13140 FROM   QP_QUALIFIERS a
13141 WHERE  a.LIST_HEADER_ID = p_list_header_id
13142 AND    a.list_line_id = -1
13143 AND    a.qualifier_grouping_no = p_grouping_number ;
13144 --AND    COMPARISON_OPERATOR_CODE <> 'NOT =';
13145 
13146 --Null grouping number under same list_header_id is also an 'AND' condition
13147 --for all groups that share the same list_header_id.
13148 --That is, it need to present for a modifier/price list to get selected. Hence
13149 --it need to be condisered when counting number of  qualifier in group
13150 
13151 /*
13152 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13153 */
13154 CURSOR header_setup_null_group_cur(p_list_header_id NUMBER) IS
13155 SELECT count(*)
13156 FROM   qp_qualifiers
13157 WHERE  list_header_id = p_list_header_id
13158 AND    qualifier_grouping_no = -1
13159 AND    list_line_id = -1;
13160 --AND    comparison_operator_code <> 'NOT =';
13161 
13162 --count including null and not null group
13163 /*
13164 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13165 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13166 INDX,QP_PREQ_GRP.perform_grouping.header_setup_null_group_cur2,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
13167 */
13168 CURSOR header_setup_null_group_cur2(p_list_header_id NUMBER) IS
13169 SELECT count(*)
13170 FROM   qp_qualifiers
13171 WHERE  list_header_id = p_list_header_id
13172 AND    list_line_id = -1
13173 AND    comparison_operator_code <> 'NOT =';
13174 
13175 
13176 /*
13177 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13178 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13179 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13180 */
13181 CURSOR line_setup_null_group_cur(p_list_header_id NUMBER,
13182                                  p_list_line_id   NUMBER) IS
13183 SELECT count(*)
13184 FROM   qp_qualifiers
13185 WHERE  list_header_id = p_list_header_id
13186 AND    list_line_id   = p_list_line_id
13187 AND    qualifier_grouping_no = -1;
13188 --AND    comparison_operator_code <> 'NOT =';
13189 
13190 --count including null and not null group for line level qualifier
13191 /*
13192 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13193 INDX,QP_PREQ_GRP.perform_grouping.line_setup_null_group_cur2,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13194 */
13195 CURSOR line_setup_null_group_cur2(p_list_header_id NUMBER,p_list_line_id NUMBER) IS
13196 SELECT count(*)
13197 FROM   qp_qualifiers
13198 WHERE  list_header_id = p_list_header_id
13199 AND    list_line_id = p_list_line_id;
13200 --AND    comparison_operator_code <> 'NOT =';
13201 
13202 /*
13203 -- Can use N2 instead of N6 , but a better index is needed for this query
13204 */
13205 CURSOR line_level_qual_attrs_cur(p_list_header_id NUMBER,
13206                                  p_list_line_id   NUMBER) IS
13207 SELECT LIST_HEADER_ID,
13208        LIST_LINE_ID ,
13209        LINE_INDEX,
13210        GROUPING_NUMBER,
13211        LINE_DETAIL_INDEX,
13212        COUNT(distinct CONTEXT || ATTRIBUTE || SETUP_VALUE_FROM ) NO_OF_QUALIFIERS_IN_GRP --#bug1761272
13213 FROM   qp_npreq_line_attrs_tmp
13214 WHERE  ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13215 AND    QUALIFIER_TYPE = G_LINE_QUALIFIER
13216 AND    PRICING_STATUS_CODE IN (G_STATUS_NEW,G_DELETED_EXCLUDER,G_DELETED_BETWEEN)
13217 AND    LIST_HEADER_ID = p_list_header_id
13218 AND    LIST_LINE_ID = p_list_line_id
13219 --AND    LINE_INDEX = nvl(p_line_index,LINE_INDEX)
13220 GROUP  BY LIST_HEADER_ID,LIST_LINE_ID,LINE_INDEX,LINE_DETAIL_INDEX,GROUPING_NUMBER
13221 ORDER  BY LIST_HEADER_ID,LIST_LINE_ID,LINE_INDEX,LINE_DETAIL_INDEX,GROUPING_NUMBER ;
13222 
13223 /*
13224 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13225 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_quals_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13226 INDX,QP_PREQ_GRP.perform_grouping.line_level_setup_quals_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13227 */
13228 CURSOR line_level_setup_quals_cur(p_list_header_id NUMBER,
13229                                   p_list_line_id   NUMBER,
13230                                   p_grouping_no    NUMBER) IS
13231 SELECT COUNT(*) NO_OF_QUALIFIERS_IN_GRP
13232 FROM   QP_QUALIFIERS a
13233 WHERE  a.LIST_HEADER_ID = p_list_header_id
13234 AND    a.list_line_id   = p_list_line_id
13235 AND    a.qualifier_grouping_no = p_grouping_no;
13236 --AND    COMPARISON_OPERATOR_CODE <> 'NOT =';
13237 
13238 --check if there is header_level_qual passed in at all
13239 /*
13240 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13241 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13242 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13243 INDX,QP_PREQ_GRP.perform_grouping.header_level_quals_exist_cur,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13244 -- Change
13245 */
13246 CURSOR header_level_quals_exist_cur(p_list_header_id NUMBER,p_line_index PLS_INTEGER) IS
13247 SELECT 'X'
13248 FROM   qp_npreq_line_attrs_tmp
13249 WHERE  list_header_id = p_list_header_id
13250 AND    line_index     = p_line_index
13251 AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13252 AND    QUALIFIER_TYPE = G_HEADER_QUALIFIER
13253 AND    PRICING_STATUS_CODE = G_STATUS_NEW;
13254 
13255 /*
13256 INDX,QP_PREQ_GRP.perform_grouping.line_lvl_setup_exist_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13257 INDX,QP_PREQ_GRP.perform_grouping.line_lvl_setup_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13258 */
13259 CURSOR line_lvl_setup_exist_cur(p_list_header_id NUMBER,
13260                                 p_list_line_id   NUMBER) IS
13261 SELECT 'X'
13262 FROM   qp_qualifiers
13263 WHERE  list_header_id = p_list_header_id
13264 AND    list_line_id = p_list_line_id;
13265 
13266 /*
13267 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_quals_exist_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13268 INDX,QP_PREQ_GRP.perform_grouping.hdr_lvl_setup_quals_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13269 */
13270 CURSOR hdr_lvl_setup_quals_exist_cur(p_list_header_id NUMBER) IS
13271 SELECT 'X'
13272 FROM qp_qualifiers
13273 WHERE LIST_HEADER_ID = p_list_header_id
13274 AND   list_line_id = -1;
13275 
13276 -- volume attributes that are sourced in engine , we do not want to look at these attrs when doing product grouping
13277 -- Quantity Attribute and Line Amount Attribute
13278 -- Need not actually look at Pricing attribute , because there is always a product associated with it
13279 -- When looking at pricing attributes , we need to get distinct pricing attributes as , a same pricing attribute for the
13280 -- same list line id and line index can be there in the temp table more than once. Combination of Context and Attribute's
13281 -- distinctness is what is looked for
13282 
13283 /*
13284 INDX,QP_PREQ_GRP.perform_grouping.product_level_attrs_cur,QP_RLTD_MODIFIERS_N2,TO_RLTD_MODIFIER_ID,1
13285 */
13286 
13287 /*
13288 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_PHASE_ID,1
13289 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_line_attrs_tmp_N5,ATTRIBUTE_TYPE,2
13290 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_line_attrs_tmp_N5,PRICING_STATUS_CODE,3
13291 
13292 INDX,QP_PREQ_GRP.Perform_Grouping.product_level_attrs_cur,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13293 
13294 */
13295 --Pricing Phase Change
13296 CURSOR product_level_attrs_cur IS
13297 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
13298        a.LIST_HEADER_ID , a.LIST_LINE_ID , a.LINE_INDEX,
13299        SUM(distinct(decode(a.attribute_type,G_PRODUCT_TYPE,1,0))) +
13300        COUNT(distinct(decode(a.attribute_type,G_PRICING_TYPE, a.context || ' ' || a.attribute || ' ' || setup_value_from ,NULL)))
13301 										NO_OF_PATTS_IN_GRP -- Bug No: 7129919
13302 FROM   qp_npreq_line_attrs_tmp a  , qp_npreq_ldets_tmp b
13303 WHERE  a.PRICING_PHASE_ID = p_pricing_phase_id
13304 AND    a.CONTEXT <> G_PRIC_VOLUME_CONTEXT
13305 AND    a.ATTRIBUTE_TYPE in ( G_PRICING_TYPE,G_PRODUCT_TYPE)
13306 AND    a.PRICING_STATUS_CODE = G_STATUS_NEW
13307 AND    a.LINE_DETAIL_INDEX = b.LINE_DETAIL_INDEX
13308 AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
13309 AND    NOT EXISTS (SELECT 'X'
13310 	           FROM QP_RLTD_MODIFIERS b
13311 	           WHERE a.LIST_LINE_ID = b.TO_RLTD_MODIFIER_ID
13312                    and b.rltd_modifier_grp_type <> 'COUPON') -- 5439022
13313 GROUP  BY a.LIST_HEADER_ID , a.LIST_LINE_ID,a.LINE_INDEX;
13314 
13315 /*
13316 INDX,QP_PREQ_GRP.perform_grouping.product_level_setup_attrs_cur,QP_PRICING_ATTRIBUTES_N2,LIST_LINE_ID,1
13317 INDX,QP_PREQ_GRP.perform_grouping.product_level_setup_attrs_cur,QP_PRICING_ATTRIBUTES_N2,EXCLUDER_FLAG,2
13318 */
13319 CURSOR product_level_setup_attrs_cur(p_list_line_id NUMBER) IS
13320 SELECT COUNT(*) NO_OF_PATTS_IN_GRP
13321 FROM   QP_PRICING_ATTRIBUTES a
13322 WHERE  a.LIST_LINE_ID = p_list_line_id
13323 AND    a.EXCLUDER_FLAG <> G_YES;
13324 --AND    a.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
13325 --GROUP  BY LIST_LINE_ID,ATTRIBUTE_GROUPING_NO;
13326 
13327 /*
13328 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13329 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13330 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13331 */
13332 CURSOR is_not_null_grp_exists (p_list_header_id NUMBER ,p_list_line_id NUMBER) IS
13333 SELECT 'X'
13334 FROM   qp_qualifiers
13335 WHERE  list_header_id = p_list_header_id
13336 AND    list_line_id   = p_list_line_id
13337 AND    qualifier_grouping_no <> -1;
13338 
13339 /*
13340 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13341 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13342 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13343 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13344 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
13345 -- This query is tuned for performance , expect some issues here with functionality
13346 */
13347 CURSOR is_not_null_grp_passed (p_line_index PLS_INTEGER ,p_list_line_id NUMBER,p_list_header_id NUMBER) IS
13348 SELECT 'X'
13349 FROM   qp_npreq_line_attrs_tmp
13350 WHERE  line_index = p_line_index
13351 AND    list_line_id   = p_list_line_id
13352 AND    list_header_id = p_list_header_id
13353 AND    attribute_type = G_QUALIFIER_TYPE
13354 AND    qualifier_type = G_LINE_QUALIFIER
13355 AND    pricing_status_code = G_STATUS_NEW -- Expect a bug with this join condition
13356 AND    grouping_number <> -1;
13357 
13358 /*
13359 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
13360 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists2,QP_QUALIFIERS_N1,LIST_LINE_ID,2
13361 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_exists2,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
13362 */
13363 CURSOR is_not_null_grp_exists2 (p_list_header_id NUMBER) IS
13364 SELECT 'X'
13365 FROM   qp_qualifiers
13366 WHERE  list_header_id = p_list_header_id
13367 AND    list_line_id = -1
13368 AND    qualifier_grouping_no <> -1;
13369 
13370 /*
13371 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed2,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13372 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13373 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13374 INDX,QP_PREQ_GRP.perform_grouping.is_not_null_grp_passed2,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13375 -- Change
13376 */
13377 CURSOR is_not_null_grp_passed2 (p_line_index PLS_INTEGER ,p_list_header_id NUMBER) IS
13378 SELECT 'X'
13379 FROM   qp_npreq_line_attrs_tmp
13380 WHERE  line_index = p_line_index
13381 AND    list_header_id   = p_list_header_id
13382 AND    attribute_type = G_QUALIFIER_TYPE
13383 AND    qualifier_type   = G_HEADER_QUALIFIER
13384 AND    pricing_status_code = G_STATUS_NEW -- Expect a bug with this join condition
13385 AND    grouping_number <> -1;
13386 
13387 -- This cursor would get the count of records that got deleted as part of NOT= and Between for
13388 -- header level qualifiers. This count is deleted from the actual passed in qualifier count
13389 -- Then the resulting count of qualifiers is compared with the count in the setup
13390 
13391 /*
13392 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13393 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13394 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13395 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_hdr_quals,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13396 */
13397 CURSOR get_excluded_hdr_quals(p_line_index PLS_INTEGER,
13398 						p_list_header_id PLS_INTEGER ,
13399 						p_grouping_no PLS_INTEGER) IS
13400 SELECT COUNT(*)
13401 FROM   qp_npreq_line_attrs_tmp
13402 WHERE  LINE_INDEX = p_line_index
13403 AND    LIST_HEADER_ID = p_list_header_id
13404 AND    nvl(GROUPING_NUMBER,0) = nvl(p_grouping_no,0)
13405 AND    PRICING_STATUS_CODE IN (G_DELETED_EXCLUDER , G_DELETED_BETWEEN)
13406 AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13407 AND    QUALIFIER_TYPE = G_HEADER_QUALIFIER;
13408 
13409 -- This cursor would get the count of records that got deleted as part of NOT= and Between for
13410 -- line level qualifiers
13411 
13412 /*
13413 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13414 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13415 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13416 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13417 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_line_quals,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
13418 */
13419 CURSOR get_excluded_line_quals(p_line_index PLS_INTEGER,
13420 						 p_list_header_id PLS_INTEGER ,
13421 						 p_list_line_id PLS_INTEGER,
13422                                p_grouping_no PLS_INTEGER) IS
13423 SELECT COUNT(*)
13424 FROM   qp_npreq_line_attrs_tmp
13425 WHERE  LINE_INDEX = p_line_index
13426 AND    LIST_HEADER_ID = p_list_header_id
13427 AND    LIST_LINE_ID = p_list_line_id
13428 AND    nvl(GROUPING_NUMBER,0) = nvl(p_grouping_no,0)
13429 AND    PRICING_STATUS_CODE IN (G_DELETED_EXCLUDER , G_DELETED_BETWEEN)
13430 AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
13431 AND    QUALIFIER_TYPE = G_LINE_QUALIFIER;
13432 
13433 -- This cursor would get the count of records that got deleted as part of Between for product (Volume based
13434 -- discounts like ITEM_QUANTITY and ITEM_AMOUNT)
13435 
13436 /*
13437 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
13438 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
13439 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
13440 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
13441 INDX,QP_PREQ_GRP.perform_grouping.get_excluded_prods_between,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
13442 */
13443 --[julin/4744915/5139512] modified sql
13444 CURSOR get_excluded_prods_between(p_line_index PLS_INTEGER,
13445 					 p_list_header_id PLS_INTEGER,
13446 					 p_list_line_id PLS_INTEGER) IS
13447 SELECT 1
13448 FROM DUAL
13449 WHERE EXISTS
13450 (SELECT 'x'
13451 FROM   QP_PREQ_LINE_ATTRS_TMP
13452 WHERE  LINE_INDEX = p_line_index
13453 AND    LIST_HEADER_ID = p_list_header_id
13454 AND    LIST_LINE_ID = p_list_line_id
13455 AND    PRICING_STATUS_CODE = G_DELETED_BETWEEN
13456 AND    ATTRIBUTE_TYPE = G_PRICING_TYPE);
13457 
13458 /*
13459 SELECT COUNT(*)
13460 FROM   qp_npreq_line_attrs_tmp
13461 WHERE  LINE_INDEX = p_line_index
13462 AND    LIST_HEADER_ID = p_list_header_id
13463 AND    LIST_LINE_ID = p_list_line_id
13464 AND    PRICING_STATUS_CODE = G_DELETED_BETWEEN
13465 AND    ATTRIBUTE_TYPE = G_PRICING_TYPE;
13466 */
13467 
13468 v_list_header_id 	 		NUMBER;
13469 v_list_hdr_id				NUMBER;
13470 v_list_line_id		          NUMBER;
13471 v_line_index				NUMBER;
13472 v_grouping_number			NUMBER;
13473 v_line_detail_index			NUMBER;
13474 v_no_of_qualifiers_in_grp	NUMBER;
13475 v_setup_list_header_id   	NUMBER;
13476 v_passed_line_level_quals_flag	VARCHAR2(30):= 'FALSE';
13477 v_price_list_count              NUMBER;
13478 l_dummy                         VARCHAR2(1);
13479 l_setup_null_grp_cnt         PLS_INTEGER:=0;
13480 l_null_grp_cnt               PLS_INTEGER:=0;
13481 l_diff_list_header_id        NUMBER;
13482 l_diff_line_index            PLS_INTEGER;
13483 l_diff_line_detail_index     PLS_INTEGER;
13484 l_setup_grp_count            PLS_INTEGER;
13485 l_excluded_count             PLS_INTEGER;
13486 l_null_excl_count            PLS_INTEGER;
13487 l_null_excl_count1           PLS_INTEGER;
13488 l_null_excl_count2           PLS_INTEGER;
13489 l_excl_prod_count            PLS_INTEGER;
13490 l_excl_prod_count1           PLS_INTEGER;
13491 
13492 l_setup_null_grp_cnt2        PLS_INTEGER:=0;
13493 l_null_grp_cnt2              PLS_INTEGER:=0;
13494 l_diff_list_header_id2       NUMBER;
13495 l_diff_list_line_id2         NUMBER;
13496 l_diff_line_index2           PLS_INTEGER;
13497 l_diff_line_detail_index2    PLS_INTEGER;
13498 l_setup_grp_count2           PLS_INTEGER;
13499 l_has_setup_line_lvl         BOOLEAN:= FALSE;
13500 l_has_passed_in_line_lvl     BOOLEAN:= FALSE;
13501 l_deleted_flag               BOOLEAN:= FALSE;
13502 l_passed_in_cnt              PLS_INTEGER;
13503 l_passed_in_cnt2             PLS_INTEGER;
13504 l_passed_in_cnt3             PLS_INTEGER;
13505 l_del_tbl                    PLS_INTEGER_TYPE;
13506 l_success_tbl                PLS_INTEGER_TYPE;
13507 l_ind                        BINARY_INTEGER:=0;
13508 l_success_ind                BINARY_INTEGER:=0;
13509 l_success_ind_flag           VARCHAR2(1);
13510 l_index                      BINARY_INTEGER:=0;
13511 l_status_text                VARCHAR2(240);
13512 nROWS                        CONSTANT NUMBER := 1000;
13513 E_ROUTINE_ERRORS EXCEPTION;
13514 
13515 BEGIN
13516 
13517   qp_debug_util.tstart('PERFORM_GROUPING','Perform Grouping');
13518   x_status_code := FND_API.G_RET_STS_SUCCESS;
13519 
13520   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13521   engine_debug('Grouping begin');
13522   engine_debug('Pricing phase id: ' || p_pricing_phase_id);
13523 
13524   END IF;
13525   -- Header Level Qualifiers Grouping
13526   --grouping for the records with header level qualifies
13527   -- +/- line level qualifiers.
13528 
13529   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13530     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13531     engine_debug('In grouping');
13532     END IF;
13533     FOR i IN header_level_qual_attrs_cur LOOP
13534     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13535     engine_debug('-----------------------');
13536     engine_debug('list_header_id:'||i.list_header_id);
13537     engine_debug('list_line_id:'||i.list_line_id);
13538     engine_debug('line_index:'||i.line_index);
13539     engine_debug('grouping no:'||i.grouping_number);
13540     engine_debug('line detail index:'||i.line_detail_index);
13541     engine_debug('Qualifiers in Grp:'||i.NO_OF_QUALIFIERS_IN_GRP);
13542     END IF;
13543     END LOOP;
13544   END IF;
13545 
13546 l_status_text := '#1';
13547 
13548 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
13549 
13550   FOR i IN header_level_qual_attrs_cur LOOP
13551 	v_line_index := i.LINE_INDEX;
13552      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13553      engine_debug('Header Level Qualifier Attributes Passed');
13554 
13555      END IF;
13556         --this group is an AND condition for all qualifiers under the same header
13557         IF i.GROUPING_NUMBER = -1 THEN
13558           l_null_excl_count := 0;
13559           l_null_grp_cnt := i.NO_OF_QUALIFIERS_IN_GRP;
13560           l_passed_in_cnt := i.NO_OF_QUALIFIERS_IN_GRP;
13561           l_diff_list_header_id := i.list_header_id;
13562           l_diff_line_index     := i.line_index;
13563           l_diff_line_detail_index := i.line_detail_index;
13564         ELSIF (i.list_header_id = l_diff_list_header_id)
13565           AND (i.line_index = l_diff_line_index)
13566           AND (i.line_detail_index = l_diff_line_detail_index) THEN
13567           l_passed_in_cnt := l_null_grp_cnt + i.NO_OF_QUALIFIERS_IN_GRP;
13568           NULL;
13569           --If no change then
13570           --do nothing, l_null_grp_cnt from prveious loop is still good
13571         ELSE   --list header has changed, reset the count and previous list_header_id etc
13572           l_null_grp_cnt := 0;
13573           l_null_excl_count := 0;
13574           l_diff_list_header_id    := -1975;
13575           l_diff_line_index        := -1975;
13576           l_diff_line_detail_index := -1975;
13577           l_passed_in_cnt :=  i.NO_OF_QUALIFIERS_IN_GRP;
13578         END IF;
13579 
13580      --Now working on setup grp count
13581      IF i.grouping_number = -1 THEN
13582        OPEN header_setup_null_group_cur(i.LIST_HEADER_ID);
13583        FETCH  header_setup_null_group_cur INTO l_setup_null_grp_cnt;
13584        CLOSE  header_setup_null_group_cur;
13585        l_setup_grp_count:=l_setup_null_grp_cnt;
13586      ELSE
13587        OPEN header_level_setup_quals_cur(i.LIST_HEADER_ID,i.grouping_number);
13588        FETCH  header_level_setup_quals_cur INTO l_setup_grp_count;
13589        CLOSE header_level_setup_quals_cur;
13590 
13591        OPEN header_setup_null_group_cur(i.LIST_HEADER_ID);
13592        FETCH header_setup_null_group_cur INTO l_setup_null_grp_cnt;
13593        CLOSE header_setup_null_group_cur;
13594 
13595        l_setup_grp_count:= l_setup_grp_count + l_setup_null_grp_cnt;
13596 
13597      END IF;
13598 
13599 	   -- Delete the no of quals where pl is a qualifier(for price lists only)
13600 	   OPEN  hdr_lvl_setup_pl_quals_cur(i.list_header_id);
13601 	   FETCH hdr_lvl_setup_pl_quals_cur INTO v_price_list_count;
13602 	   CLOSE hdr_lvl_setup_pl_quals_cur;
13603 
13604      l_setup_grp_count:= l_setup_grp_count -  v_price_list_count ;
13605 
13606      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13607      engine_debug('Checking header lvl qualifier count');
13608      engine_debug('Header Level Qualifiers in setup: '||l_setup_grp_count);
13609 
13610      END IF;
13611 	-- Init
13612 	l_excluded_count :=0;
13613 	--l_null_excl_count := 0;
13614 
13615 	-- Determine actual passed in count
13616 	OPEN get_excluded_hdr_quals(i.line_index,i.list_header_id,i.grouping_number);
13617 	FETCH get_excluded_hdr_quals into l_excluded_count;
13618 	CLOSE get_excluded_hdr_quals;
13619 
13620      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13621      engine_debug('Excluded quals : '||l_excluded_count || '  Grouping Number:' || i.grouping_number);
13622 
13623      END IF;
13624 	-- l_null_excl_count is applicable when NOT= , or BETWEEN is there on the NULL grouping number
13625 	-- and that gets D_EXCL or D_BETWEEN.
13626 	-- Then the actual passed in count will be other grp count(ex:grp no 1 ) + null_grp_count -
13627 	-- l_null_excl_count
13628 	-- l_excluded_count is for getting the excluded records for that particular grp no
13629 
13630 	IF (i.grouping_number = -1) THEN
13631 	 l_null_excl_count := l_excluded_count;
13632 	 l_passed_in_cnt := l_passed_in_cnt - nvl(l_excluded_count,0);
13633      ELSE
13634 	 l_passed_in_cnt := l_passed_in_cnt - nvl(l_excluded_count,0) - nvl(l_null_excl_count,0);
13635 	END IF;
13636 
13637      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13638      engine_debug('Null Excluded quals : '||l_null_excl_count);
13639      engine_debug('Header Level Qualifiers passsed in: '||l_passed_in_cnt);
13640 
13641      END IF;
13642      IF (l_passed_in_cnt >= l_setup_grp_count) THEN
13643        --l_success_ind := l_success_ind+1;
13644        --l_success_tbl(l_success_ind):= i.LINE_DETAIL_INDEX;
13645 
13646        l_deleted_flag := FALSE;
13647 	  l_success_ind_flag := G_NO;
13648        IF i.grouping_number = -1 THEN
13649           --check if this is a pure null grp
13650                OPEN is_not_null_grp_exists2(i.list_header_id);
13651                FETCH is_not_null_grp_exists2 into l_dummy;
13652                IF is_not_null_grp_exists2%FOUND THEN
13653                    --is not a pure null grp, then check if any other grp passed in
13654                    OPEN is_not_null_grp_passed2(i.line_index,i.list_header_id);
13655                    FETCH is_not_null_grp_passed2 into l_dummy;
13656                    IF is_not_null_grp_passed2%NOTFOUND THEN
13657                      -- other required grp is not passed
13658                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13659                        engine_debug('Update #7');
13660                        END IF;
13661                       l_deleted_flag := TRUE;
13662                       l_ind := l_ind+1;
13663                       l_del_tbl(l_ind):= i.LINE_DETAIL_INDEX;
13664                    END IF;
13665                    CLOSE is_not_null_grp_passed2;
13666                ELSE
13667                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13668                 engine_debug ('Successful on Header Level Quals Success Flag');
13669                 END IF;
13670 			 l_success_ind_flag := G_YES; -- Mark it as success , for line level quals evaluation
13671        		  --l_success_ind := l_success_ind+1;
13672        		  --l_success_tbl(l_success_ind):= i.LINE_DETAIL_INDEX;
13673                END IF; --is a pure null grp
13674                CLOSE is_not_null_grp_exists2;
13675        ELSE
13676         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13677         engine_debug ('Successful on Header Level Quals Success Flag Not null Group');
13678         END IF;
13679 	   l_success_ind_flag := G_YES;
13680         --l_success_ind := l_success_ind+1;
13681         --l_success_tbl(l_success_ind):= i.LINE_DETAIL_INDEX;
13682        END IF;
13683 
13684    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13685 	  engine_debug('Line Level Quals LH Id :' || i.list_header_id);
13686 	  engine_debug('Line Level Quals LL Id :' || i.list_line_id);
13687 
13688    END IF;
13689        OPEN line_lvl_setup_exist_cur(i.LIST_HEADER_ID,i.list_line_id);
13690        FETCH line_lvl_setup_exist_cur INTO l_dummy;
13691        l_has_setup_line_lvl := FALSE;
13692        l_has_passed_in_line_lvl := FALSE;
13693 
13694        IF line_lvl_setup_exist_cur%FOUND AND l_deleted_flag = FALSE THEN      --has line level qualifiers
13695   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13696 		engine_debug('Has Line Level Qualifiers');
13697   END IF;
13698           l_has_setup_line_lvl := TRUE;
13699           FOR k IN line_level_qual_attrs_cur(i.LIST_HEADER_ID,i.list_line_id) LOOP
13700             l_has_passed_in_line_lvl := TRUE;
13701             IF k.GROUPING_NUMBER = -1 THEN
13702               l_null_grp_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
13703               l_null_excl_count1 := 0;
13704               l_passed_in_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
13705               l_diff_list_header_id2 := k.list_header_id;
13706               l_diff_list_line_id2   := k.list_line_id;
13707               l_diff_line_index2     := k.line_index;
13708               l_diff_line_detail_index2 := k.line_detail_index;
13709             ELSIF (k.list_header_id = l_diff_list_header_id2)
13710                   AND (k.list_line_id = l_diff_list_line_id2)
13711                   AND (k.line_index = l_diff_line_index2)
13712                   AND (k.line_detail_index = l_diff_line_detail_index2) THEN
13713                   NULL;
13714                   l_passed_in_cnt2 :=  k.NO_OF_QUALIFIERS_IN_GRP + l_null_grp_cnt2;
13715             ELSE
13716               l_passed_in_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
13717               l_null_grp_cnt2:= 0;
13718               l_null_excl_count1 := 0;
13719               l_diff_list_header_id2 := -1975;
13720               l_diff_list_line_id2   := -1975;
13721               l_diff_line_index2     := -1975;
13722               l_diff_line_detail_index2 := -1975;
13723             END IF;
13724 
13725         IF k.grouping_number = -1 THEN
13726           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
13727           FETCH line_setup_null_group_cur INTO l_setup_grp_count2;
13728           CLOSE line_setup_null_group_cur;
13729           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13730           engine_debug('Setup grp null cnt: '||l_setup_grp_count2);
13731           END IF;
13732         ELSE
13733           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
13734           FETCH line_setup_null_group_cur INTO l_setup_null_grp_cnt2;
13735           CLOSE line_setup_null_group_cur;
13736 
13737           OPEN line_level_setup_quals_cur(K.list_header_id,K.list_line_id,K.grouping_number);
13738           FETCH line_level_setup_quals_cur INTO l_setup_grp_count2;
13739           CLOSE line_level_setup_quals_cur;
13740 
13741           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13742           engine_debug('setup grp cnt: '||l_setup_grp_count2);
13743           END IF;
13744           l_setup_grp_count2 := l_setup_grp_count2 + l_setup_null_grp_cnt2;
13745         END IF;
13746 
13747 	      -- Delete the no of quals where pl is a qualifier(for price lists only)
13748 	      OPEN  line_level_setup_pl_quals_cur(K.list_header_id,K.list_line_id);
13749 	      FETCH line_level_setup_pl_quals_cur INTO v_price_list_count;
13750 	      CLOSE line_level_setup_pl_quals_cur;
13751 
13752         l_setup_grp_count2 := l_setup_grp_count2 - v_price_list_count;
13753 
13754          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13755          engine_debug('Null Line Level Quals count in Setup: '||l_setup_null_grp_cnt2);
13756          engine_debug('Passed in null line level quals count: '|| l_null_grp_cnt2);
13757 
13758          END IF;
13759 	    -- Init
13760 	    l_excluded_count :=0;
13761 	    --l_null_excl_count1 := 0;
13762 
13763 	    -- Determine actual passed in count
13764 	    OPEN  get_excluded_line_quals(k.line_index,k.list_header_id,k.list_line_id,k.grouping_number);
13765 	    FETCH get_excluded_line_quals into l_excluded_count;
13766 	    CLOSE get_excluded_line_quals;
13767 
13768          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13769          engine_debug('Excluded Line quals : '||l_excluded_count);
13770 
13771          END IF;
13772 	    IF (i.grouping_number = -1) THEN
13773 	     l_null_excl_count1 := l_excluded_count;
13774 	     l_passed_in_cnt2 := l_passed_in_cnt2 - nvl(l_excluded_count,0);
13775             ELSE
13776 	     l_passed_in_cnt2 := l_passed_in_cnt2 - nvl(l_excluded_count,0) - nvl(l_null_excl_count1,0);
13777 	    END IF;
13778 
13779          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13780          engine_debug('Passed in line lvl count: '||l_passed_in_cnt2);
13781          engine_debug('Line Level Quals count in Setup: '||l_setup_grp_count2);
13782 
13783          END IF;
13784          IF(l_passed_in_cnt2 >= l_setup_grp_count2) THEN
13785              IF k.grouping_number = -1 THEN
13786                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13787                engine_debug('Line Level Quals #123');
13788                END IF;
13789                 --check if this is a pure null grp, if no, and other
13790                OPEN is_not_null_grp_exists(k.list_header_id,k.list_line_id);
13791                FETCH is_not_null_grp_exists into l_dummy;
13792                IF is_not_null_grp_exists%FOUND THEN
13793                    --is not a pure null grp, then check if any other grp passed in
13794                    OPEN is_not_null_grp_passed(k.line_index,k.list_line_id,k.list_header_id);
13795                    FETCH is_not_null_grp_passed into l_dummy;
13796                    IF is_not_null_grp_passed%NOTFOUND THEN
13797                      --no other required grp passed
13798                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13799                        engine_debug('Update #7');
13800                        END IF;
13801                       l_ind := l_ind+1;
13802                       l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
13803                    END IF;
13804                    CLOSE is_not_null_grp_passed;
13805                ELSE
13806                  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13807                  engine_debug('Pure Null Line Level Quals #124');
13808                  END IF;
13809    	            l_success_ind := l_success_ind+1;
13810                  l_success_tbl(l_success_ind):= i.line_detail_index;
13811                END IF; --is a pure null grp
13812                CLOSE is_not_null_grp_exists;
13813              ELSE  -- not a null group approve the line
13814        		l_success_ind := l_success_ind+1;
13815        	     l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
13816              END IF;
13817          ELSE -- Count did not match
13818              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13819              engine_debug ('Not successful on the Line Level Qualifiers Count Mismatch: ' || k.LIST_LINE_ID);
13820              engine_debug('The whole List Line is getting deleted');
13821              engine_debug('Update #1');
13822              END IF;
13823              l_ind := l_ind+1;
13824              l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
13825          END IF;
13826       END LOOP; --end K loop
13827        --we need to delete lists that has line lvl qualifier but not passed in.
13828        IF (l_has_passed_in_line_lvl = FALSE) THEN
13829             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13830             engine_debug ('Fails in line lvl bcause exists in Setup but Not Passed');
13831             engine_debug('List header id that has line level qualifier:'|| i.list_header_id);
13832             engine_debug('The whole List Line is getting deleted#1');
13833             engine_debug('Update #2');
13834             END IF;
13835             l_ind := l_ind+1;
13836             l_del_tbl(l_ind):= i.LINE_DETAIL_INDEX;
13837        END IF;
13838     ELSE
13839      -- No line level qualifiers exist , but header level quals satisfied
13840      IF(l_success_ind_flag = G_YES) THEN
13841        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13842        engine_debug('Header Level Quals satisfied and no line level quals exist');
13843        END IF;
13844    	  l_success_ind := l_success_ind+1;
13845        l_success_tbl(l_success_ind):= i.line_detail_index;
13846      END IF;
13847     END IF;  -- end if for line_lvl_setup_exist_cur%FOUND
13848     CLOSE line_lvl_setup_exist_cur;
13849   ELSE  --else for if (i.NO_OF_QUALIFIER_IN_GRP + l_null_grp_cnt >= l_setup_grp_count)
13850      --grouping count did not match for header level qualifier
13851      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13852      engine_debug('Header lvl qualifier doesn''t match');
13853      engine_debug('Update #3');
13854      END IF;
13855      l_ind := l_ind+1;
13856      l_del_tbl(l_ind):= i.LINE_DETAIL_INDEX;
13857   END IF; --end if for if (i.NO_OF_QUALIFIER_IN_GRP + l_null_grp_cnt >= l_setup_grp_count)
13858  END LOOP; --end i loop
13859  l_status_text := '#2';
13860 
13861  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13862  engine_debug('Deleted Line Details in Table');
13863  END IF;
13864  FOR i in 1..l_del_tbl.count
13865  LOOP
13866    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13867    engine_debug('Line Detail Index: ' || l_del_tbl(i));
13868    END IF;
13869  END LOOP;
13870 
13871  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13872  engine_debug('Successful Line Details in Table');
13873  END IF;
13874  FOR i in 1..l_success_tbl.count
13875  LOOP
13876    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13877    engine_debug('Line Detail Index: ' || l_success_tbl(i));
13878    END IF;
13879  END LOOP;
13880 
13881  IF l_del_tbl.FIRST IS NOT NULL THEN
13882    FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
13883 /*
13884 INDX,QP_PREQ_GRP.perform_grouping.upd1,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13885 */
13886    UPDATE qp_npreq_ldets_tmp --upd1
13887    SET PRICING_STATUS_CODE = G_DELETED_GRP,
13888        PRICING_STATUS_TEXT = 'Deleted in header+/-line grouping'
13889    WHERE line_detail_index = l_del_tbl(i);
13890 
13891    /* FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
13892    UPDATE qp_npreq_line_attrs_tmp
13893    SET    PRICING_STATUS_CODE = G_DELETED_GRP,
13894           PRICING_STATUS_TEXT = 'Deleted in header +/- line grouping'
13895    WHERE line_detail_index = l_del_tbl(i)
13896    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
13897 
13898  END IF;
13899 
13900  IF l_success_tbl.FIRST IS NOT NULL THEN
13901    FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
13902 /*
13903 INDX,QP_PREQ_GRP.perform_grouping.upd2,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
13904 */
13905    UPDATE qp_npreq_ldets_tmp --upd2
13906    SET PRICING_STATUS_CODE = G_STATUS_NEW
13907    WHERE line_detail_index = l_success_tbl(i);
13908 
13909    /* FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
13910    UPDATE qp_npreq_line_attrs_tmp
13911    SET    PRICING_STATUS_CODE = G_STATUS_NEW
13912    WHERE line_detail_index = l_success_tbl(i)
13913    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
13914 
13915  END IF;
13916 
13917  l_del_tbl.delete;
13918  l_success_tbl.delete;
13919  l_ind:=0;
13920  l_success_ind:=0;
13921  l_status_text :='#3';
13922 
13923   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13924     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13925     engine_debug('In Pure Line Level grouping');
13926     END IF;
13927     FOR k IN line_level_qual_attrs_cur2 LOOP
13928     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
13929     engine_debug('-----------------------');
13930     engine_debug('list_header_id:'||k.list_header_id);
13931     engine_debug('list_line_id:'||k.list_line_id);
13932     engine_debug('line_index:'||k.line_index);
13933     engine_debug('grouping no:'||k.grouping_number);
13934     engine_debug('line detail index:'||k.line_detail_index);
13935     engine_debug('Qualifiers in Grp:'||k.NO_OF_QUALIFIERS_IN_GRP);
13936     END IF;
13937     END LOOP;
13938   END IF;
13939 
13940   --grouping for the records with ONLY line level qualifies
13941   FOR k in line_level_qual_attrs_cur2 LOOP
13942       IF k.GROUPING_NUMBER = -1 THEN
13943               l_null_grp_cnt2 := k.NO_OF_QUALIFIERS_IN_GRP;
13944               l_null_excl_count2 := 0;
13945               l_passed_in_cnt3 :=  k.NO_OF_QUALIFIERS_IN_GRP;
13946               l_diff_list_header_id2 := k.list_header_id;
13947               l_diff_list_line_id2   := k.list_line_id;
13948               l_diff_line_index2     := k.line_index;
13949               l_diff_line_detail_index2 := k.line_detail_index;
13950             ELSIF (k.list_header_id = l_diff_list_header_id2)
13951                   AND (k.list_line_id = l_diff_list_line_id2)
13952                   AND (k.line_index = l_diff_line_index2)
13953                   AND (k.line_detail_index = l_diff_line_detail_index2) THEN
13954                   NULL;
13955                   --if l_null_grp_cnt2 set by previous loop then add that
13956                   l_passed_in_cnt3 := k.NO_OF_QUALIFIERS_IN_GRP + l_null_grp_cnt2;
13957             ELSE
13958               l_null_grp_cnt2:= 0;
13959               l_null_excl_count2 := 0;
13960               l_diff_list_header_id2 := -1976;
13961               l_diff_list_line_id2   := -1976;
13962               l_diff_line_index2     := -1976;
13963               l_diff_line_detail_index2 := -1976;
13964               l_passed_in_cnt3 := k.NO_OF_QUALIFIERS_IN_GRP;
13965             END IF;
13966 
13967         --now working on setup grouping
13968          IF k.grouping_number = -1 THEN
13969           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
13970           FETCH line_setup_null_group_cur INTO l_setup_grp_count2;
13971           CLOSE line_setup_null_group_cur;
13972         ELSE
13973           OPEN line_setup_null_group_cur(K.list_header_id,K.list_line_id);
13974           FETCH line_setup_null_group_cur INTO l_setup_null_grp_cnt2;
13975           CLOSE line_setup_null_group_cur;
13976 
13977           OPEN line_level_setup_quals_cur(K.list_header_id,K.list_line_id,K.grouping_number);
13978           FETCH line_level_setup_quals_cur INTO l_setup_grp_count2;
13979           CLOSE line_level_setup_quals_cur;
13980 
13981           l_setup_grp_count2 := l_setup_grp_count2 + l_setup_null_grp_cnt2;
13982         END IF;
13983 
13984 	      -- Delete the no of quals where pl is a qualifier(for price lists only)
13985 	      OPEN  line_level_setup_pl_quals_cur(K.list_header_id,K.list_line_id);
13986 	      FETCH line_level_setup_pl_quals_cur INTO v_price_list_count;
13987 	      CLOSE line_level_setup_pl_quals_cur;
13988 
13989         l_setup_grp_count2 := l_setup_grp_count2 - v_price_list_count;
13990 
13991 	   -- Init
13992 	   l_excluded_count :=0;
13993 	   --l_null_excl_count2 := 0;
13994 
13995 	   -- Determine actual passed in count
13996 	   OPEN get_excluded_line_quals(k.line_index,k.list_header_id,k.list_line_id,k.grouping_number);
13997 	   FETCH get_excluded_line_quals into l_excluded_count;
13998 	   CLOSE get_excluded_line_quals;
13999 
14000         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14001         engine_debug('Excluded Pure Line Level quals : '||l_excluded_count);
14002 
14003         END IF;
14004 	   -- l_null_excl_count is applicable when NOT= is there on the NULL grouping number and that gets D_EXCL
14005 	   -- Then the actual passed in count will be other grp count(ex:grp no 1 ) +
14006 	   -- null_grp_count - l_null_excl_count
14007 
14008 	   IF (k.grouping_number = -1 ) THEN
14009 	    l_null_excl_count2 := l_excluded_count;
14010 	    l_passed_in_cnt3 := l_passed_in_cnt3 - nvl(l_excluded_count,0);
14011         ELSE
14012 	    l_passed_in_cnt3 := l_passed_in_cnt3 - nvl(l_excluded_count,0) - nvl(l_null_excl_count2,0);
14013 	   END IF;
14014 
14015          IF(l_passed_in_cnt3 >= l_setup_grp_count2) THEN
14016 
14017              --check if this is a pure null grp, if no, and other
14018              --not null grps are not passed then delete them.
14019              --if yes, then approve this line (do nothing).
14020 
14021              IF k.grouping_number = -1 THEN
14022                OPEN is_not_null_grp_exists(k.list_header_id,k.list_line_id);
14023                FETCH is_not_null_grp_exists into l_dummy;
14024                IF is_not_null_grp_exists%FOUND THEN
14025                    --is not a pure null grp, then check if any other grp passed in
14026                    OPEN is_not_null_grp_passed(k.line_index,k.list_line_id,k.list_header_id);
14027                    FETCH is_not_null_grp_passed into l_dummy;
14028                    IF is_not_null_grp_passed%NOTFOUND THEN
14029                      --no other required grp passed
14030                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14031                        engine_debug('Update #6');
14032                        END IF;
14033                        l_ind := l_ind+1;
14034                        l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14035                    END IF;
14036                    CLOSE is_not_null_grp_passed;
14037                ELSE
14038        		    l_success_ind := l_success_ind+1;
14039        	         l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14040                END IF;
14041                CLOSE is_not_null_grp_exists;
14042              ELSE
14043                    OPEN hdr_lvl_setup_quals_exist_cur(k.list_header_id);
14044                    FETCH hdr_lvl_setup_quals_exist_cur into l_dummy;
14045                    IF hdr_lvl_setup_quals_exist_cur%FOUND THEN
14046                      OPEN header_level_quals_exist_cur(K.list_header_id,K.line_index);
14047                      FETCH  header_level_quals_exist_cur INTO l_dummy;
14048                      --If in setup it has header level qualifier, it must fullfill the header grouping first
14049                      --if this is the case, the pricing_status_code should have been updated by
14050                      --previous header_level +/- line level check operation. It didn't get updated
14051                      --that means no header level qualifier has passed in, hence we need to eliminate this
14052                      --list line
14053                      IF header_level_quals_exist_cur%NOTFOUND THEN
14054                        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14055                        engine_debug('--------------------------------------');
14056                        engine_debug('Deleting list line id:'||K.list_line_id);
14057                        engine_debug('Update #4');
14058                        END IF;
14059                        l_ind := l_ind+1;
14060                        l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14061                      ELSE
14062        		        l_success_ind := l_success_ind+1;
14063        	             l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14064                      END IF;
14065                      CLOSE  header_level_quals_exist_cur;
14066                    ELSE
14067        		      l_success_ind := l_success_ind+1;
14068        	           l_success_tbl(l_success_ind):= k.LINE_DETAIL_INDEX;
14069                    END IF;
14070                  CLOSE hdr_lvl_setup_quals_exist_cur;
14071              END IF;
14072 
14073          ELSE -- Count did not match
14074              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14075              engine_debug ('Not successful on the Line Level Qualifiers Count Mismatch: ' || k.LIST_LINE_ID);
14076              engine_debug('The whole List Line is getting deleted');
14077                engine_debug('Update #5');
14078 
14079              END IF;
14080               l_ind := l_ind+1;
14081               l_del_tbl(l_ind):= k.LINE_DETAIL_INDEX;
14082 
14083          END IF;
14084       END LOOP; --end K loop
14085  l_status_text := '#4';
14086 
14087  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14088  engine_debug('Deleted Line Details in Pure Line Grouping Table');
14089  END IF;
14090  FOR i in 1..l_del_tbl.count
14091  LOOP
14092    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14093    engine_debug('Line Detail Index: ' || l_del_tbl(i));
14094    END IF;
14095  END LOOP;
14096 
14097  IF l_del_tbl.FIRST IS NOT NULL THEN
14098    FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
14099 /*
14100 INDX,QP_PREQ_GRP.perform_grouping.upd3,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
14101 */
14102    UPDATE qp_npreq_ldets_tmp --upd3
14103    SET PRICING_STATUS_CODE = G_DELETED_GRP,
14104        PRICING_STATUS_TEXT = 'Deleted in pure line grouping'
14105    WHERE line_detail_index = l_del_tbl(i);
14106 
14107    /* FORALL i in l_del_tbl.FIRST..l_del_tbl.LAST
14108    UPDATE qp_npreq_line_attrs_tmp
14109    SET    PRICING_STATUS_CODE = G_DELETED_GRP,
14110           PRICING_STATUS_TEXT = 'Deleted in pure line grouping'
14111    WHERE line_detail_index = l_del_tbl(i)
14112    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
14113 
14114  END IF;
14115 
14116  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14117  engine_debug('Successful Line Details in Pure Line Grouping Table');
14118  END IF;
14119  FOR i in 1..l_success_tbl.count
14120  LOOP
14121    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14122    engine_debug('Line Detail Index: ' || l_success_tbl(i));
14123    END IF;
14124  END LOOP;
14125 
14126  IF l_success_tbl.FIRST IS NOT NULL THEN
14127    FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
14128 /*
14129 INDX,QP_PREQ_GRP.perform_grouping.upd4,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
14130 */
14131    UPDATE qp_npreq_ldets_tmp --upd4
14132    SET PRICING_STATUS_CODE = G_STATUS_NEW
14133    WHERE line_detail_index = l_success_tbl(i);
14134 
14135    /* FORALL i in l_success_tbl.FIRST..l_success_tbl.LAST
14136    UPDATE qp_npreq_line_attrs_tmp
14137    SET    PRICING_STATUS_CODE = G_STATUS_NEW
14138    WHERE line_detail_index = l_success_tbl(i)
14139    AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE; */
14140 
14141  END IF;
14142 
14143  l_del_tbl.delete;
14144  l_success_tbl.delete;
14145  l_ind:=0;
14146  l_success_ind:=0;
14147 
14148 END IF;
14149 
14150  l_status_text := '#5';
14151   -- product grouping
14152 
14153 OPEN product_level_attrs_cur;
14154 
14155 LOOP
14156   G_LIST_HEADER_ID_TBL_G.delete;
14157   G_LIST_LINE_ID_TBL_G.delete;
14158   G_LINE_INDEX_TBL_G.delete;
14159   G_NO_OF_PATTS_IN_GRP_TBL_G.delete;
14160 
14161 FETCH product_level_attrs_cur BULK COLLECT INTO
14162     G_LIST_HEADER_ID_TBL_G
14163   , G_LIST_LINE_ID_TBL_G
14164   , G_LINE_INDEX_TBL_G
14165   , G_NO_OF_PATTS_IN_GRP_TBL_G LIMIT nROWS;
14166 EXIT WHEN G_LINE_INDEX_TBL_G.COUNT = 0;
14167 
14168  IF (G_LINE_INDEX_TBL_G.COUNT > 0) THEN
14169   FOR I in G_LINE_INDEX_TBL_G.FIRST .. G_LINE_INDEX_TBL_G.LAST
14170   LOOP
14171    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14172    engine_debug('Went into product grouping');
14173 
14174    END IF;
14175    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));
14176    FETCH get_excluded_prods_between INTO l_excl_prod_count;
14177    CLOSE get_excluded_prods_between;
14178 
14179    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14180    engine_debug('Product list line id:'||G_LIST_LINE_ID_TBL_G(I));
14181    engine_debug('Product Between Exclude Count:'||l_excl_prod_count);
14182 
14183    END IF;
14184    -- If this line already got deleted as part of between , then delete this line
14185    IF (l_excl_prod_count > 0 ) THEN
14186        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14187        engine_debug('Getting Deleted in Product Grouping');
14188 
14189        END IF;
14190 /*
14191 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
14192 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
14193 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
14194 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
14195 INDX,QP_PREQ_GRP.perform_grouping.upd5,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
14196 */
14197        UPDATE qp_npreq_ldets_tmp --upd5
14198        SET PRICING_STATUS_CODE = G_DELETED_GRP
14199        WHERE PRICING_PHASE_ID = p_pricing_phase_id
14200        AND   PRICING_STATUS_CODE = G_STATUS_NEW
14201        AND   CREATED_FROM_LIST_HEADER_ID = G_LIST_HEADER_ID_TBL_G(I)
14202        AND   CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14203        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I);
14204 
14205        /* UPDATE qp_npreq_ldets_tmp
14206        SET PRICING_STATUS_CODE = G_DELETED_GRP
14207        WHERE CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14208        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14209 
14210        /* UPDATE qp_npreq_line_attrs_tmp
14211        SET PRICING_STATUS_CODE = G_DELETED_GRP
14212        WHERE LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14213        AND LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14214 
14215    ELSE
14216     FOR j IN product_level_setup_attrs_cur(G_LIST_LINE_ID_TBL_G(I))
14217     LOOP
14218 
14219      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14220      engine_debug('product level attrs no '||g_no_of_patts_in_grp_tbl_g(I));
14221      engine_debug('product level set up attrs no '||j.no_of_patts_in_grp);
14222 
14223      END IF;
14224      IF (G_NO_OF_PATTS_IN_GRP_TBL_G(I) = j.NO_OF_PATTS_IN_GRP) THEN
14225        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14226        engine_debug ('Successful on the product grouping: ' || G_LIST_LINE_ID_TBL_G(I));
14227        END IF;
14228      ELSE
14229        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14230        engine_debug('Getting Deleted in Product Grouping');
14231        END IF;
14232 /*
14233 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
14234 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
14235 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
14236 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_HEADER_ID,4
14237 INDX,QP_PREQ_GRP.perform_grouping.upd6,qp_npreq_ldets_tmp_N1,CREATED_FROM_LIST_LINE_ID,5
14238 */
14239        UPDATE qp_npreq_ldets_tmp --upd6
14240        SET PRICING_STATUS_CODE = G_DELETED_GRP
14241        WHERE PRICING_PHASE_ID = p_pricing_phase_id
14242        AND   PRICING_STATUS_CODE = G_STATUS_NEW
14243        AND   CREATED_FROM_LIST_HEADER_ID = G_LIST_HEADER_ID_TBL_G(I)
14244        AND   CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14245        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I);
14246 
14247        /* UPDATE qp_npreq_ldets_tmp
14248        SET PRICING_STATUS_CODE = G_DELETED_GRP
14249        WHERE CREATED_FROM_LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14250        AND   LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14251 
14252        /* UPDATE qp_npreq_line_attrs_tmp
14253        SET PRICING_STATUS_CODE = G_DELETED_GRP
14254        WHERE LIST_LINE_ID = G_LIST_LINE_ID_TBL_G(I)
14255        AND LINE_INDEX = G_LINE_INDEX_TBL_G(I); */
14256 
14257      END IF;
14258     END LOOP;
14259    END IF;
14260   END LOOP;
14261  END IF;
14262 
14263 END LOOP;
14264 CLOSE product_level_attrs_cur;
14265 
14266   -- Update all the records with pricing_status_code= 'T' to 'N'
14267   /* UPDATE qp_npreq_line_attrs_tmp
14268   SET PRICING_STATUS_CODE = G_STATUS_NEW
14269   WHERE PRICING_STATUS_CODE = G_STATUS_NEW
14270   AND   LINE_INDEX = nvl(p_line_index,LINE_INDEX);
14271 
14272   --Update all the line details records with pricing_status_code = 'T' to 'N'
14273   UPDATE qp_npreq_ldets_tmp a
14274   SET PRICING_STATUS_CODE = G_STATUS_NEW
14275   WHERE   PRICING_PHASE_ID = p_pricing_phase_id
14276   AND PRICING_STATUS_CODE = G_STATUS_NEW
14277   AND   LINE_INDEX = nvl(p_line_index,LINE_INDEX); */
14278   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14279   engine_debug('grouping ends');
14280   END IF;
14281   qp_debug_util.tstop('PERFORM_GROUPING');
14282 EXCEPTION
14283 WHEN OTHERS THEN
14284   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14285   engine_debug(SQLERRM);
14286   END IF;
14287   x_status_code:= FND_API.G_RET_STS_ERROR;
14288   x_status_text:= 'In perform grouping '||SQLERRM||' '||l_status_text;
14289 END PERFORM_GROUPING;
14290 
14291 /*+--------------------------------------------------------
14292   | PROCEDURE Update_Price_List_Information
14293   +--------------------------------------------------------
14294 */
14295 
14296 PROCEDURE Update_Price_List_Information(
14297   p_freeze_override_flag IN VARCHAR2,
14298   x_status_code OUT NOCOPY VARCHAR2,
14299   x_status_text OUT NOCOPY VARCHAR2) AS
14300 
14301   l_routine VARCHAR2(240):='QP_PREQ_GRP.Update_Price_List_Information';
14302 
14303 BEGIN
14304 
14305 --Update The Request Lines That Have
14306 --No List Header Passed , so that big search can look at it
14307 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14308   engine_debug ('In Procedure Update_Price_List_Information...');
14309 END IF;
14310 /*
14311 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel1,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
14312 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel1,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
14313 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel1,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
14314 */
14315 IF (G_PRICE_PHASE_FLAG = TRUE ) THEN -- Ravi
14316 UPDATE /*+ dynamic_sampling(1) */ qp_npreq_lines_tmp a
14317 SET    processed_code = G_NO_LIST_PASSED,
14318        validated_flag = G_NO
14319 WHERE  not exists (SELECT 'x'
14320                    FROM qp_npreq_line_attrs_tmp b
14321                    WHERE a.line_index = b.line_index
14322 		   AND   b.context in (G_LIST_HEADER_CONTEXT,G_LIST_LINE_CONTEXT)
14323 		   AND   b.attribute_type = G_QUALIFIER_TYPE
14324 		   AND   b.pricing_status_code  = G_STATUS_UNCHANGED)
14325 AND   nvl(PROCESSED_CODE,'X') <> G_BY_ENGINE
14326 AND  (price_flag = G_YES OR --[julin/4708044]
14327       (price_flag = G_PHASE AND p_freeze_override_flag = G_YES));
14328 END IF;
14329 
14330 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14331   engine_debug ('after update1...');
14332 END IF;
14333 
14334 /*
14335 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_upd3,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
14336 */
14337 /*
14338 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
14339 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14340 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14341 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14342 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel2,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14343 */
14344 
14345 IF (G_PRICE_PHASE_FLAG = TRUE ) THEN -- Ravi
14346 
14347 --[julin/pricebook] added hint
14348 --[julin/5223502] price_list_header_id directly passed in via lines_tmp has precedence over sourced value
14349 UPDATE /*+ dynamic_sampling(1) */ qp_npreq_lines_tmp  a
14350 SET  (price_list_header_id,validated_flag)  =
14351 (SELECT /*+ index(b QP_PREQ_LINE_ATTRS_TMP_N2) */ distinct
14352         CASE WHEN (a.PRICE_LIST_HEADER_ID < 0) THEN qp_number.canonical_to_number(value_from)
14353              ELSE a.PRICE_LIST_HEADER_ID
14354         END price_list_header_id,
14355         validated_flag
14356  FROM qp_npreq_line_attrs_tmp b
14357  WHERE a.line_index = b.line_index
14358  AND context = G_LIST_HEADER_CONTEXT
14359  AND attribute = G_PRICELIST_ATTRIBUTE
14360  AND attribute_type = G_QUALIFIER_TYPE
14361  AND pricing_status_code = G_STATUS_UNCHANGED); -- bug 3668963 - commented following 2 lines
14362  --AND a.PRICE_LIST_HEADER_ID < 0 )
14363 --WHERE a.PRICE_LIST_HEADER_ID < 0;
14364 END IF;
14365 
14366 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14367 engine_debug ('after update2');
14368 END IF;
14369 
14370 -- To clear the unit_price if the call is from public API
14371 IF (G_PUBLIC_API_CALL_FLAG = G_YES) THEN
14372  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14373  engine_debug('Call from Public API , Update_Price_List_Information');
14374  END IF;
14375  IF (G_PRICE_PHASE_FLAG = TRUE AND G_MANUAL_ADJUSTMENTS_CALL_FLAG = G_NO) THEN
14376   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14377   engine_debug('Trying to Update Unit Price To Null');
14378   END IF;
14379   UPDATE qp_npreq_lines_tmp a
14380   SET    unit_price = NULL
14381   WHERE (price_flag = G_YES
14382             OR
14383        (price_flag = G_PHASE
14384        AND p_freeze_override_flag = G_YES))
14385   AND   line_type_code <> G_ORDER_LEVEL
14386   AND   list_price_override_flag = 'N';
14387  END IF;
14388 END IF;
14389 
14390 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14391   engine_debug ('after update3');
14392 END IF;
14393 
14394 /*
14395 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_upd4,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
14396 */
14397 /*
14398 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel3,QP_QUALIFIERS_N7,QUALIFIER_CONTEXT,1
14399 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel3,QP_QUALIFIERS_N7,QUALIFIER_ATTRIBUTE,2
14400 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel3,QP_QUALIFIERS_N7,LIST_HEADER_ID,3
14401 */
14402 IF (G_PRICE_PHASE_FLAG = TRUE) THEN -- Ravi,
14403 UPDATE qp_npreq_lines_tmp a
14404 SET   qualifiers_exist_flag = G_YES
14405 WHERE price_list_header_id IS NOT NULL
14406 AND   validated_flag = G_NO
14407 AND   EXISTS (SELECT 'x'
14408               FROM QP_QUALIFIERS
14409               WHERE LIST_HEADER_ID = a.PRICE_LIST_HEADER_ID
14410               AND   QUALIFIER_CONTEXT <> 'MODLIST'
14411               AND   QUALIFIER_ATTRIBUTE <> 'QUALIFIER_ATTRIBUTE4'
14412               AND   ROWNUM = 1);
14413 /*
14414 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel4,QP_PRICING_ATTRIBUTES_N6,LIST_HEADER_ID,1
14415 INDX,QP_PREQ_GRP.update_price_list_information.update_price_list_information_sel4,QP_PRICING_ATTRIBUTES_N6,QUALIFICATION_IND,2
14416 */
14417 
14418 UPDATE qp_npreq_lines_tmp a
14419 SET   pricing_attrs_exist_flag = G_YES
14420 WHERE price_list_header_id IS NOT NULL
14421 AND   EXISTS
14422 (SELECT 'x'
14423  FROM QP_PRICING_ATTRIBUTES
14424  WHERE LIST_HEADER_ID = a.PRICE_LIST_HEADER_ID
14425  AND   QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
14426  AND   ROWNUM = 1) ;
14427 END IF;
14428 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14429   engine_debug ('after update4');
14430 END IF;
14431 
14432 EXCEPTION
14433 
14434  WHEN OTHERS THEN
14435   x_status_code:= FND_API.G_RET_STS_ERROR;
14436   x_status_text:= 'QP_PREQ_GRP.Update_Price_List_Information: '||SQLERRM;
14437   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14438     engine_debug(l_routine||' '||SQLERRM);
14439   END IF;
14440 
14441 END Update_Price_List_Information;
14442 
14443 /*+--------------------------------------------------------
14444   | PROCEDURE Update_Sec_Price_List_Info
14445   +--------------------------------------------------------
14446 */
14447 PROCEDURE Update_Sec_Price_List_Info( x_status_code OUT NOCOPY VARCHAR2,
14448                                       x_status_text OUT NOCOPY VARCHAR2) AS
14449 
14450   l_routine VARCHAR2(240):='QP_PREQ_GRP.Update_Sec_Price_List_Info';
14451 BEGIN
14452 
14453 /*
14454 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_upd1,-No Index Used-,NA,NA
14455 */
14456 /*
14457 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
14458 
14459 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
14460 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14461 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14462 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14463 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14464 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
14465 */
14466 UPDATE qp_npreq_lines_tmp c
14467 SET primary_qualifiers_match_flag = 'Y'
14468 WHERE EXISTS(
14469 SELECT 'x'
14470 FROM  QP_QUALIFIERS a,
14471       qp_npreq_line_attrs_tmp b
14472 WHERE b.CONTEXT = a.QUALIFIER_CONTEXT
14473 AND   b.ATTRIBUTE = a.QUALIFIER_ATTRIBUTE
14474 AND   b.VALUE_FROM = a.QUALIFIER_ATTR_VALUE
14475 AND   b.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14476 AND   a.COMPARISON_OPERATOR_CODE = '='
14477 AND   b.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14478 AND   trunc(c.pricing_effective_date) BETWEEN trunc(NVL(a.START_DATE_ACTIVE, c.pricing_effective_date))
14479                                       AND     trunc(NVL(a.END_DATE_ACTIVE,c.pricing_effective_date))
14480 AND   a.LIST_HEADER_ID = c.PRICE_LIST_HEADER_ID
14481 AND   a.ACTIVE_FLAG = G_YES
14482 AND   b.LINE_INDEX = c.LINE_INDEX
14483 AND   c.VALIDATED_FLAG = G_NO)
14484 AND   c.VALIDATED_FLAG = G_NO;
14485 
14486 /*
14487 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_upd2,-No Index Used-,NA,NA
14488 */
14489 /*
14490 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
14491 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
14492 
14493 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
14494 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14495 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14496 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14497 INDX,QP_PREQ_GRP.update_sec_price_list_info.update_sec_price_list_info_sel2,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14498 */
14499 UPDATE qp_npreq_lines_tmp c
14500 SET primary_qualifiers_match_flag = 'Y'
14501 WHERE EXISTS(
14502 SELECT 'x'
14503 FROM   qp_npreq_line_attrs_tmp b ,QP_QUALIFIERS a
14504 WHERE b.CONTEXT = a.QUALIFIER_CONTEXT
14505 AND   b.ATTRIBUTE = a.QUALIFIER_ATTRIBUTE
14506 AND   a.COMPARISON_OPERATOR_CODE = 'BETWEEN'
14507 AND   b.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14508 AND   b.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14509 AND   trunc(c.pricing_effective_date) BETWEEN NVL(a.START_DATE_ACTIVE, trunc(c.pricing_effective_date))
14510                                       AND     NVL(a.END_DATE_ACTIVE,trunc(c.pricing_effective_date))
14511 AND   a.LIST_HEADER_ID = c.PRICE_LIST_HEADER_ID
14512 AND   a.ACTIVE_FLAG = G_YES
14513 AND   b.LINE_INDEX = c.LINE_INDEX
14514 AND   c.VALIDATED_FLAG = G_NO)
14515 AND   c.VALIDATED_FLAG = G_NO ;
14516 
14517 UPDATE qp_npreq_lines_tmp c
14518 SET primary_qualifiers_match_flag = 'Y'
14519 WHERE EXISTS(
14520 SELECT 'x'
14521 FROM   qp_npreq_line_attrs_tmp b ,QP_QUALIFIERS a
14522 WHERE b.CONTEXT = a.QUALIFIER_CONTEXT
14523 AND   b.ATTRIBUTE = a.QUALIFIER_ATTRIBUTE
14524 AND   b.VALUE_FROM <> a.QUALIFIER_ATTR_VALUE
14525 AND   a.COMPARISON_OPERATOR_CODE = 'NOT ='
14526 AND   b.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14527 AND   b.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14528 AND   trunc(c.pricing_effective_date) BETWEEN NVL(a.START_DATE_ACTIVE, trunc(c.pricing_effective_date))
14529                                       AND     NVL(a.END_DATE_ACTIVE,trunc(c.pricing_effective_date))
14530 AND   a.LIST_HEADER_ID = c.PRICE_LIST_HEADER_ID
14531 AND   a.ACTIVE_FLAG = G_YES
14532 AND   b.LINE_INDEX = c.LINE_INDEX
14533 AND   c.VALIDATED_FLAG = G_NO)
14534 AND   c.VALIDATED_FLAG = G_NO ;
14535 
14536 EXCEPTION
14537  WHEN OTHERS THEN
14538   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
14539    engine_debug(l_routine||' '||SQLERRM);
14540   END IF;
14541   x_status_code := FND_API.G_RET_STS_ERROR;
14542   x_status_text := 'Error in '||l_routine||SQLERRM;
14543 END Update_Sec_Price_List_Info;
14544 
14545 /*+--------------------------------------------------------
14546   | PROCEDURE Perform_Secondary_Search
14547   +--------------------------------------------------------
14548 */
14549 
14550 PROCEDURE Perform_Secondary_Search(P_FREEZE_OVERRIDE_FLAG        VARCHAR2,
14551                                    p_control_rec                 CONTROL_RECORD_TYPE,
14552 		                   x_status_code            OUT NOCOPY   VARCHAR2,
14553 		                   x_status_text            OUT NOCOPY   VARCHAR2)
14554 AS
14555 
14556 /*
14557 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_QUALIFIERS_N4,QUALIFIER_CONTEXT,1
14558 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTRIBUTE,2
14559 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_QUALIFIERS_N4,QUALIFIER_ATTR_VALUE,3
14560 
14561 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
14562 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
14563 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
14564 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
14565 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
14566 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
14567 
14568 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
14569 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
14570 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
14571 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
14572 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
14573 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
14574 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
14575 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
14576 
14577 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
14578 
14579 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
14580 
14581 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
14582 
14583 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_LIST_HEADERS_B_PK,LINE_TYPE_CODE,2
14584 
14585 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
14586 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
14587 
14588 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
14589 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
14590 INDX,QP_PREQ_GRP.perform_secondary_search.l_sec_list_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
14591 */
14592 CURSOR L_SEC_LIST_CUR IS
14593 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 */
14594                    QPLAT_PROD.LINE_INDEX,
14595                    QPL.LIST_LINE_ID,
14596                    QPL.ARITHMETIC_OPERATOR,
14597                    QPL.OPERAND,
14598                    QPL.PRICING_GROUP_SEQUENCE,
14599                    QPL.LIST_LINE_TYPE_CODE,
14600                    QPL.PRICING_PHASE_ID,
14601                    QPL.AUTOMATIC_FLAG,
14602                    QPL.INCOMPATIBILITY_GRP_CODE,
14603                    QPL.PRICE_BY_FORMULA_ID,
14604                    QPL.PRODUCT_PRECEDENCE,
14605                    QPL.PRIMARY_UOM_FLAG,
14606                    QPL.MODIFIER_LEVEL_CODE,
14607                    QPL.LIST_LINE_NO,
14608                    QPA.PRODUCT_UOM_CODE,
14609                    QPA.EXCLUDER_FLAG,
14610                    QPH.LIST_TYPE_CODE,
14611                    QPH.ROUNDING_FACTOR,
14612                    QPLAT_PROD.LINE_DETAIL_INDEX,
14613                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
14614                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
14615                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
14616                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
14617                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
14618                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
14619                    QPLAT_PROD.APPLIED_FLAG,
14620                    NULL                      PRODUCT_OPERATOR_TYPE,
14621                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
14622                    NULL                      PRICING_ATTRIBUTE,
14623                    NULL                      PRICING_ATTR_VALUE_FROM,
14624                    NULL                      PRICING_SETUP_VALUE_FROM,
14625                    NULL                      PRICING_SETUP_VALUE_TO,
14626                    NULL                      PRICING_ATTRIBUTE_LEVEL,
14627                    NULL                      PRICING_ATTRIBUTE_TYPE,
14628                    NULL                      PRICING_OPERATOR_TYPE,
14629                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
14630                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
14631                    NULL                      QUALIFIER_ATTRIBUTE,
14632                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
14633                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
14634                    to_number(NULL)           QUALIFIER_GROUPING_NO,
14635                    NULL                      QUALIFIER_DATATYPE,
14636                    NULL                      SETUP_VALUE_FROM,
14637                    NULL                      SETUP_VALUE_TO,
14638                    NULL                      QUALIFIER_OPERATOR_TYPE,
14639                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE
14640                   ,QPL.BREAK_UOM_CODE /* Proration */
14641                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
14642                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
14643                   ,NULL QUALIFIER_TYPE -- 3863226
14644                   ,QPLAT_PROD.DERIVED_QUALIFIER_FLAG  -- Added for TCA
14645    FROM
14646          qp_npreq_lines_tmp QPLINES,
14647          QP_QUALIFIERS QPQ,
14648 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
14649          QP_PRICING_ATTRIBUTES QPA,
14650          QP_LIST_LINES QPL,
14651          QP_LIST_HEADERS_B QPH,
14652          --QP_PRICE_REQ_SOURCES QPRS
14653          QP_PRICE_REQ_SOURCES_V QPRS /*yangli*/
14654    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
14655    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
14656    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
14657    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
14658    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
14659    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
14660    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14661    AND   QPA.QUALIFICATION_IND IN ( QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_IND)
14662    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
14663    AND   (QPLINES.PRICE_FLAG = G_YES
14664           OR
14665          (QPLINES.PRICE_FLAG = G_PHASE
14666           AND
14667           P_FREEZE_OVERRIDE_FLAG = G_YES))
14668    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
14669    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
14670    AND   (QPLINES.VALIDATED_FLAG = G_YES
14671              OR
14672          ((QPLINES.VALIDATED_FLAG = G_NO AND
14673          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
14674              OR
14675          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
14676          (G_QUALIFY_SECONDARY = G_NO
14677           OR
14678           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
14679          ))
14680    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
14681    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
14682    AND   QPA.EXCLUDER_FLAG = G_NO
14683    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
14684    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
14685 --added for moac -- commented references to security profile
14686 --security will be built into qp_list_headers_b
14687 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
14688 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
14689 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
14690    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14691            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14692            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14693    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14694            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14695            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14696    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
14697    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
14698    --       OR
14699    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
14700    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
14701    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
14702    AND   QPH.ACTIVE_FLAG = G_YES
14703    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
14704    AND   QPQ.ACTIVE_FLAG = G_YES
14705    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14706          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
14707          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
14708    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
14709    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14710    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14711    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
14712    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
14713 UNION ALL
14714 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 */
14715                    QPLAT_PROD.LINE_INDEX,
14716                    QPL.LIST_LINE_ID,
14717                    QPL.ARITHMETIC_OPERATOR,
14718                    QPL.OPERAND,
14719                    QPL.PRICING_GROUP_SEQUENCE,
14720                    QPL.LIST_LINE_TYPE_CODE,
14721                    QPL.PRICING_PHASE_ID,
14722                    QPL.AUTOMATIC_FLAG,
14723                    QPL.INCOMPATIBILITY_GRP_CODE,
14724                    QPL.PRICE_BY_FORMULA_ID,
14725                    QPL.PRODUCT_PRECEDENCE,
14726                    QPL.PRIMARY_UOM_FLAG,
14727                    QPL.MODIFIER_LEVEL_CODE,
14728                    QPL.LIST_LINE_NO,
14729                    QPA.PRODUCT_UOM_CODE,
14730                    QPA.EXCLUDER_FLAG,
14731                    QPH.LIST_TYPE_CODE,
14732                    QPH.ROUNDING_FACTOR,
14733                    QPLAT_PROD.LINE_DETAIL_INDEX,
14734                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
14735                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
14736                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
14737                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
14738                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
14739                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
14740                    QPLAT_PROD.APPLIED_FLAG,
14741                    NULL                            PRODUCT_OPERATOR_TYPE,
14742                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
14743                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
14744                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
14745                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
14746                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
14747                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
14748                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
14749                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
14750                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
14751                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
14752                    NULL                      QUALIFIER_ATTRIBUTE,
14753                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
14754                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
14755                    to_number(NULL)           QUALIFIER_GROUPING_NO,
14756                    NULL                      QUALIFIER_DATATYPE,
14757                    NULL                      SETUP_VALUE_FROM,
14758                    NULL                      SETUP_VALUE_TO,
14759                    NULL                      QUALIFIER_OPERATOR_TYPE,
14760                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE
14761                   ,QPL.BREAK_UOM_CODE /* Proration */
14762                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
14763                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
14764                   ,NULL QUALIFIER_TYPE -- 3863226
14765                   ,QPLAT_PRIC.DERIVED_QUALIFIER_FLAG  -- Added for TCA
14766    FROM
14767          qp_npreq_lines_tmp qplines,
14768          QP_QUALIFIERS qpq,
14769          qp_npreq_line_attrs_tmp qplat_prod,
14770          QP_PRICING_ATTRIBUTES qpa,
14771          qp_npreq_line_attrs_tmp qplat_pric,
14772          QP_LIST_LINES qpl,
14773          QP_LIST_HEADERS_B qph,
14774          --QP_PRICE_REQ_SOURCES qprs
14775          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
14776    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
14777    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
14778    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
14779    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
14780    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
14781    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14782    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
14783    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
14784    AND   (QPLINES.PRICE_FLAG = G_YES
14785           OR
14786          (QPLINES.PRICE_FLAG = G_PHASE
14787           AND
14788           P_FREEZE_OVERRIDE_FLAG = G_YES))
14789    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
14790    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
14791    AND   ((QPLINES.VALIDATED_FLAG = G_YES
14792              OR
14793          (QPLINES.VALIDATED_FLAG = G_NO AND
14794          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
14795              OR
14796          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
14797          (G_QUALIFY_SECONDARY = G_NO
14798           OR
14799           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
14800          ))
14801    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
14802    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
14803    AND   QPA.EXCLUDER_FLAG = G_NO
14804    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14805    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
14806    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
14807    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
14808           OR
14809           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
14810    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
14811    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14812    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
14813    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
14814    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
14815    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
14816 --added for moac -- commented references to security profile
14817 --security will be built into qp_list_headers_b
14818 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
14819 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
14820 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
14821    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14822            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14823            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14824    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14825            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14826            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14827    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
14828    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
14829    --       OR
14830    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
14831    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
14832    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
14833    AND   QPH.ACTIVE_FLAG = G_YES
14834    AND   QPQ.ACTIVE_FLAG = G_YES
14835    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
14836    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
14837    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14838    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
14839    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
14840 UNION ALL
14841 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 */
14842                    QPLAT_PROD.LINE_INDEX,
14843                    QPL.LIST_LINE_ID,
14844                    QPL.ARITHMETIC_OPERATOR,
14845                    QPL.OPERAND,
14846                    QPL.PRICING_GROUP_SEQUENCE,
14847                    QPL.LIST_LINE_TYPE_CODE,
14848                    QPL.PRICING_PHASE_ID,
14849                    QPL.AUTOMATIC_FLAG,
14850                    QPL.INCOMPATIBILITY_GRP_CODE,
14851                    QPL.PRICE_BY_FORMULA_ID,
14852                    QPL.PRODUCT_PRECEDENCE,
14853                    QPL.PRIMARY_UOM_FLAG,
14854                    QPL.MODIFIER_LEVEL_CODE,
14855                    QPL.LIST_LINE_NO,
14856                    QPA.PRODUCT_UOM_CODE,
14857                    QPA.EXCLUDER_FLAG,
14858                    QPH.LIST_TYPE_CODE,
14859                    QPH.ROUNDING_FACTOR,
14860                    QPLAT_PROD.LINE_DETAIL_INDEX,
14861                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
14862                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
14863                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
14864                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
14865                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
14866                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
14867                    QPLAT_PROD.APPLIED_FLAG,
14868                    NULL                      PRODUCT_OPERATOR_TYPE,
14869                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
14870                    NULL                      PRICING_ATTRIBUTE,
14871                    NULL                      PRICING_ATTR_VALUE_FROM,
14872                    NULL                      PRICING_SETUP_VALUE_FROM,
14873                    NULL                      PRICING_SETUP_VALUE_TO,
14874                    NULL                      PRICING_ATTRIBUTE_LEVEL,
14875                    NULL                      PRICING_ATTRIBUTE_TYPE,
14876                    NULL                      PRICING_OPERATOR_TYPE,
14877                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
14878                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
14879                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
14880                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
14881                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
14882                    QPSQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
14883                    QPSQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
14884                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
14885                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
14886                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
14887                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE
14888                   ,QPL.BREAK_UOM_CODE /* Proration */
14889                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
14890                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
14891                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  -- 3863226
14892                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
14893    FROM
14894          qp_npreq_lines_tmp QPLINES,
14895          QP_QUALIFIERS QPQ,
14896          QP_QUALIFIERS QPSQ,
14897 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
14898          qp_npreq_line_attrs_tmp QPLAT_Q,
14899          QP_PRICING_ATTRIBUTES QPA,
14900          QP_LIST_LINES QPL,
14901          QP_LIST_HEADERS_B QPH,
14902          --QP_PRICE_REQ_SOURCES QPRS
14903          QP_PRICE_REQ_SOURCES_V QPRS /*yangli*/
14904    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
14905    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
14906    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
14907    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
14908    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
14909    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
14910    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14911    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
14912    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
14913    AND   (QPLINES.PRICE_FLAG = G_YES
14914           OR
14915          (QPLINES.PRICE_FLAG = G_PHASE
14916           AND
14917           P_FREEZE_OVERRIDE_FLAG = G_YES))
14918    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
14919    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
14920    AND   QPLINES.VALIDATED_FLAG = G_NO
14921    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
14922           OR
14923           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
14924          )
14925    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
14926    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
14927    AND   QPA.EXCLUDER_FLAG = G_NO
14928    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
14929    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
14930 --added for moac -- commented references to security profile
14931 --security will be built into qp_list_headers_b
14932 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
14933 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
14934 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
14935    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14936            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14937            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14938    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14939            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14940            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
14941    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
14942    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
14943    --       OR
14944    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
14945    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
14946    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
14947    AND   QPH.ACTIVE_FLAG = G_YES
14948    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
14949    AND   QPQ.ACTIVE_FLAG = G_YES
14950    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14951          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
14952          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
14953    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
14954    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
14955    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14956    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
14957    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
14958 -- 3594459, context and attribute OR'd together
14959    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
14960           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
14961    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
14962    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
14963    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
14964    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
14965    AND   QPSQ.ACTIVE_FLAG = G_YES
14966    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
14967                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
14968            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
14969                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
14970            OR
14971           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
14972    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
14973    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
14974          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
14975          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
14976    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
14977    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
14978    AND   G_QUALIFY_SECONDARY = G_YES
14979    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
14980          OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
14981 UNION ALL
14982 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 */
14983                    QPLAT_PROD.LINE_INDEX,
14984                    QPL.LIST_LINE_ID,
14985                    QPL.ARITHMETIC_OPERATOR,
14986                    QPL.OPERAND,
14987                    QPL.PRICING_GROUP_SEQUENCE,
14988                    QPL.LIST_LINE_TYPE_CODE,
14989                    QPL.PRICING_PHASE_ID,
14990                    QPL.AUTOMATIC_FLAG,
14991                    QPL.INCOMPATIBILITY_GRP_CODE,
14992                    QPL.PRICE_BY_FORMULA_ID,
14993                    QPL.PRODUCT_PRECEDENCE,
14994                    QPL.PRIMARY_UOM_FLAG,
14995                    QPL.MODIFIER_LEVEL_CODE,
14996                    QPL.LIST_LINE_NO,
14997                    QPA.PRODUCT_UOM_CODE,
14998                    QPA.EXCLUDER_FLAG,
14999                    QPH.LIST_TYPE_CODE,
15000                    QPH.ROUNDING_FACTOR,
15001                    QPLAT_PROD.LINE_DETAIL_INDEX,
15002                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15003                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15004                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15005                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15006                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15007                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15008                    QPLAT_PROD.APPLIED_FLAG,
15009                    NULL                            PRODUCT_OPERATOR_TYPE,
15010                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
15011                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
15012                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
15013                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
15014                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
15015                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
15016                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
15017                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
15018                    QPA.PRICING_ATTRIBUTE_DATATYPE  PRICING_ATTRIBUTE_DATATYPE,
15019                    QPLAT_Q.CONTEXT              QUALIFIER_ATTRIBUTE_CONTEXT,
15020                    QPLAT_Q.ATTRIBUTE            QUALIFIER_ATTRIBUTE,
15021                    QPLAT_Q.VALUE_FROM           QUALIFIER_ATTR_VALUE_FROM,
15022                    QPLAT_Q.PRICING_ATTR_FLAG    QUALIFIER_PRICING_ATTR_FLAG,
15023                    QPSQ.QUALIFIER_GROUPING_NO   QUALIFIER_GROUPING_NO,
15024                    QPSQ.QUALIFIER_DATATYPE      QUALIFIER_DATATYPE,
15025                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
15026                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
15027                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
15028                    QPQ.QUALIFIER_PRECEDENCE      QUALIFIER_PRECEDENCE
15029                   ,QPL.BREAK_UOM_CODE /* Proration */
15030                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15031                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15032                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  -- 3863226
15033                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15034    FROM
15035          qp_npreq_lines_tmp qplines,
15036          QP_QUALIFIERS qpq,
15037          QP_QUALIFIERS qpsq,
15038          qp_npreq_line_attrs_tmp qplat_prod,
15039          QP_PRICING_ATTRIBUTES qpa,
15040          qp_npreq_line_attrs_tmp qplat_pric,
15041          qp_npreq_line_attrs_tmp qplat_q,
15042          QP_LIST_LINES qpl,
15043          QP_LIST_HEADERS_B qph,
15044          --QP_PRICE_REQ_SOURCES qprs
15045          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
15046    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15047    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15048    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15049    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15050    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15051    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15052    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
15053    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15054    AND   (QPLINES.PRICE_FLAG = G_YES
15055           OR
15056          (QPLINES.PRICE_FLAG = G_PHASE
15057           AND
15058           P_FREEZE_OVERRIDE_FLAG = G_YES))
15059    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15060    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15061    AND   QPLINES.VALIDATED_FLAG = G_NO
15062    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
15063           OR
15064           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
15065           )
15066    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15067    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15068    AND   QPA.EXCLUDER_FLAG = G_NO
15069    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15070    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
15071    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
15072    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
15073           OR
15074           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
15075    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
15076    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15077    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
15078    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
15079    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15080    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
15081 --added for moac -- commented references to security profile
15082 --security will be built into qp_list_headers_b
15083 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15084 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15085 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15086    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15087            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15088            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15089    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15090            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15091            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15092    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
15093    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15094    --       OR
15095    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15096    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15097    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15098    AND   QPH.ACTIVE_FLAG = G_YES
15099    AND   QPQ.ACTIVE_FLAG = G_YES
15100    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15101    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
15102    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15103    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15104    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15105    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15106 -- 3594459, context and attribute OR'd together
15107    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
15108           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
15109    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
15110    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
15111    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
15112    AND   QPSQ.ACTIVE_FLAG = G_YES
15113    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
15114                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
15115            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
15116                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
15117            OR
15118           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
15119    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
15120    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15121          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15122          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15123    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
15124    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15125    AND   G_QUALIFY_SECONDARY = G_YES
15126     AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
15127           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
15128    ORDER BY 1,2;
15129 
15130 -- vivek
15131 --[julin/4865213] using qp_list_headers_b_n7 instead of qp_list_headers_b_n2
15132 CURSOR L_SEC_LIST_CUR_CURRENCY IS
15133 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 */
15134                    QPLAT_PROD.LINE_INDEX,
15135                    QPL.LIST_LINE_ID,
15136                    QPL.ARITHMETIC_OPERATOR,
15137                    QPL.OPERAND,
15138                    QPL.PRICING_GROUP_SEQUENCE,
15139                    QPL.LIST_LINE_TYPE_CODE,
15140                    QPL.PRICING_PHASE_ID,
15141                    QPL.AUTOMATIC_FLAG,
15142                    QPL.INCOMPATIBILITY_GRP_CODE,
15143                    QPL.PRICE_BY_FORMULA_ID,
15144                    QPL.PRODUCT_PRECEDENCE,
15145                    QPL.PRIMARY_UOM_FLAG,
15146                    QPL.MODIFIER_LEVEL_CODE,
15147                    QPL.LIST_LINE_NO,
15148                    QPA.PRODUCT_UOM_CODE,
15149                    QPA.EXCLUDER_FLAG,
15150                    QPH.LIST_TYPE_CODE,
15151    /* vivek        QPH.ROUNDING_FACTOR,  */
15152                    QCDT.ROUNDING_FACTOR, /* vivek */
15153                    QPLAT_PROD.LINE_DETAIL_INDEX,
15154                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15155                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15156                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15157                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15158                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15159                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15160                    QPLAT_PROD.APPLIED_FLAG,
15161                    NULL                      PRODUCT_OPERATOR_TYPE,
15162                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
15163                    NULL                      PRICING_ATTRIBUTE,
15164                    NULL                      PRICING_ATTR_VALUE_FROM,
15165                    NULL                      PRICING_SETUP_VALUE_FROM,
15166                    NULL                      PRICING_SETUP_VALUE_TO,
15167                    NULL                      PRICING_ATTRIBUTE_LEVEL,
15168                    NULL                      PRICING_ATTRIBUTE_TYPE,
15169                    NULL                      PRICING_OPERATOR_TYPE,
15170                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
15171                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
15172                    NULL                      QUALIFIER_ATTRIBUTE,
15173                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
15174                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
15175                    to_number(NULL)           QUALIFIER_GROUPING_NO,
15176                    NULL                      QUALIFIER_DATATYPE,
15177                    NULL                      SETUP_VALUE_FROM,
15178                    NULL                      SETUP_VALUE_TO,
15179                    NULL                      QUALIFIER_OPERATOR_TYPE,
15180                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15181                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15182                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15183                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15184                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15185                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15186                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15187                   ,QPL.BREAK_UOM_CODE /* Proration */
15188                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15189                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15190                   ,NULL QUALIFIER_TYPE -- 3863226
15191                   ,QPLAT_PROD.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15192    FROM
15193          qp_npreq_lines_tmp QPLINES,
15194          QP_QUALIFIERS QPQ,
15195 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
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          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15202    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15203    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15204    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15205    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15206    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15207    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
15208    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15209    AND   QPA.QUALIFICATION_IND IN ( QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_IND)
15210    AND   QPA.EXCLUDER_FLAG = G_NO
15211    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15212    AND   (QPLINES.PRICE_FLAG = G_YES
15213           OR
15214          (QPLINES.PRICE_FLAG = G_PHASE
15215           AND
15216           P_FREEZE_OVERRIDE_FLAG = G_YES))
15217    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15218    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15219    AND   ((QPLINES.VALIDATED_FLAG = G_YES
15220              OR
15221          (QPLINES.VALIDATED_FLAG = G_NO AND
15222          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
15223              OR
15224          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
15225          (G_QUALIFY_SECONDARY = G_NO
15226           OR
15227           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
15228          ))
15229    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15230    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15231    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15232    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
15233 --added for moac -- commented references to security profile
15234 --security will be built into qp_list_headers_b
15235 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15236 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15237 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15238    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15239            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15240            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15241    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15242            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15243            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15244 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15245             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15246             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15247             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15248                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15249                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15250    AND (   /* Vivek */
15251         (qcdt.curr_attribute_context is null   /* Vivek */
15252          and not exists   /* Vivek */
15253              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15254 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15255                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15256 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15257                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15258                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15259                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15260                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15261                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15262                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15263                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15264                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15265                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15266                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15267              )   /* Vivek */
15268         )   /* Vivek */
15269         OR   /* Vivek */
15270         (qcdt.curr_attribute_context is not null   /* Vivek */
15271          and qcdt.currency_detail_id =   /* Vivek */
15272              (select qcdt3.currency_detail_id
15273 	       from qp_currency_details qcdt3  /* Vivek */
15274                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15275                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15276                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15277                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15278                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15279                  and  qcdt3.precedence =
15280              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15281 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15282                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15283 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15284                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15285                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15286                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15287                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15288                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15289                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15290                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15291                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15292                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15293                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15294              ))   /* Vivek */
15295         )   /* Vivek */
15296        )   /* Vivek */
15297    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15298    --       OR
15299    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15300    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15301    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15302    AND   QPH.ACTIVE_FLAG = G_YES
15303    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15304    AND   QPQ.ACTIVE_FLAG = G_YES
15305    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15306          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15307          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15308    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15309    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15310    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15311    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15312    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15313 UNION ALL
15314 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 */
15315                    QPLAT_PROD.LINE_INDEX,
15316                    QPL.LIST_LINE_ID,
15317                    QPL.ARITHMETIC_OPERATOR,
15318                    QPL.OPERAND,
15319                    QPL.PRICING_GROUP_SEQUENCE,
15320                    QPL.LIST_LINE_TYPE_CODE,
15321                    QPL.PRICING_PHASE_ID,
15322                    QPL.AUTOMATIC_FLAG,
15323                    QPL.INCOMPATIBILITY_GRP_CODE,
15324                    QPL.PRICE_BY_FORMULA_ID,
15325                    QPL.PRODUCT_PRECEDENCE,
15326                    QPL.PRIMARY_UOM_FLAG,
15327                    QPL.MODIFIER_LEVEL_CODE,
15328                    QPL.LIST_LINE_NO,
15329                    QPA.PRODUCT_UOM_CODE,
15330                    QPA.EXCLUDER_FLAG,
15331                    QPH.LIST_TYPE_CODE,
15332    /* vivek        QPH.ROUNDING_FACTOR,  */
15333                    QCDT.ROUNDING_FACTOR, /* vivek */
15334                    QPLAT_PROD.LINE_DETAIL_INDEX,
15335                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15336                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15337                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15338                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15339                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15340                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15341                    QPLAT_PROD.APPLIED_FLAG,
15342                    NULL                            PRODUCT_OPERATOR_TYPE,
15343                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
15344                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
15345                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
15346                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
15347                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
15348                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
15349                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
15350                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
15351                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
15352                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
15353                    NULL                      QUALIFIER_ATTRIBUTE,
15354                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
15355                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
15356                    to_number(NULL)           QUALIFIER_GROUPING_NO,
15357                    NULL                      QUALIFIER_DATATYPE,
15358                    NULL                      SETUP_VALUE_FROM,
15359                    NULL                      SETUP_VALUE_TO,
15360                    NULL                      QUALIFIER_OPERATOR_TYPE,
15361                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15362                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15363                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15364                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15365                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15366                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15367                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15368                   ,QPL.BREAK_UOM_CODE /* Proration */
15369                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15370                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15371                   ,NULL QUALIFIER_TYPE -- 3863226
15372                   ,QPLAT_PRIC.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15373    FROM
15374          qp_npreq_lines_tmp qplines,
15375          QP_QUALIFIERS qpq,
15376          qp_npreq_line_attrs_tmp qplat_prod,
15377          QP_PRICING_ATTRIBUTES qpa,
15378          qp_npreq_line_attrs_tmp qplat_pric,
15379          QP_LIST_LINES qpl,
15380          QP_LIST_HEADERS_B qph,
15381          --QP_PRICE_REQ_SOURCES qprs,
15382          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
15383          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15384    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15385    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15386    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15387    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15388    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15389    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15390    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
15391    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15392    AND   (QPLINES.PRICE_FLAG = G_YES
15393           OR
15394          (QPLINES.PRICE_FLAG = G_PHASE
15395           AND
15396           P_FREEZE_OVERRIDE_FLAG = G_YES))
15397    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15398    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15399    AND   ((QPLINES.VALIDATED_FLAG = G_YES
15400              OR
15401          (QPLINES.VALIDATED_FLAG = G_NO AND
15402          QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES)
15403              OR
15404          QPLINES.QUALIFIERS_EXIST_FLAG = G_NO) AND
15405          (G_QUALIFY_SECONDARY = G_NO
15406           OR
15407           QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
15408          ))
15409    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15410    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15411    AND   QPA.EXCLUDER_FLAG = G_NO
15412    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15413    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
15414    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
15415    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
15416           OR
15417           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
15418    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
15419    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15420    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
15421    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
15422    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15423    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
15424 --added for moac -- commented references to security profile
15425 --security will be built into qp_list_headers_b
15426 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15427 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15428 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15429    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15430            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15431            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15432    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15433            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15434            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15435 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15436             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15437             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15438             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15439                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15440                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15441    AND (   /* Vivek */
15442         (qcdt.curr_attribute_context is null   /* Vivek */
15443          and not exists   /* Vivek */
15444              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15445 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15446                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15447 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15448                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15449                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15450                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15451                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15452                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15453                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15454                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15455                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15456                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15457                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15458              )   /* Vivek */
15459         )   /* Vivek */
15460         OR   /* Vivek */
15461         (qcdt.curr_attribute_context is not null   /* Vivek */
15462          and qcdt.currency_detail_id =   /* Vivek */
15463              (select qcdt3.currency_detail_id
15464 	       from qp_currency_details qcdt3  /* Vivek */
15465                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15466                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15467                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15468                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15469                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15470                  and  qcdt3.precedence =
15471              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15472 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15473                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15474 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15475                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15476                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15477                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15478                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15479                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15480                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15481                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15482                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15483                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15484                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15485              ))   /* Vivek */
15486         )   /* Vivek */
15487        )   /* Vivek */
15488    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15489    --       OR
15490    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15491    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15492    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15493    AND   QPH.ACTIVE_FLAG = G_YES
15494    AND   QPQ.ACTIVE_FLAG = G_YES
15495    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15496    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15497    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15498    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15499    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15500 UNION ALL
15501 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 */
15502                    QPLAT_PROD.LINE_INDEX,
15503                    QPL.LIST_LINE_ID,
15504                    QPL.ARITHMETIC_OPERATOR,
15505                    QPL.OPERAND,
15506                    QPL.PRICING_GROUP_SEQUENCE,
15507                    QPL.LIST_LINE_TYPE_CODE,
15508                    QPL.PRICING_PHASE_ID,
15509                    QPL.AUTOMATIC_FLAG,
15510                    QPL.INCOMPATIBILITY_GRP_CODE,
15511                    QPL.PRICE_BY_FORMULA_ID,
15512                    QPL.PRODUCT_PRECEDENCE,
15513                    QPL.PRIMARY_UOM_FLAG,
15514                    QPL.MODIFIER_LEVEL_CODE,
15515                    QPL.LIST_LINE_NO,
15516                    QPA.PRODUCT_UOM_CODE,
15517                    QPA.EXCLUDER_FLAG,
15518                    QPH.LIST_TYPE_CODE,
15519    /* vivek        QPH.ROUNDING_FACTOR,  */
15520                    QCDT.ROUNDING_FACTOR, /* vivek */
15521                    QPLAT_PROD.LINE_DETAIL_INDEX,
15522                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15523                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15524                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15525                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15526                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15527                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15528                    QPLAT_PROD.APPLIED_FLAG,
15529                    NULL                      PRODUCT_OPERATOR_TYPE,
15530                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
15531                    NULL                      PRICING_ATTRIBUTE,
15532                    NULL                      PRICING_ATTR_VALUE_FROM,
15533                    NULL                      PRICING_SETUP_VALUE_FROM,
15534                    NULL                      PRICING_SETUP_VALUE_TO,
15535                    NULL                      PRICING_ATTRIBUTE_LEVEL,
15536                    NULL                      PRICING_ATTRIBUTE_TYPE,
15537                    NULL                      PRICING_OPERATOR_TYPE,
15538                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
15539                    QPLAT_Q.CONTEXT              QUALIFIER_ATTRIBUTE_CONTEXT,
15540                    QPLAT_Q.ATTRIBUTE            QUALIFIER_ATTRIBUTE,
15541                    QPLAT_Q.VALUE_FROM           QUALIFIER_ATTR_VALUE_FROM,
15542                    QPLAT_Q.PRICING_ATTR_FLAG    QUALIFIER_PRICING_ATTR_FLAG,
15543                    QPSQ.QUALIFIER_GROUPING_NO   QUALIFIER_GROUPING_NO,
15544                    QPSQ.QUALIFIER_DATATYPE      QUALIFIER_DATATYPE,
15545                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
15546                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
15547                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
15548                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15549                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15550                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15551                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15552                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15553                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15554                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15555                   ,QPL.BREAK_UOM_CODE /* Proration */
15556                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15557                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15558                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  --3863226
15559                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15560    FROM
15561          qp_npreq_lines_tmp QPLINES,
15562          QP_QUALIFIERS QPQ,
15563          QP_QUALIFIERS QPSQ,
15564 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
15565          qp_npreq_line_attrs_tmp  QPLAT_Q,
15566          QP_PRICING_ATTRIBUTES QPA,
15567          QP_LIST_LINES QPL,
15568          QP_LIST_HEADERS_B QPH,
15569          --QP_PRICE_REQ_SOURCES QPRS,
15570          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
15571          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15572    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15573    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15574    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15575    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15576    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15577    AND   QPQ.LIST_HEADER_ID = QPA.LIST_HEADER_ID
15578    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15579    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
15580    AND   QPA.EXCLUDER_FLAG = G_NO
15581    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15582    AND   (QPLINES.PRICE_FLAG = G_YES
15583           OR
15584          (QPLINES.PRICE_FLAG = G_PHASE
15585           AND
15586           P_FREEZE_OVERRIDE_FLAG = G_YES))
15587    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15588    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15589    AND   QPLINES.VALIDATED_FLAG = G_NO
15590    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
15591           OR
15592           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
15593           )
15594    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15595    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15596    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15597    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
15598 --added for moac -- commented references to security profile
15599 --security will be built into qp_list_headers_b
15600 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15601 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15602 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15603    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15604            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15605            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15606    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15607            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15608            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15609 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15610             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15611             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15612             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15613                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15614                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15615    AND (   /* Vivek */
15616         (qcdt.curr_attribute_context is null   /* Vivek */
15617          and not exists   /* Vivek */
15618              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15619 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15620                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15621 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15622                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15623                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15624                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15625                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15626                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15627                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15628                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15629                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15630                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15631                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15632              )   /* Vivek */
15633         )   /* Vivek */
15634         OR   /* Vivek */
15635         (qcdt.curr_attribute_context is not null   /* Vivek */
15636          and qcdt.currency_detail_id =   /* Vivek */
15637              (select qcdt3.currency_detail_id
15638 	       from qp_currency_details qcdt3  /* Vivek */
15639                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15640                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15641                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15642                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15643                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15644                  and  qcdt3.precedence =
15645              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15646 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15647                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15648 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15649                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15650                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15651                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15652                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15653                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15654                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15655                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15656                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15657                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15658                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15659              ))   /* Vivek */
15660         )   /* Vivek */
15661        )   /* Vivek */
15662    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15663    --       OR
15664    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15665    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15666    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15667    AND   QPH.ACTIVE_FLAG = G_YES
15668    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15669    AND   QPQ.ACTIVE_FLAG = G_YES
15670    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15671          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15672          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15673    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15674    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15675    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15676    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15677    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15678    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
15679 -- 3594459, context and attribute OR'd together
15680    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
15681           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
15682    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
15683    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
15684    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
15685    AND   QPSQ.ACTIVE_FLAG = G_YES
15686    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
15687                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
15688            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
15689                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
15690            OR
15691           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
15692    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
15693    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15694          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15695          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15696    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
15697    AND   QPLAT_Q.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15698    AND   G_QUALIFY_SECONDARY = G_YES
15699    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
15700           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
15701 UNION ALL
15702 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 */
15703                    QPLAT_PROD.LINE_INDEX,
15704                    QPL.LIST_LINE_ID,
15705                    QPL.ARITHMETIC_OPERATOR,
15706                    QPL.OPERAND,
15707                    QPL.PRICING_GROUP_SEQUENCE,
15708                    QPL.LIST_LINE_TYPE_CODE,
15709                    QPL.PRICING_PHASE_ID,
15710                    QPL.AUTOMATIC_FLAG,
15711                    QPL.INCOMPATIBILITY_GRP_CODE,
15712                    QPL.PRICE_BY_FORMULA_ID,
15713                    QPL.PRODUCT_PRECEDENCE,
15714                    QPL.PRIMARY_UOM_FLAG,
15715                    QPL.MODIFIER_LEVEL_CODE,
15716                    QPL.LIST_LINE_NO,
15717                    QPA.PRODUCT_UOM_CODE,
15718                    QPA.EXCLUDER_FLAG,
15719                    QPH.LIST_TYPE_CODE,
15720    /* vivek        QPH.ROUNDING_FACTOR,  */
15721                    QCDT.ROUNDING_FACTOR, /* vivek */
15722                    QPLAT_PROD.LINE_DETAIL_INDEX,
15723                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
15724                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
15725                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
15726                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
15727                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
15728                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
15729                    QPLAT_PROD.APPLIED_FLAG,
15730                    NULL                            PRODUCT_OPERATOR_TYPE,
15731                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
15732                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
15733                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
15734                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
15735                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
15736                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
15737                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
15738                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
15739                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
15740                    QPLAT_Q.CONTEXT              QUALIFIER_ATTRIBUTE_CONTEXT,
15741                    QPLAT_Q.ATTRIBUTE            QUALIFIER_ATTRIBUTE,
15742                    QPLAT_Q.VALUE_FROM           QUALIFIER_ATTR_VALUE_FROM,
15743                    QPLAT_Q.PRICING_ATTR_FLAG    QUALIFIER_PRICING_ATTR_FLAG,
15744                    QPSQ.QUALIFIER_GROUPING_NO   QUALIFIER_GROUPING_NO,
15745                    QPSQ.QUALIFIER_DATATYPE      QUALIFIER_DATATYPE,
15746                    QPSQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
15747                    QPSQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
15748                    QPSQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
15749                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
15750                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
15751                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
15752                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
15753                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
15754                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
15755                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
15756                   ,QPL.BREAK_UOM_CODE /* Proration */
15757                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
15758                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
15759                   ,DECODE(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE  --3863226
15760                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG   -- Added for TCA
15761    FROM
15762          qp_npreq_lines_tmp qplines,
15763          QP_QUALIFIERS qpq,
15764          QP_QUALIFIERS qpsq,
15765          qp_npreq_line_attrs_tmp qplat_prod,
15766          QP_PRICING_ATTRIBUTES qpa,
15767          qp_npreq_line_attrs_tmp qplat_pric,
15768          qp_npreq_line_attrs_tmp qplat_q,
15769          QP_LIST_LINES qpl,
15770          QP_LIST_HEADERS_B qph,
15771          --QP_PRICE_REQ_SOURCES qprs,
15772          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
15773          QP_CURRENCY_DETAILS QCDT   /* Vivek */
15774    WHERE QPQ.QUALIFIER_CONTEXT = G_LIST_HEADER_CONTEXT
15775    AND   QPQ.QUALIFIER_ATTRIBUTE = G_PRICELIST_ATTRIBUTE
15776    AND   QPQ.QUALIFIER_ATTR_VALUE = to_char(QPLINES.PRICE_LIST_HEADER_ID)
15777    AND   QPQ.COMPARISON_OPERATOR_CODE = '='
15778    AND   QPQ.LIST_TYPE_CODE = 'PRL'             --3965947
15779    AND   QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
15780    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
15781    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
15782    AND   (QPLINES.PRICE_FLAG = G_YES
15783           OR
15784          (QPLINES.PRICE_FLAG = G_PHASE
15785           AND
15786           P_FREEZE_OVERRIDE_FLAG = G_YES))
15787    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
15788    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
15789    AND   QPLINES.VALIDATED_FLAG = G_NO
15790    AND   (QPLINES.PRIMARY_QUALIFIERS_MATCH_FLAG = G_YES
15791           OR
15792           QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
15793           )
15794    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
15795    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
15796    AND   QPA.EXCLUDER_FLAG = G_NO
15797    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15798    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
15799    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
15800    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
15801           OR
15802           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
15803    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
15804    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15805    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
15806    AND   QPA.LIST_HEADER_ID = QPQ.LIST_HEADER_ID
15807    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
15808    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
15809 --added for moac -- commented references to security profile
15810 --security will be built into qp_list_headers_b
15811 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
15812 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
15813 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
15814    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15815            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15816            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15817    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15818            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15819            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
15820 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
15821             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
15822             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
15823             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15824                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15825                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15826    AND (   /* Vivek */
15827         (qcdt.curr_attribute_context is null   /* Vivek */
15828          and not exists   /* Vivek */
15829              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
15830 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
15831                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
15832 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
15833                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
15834                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
15835                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
15836                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
15837                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
15838                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15839                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
15840                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15841                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15842                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15843              )   /* Vivek */
15844         )   /* Vivek */
15845         OR   /* Vivek */
15846         (qcdt.curr_attribute_context is not null   /* Vivek */
15847          and qcdt.currency_detail_id =   /* Vivek */
15848              (select qcdt3.currency_detail_id
15849 	       from qp_currency_details qcdt3  /* Vivek */
15850                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
15851                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
15852                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15853                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15854                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15855                  and  qcdt3.precedence =
15856              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
15857 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
15858                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
15859 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
15860                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
15861                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
15862                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
15863                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
15864                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
15865                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
15866                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
15867                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
15868                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15869                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
15870              ))   /* Vivek */
15871         )   /* Vivek */
15872        )   /* Vivek */
15873    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
15874    --       OR
15875    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
15876    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
15877    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
15878    AND   QPH.ACTIVE_FLAG = G_YES
15879    AND   QPQ.ACTIVE_FLAG = G_YES
15880    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
15881    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
15882    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15883    AND   QPLINES.PROCESSED_CODE = G_STS_LHS_NOT_FOUND
15884    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
15885    AND   QPLAT_Q.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
15886 -- 3594459, context and attribute OR'd together
15887    AND   (QPSQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
15888           OR QPSQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
15889    AND   QPLAT_Q.CONTEXT       = QPSQ.QUALIFIER_CONTEXT
15890    AND   QPLAT_Q.ATTRIBUTE     = QPSQ.QUALIFIER_ATTRIBUTE
15891    AND   QPSQ.LIST_HEADER_ID    = QPQ.LIST_HEADER_ID
15892    AND   QPSQ.ACTIVE_FLAG = G_YES
15893    AND   ((QPLAT_Q.VALUE_FROM   = QPSQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
15894                 AND QPSQ.COMPARISON_OPERATOR_CODE = '=')
15895            OR (QPLAT_Q.VALUE_FROM  <> QPSQ.QUALIFIER_ATTR_VALUE
15896                 AND QPSQ.COMPARISON_OPERATOR_CODE = 'NOT =')
15897            OR
15898           QPSQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
15899    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
15900    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
15901          NVL(QPSQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
15902          AND NVL(QPSQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
15903    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
15904    AND   QPLAT_Q.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
15905    AND   G_QUALIFY_SECONDARY = G_YES
15906    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
15907           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPSQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
15908    ORDER BY 1,2;
15909 
15910 /*
15911 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
15912 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
15913 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
15914 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
15915 */
15916 CURSOR l_chk_deleted_pbh_cur(p_line_index IN PLS_INTEGER,
15917 					    p_pricing_phase_id NUMBER) IS
15918 SELECT 'X'
15919 FROM qp_npreq_ldets_tmp
15920 WHERE created_from_list_line_type = G_PRICE_BREAK_TYPE
15921 AND   line_index = p_line_index
15922 AND   pricing_phase_id = p_pricing_phase_id
15923 AND   pricing_status_code <> G_STATUS_NEW;
15924 
15925 l_h_line_index_tbl NUMBER_TYPE;
15926 l_h_list_line_id_tbl NUMBER_TYPE;
15927 l_h_arithmetic_operator_tbl VARCHAR_30_TYPE;
15928 l_h_operand_tbl NUMBER_TYPE;
15929 l_h_pric_group_sequence_tbl NUMBER_TYPE;
15930 l_h_list_line_type_code_tbl VARCHAR_30_TYPE;
15931 l_h_pric_phase_id_tbl NUMBER_TYPE;
15932 l_h_automatic_flag_tbl FLAG_TYPE;
15933 l_h_incompat_grp_code_tbl VARCHAR_30_TYPE;
15934 l_h_price_by_formula_id_tbl NUMBER_TYPE;
15935 l_h_prod_precedence_tbl NUMBER_TYPE;
15936 l_h_primary_uom_flag_tbl FLAG_TYPE;
15937 l_h_modifier_level_code_tbl VARCHAR_30_TYPE;
15938 l_h_list_line_no_tbl VARCHAR_30_TYPE;
15939 l_h_prod_uom_code_tbl VARCHAR_30_TYPE;
15940 l_h_excluder_flag_tbl FLAG_TYPE;
15941 l_h_list_type_code_tbl VARCHAR_30_TYPE;
15942 l_h_rounding_factor_tbl NUMBER_TYPE;
15943 l_h_line_detail_index_tbl NUMBER_TYPE;
15944 l_h_list_header_id_tbl NUMBER_TYPE;
15945 l_h_prod_attr_context_tbl VARCHAR_30_TYPE;
15946 l_h_prod_attr_tbl VARCHAR_30_TYPE;
15947 l_h_prod_attr_val_from_tbl VARCHAR_TYPE;
15948 l_h_prod_attr_level_tbl VARCHAR_30_TYPE;
15949 l_h_prod_attr_type_tbl VARCHAR_30_TYPE;
15950 l_h_applied_flag_tbl FLAG_TYPE;
15951 l_h_prod_operator_type_tbl VARCHAR_30_TYPE;
15952 l_h_pric_attr_context_tbl VARCHAR_30_TYPE;
15953 l_h_pric_attr_tbl VARCHAR_30_TYPE;
15954 l_h_pric_attr_value_from_tbl VARCHAR_TYPE;
15955 l_h_pric_setup_value_from_tbl VARCHAR_TYPE;
15956 l_h_pric_setup_value_to_tbl VARCHAR_TYPE;
15957 l_h_pric_attr_level_tbl VARCHAR_30_TYPE;
15958 l_h_pric_attr_type_tbl VARCHAR_30_TYPE;
15959 l_h_pric_operator_type_tbl VARCHAR_30_TYPE;
15960 l_h_pric_attr_datatype_tbl VARCHAR_30_TYPE;
15961 l_h_qual_attr_context_tbl VARCHAR_30_TYPE;
15962 l_h_qual_attr_tbl VARCHAR_30_TYPE;
15963 l_h_qual_attr_value_from_tbl VARCHAR_TYPE;
15964 l_h_qual_pric_attr_flag_tbl FLAG_TYPE;
15965 l_h_qual_grouping_no_tbl NUMBER_TYPE;
15966 l_h_qual_datatype_tbl VARCHAR_30_TYPE;
15967 l_h_setup_value_from_tbl VARCHAR_TYPE;
15968 l_h_setup_value_to_tbl VARCHAR_TYPE;
15969 l_h_qual_operator_type_tbl VARCHAR_30_TYPE;
15970 l_h_qual_precedence_tbl NUMBER_TYPE;
15971 l_h_break_uom_code_tbl VARCHAR_30_TYPE; /* proration */
15972 l_h_break_uom_context_tbl VARCHAR_30_TYPE; /* proration */
15973 l_h_break_uom_attr_tbl VARCHAR_30_TYPE; /* proration */
15974 l_h_qual_type_tbl VARCHAR_30_TYPE; -- 3863226
15975 l_h_derived_qualifier_flag_tbl   FLAG_TYPE; -- Added for TCA
15976 
15977 l_h_currency_detail_id_tbl NUMBER_TYPE;
15978 l_h_currency_header_id_tbl NUMBER_TYPE;
15979 l_h_sell_rounding_factor_tbl NUMBER_TYPE;
15980 l_h_order_currency_tbl VARCHAR_30_TYPE;
15981 l_h_pric_effective_date_tbl DATE_TYPE;
15982 l_h_base_currency_code_tbl VARCHAR_30_TYPE;
15983 
15984 l_loop_count          NUMBER := 0;
15985 l_list_price          NUMBER;
15986 l_percent_price       NUMBER;
15987 l_list_line_type_code VARCHAR2(30);
15988 v_list_header_id      NUMBER;
15989 l_line_detail_index   NUMBER;
15990 l_status_code         VARCHAR2(30);
15991 l_status_text         VARCHAR2(240);
15992 l_list_line_id        NUMBER;
15993 l_dummy               VARCHAR2(1);
15994 l_routine VARCHAR2(240):='QP_PREQ_GRP.SECONDARY_LIST_HEADER_SEARCH';
15995 M PLS_INTEGER:=1;
15996 D PLS_INTEGER:=1;
15997 ls_line_index         NUMBER := -9999;
15998 ls_list_line_id       NUMBER := -9999;
15999 
16000 l_use_multi_currency VARCHAR2(1);
16001 
16002 E_ROUTINE_ERRORS       EXCEPTION;
16003 BEGIN
16004 qp_debug_util.tstart('PERFORM_SECONDARY_SEARCH','Performing Secondary Price List Search');
16005 -- G_QUALIFY_SECONDARY := NVL(FND_PROFILE.VALUE('QP_QUALIFY_SECONDARY_PRICE_LISTS'),'N');--profile option
16006  -- Update the price list id , validated flag , and primary_qualifiers_match flag for sec search
16007  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN  --4033618
16008     engine_debug ('QP_QUALIFY_SECONDARY_PRICE_LISTS:' || G_QUALIFY_SECONDARY);
16009  END IF;
16010 
16011 
16012  Update_Sec_Price_List_Info(l_status_code,l_status_text);
16013  IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
16014   RAISE E_ROUTINE_ERRORS;
16015  END IF;
16016 
16017   -- julin [3805113]: prepare global tables for INSERT_LDETS2
16018   G_LINE_DETAIL_INDEX_TBL.delete;
16019   G_LINE_DETAIL_TYPE_CODE_TBL.delete;
16020   G_LINE_INDEX_TBL.delete;
16021   G_LIST_HEADER_ID_TBL.delete;
16022   G_LIST_LINE_ID_TBL.delete;
16023   G_LIST_LINE_TYPE_TBL.delete;
16024   G_CREATED_FROM_SQL_TBL.delete;
16025   G_PRICING_GROUP_SEQUENCE_TBL.delete;
16026   G_OPERAND_CALCULATION_CODE_TBL.delete;
16027   G_OPERAND_VALUE_TBL.delete;
16028   G_PRICING_PHASE_ID_TBL.delete;
16029   G_LIST_TYPE_CODE_TBL.delete;
16030   G_PRICING_STATUS_CODE_TBL.delete;
16031   G_PROCESSED_FLAG_TBL.delete;
16032   G_AUTOMATIC_FLAG_TBL.delete;
16033   G_MODIFIER_LEVEL_CODE_TBL.delete;
16034   G_LIST_LINE_NO_TBL.delete;
16035   G_INCOMP_GRP_CODE_TBL.delete;
16036   G_PRICE_FORMULA_ID_TBL.delete;
16037   G_PRODUCT_PRECEDENCE_TBL.delete;
16038   G_PRIMARY_UOM_FLAG_TBL.delete;
16039   G_ROUNDING_FACTOR_TBL.delete;
16040   G_SECONDARY_PRICELIST_IND_TBL.delete;
16041   G_CURRENCY_DETAIL_ID_TBL.delete;
16042   G_CURRENCY_HEADER_ID_TBL.delete;
16043   G_SELLING_ROUNDING_TBL.delete;
16044   G_ORDER_CURRENCY_TBL.delete;
16045   G_PRICING_EFFECTIVE_DATE_TBL.delete;
16046   G_BASE_CURRENCY_CODE_TBL.delete;
16047   G_BREAK_UOM_TBL.delete;
16048   G_BREAK_CONTEXT_TBL.delete;
16049   G_BREAK_ATTRIBUTE_TBL.delete;
16050 
16051   -- julin [3805113]: prepare global tables for INSERT_PRICE_LIST_ATTRS
16052   G_LINE_INDEX_TBL_A.delete;
16053   G_LINE_DETAIL_INDEX_TBL_A.delete;
16054   G_ATTRIBUTE_LEVEL_tbl.delete;
16055   G_ATTRIBUTE_TYPE_tbl.delete;
16056   G_LIST_HEADER_ID_TBL_A.delete;
16057   G_LIST_LINE_ID_TBL_A.delete;
16058   G_CONTEXT_tbl.delete;
16059   G_ATTRIBUTE_tbl.delete;
16060   G_VALUE_FROM_tbl.delete;
16061   G_SETUP_VALUE_FROM_tbl.delete;
16062   G_SETUP_VALUE_TO_tbl.delete;
16063   G_GROUPING_NUMBER_tbl.delete;
16064   G_COMPARISON_OPERATOR_TYPE_tbl.delete;
16065   G_VALIDATED_FLAG_tbl.delete;
16066   G_APPLIED_FLAG_tbl.delete;
16067   G_PRICING_STATUS_CODE_TBL_Q.delete;
16068   G_PRICING_STATUS_TEXT_tbl.delete;
16069   G_QUALIFIER_PRECEDENCE_TBL.delete;
16070   G_DATATYPE_tbl.delete;
16071   G_PRICING_ATTR_FLAG_tbl.delete;
16072   G_QUALIFIER_TYPE_TBL.delete;
16073   G_PRODUCT_UOM_CODE_TBL.delete;
16074   G_EXCLUDER_FLAG_TBL.delete;
16075   G_PRICING_PHASE_ID_TBL_A.delete;
16076   G_INCOMP_GRP_CODE_TBL_A.delete;
16077   G_LINE_DETAIL_TYPE_CODE_TBL_A.delete;
16078   G_MODIFIER_LEVEL_CODE_TBL_A.delete;
16079   G_PRIMARY_UOM_FLAG_TBL_A.delete;
16080 
16081   -- julin [3805113]: bulk fetch
16082   IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
16083     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16084     engine_debug('cursor l_sec_list_cur_currency-multi-currency TRUE');
16085     END IF;
16086     l_use_multi_currency := 'Y';
16087     OPEN l_sec_list_cur_currency;
16088   ELSE
16089     l_use_multi_currency := 'N';
16090     OPEN l_sec_list_cur;
16091   END IF;
16092 
16093   LOOP
16094     IF l_use_multi_currency = 'Y' THEN
16095       FETCH l_sec_list_cur_currency BULK COLLECT INTO
16096          l_h_line_index_tbl,
16097          l_h_list_line_id_tbl,
16098          l_h_arithmetic_operator_tbl,
16099          l_h_operand_tbl,
16100          l_h_pric_group_sequence_tbl,
16101          l_h_list_line_type_code_tbl,
16102          l_h_pric_phase_id_tbl,
16103          l_h_automatic_flag_tbl,
16104          l_h_incompat_grp_code_tbl,
16105          l_h_price_by_formula_id_tbl,
16106          l_h_prod_precedence_tbl,
16107          l_h_primary_uom_flag_tbl,
16108          l_h_modifier_level_code_tbl,
16109          l_h_list_line_no_tbl,
16110          l_h_prod_uom_code_tbl,
16111          l_h_excluder_flag_tbl,
16112          l_h_list_type_code_tbl,
16113          l_h_rounding_factor_tbl,
16114          l_h_line_detail_index_tbl,
16115          l_h_list_header_id_tbl,
16116          l_h_prod_attr_context_tbl,
16117          l_h_prod_attr_tbl,
16118          l_h_prod_attr_val_from_tbl,
16119          l_h_prod_attr_level_tbl,
16120          l_h_prod_attr_type_tbl,
16121          l_h_applied_flag_tbl,
16122          l_h_prod_operator_type_tbl,
16123          l_h_pric_attr_context_tbl,
16124          l_h_pric_attr_tbl,
16125          l_h_pric_attr_value_from_tbl,
16126          l_h_pric_setup_value_from_tbl,
16127          l_h_pric_setup_value_to_tbl,
16128          l_h_pric_attr_level_tbl,
16129          l_h_pric_attr_type_tbl,
16130          l_h_pric_operator_type_tbl,
16131          l_h_pric_attr_datatype_tbl,
16132          l_h_qual_attr_context_tbl,
16133          l_h_qual_attr_tbl,
16134          l_h_qual_attr_value_from_tbl,
16135          l_h_qual_pric_attr_flag_tbl,
16136          l_h_qual_grouping_no_tbl,
16137          l_h_qual_datatype_tbl,
16138          l_h_setup_value_from_tbl,
16139          l_h_setup_value_to_tbl,
16140          l_h_qual_operator_type_tbl,
16141          l_h_qual_precedence_tbl,
16142          l_h_currency_detail_id_tbl,
16143          l_h_currency_header_id_tbl,
16144          l_h_sell_rounding_factor_tbl,
16145          l_h_order_currency_tbl,
16146          l_h_pric_effective_date_tbl,
16147          l_h_base_currency_code_tbl,
16148          l_h_break_uom_code_tbl,
16149          l_h_break_uom_context_tbl,
16150          l_h_break_uom_attr_tbl,
16151          l_h_qual_type_tbl,
16152          l_h_derived_qualifier_flag_tbl    -- Added for TCA
16153          LIMIT G_BATCH_SIZE_1;
16154       EXIT WHEN l_h_line_index_tbl.COUNT = 0;
16155 
16156       FOR I in l_h_line_index_tbl.first .. l_h_line_index_tbl.last
16157       LOOP
16158         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16159           engine_debug('item found in secondary list');
16160         END IF;
16161         IF (ls_line_index <> l_h_line_index_tbl(I) OR ls_list_line_id <> l_h_list_line_id_tbl(I)) THEN
16162           l_line_detail_index := GET_LINE_DETAIL_INDEX;
16163           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16164             engine_debug('Inserting Secondary Price List Detail');
16165           END IF;
16166           G_LINE_DETAIL_INDEX_TBL(D)           := l_line_detail_index;
16167           G_LINE_DETAIL_TYPE_CODE_TBL(D)       := 'NULL';
16168           G_LINE_INDEX_TBL(D)                  := l_h_LINE_INDEX_tbl(I);
16169           G_LIST_HEADER_ID_TBL(D)              := l_h_LIST_HEADER_ID_tbl(I);
16170           G_LIST_LINE_ID_TBL(D)                := l_h_LIST_LINE_ID_tbl(I);
16171           G_LIST_LINE_TYPE_TBL(D)              := l_h_LIST_LINE_TYPE_CODE_tbl(I);
16172           G_CREATED_FROM_SQL_TBL(D)            := 'LHS_SECONDARY_PRICE_LIST'  ; -- nth sec price list
16173           G_PRICING_GROUP_SEQUENCE_TBL(D)      := l_h_pric_GROUP_SEQUENCE_tbl(I);
16174           G_OPERAND_CALCULATION_CODE_TBL(D)    := l_h_ARITHMETIC_OPERATOR_tbl(I);
16175           G_OPERAND_VALUE_TBL(D)               := l_h_OPERAND_tbl(I);
16176           G_PRICING_PHASE_ID_TBL(D)            := l_h_pric_PHASE_ID_tbl(I);
16177           G_LIST_TYPE_CODE_TBL(D)              := l_h_LIST_TYPE_CODE_tbl(I);
16178           G_PRICING_STATUS_CODE_TBL(D)         := G_STATUS_NEW;
16179           G_PROCESSED_FLAG_TBL(D)              := G_NOT_PROCESSED;
16180           G_AUTOMATIC_FLAG_TBL(D)              := l_h_AUTOMATIC_FLAG_tbl(I);
16181           G_MODIFIER_LEVEL_CODE_TBL(D)         := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16182           G_LIST_LINE_NO_TBL(D)                := l_h_LIST_LINE_NO_tbl(I);
16183           G_INCOMP_GRP_CODE_TBL(D)             := l_h_INCOMPAT_GRP_CODE_tbl(I);
16184           G_PRICE_FORMULA_ID_TBL(D)            := l_h_PRICE_BY_FORMULA_ID_tbl(I);
16185           G_PRODUCT_PRECEDENCE_TBL(D)          := l_h_prod_PRECEDENCE_tbl(I);
16186           G_PRIMARY_UOM_FLAG_TBL(D)            := l_h_PRIMARY_UOM_FLAG_tbl(I);
16187           G_ROUNDING_FACTOR_TBL(D)             := l_h_ROUNDING_FACTOR_tbl(I);
16188           G_SECONDARY_PRICELIST_IND_TBL(D)     := G_YES;
16189           G_CURRENCY_DETAIL_ID_TBL(D)          := l_h_CURRENCY_DETAIL_ID_tbl(I); /*vivek */
16190           G_CURRENCY_HEADER_ID_TBL(D)          := l_h_CURRENCY_HEADER_ID_tbl(I); /*vivek */
16191           G_SELLING_ROUNDING_TBL(D)            := l_h_SELL_ROUNDING_FACTOR_tbl(I); /*vivek */
16192           G_ORDER_CURRENCY_TBL(D)              := l_h_ORDER_CURRENCY_tbl(I); /*vivek */
16193           G_PRICING_EFFECTIVE_DATE_TBL(D)      := l_h_pric_EFFECTIVE_DATE_tbl(I);/*vivek */
16194           G_BASE_CURRENCY_CODE_TBL(D)          := l_h_BASE_CURRENCY_CODE_tbl(I);/*vivek */
16195           G_BREAK_UOM_TBL(D)                   := l_h_BREAK_UOM_CODE_tbl(I); /* Proration */
16196           G_BREAK_CONTEXT_TBL(D)               := l_h_BREAK_UOM_CONTEXT_tbl(I); /* Proration */
16197           G_BREAK_ATTRIBUTE_TBL(D)             := l_h_BREAK_UOM_ATTR_tbl(I); /* Proration */
16198           D := D + 1;
16199 
16200           ls_line_index := l_h_line_index_tbl(I);
16201           ls_list_line_id := l_h_list_line_id_tbl(I);
16202         END IF;
16203 
16204         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16205           engine_debug('----BEFORE INSERTING SECONDARY PRODUCT ATTRS -------');
16206           engine_debug('Qualifier Precedence : ' || l_h_qual_precedence_tbl(I));
16207         END IF;
16208 
16209         --INSERT PRODUCT ATTRIBUTES
16210         G_LINE_INDEX_TBL_A(M)              := l_h_LINE_INDEX_tbl(I);
16211         G_LINE_DETAIL_INDEX_TBL_A(M)       := L_LINE_DETAIL_INDEX;
16212         G_ATTRIBUTE_LEVEL_tbl(M)           := l_h_prod_ATTR_LEVEL_tbl(I);
16213         G_ATTRIBUTE_TYPE_tbl(M)            := l_h_prod_ATTR_TYPE_tbl(I);
16214         G_LIST_HEADER_ID_TBL_A(M)            := l_h_LIST_HEADER_ID_tbl(I);
16215         G_LIST_LINE_ID_TBL_A(M)              := l_h_LIST_LINE_ID_tbl(I);
16216         G_CONTEXT_tbl(M)                   := l_h_prod_ATTR_CONTEXT_tbl(I);
16217         G_ATTRIBUTE_tbl(M)                 := l_h_prod_ATTR_tbl(I);
16218         G_VALUE_FROM_tbl(M)                := l_h_prod_attr_val_from_tbl(I);
16219         G_SETUP_VALUE_FROM_tbl(M)          := NULL;
16220         G_SETUP_VALUE_TO_tbl(M)            := NULL;
16221         G_GROUPING_NUMBER_tbl(M)           := NULL;
16222         G_COMPARISON_OPERATOR_TYPE_tbl(M)  := l_h_prod_OPERATOR_TYPE_tbl(I);
16223         G_VALIDATED_FLAG_tbl(M)            := NULL;
16224         G_APPLIED_FLAG_tbl(M)              := l_h_APPLIED_FLAG_tbl(I);
16225         G_PRICING_STATUS_CODE_TBL_Q(M)     := G_STATUS_NEW;
16226         G_PRICING_STATUS_TEXT_tbl(M)       := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16227         G_QUALIFIER_PRECEDENCE_TBL(M)      := l_h_qual_PRECEDENCE_tbl(I);
16228         G_DATATYPE_tbl(M)                  := NULL;
16229         G_PRICING_ATTR_FLAG_tbl(M)         := NULL;
16230         G_QUALIFIER_TYPE_TBL(M)            := NULL;
16231         G_PRODUCT_UOM_CODE_TBL(M)          := l_h_prod_UOM_CODE_tbl(I);
16232         G_EXCLUDER_FLAG_TBL(M)             := l_h_EXCLUDER_FLAG_tbl(I);
16233         G_PRICING_PHASE_ID_TBL_A(M)        := l_h_pric_PHASE_ID_tbl(I);
16234         G_INCOMP_GRP_CODE_TBL_A(M)         := l_h_INCOMPAT_GRP_CODE_tbl(I);
16235         G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
16236         G_MODIFIER_LEVEL_CODE_TBL_A(M)     := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16237         G_PRIMARY_UOM_FLAG_TBL_A(M)        := l_h_PRIMARY_UOM_FLAG_tbl(I);
16238         M:= M+1;
16239 
16240         --INSERT PRICING ATTRIBUTES
16241         IF (l_h_pric_ATTR_CONTEXT_tbl(I) IS NOT NULL) THEN
16242           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16243             engine_debug('----BEFORE INSERTING SECONDARY PRICING ATTRS -------');
16244           END IF;
16245           G_LINE_INDEX_TBL_A(M)            := l_h_LINE_INDEX_tbl(I);
16246           G_LINE_DETAIL_INDEX_TBL_A(M)     := L_LINE_DETAIL_INDEX;
16247           G_ATTRIBUTE_LEVEL_tbl(M)         := l_h_pric_ATTR_LEVEL_tbl(I);
16248           G_ATTRIBUTE_TYPE_tbl(M)          := l_h_pric_ATTR_TYPE_tbl(I);
16249           G_LIST_HEADER_ID_TBL_A(M)          := l_h_LIST_HEADER_ID_tbl(I);
16250           G_LIST_LINE_ID_TBL_A(M)            := l_h_LIST_LINE_ID_tbl(I);
16251           G_CONTEXT_tbl(M)                 := l_h_pric_ATTR_CONTEXT_tbl(I);
16252           G_ATTRIBUTE_tbl(M)               := l_h_pric_ATTR_tbl(I);
16253           G_VALUE_FROM_tbl(M)              := l_h_pric_ATTR_VALUE_FROM_tbl(I);
16254           G_SETUP_VALUE_FROM_tbl(M)        := l_h_pric_SETUP_VALUE_FROM_tbl(I);
16255           G_SETUP_VALUE_TO_tbl(M)          := l_h_pric_SETUP_VALUE_TO_tbl(I);
16256           G_GROUPING_NUMBER_tbl(M)         := NULL;
16257           G_COMPARISON_OPERATOR_TYPE_tbl(M):= l_h_pric_OPERATOR_TYPE_tbl(I);
16258           G_VALIDATED_FLAG_tbl(M)          := NULL;
16259           G_APPLIED_FLAG_tbl(M)            := l_h_APPLIED_FLAG_tbl(I);
16260           G_PRICING_STATUS_CODE_TBL_Q(M)   := G_STATUS_NEW;
16261           G_PRICING_STATUS_TEXT_tbl(M)     := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16262           G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
16263           G_DATATYPE_tbl(M)                := l_h_pric_ATTR_DATATYPE_tbl(I);
16264           G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
16265           G_QUALIFIER_TYPE_TBL(M)          := NULL;
16266           G_PRODUCT_UOM_CODE_TBL(M)        := l_h_prod_UOM_CODE_tbl(I);
16267           G_EXCLUDER_FLAG_TBL(M)           := l_h_EXCLUDER_FLAG_tbl(I);
16268           G_PRICING_PHASE_ID_TBL_A(M)      := l_h_pric_PHASE_ID_tbl(I);
16269           G_INCOMP_GRP_CODE_TBL_A(M)       := l_h_INCOMPAT_GRP_CODE_tbl(I);
16270           G_LINE_DETAIL_TYPE_CODE_TBL_A(M) := 'NULL';
16271           G_MODIFIER_LEVEL_CODE_TBL_A(M)   := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16272           G_PRIMARY_UOM_FLAG_TBL_A(M)      := l_h_PRIMARY_UOM_FLAG_tbl(I);
16273           M:= M+1;
16274         END IF;
16275 
16276         --INSERT QUALIFIER ATTRIBUTES
16277         IF (l_h_qual_ATTR_CONTEXT_tbl(I) IS NOT NULL) AND (G_QUALIFY_SECONDARY = G_YES) THEN
16278           G_LINE_INDEX_TBL_A(M)            := l_h_LINE_INDEX_tbl(I);
16279           G_LINE_DETAIL_INDEX_TBL_A(M)     := L_LINE_DETAIL_INDEX;
16280           G_ATTRIBUTE_LEVEL_tbl(M)         := NVL(l_h_prod_ATTR_LEVEL_tbl(I),'X');
16281           G_ATTRIBUTE_TYPE_tbl(M)          := G_QUALIFIER_TYPE;
16282           G_CONTEXT_tbl(M)                 := l_h_qual_ATTR_CONTEXT_tbl(I);
16283           G_ATTRIBUTE_tbl(M)               := l_h_qual_ATTR_tbl(I);
16284           G_VALUE_FROM_tbl(M)              := l_h_qual_ATTR_VALUE_FROM_tbl(I);
16285           G_COMPARISON_OPERATOR_TYPE_tbl(M):= l_h_pric_OPERATOR_TYPE_tbl(I);
16286           G_APPLIED_FLAG_tbl(M)            := l_h_APPLIED_FLAG_tbl(I);
16287           G_PRICING_STATUS_CODE_TBL_Q(M)   := G_STATUS_NEW;
16288           G_LIST_HEADER_ID_tbl_A(M)          := l_h_LIST_HEADER_ID_tbl(I);
16289           G_LIST_LINE_ID_tbl_A(M)            := l_h_LIST_LINE_ID_tbl(I);
16290           G_SETUP_VALUE_FROM_tbl(M)        := l_h_SETUP_VALUE_FROM_tbl(I);
16291           G_SETUP_VALUE_TO_tbl(M)          := l_h_SETUP_VALUE_TO_tbl(I);
16292           G_GROUPING_NUMBER_tbl(M)         := l_h_qual_GROUPING_NO_tbl(I);
16293           G_PRICING_STATUS_TEXT_tbl(M)     := 'INSERTED IN L_SEC_LIST_CUR_CURRENCY';
16294           G_QUALIFIER_PRECEDENCE_tbl(M)    := l_h_qual_PRECEDENCE_tbl(I);
16295           G_DATATYPE_tbl(M)                := l_h_qual_DATATYPE_tbl(I);
16296           G_EXCLUDER_FLAG_TBL(M)           := l_h_EXCLUDER_FLAG_tbl(I);
16297           G_PRODUCT_UOM_CODE_TBL(M)        := l_h_prod_UOM_CODE_tbl(I);
16298           G_QUALIFIER_TYPE_TBL(M)          := l_h_qual_TYPE_tbl(I);
16299           G_VALIDATED_FLAG_tbl(M)          := G_NO;
16300           G_PRICING_ATTR_FLAG_tbl(M)       := G_NO;
16301           G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
16302           G_VALUE_TO_tbl(M)                := NULL;
16303           G_PRICING_PHASE_ID_TBL_A(M)      := l_h_pric_PHASE_ID_tbl(I);
16304           G_INCOMP_GRP_CODE_TBL_A(M)       := l_h_INCOMPAT_GRP_CODE_tbl(I);
16305           G_LINE_DETAIL_TYPE_CODE_TBL_A(M) := 'NULL';
16306           G_MODIFIER_LEVEL_CODE_TBL_A(M)   := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16307           G_PRIMARY_UOM_FLAG_TBL_A(M)      := l_h_PRIMARY_UOM_FLAG_tbl(I);
16308           M:= M+1;
16309         END IF;
16310 
16311         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16312           engine_debug('AFTER END IF SECONDARY PRICE_LIST');
16313         END IF;
16314         l_loop_count := l_loop_count +1;
16315       END LOOP; -- K
16316 
16317     else -- vivek, multi currency not installed, not used
16318 
16319       -- julin [3805113]: bulk fetch
16320       FETCH l_sec_list_cur BULK COLLECT INTO
16321          l_h_line_index_tbl,
16322          l_h_list_line_id_tbl,
16323          l_h_arithmetic_operator_tbl,
16324          l_h_operand_tbl,
16325          l_h_pric_group_sequence_tbl,
16326          l_h_list_line_type_code_tbl,
16327          l_h_pric_phase_id_tbl,
16328          l_h_automatic_flag_tbl,
16329          l_h_incompat_grp_code_tbl,
16330          l_h_price_by_formula_id_tbl,
16331          l_h_prod_precedence_tbl,
16332          l_h_primary_uom_flag_tbl,
16333          l_h_modifier_level_code_tbl,
16334          l_h_list_line_no_tbl,
16335          l_h_prod_uom_code_tbl,
16336          l_h_excluder_flag_tbl,
16337          l_h_list_type_code_tbl,
16338          l_h_rounding_factor_tbl,
16339          l_h_line_detail_index_tbl,
16340          l_h_list_header_id_tbl,
16341          l_h_prod_attr_context_tbl,
16342          l_h_prod_attr_tbl,
16343          l_h_prod_attr_val_from_tbl,
16344          l_h_prod_attr_level_tbl,
16345          l_h_prod_attr_type_tbl,
16346          l_h_applied_flag_tbl,
16347          l_h_prod_operator_type_tbl,
16348          l_h_pric_attr_context_tbl,
16349          l_h_pric_attr_tbl,
16350          l_h_pric_attr_value_from_tbl,
16351          l_h_pric_setup_value_from_tbl,
16352          l_h_pric_setup_value_to_tbl,
16353          l_h_pric_attr_level_tbl,
16354          l_h_pric_attr_type_tbl,
16355          l_h_pric_operator_type_tbl,
16356          l_h_pric_attr_datatype_tbl,
16357          l_h_qual_attr_context_tbl,
16358          l_h_qual_attr_tbl,
16359          l_h_qual_attr_value_from_tbl,
16360          l_h_qual_pric_attr_flag_tbl,
16361          l_h_qual_grouping_no_tbl,
16362          l_h_qual_datatype_tbl,
16363          l_h_setup_value_from_tbl,
16364          l_h_setup_value_to_tbl,
16365          l_h_qual_operator_type_tbl,
16366          l_h_qual_precedence_tbl,
16367          l_h_break_uom_code_tbl,
16368          l_h_break_uom_context_tbl,
16369          l_h_break_uom_attr_tbl,
16370          l_h_qual_type_tbl,
16371          l_h_derived_qualifier_flag_tbl    -- Added for TCA
16372          LIMIT G_BATCH_SIZE_1;
16373       EXIT WHEN l_h_line_index_tbl.COUNT = 0;
16374 
16375       FOR I in l_h_line_index_tbl.first .. l_h_line_index_tbl.last
16376       LOOP
16377         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16378           engine_debug('item found in secondary list');
16379         END IF;
16380 
16381         IF (ls_line_index <> l_h_line_index_tbl(I) OR ls_list_line_id <> l_h_list_line_id_tbl(I)) THEN
16382           l_line_detail_index := GET_LINE_DETAIL_INDEX;
16383           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16384             engine_debug('Inserting Secondary Price List Detail');
16385           END IF;
16386           G_LINE_DETAIL_INDEX_TBL(D)           := l_line_detail_index;
16387           G_LINE_DETAIL_TYPE_CODE_TBL(D)       := 'NULL';
16388           G_LINE_INDEX_TBL(D)                  := l_h_LINE_INDEX_tbl(I);
16389           G_LIST_HEADER_ID_TBL(D)              := l_h_LIST_HEADER_ID_tbl(I);
16390           G_LIST_LINE_ID_TBL(D)                := l_h_LIST_LINE_ID_tbl(I);
16391           G_LIST_LINE_TYPE_TBL(D)              := l_h_LIST_LINE_TYPE_CODE_tbl(I);
16392           G_CREATED_FROM_SQL_TBL(D)            := 'LHS_SECONDARY_PRICE_LIST'  ; -- nth sec price list
16393           G_PRICING_GROUP_SEQUENCE_TBL(D)      := l_h_pric_GROUP_SEQUENCE_tbl(I);
16394           G_OPERAND_CALCULATION_CODE_TBL(D)    := l_h_ARITHMETIC_OPERATOR_tbl(I);
16395           G_OPERAND_VALUE_TBL(D)               := l_h_OPERAND_tbl(I);
16396           G_PRICING_PHASE_ID_TBL(D)            := l_h_pric_PHASE_ID_tbl(I);
16397           G_LIST_TYPE_CODE_TBL(D)              := l_h_LIST_TYPE_CODE_tbl(I);
16398           G_PRICING_STATUS_CODE_TBL(D)         := G_STATUS_NEW;
16399           G_PROCESSED_FLAG_TBL(D)              := G_NOT_PROCESSED;
16400           G_AUTOMATIC_FLAG_TBL(D)              := l_h_AUTOMATIC_FLAG_tbl(I);
16401           G_MODIFIER_LEVEL_CODE_TBL(D)         := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16402           G_LIST_LINE_NO_TBL(D)                := l_h_LIST_LINE_NO_tbl(I);
16403           G_INCOMP_GRP_CODE_TBL(D)             := l_h_INCOMPAT_GRP_CODE_tbl(I);
16404           G_PRICE_FORMULA_ID_TBL(D)            := l_h_PRICE_BY_FORMULA_ID_tbl(I);
16405           G_PRODUCT_PRECEDENCE_TBL(D)          := l_h_prod_PRECEDENCE_tbl(I);
16406           G_PRIMARY_UOM_FLAG_TBL(D)            := l_h_PRIMARY_UOM_FLAG_tbl(I);
16407           G_ROUNDING_FACTOR_TBL(D)             := l_h_ROUNDING_FACTOR_tbl(I);
16408           G_SECONDARY_PRICELIST_IND_TBL(D)     := G_YES;
16409           G_CURRENCY_DETAIL_ID_TBL(D)          := null;
16410           G_CURRENCY_HEADER_ID_TBL(D)          := null;
16411           G_SELLING_ROUNDING_TBL(D)            := null;
16412           G_ORDER_CURRENCY_TBL(D)              := null;
16413           G_PRICING_EFFECTIVE_DATE_TBL(D)      := null;
16414           G_BASE_CURRENCY_CODE_TBL(D)          := null;
16415           G_BREAK_UOM_TBL(D)                   := l_h_BREAK_UOM_CODE_tbl(I); /* Proration */
16416           G_BREAK_CONTEXT_TBL(D)               := l_h_BREAK_UOM_CONTEXT_tbl(I); /* Proration */
16417           G_BREAK_ATTRIBUTE_TBL(D)             := l_h_BREAK_UOM_ATTR_tbl(I); /* Proration */
16418           D := D + 1;
16419 
16420           ls_line_index := l_h_line_index_tbl(I);
16421           ls_list_line_id := l_h_list_line_id_tbl(I);
16422         END IF;
16423 
16424 
16425         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16426           engine_debug('----BEFORE INSERTING SECONDARY PRODUCT ATTRS -------');
16427           engine_debug('Qualifier Precedence : ' || l_h_qual_precedence_tbl(I));
16428         END IF;
16429 
16430         --INSERT PRODUCT ATTRIBUTES
16431         G_LINE_INDEX_TBL_A(M)              := l_h_LINE_INDEX_tbl(I);
16432         G_LINE_DETAIL_INDEX_TBL_A(M)       := L_LINE_DETAIL_INDEX;
16433         G_ATTRIBUTE_LEVEL_tbl(M)           := l_h_prod_ATTR_LEVEL_tbl(I);
16434         G_ATTRIBUTE_TYPE_tbl(M)            := l_h_prod_ATTR_TYPE_tbl(I);
16435         G_LIST_HEADER_ID_TBL_A(M)            := l_h_LIST_HEADER_ID_tbl(I);
16436         G_LIST_LINE_ID_TBL_A(M)              := l_h_LIST_LINE_ID_tbl(I);
16437         G_CONTEXT_tbl(M)                   := l_h_prod_ATTR_CONTEXT_tbl(I);
16438         G_ATTRIBUTE_tbl(M)                 := l_h_prod_ATTR_tbl(I);
16439         G_VALUE_FROM_tbl(M)                := l_h_prod_attr_val_from_tbl(I);
16440         G_SETUP_VALUE_FROM_tbl(M)          := NULL;
16441         G_SETUP_VALUE_TO_tbl(M)            := NULL;
16442         G_GROUPING_NUMBER_tbl(M)           := NULL;
16443         G_COMPARISON_OPERATOR_TYPE_tbl(M)  := l_h_prod_OPERATOR_TYPE_tbl(I);
16444         G_VALIDATED_FLAG_tbl(M)            := NULL;
16445         G_APPLIED_FLAG_tbl(M)              := l_h_APPLIED_FLAG_tbl(I);
16446         G_PRICING_STATUS_CODE_TBL_Q(M)     := G_STATUS_NEW;
16447         G_PRICING_STATUS_TEXT_tbl(M)       := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16448         G_QUALIFIER_PRECEDENCE_TBL(M)      := l_h_qual_PRECEDENCE_tbl(I);
16449         G_DATATYPE_tbl(M)                  := NULL;
16450         G_PRICING_ATTR_FLAG_tbl(M)         := NULL;
16451         G_QUALIFIER_TYPE_TBL(M)            := NULL;
16452         G_PRODUCT_UOM_CODE_TBL(M)          := l_h_prod_UOM_CODE_tbl(I);
16453         G_EXCLUDER_FLAG_TBL(M)             := l_h_EXCLUDER_FLAG_tbl(I);
16454         G_PRICING_PHASE_ID_TBL_A(M)        := l_h_pric_PHASE_ID_tbl(I);
16455         G_INCOMP_GRP_CODE_TBL_A(M)         := l_h_INCOMPAT_GRP_CODE_tbl(I);
16456         G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
16457         G_MODIFIER_LEVEL_CODE_TBL_A(M)     := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16458         G_PRIMARY_UOM_FLAG_TBL_A(M)        := l_h_PRIMARY_UOM_FLAG_tbl(I);
16459         M:= M+1;
16460 
16461         --INSERT PRICING ATTRIBUTES
16462         IF (l_h_pric_ATTR_CONTEXT_tbl(I) IS NOT NULL) THEN
16463           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16464             engine_debug('----BEFORE INSERTING SECONDARY PRICING ATTRS -------');
16465           END IF;
16466           G_LINE_INDEX_TBL_A(M)              := l_h_LINE_INDEX_tbl(I);
16467           G_LINE_DETAIL_INDEX_TBL_A(M)       := L_LINE_DETAIL_INDEX;
16468           G_ATTRIBUTE_LEVEL_tbl(M)           := l_h_pric_ATTR_LEVEL_tbl(I);
16469           G_ATTRIBUTE_TYPE_tbl(M)            := l_h_pric_ATTR_TYPE_tbl(I);
16470           G_LIST_HEADER_ID_TBL_A(M)            := l_h_LIST_HEADER_ID_tbl(I);
16471           G_LIST_LINE_ID_TBL_A(M)              := l_h_LIST_LINE_ID_tbl(I);
16472           G_CONTEXT_tbl(M)                   := l_h_pric_ATTR_CONTEXT_tbl(I);
16473           G_ATTRIBUTE_tbl(M)                 := l_h_pric_ATTR_tbl(I);
16474           G_VALUE_FROM_tbl(M)                := l_h_pric_ATTR_VALUE_FROM_tbl(I);
16475           G_SETUP_VALUE_FROM_tbl(M)          := l_h_pric_SETUP_VALUE_FROM_tbl(I);
16476           G_SETUP_VALUE_TO_tbl(M)            := l_h_pric_SETUP_VALUE_TO_tbl(I);
16477           G_COMPARISON_OPERATOR_TYPE_tbl(M)  := l_h_pric_OPERATOR_TYPE_tbl(I);
16478           G_VALIDATED_FLAG_tbl(M)            := NULL;
16479           G_APPLIED_FLAG_tbl(M)              := l_h_APPLIED_FLAG_tbl(I);
16480           G_PRICING_STATUS_CODE_TBL_Q(M)     := G_STATUS_NEW;
16481           G_PRICING_STATUS_TEXT_tbl(M)       := 'INSERTED IN SECONDARY LIST HEADER SEARCH';
16482           G_QUALIFIER_PRECEDENCE_tbl(M)      := NULL;
16483           G_DATATYPE_tbl(M)                  := l_h_pric_ATTR_DATATYPE_tbl(I);
16484           G_PRICING_ATTR_FLAG_tbl(M)         := NULL;
16485           G_QUALIFIER_TYPE_TBL(M)            := NULL;
16486           G_PRODUCT_UOM_CODE_TBL(M)          := l_h_prod_UOM_CODE_tbl(I);
16487           G_EXCLUDER_FLAG_TBL(M)             := l_h_EXCLUDER_FLAG_tbl(I);
16488           G_GROUPING_NUMBER_tbl(M)           := NULL;
16489           G_PRICING_PHASE_ID_TBL_A(M)        := l_h_pric_PHASE_ID_tbl(I);
16490           G_INCOMP_GRP_CODE_TBL_A(M)         := l_h_INCOMPAT_GRP_CODE_tbl(I);
16491           G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
16492           G_MODIFIER_LEVEL_CODE_TBL_A(M)     := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16493           G_PRIMARY_UOM_FLAG_TBL_A(M)        := l_h_PRIMARY_UOM_FLAG_tbl(I);
16494           M:= M+1;
16495         END IF;
16496 
16497         --INSERT QUALIFIER ATTRIBUTES
16498         IF (l_h_qual_ATTR_CONTEXT_tbl(I) IS NOT NULL) AND (G_QUALIFY_SECONDARY = G_YES) THEN
16499           G_LINE_INDEX_TBL_A(M)            := l_h_LINE_INDEX_tbl(I);
16500           G_LINE_DETAIL_INDEX_TBL_A(M)     := L_LINE_DETAIL_INDEX;
16501           G_ATTRIBUTE_LEVEL_tbl(M)         := NVL(l_h_prod_ATTR_LEVEL_tbl(I),'X');
16502           G_ATTRIBUTE_TYPE_tbl(M)          := G_QUALIFIER_TYPE;
16503           G_CONTEXT_tbl(M)                 := l_h_qual_ATTR_CONTEXT_tbl(I);
16504           G_ATTRIBUTE_tbl(M)               := l_h_qual_ATTR_tbl(I);
16505           G_VALUE_FROM_tbl(M)              := l_h_qual_ATTR_VALUE_FROM_tbl(I);
16506           G_COMPARISON_OPERATOR_TYPE_tbl(M):= l_h_pric_OPERATOR_TYPE_tbl(I);
16507           G_APPLIED_FLAG_tbl(M)            := l_h_APPLIED_FLAG_tbl(I);
16508           G_PRICING_STATUS_CODE_TBL_Q(M)   := G_STATUS_NEW;
16509           G_LIST_HEADER_ID_tbl_A(M)          := l_h_LIST_HEADER_ID_tbl(I);
16510           G_LIST_LINE_ID_tbl_A(M)            := l_h_LIST_LINE_ID_tbl(I);
16511           G_SETUP_VALUE_FROM_tbl(M)        := l_h_SETUP_VALUE_FROM_tbl(I);
16512           G_SETUP_VALUE_TO_tbl(M)          := l_h_SETUP_VALUE_TO_tbl(I);
16513           G_GROUPING_NUMBER_tbl(M)         := l_h_qual_GROUPING_NO_tbl(I);
16514           G_PRICING_STATUS_TEXT_tbl(M)     := 'INSERTED IN L_SEC_LIST_CUR';
16515           G_QUALIFIER_PRECEDENCE_tbl(M)    := l_h_qual_PRECEDENCE_tbl(I);
16516           G_DATATYPE_tbl(M)                := l_h_qual_DATATYPE_tbl(I);
16517           G_EXCLUDER_FLAG_TBL(M)           := l_h_EXCLUDER_FLAG_tbl(I);
16518           G_PRODUCT_UOM_CODE_TBL(M)        := l_h_prod_UOM_CODE_tbl(I);
16519           G_QUALIFIER_TYPE_TBL(M)          := l_h_qual_TYPE_tbl(I);
16520           G_VALIDATED_FLAG_tbl(M)          := G_NO;
16521           G_PRICING_ATTR_FLAG_tbl(M)       := G_NO;
16522           G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
16523           G_VALUE_TO_tbl(M)                := NULL;
16524           G_PRICING_PHASE_ID_TBL_A(M)      := l_h_pric_PHASE_ID_tbl(I);
16525           G_INCOMP_GRP_CODE_TBL_A(M)       := l_h_INCOMPAT_GRP_CODE_tbl(I);
16526           G_LINE_DETAIL_TYPE_CODE_TBL_A(M) := 'NULL';
16527           G_MODIFIER_LEVEL_CODE_TBL_A(M)   := l_h_MODIFIER_LEVEL_CODE_tbl(I);
16528           G_PRIMARY_UOM_FLAG_TBL_A(M)      := l_h_PRIMARY_UOM_FLAG_tbl(I);
16529           M:= M+1;
16530         END IF;
16531 
16532         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16533           engine_debug('AFTER END IF SECONDARY PRICE_LIST');
16534         END IF;
16535         l_loop_count := l_loop_count +1;
16536       END LOOP; -- K
16537 
16538     end if; -- vivek, multi currency installed
16539 
16540     -- julin [3805113]: bulk insert into qp_npreq_ldets_tmp
16541     IF (D>1) THEN
16542       FORALL i in G_line_index_tbl.FIRST..G_line_index_tbl.LAST
16543         INSERT INTO qp_npreq_ldets_tmp
16544                 (LINE_DETAIL_INDEX,
16545                  LINE_DETAIL_TYPE_CODE,
16546                  LINE_INDEX,
16547                  CREATED_FROM_LIST_HEADER_ID,
16548                  CREATED_FROM_LIST_LINE_ID,
16549                  CREATED_FROM_LIST_LINE_TYPE,
16550                  CREATED_FROM_SQL,
16551                  PRICING_GROUP_SEQUENCE,
16552                  OPERAND_CALCULATION_CODE,
16553                  OPERAND_VALUE,
16554                  PRICING_PHASE_ID,
16555                  CREATED_FROM_LIST_TYPE_CODE,
16556                  PRICING_STATUS_CODE,
16557                  PROCESSED_FLAG,
16558                  AUTOMATIC_FLAG,
16559                  MODIFIER_LEVEL_CODE,
16560                  LIST_LINE_NO,
16561                  INCOMPATABILITY_GRP_CODE,
16562                  PRICE_FORMULA_ID,
16563                  PRODUCT_PRECEDENCE,
16564                  PRIMARY_UOM_FLAG,
16565                  ROUNDING_FACTOR,
16566                  SECONDARY_PRICELIST_IND,
16567                  CURRENCY_DETAIL_ID,
16568                  CURRENCY_HEADER_ID,
16569                  SELLING_ROUNDING_FACTOR,
16570                  ORDER_CURRENCY,
16571                  PRICING_EFFECTIVE_DATE,
16572                  BASE_CURRENCY_CODE,
16573                  BREAK_UOM_CODE,
16574                  BREAK_UOM_CONTEXT,
16575                  BREAK_UOM_ATTRIBUTE
16576                  )
16577         VALUES (   G_line_detail_index_tbl(i),
16578                  G_LINE_DETAIL_TYPE_CODE_TBL(I),
16579                  G_LINE_INDEX_tbl(i),
16580                  G_LIST_HEADER_ID_tbl(i),
16581                  G_LIST_LINE_ID_tbl(i),
16582                  G_LIST_LINE_TYPE_tbl(i),
16583                  G_CREATED_FROM_SQL_TBL(I), -- nth sec price list
16584                  G_PRICING_GROUP_SEQUENCE_tbl(i),
16585                  G_OPERAND_CALCULATION_CODE_tbl(i),
16586                  G_OPERAND_VALUE_tbl(i),
16587                  G_PRICING_PHASE_ID_tbl(i),
16588                  G_LIST_TYPE_CODE_tbl(i),
16589                  G_PRICING_STATUS_CODE_TBL(I),
16590                  G_NOT_PROCESSED,
16591                  G_AUTOMATIC_FLAG_tbl(i),
16592                  G_MODIFIER_LEVEL_CODE_tbl(i),
16593                  G_LIST_LINE_NO_tbl(i),
16594                  G_INCOMP_GRP_CODE_tbl(i),
16595                  G_PRICE_FORMULA_ID_tbl(i),
16596                  G_PRODUCT_PRECEDENCE_tbl(i),
16597                  G_PRIMARY_UOM_FLAG_tbl(i),
16598                  G_ROUNDING_FACTOR_tbl(i),
16599                  G_SECONDARY_PRICELIST_IND_TBL(I),
16600                  G_CURRENCY_DETAIL_ID_tbl(i),
16601                  G_CURRENCY_HEADER_ID_tbl(i),
16602                  G_SELLING_ROUNDING_tbl(i),
16603                  G_ORDER_CURRENCY_tbl(i),
16604                  G_PRICING_EFFECTIVE_DATE_tbl(i),
16605                  G_BASE_CURRENCY_CODE_tbl(i),
16606                  G_BREAK_UOM_tbl(i), /* Proration */
16607                  G_BREAK_CONTEXT_tbl(i), /* Proration */
16608                  G_BREAK_ATTRIBUTE_tbl(i) /* Proration */
16609         );
16610     END IF;
16611 
16612     IF (M>1) THEN
16613       INSERT_PRICE_LIST_ATTRS
16614    (    p_LINE_INDEX_tbl                =>G_LINE_INDEX_TBL_A,
16615         p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_TBL_A,
16616         p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
16617         p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
16618         p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl_A,
16619         p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl_A,
16620         p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
16621         p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
16622         p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
16623         p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
16624         p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
16625         p_GROUPING_NUMBER_tbl           =>G_GROUPING_NUMBER_tbl,
16626         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
16627         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
16628         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
16629         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_TBL_Q,
16630         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
16631         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
16632         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
16633         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
16634         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
16635         p_PRODUCT_UOM_CODE_TBL          =>G_PRODUCT_UOM_CODE_TBL,
16636         p_EXCLUDER_FLAG_TBL             =>G_EXCLUDER_FLAG_TBL,
16637         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
16638         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
16639         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
16640         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
16641         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
16642         x_status_code                   =>l_status_code,
16643         x_status_text                   =>l_status_text);
16644     END IF;
16645 
16646   END LOOP;
16647   IF l_use_multi_currency = 'Y' THEN
16648     CLOSE l_sec_list_cur_currency;
16649   ELSE
16650     CLOSE l_sec_list_cur;
16651   END IF;
16652 
16653 IF (l_loop_count <> 0) THEN
16654 
16655       --Evaluating between operator for both qualifiers and pricing attributes
16656       Evaluate_Between(G_PRICE_LIST_PHASE_ID,NULL,NULL,l_status_code,l_status_text);
16657 
16658       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16659        RAISE E_ROUTINE_ERRORS;
16660       END IF;
16661 
16662       -- Check for multiple item categories and customer classes
16663       Eliminate_Multiple_Hierarchies(G_PRICE_LIST_PHASE_ID,l_status_code,l_status_text);
16664 
16665       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16666        RAISE E_ROUTINE_ERRORS;
16667       END IF;
16668 
16669       --Handle_Excluder(G_PRICE_LIST_PHASE_ID,NULL,l_status_code,l_status_text);
16670 
16671       Perform_Grouping(G_PRICE_LIST_PHASE_ID, NULL, l_status_code, l_status_text);
16672 
16673       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16674        RAISE E_ROUTINE_ERRORS;
16675       END IF;
16676 
16677      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16678      engine_debug('Secondary Price List Grouping Return Status : ' || l_status_code);
16679 
16680 
16681      END IF;
16682      QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
16683 				(p_line_index        => NULL,
16684  				 p_order_uom_code    => NULL,
16685 				 p_order_qty         => NULL,
16686 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID, -- pricing_phase_id,
16687                                  p_call_big_search   => FALSE,
16688 				 x_list_line_id	     => l_list_line_id,
16689 				 x_return_status     => l_status_code,
16690 				 x_return_status_txt => l_status_text);
16691 
16692       IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16693        RAISE E_ROUTINE_ERRORS;
16694       END IF;
16695 
16696      -- 3773652
16697      -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
16698      begin
16699        select 'x' into l_dummy
16700        from qp_npreq_lines_tmp
16701        where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
16702        and (PRICE_FLAG = G_YES
16703             or
16704        PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
16705        and rownum = 1;
16706 
16707        Evaluate_Between(G_PRICE_LIST_PHASE_ID,NULL,NULL,l_status_code,l_status_text);
16708      exception
16709        when no_data_found then
16710          null;
16711      end;
16712 
16713      -- Update the request line status for lines which got valid price list
16714      Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,l_status_code,l_status_text);  --[julin/4708044]
16715 
16716      IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16717       RAISE E_ROUTINE_ERRORS;
16718      END IF;
16719 
16720      --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
16721      --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
16722      --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
16723      --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
16724      --By doing this we will get the right price in the PRICE event on change of UOM on the order line
16725      --for price based on price break
16726      Get_Eligible_Price_Break(G_PRICE_LIST_PHASE_ID,NULL,l_status_code,l_status_text);
16727 
16728      IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16729       RAISE E_ROUTINE_ERRORS;
16730      END IF;
16731 
16732 
16733       --delete children lines of PBH if the parent PBH line get eliminated in
16734       --QP_Resolve_Incompatability_PVT
16735 
16736       /* OPEN l_chk_deleted_pbh_cur(l_line_index,G_PRICE_LIST_PHASE_ID);
16737       FETCH l_chk_deleted_pbh_cur INTO l_dummy;
16738       IF l_chk_deleted_pbh_cur%FOUND THEN
16739        Delete_Invalid_PBH_Children(l_line_index,G_PRICE_LIST_PHASE_ID);
16740       END IF;
16741       CLOSE l_chk_deleted_pbh_cur; */
16742 ELSE
16743    -- Update the request line status for lines which got valid price list
16744    Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,l_status_code,l_status_text);  --[juiln/4708044]
16745    IF(l_status_code = FND_API.G_RET_STS_ERROR) THEN
16746     RAISE E_ROUTINE_ERRORS;
16747    END IF;
16748 END IF; --l_loop_count <> 0
16749 
16750 qp_debug_util.tstop('PERFORM_SECONDARY_SEARCH');
16751 
16752 EXCEPTION
16753  WHEN E_ROUTINE_ERRORS THEN
16754    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16755      engine_debug(l_routine||': '||l_status_text);
16756      END IF;
16757      x_status_code := FND_API.G_RET_STS_ERROR;
16758      x_status_text := l_routine||': '||l_status_text;
16759  WHEN OTHERS THEN
16760      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
16761      engine_debug(SQLERRM);
16762      END IF;
16763      x_status_code := FND_API.G_RET_STS_ERROR;
16764      x_status_text := l_routine||' '||SQLERRM;
16765 
16766 END Perform_Secondary_Search;
16767 
16768 /*+-----------------------------------------------------------
16769   | PROCEDURE LIST_HEADER_SEARCH
16770   | SEARCH lines for the phase that has search_flag='N'
16771   | The list headers were passed in as qualifiers. Only for the lines that have
16772   | MODLIST and list_lines as their context only will be included
16773   | These lines were not selected by the big union
16774   | select statement at all. Instead, they were populated by populate_temp_table
16775   | This routine has not hadled the case where a price break
16776   | list is passed in as qualifier...
16777   +-------------------------------------------------------------
16778 */
16779 
16780 PROCEDURE LIST_HEADER_SEARCH (
16781 		       p_pricing_phase_id     IN NUMBER,
16782                        p_is_price_list        IN BOOLEAN,
16783                        p_freeze_override_flag IN VARCHAR2,
16784                        p_control_rec          IN CONTROL_RECORD_TYPE,
16785                        p_list_mode            IN VARCHAR2,   --Modifier or Price list Mode
16786                        x_further_search       OUT NOCOPY VARCHAR2,
16787                        x_status_code          OUT NOCOPY VARCHAR2,
16788                        x_status_text          OUT NOCOPY VARCHAR2)
16789 AS
16790 /*
16791 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
16792 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_lines_tmp_N3,QUALIFIERS_EXIST_FLAG,2
16793 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_lines_tmp_N3,PRICING_ATTRS_EXIST_FLAG,3
16794 
16795 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
16796 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
16797 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
16798 
16799 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
16800 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
16801 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
16802 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
16803 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
16804 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
16805 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
16806 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
16807 
16808 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
16809 
16810 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
16811 
16812 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
16813 INDX,QP_PREQ_GRP.list_header_search.l_list_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
16814 */
16815 CURSOR L_LIST_CUR  IS
16816 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) dynamic_sampling(1) l_list_cur */
16817                    QPLAT_PROD.LINE_INDEX,
16818                    QPL.LIST_LINE_ID,
16819                    QPL.ARITHMETIC_OPERATOR,
16820                    QPL.OPERAND,
16821                    QPL.PRICING_GROUP_SEQUENCE,
16822                    QPL.LIST_LINE_TYPE_CODE,
16823                    QPL.PRICING_PHASE_ID,
16824                    QPL.AUTOMATIC_FLAG,
16825                    QPL.INCOMPATIBILITY_GRP_CODE,
16826                    QPL.PRICE_BY_FORMULA_ID,
16827                    QPL.PRODUCT_PRECEDENCE,
16828                    QPL.PRIMARY_UOM_FLAG,
16829                    QPL.MODIFIER_LEVEL_CODE,
16830                    QPL.LIST_LINE_NO,
16831                    QPA.PRODUCT_UOM_CODE,
16832                    QPA.EXCLUDER_FLAG,
16833                    QPH.LIST_TYPE_CODE,
16834                    QPH.ROUNDING_FACTOR,
16835                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
16836                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
16837                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
16838                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
16839                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
16840                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
16841                    QPLAT_PROD.APPLIED_FLAG,
16842                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
16843                    NULL                      PRICING_ATTRIBUTE,
16844                    NULL                      PRICING_ATTR_VALUE_FROM,
16845                    NULL                      PRICING_SETUP_VALUE_FROM,
16846                    NULL                      PRICING_SETUP_VALUE_TO,
16847                    NULL                      PRICING_ATTRIBUTE_LEVEL,
16848                    NULL                      PRICING_ATTRIBUTE_TYPE,
16849                    NULL                      PRICING_OPERATOR_TYPE,
16850                    NULL                      PRICING_ATTRIBUTE_DATATYPE
16851                   ,QPL.BREAK_UOM_CODE /* Proration */
16852                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
16853                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
16854                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
16855    FROM
16856          qp_npreq_lines_tmp QPLINES,
16857          qp_npreq_line_attrs_tmp qplat_prod,
16858          QP_PRICING_ATTRIBUTES QPA,
16859          QP_LIST_LINES QPL,
16860          QP_LIST_HEADERS_B QPH,
16861          --QP_PRICE_REQ_SOURCES qprs
16862          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
16863    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
16864    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
16865    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
16866    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
16867    AND   (QPLINES.PRICE_FLAG = G_YES
16868           OR
16869          (QPLINES.PRICE_FLAG = G_PHASE
16870           AND
16871           P_FREEZE_OVERRIDE_FLAG = G_YES))
16872    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
16873    AND   QPLINES.VALIDATED_FLAG = G_YES
16874    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
16875    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
16876    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
16877    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
16878    AND   QPA.EXCLUDER_FLAG = G_NO
16879    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16880    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
16881 --added for moac -- commented references to security profile
16882 --security will be built into qp_list_headers_b
16883 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR --begin security
16884 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
16885 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
16886    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
16887    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
16888    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
16889    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
16890            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16891            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16892    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
16893            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
16894                TRUNC(SYSDATE) )) AND
16895            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
16896                TRUNC(SYSDATE) ))
16897    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
16898            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
16899                TRUNC(SYSDATE) )) AND
16900            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
16901                TRUNC(SYSDATE) ))
16902    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
16903                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
16904    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
16905                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
16906    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
16907            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16908            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
16909    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
16910    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
16911    --       OR
16912    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
16913    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
16914    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
16915    AND   QPH.ACTIVE_FLAG = G_YES
16916    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
16917    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
16918    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
16919    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
16920 UNION ALL
16921 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 */
16922                    QPLAT_PROD.LINE_INDEX,
16923                    QPL.LIST_LINE_ID,
16924                    QPL.ARITHMETIC_OPERATOR,
16925                    QPL.OPERAND,
16926                    QPL.PRICING_GROUP_SEQUENCE,
16927                    QPL.LIST_LINE_TYPE_CODE,
16928                    QPL.PRICING_PHASE_ID,
16929                    QPL.AUTOMATIC_FLAG,
16930                    QPL.INCOMPATIBILITY_GRP_CODE,
16931                    QPL.PRICE_BY_FORMULA_ID,
16932                    QPL.PRODUCT_PRECEDENCE,
16933                    QPL.PRIMARY_UOM_FLAG,
16934                    QPL.MODIFIER_LEVEL_CODE,
16935                    QPL.LIST_LINE_NO,
16936                    QPA.PRODUCT_UOM_CODE,
16937                    QPA.EXCLUDER_FLAG,
16938                    QPH.LIST_TYPE_CODE,
16939                    QPH.ROUNDING_FACTOR,
16940                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
16941                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
16942                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
16943                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
16944                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
16945                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
16946                    QPLAT_PROD.APPLIED_FLAG,
16947                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
16948                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
16949                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
16950                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
16951                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
16952                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
16953                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
16954                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
16955                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE
16956                   ,QPL.BREAK_UOM_CODE /* Proration */
16957                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
16958                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
16959                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
16960    FROM
16961          qp_npreq_lines_tmp qplines,
16962          qp_npreq_line_attrs_tmp qplat_prod,
16963          QP_PRICING_ATTRIBUTES qpa,
16964          qp_npreq_line_attrs_tmp qplat_pric,
16965          QP_LIST_LINES qpl,
16966          QP_LIST_HEADERS_B qph,
16967          --QP_PRICE_REQ_SOURCES qprs
16968          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
16969    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
16970    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
16971    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
16972    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
16973    AND   (QPLINES.PRICE_FLAG = G_YES
16974           OR
16975          (QPLINES.PRICE_FLAG = G_PHASE
16976           AND
16977           P_FREEZE_OVERRIDE_FLAG = G_YES))
16978    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
16979    AND   QPLINES.VALIDATED_FLAG = G_YES
16980    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
16981    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
16982    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
16983    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
16984    AND   QPA.EXCLUDER_FLAG = G_NO
16985    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16986    AND   QPA.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
16987    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
16988    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
16989    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
16990           OR
16991           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
16992    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
16993    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
16994    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
16995    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
16996 --added for moac -- commented references to security profile
16997 --security will be built into qp_list_headers_b
16998 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
16999 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17000 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17001    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17002    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17003    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17004    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17005            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17006            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17007    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17008            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17009                TRUNC(SYSDATE) )) AND
17010            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17011                TRUNC(SYSDATE) ))
17012    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17013            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17014                TRUNC(SYSDATE) )) AND
17015            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17016                TRUNC(SYSDATE) ))
17017    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17018                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17019    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17020                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17021    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17022            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17023            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17024    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17025    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17026    --       OR
17027    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17028    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17029    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17030    AND   QPH.ACTIVE_FLAG = G_YES
17031    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17032    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17033    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17034    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17035    ORDER BY 1,2; --ORDER BY LINE_INDEX AND LIST LINE ID
17036 
17037 -- vivek
17038 CURSOR L_LIST_CUR_CURRENCY  IS
17039 SELECT /*+ ORDERED USE_NL(QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) l_list_cur */
17040                    QPLAT_PROD.LINE_INDEX,
17041                    QPL.LIST_LINE_ID,
17042                    QPL.ARITHMETIC_OPERATOR,
17043                    QPL.OPERAND,
17044                    QPL.PRICING_GROUP_SEQUENCE,
17045                    QPL.LIST_LINE_TYPE_CODE,
17046                    QPL.PRICING_PHASE_ID,
17047                    QPL.AUTOMATIC_FLAG,
17048                    QPL.INCOMPATIBILITY_GRP_CODE,
17049                    QPL.PRICE_BY_FORMULA_ID,
17050                    QPL.PRODUCT_PRECEDENCE,
17051                    QPL.PRIMARY_UOM_FLAG,
17052                    QPL.MODIFIER_LEVEL_CODE,
17053                    QPL.LIST_LINE_NO,
17054                    QPA.PRODUCT_UOM_CODE,
17055                    QPA.EXCLUDER_FLAG,
17056                    QPH.LIST_TYPE_CODE,
17057    /* vivek        QPH.ROUNDING_FACTOR,  */
17058                    QCDT.ROUNDING_FACTOR, /* vivek */
17059                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17060                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17061                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17062                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17063                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17064                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17065                    QPLAT_PROD.APPLIED_FLAG,
17066                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17067                    NULL                      PRICING_ATTRIBUTE,
17068                    NULL                      PRICING_ATTR_VALUE_FROM,
17069                    NULL                      PRICING_SETUP_VALUE_FROM,
17070                    NULL                      PRICING_SETUP_VALUE_TO,
17071                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17072                    NULL                      PRICING_ATTRIBUTE_TYPE,
17073                    NULL                      PRICING_OPERATOR_TYPE,
17074                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
17075                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
17076                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
17077                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
17078                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
17079                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
17080                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
17081                   ,QPL.BREAK_UOM_CODE /* Proration */
17082                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17083                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17084                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17085    FROM
17086          qp_npreq_lines_tmp QPLINES,
17087          qp_npreq_line_attrs_tmp qplat_prod,
17088          QP_PRICING_ATTRIBUTES QPA,
17089          QP_LIST_LINES QPL,
17090          QP_LIST_HEADERS_B QPH,
17091          --QP_PRICE_REQ_SOURCES qprs,
17092          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
17093          QP_CURRENCY_DETAILS QCDT   /* Vivek */
17094    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17095    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
17096    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17097    AND   (QPLINES.PRICE_FLAG = G_YES
17098           OR
17099          (QPLINES.PRICE_FLAG = G_PHASE
17100           AND
17101           P_FREEZE_OVERRIDE_FLAG = G_YES))
17102    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17103    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17104    AND   QPLINES.VALIDATED_FLAG = G_YES
17105    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
17106    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17107    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17108    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17109    AND   QPA.EXCLUDER_FLAG = G_NO
17110    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17111    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17112 --added for moac -- commented references to security profile
17113 --security will be built into qp_list_headers_b
17114 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17115 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17116 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17117    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17118    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17119    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
17120    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17121            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17122            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17123    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17124            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17125                TRUNC(SYSDATE) )) AND
17126            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17127                TRUNC(SYSDATE) ))
17128    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17129            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17130                TRUNC(SYSDATE) )) AND
17131            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17132                TRUNC(SYSDATE) ))
17133    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17134                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17135    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17136                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17137    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17138            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17139            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17140 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
17141             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
17142             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
17143             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17144                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17145                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17146    AND (   /* Vivek */
17147         (qcdt.curr_attribute_context is null   /* Vivek */
17148          and not exists   /* Vivek */
17149              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
17150 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
17151                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
17152 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
17153                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
17154                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
17155                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
17156                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
17157                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
17158                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17159                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
17160                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17161                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17162                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17163              )   /* Vivek */
17164         )   /* Vivek */
17165         OR   /* Vivek */
17166         (qcdt.curr_attribute_context is not null   /* Vivek */
17167          and qcdt.precedence =
17168              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
17169 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
17170                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
17171 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
17172                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
17173                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
17174                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
17175                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
17176                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
17177                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17178                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
17179                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17180                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17181                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17182              )   /* Vivek */
17183         )   /* Vivek */
17184        )   /* Vivek */
17185    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17186    --       OR
17187    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17188    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17189    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17190    AND   QPH.ACTIVE_FLAG = G_YES
17191    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17192    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17193    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17194    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17195 UNION ALL
17196 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 */
17197                    QPLAT_PROD.LINE_INDEX,
17198                    QPL.LIST_LINE_ID,
17199                    QPL.ARITHMETIC_OPERATOR,
17200                    QPL.OPERAND,
17201                    QPL.PRICING_GROUP_SEQUENCE,
17202                    QPL.LIST_LINE_TYPE_CODE,
17203                    QPL.PRICING_PHASE_ID,
17204                    QPL.AUTOMATIC_FLAG,
17205                    QPL.INCOMPATIBILITY_GRP_CODE,
17206                    QPL.PRICE_BY_FORMULA_ID,
17207                    QPL.PRODUCT_PRECEDENCE,
17208                    QPL.PRIMARY_UOM_FLAG,
17209                    QPL.MODIFIER_LEVEL_CODE,
17210                    QPL.LIST_LINE_NO,
17211                    QPA.PRODUCT_UOM_CODE,
17212                    QPA.EXCLUDER_FLAG,
17213                    QPH.LIST_TYPE_CODE,
17214    /* vivek        QPH.ROUNDING_FACTOR,  */
17215                    QCDT.ROUNDING_FACTOR, /* vivek */
17216                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
17217                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17218                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17219                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17220                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17221                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17222                    QPLAT_PROD.APPLIED_FLAG,
17223                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
17224                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
17225                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
17226                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
17227                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
17228                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
17229                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
17230                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
17231                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
17232                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
17233                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
17234                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
17235                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
17236                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
17237                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
17238                   ,QPL.BREAK_UOM_CODE /* Proration */
17239                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17240                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17241                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17242    FROM
17243          qp_npreq_lines_tmp qplines,
17244          qp_npreq_line_attrs_tmp qplat_prod,
17245          QP_PRICING_ATTRIBUTES qpa,
17246          qp_npreq_line_attrs_tmp qplat_pric,
17247          QP_LIST_LINES qpl,
17248          QP_LIST_HEADERS_B qph,
17249          --QP_PRICE_REQ_SOURCES qprs,
17250          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
17251          QP_CURRENCY_DETAILS QCDT   /* Vivek */
17252    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17253    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17254    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17255    AND   (QPLINES.PRICE_FLAG = G_YES
17256           OR
17257          (QPLINES.PRICE_FLAG = G_PHASE
17258           AND
17259           P_FREEZE_OVERRIDE_FLAG = G_YES))
17260    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17261    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17262    AND   QPLINES.VALIDATED_FLAG = G_YES
17263    AND   QPLINES.QUALIFIERS_EXIST_FLAG IN (G_YES,G_NO)
17264    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
17265    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17266    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17267    AND   QPA.EXCLUDER_FLAG = G_NO
17268    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17269    AND   QPA.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
17270    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
17271    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
17272    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
17273           OR
17274           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
17275    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
17276    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17277    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
17278    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17279 --added for moac -- commented references to security profile
17280 --security will be built into qp_list_headers_b
17281 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17282 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17283 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17284    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17285    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17286    AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_PRIC_IND)
17287    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17288            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17289            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17290    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
17291            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17292                TRUNC(SYSDATE) )) AND
17293            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
17294                TRUNC(SYSDATE) ))
17295    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
17296            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17297                TRUNC(SYSDATE) )) AND
17298            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
17299                TRUNC(SYSDATE) ))
17300    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
17301                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
17302    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
17303                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
17304    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17305            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17306            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17307 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
17308             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
17309             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
17310             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17311                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17312                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17313    AND (   /* Vivek */
17314         (qcdt.curr_attribute_context is null   /* Vivek */
17315          and not exists   /* Vivek */
17316              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
17317 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
17318                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
17319 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
17320                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
17321                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
17322                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
17323                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
17324                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
17325                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17326                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
17327                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17328                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17329                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17330              )   /* Vivek */
17331         )   /* Vivek */
17332         OR   /* Vivek */
17333         (qcdt.curr_attribute_context is not null   /* Vivek */
17334          and qcdt.precedence =
17335              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
17336 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
17337                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
17338 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
17339                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
17340                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
17341                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
17342                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
17343                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
17344                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
17345                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
17346                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17347                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17348                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17349              )   /* Vivek */
17350         )   /* Vivek */
17351        )   /* Vivek */
17352    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17353    --       OR
17354    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17355    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17356    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17357    AND   QPH.ACTIVE_FLAG = G_YES
17358    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17359    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17360    AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17361    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17362    ORDER BY 1,2; --ORDER BY LINE_INDEX AND LIST LINE ID
17363 
17364 
17365 /*
17366 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_lines_tmp_N3,VALIDATED_FLAG,1
17367 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_lines_tmp_N3,QUALIFIERS_EXIST_FLAG,2
17368 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_lines_tmp_N3,PRICING_ATTRS_EXIST_FLAG,3
17369 
17370 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
17371 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_QUALIFIERS_N1,COMPARISON_OPERATOR_CODE,4
17372 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_QUALIFIERS_N1,ACTIVE_FLAG,6
17373 
17374 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
17375 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
17376 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
17377 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
17378 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
17379 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
17380 
17381 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,LIST_HEADER_ID,1
17382 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,QUALIFICATION_IND,2
17383 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,PRICING_PHASE_ID,3
17384 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N6,LIST_LINE_ID,4
17385 
17386 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
17387 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
17388 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
17389 
17390 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
17391 
17392 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
17393 
17394 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
17395 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
17396 
17397 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
17398 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
17399 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
17400 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
17401 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
17402 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
17403 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
17404 INDX,QP_PREQ_GRP.list_header_search.l_list_qual_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
17405 */
17406 CURSOR L_LIST_QUAL_CUR  IS
17407 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 */
17408                    QPLAT_PROD.LINE_INDEX,
17409                    QPL.LIST_LINE_ID,
17410                    QPL.ARITHMETIC_OPERATOR,
17411                    QPL.OPERAND,
17412                    QPL.PRICING_GROUP_SEQUENCE,
17413                    QPL.LIST_LINE_TYPE_CODE,
17414                    QPL.PRICING_PHASE_ID,
17415                    QPL.AUTOMATIC_FLAG,
17416                    QPL.INCOMPATIBILITY_GRP_CODE,
17417                    QPL.PRICE_BY_FORMULA_ID,
17418                    QPL.PRODUCT_PRECEDENCE,
17419                    QPL.PRIMARY_UOM_FLAG,
17420                    QPL.MODIFIER_LEVEL_CODE,
17421                    QPL.LIST_LINE_NO,
17422                    QPA.PRODUCT_UOM_CODE,
17423                    QPA.EXCLUDER_FLAG,
17424                    QPH.LIST_TYPE_CODE,
17425                    QPH.ROUNDING_FACTOR,
17426                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17427                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17428                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17429                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17430                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17431                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17432                    QPLAT_PROD.APPLIED_FLAG,
17433                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17434                    NULL                      PRICING_ATTRIBUTE,
17435                    NULL                      PRICING_ATTR_VALUE_FROM,
17436                    NULL                      PRICING_SETUP_VALUE_FROM,
17437                    NULL                      PRICING_SETUP_VALUE_TO,
17438                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17439                    NULL                      PRICING_ATTRIBUTE_TYPE,
17440                    NULL                      PRICING_OPERATOR_TYPE,
17441                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
17442                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
17443                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
17444                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
17445                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
17446                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
17447                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
17448                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
17449                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
17450                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
17451                    NULL                         PRICING_ATTRIBUTE_DATATYPE,
17452                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE
17453                   ,QPL.BREAK_UOM_CODE /* Proration */
17454                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17455                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17456                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17457                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17458    FROM
17459          qp_npreq_lines_tmp QPLINES,
17460          QP_QUALIFIERS QPQ,
17461          qp_npreq_line_attrs_tmp QPLAT_Q,
17462 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
17463          QP_PRICING_ATTRIBUTES QPA,
17464          QP_LIST_LINES QPL,
17465          QP_LIST_HEADERS_B QPH,
17466          --QP_PRICE_REQ_SOURCES QPRS
17467          QP_PRICE_REQ_SOURCES_V QPRS /* yangli */
17468    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17469    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
17470    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17471    AND   (QPLINES.PRICE_FLAG = G_YES
17472           OR
17473          (QPLINES.PRICE_FLAG = G_PHASE
17474           AND
17475           P_FREEZE_OVERRIDE_FLAG = G_YES))
17476    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17477    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17478    AND   QPLINES.VALIDATED_FLAG = G_NO
17479    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
17480    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17481    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17482    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17483    AND   QPA.EXCLUDER_FLAG = G_NO
17484    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
17485 --added for moac -- commented references to security profile
17486 --security will be built into qp_list_headers_b
17487 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17488 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17489 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17490    --AND   QPL.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
17491    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17492    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17493    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17494            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17495            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17496    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17497            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17498            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17499    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17500    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17501    --       OR
17502    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17503    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17504    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17505    AND   QPH.ACTIVE_FLAG = G_YES
17506    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17507    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
17508 -- 3594459, context and attribute OR'd together
17509    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
17510           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
17511    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
17512    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
17513    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
17514    AND   QPQ.ACTIVE_FLAG = G_YES
17515    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
17516                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
17517            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
17518                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
17519            OR
17520           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
17521    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
17522    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17523          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
17524          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
17525    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
17526    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17527    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17528    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17529    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17530    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
17531           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
17532 UNION ALL
17533  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)
17534  INDEX(QPA QP_PRICING_ATTRIBUTES_N5) INDEX(QPLAT_PRIC qp_preq_line_attrs_tmp_N2) dynamic_sampling(1) l_list_qual_cur */
17535                    QPLAT_PROD.LINE_INDEX,
17536                    QPL.LIST_LINE_ID,
17537                    QPL.ARITHMETIC_OPERATOR,
17538                    QPL.OPERAND,
17539                    QPL.PRICING_GROUP_SEQUENCE,
17540                    QPL.LIST_LINE_TYPE_CODE,
17541                    QPL.PRICING_PHASE_ID,
17542                    QPL.AUTOMATIC_FLAG,
17543                    QPL.INCOMPATIBILITY_GRP_CODE,
17544                    QPL.PRICE_BY_FORMULA_ID,
17545                    QPL.PRODUCT_PRECEDENCE,
17546                    QPL.PRIMARY_UOM_FLAG,
17547                    QPL.MODIFIER_LEVEL_CODE,
17548                    QPL.LIST_LINE_NO,
17549                    QPA.PRODUCT_UOM_CODE,
17550                    QPA.EXCLUDER_FLAG,
17551                    QPH.LIST_TYPE_CODE,
17552                    QPH.ROUNDING_FACTOR,
17553                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
17554                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17555                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17556                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17557                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17558                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17559                    QPLAT_PROD.APPLIED_FLAG,
17560                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
17561                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
17562                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
17563                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
17564                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
17565                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
17566                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
17567                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
17568                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
17569                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
17570                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
17571                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
17572                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
17573                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
17574                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
17575                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
17576                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
17577                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
17578                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
17579                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE
17580                   ,QPL.BREAK_UOM_CODE /* Proration */
17581                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17582                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17583                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17584                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17585    FROM
17586          qp_npreq_lines_tmp QPLINES,
17587          QP_QUALIFIERS QPQ,
17588          qp_npreq_line_attrs_tmp QPLAT_Q,
17589 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
17590          QP_PRICING_ATTRIBUTES QPA,
17591          qp_npreq_line_attrs_tmp QPLAT_PRIC,
17592          QP_LIST_LINES QPL,
17593          QP_LIST_HEADERS_B QPH,
17594          --QP_PRICE_REQ_SOURCES QPRS
17595          QP_PRICE_REQ_SOURCES_V QPRS /* yangli */
17596    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17597    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
17598    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17599    AND   (QPLINES.PRICE_FLAG = G_YES
17600           OR
17601          (QPLINES.PRICE_FLAG = G_PHASE
17602           AND
17603           P_FREEZE_OVERRIDE_FLAG = G_YES))
17604    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17605    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17606    AND   QPLINES.VALIDATED_FLAG = G_NO
17607    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
17608    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
17609    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17610    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17611    AND   QPA.EXCLUDER_FLAG = G_NO
17612    --AND   QPA.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL
17613    AND    QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
17614           AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
17615           AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
17616                OR
17617                QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
17618           AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
17619           AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17620           AND QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
17621    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17622 --added for moac -- commented references to security profile
17623 --security will be built into qp_list_headers_b
17624 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17625 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17626 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17627    --AND   QPL.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
17628    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17629    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17630    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17631            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17632            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17633    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17634            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17635            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17636    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17637    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17638    --       OR
17639    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17640    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17641    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17642    AND   QPH.ACTIVE_FLAG = G_YES
17643    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17644    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
17645 -- 3594459, context and attribute OR'd together
17646    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
17647           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
17648    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
17649    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
17650    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
17651    AND   QPQ.ACTIVE_FLAG = G_YES
17652    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
17653                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
17654            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
17655                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
17656            OR
17657           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
17658    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
17659    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17660             NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
17661    AND     NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
17662    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17663    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17664    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17665    AND   QPLAT_Q.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17666    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17667    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
17668           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
17669    UNION ALL
17670    SELECT /*+ ORDERED USE_NL(QPLINES QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) dynamic_sampling(1) l_list_cur */
17671                    QPLAT_PROD.LINE_INDEX,
17672                    QPL.LIST_LINE_ID,
17673                    QPL.ARITHMETIC_OPERATOR,
17674                    QPL.OPERAND,
17675                    QPL.PRICING_GROUP_SEQUENCE,
17676                    QPL.LIST_LINE_TYPE_CODE,
17677                    QPL.PRICING_PHASE_ID,
17678                    QPL.AUTOMATIC_FLAG,
17679                    QPL.INCOMPATIBILITY_GRP_CODE,
17680                    QPL.PRICE_BY_FORMULA_ID,
17681                    QPL.PRODUCT_PRECEDENCE,
17682                    QPL.PRIMARY_UOM_FLAG,
17683                    QPL.MODIFIER_LEVEL_CODE,
17684                    QPL.LIST_LINE_NO,
17685                    QPA.PRODUCT_UOM_CODE,
17686                    QPA.EXCLUDER_FLAG,
17687                    QPH.LIST_TYPE_CODE,
17688                    QPH.ROUNDING_FACTOR,
17689                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17690                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17691                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17692                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17693                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17694                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17695                    QPLAT_PROD.APPLIED_FLAG,
17696                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17697                    NULL                      PRICING_ATTRIBUTE,
17698                    NULL                      PRICING_ATTR_VALUE_FROM,
17699                    NULL                      PRICING_SETUP_VALUE_FROM,
17700                    NULL                      PRICING_SETUP_VALUE_TO,
17701                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17702                    NULL                      PRICING_ATTRIBUTE_TYPE,
17703                    NULL                      PRICING_OPERATOR_TYPE,
17704                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
17705                    NULL                      QUALIFIER_ATTRIBUTE,
17706                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
17707                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
17708                    -9999                     QUALIFIER_GROUPING_NO,
17709                    5000                      QUALIFIER_PRECEDENCE,
17710                    NULL                      QUALIFIER_DATATYPE,
17711                    NULL                      SETUP_VALUE_FROM,
17712                    NULL                      SETUP_VALUE_TO,
17713                    NULL                      QUALIFIER_OPERATOR_TYPE,
17714                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
17715                    NULL                      QUALIFIER_TYPE
17716                   ,QPL.BREAK_UOM_CODE /* Proration */
17717                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17718                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17719                   ,qplat_prod.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17720                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17721    FROM
17722          qp_npreq_lines_tmp QPLINES,
17723          qp_npreq_line_attrs_tmp qplat_prod,
17724          QP_PRICING_ATTRIBUTES QPA,
17725          QP_LIST_LINES QPL,
17726          QP_LIST_HEADERS_B QPH,
17727          --QP_PRICE_REQ_SOURCES qprs
17728          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
17729    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17730    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
17731    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17732    AND   (QPLINES.PRICE_FLAG = G_YES
17733           OR
17734          (QPLINES.PRICE_FLAG = G_PHASE
17735           AND
17736           P_FREEZE_OVERRIDE_FLAG = G_YES))
17737    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17738    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17739    AND   QPLINES.VALIDATED_FLAG = G_NO
17740    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
17741    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17742    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17743    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17744    AND   QPA.EXCLUDER_FLAG = G_NO
17745    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17746    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
17747 --added for moac -- commented references to security profile
17748 --security will be built into qp_list_headers_b
17749 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17750 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17751 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17752    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17753    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17754    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17755            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17756            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17757    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17758            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17759            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17760    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17761    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17762    --       OR
17763    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17764    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17765    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17766    AND   QPH.ACTIVE_FLAG = G_YES
17767    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17768    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17769    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17770    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17771 UNION ALL
17772 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 */
17773                    QPLAT_PROD.LINE_INDEX,
17774                    QPL.LIST_LINE_ID,
17775                    QPL.ARITHMETIC_OPERATOR,
17776                    QPL.OPERAND,
17777                    QPL.PRICING_GROUP_SEQUENCE,
17778                    QPL.LIST_LINE_TYPE_CODE,
17779                    QPL.PRICING_PHASE_ID,
17780                    QPL.AUTOMATIC_FLAG,
17781                    QPL.INCOMPATIBILITY_GRP_CODE,
17782                    QPL.PRICE_BY_FORMULA_ID,
17783                    QPL.PRODUCT_PRECEDENCE,
17784                    QPL.PRIMARY_UOM_FLAG,
17785                    QPL.MODIFIER_LEVEL_CODE,
17786                    QPL.LIST_LINE_NO,
17787                    QPA.PRODUCT_UOM_CODE,
17788                    QPA.EXCLUDER_FLAG,
17789                    QPH.LIST_TYPE_CODE,
17790                    QPH.ROUNDING_FACTOR,
17791                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17792                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17793                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17794                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17795                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17796                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17797                    QPLAT_PROD.APPLIED_FLAG,
17798                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
17799                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
17800                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
17801                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
17802                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
17803                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
17804                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
17805                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
17806                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
17807                    NULL                      QUALIFIER_ATTRIBUTE,
17808                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
17809                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
17810                    -9999                     QUALIFIER_GROUPING_NO,
17811                    5000                      QUALIFIER_PRECEDENCE,
17812                    NULL                      QUALIFIER_DATATYPE,
17813                    NULL                      SETUP_VALUE_FROM,
17814                    NULL                      SETUP_VALUE_TO,
17815                    NULL                      QUALIFIER_OPERATOR_TYPE,
17816                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
17817                    NULL                      QUALIFIER_TYPE
17818                   ,QPL.BREAK_UOM_CODE /* Proration */
17819                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17820                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17821                   ,qplat_pric.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17822                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17823    FROM
17824          qp_npreq_lines_tmp qplines,
17825          qp_npreq_line_attrs_tmp qplat_prod,
17826          QP_PRICING_ATTRIBUTES qpa,
17827          qp_npreq_line_attrs_tmp qplat_pric,
17828          QP_LIST_LINES qpl,
17829          QP_LIST_HEADERS_B qph,
17830          --QP_PRICE_REQ_SOURCES qprs
17831          QP_PRICE_REQ_SOURCES_V qprs /* yangli */
17832    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17833    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
17834    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17835    AND   (QPLINES.PRICE_FLAG = G_YES
17836           OR
17837          (QPLINES.PRICE_FLAG = G_PHASE
17838           AND
17839           P_FREEZE_OVERRIDE_FLAG = G_YES))
17840    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17841    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17842    AND   QPLINES.VALIDATED_FLAG = G_NO
17843    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
17844    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
17845    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17846    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17847    AND   QPA.EXCLUDER_FLAG = G_NO
17848    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17849    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
17850    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
17851    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
17852           OR
17853           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
17854    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
17855    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
17856    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
17857    AND   QPH.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17858 --added for moac -- commented references to security profile
17859 --security will be built into qp_list_headers_b
17860 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17861 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17862 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17863    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17864    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17865    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17866            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17867            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17868    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17869            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17870            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17871    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE
17872    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
17873    --       OR
17874    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
17875    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
17876    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
17877    AND   QPH.ACTIVE_FLAG = G_YES
17878    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
17879    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
17880    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17881    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
17882    ORDER BY 1,2;
17883 
17884 -- vivek
17885 CURSOR L_LIST_QUAL_CUR_CURRENCY  IS
17886 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 */
17887                    QPLAT_PROD.LINE_INDEX,
17888                    QPL.LIST_LINE_ID,
17889                    QPL.ARITHMETIC_OPERATOR,
17890                    QPL.OPERAND,
17891                    QPL.PRICING_GROUP_SEQUENCE,
17892                    QPL.LIST_LINE_TYPE_CODE,
17893                    QPL.PRICING_PHASE_ID,
17894                    QPL.AUTOMATIC_FLAG,
17895                    QPL.INCOMPATIBILITY_GRP_CODE,
17896                    QPL.PRICE_BY_FORMULA_ID,
17897                    QPL.PRODUCT_PRECEDENCE,
17898                    QPL.PRIMARY_UOM_FLAG,
17899                    QPL.MODIFIER_LEVEL_CODE,
17900                    QPL.LIST_LINE_NO,
17901                    QPA.PRODUCT_UOM_CODE,
17902                    QPA.EXCLUDER_FLAG,
17903                    QPH.LIST_TYPE_CODE,
17904    /* vivek        QPH.ROUNDING_FACTOR,  */
17905                    QCDT.ROUNDING_FACTOR, /* vivek */
17906                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
17907                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
17908                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
17909                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
17910                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
17911                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
17912                    QPLAT_PROD.APPLIED_FLAG,
17913                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
17914                    NULL                      PRICING_ATTRIBUTE,
17915                    NULL                      PRICING_ATTR_VALUE_FROM,
17916                    NULL                      PRICING_SETUP_VALUE_FROM,
17917                    NULL                      PRICING_SETUP_VALUE_TO,
17918                    NULL                      PRICING_ATTRIBUTE_LEVEL,
17919                    NULL                      PRICING_ATTRIBUTE_TYPE,
17920                    NULL                      PRICING_OPERATOR_TYPE,
17921                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
17922                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
17923                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
17924                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
17925                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
17926                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
17927                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
17928                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
17929                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
17930                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
17931                    NULL                         PRICING_ATTRIBUTE_DATATYPE,
17932                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
17933                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
17934                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
17935                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
17936                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
17937                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
17938                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
17939                   ,QPL.BREAK_UOM_CODE /* Proration */
17940                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
17941                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
17942                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
17943                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
17944    FROM
17945          qp_npreq_lines_tmp QPLINES,
17946          QP_QUALIFIERS QPQ,
17947          qp_npreq_line_attrs_tmp QPLAT_Q,
17948 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
17949          QP_PRICING_ATTRIBUTES QPA,
17950          QP_LIST_LINES QPL,
17951          QP_LIST_HEADERS_B QPH,
17952          --QP_PRICE_REQ_SOURCES QPRS,
17953          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
17954          QP_CURRENCY_DETAILS QCDT   /* Vivek */
17955    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
17956    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
17957    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
17958    AND   (QPLINES.PRICE_FLAG = G_YES
17959           OR
17960          (QPLINES.PRICE_FLAG = G_PHASE
17961           AND
17962           P_FREEZE_OVERRIDE_FLAG = G_YES))
17963    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
17964    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
17965    AND   QPLINES.VALIDATED_FLAG = G_NO
17966    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
17967    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
17968    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
17969    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
17970    AND   QPA.EXCLUDER_FLAG = G_NO
17971    AND   QPL.LIST_HEADER_ID = QPH.LIST_HEADER_ID
17972    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
17973    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
17974    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17975            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17976            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17977    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
17978            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17979            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
17980 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
17981             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
17982 --added for moac -- commented references to security profile
17983 --security will be built into qp_list_headers_b
17984 --            AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
17985 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
17986 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
17987             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
17988             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
17989                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17990                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
17991    AND (   /* Vivek */
17992         (qcdt.curr_attribute_context is null   /* Vivek */
17993          and not exists   /* Vivek */
17994              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
17995 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
17996                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
17997 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
17998                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
17999                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18000                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18001                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18002                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18003                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18004                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18005                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18006                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18007                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18008              )   /* Vivek */
18009         )   /* Vivek */
18010         OR   /* Vivek */
18011         (qcdt.curr_attribute_context is not null   /* Vivek */
18012          and qcdt.currency_detail_id =   /* Vivek */
18013              (select qcdt3.currency_detail_id
18014 	       from qp_currency_details qcdt3  /* Vivek */
18015                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18016                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18017                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18018                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18019                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18020                  and  qcdt3.precedence =
18021              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18022 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18023                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18024 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18025                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18026                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18027                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18028                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18029                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18030                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18031                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18032                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18033                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18034                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18035              ))   /* Vivek */
18036         )   /* Vivek */
18037        )   /* Vivek */
18038    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18039    --       OR
18040    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18041    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18042    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18043    AND   QPH.ACTIVE_FLAG = G_YES
18044    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18045    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
18046 -- 3594459, context and attribute OR'd together
18047    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
18048           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
18049    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
18050    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
18051    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
18052    AND   QPQ.ACTIVE_FLAG = G_YES
18053    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
18054                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
18055            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
18056                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
18057            OR
18058           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
18059    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
18060    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18061          NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
18062          AND NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
18063    AND   QPLAT_PROD.LINE_INDEX = QPLAT_Q.LINE_INDEX
18064    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18065    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18066    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18067    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18068     AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
18069           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
18070 UNION ALL
18071  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 */
18072                    QPLAT_PROD.LINE_INDEX,
18073                    QPL.LIST_LINE_ID,
18074                    QPL.ARITHMETIC_OPERATOR,
18075                    QPL.OPERAND,
18076                    QPL.PRICING_GROUP_SEQUENCE,
18077                    QPL.LIST_LINE_TYPE_CODE,
18078                    QPL.PRICING_PHASE_ID,
18079                    QPL.AUTOMATIC_FLAG,
18080                    QPL.INCOMPATIBILITY_GRP_CODE,
18081                    QPL.PRICE_BY_FORMULA_ID,
18082                    QPL.PRODUCT_PRECEDENCE,
18083                    QPL.PRIMARY_UOM_FLAG,
18084                    QPL.MODIFIER_LEVEL_CODE,
18085                    QPL.LIST_LINE_NO,
18086                    QPA.PRODUCT_UOM_CODE,
18087                    QPA.EXCLUDER_FLAG,
18088                    QPH.LIST_TYPE_CODE,
18089    /* vivek        QPH.ROUNDING_FACTOR,  */
18090                    QCDT.ROUNDING_FACTOR, /* vivek */
18091                    QPH.LIST_HEADER_ID         LIST_HEADER_ID,
18092                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18093                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18094                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18095                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18096                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18097                    QPLAT_PROD.APPLIED_FLAG,
18098                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
18099                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
18100                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
18101                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
18102                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
18103                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
18104                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
18105                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
18106                    QPLAT_Q.CONTEXT           QUALIFIER_ATTRIBUTE_CONTEXT,
18107                    QPLAT_Q.ATTRIBUTE         QUALIFIER_ATTRIBUTE,
18108                    QPLAT_Q.VALUE_FROM        QUALIFIER_ATTR_VALUE_FROM,
18109                    QPLAT_Q.PRICING_ATTR_FLAG QUALIFIER_PRICING_ATTR_FLAG,
18110                    QPQ.QUALIFIER_GROUPING_NO QUALIFIER_GROUPING_NO,
18111                    QPQ.QUALIFIER_PRECEDENCE  QUALIFIER_PRECEDENCE,
18112                    QPQ.QUALIFIER_DATATYPE    QUALIFIER_DATATYPE,
18113                    QPQ.QUALIFIER_ATTR_VALUE     SETUP_VALUE_FROM,
18114                    QPQ.QUALIFIER_ATTR_VALUE_TO  SETUP_VALUE_TO,
18115                    QPQ.COMPARISON_OPERATOR_CODE QUALIFIER_OPERATOR_TYPE,
18116                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
18117                    decode(QPQ.list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
18118                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18119                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18120                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18121                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18122                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18123                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18124                   ,QPL.BREAK_UOM_CODE /* Proration */
18125                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18126                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18127                   ,QPLAT_Q.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18128                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18129    FROM
18130          qp_npreq_lines_tmp QPLINES,
18131          QP_QUALIFIERS QPQ,
18132          qp_npreq_line_attrs_tmp QPLAT_Q,
18133 	 qp_npreq_line_attrs_tmp QPLAT_PROD,
18134          QP_PRICING_ATTRIBUTES QPA,
18135          qp_npreq_line_attrs_tmp QPLAT_PRIC,
18136          QP_LIST_LINES QPL,
18137          QP_LIST_HEADERS_B QPH,
18138          --QP_PRICE_REQ_SOURCES QPRS,
18139          QP_PRICE_REQ_SOURCES_V QPRS, /* yangli */
18140          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18141    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18142    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
18143    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18144    AND   (QPLINES.PRICE_FLAG = G_YES
18145           OR
18146          (QPLINES.PRICE_FLAG = G_PHASE
18147           AND
18148           P_FREEZE_OVERRIDE_FLAG = G_YES))
18149    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18150    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18151    AND   QPLINES.VALIDATED_FLAG = G_NO
18152    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_YES
18153    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
18154    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18155    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18156    AND   QPA.EXCLUDER_FLAG = G_NO
18157    AND    QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
18158           AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
18159           AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
18160                OR
18161                QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
18162           AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
18163           AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18164           AND QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
18165    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
18166    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18167    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18168    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18169            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18170            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18171    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18172            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18173            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18174 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18175             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18176             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18177             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18178                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18179                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18180    AND (   /* Vivek */
18181         (qcdt.curr_attribute_context is null   /* Vivek */
18182          and not exists   /* Vivek */
18183              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18184 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18185                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18186 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18187                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18188                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18189                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18190                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18191                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18192                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18193                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18194                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18195                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18196                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18197              )   /* Vivek */
18198         )   /* Vivek */
18199         OR   /* Vivek */
18200         (qcdt.curr_attribute_context is not null   /* Vivek */
18201          and qcdt.currency_detail_id =   /* Vivek */
18202              (select qcdt3.currency_detail_id
18203 	       from qp_currency_details qcdt3  /* Vivek */
18204                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18205                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18206                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18207                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18208                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18209                  and  qcdt3.precedence =
18210              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18211 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18212                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18213 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18214                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18215                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18216                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18217                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18218                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18219                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18220                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18221                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18222                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18223                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18224              ))   /* Vivek */
18225         )   /* Vivek */
18226        )   /* Vivek */
18227    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18228    --       OR
18229    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18230    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18231    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18232    AND   QPH.ACTIVE_FLAG = G_YES
18233    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18234    AND   QPLAT_Q.ATTRIBUTE_TYPE    = G_QUALIFIER_TYPE
18235 -- 3594459, context and attribute OR'd together
18236    AND   (QPQ.QUALIFIER_CONTEXT <> G_LIST_HEADER_CONTEXT
18237           OR QPQ.QUALIFIER_ATTRIBUTE <> G_PRICELIST_ATTRIBUTE)
18238    AND   QPLAT_Q.CONTEXT       = QPQ.QUALIFIER_CONTEXT
18239    AND   QPLAT_Q.ATTRIBUTE     = QPQ.QUALIFIER_ATTRIBUTE
18240    AND   QPQ.LIST_HEADER_ID    = QPLINES.PRICE_LIST_HEADER_ID
18241 --added for moac -- commented references to security profile
18242 --security will be built into qp_list_headers_b
18243 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18244 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18245 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18246    AND   QPQ.ACTIVE_FLAG = G_YES
18247    AND   ((QPLAT_Q.VALUE_FROM   = QPQ.QUALIFIER_ATTR_VALUE --bug#1761272 Multiple NOT =
18248                 AND QPQ.COMPARISON_OPERATOR_CODE = '=')
18249            OR (QPLAT_Q.VALUE_FROM  <> QPQ.QUALIFIER_ATTR_VALUE
18250                 AND QPQ.COMPARISON_OPERATOR_CODE = 'NOT =')
18251            OR
18252           QPQ.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
18253    AND   QPLAT_Q.LINE_INDEX  =   QPLINES.LINE_INDEX
18254    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18255             NVL(QPQ.START_DATE_ACTIVE, QPLINES.PRICING_EFFECTIVE_DATE)
18256    AND     NVL(QPQ.END_DATE_ACTIVE,QPLINES.PRICING_EFFECTIVE_DATE)
18257    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18258    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18259    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18260    AND   QPLAT_Q. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18261    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18262    AND ((nvl(QPLAT_Q.DERIVED_QUALIFIER_FLAG,'N')='N')
18263           OR (QPLAT_Q.DERIVED_QUALIFIER_FLAG = 'Y' AND QPQ.QUALIFY_HIER_DESCENDENTS_FLAG = 'Y')) -- Added for TCA
18264    UNION ALL
18265    SELECT /*+ ORDERED USE_NL(QPLINES QPLAT_PROD QPA QPL QPH) index(QPA QP_PRICING_ATTRIBUTES_N5) l_list_cur */
18266                    QPLAT_PROD.LINE_INDEX,
18267                    QPL.LIST_LINE_ID,
18268                    QPL.ARITHMETIC_OPERATOR,
18269                    QPL.OPERAND,
18270                    QPL.PRICING_GROUP_SEQUENCE,
18271                    QPL.LIST_LINE_TYPE_CODE,
18272                    QPL.PRICING_PHASE_ID,
18273                    QPL.AUTOMATIC_FLAG,
18274                    QPL.INCOMPATIBILITY_GRP_CODE,
18275                    QPL.PRICE_BY_FORMULA_ID,
18276                    QPL.PRODUCT_PRECEDENCE,
18277                    QPL.PRIMARY_UOM_FLAG,
18278                    QPL.MODIFIER_LEVEL_CODE,
18279                    QPL.LIST_LINE_NO,
18280                    QPA.PRODUCT_UOM_CODE,
18281                    QPA.EXCLUDER_FLAG,
18282                    QPH.LIST_TYPE_CODE,
18283    /* vivek        QPH.ROUNDING_FACTOR,  */
18284                    QCDT.ROUNDING_FACTOR, /* vivek */
18285                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
18286                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18287                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18288                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18289                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18290                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18291                    QPLAT_PROD.APPLIED_FLAG,
18292                    NULL                      PRICING_ATTRIBUTE_CONTEXT,
18293                    NULL                      PRICING_ATTRIBUTE,
18294                    NULL                      PRICING_ATTR_VALUE_FROM,
18295                    NULL                      PRICING_SETUP_VALUE_FROM,
18296                    NULL                      PRICING_SETUP_VALUE_TO,
18297                    NULL                      PRICING_ATTRIBUTE_LEVEL,
18298                    NULL                      PRICING_ATTRIBUTE_TYPE,
18299                    NULL                      PRICING_OPERATOR_TYPE,
18300                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
18301                    NULL                      QUALIFIER_ATTRIBUTE,
18302                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
18303                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
18304                    -9999                     QUALIFIER_GROUPING_NO,
18305                    5000                      QUALIFIER_PRECEDENCE,
18306                    NULL                      QUALIFIER_DATATYPE,
18307                    NULL                      SETUP_VALUE_FROM,
18308                    NULL                      SETUP_VALUE_TO,
18309                    NULL                      QUALIFIER_OPERATOR_TYPE,
18310                    NULL                      PRICING_ATTRIBUTE_DATATYPE,
18311                    NULL                      QUALIFIER_TYPE,
18312                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18313                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18314                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18315                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18316                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18317                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18318                   ,QPL.BREAK_UOM_CODE /* Proration */
18319                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18320                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18321                   ,qplat_prod.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18322                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18323    FROM
18324          qp_npreq_lines_tmp QPLINES,
18325          qp_npreq_line_attrs_tmp qplat_prod,
18326          QP_PRICING_ATTRIBUTES QPA,
18327          QP_LIST_LINES QPL,
18328          QP_LIST_HEADERS_B QPH,
18329          --QP_PRICE_REQ_SOURCES qprs,
18330          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
18331          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18332    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18333    --AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND, QP_PREQ_GRP.G_YES_PROD_IND)
18334    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
18335    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18336    AND   (QPLINES.PRICE_FLAG = G_YES
18337           OR
18338          (QPLINES.PRICE_FLAG = G_PHASE
18339           AND
18340           P_FREEZE_OVERRIDE_FLAG = G_YES))
18341    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18342    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18343    AND   QPLINES.VALIDATED_FLAG = G_NO
18344    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
18345    --AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_NO
18346    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18347    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18348    AND   QPA.EXCLUDER_FLAG = G_NO
18349    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18350    AND   QPH.LIST_HEADER_ID = QPL.LIST_HEADER_ID
18351 --added for moac -- commented references to security profile
18352 --security will be built into qp_list_headers_b
18353 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18354 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18355 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18356    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18357    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18358    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18359            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18360            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18361    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18362            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18363            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18364 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18365             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18366             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18367             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18368                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18369                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18370    AND (   /* Vivek */
18371         (qcdt.curr_attribute_context is null   /* Vivek */
18372          and not exists   /* Vivek */
18373              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18374 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18375                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18376 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18377                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18378                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18379                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18380                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18381                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18382                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18383                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18384                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18385                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18386                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18387              )   /* Vivek */
18388         )   /* Vivek */
18389         OR   /* Vivek */
18390         (qcdt.curr_attribute_context is not null   /* Vivek */
18391          and qcdt.currency_detail_id =   /* Vivek */
18392              (select qcdt3.currency_detail_id
18393 	       from qp_currency_details qcdt3  /* Vivek */
18394                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18395                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18396                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18397                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18398                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18399                  and  qcdt3.precedence =
18400              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18401 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18402                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18403 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18404                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18405                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18406                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18407                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18408                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18409                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18410                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18411                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18412                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18413                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18414              ))   /* Vivek */
18415         )   /* Vivek */
18416        )   /* Vivek */
18417    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18418    --       OR
18419    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18420    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18421    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18422    AND   QPH.ACTIVE_FLAG = G_YES
18423    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18424    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18425    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18426    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18427 UNION ALL
18428 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 */
18429                    QPLAT_PROD.LINE_INDEX,
18430                    QPL.LIST_LINE_ID,
18431                    QPL.ARITHMETIC_OPERATOR,
18432                    QPL.OPERAND,
18433                    QPL.PRICING_GROUP_SEQUENCE,
18434                    QPL.LIST_LINE_TYPE_CODE,
18435                    QPL.PRICING_PHASE_ID,
18436                    QPL.AUTOMATIC_FLAG,
18437                    QPL.INCOMPATIBILITY_GRP_CODE,
18438                    QPL.PRICE_BY_FORMULA_ID,
18439                    QPL.PRODUCT_PRECEDENCE,
18440                    QPL.PRIMARY_UOM_FLAG,
18441                    QPL.MODIFIER_LEVEL_CODE,
18442                    QPL.LIST_LINE_NO,
18443                    QPA.PRODUCT_UOM_CODE,
18444                    QPA.EXCLUDER_FLAG,
18445                    QPH.LIST_TYPE_CODE,
18446    /* vivek        QPH.ROUNDING_FACTOR,  */
18447                    QCDT.ROUNDING_FACTOR, /* vivek */
18448                    QPH.LIST_HEADER_ID           LIST_HEADER_ID,
18449                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18450                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18451                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18452                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18453                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18454                    QPLAT_PROD.APPLIED_FLAG,
18455                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
18456                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
18457                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
18458                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
18459                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
18460                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
18461                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
18462                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
18463                    NULL                      QUALIFIER_ATTRIBUTE_CONTEXT,
18464                    NULL                      QUALIFIER_ATTRIBUTE,
18465                    NULL                      QUALIFIER_ATTR_VALUE_FROM,
18466                    NULL                      QUALIFIER_PRICING_ATTR_FLAG,
18467                    -9999                     QUALIFIER_GROUPING_NO,
18468                    5000                      QUALIFIER_PRECEDENCE,
18469                    NULL                      QUALIFIER_DATATYPE,
18470                    NULL                      SETUP_VALUE_FROM,
18471                    NULL                      SETUP_VALUE_TO,
18472                    NULL                      QUALIFIER_OPERATOR_TYPE,
18473                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE,
18474                    NULL                      QUALIFIER_TYPE,
18475                    QCDT.CURRENCY_DETAIL_ID,  /* sunilpandey */
18476                    QCDT.CURRENCY_HEADER_ID,  /* vivek */
18477                    QCDT.SELLING_ROUNDING_FACTOR,  /* vivek */
18478                    QPLINES.CURRENCY_CODE   ORDER_CURRENCY,  /* vivek */
18479                    QPLINES.PRICING_EFFECTIVE_DATE,  /* vivek */
18480                    QPH.CURRENCY_CODE   BASE_CURRENCY_CODE  /* vivek */
18481                   ,QPL.BREAK_UOM_CODE /* Proration */
18482                   ,QPL.BREAK_UOM_CONTEXT /* Proration */
18483                   ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
18484                   ,qplat_pric.DERIVED_QUALIFIER_FLAG  -- Added for TCA
18485                   ,QPL.PRICE_BREAK_TYPE_CODE --[julin] for price book
18486    FROM
18487          qp_npreq_lines_tmp qplines,
18488          qp_npreq_line_attrs_tmp qplat_prod,
18489          QP_PRICING_ATTRIBUTES qpa,
18490          qp_npreq_line_attrs_tmp qplat_pric,
18491          QP_LIST_LINES qpl,
18492          QP_LIST_HEADERS_B qph,
18493          --QP_PRICE_REQ_SOURCES qprs,
18494          QP_PRICE_REQ_SOURCES_V qprs, /* yangli */
18495          QP_CURRENCY_DETAILS QCDT   /* Vivek */
18496    WHERE QPA.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18497    AND   QPA.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
18498    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18499    AND   (QPLINES.PRICE_FLAG = G_YES
18500           OR
18501          (QPLINES.PRICE_FLAG = G_PHASE
18502           AND
18503           P_FREEZE_OVERRIDE_FLAG = G_YES))
18504    AND   QPLINES.LIST_PRICE_OVERRIDE_FLAG IN ('N', 'O') --po integration
18505    AND   QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL
18506    AND   QPLINES.VALIDATED_FLAG = G_NO
18507    AND   QPLINES.QUALIFIERS_EXIST_FLAG = G_NO
18508    AND   QPLINES.PRICING_ATTRS_EXIST_FLAG = G_YES
18509    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18510    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18511    AND   QPA.EXCLUDER_FLAG = G_NO
18512    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18513    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
18514    AND   QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
18515    AND   (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
18516           OR
18517           QPA.COMPARISON_OPERATOR_CODE IN ('NOT =', G_OPERATOR_BETWEEN))
18518    AND   QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
18519    AND   QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18520    AND   QPLAT_PRIC.LINE_INDEX = QPLAT_PROD.LINE_INDEX
18521    AND   QPH.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18522 --added for moac -- commented references to security profile
18523 --security will be built into qp_list_headers_b
18524 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18525 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18526 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18527    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18528    AND   QPA.LIST_HEADER_ID = QPLINES.PRICE_LIST_HEADER_ID
18529    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18530            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18531            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18532    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18533            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18534            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18535 /* Vivek    AND   QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE  */
18536             AND QPH.CURRENCY_HEADER_ID = QCDT.CURRENCY_HEADER_ID /* Vivek */
18537             AND QPLINES.CURRENCY_CODE = QCDT.TO_CURRENCY_CODE  /* Vivek */
18538             AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18539                 NVL(TRUNC(QCDT.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18540                 AND NVL(TRUNC(QCDT.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18541    AND (   /* Vivek */
18542         (qcdt.curr_attribute_context is null   /* Vivek */
18543          and not exists   /* Vivek */
18544              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
18545 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1 /* Vivek */
18546                where qcdt1.curr_attribute_context IS NOT NULL  /* Vivek */
18547 		 and qcdt1.curr_attribute_context = pa_tmp.context   /* Vivek */
18548                  and qcdt1.curr_attribute = pa_tmp.attribute   /* Vivek */
18549                  and qcdt1.curr_attribute_value = pa_tmp.value_from   /* Vivek */
18550                  and qcdt1.curr_attribute_type = pa_tmp.ATTRIBUTE_TYPE   /* Vivek */
18551                  and qcdt1.to_currency_code = qcdt.to_currency_code   /* Vivek */
18552                  and qcdt1.currency_header_id = qcdt.currency_header_id   /* Vivek */
18553                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18554                  and pa_tmp.line_index = qplines.line_index   /* Vivek */
18555                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18556                      NVL(TRUNC(QCDT1.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18557                      AND NVL(TRUNC(QCDT1.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18558              )   /* Vivek */
18559         )   /* Vivek */
18560         OR   /* Vivek */
18561         (qcdt.curr_attribute_context is not null   /* Vivek */
18562          and qcdt.currency_detail_id =   /* Vivek */
18563              (select qcdt3.currency_detail_id
18564 	       from qp_currency_details qcdt3  /* Vivek */
18565                  where qcdt3.to_currency_code = qcdt.to_currency_code   /* Vivek */
18566                  and qcdt3.currency_header_id = qcdt.currency_header_id   /* Vivek */
18567                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18568                      NVL(TRUNC(QCDT3.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18569                      AND NVL(TRUNC(QCDT3.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18570                  and  qcdt3.precedence =
18571              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
18572 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2  /* Vivek */
18573                where qcdt2.curr_attribute_context IS NOT NULL   /* Vivek */
18574 		 and qcdt2.curr_attribute_context = pa_tmp1.context   /* Vivek */
18575                  and qcdt2.curr_attribute = pa_tmp1.attribute   /* Vivek */
18576                  and qcdt2.curr_attribute_value = pa_tmp1.value_from   /* Vivek */
18577                  and qcdt2.curr_attribute_type = pa_tmp1.ATTRIBUTE_TYPE   /* Vivek */
18578                  and qcdt2.to_currency_code = qcdt.to_currency_code   /* Vivek */
18579                  and qcdt2.currency_header_id = qcdt.currency_header_id   /* Vivek */
18580                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED   /* Vivek */
18581                  and pa_tmp1.line_index = qplines.line_index   /* Vivek */
18582                  AND QPLINES.PRICING_EFFECTIVE_DATE BETWEEN   /* Vivek */
18583                      NVL(TRUNC(QCDT2.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18584                      AND NVL(TRUNC(QCDT2.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)/* Vivek */
18585              ))   /* Vivek */
18586         )   /* Vivek */
18587        )   /* Vivek */
18588    --AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18589    --       OR
18590    --       QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18591    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18592    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18593    AND   QPH.ACTIVE_FLAG = G_YES
18594    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18595    AND   QPLAT_PROD.LINE_INDEX = QPLINES.LINE_INDEX
18596    --AND   QPL.PRICING_PHASE_ID = G_PRICE_LIST_PHASE_ID
18597    AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
18598    ORDER BY 1,2;
18599 
18600 /*
18601 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
18602 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
18603 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
18604 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
18605 
18606 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_lines_tmp_U1,LINE_INDEX,1
18607 INDX,QP_PREQ_GRP.list_header_search.l_validated_cur,qp_npreq_lines_tmp_U1,LINE_TYPE_CODE,2
18608 */
18609 
18610 CURSOR l_validated_cur IS
18611   SELECT  /*+ dynamic_sampling(1) */ LINE_INDEX,
18612           LINE_DETAIL_INDEX,
18613           ATTRIBUTE_LEVEL,
18614           ATTRIBUTE_TYPE,
18615           CONTEXT,
18616           ATTRIBUTE,
18617           VALUE_FROM,
18618           VALUE_TO,
18619           PRODUCT_UOM_CODE,
18620           COMPARISON_OPERATOR_TYPE_CODE COMPARISON_OPERATOR_TYPE
18621   FROM  qp_npreq_line_attrs_tmp a
18622   WHERE PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18623   AND   VALIDATED_FLAG = G_VALIDATED
18624   AND   CONTEXT = G_LIST_HEADER_CONTEXT
18625   AND   ATTRIBUTE IN (G_PROMOTION_ATTRIBUTE,G_QUAL_ATTRIBUTE2)
18626   AND   ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
18627   AND   EXISTS
18628   (Select /*+ dynamic_sampling(1) */ 'X'
18629    FROM  qp_npreq_lines_tmp b
18630    WHERE b.line_index = a.line_index
18631    AND   (b.price_flag = G_YES
18632           OR
18633           (b.price_flag = G_PHASE
18634            AND
18635            p_freeze_override_flag = G_YES)
18636           )
18637    AND  b.line_type_code <> G_ORDER_LEVEL
18638   );
18639 
18640 --THE DIFFERENT BETWEEN THIS SEARCH AND PRICE LIST SEARCH
18641 --IS THIS SEARCH CHECKS FOR LINE LEVEL QUALIFIER ALSO
18642 /*
18643 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
18644 
18645 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
18646 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
18647 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
18648 
18649 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
18650 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,qp_npreq_lines_tmp_N1,LINE_TYPE_CODE,2
18651 
18652 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
18653 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
18654 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
18655 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
18656 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
18657 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
18658 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
18659 
18660 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
18661 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
18662 
18663 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
18664 
18665 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE_CONTEXT,1
18666 INDX,QP_PREQ_GRP.list_header_search.l_other_list_cur,QP_PRICING_ATTRIBUTES_N4,PRICING_ATTRIBUTE,2
18667 */
18668 
18669 CURSOR L_OTHER_LIST_CUR (L_LINE_INDEX PLS_INTEGER,
18670                         L_LIST_HEADER_ID NUMBER,
18671                         P_FREEZE_OVERRIDE_FLAG VARCHAR2)IS
18672 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 */
18673                    QPLINES.LINE_INDEX,
18674                    QPL.LIST_LINE_ID,
18675                    QPL.ARITHMETIC_OPERATOR,
18676                    QPL.OPERAND,
18677                    QPL.PRICING_GROUP_SEQUENCE,
18678                    QPL.LIST_LINE_TYPE_CODE,
18679                    QPL.LIST_PRICE,
18680                    QPL.LIST_PRICE_UOM_CODE,
18681                    QPL.PERCENT_PRICE,
18682                    QPL.PRICING_PHASE_ID,
18683                    QPL.AUTOMATIC_FLAG,
18684                    QPL.OVERRIDE_FLAG,
18685                    QPL.PRINT_ON_INVOICE_FLAG,
18686                    QPL.MODIFIER_LEVEL_CODE,
18687                    QPL.BENEFIT_QTY,
18688                    QPL.BENEFIT_UOM_CODE,
18689                    QPL.LIST_LINE_NO,
18690                    QPL.ACCRUAL_FLAG,
18691                    QPL.ACCRUAL_CONVERSION_RATE,
18692                    QPL.ESTIM_ACCRUAL_RATE,
18693                    QPL.RECURRING_FLAG,
18694                    QPL.INCOMPATIBILITY_GRP_CODE,
18695                    QPL.PRICE_BY_FORMULA_ID,
18696                    QPL.PRODUCT_PRECEDENCE,
18697                    QPL.PRIMARY_UOM_FLAG,
18698                    QPA.PRODUCT_UOM_CODE,
18699                    QPA.EXCLUDER_FLAG,
18700                    QPH.ASK_FOR_FLAG,
18701                    QPH.LIST_TYPE_CODE,
18702                    QPH.ROUNDING_FACTOR,
18703                    QPLAT_PROD.LINE_DETAIL_INDEX,
18704                    L_LIST_HEADER_ID           LIST_HEADER_ID,
18705                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18706                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18707                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18708                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
18709                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18710                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18711                    QPL.AUTOMATIC_FLAG APPLIED_FLAG,  	-- shu fix bug 1915355
18712                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
18713                    NULL                            PRICING_ATTRIBUTE_CONTEXT,
18714                    NULL                            PRICING_ATTRIBUTE,
18715                    NULL                            PRICING_ATTR_VALUE_FROM,
18716                    NULL                            PRICING_SETUP_VALUE_FROM,
18717                    NULL                            PRICING_SETUP_VALUE_TO,
18718                    NULL                            PRICING_ATTRIBUTE_LEVEL,
18719                    NULL                            PRICING_ATTRIBUTE_TYPE,
18720                    NULL                            PRICING_OPERATOR_TYPE,
18721                    NULL                            PRICING_ATTRIBUTE_DATATYPE
18722    FROM
18723          qp_npreq_lines_tmp QPLINES,
18724          qp_npreq_line_attrs_tmp QPLAT_PROD,
18725          QP_PRICING_ATTRIBUTES QPA,
18726          QP_LIST_HEADERS_B QPH,
18727 	 QP_LIST_LINES QPL,
18728          QP_PRICE_REQ_SOURCES_V QPRS
18729    WHERE QPA.PRICING_PHASE_ID = P_PRICING_PHASE_ID
18730    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
18731                                    QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
18732    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18733    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18734    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18735    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
18736    AND   (QPLINES.PRICE_FLAG = G_YES
18737              OR
18738              (QPLINES.PRICE_FLAG = G_PHASE
18739               AND
18740               P_FREEZE_OVERRIDE_FLAG = G_YES))
18741    AND QPH.LIST_HEADER_ID = L_LIST_HEADER_ID
18742 --added for moac -- commented references to security profile
18743 --security will be built into qp_list_headers_b
18744 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18745 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18746 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18747    AND   QPH.ASK_FOR_FLAG = G_YES
18748    AND   QPA.LIST_HEADER_ID = L_LIST_HEADER_ID
18749    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18750    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18751    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
18752    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
18753    --                                QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
18754    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
18755    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
18756    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18757            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18758            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18759     AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
18760            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
18761                TRUNC(SYSDATE) )) AND
18762            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
18763                TRUNC(SYSDATE) ))
18764    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
18765            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
18766                TRUNC(SYSDATE) )) AND
18767            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
18768                TRUNC(SYSDATE) ))
18769    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
18770                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
18771    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
18772                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
18773    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18774            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18775            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18776    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
18777           OR
18778           QPH.CURRENCY_CODE IS NULL) -- optional currency
18779    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18780           OR
18781           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18782    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18783    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18784    AND   QPH.ACTIVE_FLAG = G_YES
18785    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18786   UNION ALL
18787 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 */
18788                    QPLINES.LINE_INDEX,
18789                    QPL.LIST_LINE_ID,
18790                    QPL.ARITHMETIC_OPERATOR,
18791                    QPL.OPERAND,
18792                    QPL.PRICING_GROUP_SEQUENCE,
18793                    QPL.LIST_LINE_TYPE_CODE,
18794                    QPL.LIST_PRICE,
18795                    QPL.LIST_PRICE_UOM_CODE,
18796                    QPL.PERCENT_PRICE,
18797                    QPL.PRICING_PHASE_ID,
18798                    QPL.AUTOMATIC_FLAG,
18799                    QPL.OVERRIDE_FLAG,
18800                    QPL.PRINT_ON_INVOICE_FLAG,
18801                    QPL.MODIFIER_LEVEL_CODE,
18802                    QPL.BENEFIT_QTY,
18803                    QPL.BENEFIT_UOM_CODE,
18804                    QPL.LIST_LINE_NO,
18805                    QPL.ACCRUAL_FLAG,
18806                    QPL.ACCRUAL_CONVERSION_RATE,
18807                    QPL.ESTIM_ACCRUAL_RATE,
18808                    QPL.RECURRING_FLAG,
18809                    QPL.INCOMPATIBILITY_GRP_CODE,
18810                    QPL.PRICE_BY_FORMULA_ID,
18811                    QPL.PRODUCT_PRECEDENCE,
18812                    QPL.PRIMARY_UOM_FLAG,
18813                    QPA.PRODUCT_UOM_CODE,
18814                    QPA.EXCLUDER_FLAG,
18815                    QPH.ASK_FOR_FLAG,
18816                    QPH.LIST_TYPE_CODE,
18817                    QPH.ROUNDING_FACTOR,
18818                    QPLAT_PROD.LINE_DETAIL_INDEX,
18819                    L_LIST_HEADER_ID           LIST_HEADER_ID,
18820                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18821                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18822                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18823                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
18824                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18825                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18826                    QPL.AUTOMATIC_FLAG APPLIED_FLAG, -- shu fix bug 1915355
18827                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
18828                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
18829                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
18830                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
18831                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
18832                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
18833                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
18834                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
18835                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
18836                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE
18837    FROM
18838          qp_npreq_lines_tmp QPLINES,
18839          qp_npreq_line_attrs_tmp QPLAT_PROD,
18840          QP_PRICING_ATTRIBUTES QPA,
18841          qp_npreq_line_attrs_tmp QPLAT_PRIC,
18842          QP_LIST_HEADERS_B QPH,
18843 	 QP_LIST_LINES QPL,
18844          QP_PRICE_REQ_SOURCES QPRS
18845    WHERE QPA.PRICING_PHASE_ID = p_pricing_phase_id
18846    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
18847                               QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
18848    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18849    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18850    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18851    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
18852    AND   (QPLINES.PRICE_FLAG = G_YES
18853              OR
18854              (QPLINES.PRICE_FLAG = G_PHASE
18855               AND
18856               P_FREEZE_OVERRIDE_FLAG = G_YES))
18857    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
18858          AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
18859          AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
18860                OR
18861                QPA.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
18862    AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
18863    AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18864    AND QPLAT_PROD.LINE_INDEX = QPLAT_PRIC.LINE_INDEX
18865    AND QPH.LIST_HEADER_ID = L_LIST_HEADER_ID
18866    AND   QPH.ASK_FOR_FLAG = G_YES
18867    AND   QPA.LIST_HEADER_ID = L_LIST_HEADER_ID
18868 --added for moac -- commented references to security profile
18869 --security will be built into qp_list_headers_b
18870 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18871 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18872 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18873    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18874    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18875    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
18876    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
18877    --                                QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
18878    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
18879    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
18880    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18881            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18882            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18883    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
18884            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
18885                TRUNC(SYSDATE) )) AND
18886            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
18887                TRUNC(SYSDATE) ))
18888    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
18889            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
18890                TRUNC(SYSDATE) )) AND
18891            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
18892                TRUNC(SYSDATE) ))
18893    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
18894                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
18895    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
18896                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
18897    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
18898            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18899            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
18900    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
18901           OR
18902           QPH.CURRENCY_CODE IS NULL) -- optional currency
18903    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
18904           OR
18905           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
18906    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
18907    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
18908    AND   QPH.ACTIVE_FLAG = G_YES
18909    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
18910    ORDER BY 1,2;
18911 
18912 
18913 CURSOR L_OTHER_LIST_LINE_CUR (L_LINE_INDEX PLS_INTEGER,
18914                               L_LIST_LINE_ID NUMBER,
18915                               P_FREEZE_OVERRIDE_FLAG VARCHAR2)IS
18916 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 */
18917                    QPLINES.LINE_INDEX,
18918                    QPL.LIST_LINE_ID,
18919                    QPL.ARITHMETIC_OPERATOR,
18920                    QPL.OPERAND,
18921                    QPL.PRICING_GROUP_SEQUENCE,
18922                    QPL.LIST_LINE_TYPE_CODE,
18923                    QPL.LIST_PRICE,
18924                    QPL.LIST_PRICE_UOM_CODE,
18925                    QPL.PERCENT_PRICE,
18926                    QPL.PRICING_PHASE_ID,
18927                    QPL.AUTOMATIC_FLAG,
18928                    QPL.OVERRIDE_FLAG,
18929                    QPL.PRINT_ON_INVOICE_FLAG,
18930                    QPL.MODIFIER_LEVEL_CODE,
18931                    QPL.BENEFIT_QTY,
18932                    QPL.BENEFIT_UOM_CODE,
18933                    QPL.LIST_LINE_NO,
18934                    QPL.ACCRUAL_FLAG,
18935                    QPL.ACCRUAL_CONVERSION_RATE,
18936                    QPL.ESTIM_ACCRUAL_RATE,
18937                    QPL.RECURRING_FLAG,
18938                    QPL.INCOMPATIBILITY_GRP_CODE,
18939                    QPL.PRICE_BY_FORMULA_ID,
18940                    QPL.PRODUCT_PRECEDENCE,
18941                    QPL.PRIMARY_UOM_FLAG,
18942                    QPA.PRODUCT_UOM_CODE,
18943                    QPA.EXCLUDER_FLAG,
18944                    QPH.ASK_FOR_FLAG,
18945                    QPH.LIST_TYPE_CODE,
18946                    QPH.ROUNDING_FACTOR,
18947                    QPLAT_PROD.LINE_DETAIL_INDEX,
18948                    QPL.LIST_HEADER_ID         LIST_HEADER_ID,
18949                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
18950                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
18951                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
18952                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
18953                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
18954                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
18955                    QPL.AUTOMATIC_FLAG APPLIED_FLAG, -- fix bug 1915355
18956                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
18957                    NULL                            PRICING_ATTRIBUTE_CONTEXT,
18958                    NULL                            PRICING_ATTRIBUTE,
18959                    NULL                            PRICING_ATTR_VALUE_FROM,
18960                    NULL                            PRICING_SETUP_VALUE_FROM,
18961                    NULL                            PRICING_SETUP_VALUE_TO,
18962                    NULL                            PRICING_ATTRIBUTE_LEVEL,
18963                    NULL                            PRICING_ATTRIBUTE_TYPE,
18964                    NULL                            PRICING_OPERATOR_TYPE,
18965                    NULL                            PRICING_ATTRIBUTE_DATATYPE
18966    FROM
18967          qp_npreq_lines_tmp QPLINES,
18968          qp_npreq_line_attrs_tmp QPLAT_PROD,
18969          QP_PRICING_ATTRIBUTES QPA,
18970          QP_LIST_HEADERS_B QPH,
18971          QP_LIST_LINES QPL,
18972          QP_PRICE_REQ_SOURCES QPRS
18973    WHERE QPA.PRICING_PHASE_ID = P_PRICING_PHASE_ID
18974    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
18975                                    QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
18976    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
18977    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
18978    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
18979    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
18980    AND   (QPLINES.PRICE_FLAG = G_YES
18981              OR
18982              (QPLINES.PRICE_FLAG = G_PHASE
18983               AND
18984               P_FREEZE_OVERRIDE_FLAG = G_YES))
18985    AND   QPH.LIST_HEADER_ID = QPA.LIST_HEADER_ID
18986 --added for moac -- commented references to security profile
18987 --security will be built into qp_list_headers_b
18988 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
18989 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
18990 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
18991    AND   QPH.ASK_FOR_FLAG = G_YES
18992    AND   QPA.LIST_LINE_ID = L_LIST_LINE_ID
18993    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
18994    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
18995    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
18996    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_IND, QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND,
18997    --                                QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
18998    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
18999    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
19000    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19001            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19002            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19003     AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
19004            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19005                TRUNC(SYSDATE) )) AND
19006            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19007                TRUNC(SYSDATE) ))
19008    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
19009            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19010                TRUNC(SYSDATE) )) AND
19011            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19012                TRUNC(SYSDATE) ))
19013    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
19014                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
19015    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
19016                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
19017    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19018            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19019            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19020    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
19021           OR
19022           QPH.CURRENCY_CODE IS NULL) -- optional currency
19023    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
19024           OR
19025           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
19026    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
19027    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
19028    AND   QPH.ACTIVE_FLAG = G_YES
19029    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19030   UNION ALL
19031   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 */
19032                    QPLINES.LINE_INDEX,
19033                    QPL.LIST_LINE_ID,
19034                    QPL.ARITHMETIC_OPERATOR,
19035                    QPL.OPERAND,
19036                    QPL.PRICING_GROUP_SEQUENCE,
19037                    QPL.LIST_LINE_TYPE_CODE,
19038                    QPL.LIST_PRICE,
19039                    QPL.LIST_PRICE_UOM_CODE,
19040                    QPL.PERCENT_PRICE,
19041                    QPL.PRICING_PHASE_ID,
19042                    QPL.AUTOMATIC_FLAG,
19043                    QPL.OVERRIDE_FLAG,
19044                    QPL.PRINT_ON_INVOICE_FLAG,
19045                    QPL.MODIFIER_LEVEL_CODE,
19046                    QPL.BENEFIT_QTY,
19047                    QPL.BENEFIT_UOM_CODE,
19048                    QPL.LIST_LINE_NO,
19049                    QPL.ACCRUAL_FLAG,
19050                    QPL.ACCRUAL_CONVERSION_RATE,
19051                    QPL.ESTIM_ACCRUAL_RATE,
19052                    QPL.RECURRING_FLAG,
19053                    QPL.INCOMPATIBILITY_GRP_CODE,
19054                    QPL.PRICE_BY_FORMULA_ID,
19055                    QPL.PRODUCT_PRECEDENCE,
19056                    QPL.PRIMARY_UOM_FLAG,
19057                    QPA.PRODUCT_UOM_CODE,
19058                    QPA.EXCLUDER_FLAG,
19059                    QPH.ASK_FOR_FLAG,
19060                    QPH.LIST_TYPE_CODE,
19061                    QPH.ROUNDING_FACTOR,
19062                    QPLAT_PROD.LINE_DETAIL_INDEX,
19063                    QPL.LIST_HEADER_ID         LIST_HEADER_ID,
19064                    QPLAT_PROD.CONTEXT         PRODUCT_ATTRIBUTE_CONTEXT,
19065                    QPLAT_PROD.ATTRIBUTE       PRODUCT_ATTRIBUTE,
19066                    QPLAT_PROD.VALUE_FROM      PRODUCT_ATTR_VALUE_FROM,
19067                    QPLAT_PROD.VALUE_TO        PRODUCT_ATTR_VALUE_TO,
19068                    QPLAT_PROD.ATTRIBUTE_LEVEL PRODUCT_ATTRIBUTE_LEVEL,
19069                    QPLAT_PROD.ATTRIBUTE_TYPE  PRODUCT_ATTRIBUTE_TYPE,
19070                    QPL.AUTOMATIC_FLAG APPLIED_FLAG, -- shu fix bug 1915355
19071                    QPLAT_PROD.COMPARISON_OPERATOR_TYPE_CODE PRODUCT_OPERATOR_TYPE,
19072                    QPLAT_PRIC.CONTEXT              PRICING_ATTRIBUTE_CONTEXT,
19073                    QPLAT_PRIC.ATTRIBUTE            PRICING_ATTRIBUTE,
19074                    QPLAT_PRIC.VALUE_FROM           PRICING_ATTR_VALUE_FROM,
19075                    QPA.PRICING_ATTR_VALUE_FROM     PRICING_SETUP_VALUE_FROM,
19076                    QPA.PRICING_ATTR_VALUE_TO       PRICING_SETUP_VALUE_TO,
19077                    QPLAT_PRIC.ATTRIBUTE_LEVEL      PRICING_ATTRIBUTE_LEVEL,
19078                    QPLAT_PRIC.ATTRIBUTE_TYPE       PRICING_ATTRIBUTE_TYPE,
19079                    QPA.COMPARISON_OPERATOR_CODE    PRICING_OPERATOR_TYPE,
19080                    QPA.PRICING_ATTRIBUTE_DATATYPE   PRICING_ATTRIBUTE_DATATYPE
19081    FROM
19082          qp_npreq_lines_tmp QPLINES,
19083          qp_npreq_line_attrs_tmp QPLAT_PROD,
19084          QP_PRICING_ATTRIBUTES QPA,
19085          qp_npreq_line_attrs_tmp QPLAT_PRIC,
19086          QP_LIST_HEADERS_B QPH,
19087          QP_LIST_LINES QPL,
19088          QP_PRICE_REQ_SOURCES QPRS
19089    WHERE QPA.PRICING_PHASE_ID = p_pricing_phase_id
19090    AND   QPA.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
19091                             QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
19092    AND   QPLAT_PROD.CONTEXT = QPA.PRODUCT_ATTRIBUTE_CONTEXT
19093    AND   QPLAT_PROD.ATTRIBUTE = QPA.PRODUCT_ATTRIBUTE
19094    AND   QPLAT_PROD.VALUE_FROM = QPA.PRODUCT_ATTR_VALUE
19095    AND   QPLINES.PRICED_UOM_CODE = NVL(QPA.PRODUCT_UOM_CODE,QPLINES.PRICED_UOM_CODE)
19096    AND   (QPLINES.PRICE_FLAG = G_YES
19097              OR
19098              (QPLINES.PRICE_FLAG = G_PHASE
19099               AND
19100               P_FREEZE_OVERRIDE_FLAG = G_YES))
19101    AND   QPLAT_PRIC.CONTEXT = QPA.PRICING_ATTRIBUTE_CONTEXT
19102          AND QPLAT_PRIC.ATTRIBUTE = QPA.PRICING_ATTRIBUTE
19103          AND (QPLAT_PRIC.VALUE_FROM = QPA.PRICING_ATTR_VALUE_FROM
19104                OR
19105                QPA.COMPARISON_OPERATOR_CODE = G_OPERATOR_BETWEEN)
19106    AND QPLAT_PRIC.ATTRIBUTE_TYPE = G_PRICING_TYPE
19107    AND QPLAT_PRIC. PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19108    AND QPLAT_PROD.LINE_INDEX = QPLAT_PRIC.LINE_INDEX
19109    AND QPH.LIST_HEADER_ID = QPA.LIST_HEADER_ID
19110 --added for moac -- commented references to security profile
19111 --security will be built into qp_list_headers_b
19112 --   AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
19113 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
19114 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
19115    AND   QPH.ASK_FOR_FLAG = G_YES
19116    AND   QPA.LIST_LINE_ID = L_LIST_LINE_ID
19117    AND   QPA.LIST_LINE_ID = QPL.LIST_LINE_ID
19118    AND   QPLAT_PROD.ATTRIBUTE_TYPE = G_PRODUCT_TYPE
19119    --AND   QPL.PRICING_PHASE_ID = p_pricing_phase_id
19120    --AND   QPL.QUALIFICATION_IND IN (QP_PREQ_GRP.G_YES_PROD_PRIC_IND, QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND,
19121    --                                QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
19122    AND   QPLAT_PROD.LINE_INDEX = L_LINE_INDEX
19123    AND   QPLINES.LINE_INDEX = L_LINE_INDEX
19124    AND    QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19125            NVL(TRUNC(QPH.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19126            AND NVL(TRUNC(QPH.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19127    AND   NVL(QPLINES.START_DATE_ACTIVE_FIRST,TRUNC(SYSDATE)) BETWEEN
19128            NVL(QPH.START_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19129                TRUNC(SYSDATE) )) AND
19130            NVL(QPH.END_DATE_ACTIVE_FIRST, NVL(QPLINES.START_DATE_ACTIVE_FIRST,
19131                TRUNC(SYSDATE) ))
19132    AND  NVL(QPLINES.START_DATE_ACTIVE_SECOND,TRUNC(SYSDATE)) BETWEEN
19133            NVL(QPH.START_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19134                TRUNC(SYSDATE) )) AND
19135            NVL(QPH.END_DATE_ACTIVE_SECOND, NVL(QPLINES.START_DATE_ACTIVE_SECOND,
19136                TRUNC(SYSDATE) ))
19137    AND   NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X') =
19138                 NVL(QPH.ACTIVE_DATE_FIRST_TYPE,NVL(QPLINES.ACTIVE_DATE_FIRST_TYPE,'X'))
19139    AND   NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X') =
19140                 NVL(QPH.ACTIVE_DATE_SECOND_TYPE,NVL(QPLINES.ACTIVE_DATE_SECOND_TYPE,'X'))
19141    AND   QPLINES.PRICING_EFFECTIVE_DATE BETWEEN
19142            NVL(TRUNC(QPL.START_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19143            AND NVL(TRUNC(QPL.END_DATE_ACTIVE),QPLINES.PRICING_EFFECTIVE_DATE)
19144    AND   ((QPH.CURRENCY_CODE IS NOT NULL AND QPH.CURRENCY_CODE = QPLINES.CURRENCY_CODE)
19145           OR
19146           QPH.CURRENCY_CODE IS NULL) -- optional currency
19147    AND   (QPL.MODIFIER_LEVEL_CODE = QPLINES.LINE_TYPE_CODE
19148           OR
19149           QPL.MODIFIER_LEVEL_CODE = G_LINE_GROUP AND QPLINES.LINE_TYPE_CODE <> G_ORDER_LEVEL)
19150    AND   QPH.SOURCE_SYSTEM_CODE = QPRS.SOURCE_SYSTEM_CODE
19151    AND   QPLINES.REQUEST_TYPE_CODE   = QPRS.REQUEST_TYPE_CODE
19152    AND   QPH.ACTIVE_FLAG = G_YES
19153    AND   QPLAT_PROD.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
19154    ORDER BY 1,2;
19155 
19156 /*
19157 INDX,QP_PREQ_GRP.list_header_search.l_check_no_list_passed,- No Index Used-,NA,NA
19158 */
19159 CURSOR L_CHECK_NO_LIST_PASSED IS
19160 SELECT 'X'
19161 FROM   qp_npreq_lines_tmp A
19162 WHERE  PROCESSED_CODE IN (G_NO_LIST_PASSED,G_STS_LHS_NOT_FOUND)
19163 AND    LINE_TYPE_CODE <> G_ORDER_LEVEL
19164 AND (instr(PROCESS_STATUS,'FREEGOOD')=0); -- bug 2693700
19165 
19166 /*
19167 INDX,QP_PREQ_GRP.list_header_search.l_check_secondary_search,- No Index Used-,NA,NA
19168 */
19169 CURSOR l_check_secondary_search IS
19170 SELECT 'X'
19171 FROM   qp_npreq_lines_tmp
19172 WHERE  PROCESSED_CODE = G_STS_LHS_NOT_FOUND
19173 AND    LINE_TYPE_CODE <> G_ORDER_LEVEL
19174 AND (instr(PROCESS_STATUS,'FREEGOOD')=0); -- bug 2693700
19175 
19176 /*
19177 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
19178 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
19179 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
19180 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
19181 */
19182 CURSOR l_chk_deleted_pbh_cur(p_line_index IN PLS_INTEGER,
19183                              p_pricing_phase_id NUMBER) IS
19184 SELECT 'X'
19185 FROM qp_npreq_ldets_tmp
19186 WHERE created_from_list_line_type = G_PRICE_BREAK_TYPE
19187 AND   line_index = p_line_index
19188 AND   pricing_phase_id = p_pricing_phase_id
19189 AND   pricing_status_code <> G_STATUS_NEW;
19190 
19191 L_LINE_DETAIL_INDEX PLS_INTEGER;
19192 L_OPERAND_CALCULATION_CODE VARCHAR2(30);
19193 L_OPERAND_VALUE VARCHAR2(30);
19194 L_PRICING_GROUP_SEQUENCE PLS_INTEGER;
19195 L_STATUS_CODE VARCHAR2(30);
19196 L_STATUS_TEXT VARCHAR2(240);
19197 L_LIST_HEADER_ID NUMBER;
19198 L_LIST_LINE_ID NUMBER;
19199 l_incomp_list_line_id NUMBER;
19200 l_incomp_return_status VARCHAR2(30);
19201 l_price_list_line_id  NUMBER;
19202 l_sec_price_list_line_id   NUMBER;
19203 l_sec_incomp_list_line_id      NUMBER;
19204 l_sec_incomp_return_status VARCHAR2(30);
19205 L_LIST_LINE_TYPE_CODE VARCHAR2(30);
19206 L_LIST_PRICE NUMBER;
19207 L_LIST_PRICE_UOM_CODE VARCHAR2(30);
19208 L_PERCENT_PRICE NUMBER;
19209 L_RESULT_FLAG VARCHAR(1):='N';
19210 L_LOOP_COUNT PLS_INTEGER := 0;
19211 x_loop_count PLS_INTEGER := 0;
19212 L_ROUTINE VARCHAR2(240):='ROUTINE:QP_PREQ_GRP.LIST_HEADER_SEARCH';
19213 L_SECONDARY_LIST VARCHAR2(30);
19214 E_NO_LIST_FOUND      EXCEPTION;
19215 E_SEARCH_FLAG_ERROR  EXCEPTION;
19216 L_DUMMY VARCHAR2(1);
19217 L_ERROR_LINE_INDEX PLS_INTEGER;
19218 L_HAVE_NOT_VALIDATED VARCHAR2(30):= G_NO;
19219 L_EX_LINE_INDEX PLS_INTEGER:=-1;
19220 L_EX_PRECEDENCE PLS_INTEGER:=99999999;
19221 L_EX_LIST_LINE_ID PLS_INTEGER:=-1;
19222 L_BAD_LIST_LINE_ID NUMBER:=-1;
19223 L_FURTHER_SEARCH_SWITCH VARCHAR2(3):='OFF';
19224 PERFORM_SEC_PL_SEARCH BOOLEAN := FALSE;
19225 QUALIFIER_EXISTS_FLAG BOOLEAN := FALSE;
19226 v_list_header_id	       NUMBER;
19227 v_sec_list_header_id	  NUMBER;
19228 v_sec_list_line_id	       NUMBER;
19229 l_pricing_effective_date DATE;
19230 q BINARY_INTEGER:=NULL;
19231 l_line_quantity            NUMBER;
19232 l_line_uom_code            VARCHAR2(30);
19233 x_list_line_id             NUMBER;
19234 l_return_status            VARCHAR2(240);
19235 x_return_status            VARCHAR2(240);
19236 x_return_status_txt        VARCHAR2(240);
19237 l_error_status_code        VARCHAR2(30);
19238 l_error_status_txt         VARCHAR2(240);
19239 K PLS_INTEGER:=1;
19240 M PLS_INTEGER:=1;
19241 nROWS                      CONSTANT NUMBER := 5000;
19242 
19243 lq_line_index              NUMBER := -9999;
19244 lq_list_line_id            NUMBER := -9999;
19245 
19246 E_ROUTINE_ERRORS       EXCEPTION;
19247 
19248 
19249 BEGIN
19250 
19251 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19252 engine_debug('IN '|| L_ROUTINE);
19253 
19254 END IF;
19255 
19256 x_status_code := FND_API.G_RET_STS_SUCCESS;
19257 
19258 IF (p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID) THEN -- Only for modifiers ask for list headers/lines
19259 
19260 IF (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES) THEN -- price book
19261 -- Validated List Headers / List Lines
19262 FOR J IN L_VALIDATED_CUR LOOP
19263 
19264      IF (J.ATTRIBUTE = G_PROMOTION_ATTRIBUTE) THEN
19265 
19266       lq_line_index              := -9999;
19267       lq_list_line_id            := -9999;
19268 
19269       L_LIST_HEADER_ID := TO_NUMBER(J.VALUE_FROM);
19270       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19271       ENGINE_DEBUG('Asked For List Header ID:'||L_LIST_HEADER_ID || 'Line : ' || J.LINE_INDEX);
19272       END IF;
19273 
19274            qp_debug_util.tstart('L_OTHER_LIST_CUR','Cursor Loop L_OTHER_LIST_CUR');
19275 
19276 
19277            FOR K IN L_OTHER_LIST_CUR (J.LINE_INDEX,
19278                                       L_LIST_HEADER_ID,
19279                                       P_FREEZE_OVERRIDE_FLAG)
19280            LOOP
19281             IF (lq_line_index <> j.line_index OR lq_list_line_id <> k.list_line_id) THEN
19282 
19283               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19284               engine_debug('List line id selected from asked for prom l_other_list_cur : '||K.list_line_id );
19285               END IF;
19286               L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
19287 
19288               INSERT_LDETS(P_LINE_DETAIL_INDEX   => L_LINE_DETAIL_INDEX,
19289                    P_LINE_DETAIL_TYPE_CODE       => 'NULL',
19290                    P_LINE_INDEX                  => J.LINE_INDEX,
19291                    P_CREATED_FROM_LIST_HEADER_ID => L_LIST_HEADER_ID,
19292                    P_CREATED_FROM_LIST_LINE_ID   => K.LIST_LINE_ID,
19293                    P_CREATED_FROM_LIST_TYPE_CODE => K.LIST_TYPE_CODE,
19294                    P_CREATED_FROM_SQL            => 'LHS_MODIFIER ',
19295                    P_PRICING_PHASE_ID            => K.PRICING_PHASE_ID,
19296                    P_CREATED_FROM_LIST_LINE_TYPE => K.LIST_LINE_TYPE_CODE,
19297                    P_PRICING_GROUP_SEQUENCE      => K.PRICING_GROUP_SEQUENCE,
19298                    P_OPERAND_CALCULATION_CODE    => K.ARITHMETIC_OPERATOR,
19299                    P_OPERAND_VALUE               => K.OPERAND,
19300                    P_PRICING_STATUS_CODE         => G_STATUS_NEW,
19301                    P_PROCESSED_FLAG              => G_NOT_PROCESSED,
19302                    P_AUTOMATIC_FLAG              => K.AUTOMATIC_FLAG,
19303                    P_APPLIED_FLAG                => K.APPLIED_FLAG, -- fix bug 1915355
19304                    P_OVERRIDE_FLAG               => K.OVERRIDE_FLAG,
19305                    P_PRINT_ON_INVOICE_FLAG       => K.PRINT_ON_INVOICE_FLAG,
19306                    P_MODIFIER_LEVEL_CODE         => K.MODIFIER_LEVEL_CODE,
19307                    P_BENEFIT_QTY                 => K.BENEFIT_QTY,
19308                    P_BENEFIT_UOM_CODE            => K.BENEFIT_UOM_CODE,
19309                    P_LIST_LINE_NO                => K.LIST_LINE_NO,
19310                    P_ACCRUAL_FLAG                => K.ACCRUAL_FLAG,
19311                    P_ACCRUAL_CONVERSION_RATE     => K.ACCRUAL_CONVERSION_RATE,
19312                    P_ESTIM_ACCRUAL_RATE          => K.ESTIM_ACCRUAL_RATE,
19313                    P_RECURRING_FLAG              => K.RECURRING_FLAG,
19314                    P_INCOMPATABLILITY_GRP_CODE   => K.INCOMPATIBILITY_GRP_CODE,
19315                    P_PRICE_FORMULA_ID            => K.PRICE_BY_FORMULA_ID,
19316                    P_PRODUCT_PRECEDENCE          => K.PRODUCT_PRECEDENCE,
19317                    P_PRIMARY_UOM_FLAG            => K.PRIMARY_UOM_FLAG,
19318                    P_ASK_FOR_FLAG                => K.ASK_FOR_FLAG,
19319                    P_ROUNDING_FACTOR             => K.ROUNDING_FACTOR,
19320                    X_STATUS_CODE                 => L_STATUS_CODE,
19321                    X_STATUS_TEXT                 => L_STATUS_TEXT);
19322 
19323                    lq_line_index := j.line_index;
19324                    lq_list_line_id := k.list_line_id;
19325 
19326                END IF;
19327 
19328                --INSERT PRODUCT ATTRIBUTES
19329                G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19330                G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19331                G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRODUCT_ATTRIBUTE_LEVEL;
19332                G_ATTRIBUTE_TYPE_tbl(M)          := K.PRODUCT_ATTRIBUTE_TYPE;
19333                G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19334                G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19335                G_CONTEXT_tbl(M)                 := K.PRODUCT_ATTRIBUTE_CONTEXT;
19336                G_ATTRIBUTE_tbl(M)               := K.PRODUCT_ATTRIBUTE;
19337                G_VALUE_FROM_tbl(M)              := K.PRODUCT_ATTR_VALUE_FROM;
19338                G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRODUCT_OPERATOR_TYPE;
19339                G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19340                G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19341                G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19342                G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19343                G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19344                G_VALIDATED_FLAG_tbl(M)          := NULL;
19345                G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19346                G_SETUP_VALUE_FROM_tbl(M)        := NULL;
19347                G_SETUP_VALUE_TO_tbl(M)          := NULL;
19348                G_GROUPING_NUMBER_tbl(M)         := NULL;
19349                G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19350                G_DATATYPE_tbl(M)                := NULL;
19351                G_QUALIFIER_TYPE_TBL(M)          := NULL;
19352                G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19353                G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19354                G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19355                G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19356                G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19357                M:= M+1;
19358 
19359 
19360                IF (K.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL) THEN
19361                 --INSERT PRICING ATTRIBUTES
19362                 G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19363                 G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19364                 G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRICING_ATTRIBUTE_LEVEL;
19365                 G_ATTRIBUTE_TYPE_tbl(M)          := K.PRICING_ATTRIBUTE_TYPE;
19366                 G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19367                 G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19368                 G_CONTEXT_tbl(M)                 := K.PRICING_ATTRIBUTE_CONTEXT;
19369                 G_ATTRIBUTE_tbl(M)               := K.PRICING_ATTRIBUTE;
19370                 G_VALUE_FROM_tbl(M)              := K.PRICING_ATTR_VALUE_FROM;
19371                 G_SETUP_VALUE_FROM_tbl(M)        := K.PRICING_SETUP_VALUE_FROM;
19372                 G_SETUP_VALUE_TO_tbl(M)          := K.PRICING_SETUP_VALUE_TO;
19373                 G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRICING_OPERATOR_TYPE;
19374                 G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19375                 G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19376                 G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19377                 G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19378                 G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19379                 G_VALIDATED_FLAG_tbl(M)          := NULL;
19380                 G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19381                 G_GROUPING_NUMBER_tbl(M)         := NULL;
19382                 G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19383                 G_DATATYPE_tbl(M)                := K.PRICING_ATTRIBUTE_DATATYPE;
19384                 G_QUALIFIER_TYPE_TBL(M)          := NULL;
19385                 G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19386                 G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19387                 G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19388                 G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19389                 G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19390                 M:= M+1;
19391                END IF;
19392                l_loop_count := l_loop_count +1;
19393            END LOOP;
19394 
19395 	   qp_debug_util.tstop('L_OTHER_LIST_CUR');
19396 
19397       ELSE -- Asked for list line
19398 
19399         lq_line_index              := -9999;
19400         lq_list_line_id            := -9999;
19401 
19402         L_LIST_LINE_ID := to_number(J.VALUE_FROM);
19403         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19404         ENGINE_DEBUG('Asked For List Line ID:'||L_LIST_LINE_ID || 'Line : ' || J.LINE_INDEX);
19405         ENGINE_DEBUG('Pricing Phase Id:'||p_pricing_phase_id );
19406 
19407         END IF;
19408 
19409 	   qp_debug_util.tstart('L_OTHER_LIST_LINE_CUR','Cursor Loop L_OTHER_LIST_LINE_CUR');
19410 
19411            FOR K IN L_OTHER_LIST_LINE_CUR (J.LINE_INDEX,
19412                                            L_LIST_LINE_ID,
19413                                            P_FREEZE_OVERRIDE_FLAG)
19414            LOOP
19415             IF (lq_line_index <> j.line_index OR lq_list_line_id <> k.list_line_id) THEN
19416              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19417              engine_debug('List line id selected from asked for prom l_other_list_cur : '||K.list_line_id );
19418              END IF;
19419               L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
19420 
19421               INSERT_LDETS(P_LINE_DETAIL_INDEX   => L_LINE_DETAIL_INDEX,
19422                    P_LINE_DETAIL_TYPE_CODE       => 'NULL',
19423                    P_LINE_INDEX                  => J.LINE_INDEX,
19424                    P_CREATED_FROM_LIST_HEADER_ID => K.LIST_HEADER_ID,
19425                    P_CREATED_FROM_LIST_LINE_ID   => K.LIST_LINE_ID,
19426                    P_CREATED_FROM_LIST_TYPE_CODE => K.LIST_TYPE_CODE,
19427                    P_CREATED_FROM_SQL            => 'LHS_MODIFIER ',
19428                    P_PRICING_PHASE_ID            => K.PRICING_PHASE_ID,
19429                    P_CREATED_FROM_LIST_LINE_TYPE => K.LIST_LINE_TYPE_CODE,
19430                    P_PRICING_GROUP_SEQUENCE      => K.PRICING_GROUP_SEQUENCE,
19431                    P_OPERAND_CALCULATION_CODE    => K.ARITHMETIC_OPERATOR,
19432                    P_OPERAND_VALUE               => K.OPERAND,
19433                    P_PRICING_STATUS_CODE         => G_STATUS_NEW,
19434                    P_PROCESSED_FLAG              => G_NOT_PROCESSED,
19435                    P_AUTOMATIC_FLAG              => K.AUTOMATIC_FLAG,
19436                    P_APPLIED_FLAG                => K.APPLIED_FLAG,
19437                    P_OVERRIDE_FLAG               => K.OVERRIDE_FLAG,
19438                    P_PRINT_ON_INVOICE_FLAG       => K.PRINT_ON_INVOICE_FLAG,
19439                    P_MODIFIER_LEVEL_CODE         => K.MODIFIER_LEVEL_CODE,
19440                    P_BENEFIT_QTY                 => K.BENEFIT_QTY,
19441                    P_BENEFIT_UOM_CODE            => K.BENEFIT_UOM_CODE,
19442                    P_LIST_LINE_NO                => K.LIST_LINE_NO,
19443                    P_ACCRUAL_FLAG                => K.ACCRUAL_FLAG,
19444                    P_ACCRUAL_CONVERSION_RATE     => K.ACCRUAL_CONVERSION_RATE,
19445                    P_ESTIM_ACCRUAL_RATE          => K.ESTIM_ACCRUAL_RATE,
19446                    P_RECURRING_FLAG              => K.RECURRING_FLAG,
19447                    P_INCOMPATABLILITY_GRP_CODE   => K.INCOMPATIBILITY_GRP_CODE,
19448                    P_PRICE_FORMULA_ID            => K.PRICE_BY_FORMULA_ID,
19449                    P_PRODUCT_PRECEDENCE          => K.PRODUCT_PRECEDENCE,
19450                    P_PRIMARY_UOM_FLAG            => K.PRIMARY_UOM_FLAG,
19451                    P_ASK_FOR_FLAG                => K.ASK_FOR_FLAG,
19452                    P_ROUNDING_FACTOR             => K.ROUNDING_FACTOR,
19453                    X_STATUS_CODE                 => L_STATUS_CODE,
19454                    X_STATUS_TEXT                 => L_STATUS_TEXT);
19455 
19456                    lq_line_index := j.line_index;
19457                    lq_list_line_id := k.list_line_id;
19458 
19459                END IF;
19460 
19461                --INSERT PRODUCT ATTRIBUTES
19462                G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19463                G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19464                G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRODUCT_ATTRIBUTE_LEVEL;
19465                G_ATTRIBUTE_TYPE_tbl(M)          := K.PRODUCT_ATTRIBUTE_TYPE;
19466                G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19467                G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19468                G_CONTEXT_tbl(M)                 := K.PRODUCT_ATTRIBUTE_CONTEXT;
19469                G_ATTRIBUTE_tbl(M)               := K.PRODUCT_ATTRIBUTE;
19470                G_VALUE_FROM_tbl(M)              := K.PRODUCT_ATTR_VALUE_FROM;
19471                G_VALUE_TO_tbl(M)                := K.PRODUCT_ATTR_VALUE_TO;
19472                G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRODUCT_OPERATOR_TYPE;
19473                G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19474                G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19475                G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19476                G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19477                G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19478                G_VALIDATED_FLAG_tbl(M)          := NULL;
19479                G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19480                G_SETUP_VALUE_FROM_tbl(M)        := NULL;
19481                G_SETUP_VALUE_TO_tbl(M)          := NULL;
19482                G_GROUPING_NUMBER_tbl(M)         := NULL;
19483                G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
19484                G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19485                G_DATATYPE_tbl(M)                := NULL;
19486                G_QUALIFIER_TYPE_TBL(M)          := NULL;
19487                G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19488                G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19489                G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19490                G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19491                G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19492                M:= M+1;
19493 
19494 
19495                IF (K.PRICING_ATTRIBUTE_CONTEXT IS NOT NULL) THEN
19496                 --INSERT PRICING ATTRIBUTES
19497                 G_LINE_INDEX_tbl(M)              := K.LINE_INDEX;
19498                 G_LINE_DETAIL_INDEX_tbl(M)       := L_LINE_DETAIL_INDEX;
19499                 G_ATTRIBUTE_LEVEL_tbl(M)         := K.PRICING_ATTRIBUTE_LEVEL;
19500                 G_ATTRIBUTE_TYPE_tbl(M)          := K.PRICING_ATTRIBUTE_TYPE;
19501                 G_LIST_HEADER_ID_TBL(M)          := K.LIST_HEADER_ID;
19502                 G_LIST_LINE_ID_TBL(M)            := K.LIST_LINE_ID;
19503                 G_CONTEXT_tbl(M)                 := K.PRICING_ATTRIBUTE_CONTEXT;
19504                 G_ATTRIBUTE_tbl(M)               := K.PRICING_ATTRIBUTE;
19505                 G_VALUE_FROM_tbl(M)              := K.PRICING_ATTR_VALUE_FROM;
19506                 G_SETUP_VALUE_FROM_tbl(M)        := K.PRICING_SETUP_VALUE_FROM;
19507                 G_SETUP_VALUE_TO_tbl(M)          := K.PRICING_SETUP_VALUE_TO;
19508                 G_COMPARISON_OPERATOR_TYPE_tbl(M):= K.PRICING_OPERATOR_TYPE;
19509                 G_APPLIED_FLAG_tbl(M)            := K.APPLIED_FLAG;
19510                 G_PRICING_STATUS_CODE_tbl(M)     := G_STATUS_NEW;
19511                 G_PRICING_STATUS_TEXT_tbl(M)     :='INSERTED IN VALIDATED ASKED FOR PROMOTION SEARCH';
19512                 G_EXCLUDER_FLAG_TBL(M)           :=K.EXCLUDER_FLAG;
19513                 G_PRODUCT_UOM_CODE_TBL(M)        :=K.PRODUCT_UOM_CODE;
19514                 G_VALIDATED_FLAG_tbl(M)          := NULL;
19515                 G_PRICING_ATTR_FLAG_tbl(M)       := NULL;
19516                 G_GROUPING_NUMBER_tbl(M)         := NULL;
19517                 G_NO_QUALIFIERS_IN_GRP_tbl(M)    := NULL;
19518                 G_QUALIFIER_PRECEDENCE_tbl(M)    := NULL;
19519                 G_DATATYPE_tbl(M)                := K.PRICING_ATTRIBUTE_DATATYPE;
19520                 G_QUALIFIER_TYPE_TBL(M)          := NULL;
19521                 G_VALUE_TO_tbl(M)                := NULL;
19522                 G_PRICING_PHASE_ID_TBL_A(M)        := K.PRICING_PHASE_ID;
19523                 G_INCOMP_GRP_CODE_TBL_A(M)         := K.INCOMPATIBILITY_GRP_CODE;
19524                 G_LINE_DETAIL_TYPE_CODE_TBL_A(M)   := 'NULL';
19525                 G_MODIFIER_LEVEL_CODE_TBL_A(M)     := K.MODIFIER_LEVEL_CODE;
19526                 G_PRIMARY_UOM_FLAG_TBL_A(M)        := K.PRIMARY_UOM_FLAG;
19527                 M:= M+1;
19528                END IF;
19529                l_loop_count := l_loop_count +1;
19530            END LOOP;
19531 
19532            qp_debug_util.tstop('L_OTHER_LIST_LINE_CUR');
19533 
19534 
19535       END IF; -- IF j.attribute = G_PROMOTION_ATTRIBUTE
19536 
19537            IF (M>1) THEN
19538             INSERT_LINE_ATTRS2
19539             (p_LINE_INDEX_tbl                =>G_LINE_INDEX_tbl,
19540              p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_tbl,
19541              p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
19542              p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
19543              p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl,
19544              p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl,
19545              p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
19546              p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
19547              p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
19548              p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
19549              p_VALUE_TO_tbl                  =>G_VALUE_TO_tbl,
19550              p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
19551              p_GROUPING_NUMBER_tbl           => G_GROUPING_NUMBER_tbl,
19552              p_NO_QUALIFIERS_IN_GRP_tbl      =>G_NO_QUALIFIERS_IN_GRP_tbl,
19553              p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
19554              p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
19555              p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
19556              p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
19557              p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
19558              p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
19559              p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
19560              p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
19561              p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
19562              p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
19563              p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
19564              p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
19565              p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
19566              p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
19567              p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
19568              p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
19569              x_status_code                   =>l_status_code,
19570              x_status_text                   =>l_status_text);
19571            IF l_status_code = FND_API.G_RET_STS_ERROR THEN
19572                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19573            END IF;
19574 
19575            END IF;
19576 	   M:=1;
19577 
19578 END LOOP;
19579 -- End Validated List Headers / List Lines
19580 END IF; -- if not price book
19581 
19582 ELSE -- is a price list phase
19583 lq_line_index              := -9999;
19584 lq_list_line_id            := -9999;
19585 
19586 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19587   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19588   engine_debug('cursor open l_list_cur_currency-multi-currency TRUE');
19589 
19590   END IF;
19591 OPEN l_list_cur_currency;
19592 qp_debug_util.tstart('L_LIST_CUR_CURRENCY','Cursor Loop l_list_cur_currency');
19593 else -- vivek, multi currency not installed, not used
19594 OPEN l_list_cur;
19595 qp_debug_util.tstart('L_LIST_CUR','Cursor Loop l_list_cur');
19596 end if; -- vivek, multi currency installed
19597 
19598 LOOP
19599   G_LINE_INDEX_TBL_P.delete;
19600   G_LIST_LINE_ID_TBL_P.delete;
19601   G_LIST_HEADER_ID_TBL_P.delete;
19602   G_OPER_CALCULATION_CODE_TBL_P.delete;
19603   G_OPERAND_VALUE_TBL_P.delete;
19604   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
19605   G_LIST_LINE_TYPE_TBL_P.delete;
19606   G_PRICING_PHASE_ID_TBL_P.delete;
19607   G_AUTOMATIC_FLAG_TBL_P.delete;
19608   G_INCOMP_GRP_CODE_TBL_P.delete;
19609   G_PRICE_FORMULA_ID_TBL_P.delete;
19610   G_PRODUCT_PRECEDENCE_TBL_P.delete;
19611   G_PRIMARY_UOM_FLAG_TBL_P.delete;
19612   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
19613   G_LIST_LINE_NO_TBL_P.delete;
19614   G_PRODUCT_UOM_CODE_TBL_P.delete;
19615   G_EXCLUDER_FLAG_TBL_P.delete;
19616   G_LIST_TYPE_CODE_TBL_P.delete;
19617   G_ROUNDING_FACTOR_TBL_P.delete;
19618   G_CONTEXT_TBL_P.delete;
19619   G_ATTRIBUTE_TBL_P.delete;
19620   G_VALUE_FROM_TBL_P.delete;
19621   G_ATTRIBUTE_LEVEL_TBL_P.delete;
19622   G_ATTRIBUTE_TYPE_TBL_P.delete;
19623   G_APPLIED_FLAG_TBL_P.delete;
19624   G_CONTEXT_TBL_PR.delete;
19625   G_ATTRIBUTE_TBL_PR.delete;
19626   G_VALUE_FROM_TBL_PR.delete;
19627   G_SETUP_VALUE_FROM_TBL_PR.delete;
19628   G_SETUP_VALUE_TO_TBL_PR.delete;
19629   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
19630   G_ATTRIBUTE_TYPE_TBL_PR.delete;
19631   G_OPERATOR_TYPE_TBL_PR.delete;
19632   G_DATATYPE_TBL_PR.delete;
19633   G_BREAK_UOM_TBL_P.delete; /* Proration */
19634   G_BREAK_CONTEXT_TBL_P.delete; /* Proration */
19635   G_BREAK_ATTRIBUTE_TBL_P.delete; /* Proration */
19636   G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;    -- Added for TCA
19637   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
19638 
19639 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19640   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19641   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - delete tables');
19642   END IF;
19643   G_CURRENCY_DETAIL_ID_TBL_P.delete; /* sunilpandey */
19644   G_CURRENCY_HEADER_ID_TBL_P.delete; /* vivek */
19645   G_SELLING_ROUNDING_TBL_P.delete; /* vivek */
19646   G_ORDER_CURRENCY_TBL_P.delete; /* vivek */
19647   G_PRICING_EFFECTIVE_DATE_TBL_P.delete; /* vivek */
19648   G_BASE_CURRENCY_CODE_TBL_P.delete; /* vivek */
19649 end if; /* vivek */
19650 
19651 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19652   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19653   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - bulk fetch');
19654 
19655   END IF;
19656 FETCH l_list_cur_currency BULK COLLECT INTO
19657     G_LINE_INDEX_TBL_P
19658   , G_LIST_LINE_ID_TBL_P
19659   , G_OPER_CALCULATION_CODE_TBL_P
19660   , G_OPERAND_VALUE_TBL_P
19661   , G_PRICING_GROUP_SEQUENCE_TBL_P
19662   , G_LIST_LINE_TYPE_TBL_P
19663   , G_PRICING_PHASE_ID_TBL_P
19664   , G_AUTOMATIC_FLAG_TBL_P
19665   , G_INCOMP_GRP_CODE_TBL_P
19666   , G_PRICE_FORMULA_ID_TBL_P
19667   , G_PRODUCT_PRECEDENCE_TBL_P
19668   , G_PRIMARY_UOM_FLAG_TBL_P
19669   , G_MODIFIER_LEVEL_CODE_TBL_P
19670   , G_LIST_LINE_NO_TBL_P
19671   , G_PRODUCT_UOM_CODE_TBL_P
19672   , G_EXCLUDER_FLAG_TBL_P
19673   , G_LIST_TYPE_CODE_TBL_P
19674   , G_ROUNDING_FACTOR_TBL_P
19675   , G_LIST_HEADER_ID_TBL_P
19676   , G_CONTEXT_TBL_P
19677   , G_ATTRIBUTE_TBL_P
19678   , G_VALUE_FROM_TBL_P
19679   , G_ATTRIBUTE_LEVEL_TBL_P
19680   , G_ATTRIBUTE_TYPE_TBL_P
19681   , G_APPLIED_FLAG_TBL_P
19682   , G_CONTEXT_TBL_PR
19683   , G_ATTRIBUTE_TBL_PR
19684   , G_VALUE_FROM_TBL_PR
19685   , G_SETUP_VALUE_FROM_TBL_PR
19686   , G_SETUP_VALUE_TO_TBL_PR
19687   , G_ATTRIBUTE_LEVEL_TBL_PR
19688   , G_ATTRIBUTE_TYPE_TBL_PR
19689   , G_OPERATOR_TYPE_TBL_PR
19690   , G_DATATYPE_TBL_PR
19691   , G_CURRENCY_DETAIL_ID_TBL_P /* sunilpandey */
19692   , G_CURRENCY_HEADER_ID_TBL_P /* vivek */
19693   , G_SELLING_ROUNDING_TBL_P /* vivek */
19694   , G_ORDER_CURRENCY_TBL_P /* vivek */
19695   , G_PRICING_EFFECTIVE_DATE_TBL_P /* vivek */
19696   , G_BASE_CURRENCY_CODE_TBL_P
19697   , G_BREAK_UOM_TBL_P /* Proration */
19698   , G_BREAK_CONTEXT_TBL_P /* Proration */
19699   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
19700   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
19701      LIMIT nROWS;/* vivek */
19702    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
19703 else -- vivek, multi currency not installed, not used
19704 FETCH l_list_cur BULK COLLECT INTO
19705     G_LINE_INDEX_TBL_P
19706   , G_LIST_LINE_ID_TBL_P
19707   , G_OPER_CALCULATION_CODE_TBL_P
19708   , G_OPERAND_VALUE_TBL_P
19709   , G_PRICING_GROUP_SEQUENCE_TBL_P
19710   , G_LIST_LINE_TYPE_TBL_P
19711   , G_PRICING_PHASE_ID_TBL_P
19712   , G_AUTOMATIC_FLAG_TBL_P
19713   , G_INCOMP_GRP_CODE_TBL_P
19714   , G_PRICE_FORMULA_ID_TBL_P
19715   , G_PRODUCT_PRECEDENCE_TBL_P
19716   , G_PRIMARY_UOM_FLAG_TBL_P
19717   , G_MODIFIER_LEVEL_CODE_TBL_P
19718   , G_LIST_LINE_NO_TBL_P
19719   , G_PRODUCT_UOM_CODE_TBL_P
19720   , G_EXCLUDER_FLAG_TBL_P
19721   , G_LIST_TYPE_CODE_TBL_P
19722   , G_ROUNDING_FACTOR_TBL_P
19723   , G_LIST_HEADER_ID_TBL_P
19724   , G_CONTEXT_TBL_P
19725   , G_ATTRIBUTE_TBL_P
19726   , G_VALUE_FROM_TBL_P
19727   , G_ATTRIBUTE_LEVEL_TBL_P
19728   , G_ATTRIBUTE_TYPE_TBL_P
19729   , G_APPLIED_FLAG_TBL_P
19730   , G_CONTEXT_TBL_PR
19731   , G_ATTRIBUTE_TBL_PR
19732   , G_VALUE_FROM_TBL_PR
19733   , G_SETUP_VALUE_FROM_TBL_PR
19734   , G_SETUP_VALUE_TO_TBL_PR
19735   , G_ATTRIBUTE_LEVEL_TBL_PR
19736   , G_ATTRIBUTE_TYPE_TBL_PR
19737   , G_OPERATOR_TYPE_TBL_PR
19738   , G_DATATYPE_TBL_PR
19739   , G_BREAK_UOM_TBL_P /* Proration */
19740   , G_BREAK_CONTEXT_TBL_P /* Proration */
19741   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
19742   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
19743     LIMIT nROWS;
19744    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
19745 end if; -- vivek, multi currency installed
19746 
19747  IF (G_LINE_INDEX_TBL_P.COUNT > 0 ) THEN
19748 
19749   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
19750 
19751             IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
19752 
19753               L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
19754 
19755                     G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
19756                     G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
19757                     G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
19758                     G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
19759                     G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
19760                     G_PRICING_STATUS_TEXT_LD_TBL(M)       :='INSERTED IN L_LIST_CUR';
19761                     G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
19762                     G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
19763                     G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
19764                     G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I); --[julin] for price book
19765                     G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
19766                     G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
19767                     G_CREATED_FROM_SQL_TBL(M)             :='INSERTED IN L_LIST_CUR';
19768                     G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
19769                     G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
19770                     G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
19771                     G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
19772                     G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
19773                     G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
19774                     G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
19775                     G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
19776                     G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
19777                     G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
19778                     G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
19779                     G_ROUNDING_FACTOR_TBL(M)              :=G_ROUNDING_FACTOR_TBL_P(I);
19780                     G_BREAK_UOM_TBL(M)                    :=G_BREAK_UOM_TBL_P(I); /* Proration */
19781                     G_BREAK_CONTEXT_TBL(M)                :=G_BREAK_CONTEXT_TBL_P(I); /* Proration */
19782                     G_BREAK_ATTRIBUTE_TBL(M)              :=G_BREAK_ATTRIBUTE_TBL_P(I); /* Proration */
19783                if G_MULTI_CURRENCY_PROFILE = 'Y' and
19784                   G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19785   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19786   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - populate tables');
19787   END IF;
19788                     G_CURRENCY_DETAIL_ID_TBL(M)          := G_CURRENCY_DETAIL_ID_TBL_P(I); /* sunilpandey */
19789                     G_CURRENCY_HEADER_ID_TBL(M)          := G_CURRENCY_HEADER_ID_TBL_P(I); /* vivek */
19790                     G_SELLING_ROUNDING_TBL(M)     := G_SELLING_ROUNDING_TBL_P(I); /* vivek */
19791                     G_ORDER_CURRENCY_TBL(M)              := G_ORDER_CURRENCY_TBL_P(I); /* vivek */
19792                     G_PRICING_EFFECTIVE_DATE_TBL(M)      := G_PRICING_EFFECTIVE_DATE_TBL_P(I); /* vivek */
19793                     G_BASE_CURRENCY_CODE_TBL(M)          := G_BASE_CURRENCY_CODE_TBL_P(I); /* vivek */
19794                end if;  /* vivek */
19795                     M := M + 1;
19796                     lq_line_index := g_line_index_tbl_p(I);
19797                     lq_list_line_id := g_list_line_id_tbl_p(I);
19798                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19799                     engine_debug('Rounding Factor: ' || g_rounding_factor_tbl_p(i));
19800                     END IF;
19801             END IF;
19802 
19803                   --INSERT PRODUCT ATTRIBUTES
19804                    G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
19805                    G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
19806                    G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
19807                    G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_P(I);
19808                    G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_P(I);
19809                    G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_P(I);
19810                    G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
19811                    G_VALIDATED_FLAG_tbl(K)          :=G_NO;
19812                    G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
19813                    G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
19814                    G_PRICING_ATTR_FLAG_tbl(K)       :=G_NO;
19815                    G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
19816                    G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
19817                    G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
19818                    G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
19819                    G_SETUP_VALUE_TO_tbl(K)          :=NULL;
19820                    G_GROUPING_NUMBER_tbl(K)         :=NULL;
19821                    G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_CUR';
19822                    G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
19823                    G_DATATYPE_tbl(K)                :=NULL;
19824                    G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
19825                    G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
19826                    G_QUALIFIER_TYPE_TBL(K)          :=NULL;
19827                    G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
19828                    G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
19829                    G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
19830                    G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
19831                    G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
19832                    K:= K+1;
19833 
19834                    --INSERT PRICING ATTRIBUTES
19835                    IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
19836                     G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
19837                     G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
19838                     G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
19839                     G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
19840                     G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
19841                     G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
19842                     G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
19843                     G_VALIDATED_FLAG_tbl(K)          :=G_NO;
19844                     G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
19845                     G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
19846                     G_PRICING_ATTR_FLAG_tbl(K)       :=NULL;
19847                     G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
19848                     G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
19849                     G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
19850                     G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
19851                     G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
19852                     G_GROUPING_NUMBER_tbl(K)         :=NULL;
19853                     G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_CUR';
19854                     G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
19855                     G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
19856                     G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
19857                     G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
19858                     G_QUALIFIER_TYPE_TBL(K)          :=NULL;
19859                     G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
19860                     G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
19861                     G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
19862                     G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
19863                     G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
19864                     K:= K+1;
19865                   END IF;
19866 
19867                 l_loop_count := l_loop_count +1;
19868                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19869                 engine_debug('Primary List Validated Search Count : ' || l_loop_count);
19870                 END IF;
19871    END LOOP;
19872  END IF ;
19873 
19874 END LOOP;
19875 
19876 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19877   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19878   engine_debug('cursor close l_list_cur_currency-multi-currency TRUE');
19879   END IF;
19880 CLOSE l_list_cur_currency;
19881 
19882 qp_debug_util.tstop('L_LIST_CUR_CURRENCY');
19883 else -- vivek, multi currency not installed, not used
19884 CLOSE l_list_cur;
19885 qp_debug_util.tstop('L_LIST_CUR');
19886 end if; -- vivek, multi currency installed
19887 
19888 END IF; -- p_pricing_phase_id <> G_PRICE_LIST_PHASE_ID
19889 
19890 IF M > 1 THEN
19891  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
19892   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
19893   engine_debug('cursor l_list_cur_currency-multi-currency TRUE - insert_ldets2');
19894   END IF;
19895   INSERT_LDETS_PRICE_LIST_MULT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
19896                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
19897                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
19898                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
19899                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
19900                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
19901                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
19902                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
19903                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
19904                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
19905                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
19906                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
19907                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
19908                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
19909                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
19910                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
19911                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
19912                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
19913                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
19914                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
19915                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
19916                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
19917                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
19918                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
19919                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
19920                  P_CURRENCY_DETAIL_ID          =>G_CURRENCY_DETAIL_ID_TBL, /* sunilpandey */
19921                  P_CURRENCY_HEADER_ID          =>G_CURRENCY_HEADER_ID_TBL, /* vivek */
19922                  P_SELLING_ROUNDING_FACTOR          =>G_SELLING_ROUNDING_TBL, /* vivek */
19923                  P_ORDER_CURRENCY              =>G_ORDER_CURRENCY_TBL, /* vivek */
19924                  P_PRICING_EFFECTIVE_DATE      =>G_PRICING_EFFECTIVE_DATE_TBL, /* vivek */
19925                  P_BASE_CURRENCY_CODE          =>G_BASE_CURRENCY_CODE_TBL, /* vivek */
19926                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
19927                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
19928                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
19929                  x_status_code                  =>l_status_code,
19930                  x_status_text                  =>l_status_text
19931                  );
19932  else -- vivek, multi currency not installed, not used
19933   INSERT_LDETS_PRICE_LIST_PVT(
19934                  p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
19935                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
19936                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
19937                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
19938                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
19939                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
19940                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
19941                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
19942                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
19943                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
19944                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
19945                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
19946                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
19947                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
19948                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
19949                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
19950                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
19951                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
19952                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
19953                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
19954                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
19955                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
19956                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
19957                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
19958                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
19959                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
19960                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
19961                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
19962                  x_status_code                  =>l_status_code,
19963                  x_status_text                  =>l_status_text
19964                  );
19965  end if; -- vivek, multi currency installed
19966 END IF;
19967 M := 1;
19968 
19969 
19970 
19971   IF (K>1) THEN
19972    INSERT_PRICE_LIST_ATTRS
19973    (    p_LINE_INDEX_tbl                =>G_LINE_INDEX_tbl,
19974         p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_tbl,
19975         p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
19976         p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
19977         p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl,
19978         p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl,
19979         p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
19980         p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
19981         p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
19982         p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
19983         p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
19984         p_GROUPING_NUMBER_tbl           => G_GROUPING_NUMBER_tbl,
19985         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
19986         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
19987         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
19988         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
19989         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
19990         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
19991         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
19992         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
19993         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
19994         p_PRODUCT_UOM_CODE_TBL          =>G_PRODUCT_UOM_CODE_TBL,
19995         p_EXCLUDER_FLAG_TBL             =>G_EXCLUDER_FLAG_TBL,
19996         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
19997         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
19998         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
19999         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
20000         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
20001         x_status_code                   =>l_status_code,
20002         x_status_text                   =>l_status_text);
20003   END IF;
20004   K:=1;
20005 
20006 
20007 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20008 engine_debug('#100');
20009 
20010 END IF;
20011 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
20012 
20013 lq_line_index := -9999;
20014 lq_list_line_id := -9999;
20015 
20016 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20017   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20018   engine_debug('cursor open l_list_qual_cur_currency-multi-currency TRUE');
20019   END IF;
20020 OPEN l_list_qual_cur_currency;
20021 qp_debug_util.tstart('L_LIST_QUAL_CUR_CURRENCY','Cursor Loop  l_list_qual_cur_currency');
20022 else -- vivek, multi currency not installed, not used
20023 OPEN l_list_qual_cur;
20024 qp_debug_util.tstart('L_LIST_QUAL_CUR','Cursor Loop l_list_qual_cur');
20025 end if; -- vivek, multi currency installed
20026 
20027 LOOP
20028   G_LINE_INDEX_TBL_P.delete;
20029   G_LIST_LINE_ID_TBL_P.delete;
20030   G_OPER_CALCULATION_CODE_TBL_P.delete;
20031   G_OPERAND_VALUE_TBL_P.delete;
20032   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
20033   G_LIST_LINE_TYPE_TBL_P.delete;
20034   G_PRICING_PHASE_ID_TBL_P.delete;
20035   G_AUTOMATIC_FLAG_TBL_P.delete;
20036   G_OVERRIDE_FLAG_TBL_P.delete;
20037   G_PRINT_ON_INVOICE_FLAG_TBL_P.delete;
20038   G_INCOMP_GRP_CODE_TBL_P.delete;
20039   G_PRICE_FORMULA_ID_TBL_P.delete;
20040   G_PRODUCT_PRECEDENCE_TBL_P.delete;
20041   G_PRIMARY_UOM_FLAG_TBL_P.delete;
20042   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
20043   G_LIST_LINE_NO_TBL_P.delete;
20044   G_PRODUCT_UOM_CODE_TBL_P.delete;
20045   G_EXCLUDER_FLAG_TBL_P.delete;
20046   G_LIST_TYPE_CODE_TBL_P.delete;
20047   G_ROUNDING_FACTOR_TBL_P.delete;
20048   G_LIST_HEADER_ID_TBL_P.delete;
20049   G_CONTEXT_TBL_P.delete;
20050   G_ATTRIBUTE_TBL_P.delete;
20051   G_VALUE_FROM_TBL_P.delete;
20052   G_ATTRIBUTE_LEVEL_TBL_P.delete;
20053   G_ATTRIBUTE_TYPE_TBL_P.delete;
20054   G_APPLIED_FLAG_TBL_P.delete;
20055   G_CONTEXT_TBL_PR.delete;
20056   G_ATTRIBUTE_TBL_PR.delete;
20057   G_VALUE_FROM_TBL_PR.delete;
20058   G_SETUP_VALUE_FROM_TBL_PR.delete;
20059   G_SETUP_VALUE_TO_TBL_PR.delete;
20060   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
20061   G_ATTRIBUTE_TYPE_TBL_PR.delete;
20062   G_OPERATOR_TYPE_TBL_PR.delete;
20063   G_CONTEXT_TBL_Q.delete;
20064   G_ATTRIBUTE_TBL_Q.delete;
20065   G_VALUE_FROM_TBL_Q.delete;
20066   G_PRICING_ATTR_FLAG_TBL_Q.delete;
20067   G_GROUPING_NO_TBL_Q.delete;
20068   G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
20069   G_DATATYPE_TBL_Q.delete;
20070   G_SETUP_VALUE_FROM_TBL_Q.delete;
20071   G_SETUP_VALUE_TO_TBL_Q.delete;
20072   G_OPERATOR_TYPE_TBL_Q .delete;
20073   G_DATATYPE_TBL_PR.delete;
20074   G_QUALIFIER_TYPE_TBL_Q.delete;
20075   G_BREAK_UOM_TBL_P.delete; /* Proration */
20076   G_BREAK_CONTEXT_TBL_P.delete; /* Proration */
20077   G_BREAK_ATTRIBUTE_TBL_P.delete; /* Proration */
20078   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete; --[julin] for price book
20079 
20080  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20081   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20082   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - delete tables');
20083   END IF;
20084   G_CURRENCY_DETAIL_ID_TBL_P.delete; /* sunilpandey */
20085   G_CURRENCY_HEADER_ID_TBL_P.delete; /* vivek */
20086   G_SELLING_ROUNDING_TBL_P.delete; /* vivek */
20087   G_ORDER_CURRENCY_TBL_P.delete; /* vivek */
20088   G_PRICING_EFFECTIVE_DATE_TBL_P.delete; /* vivek */
20089   G_BASE_CURRENCY_CODE_TBL_P.delete; /* vivek */
20090  end if; /* vivek */
20091 
20092 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20093   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20094   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - bulk collect');
20095 
20096   END IF;
20097 FETCH l_list_qual_cur_currency BULK COLLECT INTO
20098     G_LINE_INDEX_TBL_P
20099   , G_LIST_LINE_ID_TBL_P
20100   , G_OPER_CALCULATION_CODE_TBL_P
20101   , G_OPERAND_VALUE_TBL_P
20102   , G_PRICING_GROUP_SEQUENCE_TBL_P
20103   , G_LIST_LINE_TYPE_TBL_P
20104   , G_PRICING_PHASE_ID_TBL_P
20105   , G_AUTOMATIC_FLAG_TBL_P
20106   , G_INCOMP_GRP_CODE_TBL_P
20107   , G_PRICE_FORMULA_ID_TBL_P
20108   , G_PRODUCT_PRECEDENCE_TBL_P
20109   , G_PRIMARY_UOM_FLAG_TBL_P
20110   , G_MODIFIER_LEVEL_CODE_TBL_P
20111   , G_LIST_LINE_NO_TBL_P
20112   , G_PRODUCT_UOM_CODE_TBL_P
20113   , G_EXCLUDER_FLAG_TBL_P
20114   , G_LIST_TYPE_CODE_TBL_P
20115   , G_ROUNDING_FACTOR_TBL_P
20116   , G_LIST_HEADER_ID_TBL_P
20117   , G_CONTEXT_TBL_P
20118   , G_ATTRIBUTE_TBL_P
20119   , G_VALUE_FROM_TBL_P
20120   , G_ATTRIBUTE_LEVEL_TBL_P
20121   , G_ATTRIBUTE_TYPE_TBL_P
20122   , G_APPLIED_FLAG_TBL_P
20123   , G_CONTEXT_TBL_PR
20124   , G_ATTRIBUTE_TBL_PR
20125   , G_VALUE_FROM_TBL_PR
20126   , G_SETUP_VALUE_FROM_TBL_PR
20127   , G_SETUP_VALUE_TO_TBL_PR
20128   , G_ATTRIBUTE_LEVEL_TBL_PR
20129   , G_ATTRIBUTE_TYPE_TBL_PR
20130   , G_OPERATOR_TYPE_TBL_PR
20131   , G_CONTEXT_TBL_Q
20132   , G_ATTRIBUTE_TBL_Q
20133   , G_VALUE_FROM_TBL_Q
20134   , G_PRICING_ATTR_FLAG_TBL_Q
20135   , G_GROUPING_NO_TBL_Q
20136   , G_QUALIFIER_PRECEDENCE_TBL_Q
20137   , G_DATATYPE_TBL_Q
20138   , G_SETUP_VALUE_FROM_TBL_Q
20139   , G_SETUP_VALUE_TO_TBL_Q
20140   , G_OPERATOR_TYPE_TBL_Q
20141   , G_DATATYPE_TBL_PR
20142   , G_QUALIFIER_TYPE_TBL_Q
20143   , G_CURRENCY_DETAIL_ID_TBL_P /* sunilpandey */
20144   , G_CURRENCY_HEADER_ID_TBL_P /* vivek */
20145   , G_SELLING_ROUNDING_TBL_P /* vivek */
20146   , G_ORDER_CURRENCY_TBL_P /* vivek */
20147   , G_PRICING_EFFECTIVE_DATE_TBL_P /* vivek */
20148   , G_BASE_CURRENCY_CODE_TBL_P
20149   , G_BREAK_UOM_TBL_P /* Proration */
20150   , G_BREAK_CONTEXT_TBL_P /* Proration */
20151   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
20152   , G_DERIVED_QUALIFIER_FLAG_TBL_Q    --- Added for TCA
20153   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
20154     LIMIT nROWS;/* vivek */
20155    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
20156 else -- vivek, multi currency not installed, not used
20157 FETCH l_list_qual_cur BULK COLLECT INTO
20158     G_LINE_INDEX_TBL_P
20159   , G_LIST_LINE_ID_TBL_P
20160   , G_OPER_CALCULATION_CODE_TBL_P
20161   , G_OPERAND_VALUE_TBL_P
20162   , G_PRICING_GROUP_SEQUENCE_TBL_P
20163   , G_LIST_LINE_TYPE_TBL_P
20164   , G_PRICING_PHASE_ID_TBL_P
20165   , G_AUTOMATIC_FLAG_TBL_P
20166   , G_INCOMP_GRP_CODE_TBL_P
20167   , G_PRICE_FORMULA_ID_TBL_P
20168   , G_PRODUCT_PRECEDENCE_TBL_P
20169   , G_PRIMARY_UOM_FLAG_TBL_P
20170   , G_MODIFIER_LEVEL_CODE_TBL_P
20171   , G_LIST_LINE_NO_TBL_P
20172   , G_PRODUCT_UOM_CODE_TBL_P
20173   , G_EXCLUDER_FLAG_TBL_P
20174   , G_LIST_TYPE_CODE_TBL_P
20175   , G_ROUNDING_FACTOR_TBL_P
20176   , G_LIST_HEADER_ID_TBL_P
20177   , G_CONTEXT_TBL_P
20178   , G_ATTRIBUTE_TBL_P
20179   , G_VALUE_FROM_TBL_P
20180   , G_ATTRIBUTE_LEVEL_TBL_P
20181   , G_ATTRIBUTE_TYPE_TBL_P
20182   , G_APPLIED_FLAG_TBL_P
20183   , G_CONTEXT_TBL_PR
20184   , G_ATTRIBUTE_TBL_PR
20185   , G_VALUE_FROM_TBL_PR
20186   , G_SETUP_VALUE_FROM_TBL_PR
20187   , G_SETUP_VALUE_TO_TBL_PR
20188   , G_ATTRIBUTE_LEVEL_TBL_PR
20189   , G_ATTRIBUTE_TYPE_TBL_PR
20190   , G_OPERATOR_TYPE_TBL_PR
20191   , G_CONTEXT_TBL_Q
20192   , G_ATTRIBUTE_TBL_Q
20193   , G_VALUE_FROM_TBL_Q
20194   , G_PRICING_ATTR_FLAG_TBL_Q
20195   , G_GROUPING_NO_TBL_Q
20196   , G_QUALIFIER_PRECEDENCE_TBL_Q
20197   , G_DATATYPE_TBL_Q
20198   , G_SETUP_VALUE_FROM_TBL_Q
20199   , G_SETUP_VALUE_TO_TBL_Q
20200   , G_OPERATOR_TYPE_TBL_Q
20201   , G_DATATYPE_TBL_PR
20202   , G_QUALIFIER_TYPE_TBL_Q
20203   , G_BREAK_UOM_TBL_P /* Proration */
20204   , G_BREAK_CONTEXT_TBL_P /* Proration */
20205   , G_BREAK_ATTRIBUTE_TBL_P /* Proration */
20206   , G_DERIVED_QUALIFIER_FLAG_TBL_Q
20207   , G_PRICE_BREAK_TYPE_CODE_TBL_P --[julin] for price book
20208     LIMIT nROWS;
20209    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
20210 end if; -- vivek, multi currency installed
20211 
20212 IF (G_LINE_INDEX_TBL_P.COUNT > 0 ) THEN
20213 
20214   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
20215 
20216                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20217                   engine_debug('#101');
20218 
20219                   engine_debug('List Line Id : ' || g_list_line_id_tbl_p(I));
20220                   engine_debug('Line Index : ' || g_line_index_tbl_P(I));
20221 
20222                   END IF;
20223                   IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
20224 
20225                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20226                     engine_debug('Inserting List Line #102');
20227 
20228                     END IF;
20229                     L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
20230                     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20231                     engine_debug('Line Detail Index : ' || l_line_detail_index);
20232 
20233                     END IF;
20234                     G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
20235                     G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
20236                     G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
20237                     G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
20238                     G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
20239                     G_PRICING_STATUS_TEXT_LD_TBL(M)       :='INSERTED IN L_LIST_QUAL_CUR';
20240                     G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
20241                     G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
20242                     G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
20243                     G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I); --[julin] for price book
20244                     G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
20245                     G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
20246                     G_CREATED_FROM_SQL_TBL(M)             :='INSERTED_IN_L_LIST_QUAL_CUR';
20247                     G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
20248                     G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
20249                     G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
20250                     G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
20251                     G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
20252                     G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
20253                     G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
20254                     G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
20255                     G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20256                     G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20257                     G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
20258                     G_ROUNDING_FACTOR_TBL(M)              :=G_ROUNDING_FACTOR_TBL_P(I);
20259                     G_BREAK_UOM_TBL(M)                    :=G_BREAK_UOM_TBL_P(I); /* Proration */
20260                     G_BREAK_CONTEXT_TBL(M)                :=G_BREAK_CONTEXT_TBL_P(I); /* Proration */
20261                     G_BREAK_ATTRIBUTE_TBL(M)              :=G_BREAK_ATTRIBUTE_TBL_P(I); /* Proration */
20262                if G_MULTI_CURRENCY_PROFILE = 'Y' and
20263                   G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20264   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20265   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - populate tables');
20266   END IF;
20267                     G_CURRENCY_DETAIL_ID_TBL(M)          := G_CURRENCY_DETAIL_ID_TBL_P(I); /* sunilpandey */
20268                     G_CURRENCY_HEADER_ID_TBL(M)          := G_CURRENCY_HEADER_ID_TBL_P(I); /* vivek */
20269                     G_SELLING_ROUNDING_TBL(M)     := G_SELLING_ROUNDING_TBL_P(I); /* vivek */
20270                     G_ORDER_CURRENCY_TBL(M)              := G_ORDER_CURRENCY_TBL_P(I); /* vivek */
20271                     G_PRICING_EFFECTIVE_DATE_TBL(M)      := G_PRICING_EFFECTIVE_DATE_TBL_P(I); /* vivek */
20272                     G_BASE_CURRENCY_CODE_TBL(M)          := G_BASE_CURRENCY_CODE_TBL_P(I); /* vivek */
20273                end if;  /* vivek */
20274                     M := M+1;
20275                     lq_line_index := g_line_index_tbl_p(I);
20276                     lq_list_line_id := g_list_line_id_tbl_p(I);
20277                   END IF;
20278 
20279                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20280                   engine_debug('#103');
20281                   END IF;
20282                  IF (G_CONTEXT_TBL_Q(I) IS NOT NULL) THEN
20283                   --Qualifiers attributes
20284                   G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
20285                   G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
20286                   G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(I),'X');
20287                   G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
20288                   G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(I);
20289                   G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(I);
20290                   G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(I);
20291                   G_COMPARISON_OPERATOR_TYPE_tbl(K):= G_OPERATOR_TYPE_TBL_Q(I);
20292                   G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
20293                   G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
20294                   G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(I);
20295                   G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(I);
20296                   G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(I);
20297                   G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(I);
20298                   G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(I);
20299                   G_PRICING_STATUS_TEXT_tbl(K)     := 'INSERTED IN L_LIST_QUAL_CUR';
20300                   G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(I);
20301                   G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(I);
20302                   G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(I);
20303                   G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(I);
20304                   G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(I);
20305                   G_VALIDATED_FLAG_tbl(K)          := G_NO;
20306                   G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
20307                   G_PRICING_PHASE_ID_TBL_A(K)        := G_PRICING_PHASE_ID_TBL_P(I);
20308                   G_INCOMP_GRP_CODE_TBL_A(K)         := G_INCOMP_GRP_CODE_TBL_P(I);
20309                   G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   := 'NULL';
20310                   G_MODIFIER_LEVEL_CODE_TBL_A(K)     := G_MODIFIER_LEVEL_CODE_TBL_P(I);
20311                   G_PRIMARY_UOM_FLAG_TBL_A(K)        := G_PRIMARY_UOM_FLAG_TBL_P(I);
20312                   K:= K+1;
20313                 END IF;
20314 
20315                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20316                   engine_debug('#1031');
20317 
20318                   END IF;
20319                   --INSERT PRODUCT ATTRIBUTES
20320                    G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
20321                    G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
20322                    G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
20323                    G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_P(I);
20324                    G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_P(I);
20325                    G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_P(I);
20326                    G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
20327                    G_VALIDATED_FLAG_tbl(K)          :=G_NO;
20328                    G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
20329                    G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
20330                    G_PRICING_ATTR_FLAG_tbl(K)       :=G_NO;
20331                    G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
20332                    G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
20333                    G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
20334                    G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
20335                    G_SETUP_VALUE_TO_tbl(K)          :=NULL;
20336                    G_GROUPING_NUMBER_tbl(K)         :=NULL;
20337                    G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_QUAL_CUR';
20338                    G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
20339                    G_DATATYPE_tbl(K)                :=NULL;
20340                    G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
20341                    G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
20342                    G_QUALIFIER_TYPE_TBL(K)          :=NULL;
20343                    G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
20344                    G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
20345                    G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
20346                    G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20347                    G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20348                    K:= K+1;
20349 
20350                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20351                   engine_debug('#105');
20352                   END IF;
20353 
20354                    --INSERT PRICING ATTRIBUTES
20355                    IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
20356                     G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
20357                     G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
20358                     G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
20359                     G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
20360                     G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
20361                     G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
20362                     G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
20363                     G_VALIDATED_FLAG_tbl(K)          :=G_NO;
20364                     G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
20365                     G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
20366                     G_PRICING_ATTR_FLAG_tbl(K)       :=NULL;
20367                     G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
20368                     G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
20369                     G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
20370                     G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
20371                     G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
20372                     G_GROUPING_NUMBER_tbl(K)         :=NULL;
20373                     G_PRICING_STATUS_TEXT_tbl(K)     :='INSERTED IN L_LIST_QUAL_CUR';
20374                     G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
20375                     G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
20376                     G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
20377                     G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
20378                     G_QUALIFIER_TYPE_TBL(K)          :=NULL;
20379                     G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
20380                     G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
20381                     G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
20382                     G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
20383                     G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
20384                     K:= K+1;
20385                    END IF;
20386 
20387                   l_loop_count := l_loop_count +1;
20388                   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20389                   engine_debug('Primary List Non Validated Search Count : ' || l_loop_count);
20390                   END IF;
20391   END LOOP;
20392  END IF;
20393 
20394 END LOOP;
20395 
20396 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20397   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20398   engine_debug('cursor close l_list_qual_cur_currency-multi-currency TRUE');
20399   END IF;
20400 CLOSE l_list_qual_cur_currency;
20401 qp_debug_util.tstop('L_LIST_QUAL_CUR_CURRENCY');
20402 else -- vivek, multi currency not installed, not used
20403 CLOSE l_list_qual_cur;
20404 
20405 qp_debug_util.tstop('L_LIST_QUAL_CUR');
20406 
20407 end if; -- vivek, multi currency installed
20408 
20409 END IF; -- p_pricing_phase_id = G_PRICE_LIST_PHASE_ID
20410 
20411 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20412 engine_debug('#106');
20413 
20414 END IF;
20415 IF M > 1 THEN
20416  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
20417   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20418   engine_debug('cursor l_list_qual_cur_currency-multi-currency TRUE - insert_ldets2');
20419 
20420   END IF;
20421   INSERT_LDETS_PRICE_LIST_MULT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
20422                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
20423                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
20424                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
20425                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
20426                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
20427                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
20428                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
20429                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
20430                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
20431                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
20432                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
20433                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
20434                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
20435                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
20436                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
20437                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
20438                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
20439                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
20440                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
20441                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
20442                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
20443                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
20444                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
20445                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
20446                  P_CURRENCY_DETAIL_ID          =>G_CURRENCY_DETAIL_ID_TBL, /* sunilpandey */
20447                  P_CURRENCY_HEADER_ID          =>G_CURRENCY_HEADER_ID_TBL, /* vivek */
20448                  P_SELLING_ROUNDING_FACTOR     =>G_SELLING_ROUNDING_TBL, /* vivek */
20449                  P_ORDER_CURRENCY              =>G_ORDER_CURRENCY_TBL, /* vivek */
20450                  P_PRICING_EFFECTIVE_DATE      =>G_PRICING_EFFECTIVE_DATE_TBL, /* vivek */
20451                  P_BASE_CURRENCY_CODE          =>G_BASE_CURRENCY_CODE_TBL, /* vivek */
20452                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
20453                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
20454                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
20455                  x_status_code                  =>l_status_code,
20456                  x_status_text                  =>l_status_text
20457                  );
20458 else -- vivek, multi currency not installed, not used
20459   INSERT_LDETS_PRICE_LIST_PVT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
20460                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
20461                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
20462                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
20463                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
20464                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
20465                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
20466                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
20467                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
20468                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
20469                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
20470                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
20471                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
20472                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
20473                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
20474                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
20475                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
20476                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
20477                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
20478                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
20479                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
20480                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
20481                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
20482                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
20483                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
20484                  P_BREAK_UOM_CODE              =>G_BREAK_UOM_TBL, /* Proration */
20485                  P_BREAK_UOM_CONTEXT           =>G_BREAK_CONTEXT_TBL, /* Proration */
20486                  P_BREAK_UOM_ATTRIBUTE         =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
20487                  x_status_code                  =>l_status_code,
20488                  x_status_text                  =>l_status_text
20489                  );
20490  end if; -- vivek, multi currency installed
20491 END IF;
20492 M :=1;
20493 
20494 
20495 IF (K>1) THEN
20496               INSERT_PRICE_LIST_ATTRS
20497               ( p_LINE_INDEX_tbl                =>G_LINE_INDEX_tbl,
20498                 p_LINE_DETAIL_INDEX_tbl         =>G_LINE_DETAIL_INDEX_tbl,
20499                 p_ATTRIBUTE_LEVEL_tbl           =>G_ATTRIBUTE_LEVEL_tbl,
20500                 p_ATTRIBUTE_TYPE_tbl            =>G_ATTRIBUTE_TYPE_tbl,
20501                 p_LIST_HEADER_ID_tbl            =>G_LIST_HEADER_ID_tbl,
20502                 p_LIST_LINE_ID_tbl              =>G_LIST_LINE_ID_tbl,
20503                 p_CONTEXT_tbl                   =>G_CONTEXT_tbl,
20504                 p_ATTRIBUTE_tbl                 =>G_ATTRIBUTE_tbl,
20505                 p_VALUE_FROM_tbl                =>G_VALUE_FROM_tbl,
20506                 p_SETUP_VALUE_FROM_tbl          =>G_SETUP_VALUE_FROM_tbl,
20507                 p_SETUP_VALUE_TO_tbl            =>G_SETUP_VALUE_TO_tbl,
20508                 p_GROUPING_NUMBER_tbl           => G_GROUPING_NUMBER_tbl,
20509                 p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
20510                 p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
20511                 p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
20512                 p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
20513                 p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
20514                 p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
20515                 p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
20516                 p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
20517                 p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
20518                 p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
20519                 p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
20520                 p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
20521                 p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
20522                 p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
20523                 p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
20524                 p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
20525                 x_status_code                   =>l_status_code,
20526                 x_status_text                   =>l_status_text);
20527 END IF;
20528 K:=1;
20529 
20530 
20531 -- Determine Pricing UOM and Qty
20532 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
20533  IF (l_loop_count <> 0 ) THEN
20534 
20535            Evaluate_Between(p_pricing_phase_id,NULL,NULL,l_return_status , l_status_text);
20536 
20537            IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20538             RAISE E_ROUTINE_ERRORS;
20539            END IF;
20540 
20541             -- Check for multiple item categories and customer classes
20542             Eliminate_Multiple_Hierarchies(p_pricing_phase_id,l_return_status,l_status_text);
20543 
20544             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20545              RAISE E_ROUTINE_ERRORS;
20546             END IF;
20547 
20548             --Handle_Excluder(p_pricing_phase_id,NULL,l_return_status,l_status_text);
20549 
20550             Perform_Grouping(p_pricing_phase_id, NULL, l_return_status, l_status_text);
20551             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20552              RAISE E_ROUTINE_ERRORS;
20553             END IF;
20554 
20555             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20556             engine_debug('Non Validated Price List Grouping Return Status : ' || l_return_status);
20557 
20558 
20559             engine_debug('Calling Incomp Routine in Non Validated Price List');
20560 
20561             END IF;
20562  	    QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
20563 				(p_line_index        => NULL,
20564  				 p_order_uom_code    => NULL,
20565 				 p_order_qty         => NULL,
20566 				 p_pricing_phase_id  => G_PRICE_LIST_PHASE_ID,
20567                                  p_call_big_search   => FALSE,
20568 				 x_list_line_id	 =>     l_list_line_id,
20569 				 x_return_status     => l_return_status,
20570 				 x_return_status_txt => l_status_text);
20571 
20572            IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20573             RAISE E_ROUTINE_ERRORS;
20574            END IF;
20575 
20576             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20577             engine_debug('Incomp Return Status Non Validated QP_PREQ_GRP: ' || l_return_status);
20578 
20579             END IF;
20580 
20581             -- 3773652
20582             -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
20583             begin
20584               select 'x' into l_dummy
20585               from qp_npreq_lines_tmp
20586               where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
20587               and (PRICE_FLAG = G_YES
20588                    or
20589                    PRICE_FLAG = G_PHASE and p_freeze_override_flag = G_YES)
20590               and rownum = 1;
20591 
20592               Evaluate_Between(p_pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
20593             exception
20594               when no_data_found then
20595                 null;
20596             end;
20597 
20598         -- Update the request line status for lines which got valid price list
20599             Update_Request_Line_Status(p_control_rec,'SUCCESS',p_freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
20600 
20601             IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20602              RAISE E_ROUTINE_ERRORS;
20603             END IF;
20604 
20605          --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
20606          --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
20607          --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
20608          --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
20609          --By doing this we will get the right price in the PRICE event on change of UOM on the order line
20610          --for price based on price break
20611          Get_Eligible_Price_Break(p_pricing_phase_id,NULL,l_return_status,l_status_text);
20612          IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20613           RAISE E_ROUTINE_ERRORS;
20614          END IF;
20615 
20616 
20617             OPEN l_check_secondary_search;
20618             FETCH l_check_secondary_search INTO l_dummy;
20619 
20620             IF l_check_secondary_search%FOUND  THEN
20621              IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20622              engine_debug('Trying to Perform Secondary Search ');
20623              END IF;
20624              Perform_Secondary_Search(p_freeze_override_flag,p_control_rec,l_return_status,l_status_text);
20625             END IF;
20626             CLOSE l_check_secondary_search;
20627 
20628             --delete children lines of PBH if the parent PBH line get eliminated in QP_Resolve_Incompatability_PVT
20629 
20630       	       /*OPEN l_chk_deleted_pbh_cur(J.line_index,G_PRICE_LIST_PHASE_ID);
20631       	       FETCH l_chk_deleted_pbh_cur INTO l_dummy;
20632       	       IF l_chk_deleted_pbh_cur%FOUND THEN
20633        	        Delete_Invalid_PBH_Children(J.line_index,G_PRICE_LIST_PHASE_ID);
20634                END IF;
20635                CLOSE l_chk_deleted_pbh_cur;*/
20636  ELSE
20637     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20638     engine_debug('LOOOOOOOOOOOP Count : ' || l_loop_count);
20639     END IF;
20640     -- Update the request line status for lines which got valid price list
20641     Update_Request_Line_Status(p_control_rec,'FAILURE',p_freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
20642     IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20643      RAISE E_ROUTINE_ERRORS;
20644     END IF;
20645 
20646     OPEN l_check_secondary_search;
20647     FETCH l_check_secondary_search INTO l_dummy;
20648 
20649     IF l_check_secondary_search%FOUND  THEN
20650       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20651       engine_debug('Trying to Perform Secondary Search ');
20652       END IF;
20653       Perform_Secondary_Search(p_freeze_override_flag,p_control_rec,l_return_status,l_status_text);
20654       IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
20655        RAISE E_ROUTINE_ERRORS;
20656       END IF;
20657     END IF;
20658     CLOSE l_check_secondary_search;
20659  END IF; --l_loop_count <> 0
20660 END IF;
20661 
20662 --If there are request lines that don't have price list passed
20663 --or not validated, the return further_search_flag=Yes to caller
20664 
20665 IF (p_pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
20666  OPEN l_check_no_list_passed;
20667  FETCH l_check_no_list_passed INTO l_dummy;
20668 
20669  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20670  engine_debug('DUMMMMMMMMMMMMMMY: ' || l_dummy);
20671 
20672  END IF;
20673  IF l_check_no_list_passed%FOUND  THEN
20674   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20675   engine_debug('DUMMMMMMMMMMMMMMY1000: ' || l_dummy);
20676   END IF;
20677   x_further_search := G_YES;
20678  ELSE
20679   x_further_search := G_NO;
20680  END IF;
20681 
20682  CLOSE l_check_no_list_passed;
20683 END IF; --p_pricing_phase_id = G_PRICE_LIST_PHASE_ID
20684 
20685 --Reset_all_tbls;
20686 Reset_All_Tbls(l_return_status ,l_status_text );
20687 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
20688  RAISE E_ROUTINE_ERRORS;
20689 END IF;
20690 
20691 EXCEPTION
20692   WHEN E_ROUTINE_ERRORS THEN
20693     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20694     engine_debug(l_routine||': '||l_status_text);
20695     END IF;
20696     x_status_code := FND_API.G_RET_STS_ERROR;
20697     x_status_text := l_routine||': '||l_status_text;
20698   WHEN E_NO_LIST_FOUND THEN
20699     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20700     engine_debug('No list found for a given item even after secondary fetch');
20701     END IF;
20702   WHEN TOO_MANY_ROWS THEN
20703     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20704     engine_debug('In LIST_HEADER_SEARCH procedure');
20705     engine_debug('Conflict in price list detected');
20706     engine_debug(SQLERRM);
20707     END IF;
20708     null;
20709   WHEN NO_DATA_FOUND THEN
20710     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20711     engine_debug('In LIST_HEADER_SEARCH  procedure');
20712     engine_debug('Item is not in the price list');
20713     END IF;
20714     null;
20715   WHEN OTHERS THEN
20716     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20717     engine_debug(l_routine||' '||SQLERRM);
20718     END IF;
20719     x_status_code := FND_API.G_RET_STS_ERROR;
20720     x_status_text := l_routine||' '||SQLERRM;
20721 END LIST_HEADER_SEARCH;
20722 
20723 
20724 
20725 /*+--------------------------------------------------------
20726   | PROCEDURE QUALIFIER_GROUPING
20727   +--------------------------------------------------------
20728 */
20729 PROCEDURE Perform_Qualifier_Grouping(p_line_index_based_flag VARCHAR2,
20730                                      p_pricing_phase_id NUMBER,
20731                                      x_status_code OUT NOCOPY VARCHAR2,
20732                                      x_status_text OUT NOCOPY VARCHAR2) AS
20733 
20734 /*
20735 INDX,QP_PREQ_GRP.perform_qualifier_grouping.header_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
20736 INDX,QP_PREQ_GRP.perform_qualifier_grouping.header_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
20737 */
20738 CURSOR header_level_qual_attrs_cur IS
20739 SELECT a.LIST_HEADER_ID,
20740        a.QUALIFIER_GROUPING_NO,
20741        a.QUALIFIER_GROUP_CNT,
20742        a.UNIQUE_KEY,
20743        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20744        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20745        1  --7038849
20746 FROM   QP_PREQ_QUAL_TMP a
20747 WHERE  a.LIST_LINE_ID = -1
20748 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20749 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20750 AND    a.QUALIFIER_GROUPING_NO = -1  --7038849
20751 GROUP  BY a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
20752 UNION ALL -- 7038849
20753 SELECT a.LIST_HEADER_ID,
20754        a.QUALIFIER_GROUPING_NO,
20755        a.QUALIFIER_GROUP_CNT,
20756        a.UNIQUE_KEY,
20757        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20758        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20759        2  --7038849
20760 FROM   QP_PREQ_QUAL_TMP a
20761 WHERE  a.LIST_LINE_ID = -1
20762 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20763 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20764 AND    a.QUALIFIER_GROUPING_NO <> -1  --7038849
20765 GROUP  BY a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
20766 ORDER  BY 1,6; --7038849
20767 
20768 /*
20769 INDX,QP_PREQ_GRP.perform_qualifier_grouping.hdr_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
20770 INDX,QP_PREQ_GRP.perform_qualifier_grouping.hdr_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
20771 INDX,QP_PREQ_GRP.perform_qualifier_grouping.hdr_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LINE_INDEX,3
20772 */
20773 CURSOR hdr_lvl_qual_attrs_req_line IS
20774 SELECT a.LINE_INDEX,
20775        a.LIST_HEADER_ID,
20776        a.QUALIFIER_GROUPING_NO,
20777        a.QUALIFIER_GROUP_CNT,
20778        a.UNIQUE_KEY,
20779        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20780        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20781        1 -- 7038849
20782 FROM   QP_PREQ_QUAL_TMP a
20783 WHERE  a.LIST_LINE_ID = -1
20784 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20785 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20786 --AND    a.LINE_INDEX > 0
20787 AND    a.QUALIFIER_GROUPING_NO = -1 --7038849
20788 GROUP  BY a.LINE_INDEX , a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
20789 UNION ALL   --7038849
20790 SELECT a.LINE_INDEX,
20791        a.LIST_HEADER_ID,
20792        a.QUALIFIER_GROUPING_NO,
20793        a.QUALIFIER_GROUP_CNT,
20794        a.UNIQUE_KEY,
20795        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20796        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20797        2 -- 7038849
20798 FROM   QP_PREQ_QUAL_TMP a
20799 WHERE  a.LIST_LINE_ID = -1
20800 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20801 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20802 --AND    a.LINE_INDEX > 0
20803 AND    a.QUALIFIER_GROUPING_NO <> -1 --7038849
20804 GROUP  BY a.LINE_INDEX , a.LIST_HEADER_ID, a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.UNIQUE_KEY
20805 ORDER  BY 1,2,7;  --7038849
20806 
20807 /*
20808 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
20809 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_level_qual_attrs_cur,QP_PREQ_QUAL_TMP_N5,LIST_LINE_ID,4
20810 */
20811 CURSOR line_level_qual_attrs_cur IS
20812 SELECT a.LIST_HEADER_ID,
20813        a.LIST_LINE_ID,
20814        a.QUALIFIER_GROUPING_NO,
20815        a.QUALIFIER_GROUP_CNT,
20816        a.HEADER_QUALS_EXIST_FLAG,
20817        a.UNIQUE_KEY,
20818        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20819        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20820        1  --7038849
20821 FROM   QP_PREQ_QUAL_TMP a
20822 WHERE  a.LIST_LINE_ID  > 0
20823 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20824 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20825 AND    a.QUALIFIER_GROUPING_NO = -1  --7038849
20826 GROUP  BY a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,
20827 		a.UNIQUE_KEY
20828 UNION ALL   -- 7038849
20829 SELECT a.LIST_HEADER_ID,
20830        a.LIST_LINE_ID,
20831        a.QUALIFIER_GROUPING_NO,
20832        a.QUALIFIER_GROUP_CNT,
20833        a.HEADER_QUALS_EXIST_FLAG,
20834        a.UNIQUE_KEY,
20835        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20836        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20837        2  --7038849
20838 FROM   QP_PREQ_QUAL_TMP a
20839 WHERE  a.LIST_LINE_ID  > 0
20840 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20841 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20842 AND    a.QUALIFIER_GROUPING_NO <> -1  --7038849
20843 GROUP  BY a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,
20844 		a.UNIQUE_KEY
20845 ORDER  BY 1,2,8;  --7038849
20846 
20847 /*
20848 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
20849 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
20850 INDX,QP_PREQ_GRP.perform_qualifier_grouping.line_lvl_qual_attrs_req_line,QP_PREQ_QUAL_TMP_N1,LINE_INDEX,3
20851 */
20852 CURSOR line_lvl_qual_attrs_req_line IS
20853 SELECT /*+ INDEX (a QP_PREQ_QUAL_TMP_N1) */ a.LINE_INDEX,
20854        a.LIST_HEADER_ID,
20855        a.LIST_LINE_ID,
20856        a.QUALIFIER_GROUPING_NO,
20857        a.QUALIFIER_GROUP_CNT,
20858        a.HEADER_QUALS_EXIST_FLAG,
20859        a.UNIQUE_KEY,
20860        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20861        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20862        1
20863 FROM   QP_PREQ_QUAL_TMP a
20864 WHERE  LIST_LINE_ID  > 0
20865 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20866 --AND    a.LINE_INDEX > 0
20867 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20868 AND    a.QUALIFIER_GROUPING_NO = -1  --7038849
20869 GROUP  BY a.LINE_INDEX, a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,
20870 		a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,a.UNIQUE_KEY
20871 UNION ALL  --7038849
20872 SELECT /*+ INDEX (a QP_PREQ_QUAL_TMP_N1) */ a.LINE_INDEX,
20873        a.LIST_HEADER_ID,
20874        a.LIST_LINE_ID,
20875        a.QUALIFIER_GROUPING_NO,
20876        a.QUALIFIER_GROUP_CNT,
20877        a.HEADER_QUALS_EXIST_FLAG,
20878        a.UNIQUE_KEY,
20879        -- COUNT(distinct qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP [julin/3527596,4274099]
20880        COUNT(qualifier_attribute_context || qualifier_attribute || setup_value_from ) NO_OF_QUALIFIERS_IN_GRP,
20881        2
20882 FROM   QP_PREQ_QUAL_TMP a
20883 WHERE  LIST_LINE_ID  > 0
20884 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20885 --AND    a.LINE_INDEX > 0
20886 AND    a.PRICING_PHASE_ID = p_pricing_phase_id
20887 AND    a.QUALIFIER_GROUPING_NO <> -1  --7038849
20888 GROUP  BY a.LINE_INDEX, a.LIST_HEADER_ID , a.LIST_LINE_ID,a.QUALIFIER_GROUPING_NO,
20889 		a.QUALIFIER_GROUP_CNT,a.HEADER_QUALS_EXIST_FLAG,a.UNIQUE_KEY
20890 ORDER  BY 1,2,3,9;  --7038849
20891 
20892 /*
20893 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
20894 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
20895 */
20896 CURSOR check_hdr_quals_cur(p_list_header_id NUMBER)  IS
20897 SELECT LIST_HEADER_ID
20898 FROM   QP_PREQ_QUAL_TMP
20899 WHERE  LIST_HEADER_ID = p_list_header_id
20900 AND    LIST_LINE_ID = -1
20901 AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20902 AND    PRICING_PHASE_ID = p_pricing_phase_id
20903 AND    ROWNUM = 1;
20904 
20905 /*
20906 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur_req_line,QP_PREQ_QUAL_TMP_N1,LIST_LINE_ID,1
20907 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur_req_line,QP_PREQ_QUAL_TMP_N1,PRICING_STATUS_CODE,2
20908 INDX,QP_PREQ_GRP.perform_qualifier_grouping.check_hdr_quals_cur_req_line,QP_PREQ_QUAL_TMP_N1,LINE_INDEX,3
20909 */
20910 CURSOR check_hdr_quals_cur_req_line(p_list_header_id NUMBER,
20911                                     p_line_index NUMBER)  IS
20912 SELECT LIST_HEADER_ID
20913 FROM   QP_PREQ_QUAL_TMP
20914 WHERE  LIST_HEADER_ID = p_list_header_id
20915 AND    LINE_INDEX = p_line_index
20916 AND    LIST_LINE_ID = -1
20917 AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED
20918 AND    PRICING_PHASE_ID = p_pricing_phase_id
20919 AND    ROWNUM = 1;
20920 
20921 
20922 /*
20923 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_hdr_quals_exist_cur,QP_QUALIFIERS_N1,LIST_HEADER_ID,1
20924 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_hdr_quals_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
20925 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_hdr_quals_exist_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
20926 */
20927 CURSOR chk_other_hdr_quals_exist_cur(p_list_header_id NUMBER) IS
20928 SELECT LIST_HEADER_ID
20929 FROM   QP_QUALIFIERS
20930 WHERE  LIST_HEADER_ID = p_list_header_id
20931 AND    LIST_LINE_ID = -1
20932 AND    QUALIFIER_GROUPING_NO <> -1;
20933 
20934 /*
20935 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_line_quals_exist_cur,QP_QUALIFIERS_N1,LIST_LINE_ID,2
20936 INDX,QP_PREQ_GRP.perform_qualifier_grouping.chk_other_line_quals_exist_cur,QP_QUALIFIERS_N1,QUALIFIER_GROUPING_NO,3
20937 */
20938 CURSOR chk_other_line_quals_exist_cur(p_list_line_id NUMBER) IS
20939 SELECT LIST_LINE_ID
20940 FROM   QP_QUALIFIERS
20941 WHERE  LIST_LINE_ID = p_list_line_id
20942 AND    QUALIFIER_GROUPING_NO <> -1;
20943 
20944 
20945 l_hdr_del_tbl                VARCHAR_TYPE;
20946 l_hdr_success_tbl            NUMBER_TYPE;
20947 l_line_del_tbl               VARCHAR_TYPE;
20948 l_line_success_tbl           NUMBER_TYPE;
20949 l_hdr_del_ind                BINARY_INTEGER:=0;
20950 l_hdr_success_ind            BINARY_INTEGER:=0;
20951 l_line_del_ind               BINARY_INTEGER:=0;
20952 l_line_success_ind           BINARY_INTEGER:=0;
20953 v_list_header_id             NUMBER;
20954 v_header_null_grp_count      NUMBER := 0;
20955 v_line_null_grp_count        NUMBER := 0;
20956 l_line_level_quals_satisfied BOOLEAN := FALSE;
20957 l_other_list_header_id       NUMBER;
20958 l_other_list_line_id       NUMBER;
20959 l_list_header_id             NUMBER := -9999;
20960 l_list_line_id               NUMBER := -9999;
20961 l_line_index                 NUMBER := -9999;
20962 l_other_grp_exists_flag      BOOLEAN := FALSE;
20963 l_other_grp_satisfied_flag   BOOLEAN := FALSE;
20964 l_null_unique_key            VARCHAR2(2000);
20965 
20966 BEGIN
20967 
20968 x_status_code := FND_API.G_RET_STS_SUCCESS;
20969 
20970 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20971 engine_debug('Qualifier Grouping begin');
20972 
20973 END IF;
20974 IF (p_line_index_based_flag = G_NO) THEN
20975 
20976   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20977   engine_debug('#QG1 Phase');
20978 
20979   END IF;
20980   FOR i IN header_level_qual_attrs_cur LOOP
20981 
20982    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
20983    engine_debug('Header Qualifier Grouping No: ' || i.QUALIFIER_GROUPING_NO);
20984    engine_debug('Passed Hdr Quals : '||i.no_of_qualifiers_in_grp||'Hdr id : '||i.list_header_id);
20985    engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
20986 
20987    END IF;
20988    IF (i.LIST_HEADER_ID <> l_list_header_id ) THEN
20989 
20990     v_header_null_grp_count := 0;
20991     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header
20992     IF (l_other_grp_exists_flag = TRUE) THEN
20993      IF (l_other_grp_satisfied_flag = FALSE) THEN
20994       IF (l_null_unique_key IS NOT NULL) THEN
20995        l_hdr_del_ind := l_hdr_del_ind + 1;
20996        l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
20997       END IF;
20998      END IF;
20999     END IF;
21000     l_other_grp_exists_flag := FALSE;
21001     l_other_grp_satisfied_flag := FALSE;
21002    END IF;
21003 
21004    IF (i.QUALIFIER_GROUPING_NO = -1) THEN
21005     l_null_unique_key := i.unique_key;
21006     IF (i.NO_OF_QUALIFIERS_IN_GRP  < i.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
21007      l_other_list_header_id:=NULL;
21008      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
21009      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
21010      CLOSE chk_other_hdr_quals_exist_cur;
21011 
21012      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21013      engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
21014 
21015      END IF;
21016      -- If there are no other groups , then it is a failure on pure null group,else it is not
21017      IF (l_other_list_header_id IS NULL)  THEN
21018       l_other_grp_exists_flag := FALSE;
21019       l_null_unique_key := NULL;
21020       l_hdr_del_ind := l_hdr_del_ind + 1;
21021       l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
21022       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21023       engine_debug('Deleted Hdr id : '||i.list_header_id||' Unique Key : ' || i.unique_key);
21024       END IF;
21025      ELSE
21026       --l_null_unique_key := i.unique_key;
21027       l_other_grp_exists_flag := TRUE;
21028      END IF;
21029         /* Added for 3259922 */
21030     ELSE
21031      l_other_list_header_id:=NULL;
21032      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
21033      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
21034      CLOSE chk_other_hdr_quals_exist_cur;
21035 
21036      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21037                 engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
21038      END IF;
21039 
21040      IF (l_other_list_header_id IS NOT NULL)  THEN
21041      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21042                 engine_debug('Other groups exist');
21043      END IF; -- 4033618
21044                 l_other_grp_exists_flag := TRUE;
21045      END IF; -- end 3259922
21046     END IF;
21047 
21048     v_header_null_grp_count := i.NO_OF_QUALIFIERS_IN_GRP;
21049 
21050     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21051     engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
21052 
21053     END IF;
21054    ELSE
21055 
21056     -- 4043768/4261138, changed <> to < condition
21057     IF (i.NO_OF_QUALIFIERS_IN_GRP + v_header_null_grp_count < i.QUALIFIER_GROUP_CNT) THEN
21058      --l_other_grp_satisfied_flag := FALSE; do not make it false if it is already TRUE because some grp is satisfied
21059      l_hdr_del_ind := l_hdr_del_ind + 1;
21060      l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
21061      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21062      engine_debug('Deleted Hdr id : '||i.list_header_id|| ' Unique Key : ' || i.unique_key);
21063      END IF;
21064     ELSE
21065      l_other_grp_satisfied_flag := TRUE;
21066     END IF;
21067 
21068    END IF;
21069 
21070    l_list_header_id := i.LIST_HEADER_ID;
21071 
21072   END LOOP;
21073 
21074   -- This code is to delete the -1 group if none of the other groups are satisfied for the last list header
21075   IF (l_other_grp_exists_flag = TRUE) THEN
21076        IF (l_other_grp_satisfied_flag = FALSE) THEN
21077          IF (l_null_unique_key IS NOT NULL) THEN
21078           l_hdr_del_ind := l_hdr_del_ind + 1;
21079           l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
21080          END IF;
21081        END IF;
21082    END IF;
21083 
21084   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21085   engine_debug('#QG2');
21086 
21087   END IF;
21088   IF (l_hdr_del_tbl.count > 0) THEN
21089    FOR m in 1 .. l_hdr_del_tbl.count LOOP
21090     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21091     engine_debug('Deleted Headers : ' || l_hdr_del_tbl(m));
21092     END IF;
21093    END LOOP;
21094   END IF;
21095 
21096   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21097   engine_debug('#QG3');
21098 
21099   END IF;
21100   IF (l_hdr_del_tbl.count > 0) THEN
21101    FORALL i in l_hdr_del_tbl.FIRST..l_hdr_del_tbl.LAST
21102 /*
21103 INDX,QP_PREQ_GRP.perform_qualifier_grouping.upd1,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
21104 INDX,QP_PREQ_GRP.perform_qualifier_grouping.upd1,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
21105 */
21106     UPDATE QP_PREQ_QUAL_TMP --upd1
21107     SET   PRICING_STATUS_CODE = G_DELETED_GRP
21108     WHERE UNIQUE_KEY = l_hdr_del_tbl(i)
21109     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
21110     AND   PRICING_PHASE_ID = p_pricing_phase_id;
21111   END IF;
21112 
21113   l_hdr_del_tbl.delete;
21114   l_hdr_del_ind:=0;
21115 
21116   l_other_grp_exists_flag := FALSE;
21117   l_other_grp_satisfied_flag := FALSE;
21118 
21119   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21120   engine_debug('#QG4');
21121 
21122   END IF;
21123   FOR j IN line_level_qual_attrs_cur LOOP
21124 
21125    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21126    engine_debug('Line Qualifier Grouping No: ' || j.QUALIFIER_GROUPING_NO || ' List Header Id : ' || j.list_header_id);
21127    engine_debug('Passed Line Quals : ' || j.no_of_qualifiers_in_grp || 'List Line id : ' || j.list_line_id);
21128    engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
21129 
21130    END IF;
21131    IF (j.LIST_HEADER_ID <> l_list_header_id or j.LIST_LINE_ID <> l_list_line_id) THEN
21132 
21133     v_line_null_grp_count := 0;
21134 
21135     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header or list line
21136     IF (l_other_grp_exists_flag = TRUE) THEN
21137      IF (l_other_grp_satisfied_flag = FALSE) THEN
21138       IF (l_null_unique_key IS NOT NULL) THEN
21139        l_line_del_ind := l_line_del_ind + 1;
21140        l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
21141       END IF;
21142      END IF;
21143     END IF;
21144     l_other_grp_exists_flag := FALSE;
21145     l_other_grp_satisfied_flag := FALSE;
21146    END IF;
21147 
21148    IF (j.QUALIFIER_GROUPING_NO = -1) THEN
21149     l_null_unique_key := j.unique_key;
21150     IF (j.NO_OF_QUALIFIERS_IN_GRP < j.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
21151 
21152      OPEN chk_other_line_quals_exist_cur(j.list_line_id);
21153      FETCH chk_other_line_quals_exist_cur INTO l_other_list_line_id;
21154      CLOSE chk_other_line_quals_exist_cur;
21155 
21156      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21157      engine_debug('Other Groups Exist in this Line id : '||l_other_list_line_id);
21158 
21159      END IF;
21160      -- If there are no other groups , then it is a failure on pure null group,else it is not
21161      IF (l_other_list_line_id IS NULL) THEN
21162       l_other_grp_exists_flag := FALSE;
21163       l_null_unique_key := NULL;
21164       l_line_del_ind := l_line_del_ind + 1;
21165       l_line_del_tbl(l_line_del_ind) := j.unique_key;
21166       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21167       engine_debug('Deleted Line id : '||j.list_line_id|| ' Unique Key : ' || j.unique_key);
21168       END IF;
21169      ELSE
21170       l_other_grp_exists_flag := TRUE;
21171      END IF;
21172     ELSE
21173      l_line_level_quals_satisfied := TRUE;
21174      --l_null_unique_key := j.unique_key;
21175     END IF;
21176 
21177      v_line_null_grp_count := j.NO_OF_QUALIFIERS_IN_GRP;
21178      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21179      engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
21180 
21181      END IF;
21182    ELSE
21183 
21184     -- 4043768/4261138, changed <> to < condition
21185     IF (j.NO_OF_QUALIFIERS_IN_GRP + v_line_null_grp_count < j.QUALIFIER_GROUP_CNT) THEN
21186      --l_other_grp_satisfied_flag := FALSE;
21187      l_line_del_ind := l_line_del_ind + 1;
21188      l_line_del_tbl(l_line_del_ind) := j.unique_key;
21189      --l_line_del_tbl(l_line_del_ind) := j.list_line_id;
21190      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21191      engine_debug('Deleted Line id : '||j.list_line_id|| ' Unique Key : ' || j.unique_key);
21192      END IF;
21193     ELSE
21194      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21195      engine_debug('Line Quals for : ' || j.list_header_id || ' ' || j.list_line_id );
21196      END IF;
21197      l_line_level_quals_satisfied := TRUE;
21198      l_other_grp_satisfied_flag := TRUE;
21199     END IF;
21200 
21201    END IF;
21202 
21203   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21204   engine_debug('#QG5');
21205 
21206   END IF;
21207    -- Check if header level quals are satisfied.If there is a hdr lvl qualifier in setup and it is not selected
21208    IF (l_line_level_quals_satisfied = TRUE) THEN
21209 
21210     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21211     engine_debug('Line Level Quals Satisfied , but checking whether header level qual satisfied');
21212 
21213     END IF;
21214     IF (j.HEADER_QUALS_EXIST_FLAG = G_YES) THEN
21215       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21216       engine_debug('Header level quals exist' );
21217       END IF;
21218       v_list_header_id := NULL;
21219 
21220       OPEN check_hdr_quals_cur(j.LIST_HEADER_ID);
21221       FETCH check_hdr_quals_cur INTO v_list_header_id;
21222       CLOSE check_hdr_quals_cur;
21223 
21224       IF (v_list_header_id IS NULL) THEN
21225        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21226        engine_debug('Line Level Quals Not Satisfied , as Header Id is : ' || nvl(v_list_header_id,-99999));
21227        END IF;
21228        l_line_del_ind := l_line_del_ind + 1;
21229        l_line_del_tbl(l_line_del_ind) := j.unique_key;
21230        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21231        engine_debug('Deleted Line id : '||j.list_line_id|| ' Unique Key : ' || j.unique_key);
21232        END IF;
21233       ELSE
21234        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21235        engine_debug('Line Level Quals Satisfied , Header Id : ' || nvl(v_list_header_id,-99999));
21236        END IF;
21237       END IF;
21238     ELSE
21239       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21240       engine_debug('Header level quals do not exist' );
21241       END IF;
21242     END IF;
21243 
21244    END IF;
21245 
21246    l_line_level_quals_satisfied := FALSE;
21247    l_list_header_id := j.LIST_HEADER_ID;
21248    l_list_line_id := j.LIST_LINE_ID;
21249 
21250   END LOOP;
21251 
21252   -- This code is to delete the -1 group if none of the other groups are satisfied on last list header or list line
21253   IF (l_other_grp_exists_flag = TRUE) THEN
21254      IF (l_other_grp_satisfied_flag = FALSE) THEN
21255       IF (l_null_unique_key IS NOT NULL) THEN
21256        l_line_del_ind := l_line_del_ind + 1;
21257        l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
21258       END IF;
21259      END IF;
21260   END IF;
21261 
21262   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21263   engine_debug('#QG6');
21264 
21265   END IF;
21266   IF (l_line_del_tbl.count > 0 ) THEN
21267    FOR m in 1 .. l_line_del_tbl.count LOOP
21268    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21269    engine_debug('Deleted Lines : ' || l_line_del_tbl(m));
21270    END IF;
21271    END LOOP;
21272   END IF;
21273 
21274   IF (l_line_del_tbl.count > 0 ) THEN
21275    FORALL i in l_line_del_tbl.FIRST..l_line_del_tbl.LAST
21276 /*
21277 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd2,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
21278 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd2,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
21279 */
21280     UPDATE QP_PREQ_QUAL_TMP --upd2
21281     SET   PRICING_STATUS_CODE = G_DELETED_GRP
21282     WHERE UNIQUE_KEY  = l_line_del_tbl(i)
21283     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
21284     AND   PRICING_PHASE_ID = p_pricing_phase_id;
21285   END IF;
21286 
21287   l_line_del_tbl.delete;
21288   l_line_del_ind:=0;
21289 
21290 ELSIF (p_line_index_based_flag = G_YES) THEN
21291 
21292   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21293   engine_debug('#QG1');
21294 
21295   END IF;
21296   FOR i IN hdr_lvl_qual_attrs_req_line LOOP
21297 
21298    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21299    engine_debug('Header Qualifier Grouping No: ' || i.QUALIFIER_GROUPING_NO);
21300    engine_debug('Passed Hdr Quals : '||i.no_of_qualifiers_in_grp||'Hdr id : '||i.list_header_id||' Line Indx: '||i.line_index);
21301    engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
21302 
21303    END IF;
21304 
21305    --[julin/4227338,4261116] IF (i.LIST_HEADER_ID <> l_list_header_id or i.LINE_INDEX <> l_line_index) THEN
21306    IF (i.LIST_HEADER_ID <> l_list_header_id or nvl(i.LINE_INDEX, -88888) <> nvl(l_line_index,-88888)) THEN
21307 
21308     v_header_null_grp_count := 0;
21309 
21310     -- This code is to delete the -1 group if none of the other groups are satisfied on change of list header or line index
21311     IF (l_other_grp_exists_flag = TRUE) THEN
21312      IF (l_other_grp_satisfied_flag = FALSE) THEN
21313       IF (l_null_unique_key IS NOT NULL) THEN
21314        l_hdr_del_ind := l_hdr_del_ind + 1;
21315        l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
21316       END IF;
21317      END IF;
21318     END IF;
21319     l_other_grp_exists_flag := FALSE;
21320     l_other_grp_satisfied_flag := FALSE;
21321    END IF;
21322 
21323    IF (i.QUALIFIER_GROUPING_NO = -1) THEN
21324     l_null_unique_key := i.unique_key;    --added for bug number 3273669
21325     IF (i.NO_OF_QUALIFIERS_IN_GRP < i.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
21326      l_other_list_header_id:=NULL;
21327      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
21328      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
21329      CLOSE chk_other_hdr_quals_exist_cur;
21330 
21331      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21332      engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
21333 
21334      END IF;
21335      -- If there are no other groups , then it is a failure on pure null group,else it is not
21336      IF (l_other_list_header_id IS NULL)  THEN
21337       l_other_grp_exists_flag := FALSE;
21338       l_null_unique_key := NULL;
21339       l_hdr_del_ind := l_hdr_del_ind + 1;
21340       l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
21341       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21342       engine_debug('Deleted Hdr id : '||i.list_header_id||' Line Indx: '||i.line_index || ' Unique Key : ' || i.unique_key);
21343       END IF;
21344      ELSE
21345       l_null_unique_key := i.unique_key;
21346       l_other_grp_exists_flag := TRUE;
21347      END IF;
21348        /* Added for 3273669 */
21349     ELSE
21350      l_other_list_header_id:=NULL;
21351      OPEN chk_other_hdr_quals_exist_cur(i.list_header_id);
21352      FETCH chk_other_hdr_quals_exist_cur INTO l_other_list_header_id;
21353      CLOSE chk_other_hdr_quals_exist_cur;
21354 
21355      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21356                 engine_debug('Other Groups Exist in this Hdr id : '||l_other_list_header_id);
21357      END IF;
21358 
21359      IF (l_other_list_header_id IS NOT NULL)  THEN
21360      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21361                 engine_debug('Other groups exist');
21362      END IF; -- 4033618
21363                 l_other_grp_exists_flag := TRUE;
21364      END IF; -- end 3273669
21365 
21366     END IF;
21367 
21368     v_header_null_grp_count := i.NO_OF_QUALIFIERS_IN_GRP;
21369 
21370     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21371     engine_debug('Header Null Group Count : ' || v_header_null_grp_count);
21372 
21373     END IF;
21374    ELSE
21375     -- 4043768/4261138, changed <> to < condition
21376     IF (i.NO_OF_QUALIFIERS_IN_GRP + v_header_null_grp_count < i.QUALIFIER_GROUP_CNT) THEN
21377      --l_other_grp_satisfied_flag := FALSE;
21378      l_hdr_del_ind := l_hdr_del_ind + 1;
21379      l_hdr_del_tbl(l_hdr_del_ind) := i.unique_key;
21380      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21381      engine_debug('Deleted Hdr id : '||i.list_header_id||' Line Indx: '||i.line_index || ' Unique Key : ' || i.unique_key);
21382      END IF;
21383     ELSE
21384      l_other_grp_satisfied_flag := TRUE;
21385     END IF;
21386 
21387    END IF;
21388 
21389    l_list_header_id := i.LIST_HEADER_ID;
21390    l_line_index := i.LINE_INDEX;
21391 
21392   END LOOP;
21393 
21394   -- This code is to delete the -1 group if none of the other groups are satisfied on last list header or line index
21395   IF (l_other_grp_exists_flag = TRUE) THEN
21396    IF (l_other_grp_satisfied_flag = FALSE) THEN
21397       IF (l_null_unique_key IS NOT NULL) THEN
21398        l_hdr_del_ind := l_hdr_del_ind + 1;
21399        l_hdr_del_tbl(l_hdr_del_ind) := l_null_unique_key;
21400       END IF;
21401    END IF;
21402   END IF;
21403 
21404   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21405   engine_debug('#QG2');
21406 
21407   END IF;
21408   IF (l_hdr_del_tbl.count > 0) THEN
21409    FOR m in 1 .. l_hdr_del_tbl.count LOOP
21410     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21411     engine_debug('Deleted Headers : ' || l_hdr_del_tbl(m));
21412     END IF;
21413    END LOOP;
21414   END IF;
21415 
21416   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21417   engine_debug('#QG3');
21418 
21419   END IF;
21420   IF (l_hdr_del_tbl.count > 0) THEN
21421    FORALL i in l_hdr_del_tbl.FIRST..l_hdr_del_tbl.LAST
21422 /*
21423 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd3,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
21424 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd3,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
21425 */
21426     UPDATE QP_PREQ_QUAL_TMP --upd3
21427     SET   PRICING_STATUS_CODE = G_DELETED_GRP
21428     WHERE UNIQUE_KEY = l_hdr_del_tbl(i)
21429     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
21430     AND   PRICING_PHASE_ID = p_pricing_phase_id;
21431   END IF;
21432 
21433   l_hdr_del_tbl.delete;
21434   l_hdr_del_ind:=0;
21435 
21436   l_other_grp_exists_flag := FALSE;
21437   l_other_grp_satisfied_flag := FALSE;
21438 
21439   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21440   engine_debug('#QG4');
21441 
21442   END IF;
21443   FOR j IN line_lvl_qual_attrs_req_line LOOP
21444 
21445    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21446    engine_debug('Line Qualifier Grouping No: ' || j.QUALIFIER_GROUPING_NO || ' List Header Id : ' || j.list_header_id);
21447    engine_debug('Passed Line Quals : ' || j.no_of_qualifiers_in_grp || 'List Line id : ' || j.list_line_id);
21448    engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
21449 
21450    END IF;
21451    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
21452 
21453     v_line_null_grp_count := 0;
21454 
21455     -- 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
21456     IF (l_other_grp_exists_flag = TRUE) THEN
21457      IF (l_other_grp_satisfied_flag = FALSE) THEN
21458       IF (l_null_unique_key IS NOT NULL) THEN
21459        l_line_del_ind := l_line_del_ind + 1;
21460        l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
21461       END IF;
21462      END IF;
21463     END IF;
21464     l_other_grp_exists_flag := FALSE;
21465     l_other_grp_satisfied_flag := FALSE;
21466    END IF;
21467 
21468    IF (j.QUALIFIER_GROUPING_NO = -1) THEN
21469     l_null_unique_key := j.unique_key;    --	6913520
21470     IF (j.NO_OF_QUALIFIERS_IN_GRP < j.QUALIFIER_GROUP_CNT) THEN -- 4043768/4261138
21471      l_other_list_line_id:=null;  --	6913520
21472 
21473      OPEN chk_other_line_quals_exist_cur(j.list_line_id);
21474      FETCH chk_other_line_quals_exist_cur INTO l_other_list_line_id;
21475      CLOSE chk_other_line_quals_exist_cur;
21476 
21477      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21478      engine_debug('Other Groups Exist in this Line id : '||l_other_list_line_id);
21479 
21480      END IF;
21481      -- If there are no other groups , then it is a failure on pure null group,else it is not
21482      IF (l_other_list_line_id IS NULL) THEN
21483       l_other_grp_exists_flag := FALSE;
21484       l_null_unique_key := NULL;
21485       l_line_del_ind := l_line_del_ind + 1;
21486       l_line_del_tbl(l_line_del_ind) := j.unique_key;
21487       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21488       engine_debug('Deleted Line id : '||j.list_line_id||' Line Indx: '||j.line_index || ' Unique Key : ' || j.unique_key);
21489       END IF;
21490      ELSE
21491       l_other_grp_exists_flag := TRUE;
21492      END IF;
21493     ELSE
21494      l_line_level_quals_satisfied := TRUE;
21495      l_null_unique_key := j.unique_key;
21496     END IF;
21497 
21498      v_line_null_grp_count := j.NO_OF_QUALIFIERS_IN_GRP;
21499      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21500      engine_debug('Line Null Group Count : ' || v_line_null_grp_count);
21501 
21502      END IF;
21503    ELSE
21504     -- 4043768/4261138, changed <> to < condition
21505     IF (j.NO_OF_QUALIFIERS_IN_GRP + v_line_null_grp_count < j.QUALIFIER_GROUP_CNT) THEN
21506      --l_other_grp_satisfied_flag := FALSE;
21507      l_line_del_ind := l_line_del_ind + 1;
21508      l_line_del_tbl(l_line_del_ind) := j.unique_key;
21509      --l_line_del_tbl(l_line_del_ind) := j.list_line_id;
21510      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21511      engine_debug('Deleted Line id : '||j.list_line_id||' Line Indx: '||j.line_index || ' Unique Key : ' || j.unique_key);
21512      END IF;
21513     ELSE
21514      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21515      engine_debug('Line Quals for : ' || j.list_header_id || ' ' || j.list_line_id );
21516      END IF;
21517      l_line_level_quals_satisfied := TRUE;
21518      l_other_grp_satisfied_flag := TRUE;
21519     END IF;
21520 
21521    END IF;
21522 
21523   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21524   engine_debug('#QG5');
21525 
21526   END IF;
21527    -- Check if header level quals are satisfied.If there is a hdr lvl qualifier in setup and it is not selected
21528    IF (l_line_level_quals_satisfied = TRUE) THEN
21529 
21530     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21531     engine_debug('Line Level Quals Satisfied , but checking whether header level qual satisfied');
21532 
21533     END IF;
21534     IF (j.HEADER_QUALS_EXIST_FLAG = G_YES) THEN
21535       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21536       engine_debug('Header level quals exist' );
21537       END IF;
21538       v_list_header_id := NULL;
21539 
21540       OPEN check_hdr_quals_cur_req_line(j.LIST_HEADER_ID,j.LINE_INDEX);
21541       FETCH check_hdr_quals_cur_req_line INTO v_list_header_id;
21542       CLOSE check_hdr_quals_cur_req_line;
21543 
21544       IF (v_list_header_id IS NULL) THEN
21545        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21546        engine_debug('Line Level Quals Not Satisfied , as Header Id is : ' || nvl(v_list_header_id,-99999));
21547        END IF;
21548        l_line_del_ind := l_line_del_ind + 1;
21549        l_line_del_tbl(l_line_del_ind) := j.unique_key;
21550        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21551        engine_debug('Deleted Line id : '||j.list_line_id||' Line Indx: '||j.line_index || ' Unique Key : ' || j.unique_key);
21552        END IF;
21553       ELSE
21554        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21555        engine_debug('Line Level Quals Satisfied , Header Id : ' || nvl(v_list_header_id,-99999));
21556        END IF;
21557       END IF;
21558 
21559     ELSE
21560       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21561       engine_debug('Header level quals do not exist' );
21562       END IF;
21563     END IF;
21564 
21565    END IF;
21566 
21567    l_line_level_quals_satisfied := FALSE;
21568    l_list_header_id := j.LIST_HEADER_ID;
21569    l_line_index := j.LINE_INDEX;
21570    l_list_line_id := j.LIST_LINE_ID;
21571 
21572   END LOOP;
21573 
21574     -- 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
21575 
21576     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21577     engine_debug ('#1000');
21578     END IF;
21579     IF (l_other_grp_exists_flag = TRUE) THEN
21580         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21581         engine_debug ('#1001');
21582         END IF;
21583         IF (l_other_grp_satisfied_flag = FALSE) THEN
21584          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21585          engine_debug ('#1002');
21586          END IF;
21587          IF (l_null_unique_key IS NOT NULL) THEN
21588           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21589           engine_debug ('#1003');
21590           engine_debug ('Null Unique Key : ' || l_null_unique_key);
21591           END IF;
21592           l_line_del_ind := l_line_del_ind + 1;
21593           l_line_del_tbl(l_line_del_ind) := l_null_unique_key;
21594          END IF;
21595         END IF;
21596     END IF;
21597 
21598 
21599   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21600   engine_debug('#QG6');
21601 
21602   END IF;
21603   IF (l_line_del_tbl.count > 0 ) THEN
21604    FOR m in 1 .. l_line_del_tbl.count LOOP
21605    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21606    engine_debug('Deleted Lines : ' || l_line_del_tbl(m));
21607    END IF;
21608    END LOOP;
21609   END IF;
21610 
21611   IF (l_line_del_tbl.count > 0 ) THEN
21612    FORALL i in l_line_del_tbl.FIRST..l_line_del_tbl.LAST
21613 /*
21614 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd4,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
21615 INDX,QP_PREQ_GRP.perform_qualifier_grouping.perform_qualifier_grouping_upd4,QP_PREQ_QUAL_TMP_N3,UNIQUE_KEY,2
21616 */
21617     UPDATE QP_PREQ_QUAL_TMP --upd4
21618     SET   PRICING_STATUS_CODE = G_DELETED_GRP
21619     WHERE UNIQUE_KEY  = l_line_del_tbl(i)
21620     AND   PRICING_STATUS_CODE = G_STATUS_UNCHANGED
21621     AND   PRICING_PHASE_ID = p_pricing_phase_id;
21622   END IF;
21623 
21624   l_line_del_tbl.delete;
21625   l_line_del_ind:=0;
21626 
21627 END IF;
21628 
21629 EXCEPTION
21630  WHEN OTHERS THEN
21631   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
21632   engine_debug(SQLERRM);
21633   END IF;
21634   x_status_code:= FND_API.G_RET_STS_ERROR;
21635   x_status_text:= 'In perform qualifier grouping '||SQLERRM;
21636 END Perform_Qualifier_Grouping;
21637 
21638 /*+----------------------------------------------------------
21639   |PROCEDURE SELECT_MODIFIERS
21640   +----------------------------------------------------------
21641 */
21642 PROCEDURE SELECT_MODIFIERS(p_pricing_phase_id     IN  NUMBER,
21643                            p_freeze_override_flag IN  VARCHAR2,
21644                            x_status_code          OUT NOCOPY VARCHAR2,
21645                            x_status_text          OUT NOCOPY VARCHAR2)
21646 AS
21647 /*
21648 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
21649 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
21650 
21651 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,LIST_HEADER_ID,1
21652 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,QUALIFICATION_IND,2
21653 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,PRICING_PHASE_ID,3
21654 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_PRICING_ATTRIBUTES_N7,LIST_LINE_ID,4
21655 
21656 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
21657 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
21658 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
21659 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
21660 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
21661 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
21662 
21663 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,QP_LIST_LINES_PK,LIST_LINE_ID,1
21664 
21665 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
21666 */
21667 
21668 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
21669 -- Product and Qualifier Only. No pricing
21670 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 */
21671        qpl.list_header_id,
21672        qpl.list_line_id,
21673        qpl.list_line_type_code,
21674        qplatpr.line_index,
21675        qplatpr.validated_flag,
21676        qplatpr.applied_flag,
21677        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
21678        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
21679        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
21680        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
21681        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
21682        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
21683        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
21684        qpprod.product_uom_code               PRODUCT_UOM_CODE,
21685        qpprod.excluder_flag,
21686        qpl.automatic_flag,
21687        qpl.modifier_level_code,
21688        qpl.primary_uom_flag,
21689        qpl.arithmetic_operator operand_calculation_code,
21690        qpl.operand             operand_value,
21691        qpl.net_amount_flag,  --IT net_amount 2720717
21692        qpl.pricing_group_sequence,
21693        qpl.pricing_phase_id,
21694        qpl.price_break_type_code,
21695        qpl.incompatibility_grp_code,
21696        qpl.price_by_formula_id,
21697        qpl.product_precedence,
21698        qpl.override_flag,
21699        qpl.benefit_qty,
21700        qpl.benefit_uom_code,
21701        qpl.list_line_no,
21702        qpl.accrual_flag,
21703        qpl.accrual_conversion_rate,
21704        qpl.estim_accrual_rate,
21705        qpq.ask_for_flag,
21706        qpq.created_from_list_type,
21707        qpq.header_limit_exists,
21708        qpl.limit_exists_flag line_limit_exists,
21709        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,   --HQ is header level qualifier
21710        qpl.charge_type_code,
21711        qpl.charge_subtype_code,
21712        qpl.accum_context,           -- accum range break
21713        qpl.accum_attribute,         -- accum range break
21714        qpl.accum_attr_run_src_flag  -- accum range break
21715 from
21716        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
21717         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
21718         from qp_preq_qual_tmp qpqq
21719         where pricing_status_code = G_STATUS_UNCHANGED
21720         and pricing_phase_id = p_pricing_phase_id
21721         and search_ind = 1
21722         and list_line_id > 0 ) qpq,
21723        qp_pricing_attributes qpprod,
21724        qp_npreq_line_attrs_tmp qplatpr,
21725        qp_list_lines qpl,
21726        qp_npreq_lines_tmp qplines
21727 where
21728       qpprod.list_header_id = qpq.list_header_id
21729 and   qpprod.list_line_id = qpq.list_line_id
21730 and   qpl.list_line_id   = qpprod.list_line_id
21731 and   (qpl.modifier_level_code = qplines.line_type_code
21732        OR
21733        (qpl.modifier_level_code = G_LINE_GROUP and
21734         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
21735 and   qplines.pricing_effective_date BETWEEN
21736          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
21737            and nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
21738 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
21739 and   qpprod.pricing_phase_id = p_pricing_phase_id
21740 and   qpprod.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_PROD_LINE_QUAL_IND,
21741 						  QP_PREQ_GRP.G_YES_PROD_HDR_LINE_QUAL_IND)
21742 and   qpprod.product_attribute_context = qplatpr.context
21743 and   qpprod.product_attribute = qplatpr.attribute
21744 and   qpprod.product_attr_value = qplatpr.value_from
21745 and   qpprod.excluder_flag = G_NO
21746 and   qplines.line_index = qplatpr.line_index
21747 and   qplatpr.line_index = qpq.line_index
21748 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
21749 --and   qpq.search_ind = 1
21750 and   qplatpr.attribute_type='PRODUCT'
21751 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
21752 -- price book
21753 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
21754        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
21755                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
21756        or
21757        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
21758 union all
21759 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 */
21760        qpl.list_header_id,
21761        qpl.list_line_id,
21762        qpl.list_line_type_code,
21763        qplatpr.line_index,
21764        qplatpr.validated_flag,
21765        qplatpr.applied_flag,
21766        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
21767        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
21768        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
21769        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
21770        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
21771        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
21772        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
21773        qpprod.product_uom_code               PRODUCT_UOM_CODE,
21774        qpprod.excluder_flag,
21775        qpl.automatic_flag,
21776        qpl.modifier_level_code,
21777        qpl.primary_uom_flag,
21778        qpl.arithmetic_operator operand_calculation_code,
21779        qpl.operand             operand_value,
21780        qpl.net_amount_flag,  --IT net_amount 2720717
21781        qpl.pricing_group_sequence,
21782        qpl.pricing_phase_id,
21783        qpl.price_break_type_code,
21784        qpl.incompatibility_grp_code,
21785        qpl.price_by_formula_id,
21786        qpl.product_precedence,
21787        qpl.override_flag,
21788        qpl.benefit_qty,
21789        qpl.benefit_uom_code,
21790        qpl.list_line_no,
21791        qpl.accrual_flag,
21792        qpl.accrual_conversion_rate,
21793        qpl.estim_accrual_rate,
21794        qpq.ask_for_flag,
21795        qpq.created_from_list_type,
21796        qpq.header_limit_exists,
21797        qpl.limit_exists_flag line_limit_exists,
21798        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,   --HQ is header level qualifier
21799        qpl.charge_type_code,
21800        qpl.charge_subtype_code,
21801        qpl.accum_context,           -- accum range break
21802        qpl.accum_attribute,         -- accum range break
21803        qpl.accum_attr_run_src_flag  -- accum range break
21804 from
21805        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
21806         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
21807         from qp_preq_qual_tmp qpqq
21808         where pricing_status_code = G_STATUS_UNCHANGED
21809         and pricing_phase_id = p_pricing_phase_id
21810         and search_ind = 1
21811         and list_line_id < 0 ) qpq,
21812        qp_npreq_line_attrs_tmp qplatpr,
21813        qp_pricing_attributes qpprod,
21814        qp_list_lines qpl,
21815        qp_npreq_lines_tmp qplines
21816 where
21817       qpprod.list_header_id = qpq.list_header_id
21818 and   qpl.list_line_id   = qpprod.list_line_id
21819 and   (qpl.modifier_level_code = qplines.line_type_code
21820        OR
21821        (qpl.modifier_level_code = G_LINE_GROUP and
21822         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
21823 and   qplines.pricing_effective_date BETWEEN
21824          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
21825            and nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
21826 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
21827 and   qpprod.pricing_phase_id = p_pricing_phase_id
21828 and   qpprod.QUALIFICATION_IND =  QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
21829 and   qpprod.product_attribute_context = qplatpr.context
21830 and   qpprod.product_attribute = qplatpr.attribute
21831 and   qpprod.product_attr_value = qplatpr.value_from
21832 and   qpprod.excluder_flag = G_NO
21833 and   qplines.line_index = qplatpr.line_index
21834 and   qplatpr.line_index = qpq.line_index
21835 and   qplatpr.attribute_type='PRODUCT'
21836 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
21837 --and   qpq.pricing_status_code=G_STATUS_UNCHANGED
21838 --and   qpq.search_ind = 1
21839 -- price book
21840 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
21841        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
21842                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
21843        or
21844        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
21845 order by 4,2;
21846 
21847 /*
21848 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
21849 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
21850 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
21851 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
21852 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
21853 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
21854 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,LIST_HEADER_ID,7
21855 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PRICING_ATTRIBUTES_N5,LIST_LINE_ID,8
21856 
21857 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
21858 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
21859 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,LIST_HEADER_ID,3
21860 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,LIST_LINE_ID,4
21861 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_PREQ_QUAL_TMP_N5,LINE_INDEX,5
21862 
21863 -- Used for qplatpr and qplatpc
21864 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
21865 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
21866 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
21867 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
21868 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
21869 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
21870 
21871 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,QP_LIST_LINES_PK,LIST_LINE_ID,1
21872 
21873 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_lines_tmp_U1,LINE_INDEX,1
21874 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_lines_tmp_U1,LINE_TYPE_CODE,2
21875 
21876 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
21877 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
21878 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PREQ_QUAL_TMP_N5,LINE_INDEX,5
21879 
21880 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,LIST_HEADER_ID,1
21881 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,QUALIFICATION_IND,2
21882 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,PRICING_PHASE_ID,3
21883 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_PRICING_ATTRIBUTES_N7,LIST_LINE_ID,4
21884 
21885 -- Used for qplatpr and qplatpc
21886 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
21887 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
21888 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
21889 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
21890 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
21891 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel1,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
21892 
21893 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,QP_LIST_LINES_PK,LIST_LINE_ID,1
21894 
21895 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,qp_npreq_lines_tmp_U1,LINE_INDEX,1
21896 INDX,QP_PREQ_GRP.select_modifiers.l_prod_qual_pric_cur_sel2,qp_npreq_lines_tmp_U1,LINE_TYPE_CODE,2
21897 */
21898 CURSOR l_prod_qual_pric_cur(p_pricing_phase_id NUMBER, p_list_header_id NUMBER, p_list_line_id NUMBER,
21899 					   p_line_index NUMBER) IS
21900 --Product+Qualifiers+Pricing
21901 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 */
21902        qpl.list_header_id,
21903        qpl.list_line_id,
21904        qpl.list_line_type_code,
21905        qplatpr.line_index,
21906        qplatpr.validated_flag,
21907        qplatpr.applied_flag,
21908 --for product attrs
21909        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
21910        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
21911        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
21912        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
21913        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
21914        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
21915        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
21916        qpprod.product_uom_code               PRODUCT_UOM_CODE,
21917        qpprod.excluder_flag,
21918 --for pricing attrs
21919        qplatpc.attribute_level               PRICING_ATTRIBUTE_LEVEL,
21920        qplatpc.attribute_type                PRICING_ATTRIBUTE_TYPE,
21921        qplatpc.context                       PRICING_ATTRIBUTE_CONTEXT,
21922        qplatpc.attribute                     PRICING_ATTRIBUTE,
21923        qplatpc.value_from                    PRICING_ATTR_VALUE,
21924        qpprod.pricing_attr_value_from        PRICING_SETUP_VALUE_FROM,
21925        qpprod.pricing_attr_value_to          PRICING_SETUP_VALUE_TO,
21926        qpprod.comparison_operator_code       PRICING_COMPARISON_OPERATOR,
21927        qpprod.pricing_attribute_datatype     PRICING_DATATYPE,
21928        qpl.automatic_flag,
21929        qpl.modifier_level_code,
21930        qpl.primary_uom_flag,
21931        qpl.arithmetic_operator operand_calculation_code,
21932        qpl.operand             operand_value,
21933        qpl.net_amount_flag,  --IT net_amount 2720717
21934        qpl.pricing_group_sequence,
21935        qpl.pricing_phase_id,
21936        qpl.price_break_type_code,
21937        qpl.incompatibility_grp_code,
21938        qpl.price_by_formula_id,
21939        qpl.product_precedence,
21940        qpl.override_flag,
21941        qpl.benefit_qty,
21942        qpl.benefit_uom_code,
21943        qpl.list_line_no,
21944        qpl.accrual_flag,
21945        qpl.accrual_conversion_rate,
21946        qpl.estim_accrual_rate,
21947        qpq.ask_for_flag,
21948        qpq.created_from_list_type,
21949        qpq.header_limit_exists,
21950        qpl.limit_exists_flag line_limit_exists,
21951        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
21952        qpl.charge_type_code,
21953        qpl.charge_subtype_code,
21954        qpl.accum_context,           -- accum range break
21955        qpl.accum_attribute,         -- accum range break
21956        qpl.accum_attr_run_src_flag  -- accum range break
21957 from
21958        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
21959         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
21960         from qp_preq_qual_tmp qpqq
21961         where pricing_status_code = G_STATUS_UNCHANGED
21962         and pricing_phase_id = p_pricing_phase_id
21963         and search_ind = 1
21964         and list_line_id > 0 ) qpq,
21965        QP_PRICING_ATTRIBUTES qpprod ,
21966        qp_npreq_line_attrs_tmp qplatpr,
21967        qp_npreq_line_attrs_tmp qplatpc,
21968        qp_list_lines qpl ,
21969        qp_npreq_lines_tmp qplines
21970 where
21971       qpprod.list_header_id = qpq.list_header_id
21972 and   qpprod.list_line_id = qpq.list_line_id
21973 and   qpl.list_line_id   = qpprod.list_line_id
21974 and   (qpl.modifier_level_code = qplines.line_type_code
21975        OR
21976        (qpl.modifier_level_code = G_LINE_GROUP and
21977         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
21978 and   qplines.pricing_effective_date BETWEEN
21979          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
21980       AND nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
21981 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
21982 and   qpl.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,
21983 						  QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
21984 and qpl.list_line_type_code <> 'PLL'
21985 and   qpprod.pricing_phase_id = p_pricing_phase_id
21986 and   qpprod.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_PROD_PRIC_LINE_QUAL_IND,
21987 						  QP_PREQ_GRP.G_YES_PRIC_HDR_LINE_QUAL_IND)
21988 and    qpprod.product_attribute_context = qplatpr.context
21989 and    qpprod.product_attribute = qplatpr.attribute
21990 and    qpprod.product_attr_value = qplatpr.value_from
21991 and 	qpprod.excluder_flag = G_NO
21992 and    qpprod.pricing_attribute_context = qplatpc.context
21993 and    qpprod.pricing_attribute = qplatpc.attribute
21994 and    (qpprod.pricing_attr_value_from = qplatpc.value_from
21995         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
21996         --or qpl.price_break_type_code = G_RECURRING_BREAK)
21997 and   qpl.pricing_phase_id = p_pricing_phase_id
21998 and qplines.line_index = qpq.line_index
21999 and   qplatpr.line_index = qpq.line_index
22000 and   qplatpc.line_index = qplatpr.line_index
22001 and qplatpr.attribute_type='PRODUCT'
22002 and qplatpr.pricing_status_code=G_STATUS_UNCHANGED
22003 and qplatpc.attribute_type = 'PRICING'
22004 and qplatpc.pricing_status_code = G_STATUS_UNCHANGED
22005 --and qpq.pricing_status_code = G_STATUS_UNCHANGED
22006 --and   qpq.search_ind = 1
22007 -- price book
22008 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22009        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22010                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22011        or
22012        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22013 union all
22014 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 */
22015        qpl.list_header_id,
22016        qpl.list_line_id,
22017        qpl.list_line_type_code,
22018        qplatpr.line_index,
22019        qplatpr.validated_flag,
22020        qplatpr.applied_flag,
22021 --for product attrs
22022        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
22023        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
22024        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
22025        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
22026        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
22027        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
22028        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
22029        qpprod.product_uom_code               PRODUCT_UOM_CODE,
22030        qpprod.excluder_flag,
22031 --for pricing attrs
22032        qplatpc.attribute_level               PRICING_ATTRIBUTE_LEVEL,
22033        qplatpc.attribute_type                PRICING_ATTRIBUTE_TYPE,
22034        qplatpc.context                       PRICING_ATTRIBUTE_CONTEXT,
22035        qplatpc.attribute                     PRICING_ATTRIBUTE,
22036        qplatpc.value_from                    PRICING_ATTR_VALUE,
22037        qpprod.pricing_attr_value_from        PRICING_SETUP_VALUE_FROM,
22038        qpprod.pricing_attr_value_to          PRICING_SETUP_VALUE_TO,
22039        qpprod.comparison_operator_code       PRICING_COMPARISON_OPERATOR,
22040        qpprod.pricing_attribute_datatype     PRICING_DATATYPE,
22041        qpl.automatic_flag,
22042        qpl.modifier_level_code,
22043        qpl.primary_uom_flag,
22044        qpl.arithmetic_operator operand_calculation_code,
22045        qpl.operand             operand_value,
22046        qpl.net_amount_flag,  --IT net_amount 2720717
22047        qpl.pricing_group_sequence,
22048        qpl.pricing_phase_id,
22049        qpl.price_break_type_code,
22050        qpl.incompatibility_grp_code,
22051        qpl.price_by_formula_id,
22052        qpl.product_precedence,
22053        qpl.override_flag,
22054        qpl.benefit_qty,
22055        qpl.benefit_uom_code,
22056        qpl.list_line_no,
22057        qpl.accrual_flag,
22058        qpl.accrual_conversion_rate,
22059        qpl.estim_accrual_rate,
22060        qpq.ask_for_flag,
22061        qpq.created_from_list_type,
22062        qpq.header_limit_exists,
22063        qpl.limit_exists_flag line_limit_exists,
22064        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
22065        qpl.charge_type_code,
22066        qpl.charge_subtype_code,
22067        qpl.accum_context,           -- accum range break
22068        qpl.accum_attribute,         -- accum range break
22069        qpl.accum_attr_run_src_flag  -- accum range break
22070 from
22071        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
22072         distinct line_index, list_header_id, list_line_id, ask_for_flag,created_from_list_type,header_limit_exists
22073         from qp_preq_qual_tmp qpqq
22074         where pricing_status_code = G_STATUS_UNCHANGED
22075         and pricing_phase_id = p_pricing_phase_id
22076         and search_ind = 1
22077         and list_line_id < 0 ) qpq,
22078        qp_npreq_line_attrs_tmp qplatpr,
22079        QP_PRICING_ATTRIBUTES qpprod ,
22080        qp_npreq_line_attrs_tmp qplatpc,
22081        qp_list_lines qpl ,
22082        qp_npreq_lines_tmp qplines
22083 where
22084        qpprod.list_header_id = qpq.list_header_id
22085 and    qpl.list_line_id   = qpprod.list_line_id
22086 and   (qpl.modifier_level_code = qplines.line_type_code
22087        OR
22088        (qpl.modifier_level_code = G_LINE_GROUP and
22089         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
22090 and   qplines.pricing_effective_date BETWEEN
22091          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
22092       AND nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
22093 and   qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
22094 and   qpl.QUALIFICATION_IND =  QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
22095 and   qpl.list_line_type_code <> 'PLL'
22096 and   qpprod.pricing_phase_id = p_pricing_phase_id
22097 and   qpprod.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
22098 and   qpprod.product_attribute_context = qplatpr.context
22099 and   qpprod.product_attribute = qplatpr.attribute
22100 and   qpprod.product_attr_value = qplatpr.value_from
22101 and   qpprod.excluder_flag = G_NO
22102 and   qpprod.pricing_attribute_context = qplatpc.context
22103 and   qpprod.pricing_attribute = qplatpc.attribute
22104 and    (qpprod.pricing_attr_value_from = qplatpc.value_from
22105         or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
22106 and   qpl.pricing_phase_id = p_pricing_phase_id
22107 and   qplines.line_index = qpq.line_index
22108 and   qplatpr.line_index = qpq.line_index
22109 and   qplatpc.line_index = qplatpr.line_index
22110 and   qplatpr.attribute_type='PRODUCT'
22111 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
22112 and   qplatpc.attribute_type = 'PRICING'
22113 and   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
22114 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
22115 --and   qpq.search_ind = 1
22116 -- price book
22117 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22118        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22119                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22120        or
22121        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22122 order by 4,2;
22123 
22124 /*
22125 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
22126 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,SEARCH_IND,2
22127 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,list_header_id,3
22128 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_PREQ_QUAL_TMP_N5,list_line_id,4
22129 
22130 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_LIST_LINES_N5,PRICING_PHASE_ID,1
22131 INDX,QP_PREQ_GRP.select_modifiers.l_inner_qual_cur,QP_LIST_LINES_N5,QUALIFICATION_IND,2
22132 */
22133 CURSOR l_INNER_QUAL_CUR(p_pricing_phase_id NUMBER,
22134 				    p_list_header_id NUMBER,
22135 				    p_list_line_id NUMBER,
22136 				    p_line_index NUMBER,
22137 				    p_pricing_effective_date DATE,
22138 				    p_start_date_active_first DATE,
22139 				    p_start_date_active_second DATE,
22140 				    p_line_type_code VARCHAR2) IS
22141 -- Qualifier Only
22142 -- 5092968, qp_list_lines_n6 replaced with qp_list_lines_pk
22143 select /*+ ORDERED INDEX(qpl,QP_LIST_LINES_PK) l_inner_qual_cur */
22144        qpl.list_header_id,
22145        qpl.list_line_id,
22146        qpl.list_line_type_code,
22147        qpq.line_index,
22148        qpl.automatic_flag,
22149        qpl.modifier_level_code,
22150        qpl.primary_uom_flag,
22151        qpl.arithmetic_operator operand_calculation_code,
22152        qpl.operand             operand_value,
22153        qpl.net_amount_flag,  --IT net_amount 2720717
22154        qpl.pricing_group_sequence,
22155        qpl.pricing_phase_id,
22156        qpl.price_break_type_code,
22157        qpl.incompatibility_grp_code,
22158        qpl.price_by_formula_id,
22159        qpl.product_precedence,
22160        qpl.override_flag,
22161        qpl.benefit_qty,
22162        qpl.benefit_uom_code,
22163        qpl.list_line_no,
22164        qpl.accrual_flag,
22165        qpl.accrual_conversion_rate,
22166        qpl.estim_accrual_rate,
22167        qpq.ask_for_flag,
22168        qpq.created_from_list_type,
22169        qpq.header_limit_exists,
22170        qpl.limit_exists_flag line_limit_exists,
22171        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
22172        qpl.charge_type_code,
22173        qpl.charge_subtype_code,
22174        qpl.accum_context,           -- accum range break
22175        qpl.accum_attribute,         -- accum range break
22176        qpl.accum_attr_run_src_flag  -- accum range break
22177 from
22178        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
22179         distinct line_index, line_type_code,pricing_effective_date,list_header_id, list_line_id,
22180                  ask_for_flag, created_from_list_type,header_limit_exists
22181         from qp_preq_qual_tmp qpqq
22182         where pricing_status_code = G_STATUS_UNCHANGED
22183         and pricing_phase_id = p_pricing_phase_id
22184         and search_ind = 1
22185         and list_line_id > 0 ) qpq,
22186        qp_list_lines qpl
22187 where
22188       qpl.list_header_id = qpq.list_header_id
22189 and   qpl.list_line_id = qpq.list_line_id
22190 and   (qpl.modifier_level_code = qpq.line_type_code
22191        OR
22192        (qpl.modifier_level_code = G_LINE_GROUP and
22193         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
22194 and   qpq.pricing_effective_date BETWEEN
22195          nvl(TRUNC(qpl.start_date_active), qpq.pricing_effective_date)
22196       AND nvl(TRUNC(qpl.end_date_active),qpq.pricing_effective_date)
22197 and   qpl.QUALIFICATION_IND in (QP_PREQ_GRP.G_YES_LINE_QUAL_IND,QP_PREQ_GRP.G_YES_HDR_LINE_QUAL_IND)
22198 and   qpl.list_line_type_code <>'PLL'
22199 and   qpl.pricing_phase_id       = p_pricing_phase_id
22200 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
22201 --and   qpq.search_ind = 1
22202 -- price book
22203 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22204        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22205                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22206        or
22207        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22208 union all
22209 select /*+ ORDERED INDEX(qpl,QP_LIST_LINES_N5) l_inner_qual_cur */
22210        qpl.list_header_id,
22211        qpl.list_line_id,
22212        qpl.list_line_type_code,
22213        qpq.line_index,
22214        qpl.automatic_flag,
22215        qpl.modifier_level_code,
22216        qpl.primary_uom_flag,
22217        qpl.arithmetic_operator operand_calculation_code,
22218        qpl.operand             operand_value,
22219        qpl.net_amount_flag,  --IT net_amount 2720717
22220        qpl.pricing_group_sequence,
22221        qpl.pricing_phase_id,
22222        qpl.price_break_type_code,
22223        qpl.incompatibility_grp_code,
22224        qpl.price_by_formula_id,
22225        qpl.product_precedence,
22226        qpl.override_flag,
22227        qpl.benefit_qty,
22228        qpl.benefit_uom_code,
22229        qpl.list_line_no,
22230        qpl.accrual_flag,
22231        qpl.accrual_conversion_rate,
22232        qpl.estim_accrual_rate,
22233        qpq.ask_for_flag,
22234        qpq.created_from_list_type,
22235        qpq.header_limit_exists,
22236        qpl.limit_exists_flag line_limit_exists,
22237        decode(p_list_line_id, -1, 'HQ', 'LQ') QUALIFIER_TYPE,
22238        qpl.charge_type_code,
22239        qpl.charge_subtype_code,
22240        qpl.accum_context,           -- accum range break
22241        qpl.accum_attribute,         -- accum range break
22242        qpl.accum_attr_run_src_flag  -- accum range break
22243 from
22244        (select /*+ index (qpqq QP_PREQ_QUAL_TMP_N5) */
22245         distinct line_index, line_type_code,pricing_effective_date,list_header_id, list_line_id,
22246                  ask_for_flag, created_from_list_type,header_limit_exists
22247         from qp_preq_qual_tmp qpqq
22248         where pricing_status_code = G_STATUS_UNCHANGED
22249         and pricing_phase_id = p_pricing_phase_id
22250         and search_ind = 1
22251         and list_line_id < 0 ) qpq,
22252         qp_list_lines qpl
22253 where
22254       qpl.list_header_id = qpq.list_header_id
22255 and   (qpl.modifier_level_code = qpq.line_type_code
22256        OR
22257        (qpl.modifier_level_code = G_LINE_GROUP and
22258         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
22259 and   qpq.pricing_effective_date BETWEEN
22260          nvl(TRUNC(qpl.start_date_active), qpq.pricing_effective_date)
22261       AND nvl(TRUNC(qpl.end_date_active),qpq.pricing_effective_date)
22262 and   qpl.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_HDR_QUAL_IND
22263 and   qpl.list_line_type_code <>'PLL'
22264 and   qpl.pricing_phase_id       = p_pricing_phase_id
22265 --and   qpq.pricing_status_code = G_STATUS_UNCHANGED
22266 --and   qpq.search_ind = 1
22267 -- price book
22268 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22269        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22270                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22271        or
22272        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22273 order by 4,2;
22274 
22275 
22276 /*
22277 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
22278 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
22279 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
22280 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
22281 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
22282 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
22283 
22284 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
22285 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
22286 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
22287 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
22288 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
22289 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
22290 
22291 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
22292 
22293 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
22294 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,qp_npreq_lines_tmp_N1,LINE_TYPE_CODE,2
22295 
22296 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
22297 INDX,QP_PREQ_GRP.select_modifiers.l_prod_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
22298 */
22299 CURSOR l_PROD_CUR (p_pricing_phase_id NUMBER) IS
22300 -- Only Product attributes
22301 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
22302 /* 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 */
22303        qpl.list_header_id,
22304        qpl.list_line_id,
22305        qpl.list_line_type_code,
22306        qplatpr.line_index,
22307        qplatpr.validated_flag,
22308        qplatpr.applied_flag,
22309 --for product
22310        qplatpr.attribute_level PRODUCT_ATTRIBUTE_LEVEL,
22311        qplatpr.attribute_type  PRODUCT_ATTRIBUTE_TYPE,
22312        qplatpr.context         PRODUCT_ATTRIBUTE_CONTEXT,
22313        qplatpr.attribute       PRODUCT_ATTRIBUTE,
22314        qplatpr.value_from      PRODUCT_ATTR_VALUE,
22315        qpprod.product_attr_value PRODUCT_SETUP_VALUE,
22316        qplatpr.pricing_attr_flag PRODUCT_PRICING_ATTR_FLAG,
22317        qpprod.product_uom_code  PRODUCT_UOM_CODE,
22318        qpprod.excluder_flag,
22319        NULL              QUALIFIER_GROUPING_NO,
22320        NULL              QUALIFIER_PRECEDENCE,
22321        qpl.automatic_flag,
22322        qpl.modifier_level_code,
22323        qpl.primary_uom_flag,
22324        qpl.arithmetic_operator OPERAND_CALCULATION_CODE,
22325        qpl.operand             OPERAND_VALUE,
22326        qpl.net_amount_flag,  --IT net_amount 2720717
22327        qpl.pricing_group_sequence,
22328        qph.ask_for_flag,
22329        qph.list_type_code CREATED_FROM_LIST_TYPE,
22330        qpl.pricing_phase_id,
22331        qpl.price_break_type_code,
22332        qpl.incompatibility_grp_code,
22333        qpl.price_by_formula_id,
22334        qpl.product_precedence,
22335        qpl.override_flag,
22336        qpl.benefit_qty,
22337        qpl.benefit_uom_code,
22338        qpl.list_line_no,
22339        qpl.accrual_flag,
22340        qpl.accrual_conversion_rate,
22341        qpl.estim_accrual_rate,
22342        qph.limit_exists_flag header_limit_exists,
22343        qpl.limit_exists_flag line_limit_exists,
22344        'NQ' QUALIFIER_TYPE,  --NQ IS NO QUALIFIER
22345        qpl.charge_type_code,
22346        qpl.charge_subtype_code,
22347        qpl.accum_context,           -- accum range break
22348        qpl.accum_attribute,         -- accum range break
22349        qpl.accum_attr_run_src_flag  -- accum range break
22350 FROM
22351 	qp_npreq_lines_tmp QPLINES,
22352 	qp_npreq_line_attrs_tmp qplatpr,
22353 	QP_PRICING_ATTRIBUTES QPPROD ,
22354 	QP_LIST_HEADERS_B  QPH ,
22355 	QP_LIST_LINES QPL ,
22356 	--QP_PRICE_REQ_SOURCES QPRS
22357 	QP_PRICE_REQ_SOURCES_V QPRS /* yangli */
22358 WHERE
22359    (qplines.price_flag = G_YES
22360        OR
22361        (qplines.price_flag = G_PHASE
22362         AND
22363         p_freeze_override_flag = G_YES))
22364 AND 	QPH.LIST_HEADER_ID = QPPROD.LIST_HEADER_ID
22365 --added for moac -- commented references to security profile
22366 --security will be built into qp_list_headers_b
22367 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
22368 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
22369 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
22370 and   ((qph.currency_code is not null and qph.currency_code = qplines.currency_code)
22371        or
22372        qph.currency_code is null) -- optional currency
22373 --AND   qph.currency_code IN (qplines.currency_code , G_ANY_CURRENCY_CODE) --shu, allow currency_code being ANY for modifiers
22374 and   (qplines.unit_price is not null
22375         or
22376        qplines.usage_pricing_type = G_AUTHORING_TYPE
22377 	or
22378        qplines.line_type_code = G_ORDER_LEVEL)
22379 and   (qpl.modifier_level_code = qplines.line_type_code
22380        OR
22381        (qpl.modifier_level_code = G_LINE_GROUP and
22382         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
22383 and   qph.active_flag = G_YES
22384 AND   ((qph.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
22385                                              FROM qp_npreq_line_attrs_tmp la
22386                                              WHERE attribute_type = 'QUALIFIER'
22387                                              AND pricing_status_code = G_STATUS_UNCHANGED
22388                                              AND validated_flag = G_NO
22389                                              AND list_header_id = qph.list_header_id
22390                                              AND line_index = qplines.line_index))
22391         OR qph.ask_for_flag = G_NO)
22392 AND 	QPL.LIST_LINE_ID = QPPROD.LIST_LINE_ID
22393 and  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) BETWEEN
22394        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) AND
22395        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
22396 and   nvl(qplines.start_date_active_first,TRUNC(SYSDATE)) BETWEEN
22397        nvl(qph.start_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
22398       AND
22399        nvl(qph.end_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
22400 and   nvl(qplines.start_date_active_second,TRUNC(SYSDATE)) BETWEEN
22401        nvl(qph.start_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
22402       AND
22403        nvl(qph.end_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
22404 and   nvl(qplines.active_date_first_type,'X') =
22405                 nvl(qph.active_date_first_type,nvl(qplines.active_date_first_type,'X'))
22406 and   nvl(qplines.active_date_second_type,'X') =
22407                 nvl(qph.active_date_second_type,nvl(qplines.active_date_second_type,'X'))
22408 and  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) BETWEEN                           --bug7307625
22409        nvl(qpl.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) AND
22410        nvl(qpl.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
22411 /*and   qplines.pricing_effective_date BETWEEN
22412          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
22413       AND nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)*/
22414 and  qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
22415 and  qpprod.pricing_phase_id = p_pricing_phase_id
22416 and  qpprod.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_IND
22417 and 	qpprod.product_attribute_context = qplatpr.context
22418 and 	qpprod.product_attribute = qplatpr.attribute
22419 and   qpprod.product_attr_value = qplatpr.value_from
22420 and 	qpprod.excluder_flag = G_NO
22421 and   qph.source_system_code = qprs.source_system_code
22422 and   qplines.request_type_code   = qprs.request_type_code
22423 AND   QPLATPR.LINE_INDEX = QPLINES.LINE_INDEX
22424 and   qplatpr.attribute_type='PRODUCT'
22425 and   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
22426 -- price book
22427 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22428        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22429                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22430        or
22431        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22432 order by 4,2;
22433 
22434 /*
22435 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
22436 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
22437 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
22438 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
22439 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
22440 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
22441 
22442 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
22443 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
22444 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
22445 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
22446 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
22447 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
22448 
22449 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
22450 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
22451 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
22452 
22453 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_LIST_HEADERS_B_PK,LIST_HEADER_ID,1
22454 
22455 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
22456 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,qp_npreq_lines_tmp_N1,LINE_TYPE_CODE,2
22457 
22458 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
22459 INDX,QP_PREQ_GRP.select_modifiers.l_prod_pric_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
22460 */
22461 
22462 CURSOR l_PROD_PRIC_CUR (p_pricing_phase_id NUMBER) IS
22463 --PRODUCT and PRICING attributes
22464 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 */
22465        qpl.list_header_id,
22466        qpl.list_line_id,
22467        qpl.list_line_type_code,
22468        qplatpr.line_index,
22469        qplatpr.validated_flag,
22470        qplatpr.applied_flag,
22471 --FOR PRODUCT
22472        qplatpr.attribute_level               PRODUCT_ATTRIBUTE_LEVEL,
22473        qplatpr.attribute_type                PRODUCT_ATTRIBUTE_TYPE,
22474        qplatpr.context                       PRODUCT_ATTRIBUTE_CONTEXT,
22475        qplatpr.attribute                     PRODUCT_ATTRIBUTE,
22476        qplatpr.value_from                    PRODUCT_ATTR_VALUE,
22477        qpprod.product_attr_value             PRODUCT_SETUP_VALUE,
22478        qplatpr.pricing_attr_flag             PRODUCT_PRICING_ATTR_FLAG,
22479        qpprod.product_uom_code               PRODUCT_UOM_CODE,
22480        qpprod.excluder_flag,
22481 --FOR PRICING
22482        qplatpc.attribute_level               PRICING_ATTRIBUTE_LEVEL,
22483        qplatpc.attribute_type                PRICING_ATTRIBUTE_TYPE,
22484        qplatpc.context                       PRICING_ATTRIBUTE_CONTEXT,
22485        qplatpc.attribute                     PRICING_ATTRIBUTE,
22486        qplatpc.value_from                    PRICING_ATTR_VALUE,
22487        qpprod.pricing_attr_value_from        PRICING_SETUP_VALUE_FROM,
22488        qpprod.pricing_attr_value_to          PRICING_SETUP_VALUE_TO,
22489        qpprod.comparison_operator_code       PRICING_COMPARISON_OPERATOR,
22490        qpprod.pricing_attribute_datatype     PRICING_DATATYPE,
22491        NULL              qualifier_grouping_no,
22492        NULL              qualifier_precedence,
22493        qpl.automatic_flag,
22494        qpl.modifier_level_code,
22495        qpl.primary_uom_flag,
22496        qpl.arithmetic_operator OPERAND_CALCULATION_CODE,
22497        qpl.operand             OPERAND_VALUE,
22498        qpl.net_amount_flag,  --IT net_amount 2720717
22499        qpl.pricing_group_sequence,
22500        qph.ask_for_flag,
22501        qph.list_type_code      CREATED_FROM_LIST_TYPE,
22502        qpl.pricing_phase_id,
22503        qpl.price_break_type_code,
22504        qpl.incompatibility_grp_code,
22505        qpl.price_by_formula_id,
22506        qpl.product_precedence,
22507        qpl.override_flag,
22508        qpl.benefit_qty,
22509        qpl.benefit_uom_code,
22510        qpl.list_line_no,
22511        qpl.accrual_flag,
22512        qpl.accrual_conversion_rate,
22513        qpl.estim_accrual_rate,
22514        qph.limit_exists_flag header_limit_exists,
22515        qpl.limit_exists_flag line_limit_exists,
22516        'NQ'                     QUALIFIER_TYPE,
22517        qpl.charge_type_code,
22518        qpl.charge_subtype_code,
22519        qpl.accum_context,           -- accum range break
22520        qpl.accum_attribute,         -- accum range break
22521        qpl.accum_attr_run_src_flag  -- accum range break
22522 FROM
22523        qp_npreq_lines_tmp QPLINES,
22524        qp_npreq_line_attrs_tmp qplatpr,
22525        QP_PRICING_ATTRIBUTES QPPROD ,
22526        qp_npreq_line_attrs_tmp qplatpc,
22527        QP_LIST_HEADERS_B  QPH  ,
22528        QP_LIST_LINES QPL ,
22529        --QP_PRICE_REQ_SOURCES qprs
22530        QP_PRICE_REQ_SOURCES_V qprs /* yangli */
22531 WHERE
22532    (qplines.price_flag = G_YES
22533        OR
22534       (qplines.price_flag = G_PHASE
22535        AND
22536         p_freeze_override_flag = G_YES))
22537 and   ((qph.currency_code is not null and qph.currency_code = qplines.currency_code)
22538        OR
22539        qph.currency_code is null) -- optional currency
22540 --AND   qph.currency_code IN (qplines.currency_code , G_ANY_CURRENCY_CODE) --shu, allow currency_code being ANY for modifiers
22541 and   (qplines.unit_price is not null
22542         or
22543        qplines.usage_pricing_type = G_AUTHORING_TYPE
22544 	or
22545        qplines.line_type_code = G_ORDER_LEVEL)
22546 and   (qpl.modifier_level_code = qplines.line_type_code
22547        OR
22548        (qpl.modifier_level_code = G_LINE_GROUP and
22549         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
22550 and  qph.active_flag = G_YES
22551 AND   ((qph.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
22552                                              FROM qp_npreq_line_attrs_tmp la
22553                                              WHERE attribute_type = 'QUALIFIER'
22554                                              AND pricing_status_code = G_STATUS_UNCHANGED
22555                                              AND validated_flag = G_NO
22556                                              AND list_header_id = qph.list_header_id
22557                                              AND line_index = qplines.line_index))
22558         OR qph.ask_for_flag = G_NO)
22559 AND 	QPH.LIST_HEADER_ID = QPPROD.LIST_HEADER_ID
22560 --added for moac -- commented references to security profile
22561 --security will be built into qp_list_headers_b
22562 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
22563 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
22564 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
22565 AND 	QPL.LIST_LINE_ID = QPPROD.LIST_LINE_ID
22566 AND  QPPROD.PRICING_PHASE_ID = P_PRICING_PHASE_ID
22567 and  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) BETWEEN
22568        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) AND
22569        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
22570 and   nvl(qplines.start_date_active_first,TRUNC(SYSDATE)) BETWEEN
22571        nvl(qph.start_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
22572       AND
22573        nvl(qph.end_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
22574 and   nvl(qplines.start_date_active_second,TRUNC(SYSDATE)) BETWEEN
22575        nvl(qph.start_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
22576       AND
22577        nvl(qph.end_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
22578 and   nvl(qplines.active_date_first_type,'X') =
22579                 nvl(qph.active_date_first_type,nvl(qplines.active_date_first_type,'X'))
22580 and   nvl(qplines.active_date_second_type,'X') =
22581                 nvl(qph.active_date_second_type,nvl(qplines.active_date_second_type,'X'))
22582 and   qplines.pricing_effective_date BETWEEN
22583          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
22584       AND nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
22585 and  qplines.priced_uom_code = nvl(qpprod.product_uom_code,qplines.priced_uom_code)
22586 and  qpprod.pricing_phase_id = p_pricing_phase_id
22587 and  qpprod.QUALIFICATION_IND = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
22588 and 	qpprod.product_attribute_context = qplatpr.context
22589 and 	qpprod.product_attribute = qplatpr.attribute
22590 and 	qpprod.product_attr_value = qplatpr.value_from
22591 and 	qpprod.pricing_attribute_context = qplatpc.context
22592 and 	qpprod.pricing_attribute = qplatpc.attribute
22593 and 	(qpprod.pricing_attr_value_from = qplatpc.value_from
22594          or qpprod.comparison_operator_code IN ('NOT =',G_OPERATOR_BETWEEN))
22595          --or qpl.price_break_type_code = G_RECURRING_BREAK)
22596 and  qpprod.excluder_flag = G_NO
22597 and  qplatpc.line_index = qplatpr.line_index
22598 and  qplatpr.line_index = qplines.line_index
22599 and  qph.source_system_code = qprs.source_system_code
22600 and  qplines.request_type_code   = qprs.request_type_code
22601 and 	qplatpc.pricing_attr_flag = G_YES
22602 and  qplatpr.attribute_type='PRODUCT'
22603 and  qplatpr.pricing_status_code=G_STATUS_UNCHANGED
22604 and  qplatpc.attribute_type = 'PRICING'
22605 and  qplatpc.pricing_status_code = G_STATUS_UNCHANGED
22606 -- price book
22607 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22608        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22609                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22610        or
22611        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22612 order by 4,2;
22613 
22614 /*
22615 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_LINES_N5,PRICING_PHASE_ID,1
22616 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_LINES_N5,QUALIFICATION_IND,2
22617 
22618 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_HEADERS_B_N2,LIST_HEADER_ID,1
22619 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_HEADERS_B_N2,ACTIVE_FLAG,2
22620 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_LIST_HEADERS_B_N2,CURRENCY_CODE,3
22621 
22622 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
22623 INDX,QP_PREQ_GRP.select_modifiers.l_cur,QP_PRICE_REQ_SOURCES_PK,SOURCE_SYSTEM_CODE,2
22624 */
22625 cursor l_CUR (p_pricing_phase_id NUMBER) IS
22626 -- NO PRODUCTS AND NO QUALIFIERS
22627 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 */
22628        qpl.list_header_id,
22629        qpl.list_line_id,
22630        qpl.list_line_type_code,
22631        qplines.line_index,
22632        qpl.automatic_flag,
22633        qpl.modifier_level_code,
22634        qpl.primary_uom_flag,
22635        qpl.arithmetic_operator operand_calculation_code,
22636        qpl.operand             operand_value,
22637        qpl.net_amount_flag,  --IT net_amount 2720717
22638        qpl.pricing_group_sequence,
22639        qph.ask_for_flag,
22640        qph.list_type_code created_from_list_type,
22641        qpl.pricing_phase_id,
22642        qpl.price_break_type_code,
22643        qpl.incompatibility_grp_code,
22644        qpl.price_by_formula_id,
22645        qpl.product_precedence,
22646        qpl.override_flag,
22647        qpl.benefit_qty,
22648        qpl.benefit_uom_code,
22649        qpl.list_line_no,
22650        qpl.accrual_flag,
22651        qpl.accrual_conversion_rate,
22652        qpl.estim_accrual_rate,
22653        qph.limit_exists_flag header_limit_exists,
22654        qpl.limit_exists_flag line_limit_exists,
22655        qpl.charge_type_code,
22656        qpl.charge_subtype_code,
22657        qpl.accum_context,           -- accum range break
22658        qpl.accum_attribute,         -- accum range break
22659        qpl.accum_attr_run_src_flag  -- accum range break
22660 from
22661        qp_npreq_lines_tmp qplines,
22662        qp_list_lines qpl,
22663        qp_list_headers_b qph,
22664        --qp_price_req_sources qprs
22665        qp_price_req_sources_v qprs /* yangli */
22666 where qph.list_header_id = qpl.list_header_id
22667 --added for moac -- commented references to security profile
22668 --security will be built into qp_list_headers_b
22669 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
22670 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
22671 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
22672 and   qph.active_flag=G_YES
22673 AND   ((qph.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
22674                                              FROM qp_npreq_line_attrs_tmp la
22675                                              WHERE attribute_type = 'QUALIFIER'
22676                                              AND pricing_status_code = G_STATUS_UNCHANGED
22677                                              AND validated_flag = G_NO
22678                                              AND list_header_id = qph.list_header_id
22679                                              AND line_index = qplines.line_index))
22680         OR qph.ask_for_flag = G_NO)
22681 and   qpl.pricing_phase_id=p_pricing_phase_id
22682 and   qpl.QUALIFICATION_IND = QP_PREQ_GRP.G_BLIND_DISCOUNT_IND
22683 and   (qplines.price_flag = G_YES
22684        OR
22685        (qplines.price_flag = G_PHASE
22686         AND
22687         p_freeze_override_flag = G_YES))
22688 and   ((qph.currency_code is not null and qph.currency_code = qplines.currency_code)
22689        OR
22690        qph.currency_code is null) -- optional currency
22691 --  AND   qph.currency_code IN (qplines.currency_code , G_ANY_CURRENCY_CODE) --shu, allow currency_code being ANY for modifiers
22692 and   (qplines.unit_price is not null
22693         or
22694        qplines.usage_pricing_type = G_AUTHORING_TYPE
22695 	or
22696        qplines.line_type_code = G_ORDER_LEVEL)
22697 and   (qpl.modifier_level_code = qplines.line_type_code
22698        OR
22699        (qpl.modifier_level_code = G_LINE_GROUP and
22700         nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)) -- price book
22701 and  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) BETWEEN
22702        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) AND
22703        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
22704 and   nvl(qplines.start_date_active_first,TRUNC(SYSDATE)) BETWEEN
22705        nvl(qph.start_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
22706       AND
22707        nvl(qph.end_date_active_first,nvl(qplines.start_date_active_first,TRUNC(SYSDATE)))
22708 and   nvl(qplines.start_date_active_second,TRUNC(SYSDATE)) BETWEEN
22709        nvl(qph.start_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
22710       AND
22711        nvl(qph.end_date_active_second, nvl(qplines.start_date_active_second,TRUNC(SYSDATE)))
22712 and   nvl(qplines.active_date_first_type,'X') =
22713                 nvl(qph.active_date_first_type,nvl(qplines.active_date_first_type,'X'))
22714 and   nvl(qplines.active_date_second_type,'X') =
22715                 nvl(qph.active_date_second_type,nvl(qplines.active_date_second_type,'X'))
22716 and   qplines.pricing_effective_date BETWEEN
22717          nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
22718       AND nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
22719 and   qph.source_system_code = qprs.source_system_code
22720 and   qplines.request_type_code   = qprs.request_type_code
22721 -- price book
22722 and   (nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES and
22723        qpl.list_line_type_code not in (G_PROMO_GOODS_DISCOUNT,G_OTHER_ITEM_DISCOUNT,
22724                                        G_COUPON_ISSUE,G_TERMS_SUBSTITUTION,G_ITEM_UPGRADE)
22725        or
22726        nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES)
22727 order by 4,2;
22728 
22729 /*
22730 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRICING_PHASE_ID,1
22731 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,QUALIFICATION_IND,2
22732 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE_CONTEXT,3
22733 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTRIBUTE,4
22734 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,PRODUCT_ATTR_VALUE,5
22735 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,QP_PRICING_ATTRIBUTES_N5,EXCLUDER_FLAG,6
22736 
22737 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
22738 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
22739 
22740 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,LINE_INDEX,1
22741 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,ATTRIBUTE_TYPE,2
22742 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,PRICING_STATUS_CODE,3
22743 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,LIST_HEADER_ID,4
22744 INDX,QP_PREQ_GRP.select_modifiers.l_get_excluded_prods_cur,qp_npreq_line_attrs_tmp_N1,LIST_LINE_ID,5
22745 
22746 
22747 
22748 -- Pricing Phase Change
22749 CURSOR l_get_excluded_prods_cur(p_pricing_phase_id NUMBER) IS
22750 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 /
22751         b.list_header_id,
22752         b.list_line_id,
22753         c.line_index,
22754         c.validated_flag,
22755         c.applied_flag,
22756         c.attribute_level,
22757         G_PRICING_TYPE attribute_type,
22758         c.context,
22759         c.attribute,
22760         c.value_from,
22761         b.product_attr_value setup_value_from,
22762         G_NO pricing_attr_flag,
22763         b.product_uom_code,
22764         b.excluder_flag,
22765         -1   qualifier_precedence,
22766         a.line_detail_index
22767  FROM
22768         qp_npreq_line_attrs_tmp c,
22769         qp_pricing_attributes b,
22770         qp_npreq_line_attrs_tmp a
22771  WHERE  b.pricing_phase_id = p_pricing_phase_id
22772  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)
22773  AND    b.product_attribute_context = c.context
22774  AND    b.product_attribute = c.attribute
22775  AND    b.product_attr_value = c.value_from
22776  AND    b.excluder_flag = G_YES
22777  AND    c.attribute_type = G_PRODUCT_TYPE
22778  AND    c.pricing_status_code = G_STATUS_UNCHANGED
22779  AND    a.list_header_id = b.list_header_id
22780  AND    a.list_line_id = b.list_line_id
22781  AND    a.line_index = c.line_index
22782  AND    a.attribute_type = G_PRODUCT_TYPE
22783  AND    a.pricing_status_code = G_STATUS_NEW;
22784 
22785 */
22786 
22787 
22788 /*
22789 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_details,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
22790 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_details,QP_PREQ_QUAL_TMP_N5,LINE_INDEX,5
22791 */
22792 CURSOR l_get_line_index_details IS
22793 SELECT distinct
22794        c.LIST_HEADER_ID,
22795        c.LIST_LINE_ID,
22796        c.CREATED_FROM_LIST_TYPE,
22797        c.ASK_FOR_FLAG,
22798        c.LINE_INDEX,
22799        c.PRICING_EFFECTIVE_DATE,
22800        c.START_DATE_ACTIVE_FIRST,
22801        c.START_DATE_ACTIVE_SECOND,
22802        c.LINE_TYPE_CODE
22803 FROM   QP_PREQ_QUAL_TMP c
22804 WHERE  c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
22805 AND    c.LINE_INDEX > 0
22806 ORDER  BY c.LINE_INDEX;
22807 
22808 /*
22809 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
22810 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
22811 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
22812 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
22813 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
22814 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
22815 
22816 INDX,QP_PREQ_GRP.select_modifiers.l_get_line_index_for_quals,QP_PREQ_QUAL_TMP_N3,PRICING_STATUS_CODE,1
22817 
22818 -- Full table scan on qp_npreq_lines_tmp
22819 */
22820 
22821 --hw
22822 
22823 CURSOR l_get_line_index_for_quals IS
22824 SELECT /*+ ORDERED USE_NL(c a) index(a qp_preq_line_attrs_tmp_n2) l_get_line_index_for_quals */distinct
22825        c.LIST_HEADER_ID,
22826        c.LIST_LINE_ID,
22827        c.QUALIFIER_ATTRIBUTE_CONTEXT,
22828        c.QUALIFIER_ATTRIBUTE,
22829        c.QUALIFIER_ATTRIBUTE_VALUE,
22830        c.CREATED_FROM_LIST_TYPE,
22831        c.ASK_FOR_FLAG,
22832        c.QUALIFIER_GROUPING_NO,
22833        c.QUALIFIER_GROUP_CNT,
22834        c.OTHERS_GROUP_CNT,
22835        c.HEADER_QUALS_EXIST_FLAG,
22836        c.SEARCH_IND,
22837        c.VALIDATED_FLAG,
22838        c.APPLIED_FLAG,
22839        c.QUALIFIER_ATTRIBUTE_LEVEL,
22840        c.QUALIFIER_ATTRIBUTE_TYPE,
22841        c.QUALIFIER_PRECEDENCE,
22842        c.QUALIFIER_DATATYPE,
22843        c.QUALIFIER_TYPE,
22844        c.SETUP_VALUE_FROM,
22845        c.SETUP_VALUE_TO,
22846        c.QUALIFIER_PRICING_ATTR_FLAG,
22847        c.QUALIFIER_OPERATOR_TYPE ,
22848        c.START_DATE_ACTIVE,
22849        c.END_DATE_ACTIVE,
22850        b.LINE_INDEX,
22851        b.PRICING_EFFECTIVE_DATE,
22852        b.START_DATE_ACTIVE_FIRST,
22853        b.START_DATE_ACTIVE_SECOND,
22854        b.LINE_TYPE_CODE,
22855        c.PRICING_STATUS_CODE,
22856        p_pricing_phase_id PRICING_PHASE_ID,
22857        b.LINE_INDEX || '-' || c.LIST_HEADER_ID || '-' || c.LIST_LINE_ID || '-' || c.QUALIFIER_GROUPING_NO UNIQUE_KEY,
22858        NULL START_DATE_ACTIVE_H,
22859        NULL END_DATE_ACTIVE_H,
22860        NULL START_DATE_ACTIVE_SECOND_S,
22861        NULL END_DATE_ACTIVE_SECOND_S,
22862        NULL ACTIVE_DATE_FIRST_TYPE,
22863        NULL ACTIVE_DATE_SECOND_TYPE,
22864        c.HEADER_LIMIT_EXISTS,
22865        a.DERIVED_QUALIFIER_FLAG   -- Added for TCA
22866 FROM   qp_npreq_lines_tmp b,
22867        QP_PREQ_QUAL_TMP c  ,
22868        qp_npreq_line_attrs_tmp a
22869 WHERE  a.CONTEXT = c.QUALIFIER_ATTRIBUTE_CONTEXT
22870 AND    a.ATTRIBUTE = c.QUALIFIER_ATTRIBUTE
22871 AND    a.VALUE_FROM = c.QUALIFIER_ATTRIBUTE_VALUE
22872 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
22873 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
22874 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
22875 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
22876 AND    a.LINE_INDEX = b.LINE_INDEX
22877 AND   ((c.ASK_FOR_FLAG = G_YES and exists (SELECT /*+ index(la QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x' --[julin/pricebook]
22878                                              FROM qp_npreq_line_attrs_tmp la
22879                                              WHERE attribute_type = 'QUALIFIER'
22880                                              AND pricing_status_code = G_STATUS_UNCHANGED
22881                                              AND validated_flag = G_NO
22882                                              AND list_header_id = c.list_header_id
22883                                              AND line_index = b.line_index))
22884         OR c.ASK_FOR_FLAG = G_NO)
22885 AND    (b.UNIT_PRICE is not null
22886           or
22887         b.usage_pricing_type = G_AUTHORING_TYPE
22888 	or
22889         b.LINE_TYPE_CODE = G_ORDER_LEVEL)
22890 AND    (b.PRICE_FLAG = G_YES
22891         OR
22892        (b.PRICE_FLAG = G_PHASE
22893         AND
22894         p_freeze_override_flag = G_YES))
22895 AND   TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
22896       TRUNC(nvl(c.START_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --qualifier start date
22897       TRUNC(nvl(c.END_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND     --qualifier end date
22898       TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
22899       TRUNC(nvl(c.START_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND --list header start date
22900       TRUNC(nvl(c.END_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --list header end date
22901       TRUNC(nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
22902       BETWEEN
22903       TRUNC(nvl(c.START_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND -- Order Date
22904       TRUNC(nvl(c.END_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND
22905       TRUNC(nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
22906       BETWEEN
22907       TRUNC(nvl(c.START_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND --Ship Date
22908       TRUNC(nvl(c.END_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))))
22909 AND   nvl(b.ACTIVE_DATE_FIRST_TYPE,'X')  = nvl(c.ACTIVE_DATE_FIRST_TYPE,nvl(b.ACTIVE_DATE_FIRST_TYPE,'X'))    -- ORD
22910 AND   nvl(b.ACTIVE_DATE_SECOND_TYPE,'X') = nvl(c.ACTIVE_DATE_SECOND_TYPE,nvl(b.ACTIVE_DATE_SECOND_TYPE,'X')) -- SHIP
22911 ORDER BY 1,2,3 ;
22912 
22913 /*join cursor for l_get_line_index_for_quals and perform_qualifier_grouping
22914 CURSOR l_get_line_index_for_quals_n IS
22915 SELECT /* ORDERED USE_NL(c a) index(a qp_npreq_line_attrs_tmp_n2) l_get_line_index_for_quals /
22916 distinct
22917        c.LIST_HEADER_ID,
22918        c.LIST_LINE_ID,
22919        c.QUALIFIER_ATTRIBUTE_CONTEXT,
22920        c.QUALIFIER_ATTRIBUTE,
22921        c.QUALIFIER_ATTRIBUTE_VALUE,
22922        c.CREATED_FROM_LIST_TYPE,
22923        c.ASK_FOR_FLAG,
22924        c.QUALIFIER_GROUPING_NO,
22925        c.QUALIFIER_GROUP_CNT,
22926        c.OTHERS_GROUP_CNT,
22927        c.HEADER_QUALS_EXIST_FLAG,
22928        c.SEARCH_IND,
22929        c.VALIDATED_FLAG,
22930        c.APPLIED_FLAG,
22931        c.QUALIFIER_ATTRIBUTE_LEVEL,
22932        c.QUALIFIER_ATTRIBUTE_TYPE,
22933        c.QUALIFIER_PRECEDENCE,
22934        c.QUALIFIER_DATATYPE,
22935        c.QUALIFIER_TYPE,
22936        c.SETUP_VALUE_FROM,
22937        c.SETUP_VALUE_TO,
22938        c.QUALIFIER_PRICING_ATTR_FLAG,
22939        c.QUALIFIER_OPERATOR_TYPE ,
22940        c.START_DATE_ACTIVE,
22941        c.END_DATE_ACTIVE,
22942        b.LINE_INDEX,
22943        b.PRICING_EFFECTIVE_DATE,
22944        b.START_DATE_ACTIVE_FIRST,
22945        b.START_DATE_ACTIVE_SECOND,
22946        b.LINE_TYPE_CODE,
22947        c.PRICING_STATUS_CODE,
22948        p_pricing_phase_id PRICING_PHASE_ID,
22949        b.LINE_INDEX || '-' || c.LIST_HEADER_ID || '-' || c.LIST_LINE_ID || '-' || c.QUALIFIER_GROUPING_NO UNIQUE_KEY,
22950        NULL START_DATE_ACTIVE_H,
22951        NULL END_DATE_ACTIVE_H,
22952        NULL START_DATE_ACTIVE_SECOND_S,
22953        NULL END_DATE_ACTIVE_SECOND_S,
22954        NULL ACTIVE_DATE_FIRST_TYPE,
22955        NULL ACTIVE_DATE_SECOND_TYPE,
22956        c.HEADER_LIMIT_EXISTS
22957 FROM   qp_npreq_lines_tmp b,
22958        QP_PREQ_QUAL_TMP c  ,
22959        qp_npreq_line_attrs_tmp a
22960 WHERE  a.CONTEXT = c.QUALIFIER_ATTRIBUTE_CONTEXT
22961 AND    a.ATTRIBUTE = c.QUALIFIER_ATTRIBUTE
22962 AND    a.VALUE_FROM = c.QUALIFIER_ATTRIBUTE_VALUE
22963 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
22964 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
22965 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
22966 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
22967 and    c.qualifier_grouping_no <> -1
22968 and    c.other_group_cnt + c.null_group_cnt = c.qualifier_group_cnt
22969 AND    a.LINE_INDEX = b.LINE_INDEX
22970 AND   ((c.ASK_FOR_FLAG = G_YES and
22971         (c.LIST_HEADER_ID,b.LINE_INDEX) IN  (SELECT list_header_id,line_index
22972                                              FROM qp_npreq_line_attrs_tmp
22973                                              WHERE attribute_type = 'QUALIFIER'
22974                                              AND pricing_status_code = G_STATUS_UNCHANGED
22975                                              AND validated_flag = G_NO
22976                                              AND list_header_id IS NOT NULL))
22977         OR c.ASK_FOR_FLAG = G_NO)
22978 AND    (b.UNIT_PRICE is not null
22979           or
22980         b.usage_pricing_type = G_AUTHORING_TYPE
22981 	or
22982         b.LINE_TYPE_CODE = G_ORDER_LEVEL)
22983 AND    (b.PRICE_FLAG = G_YES
22984         OR
22985        (b.PRICE_FLAG = G_PHASE
22986         AND
22987         p_freeze_override_flag = G_YES))
22988 AND   TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
22989       TRUNC(nvl(c.START_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --qualifier start date
22990       TRUNC(nvl(c.END_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND     --qualifier end date
22991       TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
22992       TRUNC(nvl(c.START_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND --list header start date
22993       TRUNC(nvl(c.END_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --list header end date
22994       TRUNC(nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
22995       BETWEEN
22996       TRUNC(nvl(c.START_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND -- Order Date
22997       TRUNC(nvl(c.END_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND
22998       TRUNC(nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
22999       BETWEEN
23000       TRUNC(nvl(c.START_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND --Ship Date
23001       TRUNC(nvl(c.END_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))))
23002 AND   nvl(b.ACTIVE_DATE_FIRST_TYPE,'X')  = nvl(c.ACTIVE_DATE_FIRST_TYPE,nvl(b.ACTIVE_DATE_FIRST_TYPE,'X'))    -- ORD
23003 AND   nvl(b.ACTIVE_DATE_SECOND_TYPE,'X') = nvl(c.ACTIVE_DATE_SECOND_TYPE,nvl(b.ACTIVE_DATE_SECOND_TYPE,'X')) -- SHIP
23004 union all
23005 SELECT /* ORDERED USE_NL(c a) index(a qp_npreq_line_attrs_tmp_n2) l_get_line_index_for_quals /
23006 distinct
23007        c.LIST_HEADER_ID,
23008        c.LIST_LINE_ID,
23009        c.QUALIFIER_ATTRIBUTE_CONTEXT,
23010        c.QUALIFIER_ATTRIBUTE,
23011        c.QUALIFIER_ATTRIBUTE_VALUE,
23012        c.CREATED_FROM_LIST_TYPE,
23013        c.ASK_FOR_FLAG,
23014        c.QUALIFIER_GROUPING_NO,
23015        c.QUALIFIER_GROUP_CNT,
23016        c.OTHERS_GROUP_CNT,
23017        c.HEADER_QUALS_EXIST_FLAG,
23018        c.SEARCH_IND,
23019        c.VALIDATED_FLAG,
23020        c.APPLIED_FLAG,
23021        c.QUALIFIER_ATTRIBUTE_LEVEL,
23022        c.QUALIFIER_ATTRIBUTE_TYPE,
23023        c.QUALIFIER_PRECEDENCE,
23024        c.QUALIFIER_DATATYPE,
23025        c.QUALIFIER_TYPE,
23026        c.SETUP_VALUE_FROM,
23027        c.SETUP_VALUE_TO,
23028        c.QUALIFIER_PRICING_ATTR_FLAG,
23029        c.QUALIFIER_OPERATOR_TYPE ,
23030        c.START_DATE_ACTIVE,
23031        c.END_DATE_ACTIVE,
23032        b.LINE_INDEX,
23033        b.PRICING_EFFECTIVE_DATE,
23034        b.START_DATE_ACTIVE_FIRST,
23035        b.START_DATE_ACTIVE_SECOND,
23036        b.LINE_TYPE_CODE,
23037        c.PRICING_STATUS_CODE,
23038        p_pricing_phase_id PRICING_PHASE_ID,
23039        b.LINE_INDEX || '-' || c.LIST_HEADER_ID || '-' || c.LIST_LINE_ID || '-' || c.QUALIFIER_GROUPING_NO UNIQUE_KEY,
23040        NULL START_DATE_ACTIVE_H,
23041        NULL END_DATE_ACTIVE_H,
23042        NULL START_DATE_ACTIVE_SECOND_S,
23043        NULL END_DATE_ACTIVE_SECOND_S,
23044        NULL ACTIVE_DATE_FIRST_TYPE,
23045        NULL ACTIVE_DATE_SECOND_TYPE,
23046        c.HEADER_LIMIT_EXISTS
23047 FROM   qp_npreq_lines_tmp b,
23048        QP_PREQ_QUAL_TMP c  ,
23049        qp_npreq_line_attrs_tmp a
23050 WHERE  a.CONTEXT = c.QUALIFIER_ATTRIBUTE_CONTEXT
23051 AND    a.ATTRIBUTE = c.QUALIFIER_ATTRIBUTE
23052 AND    a.VALUE_FROM = c.QUALIFIER_ATTRIBUTE_VALUE
23053 AND    a.ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
23054 AND    a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
23055 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
23056 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
23057 and    c.qualifier_grouping_no = -1
23058 and    c.null_group_cnt = c.qualifier_group_cnt
23059 and    nvl(c.others_group_cnt,0) = 0  -- to indicate that there are no other groups(coming from qp_qualifiers table)
23060 AND    a.LINE_INDEX = b.LINE_INDEX
23061 AND   ((c.ASK_FOR_FLAG = G_YES and
23062         (c.LIST_HEADER_ID,b.LINE_INDEX) IN  (SELECT list_header_id,line_index
23063                                              FROM qp_npreq_line_attrs_tmp
23064                                              WHERE attribute_type = 'QUALIFIER'
23065                                              AND pricing_status_code = G_STATUS_UNCHANGED
23066                                              AND validated_flag = G_NO
23067                                              AND list_header_id IS NOT NULL))
23068         OR c.ASK_FOR_FLAG = G_NO)
23069 AND    (b.UNIT_PRICE is not null
23070           or
23071         b.usage_pricing_type = G_AUTHORING_TYPE
23072 	or
23073         b.LINE_TYPE_CODE = G_ORDER_LEVEL)
23074 AND    (b.PRICE_FLAG = G_YES
23075         OR
23076        (b.PRICE_FLAG = G_PHASE
23077         AND
23078         p_freeze_override_flag = G_YES))
23079 AND   TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
23080       TRUNC(nvl(c.START_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --qualifier start date
23081       TRUNC(nvl(c.END_DATE_ACTIVE,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND     --qualifier end date
23082       TRUNC(nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))   BETWEEN                      --pricing date
23083       TRUNC(nvl(c.START_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND --list header start date
23084       TRUNC(nvl(c.END_DATE_ACTIVE_H,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))) AND   --list header end date
23085       TRUNC(nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
23086       BETWEEN
23087       TRUNC(nvl(c.START_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND -- Order Date
23088       TRUNC(nvl(c.END_DATE_ACTIVE_FIRST,nvl(b.START_DATE_ACTIVE_FIRST,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND
23089       TRUNC(nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))
23090       BETWEEN
23091       TRUNC(nvl(c.START_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE)))) AND --Ship Date
23092       TRUNC(nvl(c.END_DATE_ACTIVE_SECOND,nvl(b.START_DATE_ACTIVE_SECOND,nvl(b.PRICING_EFFECTIVE_DATE,SYSDATE))))
23093 AND   nvl(b.ACTIVE_DATE_FIRST_TYPE,'X')  = nvl(c.ACTIVE_DATE_FIRST_TYPE,nvl(b.ACTIVE_DATE_FIRST_TYPE,'X'))    -- ORD
23094 AND   nvl(b.ACTIVE_DATE_SECOND_TYPE,'X') = nvl(c.ACTIVE_DATE_SECOND_TYPE,nvl(b.ACTIVE_DATE_SECOND_TYPE,'X')); -- SHIP
23095 */
23096 
23097 /*
23098 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,LINE_INDEX,1
23099 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,PRICING_PHASE_ID,2
23100 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,PRICING_STATUS_CODE,3
23101 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,LIST_HEADER_ID,4
23102 INDX,QP_PREQ_GRP.select_modifiers.l_get_satisfied_quals,QP_PREQ_QUAL_TMP_N2,LIST_LINE_ID,5
23103 */
23104 CURSOR l_get_satisfied_quals(p_list_header_id NUMBER , p_list_line_id NUMBER, p_line_index NUMBER)  IS
23105 SELECT /*+ INDEX(c QP_PREQ_QUAL_TMP_N1) l_get_satisfied_quals */
23106        c.LIST_HEADER_ID,
23107        c.LIST_LINE_ID,
23108        c.QUALIFIER_GROUP_CNT,
23109        c.HEADER_QUALS_EXIST_FLAG,
23110        c.SEARCH_IND,
23111        c.VALIDATED_FLAG,
23112        c.APPLIED_FLAG,
23113        c.QUALIFIER_ATTRIBUTE_LEVEL,
23114        c.QUALIFIER_ATTRIBUTE_TYPE,
23115        c.QUALIFIER_ATTRIBUTE_CONTEXT,
23116        c.QUALIFIER_ATTRIBUTE,
23117        c.QUALIFIER_ATTRIBUTE_VALUE,
23118        c.QUALIFIER_GROUPING_NO ,
23119        c.QUALIFIER_PRECEDENCE,
23120        c.QUALIFIER_DATATYPE,
23121        c.SETUP_VALUE_FROM,
23122        c.SETUP_VALUE_TO,
23123        c.QUALIFIER_PRICING_ATTR_FLAG,
23124        c.QUALIFIER_OPERATOR_TYPE ,
23125        c.CREATED_FROM_LIST_TYPE,
23126        decode(c.LIST_LINE_ID,-1,'HQ','LQ') QUALIFIER_TYPE
23127 FROM   QP_PREQ_QUAL_TMP c
23128 WHERE  c.LIST_HEADER_ID = p_list_header_id
23129 AND    c.LIST_LINE_ID IN (p_list_line_id,-1)
23130 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
23131 AND    c.LINE_INDEX = p_line_index
23132 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
23133 UNION
23134 -- To get the -1 group qualifiers for non -1 groups only
23135 -- non -1 groups = OTHERS_GROUP_CNT <> 0
23136 SELECT /*+ INDEX(c QP_PREQ_QUAL_TMP_N1) l_get_satisfied_quals */
23137        c.LIST_HEADER_ID,
23138        c.LIST_LINE_ID,
23139        c.QUALIFIER_GROUP_CNT,
23140        c.HEADER_QUALS_EXIST_FLAG,
23141        c.SEARCH_IND,
23142        c.VALIDATED_FLAG,
23143        c.APPLIED_FLAG,
23144        c.QUALIFIER_ATTRIBUTE_LEVEL,
23145        c.QUALIFIER_ATTRIBUTE_TYPE,
23146        c.QUALIFIER_ATTRIBUTE_CONTEXT,
23147        c.QUALIFIER_ATTRIBUTE,
23148        c.QUALIFIER_ATTRIBUTE_VALUE,
23149        c.QUALIFIER_GROUPING_NO ,
23150        c.QUALIFIER_PRECEDENCE,
23151        c.QUALIFIER_DATATYPE,
23152        c.SETUP_VALUE_FROM,
23153        c.SETUP_VALUE_TO,
23154        c.QUALIFIER_PRICING_ATTR_FLAG,
23155        c.QUALIFIER_OPERATOR_TYPE ,
23156        c.CREATED_FROM_LIST_TYPE,
23157        decode(c.LIST_LINE_ID,-1,'HQ','LQ') QUALIFIER_TYPE
23158 FROM   QP_PREQ_QUAL_TMP c
23159 WHERE  c.LIST_HEADER_ID = p_list_header_id
23160 AND    c.LIST_LINE_ID IN (p_list_line_id,-1)
23161 AND    c.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
23162 AND    c.PRICING_PHASE_ID = p_pricing_phase_id
23163 AND    c.NULL_GROUP_CNT <> 0
23164 AND    c.OTHERS_GROUP_CNT <> 0 -- meaning there are other groups for which this cursor selects the -1 group qualifiers in perf path
23165 AND    c.QUALIFIER_GROUPING_NO = -1;
23166 
23167 -- 3520634 start
23168 -- get rows with search ind 2
23169 CURSOR get_list_headers_with_ind2 IS
23170 SELECT/*+ ORDERED */ 'x'
23171 FROM  qp_qualifiers b
23172 WHERE b.search_ind = 2
23173 and b.list_header_id in (select distinct a.list_header_id from qp_preq_qual_tmp a
23174                          where a.PRICING_STATUS_CODE = G_STATUS_UNCHANGED
23175                          and a.search_ind = 1
23176                          and a.pricing_phase_id = p_pricing_phase_id)
23177 AND   rownum = 1;
23178 -- 3520634 end
23179 
23180 J PLS_INTEGER:=1;
23181 N PLS_INTEGER:=1;
23182 M PLS_INTEGER:=1;
23183 K PLS_INTEGER:=1;
23184 
23185 l_status VARCHAR2(30);
23186 l_status_code VARCHAR2(30);
23187 l_status_text VARCHAR2(240);
23188 l_list_line_id NUMBER := 0 ;
23189 l_line_index PLS_INTEGER := 0 ;
23190 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.SELECT_MODIFIERS';
23191 l_blind_discount VARCHAR2(30);
23192 
23193 l_line_detail_index PLS_INTEGER;
23194 l_prod_qual_count PLS_INTEGER := 0;
23195 l_prod_cur_count PLS_INTEGER := 0;
23196 v_qualifiers_satisfied BOOLEAN;
23197 
23198 l_list_header_id NUMBER := -9999;
23199 l_lst_line_id    NUMBER := -9999;
23200 l_line_indx      NUMBER := -9999;
23201 l_line_detail_indx NUMBER := -9999;
23202 l_qualifier_type VARCHAR2(20);
23203 l_satisfied_qualifier_type VARCHAR2(20);
23204 l_satisfied_list_header_id NUMBER := -9999;
23205 l_satisfied_lst_line_id    NUMBER := -9999;
23206 l_satisfied_line_indx      NUMBER := -9999;
23207 l_satisfied_line_detail_indx NUMBER := -9999;
23208 l_satisfied_incomp_code VARCHAR2(30);
23209 l_satisfied_modifier_lvl_code VARCHAR2(30);
23210 l_satisfied_primary_uom_flag VARCHAR2(30);
23211 l_exe_count NUMBER := 0;
23212 lq_line_index              NUMBER := -9999;
23213 lq_list_line_id            NUMBER := -9999;
23214 l_dummy VARCHAR2(1); -- 3520634
23215 
23216 l_satis_quals_opt	VARCHAR2(1);
23217 --l_perf_pvt_enabled      VARCHAR2(1) := nvl(QP_PERF_PVT.enabled,G_NO);
23218 
23219 E_ROUTINE_ERRORS         EXCEPTION;
23220 
23221 nROWS CONSTANT NUMBER := 1000;
23222 
23223 BEGIN
23224 
23225    x_status_code := FND_API.G_RET_STS_SUCCESS;
23226    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23227    engine_debug('Before Big Select');
23228 
23229    END IF;
23230    --hw
23231    l_satis_quals_opt := nvl(fnd_profile.value('QP_SATIS_QUALS_OPT'), 'Y');
23232    --[julin/pricebook]
23233    IF nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES THEN
23234      l_satis_quals_opt := 'N';
23235    END IF;
23236 
23237    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23238    engine_debug('QP_SATIS_QUALS_OPT: ' || l_satis_quals_opt);
23239 
23240    END IF;
23241    --l_prod_qual_count := 0;
23242    l_prod_cur_count := 0;
23243 
23244    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23245    engine_debug('Caching Header Qualifiers for phase : ' || p_pricing_phase_id);
23246    END IF;
23247    qp_debug_util.tstart('CACHE_HEADER_QUALIFIERS','Caching the header qualifiers');
23248    Cache_Header_Qualifiers(p_pricing_phase_id,l_status_code,l_status_text);
23249    qp_debug_util.tstop('CACHE_HEADER_QUALIFIERS');
23250    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23251      RAISE E_ROUTINE_ERRORS;
23252    END IF;
23253 
23254    --Added call for 3520634
23255    qp_debug_util.tstart('DELETE_HDRS_WITH_NO_PRODATTR','Deleting the headers with no product attribute');
23256    Delete_Hdrs_With_No_ProdAttr(p_pricing_phase_id,l_status_code,l_status_text);
23257    qp_debug_util.tstop('DELETE_HDRS_WITH_NO_PRODATTR');
23258    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23259      RAISE E_ROUTINE_ERRORS;
23260    END IF;
23261 
23262 
23263    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23264    engine_debug('Caching Line Qualifiers for satisfied headers and pure line quals for phase : ' || p_pricing_phase_id);
23265    END IF;
23266    qp_debug_util.tstart('CACHE_LINE_QUALIFIERS','Caching the Line qualifiers');
23267    Cache_Line_Qualifiers(p_pricing_phase_id,l_status_code,l_status_text);
23268    qp_debug_util.tstop('CACHE_LINE_QUALIFIERS');
23269    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23270      RAISE E_ROUTINE_ERRORS;
23271    END IF;
23272 
23273  IF (G_QUALIFIER_TEMP <> 'E' OR G_LINE_QUALIFIER_TEMP <> 'E') THEN
23274    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23275    engine_debug('Caching Qualifiers for phase : ' || p_pricing_phase_id || ' Successful');
23276    END IF;
23277   -- For each primary search list header , list line and qualifier grouping no
23278 /*
23279 INDX,QP_PREQ_GRP.select_modifiers.select_modifiers_sel1,QP_PREQ_QUAL_TMP_N5,PRICING_STATUS_CODE,1
23280 */
23281   /*  FOR c1 in (select list_header_id , list_line_id , qualifier_grouping_no
23282 		   from  qp_preq_qual_tmp
23283 		   where pricing_status_code = G_STATUS_UNCHANGED
23284 		   and   pricing_phase_id = p_pricing_phase_id
23285 		   order by list_header_id,list_line_id,qualifier_grouping_no) LOOP
23286    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23287    engine_debug('Executing Mini Caching Qualifiers for phase : ' || p_pricing_phase_id ||
23288 			 'List Header id : ' || c1.list_header_id || ' List Line Id : ' || c1.list_line_id ||
23289 			 'Grouping No: ' || c1.qualifier_grouping_no);
23290    END IF;
23291    Mini_Cache_Qualifiers(c1.list_header_id , c1.list_line_id , c1.qualifier_grouping_no,
23292 					p_pricing_phase_id,l_status_code,l_status_text);
23293    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23294      RAISE E_ROUTINE_ERRORS;
23295    END IF;
23296    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23297    engine_debug('Executing Mini Caching Qualifiers for phase : ' || p_pricing_phase_id || ' Successful');
23298    END IF;
23299   END LOOP;  */
23300 
23301   -- Added for 3520634. Mini_Cache_Qualifiers is meant to search qualifiers with search_ind=2.
23302   --Call to Mini_Cache_Qualifiers can be saved if there is no header level qualifier with
23303   -- search_ind=2 for list_headers_ids selected by engine so far.
23304 
23305   OPEN  get_list_headers_with_ind2;
23306   FETCH get_list_headers_with_ind2 INTO l_dummy;
23307   CLOSE get_list_headers_with_ind2;
23308 
23309   IF (l_dummy = 'x') THEN  --Added if clause for 3520634
23310   	qp_debug_util.tstart('MINI_CACHE_QUALIFIERS','Caching the qualifiers with search_ind=2');
23311   	Mini_Cache_Qualifiers(-999 , -999 , -999, p_pricing_phase_id,l_status_code,l_status_text);
23312 	qp_debug_util.tstop('MINI_CACHE_QUALIFIERS');
23313   	IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23314      		RAISE E_ROUTINE_ERRORS;
23315   	END IF;
23316   	IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23317   		engine_debug('Executing Mini Caching Qualifiers for phase : ' || p_pricing_phase_id || ' Successful');
23318 
23319   	END IF;
23320   END IF;
23321   -- Qualifier Grouping
23322   qp_debug_util.tstart('MINI_CACHE_QUALIFIERS', 'Performing the Qualifier Grouping');
23323   Perform_Qualifier_Grouping(G_NO,p_pricing_phase_id,l_status_code,l_status_text);
23324   qp_debug_util.tstop('MINI_CACHE_QUALIFIERS');
23325 
23326   IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23327      RAISE E_ROUTINE_ERRORS;
23328   END IF;
23329 
23330 	--hw
23331 	--if QP_PERF_PVT.enabled = 'Y' then
23332 	--if l_perf_pvt_enabled = 'Y' then
23333 /*
23334 
23335  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23336 	engine_debug('hw: l_get_line_index_for_quals_n path');
23337 
23338  END IF;
23339 	-- update null group count
23340 	--update qp_preq_qual_tmp qpqt1
23341         --set qpqt1.null_group_cnt = (select count(*)
23342                                     from qp_preq_qual_tmp qpqt2
23343                                     where qpqt2.list_header_id = qpqt1.list_header_id
23344                                     and qpqt2.list_line_id = qpqt1.list_line_id
23345                                     and qpqt2.qualifier_grouping_no = -1
23346                                     and qpqt2.pricing_status_code <> G_DELETED_GRP
23347                                     and qpqt2.pricing_phase_id = p_pricing_phase_id
23348                                     and qpqt2.pricing_status_code = G_STATUS_UNCHANGED)
23349         where qpqt1.pricing_phase_id = p_pricing_phase_id
23350         and   qpqt1.pricing_status_code = G_STATUS_UNCHANGED;
23351 
23352 	--and qpqt1.qualifier_grouping_no = -1; -- should update all groups and not just -1 groups
23353         -- as it is used as null_group_count + other_group_cnt = qualifier_group_cnt
23354 
23355 	-- update other group count
23356 	--update qp_preq_qual_tmp qpqt1
23357         --set qpqt1.other_group_cnt = (select count(*)
23358                                      from qp_preq_qual_tmp qpqt2
23359                                      where qpqt2.list_header_id = qpqt1.list_header_id
23360                                      and qpqt2.list_line_id = qpqt1.list_line_id
23361                                      and qpqt2.qualifier_grouping_no <> -1
23362                                      and qpqt2.pricing_status_code <> G_DELETED_GRP
23363                                      and qpqt2.pricing_phase_id = p_pricing_phase_id
23364                                      and qpqt1.qualifier_grouping_no = qpqt2.qualifier_grouping_no
23365                                      and qpqt2.pricing_status_code = G_STATUS_UNCHANGED)
23366         where qpqt1.pricing_phase_id = p_pricing_phase_id
23367         and   qpqt1.pricing_status_code = G_STATUS_UNCHANGED
23368         and   qpqt1.qualifier_grouping_no <> -1;
23369 
23370  IF (G_DEBUG_ENGINE = FND_API.G_TRUE) THEN
23371   for i in (select list_header_id,list_line_id,qualifier_grouping_no,null_group_cnt,other_group_cnt,search_ind,
23372             qualifier_group_cnt,others_group_cnt,qualifier_attribute_context,qualifier_attribute,qualifier_attribute_value
23373             from qp_preq_qual_tmp
23374             where pricing_phase_id = p_pricing_phase_id
23375             and pricing_status_code = 'X'
23376             order by 1,2,3)
23377   loop
23378    QP_PREQ_GRP.engine_debug('List Header Id: ' || i.list_header_id);
23379    QP_PREQ_GRP.engine_debug('List Line Id: ' || i.list_line_id);
23380    QP_PREQ_GRP.engine_debug('Grouping No: ' || i.qualifier_grouping_no);
23381    QP_PREQ_GRP.engine_debug('Null Group Cnt: ' || i.null_group_cnt);
23382    QP_PREQ_GRP.engine_debug('Other Group Cnt: ' || i.other_group_cnt);
23383    QP_PREQ_GRP.engine_debug('Satisfied Group Cnt: ' || i.qualifier_group_cnt);
23384    QP_PREQ_GRP.engine_debug('Search Ind: ' || i.search_ind);
23385    QP_PREQ_GRP.engine_debug('Others group cnt: ' || i.others_group_cnt);
23386    QP_PREQ_GRP.engine_debug('Qualifier Context: ' || i.qualifier_attribute_context);
23387    QP_PREQ_GRP.engine_debug('Qualifier Attribute: ' || i.qualifier_attribute);
23388    QP_PREQ_GRP.engine_debug('Qualifier Value: ' || i.qualifier_attribute_value);
23389   end loop;
23390  END IF;
23391 
23392   OPEN l_get_line_index_for_quals_n;
23393 
23394   LOOP
23395    G_LIST_HEADER_ID_TBL_Q.delete;
23396    G_LIST_LINE_ID_TBL_Q.delete;
23397    G_CONTEXT_TBL_Q.delete;
23398    G_ATTRIBUTE_TBL_Q.delete;
23399    G_VALUE_FROM_TBL_Q.delete;
23400    G_LIST_TYPE_CODE_TBL_Q.delete;
23401    G_ASK_FOR_FLAG_TBL_Q.delete;
23402    G_GROUPING_NO_TBL_Q.delete;
23403    G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
23404    G_OTHERS_GROUP_CNT_TBL_Q.delete;
23405    G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
23406    G_SEARCH_IND_TBL_Q.delete;
23407    G_VALIDATED_FLAG_TBL_Q.delete;
23408    G_APPLIED_FLAG_TBL_Q.delete;
23409    G_ATTRIBUTE_LEVEL_TBL_Q.delete;
23410    G_ATTRIBUTE_TYPE_TBL_Q.delete;
23411    G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
23412    G_DATATYPE_TBL_Q.delete;
23413    G_QUALIFIER_TYPE_TBL_Q.delete;
23414    G_SETUP_VALUE_FROM_TBL_Q.delete;
23415    G_SETUP_VALUE_TO_TBL_Q.delete;
23416    G_PRICING_ATTR_FLAG_TBL_Q.delete;
23417    G_OPERATOR_TYPE_TBL_Q.delete;
23418    G_LINE_INDEX_TBL_Q.delete;
23419    G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
23420    G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
23421    G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
23422    G_LINE_TYPE_CODE_TBL_Q.delete;
23423    G_PRICING_STATUS_CODE_TBL_Q.delete;
23424    G_PRICING_PHASE_ID_TBL_Q.delete;
23425    G_UNIQUE_KEY_TBL_Q.delete;
23426    G_START_DATE_ACTIVE_TBL_H_Q.delete;
23427    G_END_DATE_ACTIVE_TBL_H_Q.delete;
23428    G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
23429    G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
23430    G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
23431    G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
23432    G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
23433 
23434   FETCH l_get_line_index_for_quals_n
23435   BULK COLLECT INTO
23436      G_LIST_HEADER_ID_TBL_Q
23437    , G_LIST_LINE_ID_TBL_Q
23438    , G_CONTEXT_TBL_Q
23439    , G_ATTRIBUTE_TBL_Q
23440    , G_VALUE_FROM_TBL_Q
23441    , G_LIST_TYPE_CODE_TBL_Q
23442    , G_ASK_FOR_FLAG_TBL_Q
23443    , G_GROUPING_NO_TBL_Q
23444    , G_QUALIFIER_GROUP_CNT_TBL_Q
23445    , G_OTHERS_GROUP_CNT_TBL_Q
23446    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
23447    , G_SEARCH_IND_TBL_Q
23448    , G_VALIDATED_FLAG_TBL_Q
23449    , G_APPLIED_FLAG_TBL_Q
23450    , G_ATTRIBUTE_LEVEL_TBL_Q
23451    , G_ATTRIBUTE_TYPE_TBL_Q
23452    , G_QUALIFIER_PRECEDENCE_TBL_Q
23453    , G_DATATYPE_TBL_Q
23454    , G_QUALIFIER_TYPE_TBL_Q
23455    , G_SETUP_VALUE_FROM_TBL_Q
23456    , G_SETUP_VALUE_TO_TBL_Q
23457    , G_PRICING_ATTR_FLAG_TBL_Q
23458    , G_OPERATOR_TYPE_TBL_Q
23459    , G_START_DATE_ACTIVE_TBL_Q
23460    , G_END_DATE_ACTIVE_TBL_Q
23461    , G_LINE_INDEX_TBL_Q
23462    , G_PRICING_EFFECTIVE_DATE_TBL_Q
23463    , G_START_DATE_ACTIVE_FIR_TBL_Q
23464    , G_END_DATE_ACTIVE_FIR_TBL_Q
23465    , G_LINE_TYPE_CODE_TBL_Q
23466    , G_PRICING_STATUS_CODE_TBL_Q
23467    , G_PRICING_PHASE_ID_TBL_Q
23468    , G_UNIQUE_KEY_TBL_Q
23469    , G_START_DATE_ACTIVE_TBL_H_Q
23470    , G_END_DATE_ACTIVE_TBL_H_Q
23471    , G_START_DATE_ACTIVE_SEC_TBL_Q
23472    , G_END_DATE_ACTIVE_SEC_TBL_Q
23473    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
23474    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
23475    , G_HEADER_LIMIT_EXISTS_TBL_Q LIMIT nROWS;
23476    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
23477 
23478    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23479    engine_debug('Inserting no rows into qp_preq_qual_tmp for each line index');
23480    END IF;
23481    IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
23482 
23483      --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_UPDATED;
23484      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23485      engine_debug('Inserting rows into qp_preq_qual_tmp for each line index: ' || G_LIST_HEADER_ID_TBL_Q.COUNT);
23486 
23487      END IF;
23488       INSERT_QUAL(
23489        G_LIST_HEADER_ID_TBL_Q
23490      , G_LIST_LINE_ID_TBL_Q
23491      , G_VALIDATED_FLAG_TBL_Q
23492      , G_APPLIED_FLAG_TBL_Q
23493      , G_ATTRIBUTE_LEVEL_TBL_Q
23494      , G_ATTRIBUTE_TYPE_TBL_Q
23495      , G_CONTEXT_TBL_Q
23496      , G_ATTRIBUTE_TBL_Q
23497      , G_VALUE_FROM_TBL_Q
23498      , G_GROUPING_NO_TBL_Q
23499      , G_QUALIFIER_PRECEDENCE_TBL_Q
23500      , G_DATATYPE_TBL_Q
23501      , G_SETUP_VALUE_FROM_TBL_Q
23502      , G_SETUP_VALUE_TO_TBL_Q
23503      , G_PRICING_ATTR_FLAG_TBL_Q
23504      , G_OPERATOR_TYPE_TBL_Q
23505      , G_LIST_TYPE_CODE_TBL_Q
23506      , G_ASK_FOR_FLAG_TBL_Q
23507      , G_QUALIFIER_TYPE_TBL_Q
23508      , G_QUALIFIER_GROUP_CNT_TBL_Q
23509      , G_OTHERS_GROUP_CNT_TBL_Q
23510      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
23511      , G_SEARCH_IND_TBL_Q
23512      , G_PRICING_STATUS_CODE_TBL_Q
23513      , G_START_DATE_ACTIVE_TBL_Q
23514      , G_END_DATE_ACTIVE_TBL_Q
23515      , G_LINE_INDEX_TBL_Q
23516      , G_PRICING_EFFECTIVE_DATE_TBL_Q
23517      , G_START_DATE_ACTIVE_FIR_TBL_Q
23518      , G_END_DATE_ACTIVE_FIR_TBL_Q
23519      , G_LINE_TYPE_CODE_TBL_Q
23520      , G_PRICING_PHASE_ID_TBL_Q
23521      , G_UNIQUE_KEY_TBL_Q
23522      , G_START_DATE_ACTIVE_TBL_H_Q
23523      , G_END_DATE_ACTIVE_TBL_H_Q
23524      , G_START_DATE_ACTIVE_SEC_TBL_Q
23525      , G_END_DATE_ACTIVE_SEC_TBL_Q
23526      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
23527      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
23528      , G_HEADER_LIMIT_EXISTS_TBL_Q
23529      , l_status_code
23530      , l_status_text);
23531    END IF;
23532   END LOOP;
23533   CLOSE l_get_line_index_for_quals_n;
23534 
23535 */
23536 
23537   /* else  */
23538 
23539  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23540 	engine_debug('hw: l_get_line_index_for_quals path');
23541  END IF;
23542 
23543   OPEN l_get_line_index_for_quals;
23544 
23545   LOOP
23546    G_LIST_HEADER_ID_TBL_Q.delete;
23547    G_LIST_LINE_ID_TBL_Q.delete;
23548    G_CONTEXT_TBL_Q.delete;
23549    G_ATTRIBUTE_TBL_Q.delete;
23550    G_VALUE_FROM_TBL_Q.delete;
23551    G_LIST_TYPE_CODE_TBL_Q.delete;
23552    G_ASK_FOR_FLAG_TBL_Q.delete;
23553    G_GROUPING_NO_TBL_Q.delete;
23554    G_QUALIFIER_GROUP_CNT_TBL_Q.delete;
23555    G_OTHERS_GROUP_CNT_TBL_Q.delete;
23556    G_HEADER_QUALS_EXIST_FLG_TBL_Q.delete;
23557    G_SEARCH_IND_TBL_Q.delete;
23558    G_VALIDATED_FLAG_TBL_Q.delete;
23559    G_APPLIED_FLAG_TBL_Q.delete;
23560    G_ATTRIBUTE_LEVEL_TBL_Q.delete;
23561    G_ATTRIBUTE_TYPE_TBL_Q.delete;
23562    G_QUALIFIER_PRECEDENCE_TBL_Q.delete;
23563    G_DATATYPE_TBL_Q.delete;
23564    G_QUALIFIER_TYPE_TBL_Q.delete;
23565    G_SETUP_VALUE_FROM_TBL_Q.delete;
23566    G_SETUP_VALUE_TO_TBL_Q.delete;
23567    G_PRICING_ATTR_FLAG_TBL_Q.delete;
23568    G_OPERATOR_TYPE_TBL_Q.delete;
23569    G_LINE_INDEX_TBL_Q.delete;
23570    G_PRICING_EFFECTIVE_DATE_TBL_Q.delete;
23571    G_START_DATE_ACTIVE_FIR_TBL_Q.delete;
23572    G_END_DATE_ACTIVE_FIR_TBL_Q.delete;
23573    G_LINE_TYPE_CODE_TBL_Q.delete;
23574    G_PRICING_STATUS_CODE_TBL_Q.delete;
23575    G_PRICING_PHASE_ID_TBL_Q.delete;
23576    G_UNIQUE_KEY_TBL_Q.delete;
23577    G_START_DATE_ACTIVE_TBL_H_Q.delete;
23578    G_END_DATE_ACTIVE_TBL_H_Q.delete;
23579    G_START_DATE_ACTIVE_SEC_TBL_Q.delete;
23580    G_END_DATE_ACTIVE_SEC_TBL_Q.delete;
23581    G_ACTIVE_DATE_FIR_TYPE_TBL_Q.delete;
23582    G_ACTIVE_DATE_SEC_TYPE_TBL_Q.delete;
23583    G_HEADER_LIMIT_EXISTS_TBL_Q.delete;
23584    G_DERIVED_QUALIFIER_FLAG_TBL_Q.delete;    -- Added for TCA
23585 
23586   FETCH l_get_line_index_for_quals
23587   BULK COLLECT INTO
23588      G_LIST_HEADER_ID_TBL_Q
23589    , G_LIST_LINE_ID_TBL_Q
23590    , G_CONTEXT_TBL_Q
23591    , G_ATTRIBUTE_TBL_Q
23592    , G_VALUE_FROM_TBL_Q
23593    , G_LIST_TYPE_CODE_TBL_Q
23594    , G_ASK_FOR_FLAG_TBL_Q
23595    , G_GROUPING_NO_TBL_Q
23596    , G_QUALIFIER_GROUP_CNT_TBL_Q
23597    , G_OTHERS_GROUP_CNT_TBL_Q
23598    , G_HEADER_QUALS_EXIST_FLG_TBL_Q
23599    , G_SEARCH_IND_TBL_Q
23600    , G_VALIDATED_FLAG_TBL_Q
23601    , G_APPLIED_FLAG_TBL_Q
23602    , G_ATTRIBUTE_LEVEL_TBL_Q
23603    , G_ATTRIBUTE_TYPE_TBL_Q
23604    , G_QUALIFIER_PRECEDENCE_TBL_Q
23605    , G_DATATYPE_TBL_Q
23606    , G_QUALIFIER_TYPE_TBL_Q
23607    , G_SETUP_VALUE_FROM_TBL_Q
23608    , G_SETUP_VALUE_TO_TBL_Q
23609    , G_PRICING_ATTR_FLAG_TBL_Q
23610    , G_OPERATOR_TYPE_TBL_Q
23611    , G_START_DATE_ACTIVE_TBL_Q
23612    , G_END_DATE_ACTIVE_TBL_Q
23613    , G_LINE_INDEX_TBL_Q
23614    , G_PRICING_EFFECTIVE_DATE_TBL_Q
23615    , G_START_DATE_ACTIVE_FIR_TBL_Q
23616    , G_END_DATE_ACTIVE_FIR_TBL_Q
23617    , G_LINE_TYPE_CODE_TBL_Q
23618    , G_PRICING_STATUS_CODE_TBL_Q
23619    , G_PRICING_PHASE_ID_TBL_Q
23620    , G_UNIQUE_KEY_TBL_Q
23621    , G_START_DATE_ACTIVE_TBL_H_Q
23622    , G_END_DATE_ACTIVE_TBL_H_Q
23623    , G_START_DATE_ACTIVE_SEC_TBL_Q
23624    , G_END_DATE_ACTIVE_SEC_TBL_Q
23625    , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
23626    , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
23627    , G_HEADER_LIMIT_EXISTS_TBL_Q
23628    , G_DERIVED_QUALIFIER_FLAG_TBL_Q    LIMIT nROWS;     -- Added for TCA
23629    EXIT WHEN G_LIST_HEADER_ID_TBL_Q.COUNT = 0;
23630 
23631    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23632    engine_debug('Inserting no rows into qp_preq_qual_tmp for each line index');
23633    END IF;
23634    IF (G_LIST_HEADER_ID_TBL_Q.COUNT > 0) THEN
23635 
23636      --G_QUALIFIER_TEMP := G_QUALIFIER_TEMP_UPDATED;
23637      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23638      engine_debug('Inserting rows into qp_preq_qual_tmp for each line index: ' || G_LIST_HEADER_ID_TBL_Q.COUNT);
23639      END IF;
23640       INSERT_QUAL(
23641        G_LIST_HEADER_ID_TBL_Q
23642      , G_LIST_LINE_ID_TBL_Q
23643      , G_VALIDATED_FLAG_TBL_Q
23644      , G_APPLIED_FLAG_TBL_Q
23645      , G_ATTRIBUTE_LEVEL_TBL_Q
23646      , G_ATTRIBUTE_TYPE_TBL_Q
23647      , G_CONTEXT_TBL_Q
23648      , G_ATTRIBUTE_TBL_Q
23649      , G_VALUE_FROM_TBL_Q
23650      , G_GROUPING_NO_TBL_Q
23651      , G_QUALIFIER_PRECEDENCE_TBL_Q
23652      , G_DATATYPE_TBL_Q
23653      , G_SETUP_VALUE_FROM_TBL_Q
23654      , G_SETUP_VALUE_TO_TBL_Q
23655      , G_PRICING_ATTR_FLAG_TBL_Q
23656      , G_OPERATOR_TYPE_TBL_Q
23657      , G_LIST_TYPE_CODE_TBL_Q
23658      , G_ASK_FOR_FLAG_TBL_Q
23659      , G_QUALIFIER_TYPE_TBL_Q
23660      , G_QUALIFIER_GROUP_CNT_TBL_Q
23661      , G_OTHERS_GROUP_CNT_TBL_Q
23662      , G_HEADER_QUALS_EXIST_FLG_TBL_Q
23663      , G_SEARCH_IND_TBL_Q
23664      , G_PRICING_STATUS_CODE_TBL_Q
23665      , G_START_DATE_ACTIVE_TBL_Q
23666      , G_END_DATE_ACTIVE_TBL_Q
23667      , G_LINE_INDEX_TBL_Q
23668      , G_PRICING_EFFECTIVE_DATE_TBL_Q
23669      , G_START_DATE_ACTIVE_FIR_TBL_Q
23670      , G_END_DATE_ACTIVE_FIR_TBL_Q
23671      , G_LINE_TYPE_CODE_TBL_Q
23672      , G_PRICING_PHASE_ID_TBL_Q
23673      , G_UNIQUE_KEY_TBL_Q
23674      , G_START_DATE_ACTIVE_TBL_H_Q
23675      , G_END_DATE_ACTIVE_TBL_H_Q
23676      , G_START_DATE_ACTIVE_SEC_TBL_Q
23677      , G_END_DATE_ACTIVE_SEC_TBL_Q
23678      , G_ACTIVE_DATE_FIR_TYPE_TBL_Q
23679      , G_ACTIVE_DATE_SEC_TYPE_TBL_Q
23680      , G_HEADER_LIMIT_EXISTS_TBL_Q
23681      , G_DERIVED_QUALIFIER_FLAG_TBL_Q
23682      , l_status_code
23683      , l_status_text);
23684    END IF;
23685   END LOOP;
23686   CLOSE l_get_line_index_for_quals;
23687 
23688    -- Qualifier Grouping For Each Line Index
23689    Perform_Qualifier_Grouping(G_YES,p_pricing_phase_id,l_status_code,l_status_text);
23690 
23691   /* end if; */
23692 
23693    IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
23694     RAISE E_ROUTINE_ERRORS;
23695    END IF;
23696 
23697  END IF; --IF (G_QUALIFIER_TEMP <> 'E' OR G_LINE_QUALIFIER_TEMP <> 'E') THEN
23698 
23699 OPEN l_prod_qual_cur (p_pricing_phase_id, -99,-99,-99);
23700 qp_debug_util.tstart('L_PROD_QUAL_CUR','Cursor Loop l_prod_qual_cur');
23701 
23702 LOOP
23703  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23704  engine_debug('In l_prod_qual_cur loop fetch');
23705  END IF;
23706  G_LIST_HEADER_ID_TBL_P.delete;
23707  G_LIST_LINE_ID_TBL_P.delete;
23708  G_LIST_LINE_TYPE_TBL_P.delete;
23709  G_LINE_INDEX_TBL_P.delete;
23710  G_VALIDATED_FLAG_TBL_P.delete;
23711  G_APPLIED_FLAG_TBL_P.delete;
23712  G_ATTRIBUTE_LEVEL_TBL_P.delete;
23713  G_ATTRIBUTE_TYPE_TBL_P.delete;
23714  G_CONTEXT_TBL_P.delete;
23715  G_ATTRIBUTE_TBL_P.delete;
23716  G_VALUE_FROM_TBL_P.delete;
23717  G_SETUP_VALUE_FROM_TBL_P.delete;
23718  G_PRICING_ATTR_FLAG_TBL_P.delete;
23719  G_PRODUCT_UOM_CODE_TBL_P.delete;
23720  G_EXCLUDER_FLAG_TBL_P.delete;
23721  G_AUTOMATIC_FLAG_TBL_P.delete;
23722  G_MODIFIER_LEVEL_CODE_TBL_P.delete;
23723  G_NET_AMOUNT_FLAG_TBL_P.delete; --IT net_amount 2720717
23724  G_PRIMARY_UOM_FLAG_TBL_P.delete;
23725  G_OPER_CALCULATION_CODE_TBL_P.delete;
23726  G_OPERAND_VALUE_TBL_P.delete;
23727  G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
23728  G_PRICING_PHASE_ID_TBL_P.delete;
23729  G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
23730  G_INCOMP_GRP_CODE_TBL_P.delete;
23731  G_PRICE_FORMULA_ID_TBL_P.delete;
23732  G_PRODUCT_PRECEDENCE_TBL_P.delete;
23733  G_OVERRIDE_FLAG_TBL_P.delete;
23734  G_BENEFIT_QTY_TBL_P.delete;
23735  G_BENEFIT_UOM_CODE_TBL_P.delete;
23736  G_LIST_LINE_NO_TBL_P.delete;
23737  G_ACCRUAL_FLAG_TBL_P.delete;
23738  G_ACCR_CONVERSION_RATE_TBL_P.delete;
23739  G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
23740  G_ASK_FOR_FLAG_TBL_P.delete;
23741  G_LIST_TYPE_CODE_TBL_P.delete;
23742  G_HEADER_LIMIT_EXISTS_TBL_P.delete;
23743  G_LINE_LIMIT_EXISTS_TBL_P.delete;
23744  G_QUALIFIER_TYPE_TBL_P.delete;
23745  G_CHARGE_TYPE_CODE_TBL_P.delete;
23746  G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
23747  G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
23748  G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
23749  G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
23750 
23751  FETCH l_prod_qual_cur BULK COLLECT INTO
23752   G_LIST_HEADER_ID_TBL_P,
23753   G_LIST_LINE_ID_TBL_P,
23754   G_LIST_LINE_TYPE_TBL_P,
23755   G_LINE_INDEX_TBL_P,
23756   G_VALIDATED_FLAG_TBL_P,
23757   G_APPLIED_FLAG_TBL_P,
23758   G_ATTRIBUTE_LEVEL_TBL_P,
23759   G_ATTRIBUTE_TYPE_TBL_P,
23760   G_CONTEXT_TBL_P,
23761   G_ATTRIBUTE_TBL_P,
23762   G_VALUE_FROM_TBL_P,
23763   G_SETUP_VALUE_FROM_TBL_P,
23764   G_PRICING_ATTR_FLAG_TBL_P,
23765   G_PRODUCT_UOM_CODE_TBL_P,
23766   G_EXCLUDER_FLAG_TBL_P,
23767   G_AUTOMATIC_FLAG_TBL_P,
23768   G_MODIFIER_LEVEL_CODE_TBL_P,
23769   G_PRIMARY_UOM_FLAG_TBL_P,
23770   G_OPER_CALCULATION_CODE_TBL_P,
23771   G_OPERAND_VALUE_TBL_P,
23772   G_NET_AMOUNT_FLAG_TBL_P, --IT net_amount 2720717
23773   G_PRICING_GROUP_SEQUENCE_TBL_P,
23774   G_PRICING_PHASE_ID_TBL_P,
23775   G_PRICE_BREAK_TYPE_CODE_TBL_P,
23776   G_INCOMP_GRP_CODE_TBL_P,
23777   G_PRICE_FORMULA_ID_TBL_P,
23778   G_PRODUCT_PRECEDENCE_TBL_P,
23779   G_OVERRIDE_FLAG_TBL_P,
23780   G_BENEFIT_QTY_TBL_P,
23781   G_BENEFIT_UOM_CODE_TBL_P,
23782   G_LIST_LINE_NO_TBL_P,
23783   G_ACCRUAL_FLAG_TBL_P,
23784   G_ACCR_CONVERSION_RATE_TBL_P,
23785   G_ESTIM_ACCRUAL_RATE_TBL_P,
23786   G_ASK_FOR_FLAG_TBL_P,
23787   G_LIST_TYPE_CODE_TBL_P,
23788   G_HEADER_LIMIT_EXISTS_TBL_P,
23789   G_LINE_LIMIT_EXISTS_TBL_P,
23790   G_QUALIFIER_TYPE_TBL_P ,
23791   G_CHARGE_TYPE_CODE_TBL_P ,
23792   G_CHARGE_SUBTYPE_CODE_TBL_P,
23793   G_ACCUM_CONTEXT_TBL_P, -- accum range break
23794   G_ACCUM_ATTRIBUTE_TBL_P, -- accum range break
23795   G_ACCUM_FLAG_TBL_P LIMIT nROWS;
23796 
23797   EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
23798 
23799 
23800    IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
23801      FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
23802 
23803       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23804       engine_debug(' Prod Qual List line id selected from big select: '||G_LIST_LINE_ID_TBL_P(I));
23805 
23806       END IF;
23807      IF (lq_line_index <> G_LINE_INDEX_TBL_P(I) OR lq_list_line_id <> G_LIST_LINE_ID_TBL_P(I)) THEN
23808        L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
23809 
23810        G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
23811        G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
23812        G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
23813        G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
23814        G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
23815        G_PRICING_STATUS_TEXT_LD_TBL(M)       :='PRODUCT_QUALIFIER_ONLY';
23816        G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
23817        G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
23818        G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
23819        G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
23820        G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
23821        G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
23822        G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_QUALIFIER_ONLY';
23823        G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
23824        G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
23825        G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
23826        G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
23827        G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I); --IT net_amount 2720717
23828        G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
23829        G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
23830        G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
23831        G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
23832        G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
23833        G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
23834        G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
23835        G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
23836        G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
23837        G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
23838        G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
23839        G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
23840        G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
23841        G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
23842        G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
23843        G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
23844        G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
23845        G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
23846        G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
23847        G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
23848        G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
23849        M:=M+1;
23850        l_satisfied_list_header_id := G_LIST_HEADER_ID_TBL_P(I);
23851        l_satisfied_lst_line_id    := G_LIST_LINE_ID_TBL_P(I);
23852        l_satisfied_line_indx      := G_LINE_INDEX_TBL_P(I);
23853        l_satisfied_line_detail_indx := L_LINE_DETAIL_INDEX;
23854        l_satisfied_incomp_code := G_INCOMP_GRP_CODE_TBL_P(I);
23855        l_satisfied_modifier_lvl_code := G_MODIFIER_LEVEL_CODE_TBL_P(I);
23856        l_satisfied_primary_uom_flag :=  G_PRIMARY_UOM_FLAG_TBL_P(I);
23857        lq_line_index := G_LINE_INDEX_TBL_P(I);
23858        lq_list_line_id := G_LIST_LINE_ID_TBL_P(I);
23859       END IF;
23860 
23861 	   	--hw
23862 		--if l_satis_quals_opt <> 'N' then
23863        --4029027 commented out by 4455344/4489224
23864        --bug 4029027
23865        --IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
23866 
23867       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23868       engine_debug(' #2 ' );
23869       END IF;
23870         --PRODUCT ATTRIBUTES
23871         G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
23872         G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
23873         G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
23874         G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_P(I);
23875         G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_P(I);
23876         G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_P(I);
23877         G_VALUE_TO_tbl(K)                :=NULL;
23878         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
23879         G_VALIDATED_FLAG_tbl(K)          :=G_VALIDATED_FLAG_TBL_P(I);
23880         G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
23881         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
23882         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
23883         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
23884         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
23885         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
23886         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
23887         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
23888         G_GROUPING_NUMBER_tbl(K)         :=NULL;
23889         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
23890         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_ONLY';
23891         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
23892         G_DATATYPE_tbl(K)                :=NULL;
23893         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
23894         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
23895         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
23896         G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
23897         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
23898         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
23899         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
23900         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
23901         K:= K+1;
23902         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23903         engine_debug('The value of K : ' || K);
23904         END IF;
23905 
23906     IF  l_satis_quals_opt = 'Y' THEN  -- [4455344/4489224] {
23907      IF (l_satisfied_list_header_id <> -9999) THEN
23908 
23909        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23910        engine_debug('Qualifiers for List Header Id : ' || l_satisfied_list_header_id );
23911        engine_debug('Qualifiers for List Line Id : '   || l_satisfied_lst_line_id );
23912 
23913        END IF;
23914 
23915       qp_debug_util.tstart('L_GET_SATISFIED_QUALS','Cursor Loop L_GET_SATISFIED_QUALS');
23916 
23917       FOR V IN  l_get_satisfied_quals(l_satisfied_list_header_id,l_satisfied_lst_line_id, l_satisfied_line_indx)
23918       LOOP
23919         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23920         engine_debug(' Qual #3 ' );
23921         END IF;
23922         --Qualifier attributes
23923         G_LINE_INDEX_tbl(K)              :=l_satisfied_line_indx;
23924         G_ATTRIBUTE_LEVEL_tbl(K)         :=V.QUALIFIER_ATTRIBUTE_LEVEL;
23925         G_ATTRIBUTE_TYPE_tbl(K)          :=V.QUALIFIER_ATTRIBUTE_TYPE;
23926         G_CONTEXT_tbl(K)                 :=V.QUALIFIER_ATTRIBUTE_CONTEXT;
23927         G_ATTRIBUTE_tbl(K)               :=V.QUALIFIER_ATTRIBUTE;
23928         G_VALUE_FROM_tbl(K)              :=V.QUALIFIER_ATTRIBUTE_VALUE;
23929         G_VALUE_TO_tbl(K)                :=NULL;
23930         G_COMPARISON_OPERATOR_TYPE_tbl(K):=V.QUALIFIER_OPERATOR_TYPE;
23931         G_VALIDATED_FLAG_tbl(K)          :=V.VALIDATED_FLAG;
23932         G_APPLIED_FLAG_tbl(K)            :=V.APPLIED_FLAG;
23933         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
23934         G_PRICING_ATTR_FLAG_tbl(K)       :=V.QUALIFIER_PRICING_ATTR_FLAG;
23935         G_LINE_DETAIL_INDEX_tbl(K)       :=l_satisfied_line_detail_indx;
23936         G_LIST_HEADER_ID_tbl(K)          :=l_satisfied_list_header_id;
23937         G_LIST_LINE_ID_tbl(K)            :=l_satisfied_lst_line_id;
23938         G_SETUP_VALUE_FROM_tbl(K)        :=V.SETUP_VALUE_FROM;
23939         G_SETUP_VALUE_TO_tbl(K)          :=V.SETUP_VALUE_TO;
23940         G_GROUPING_NUMBER_tbl(K)         :=V.QUALIFIER_GROUPING_NO;
23941         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
23942         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_ONLY';
23943         G_QUALIFIER_PRECEDENCE_tbl(K)    :=V.QUALIFIER_PRECEDENCE;
23944         G_DATATYPE_tbl(K)                :=V.QUALIFIER_DATATYPE;
23945         G_EXCLUDER_FLAG_TBL(K)           :=NULL;
23946         G_PRODUCT_UOM_CODE_TBL(K)        :=NULL;
23947         G_QUALIFIER_TYPE_TBL(K)          :=V.QUALIFIER_TYPE;
23948         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
23949         G_INCOMP_GRP_CODE_TBL_A(K)         :=l_satisfied_incomp_code;
23950         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
23951         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=l_satisfied_modifier_lvl_code;
23952         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=l_satisfied_primary_uom_flag;
23953         K:= K+1;
23954 
23955         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23956         engine_debug('The value of K : ' || K);
23957         engine_debug('Qualifier Context : ' || v.qualifier_attribute_context);
23958         engine_debug('Qualifier Attribute : ' || v.qualifier_attribute);
23959         engine_debug('Qualifier Value : ' || v.qualifier_attribute_value);
23960         engine_debug('Qualifier List Header Id : ' || v.list_header_id);
23961         engine_debug('Qualifier List line Id : ' || v.list_line_id);
23962         engine_debug('Qualifier Type : ' || v.qualifier_type);
23963 
23964         END IF;
23965       END LOOP;
23966 
23967      qp_debug_util.tstop('L_GET_SATISFIED_QUALS');
23968 
23969       --Reset the satisfied list header and list line info
23970       l_satisfied_list_header_id := -9999;
23971       l_satisfied_lst_line_id    := -9999;
23972       l_satisfied_line_indx      := -9999;
23973       l_satisfied_line_detail_indx := -9999;
23974 
23975      END IF;
23976 
23977      end if; -- } [4455344/4489224]
23978 
23979     END LOOP;
23980    END IF;
23981   END LOOP;
23982 
23983   qp_debug_util.tstop('L_PROD_QUAL_CUR');
23984 
23985   CLOSE l_prod_qual_cur;
23986 
23987   lq_line_index              := -9999;
23988   lq_list_line_id            := -9999;
23989 
23990  OPEN l_prod_qual_pric_cur(p_pricing_phase_id, -99,-99,-99) ;
23991 
23992  qp_debug_util.tstart('L_PROD_QUAL_PRIC_CUR','Cursor Loop l_prod_qual_pric_cur');
23993  LOOP
23994  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
23995  engine_debug('In l_prod_qual_pric_cur loop fetch');
23996  END IF;
23997   G_LIST_HEADER_ID_TBL_P.delete;
23998   G_LIST_LINE_ID_TBL_P.delete;
23999   G_LIST_LINE_TYPE_TBL_P.delete;
24000   G_LINE_INDEX_TBL_P.delete;
24001   G_VALIDATED_FLAG_TBL_P.delete;
24002   G_APPLIED_FLAG_TBL_P.delete;
24003   G_ATTRIBUTE_LEVEL_TBL_P.delete;
24004   G_ATTRIBUTE_TYPE_TBL_P.delete;
24005   G_CONTEXT_TBL_P.delete;
24006   G_ATTRIBUTE_TBL_P.delete;
24007   G_VALUE_FROM_TBL_P.delete;
24008   G_SETUP_VALUE_FROM_TBL_P.delete;
24009   G_PRICING_ATTR_FLAG_TBL_P.delete;
24010   G_PRODUCT_UOM_CODE_TBL_P.delete;
24011   G_EXCLUDER_FLAG_TBL_P.delete;
24012   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
24013   G_ATTRIBUTE_TYPE_TBL_PR.delete;
24014   G_CONTEXT_TBL_PR.delete;
24015   G_ATTRIBUTE_TBL_PR.delete;
24016   G_VALUE_FROM_TBL_PR.delete;
24017   G_OPERATOR_TYPE_TBL_PR.delete;
24018   G_SETUP_VALUE_FROM_TBL_PR.delete;
24019   G_SETUP_VALUE_TO_TBL_PR.delete;
24020   G_DATATYPE_TBL_PR.delete;
24021   G_AUTOMATIC_FLAG_TBL_P.delete;
24022   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
24023   G_PRIMARY_UOM_FLAG_TBL_P.delete;
24024   G_OPER_CALCULATION_CODE_TBL_P.delete;
24025   G_OPERAND_VALUE_TBL_P.delete;
24026   G_NET_AMOUNT_FLAG_TBL_P.delete; -- IT net_amount 2720717
24027   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
24028   G_PRICING_PHASE_ID_TBL_P.delete;
24029   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
24030   G_INCOMP_GRP_CODE_TBL_P.delete;
24031   G_PRICE_FORMULA_ID_TBL_P.delete;
24032   G_PRODUCT_PRECEDENCE_TBL_P.delete;
24033   G_OVERRIDE_FLAG_TBL_P.delete;
24034   G_BENEFIT_QTY_TBL_P.delete;
24035   G_BENEFIT_UOM_CODE_TBL_P.delete;
24036   G_LIST_LINE_NO_TBL_P.delete;
24037   G_ACCRUAL_FLAG_TBL_P.delete;
24038   G_ACCR_CONVERSION_RATE_TBL_P.delete;
24039   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
24040   G_ASK_FOR_FLAG_TBL_P.delete;
24041   G_LIST_TYPE_CODE_TBL_P.delete;
24042   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
24043   G_LINE_LIMIT_EXISTS_TBL_P.delete;
24044   G_QUALIFIER_TYPE_TBL_P.delete;
24045   G_CHARGE_TYPE_CODE_TBL_P.delete;
24046   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
24047   G_ACCUM_CONTEXT_TBL_P.delete;   -- accum range break
24048   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- accum range break
24049   G_ACCUM_FLAG_TBL_P.delete;      -- accum range break
24050 
24051   FETCH l_prod_qual_pric_cur BULK COLLECT INTO
24052   G_LIST_HEADER_ID_TBL_P,
24053   G_LIST_LINE_ID_TBL_P,
24054   G_LIST_LINE_TYPE_TBL_P,
24055   G_LINE_INDEX_TBL_P,
24056   G_VALIDATED_FLAG_TBL_P,
24057   G_APPLIED_FLAG_TBL_P,
24058   G_ATTRIBUTE_LEVEL_TBL_P,
24059   G_ATTRIBUTE_TYPE_TBL_P,
24060   G_CONTEXT_TBL_P,
24061   G_ATTRIBUTE_TBL_P,
24062   G_VALUE_FROM_TBL_P,
24063   G_SETUP_VALUE_FROM_TBL_P,
24064   G_PRICING_ATTR_FLAG_TBL_P,
24065   G_PRODUCT_UOM_CODE_TBL_P,
24066   G_EXCLUDER_FLAG_TBL_P,
24067   G_ATTRIBUTE_LEVEL_TBL_PR,
24068   G_ATTRIBUTE_TYPE_TBL_PR,
24069   G_CONTEXT_TBL_PR,
24070   G_ATTRIBUTE_TBL_PR,
24071   G_VALUE_FROM_TBL_PR,
24072   G_SETUP_VALUE_FROM_TBL_PR,
24073   G_SETUP_VALUE_TO_TBL_PR,
24074   G_OPERATOR_TYPE_TBL_PR,
24075   G_DATATYPE_TBL_PR,
24076   G_AUTOMATIC_FLAG_TBL_P,
24077   G_MODIFIER_LEVEL_CODE_TBL_P,
24078   G_PRIMARY_UOM_FLAG_TBL_P,
24079   G_OPER_CALCULATION_CODE_TBL_P,
24080   G_OPERAND_VALUE_TBL_P,
24081   G_NET_AMOUNT_FLAG_TBL_P, -- IT net_amount 2720717
24082   G_PRICING_GROUP_SEQUENCE_TBL_P,
24083   G_PRICING_PHASE_ID_TBL_P,
24084   G_PRICE_BREAK_TYPE_CODE_TBL_P,
24085   G_INCOMP_GRP_CODE_TBL_P,
24086   G_PRICE_FORMULA_ID_TBL_P,
24087   G_PRODUCT_PRECEDENCE_TBL_P,
24088   G_OVERRIDE_FLAG_TBL_P,
24089   G_BENEFIT_QTY_TBL_P,
24090   G_BENEFIT_UOM_CODE_TBL_P,
24091   G_LIST_LINE_NO_TBL_P,
24092   G_ACCRUAL_FLAG_TBL_P,
24093   G_ACCR_CONVERSION_RATE_TBL_P,
24094   G_ESTIM_ACCRUAL_RATE_TBL_P,
24095   G_ASK_FOR_FLAG_TBL_P,
24096   G_LIST_TYPE_CODE_TBL_P,
24097   G_HEADER_LIMIT_EXISTS_TBL_P,
24098   G_LINE_LIMIT_EXISTS_TBL_P,
24099   G_QUALIFIER_TYPE_TBL_P ,
24100   G_CHARGE_TYPE_CODE_TBL_P ,
24101   G_CHARGE_SUBTYPE_CODE_TBL_P,
24102   G_ACCUM_CONTEXT_TBL_P,   -- for accum range break
24103   G_ACCUM_ATTRIBUTE_TBL_P, -- for accum range break
24104   G_ACCUM_FLAG_TBL_P LIMIT nROWS;
24105 
24106   EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
24107 
24108    IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
24109     FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
24110 
24111         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24112         engine_debug(' Prod Qual Pric List line id selected from big select: '||G_LIST_LINE_ID_TBL_P(I) );
24113         engine_debug(' #1');
24114         END IF;
24115 
24116 
24117       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24118       engine_debug(' #2');
24119 
24120       END IF;
24121      IF (lq_line_index <> G_LINE_INDEX_TBL_P(I) OR lq_list_line_id <> G_LIST_LINE_ID_TBL_P(I)) THEN
24122         l_line_detail_index :=GET_LINE_DETAIL_INDEX;
24123 
24124         G_LINE_INDEX_LD_TBL(M )               :=G_LINE_INDEX_TBL_P(I);
24125         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
24126         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
24127         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
24128         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
24129         G_PRICING_STATUS_TEXT_LD_TBL(M)       :='PRODUCT_QUALIFIER_PRICING';
24130         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
24131         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
24132         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
24133         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
24134         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
24135         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
24136         G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_QUALIFIER_PRICING';
24137         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
24138         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
24139         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
24140         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
24141         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I); -- IT net_amount 2720717
24142         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
24143         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
24144         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
24145         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
24146         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
24147         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
24148         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
24149         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
24150         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24151         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24152         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
24153         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
24154         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
24155         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
24156         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
24157         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
24158         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
24159         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
24160         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
24161         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
24162         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
24163         M:=M+1;
24164         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24165         engine_debug(' #4');
24166         END IF;
24167         l_satisfied_list_header_id := G_LIST_HEADER_ID_TBL_P(I);
24168         l_satisfied_lst_line_id    := G_LIST_LINE_ID_TBL_P(I);
24169         l_satisfied_line_indx      := G_LINE_INDEX_TBL_P(I);
24170         l_satisfied_line_detail_indx := L_LINE_DETAIL_INDEX;
24171         l_satisfied_incomp_code := G_INCOMP_GRP_CODE_TBL_P(I);
24172         l_satisfied_modifier_lvl_code := G_MODIFIER_LEVEL_CODE_TBL_P(I);
24173         l_satisfied_primary_uom_flag :=  G_PRIMARY_UOM_FLAG_TBL_P(I);
24174         lq_line_index := G_LINE_INDEX_TBL_P(I);
24175         lq_list_line_id := G_LIST_LINE_ID_TBL_P(I);
24176        END IF;  --end if for if list_line_no_exists
24177 
24178 		--if l_satis_quals_opt <> 'N' then
24179        --bug 4029027
24180        IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
24181 
24182         --INSERT PRODUCT ATTRIBUTES
24183         G_LINE_INDEX_TBL(K)              :=G_LINE_INDEX_TBL_P(I);
24184         G_ATTRIBUTE_LEVEL_TBL(K)         :=G_ATTRIBUTE_LEVEL_TBL_P(I);
24185         G_ATTRIBUTE_TYPE_TBL(K)          :=G_ATTRIBUTE_TYPE_TBL_P(I);
24186         G_CONTEXT_TBL(K)                 :=G_CONTEXT_TBL_P(I);
24187         G_ATTRIBUTE_TBL(K)               :=G_ATTRIBUTE_TBL_P(I);
24188         G_VALUE_FROM_TBL(K)              :=G_VALUE_FROM_TBL_P(I);
24189         G_VALUE_TO_TBL(K)                :=NULL;
24190         G_COMPARISON_OPERATOR_TYPE_TBL(K):=NULL;
24191         G_VALIDATED_FLAG_TBL(K)          :=G_VALIDATED_FLAG_TBL_P(I);
24192         G_APPLIED_FLAG_TBL(K)            :=G_APPLIED_FLAG_TBL_P(I);
24193         G_PRICING_STATUS_CODE_TBL(K)     :=G_STATUS_NEW;
24194         G_PRICING_ATTR_FLAG_TBL(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
24195         G_LINE_DETAIL_INDEX_TBL(K)       :=L_LINE_DETAIL_INDEX;
24196         G_LIST_HEADER_ID_TBL(K)          :=G_LIST_HEADER_ID_TBL_P(I);
24197         G_LIST_LINE_ID_TBL(K)            :=G_LIST_LINE_ID_TBL_P(I);
24198         G_SETUP_VALUE_FROM_TBL(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
24199         G_SETUP_VALUE_TO_TBL(K)          :=NULL;
24200         G_GROUPING_NUMBER_TBL(K)         :=NULL;
24201         G_NO_QUALIFIERS_IN_GRP_TBL(K)    :=NULL;
24202         G_PRICING_STATUS_TEXT_TBL(K)     :='PRODUCT_QUALIFIER_PRICING';
24203         G_QUALIFIER_PRECEDENCE_TBL(K)    :=NULL;
24204         G_DATATYPE_TBL(K)                :=NULL;
24205         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
24206         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
24207         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
24208         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
24209         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
24210         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
24211         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24212         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24213         K:= K+1;
24214 
24215         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24216         engine_debug('The value of K : ' || K);
24217         END IF;
24218 
24219         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24220         engine_debug(' #5');
24221 
24222         END IF;
24223         --INSERT PRICING ATTRIBUTES
24224         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
24225         G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
24226         G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
24227         G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
24228         G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
24229         G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
24230         G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
24231         G_VALUE_TO_tbl(K)                :=NULL;
24232         G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
24233         G_VALIDATED_FLAG_tbl(K)          :=G_VALIDATED_FLAG_TBL_P(I);
24234         G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
24235         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
24236         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
24237         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
24238         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
24239         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
24240         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
24241         G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
24242         G_GROUPING_NUMBER_tbl(K)         :=NULL;
24243         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
24244         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING';
24245         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
24246         G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
24247         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
24248         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
24249         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
24250         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
24251         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
24252         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
24253         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24254         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24255         K:= K+1;
24256         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24257         engine_debug('The value of K : ' || K);
24258         END IF;
24259         END IF;
24260 
24261      IF (l_satisfied_list_header_id <> -9999) THEN
24262 
24263        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24264        engine_debug('Qualifiers for List Header Id : ' || l_satisfied_list_header_id );
24265        engine_debug('Qualifiers for List Line Id : '   || l_satisfied_lst_line_id );
24266 
24267        END IF;
24268       FOR V IN  l_get_satisfied_quals(l_satisfied_list_header_id,l_satisfied_lst_line_id, l_satisfied_line_indx)
24269       LOOP
24270         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24271         engine_debug(' Qual #3 ' );
24272         END IF;
24273         --Qualifier attributes
24274         G_LINE_INDEX_tbl(K)              :=l_satisfied_line_indx;
24275         G_ATTRIBUTE_LEVEL_tbl(K)         :=V.QUALIFIER_ATTRIBUTE_LEVEL;
24276         G_ATTRIBUTE_TYPE_tbl(K)          :=V.QUALIFIER_ATTRIBUTE_TYPE;
24277         G_CONTEXT_tbl(K)                 :=V.QUALIFIER_ATTRIBUTE_CONTEXT;
24278         G_ATTRIBUTE_tbl(K)               :=V.QUALIFIER_ATTRIBUTE;
24279         G_VALUE_FROM_tbl(K)              :=V.QUALIFIER_ATTRIBUTE_VALUE;
24280         G_VALUE_TO_tbl(K)                :=NULL;
24281         G_COMPARISON_OPERATOR_TYPE_tbl(K):=V.QUALIFIER_OPERATOR_TYPE;
24282         G_VALIDATED_FLAG_tbl(K)          :=V.VALIDATED_FLAG;
24283         G_APPLIED_FLAG_tbl(K)            :=V.APPLIED_FLAG;
24284         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
24285         G_PRICING_ATTR_FLAG_tbl(K)       :=V.QUALIFIER_PRICING_ATTR_FLAG;
24286         G_LINE_DETAIL_INDEX_tbl(K)       :=l_satisfied_line_detail_indx;
24287         G_LIST_HEADER_ID_tbl(K)          :=l_satisfied_list_header_id;
24288         G_LIST_LINE_ID_tbl(K)            :=l_satisfied_lst_line_id;
24289         G_SETUP_VALUE_FROM_tbl(K)        :=V.SETUP_VALUE_FROM;
24290         G_SETUP_VALUE_TO_tbl(K)          :=V.SETUP_VALUE_TO;
24291         G_GROUPING_NUMBER_tbl(K)         :=V.QUALIFIER_GROUPING_NO;
24292         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
24293         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING_ONLY';
24294         G_QUALIFIER_PRECEDENCE_tbl(K)    :=V.QUALIFIER_PRECEDENCE;
24295         G_DATATYPE_tbl(K)                :=V.QUALIFIER_DATATYPE;
24296         G_EXCLUDER_FLAG_TBL(K)           :=NULL;
24297         G_PRODUCT_UOM_CODE_TBL(K)        :=NULL;
24298         G_QUALIFIER_TYPE_TBL(K)          :=V.QUALIFIER_TYPE;
24299         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
24300         G_INCOMP_GRP_CODE_TBL_A(K)         :=l_satisfied_incomp_code;
24301         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
24302         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=l_satisfied_modifier_lvl_code;
24303         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=l_satisfied_primary_uom_flag;
24304         K:= K+1;
24305 
24306         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24307         engine_debug('The value of K : ' || K);
24308         engine_debug('Qualifier Context : ' || v.qualifier_attribute_context);
24309         engine_debug('Qualifier Attribute : ' || v.qualifier_attribute);
24310         engine_debug('Qualifier Value : ' || v.qualifier_attribute_value);
24311         engine_debug('Qualifier List Header Id : ' || v.list_header_id);
24312         engine_debug('Qualifier List line Id : ' || v.list_line_id);
24313         engine_debug('Qualifier Type : ' || v.qualifier_type);
24314 
24315         END IF;
24316       END LOOP;
24317 
24318       --Reset the satisfied list header and list line info
24319       l_satisfied_list_header_id := -9999;
24320       l_satisfied_lst_line_id    := -9999;
24321       l_satisfied_line_indx      := -9999;
24322       l_satisfied_line_detail_indx := -9999;
24323 
24324      END IF;
24325 
24326 	  end if;
24327 
24328     END LOOP;
24329    END IF;
24330  END LOOP;
24331 
24332  qp_debug_util.tstop('L_PROD_QUAL_PRIC_CUR');
24333 
24334  CLOSE l_prod_qual_pric_cur;
24335 
24336 OPEN l_inner_qual_cur (p_pricing_phase_id, -99,-99,-99,NULL,NULL,NULL,NULL);
24337 qp_debug_util.tstart('L_INNER_QUAL_CUR','Cursor Loop L_INNER_QUAL_CUR');
24338 LOOP
24339  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24340  engine_debug('In l_inner_qual_cur loop fetch');
24341 
24342  END IF;
24343  G_LIST_HEADER_ID_TBL_Q.delete;
24344  G_LIST_LINE_ID_TBL_Q.delete;
24345  G_LIST_LINE_TYPE_TBL_Q.delete;
24346  G_LINE_INDEX_TBL_Q.delete;
24347  G_AUTOMATIC_FLAG_TBL_Q.delete;
24348  G_MODIFIER_LEVEL_CODE_TBL_Q.delete;
24349  G_PRIMARY_UOM_FLAG_TBL_Q.delete;
24350  G_OPER_CALCULATION_CODE_TBL_Q.delete;
24351  G_OPERAND_TBL_Q.delete;
24352  G_NET_AMOUNT_FLAG_TBL_Q.delete; -- IT net_amount 2720717
24353  G_PRICING_GROUP_SEQUENCE_TBL_Q.delete;
24354  G_PRICING_PHASE_ID_TBL_Q.delete;
24355  G_PRICE_BREAK_TYPE_CODE_TBL_Q.delete;
24356  G_INCOMP_GRP_CODE_TBL_Q.delete;
24357  G_PRICE_FORMULA_ID_TBL_Q.delete;
24358  G_PRODUCT_PRECEDENCE_TBL_Q.delete;
24359  G_OVERRIDE_FLAG_TBL_P.delete;
24360  G_BENEFIT_QTY_TBL_P.delete;
24361  G_BENEFIT_UOM_CODE_TBL_P.delete;
24362  G_LIST_LINE_NO_TBL_Q.delete;
24363  G_ACCRUAL_FLAG_TBL_Q.delete;
24364  G_ACCR_CONVERSION_RATE_TBL_Q.delete;
24365  G_ESTIM_ACCRUAL_RATE_TBL_Q.delete;
24366  G_ASK_FOR_FLAG_TBL_Q.delete;
24367  G_LIST_TYPE_CODE_TBL_Q.delete;
24368  G_QUALIFIER_TYPE_TBL_Q.delete;
24369  G_HEADER_LIMIT_EXISTS_TBL_P.delete;
24370  G_LINE_LIMIT_EXISTS_TBL_P.delete;
24371  G_CHARGE_TYPE_CODE_TBL_P.delete;
24372  G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
24373  G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
24374  G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
24375  G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
24376 
24377  FETCH l_inner_qual_cur BULK COLLECT INTO
24378  G_LIST_HEADER_ID_TBL_Q,
24379  G_LIST_LINE_ID_TBL_Q,
24380  G_LIST_LINE_TYPE_TBL_Q,
24381  G_LINE_INDEX_TBL_Q,
24382  G_AUTOMATIC_FLAG_TBL_Q,
24383  G_MODIFIER_LEVEL_CODE_TBL_Q,
24384  G_PRIMARY_UOM_FLAG_TBL_Q,
24385  G_OPER_CALCULATION_CODE_TBL_Q,
24386  G_OPERAND_TBL_Q,
24387  G_NET_AMOUNT_FLAG_TBL_Q, -- IT net_amount 2720717
24388  G_PRICING_GROUP_SEQUENCE_TBL_Q,
24389  G_PRICING_PHASE_ID_TBL_Q,
24390  G_PRICE_BREAK_TYPE_CODE_TBL_Q,
24391  G_INCOMP_GRP_CODE_TBL_Q,
24392  G_PRICE_FORMULA_ID_TBL_Q,
24393  G_PRODUCT_PRECEDENCE_TBL_Q,
24394  G_OVERRIDE_FLAG_TBL_P,
24395  G_BENEFIT_QTY_TBL_P,
24396  G_BENEFIT_UOM_CODE_TBL_P,
24397  G_LIST_LINE_NO_TBL_Q,
24398  G_ACCRUAL_FLAG_TBL_Q,
24399  G_ACCR_CONVERSION_RATE_TBL_Q,
24400  G_ESTIM_ACCRUAL_RATE_TBL_Q,
24401  G_ASK_FOR_FLAG_TBL_Q,
24402  G_LIST_TYPE_CODE_TBL_Q,
24403  G_HEADER_LIMIT_EXISTS_TBL_P,
24404  G_LINE_LIMIT_EXISTS_TBL_P,
24405  G_QUALIFIER_TYPE_TBL_Q ,
24406  G_CHARGE_TYPE_CODE_TBL_P ,
24407  G_CHARGE_SUBTYPE_CODE_TBL_P,
24408  G_ACCUM_CONTEXT_TBL_P, -- accum range break
24409  G_ACCUM_ATTRIBUTE_TBL_P, -- accum range break
24410  G_ACCUM_FLAG_TBL_P LIMIT nROWS;
24411 
24412  EXIT WHEN G_LINE_INDEX_TBL_Q.COUNT = 0;
24413 
24414    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24415    engine_debug(' In l_inner_qual_cur Count : '||G_LIST_LINE_ID_TBL_Q.count );
24416 
24417    END IF;
24418    IF (G_LINE_INDEX_TBL_Q.COUNT > 0) THEN
24419     FOR I in G_LINE_INDEX_TBL_Q.FIRST .. G_LINE_INDEX_TBL_Q.LAST LOOP
24420         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24421         engine_debug(' In l_inner_qual_cur : '||G_LIST_LINE_ID_TBL_Q(I) );
24422 
24423         END IF;
24424      IF (lq_line_index <> G_LINE_INDEX_TBL_Q(I) OR lq_list_line_id <> G_LIST_LINE_ID_TBL_Q(I)) THEN
24425         l_line_detail_index :=GET_LINE_DETAIL_INDEX;
24426 
24427         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_Q(I);
24428         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
24429         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_Q(I);
24430         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_Q(I);
24431         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
24432         G_PRICING_STATUS_TEXT_LD_TBL(M)       :='QUALIFIER_ONLY';
24433         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_Q(I);
24434         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
24435         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
24436         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_Q(I);
24437         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_Q(I);
24438         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_Q(I);
24439         G_CREATED_FROM_SQL_TBL(M)             :='QUALIFIER_ONLY';
24440         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_Q(I);
24441         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_Q(I);
24442         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_Q(I);
24443         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_TBL_Q(I);
24444         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_Q(I); -- IT net_amount 2720717
24445         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_Q(I);
24446         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_Q(I);
24447         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_Q(I);
24448         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
24449         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
24450         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
24451         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_Q(I);
24452         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_Q(I);
24453         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_Q(I);
24454         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_Q(I);
24455         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_Q(I);
24456         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_Q(I);
24457         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_Q(I);
24458         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_Q(I);
24459         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
24460         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
24461         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
24462         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
24463         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
24464         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
24465         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
24466         M:=M+1;
24467         l_satisfied_list_header_id := G_LIST_HEADER_ID_TBL_Q(I);
24468         l_satisfied_lst_line_id    := G_LIST_LINE_ID_TBL_Q(I);
24469         l_satisfied_line_indx      := G_LINE_INDEX_TBL_Q(I);
24470         l_satisfied_line_detail_indx := L_LINE_DETAIL_INDEX;
24471         l_satisfied_incomp_code := G_INCOMP_GRP_CODE_TBL_Q(I);
24472         l_satisfied_modifier_lvl_code := G_MODIFIER_LEVEL_CODE_TBL_Q(I);
24473         l_satisfied_primary_uom_flag :=  G_PRIMARY_UOM_FLAG_TBL_Q(I);
24474         lq_line_index := G_LINE_INDEX_TBL_Q(I);
24475         lq_list_line_id := G_LIST_LINE_ID_TBL_Q(I);
24476       END IF;
24477 
24478 		if l_satis_quals_opt <> 'N' then
24479 
24480      IF (l_satisfied_list_header_id <> -9999) THEN
24481 
24482        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24483        engine_debug('Qualifiers for List Header Id : ' || l_satisfied_list_header_id );
24484        engine_debug('Qualifiers for List Line Id : '   || l_satisfied_lst_line_id );
24485 
24486        END IF;
24487       FOR V IN  l_get_satisfied_quals(l_satisfied_list_header_id,l_satisfied_lst_line_id, l_satisfied_line_indx)
24488       LOOP
24489         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24490         engine_debug(' Qual #3 ' );
24491         END IF;
24492         --Qualifier attributes
24493         G_LINE_INDEX_tbl(K)              :=l_satisfied_line_indx;
24494         G_ATTRIBUTE_LEVEL_tbl(K)         :=V.QUALIFIER_ATTRIBUTE_LEVEL;
24495         G_ATTRIBUTE_TYPE_tbl(K)          :=V.QUALIFIER_ATTRIBUTE_TYPE;
24496         G_CONTEXT_tbl(K)                 :=V.QUALIFIER_ATTRIBUTE_CONTEXT;
24497         G_ATTRIBUTE_tbl(K)               :=V.QUALIFIER_ATTRIBUTE;
24498         G_VALUE_FROM_tbl(K)              :=V.QUALIFIER_ATTRIBUTE_VALUE;
24499         G_VALUE_TO_tbl(K)                :=NULL;
24500         G_COMPARISON_OPERATOR_TYPE_tbl(K):=V.QUALIFIER_OPERATOR_TYPE;
24501         G_VALIDATED_FLAG_tbl(K)          :=V.VALIDATED_FLAG;
24502         G_APPLIED_FLAG_tbl(K)            :=V.APPLIED_FLAG;
24503         G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
24504         G_PRICING_ATTR_FLAG_tbl(K)       :=V.QUALIFIER_PRICING_ATTR_FLAG;
24505         G_LINE_DETAIL_INDEX_tbl(K)       :=l_satisfied_line_detail_indx;
24506         G_LIST_HEADER_ID_tbl(K)          :=l_satisfied_list_header_id;
24507         G_LIST_LINE_ID_tbl(K)            :=l_satisfied_lst_line_id;
24508         G_SETUP_VALUE_FROM_tbl(K)        :=V.SETUP_VALUE_FROM;
24509         G_SETUP_VALUE_TO_tbl(K)          :=V.SETUP_VALUE_TO;
24510         G_GROUPING_NUMBER_tbl(K)         :=V.QUALIFIER_GROUPING_NO;
24511         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
24512         G_PRICING_STATUS_TEXT_tbl(K)     :='QUALIFIERS_ONLY';
24513         G_QUALIFIER_PRECEDENCE_tbl(K)    :=V.QUALIFIER_PRECEDENCE;
24514         G_DATATYPE_tbl(K)                :=V.QUALIFIER_DATATYPE;
24515         G_EXCLUDER_FLAG_TBL(K)           :=NULL;
24516         G_PRODUCT_UOM_CODE_TBL(K)        :=NULL;
24517         G_QUALIFIER_TYPE_TBL(K)          :=V.QUALIFIER_TYPE;
24518         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
24519         G_INCOMP_GRP_CODE_TBL_A(K)         :=l_satisfied_incomp_code;
24520         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
24521         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=l_satisfied_modifier_lvl_code;
24522         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=l_satisfied_primary_uom_flag;
24523         K:= K+1;
24524 
24525         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24526         engine_debug('The value of K : ' || K);
24527         engine_debug('Qualifier Context : ' || v.qualifier_attribute_context);
24528         engine_debug('Qualifier Attribute : ' || v.qualifier_attribute);
24529         engine_debug('Qualifier Value : ' || v.qualifier_attribute_value);
24530         engine_debug('Qualifier List Header Id : ' || v.list_header_id);
24531         engine_debug('Qualifier List line Id : ' || v.list_line_id);
24532         engine_debug('Qualifier Type : ' || v.qualifier_type);
24533 
24534         END IF;
24535       END LOOP;
24536 
24537       --Reset the satisfied list header and list line info
24538       l_satisfied_list_header_id := -9999;
24539       l_satisfied_lst_line_id    := -9999;
24540       l_satisfied_line_indx      := -9999;
24541       l_satisfied_line_detail_indx := -9999;
24542 
24543      END IF;
24544 
24545 	  end if;
24546 
24547     END LOOP;
24548    END IF;
24549 END LOOP;
24550 
24551 qp_debug_util.tstop('L_INNER_QUAL_CUR');
24552 CLOSE l_inner_qual_cur;
24553 
24554 lq_line_index              := -9999;
24555 lq_list_line_id            := -9999;
24556 
24557 --selecting lists that match product qttributes only
24558 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24559 engine_debug('Before l_prod_cur_mod');
24560 END IF;
24561 OPEN l_prod_cur(p_pricing_phase_id);
24562 qp_debug_util.tstart('L_PROD_CUR','Cursor Loop L_PROD_CUR');
24563 
24564 LOOP
24565   G_LIST_HEADER_ID_TBL_P.delete;
24566   G_LIST_LINE_ID_TBL_P.delete;
24567   G_LIST_LINE_TYPE_TBL_P.delete;
24568   G_LINE_INDEX_TBL_P.delete;
24569   G_VALIDATED_FLAG_TBL_P.delete;
24570   G_APPLIED_FLAG_TBL_P.delete;
24571   G_ATTRIBUTE_LEVEL_TBL_P.delete;
24572   G_ATTRIBUTE_TYPE_TBL_P.delete;
24573   G_CONTEXT_TBL_P.delete;
24574   G_ATTRIBUTE_TBL_P.delete;
24575   G_VALUE_FROM_TBL_P.delete;
24576   G_SETUP_VALUE_FROM_TBL_P.delete;
24577   G_PRICING_ATTR_FLAG_TBL_P.delete;
24578   G_PRODUCT_UOM_CODE_TBL_P.delete;
24579   G_EXCLUDER_FLAG_TBL_P.delete;
24580   G_GROUPING_NUMBER_TBL_P.delete;
24581   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
24582   G_AUTOMATIC_FLAG_TBL_P.delete;
24583   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
24584   G_PRIMARY_UOM_FLAG_TBL_P.delete;
24585   G_OPER_CALCULATION_CODE_TBL_P.delete;
24586   G_OPERAND_VALUE_TBL_P.delete;
24587   G_NET_AMOUNT_FLAG_TBL_P.delete;  -- IT net_amount 2720717
24588   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
24589   G_ASK_FOR_FLAG_TBL_P.delete;
24590   G_LIST_TYPE_CODE_TBL_P.delete;
24591   G_PRICING_PHASE_ID_TBL_P.delete;
24592   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
24593   G_INCOMP_GRP_CODE_TBL_P.delete;
24594   G_PRICE_FORMULA_ID_TBL_P.delete;
24595   G_PRODUCT_PRECEDENCE_TBL_P.delete;
24596   G_OVERRIDE_FLAG_TBL_P.delete;
24597   G_BENEFIT_QTY_TBL_P.delete;
24598   G_BENEFIT_UOM_CODE_TBL_P.delete;
24599   G_LIST_LINE_NO_TBL_P.delete;
24600   G_ACCRUAL_FLAG_TBL_P.delete;
24601   G_ACCR_CONVERSION_RATE_TBL_P.delete;
24602   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
24603   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
24604   G_LINE_LIMIT_EXISTS_TBL_P.delete;
24605   G_QUALIFIER_TYPE_TBL_P.delete;
24606   G_CHARGE_TYPE_CODE_TBL_P.delete;
24607   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
24608   G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
24609   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
24610   G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
24611 
24612   FETCH l_prod_cur BULK COLLECT INTO
24613     G_LIST_HEADER_ID_TBL_P
24614   , G_LIST_LINE_ID_TBL_P
24615   , G_LIST_LINE_TYPE_TBL_P
24616   , G_LINE_INDEX_TBL_P
24617   , G_VALIDATED_FLAG_TBL_P
24618   , G_APPLIED_FLAG_TBL_P
24619   , G_ATTRIBUTE_LEVEL_TBL_P
24620   , G_ATTRIBUTE_TYPE_TBL_P
24621   , G_CONTEXT_TBL_P
24622   , G_ATTRIBUTE_TBL_P
24623   , G_VALUE_FROM_TBL_P
24624   , G_SETUP_VALUE_FROM_TBL_P
24625   , G_PRICING_ATTR_FLAG_TBL_P
24626   , G_PRODUCT_UOM_CODE_TBL_P
24627   , G_EXCLUDER_FLAG_TBL_P
24628   , G_GROUPING_NUMBER_TBL_P
24629   , G_QUALIFIER_PRECEDENCE_TBL_P
24630   , G_AUTOMATIC_FLAG_TBL_P
24631   , G_MODIFIER_LEVEL_CODE_TBL_P
24632   , G_PRIMARY_UOM_FLAG_TBL_P
24633   , G_OPER_CALCULATION_CODE_TBL_P
24634   , G_OPERAND_VALUE_TBL_P
24635   , G_NET_AMOUNT_FLAG_TBL_P  -- IT net_amount 2720717
24636   , G_PRICING_GROUP_SEQUENCE_TBL_P
24637   , G_ASK_FOR_FLAG_TBL_P
24638   , G_LIST_TYPE_CODE_TBL_P
24639   , G_PRICING_PHASE_ID_TBL_P
24640   , G_PRICE_BREAK_TYPE_CODE_TBL_P
24641   , G_INCOMP_GRP_CODE_TBL_P
24642   , G_PRICE_FORMULA_ID_TBL_P
24643   , G_PRODUCT_PRECEDENCE_TBL_P
24644   , G_OVERRIDE_FLAG_TBL_P
24645   , G_BENEFIT_QTY_TBL_P
24646   , G_BENEFIT_UOM_CODE_TBL_P
24647   , G_LIST_LINE_NO_TBL_P
24648   , G_ACCRUAL_FLAG_TBL_P
24649   , G_ACCR_CONVERSION_RATE_TBL_P
24650   , G_ESTIM_ACCRUAL_RATE_TBL_P
24651   , G_HEADER_LIMIT_EXISTS_TBL_P
24652   , G_LINE_LIMIT_EXISTS_TBL_P
24653   , G_QUALIFIER_TYPE_TBL_P
24654   , G_CHARGE_TYPE_CODE_TBL_P
24655   , G_CHARGE_SUBTYPE_CODE_TBL_P
24656   , G_ACCUM_CONTEXT_TBL_P -- accum range break
24657   , G_ACCUM_ATTRIBUTE_TBL_P -- accum range break
24658   , G_ACCUM_FLAG_TBL_P LIMIT nROWS;
24659 
24660    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
24661 
24662  IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
24663   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
24664     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24665     engine_debug('Before dup tbl loop');
24666     END IF;
24667 
24668      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24669      engine_debug('List line id selected from l_prod_cur_mod: '||g_list_line_id_TBL_P(I));
24670      engine_debug('Excluder Flag selected from big select1: '||g_excluder_flag_TBL_P(I));
24671 
24672      END IF;
24673      IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
24674         l_prod_cur_count := l_prod_cur_count + 1;
24675         l_line_detail_index := get_line_detail_index;
24676 
24677         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
24678         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
24679         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
24680         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
24681         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
24682         G_PRICING_STATUS_TEXT_LD_TBL(M)       := 'PRODUCT_ONLY';
24683         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
24684         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
24685         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
24686         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
24687         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
24688         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
24689         G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_ONLY';
24690         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
24691         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
24692         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
24693         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
24694         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I);  -- IT net_amount 2720717
24695         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
24696         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
24697         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
24698         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
24699         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
24700         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
24701         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
24702         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
24703         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24704         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24705         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
24706         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
24707         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
24708         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
24709         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
24710         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
24711         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
24712         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
24713         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
24714         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
24715         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
24716         M:=M+1;
24717         lq_line_index := g_line_index_tbl_p(I);
24718         lq_list_line_id := g_list_line_id_tbl_p(I);
24719      END IF;  --end if for if list_line_no_exists
24720 
24721 		--if l_satis_quals_opt <> 'N' then
24722        -- 4029027 commented by [4455344/4489224]
24723        --bug 4029027
24724        --IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
24725 
24726         --INSERT PRODUCT ATTRIBUTES
24727         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
24728         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(I);
24729         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(I);
24730         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(I);
24731         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(I);
24732         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(I);
24733         G_VALUE_TO_tbl(K)                := NULL;
24734         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
24735         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
24736         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
24737         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
24738         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
24739         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
24740         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
24741         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
24742         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
24743         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
24744         G_GROUPING_NUMBER_tbl(K)         :=G_GROUPING_NUMBER_TBL_P(I);
24745         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
24746         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_ONLY';
24747         G_QUALIFIER_PRECEDENCE_tbl(K)    :=G_QUALIFIER_PRECEDENCE_TBL_P(I);
24748         G_DATATYPE_tbl(K)                :=NULL;
24749         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24750         engine_debug('Before Insert Excluder Flag selected from big select1: '||g_excluder_flag_TBL_P(I));
24751         END IF;
24752         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
24753         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
24754         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
24755         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
24756         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
24757         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
24758         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24759         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24760         K:= K+1;
24761  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24762 	engine_debug('The value of K : ' || K);
24763  END IF;
24764 
24765 	-- end if; [4455344/4489224]
24766 
24767   END LOOP;
24768  END IF;
24769 END LOOP;
24770 
24771 qp_debug_util.tstop('L_PROD_CUR');
24772 
24773 CLOSE l_prod_cur;
24774 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24775 engine_debug('After l_prod_cur_mod');
24776 
24777 END IF;
24778 lq_line_index              := -9999;
24779 lq_list_line_id            := -9999;
24780 
24781 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24782 engine_debug('Before l_prod_pric_cur_mod');
24783 END IF;
24784 OPEN l_prod_pric_cur(p_pricing_phase_id);
24785 
24786 qp_debug_util.tstart('L_PROD_PRIC_CUR','Cursor Loop L_PROD_PRIC_CUR');
24787 
24788 LOOP
24789   G_LIST_HEADER_ID_TBL_P.delete;
24790   G_LIST_LINE_ID_TBL_P.delete;
24791   G_LIST_LINE_TYPE_TBL_P.delete;
24792   G_LINE_INDEX_TBL_P.delete;
24793   G_VALIDATED_FLAG_TBL_P.delete;
24794   G_APPLIED_FLAG_TBL_P.delete;
24795   G_ATTRIBUTE_LEVEL_TBL_P.delete;
24796   G_ATTRIBUTE_TYPE_TBL_P.delete;
24797   G_CONTEXT_TBL_P.delete;
24798   G_ATTRIBUTE_TBL_P.delete;
24799   G_VALUE_FROM_TBL_P.delete;
24800   G_SETUP_VALUE_FROM_TBL_P.delete;
24801   G_PRICING_ATTR_FLAG_TBL_P.delete;
24802   G_PRODUCT_UOM_CODE_TBL_P.delete;
24803   G_EXCLUDER_FLAG_TBL_P.delete;
24804   G_GROUPING_NUMBER_TBL_P.delete;
24805   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
24806   G_AUTOMATIC_FLAG_TBL_P.delete;
24807   G_MODIFIER_LEVEL_CODE_TBL_P.delete;
24808   G_PRIMARY_UOM_FLAG_TBL_P.delete;
24809   G_OPER_CALCULATION_CODE_TBL_P.delete;
24810   G_OPERAND_VALUE_TBL_P.delete;
24811   G_NET_AMOUNT_FLAG_TBL_P.delete;  -- IT net_amount 2720717
24812   G_PRICING_GROUP_SEQUENCE_TBL_P.delete;
24813   G_ASK_FOR_FLAG_TBL_P.delete;
24814   G_LIST_TYPE_CODE_TBL_P.delete;
24815   G_PRICING_PHASE_ID_TBL_P.delete;
24816   G_PRICE_BREAK_TYPE_CODE_TBL_P.delete;
24817   G_INCOMP_GRP_CODE_TBL_P.delete;
24818   G_PRICE_FORMULA_ID_TBL_P.delete;
24819   G_PRODUCT_PRECEDENCE_TBL_P.delete;
24820   G_OVERRIDE_FLAG_TBL_P.delete;
24821   G_PRINT_ON_INVOICE_FLAG_TBL_P.delete;
24822   G_BENEFIT_QTY_TBL_P.delete;
24823   G_BENEFIT_UOM_CODE_TBL_P.delete;
24824   G_LIST_LINE_NO_TBL_P.delete;
24825   G_ACCRUAL_FLAG_TBL_P.delete;
24826   G_ACCR_CONVERSION_RATE_TBL_P.delete;
24827   G_ESTIM_ACCRUAL_RATE_TBL_P.delete;
24828   G_QUALIFIER_TYPE_TBL_P.delete;
24829   G_ATTRIBUTE_LEVEL_TBL_PR.delete;
24830   G_ATTRIBUTE_TYPE_TBL_PR.delete;
24831   G_CONTEXT_TBL_PR.delete;
24832   G_ATTRIBUTE_TBL_PR.delete;
24833   G_VALUE_FROM_TBL_PR.delete;
24834   G_OPERATOR_TYPE_TBL_PR.delete;
24835   G_SETUP_VALUE_FROM_TBL_PR.delete;
24836   G_SETUP_VALUE_TO_TBL_PR.delete;
24837   G_DATATYPE_TBL_PR.delete;
24838   G_HEADER_LIMIT_EXISTS_TBL_P.delete;
24839   G_LINE_LIMIT_EXISTS_TBL_P.delete;
24840   G_CHARGE_TYPE_CODE_TBL_P.delete;
24841   G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
24842   G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
24843   G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
24844   G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
24845 
24846 FETCH l_prod_pric_cur BULK COLLECT INTO
24847     G_LIST_HEADER_ID_TBL_P
24848   , G_LIST_LINE_ID_TBL_P
24849   , G_LIST_LINE_TYPE_TBL_P
24850   , G_LINE_INDEX_TBL_P
24851   , G_VALIDATED_FLAG_TBL_P
24852   , G_APPLIED_FLAG_TBL_P
24853   , G_ATTRIBUTE_LEVEL_TBL_P
24854   , G_ATTRIBUTE_TYPE_TBL_P
24855   , G_CONTEXT_TBL_P
24856   , G_ATTRIBUTE_TBL_P
24857   , G_VALUE_FROM_TBL_P
24858   , G_SETUP_VALUE_FROM_TBL_P
24859   , G_PRICING_ATTR_FLAG_TBL_P
24860   , G_PRODUCT_UOM_CODE_TBL_P
24861   , G_EXCLUDER_FLAG_TBL_P
24862   , G_ATTRIBUTE_LEVEL_TBL_PR
24863   , G_ATTRIBUTE_TYPE_TBL_PR
24864   , G_CONTEXT_TBL_PR
24865   , G_ATTRIBUTE_TBL_PR
24866   , G_VALUE_FROM_TBL_PR
24867   , G_SETUP_VALUE_FROM_TBL_PR
24868   , G_SETUP_VALUE_TO_TBL_PR
24869   , G_OPERATOR_TYPE_TBL_PR
24870   , G_DATATYPE_TBL_PR
24871   , G_GROUPING_NUMBER_TBL_P
24872   , G_QUALIFIER_PRECEDENCE_TBL_P
24873   , G_AUTOMATIC_FLAG_TBL_P
24874   , G_MODIFIER_LEVEL_CODE_TBL_P
24875   , G_PRIMARY_UOM_FLAG_TBL_P
24876   , G_OPER_CALCULATION_CODE_TBL_P
24877   , G_OPERAND_VALUE_TBL_P
24878   , G_NET_AMOUNT_FLAG_TBL_P  -- IT net_amount 2720717
24879   , G_PRICING_GROUP_SEQUENCE_TBL_P
24880   , G_ASK_FOR_FLAG_TBL_P
24881   , G_LIST_TYPE_CODE_TBL_P
24882   , G_PRICING_PHASE_ID_TBL_P
24883   , G_PRICE_BREAK_TYPE_CODE_TBL_P
24884   , G_INCOMP_GRP_CODE_TBL_P
24885   , G_PRICE_FORMULA_ID_TBL_P
24886   , G_PRODUCT_PRECEDENCE_TBL_P
24887   , G_OVERRIDE_FLAG_TBL_P
24888   , G_BENEFIT_QTY_TBL_P
24889   , G_BENEFIT_UOM_CODE_TBL_P
24890   , G_LIST_LINE_NO_TBL_P
24891   , G_ACCRUAL_FLAG_TBL_P
24892   , G_ACCR_CONVERSION_RATE_TBL_P
24893   , G_ESTIM_ACCRUAL_RATE_TBL_P
24894   , G_HEADER_LIMIT_EXISTS_TBL_P
24895   , G_LINE_LIMIT_EXISTS_TBL_P
24896   , G_QUALIFIER_TYPE_TBL_P
24897   , G_CHARGE_TYPE_CODE_TBL_P
24898   , G_CHARGE_SUBTYPE_CODE_TBL_P
24899   , G_ACCUM_CONTEXT_TBL_P -- accum range break
24900   , G_ACCUM_ATTRIBUTE_TBL_P -- accum range break
24901   , G_ACCUM_FLAG_TBL_P LIMIT nROWS;
24902 
24903    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
24904 
24905   --selecting lists that match product and pricing attributes only
24906  IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
24907   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
24908     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24909     engine_debug('List line id selected from l_prod_pric_cur_mod: '||G_LIST_LINE_ID_TBL_P(I) );
24910     END IF;
24911     IF (lq_line_index <> g_line_index_tbl_p(I) OR lq_list_line_id <> g_list_line_id_tbl_p(I)) THEN
24912         L_LINE_DETAIL_INDEX := GET_LINE_DETAIL_INDEX;
24913 
24914         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_P(I);
24915         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
24916         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_P(I);
24917         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_P(I);
24918         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
24919         G_PRICING_STATUS_TEXT_LD_TBL(M)       := 'PRODUCT_PRICING_ONLY';
24920         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_P(I);
24921         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
24922         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
24923         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_P(I);
24924         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_P(I);
24925         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_P(I);
24926         G_CREATED_FROM_SQL_TBL(M)             :='PRODUCT_PRICING_ONLY';
24927         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_P(I);
24928         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_P(I);
24929         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_P(I);
24930         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_P(I);
24931         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_P(I);  --?? IT net_amount 2720717
24932         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_P(I);
24933         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_P(I);
24934         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_P(I);
24935         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_P(I);
24936         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_P(I);
24937         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_P(I);
24938         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24939         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24940         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_P(I);
24941         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_P(I);
24942         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_P(I);
24943         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_P(I);
24944         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_P(I);
24945         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_P(I);
24946         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
24947         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
24948         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
24949         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
24950         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
24951         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
24952         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
24953         M:=M+1;
24954         lq_line_index := g_line_index_tbl_p(I);
24955         lq_list_line_id := g_list_line_id_tbl_p(I);
24956 
24957     END IF;  --end if for is list_line_no_exists
24958 
24959 
24960 		--if l_satis_quals_opt <> 'N' then
24961        -- 4029027 commented out by [4455344/4489224]
24962        --bug 4029027
24963        --IF  (l_satis_quals_opt <> 'N' or (l_satis_quals_opt = 'N' and g_context_tbl_p(i) <> G_QUALIFIER_TYPE)) THEN
24964 
24965         --INSERT PRODUCT ATTRIBUTES
24966         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
24967         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(I);
24968         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(I);
24969         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(I);
24970         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(I);
24971         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(I);
24972         G_VALUE_TO_tbl(K)                := NULL;
24973         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
24974         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
24975         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
24976         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
24977         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
24978         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
24979         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
24980         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
24981         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_P(I);
24982         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
24983         G_GROUPING_NUMBER_tbl(K)         :=G_GROUPING_NUMBER_TBL_P(I);
24984         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
24985         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
24986         G_QUALIFIER_PRECEDENCE_tbl(K)    :=G_QUALIFIER_PRECEDENCE_TBL_P(I);
24987         G_DATATYPE_tbl(K)                :=NULL;
24988         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
24989         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
24990         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
24991         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
24992         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
24993         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
24994         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
24995         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
24996         K:= K+1;
24997         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
24998         engine_debug('The value of K : ' || K);
24999 
25000         END IF;
25001         --INSERT PRICING ATTRIBUTES
25002         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
25003         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
25004         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_PR(I);
25005         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_PR(I);
25006         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_PR(I);
25007         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_PR(I);
25008         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_PR(I);
25009         G_VALUE_TO_tbl(K)                := NULL;
25010         G_COMPARISON_OPERATOR_TYPE_tbl(K):= G_OPERATOR_TYPE_TBL_PR(I);
25011         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
25012         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
25013         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
25014         G_PRICING_ATTR_FLAG_tbl(K)       :=G_PRICING_ATTR_FLAG_TBL_P(I);
25015         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
25016         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
25017         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
25018         G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
25019         G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
25020         G_GROUPING_NUMBER_tbl(K)         :=G_GROUPING_NUMBER_TBL_P(I);
25021         G_NO_QUALIFIERS_IN_GRP_tbl(K)    :=NULL;
25022         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
25023         G_QUALIFIER_PRECEDENCE_tbl(K)    :=G_QUALIFIER_PRECEDENCE_TBL_P(I);
25024         G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
25025         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
25026         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
25027         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_P(I);
25028         G_PRICING_PHASE_ID_TBL_A(K)        :=p_pricing_phase_id;
25029         G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
25030         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
25031         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
25032         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
25033         K:= K+1;
25034         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25035         engine_debug('The value of K : ' || K);
25036         END IF;
25037         END IF;
25038 
25039         -- end if; [4455344/4489224]
25040 
25041   END LOOP;
25042  END IF;
25043 END LOOP;
25044 
25045 qp_debug_util.tstop('L_PROD_PRIC_CUR');
25046 
25047 CLOSE l_prod_pric_cur;
25048 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25049 engine_debug('After l_prod_pric_cur_mod');
25050 
25051 END IF;
25052 IF(G_BLIND_DISCOUNT_PROFILE = G_YES) THEN
25053  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25054  engine_debug('In blind discount mode');
25055 
25056  END IF;
25057   lq_line_index              := -9999;
25058   lq_list_line_id            := -9999;
25059 
25060  --Select the lists that are good for anything
25061   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25062   engine_debug('Before blind cursor');
25063   END IF;
25064   OPEN l_cur(p_pricing_phase_id);
25065 
25066   qp_debug_util.tstart('L_CUR','Cursor Loop L_CUR');
25067 
25068   LOOP
25069    G_LINE_INDEX_TBL_B.delete;
25070    G_LIST_HEADER_ID_TBL_B.delete;
25071    G_LIST_LINE_ID_TBL_B.delete;
25072    G_PRICE_BREAK_TYPE_CODE_TBL_B.delete ;
25073    G_LIST_LINE_TYPE_TBL_B.delete;
25074    G_LIST_TYPE_CODE_TBL_B.delete;
25075    G_PRICING_GROUP_SEQUENCE_TBL_B.delete;
25076    G_PRICING_PHASE_ID_TBL_B.delete;
25077    G_OPER_CALCULATION_CODE_TBL_B.delete;
25078    G_OPERAND_VALUE_TBL_B.delete;
25079    G_NET_AMOUNT_FLAG_TBL_B.delete;  -- IT net_amount 2720717
25080    G_ASK_FOR_FLAG_TBL_B.delete;
25081    G_PRICE_FORMULA_ID_TBL_B.delete;
25082    G_PRODUCT_PRECEDENCE_TBL_B.delete;
25083    G_INCOMP_GRP_CODE_TBL_B.delete;
25084    G_AUTOMATIC_FLAG_TBL_B.delete;
25085    G_OVERRIDE_FLAG_TBL_B.delete;
25086    G_PRIMARY_UOM_FLAG_TBL_B.delete;
25087    G_PRINT_ON_INVOICE_FLAG_TBL_B.delete;
25088    G_MODIFIER_LEVEL_CODE_TBL_B.delete;
25089    G_BENEFIT_QTY_TBL_B.delete;
25090    G_BENEFIT_UOM_CODE_TBL_B.delete;
25091    G_LIST_LINE_NO_TBL_B.delete;
25092    G_ACCRUAL_FLAG_TBL_B.delete;
25093    G_ACCR_CONVERSION_RATE_TBL_B.delete;
25094    G_ESTIM_ACCRUAL_RATE_TBL_B.delete;
25095    G_HEADER_LIMIT_EXISTS_TBL_P.delete;
25096    G_LINE_LIMIT_EXISTS_TBL_P.delete;
25097    G_CHARGE_TYPE_CODE_TBL_P.delete;
25098    G_CHARGE_SUBTYPE_CODE_TBL_P.delete;
25099    G_ACCUM_CONTEXT_TBL_P.delete; -- for accum range break
25100    G_ACCUM_ATTRIBUTE_TBL_P.delete; -- for accum range break
25101    G_ACCUM_FLAG_TBL_P.delete; -- for accum range break
25102 
25103   FETCH l_cur BULK COLLECT INTO
25104           G_LIST_HEADER_ID_TBL_B
25105         , G_LIST_LINE_ID_TBL_B
25106         , G_LIST_LINE_TYPE_TBL_B
25107         , G_LINE_INDEX_TBL_B
25108         , G_AUTOMATIC_FLAG_TBL_B
25109         , G_MODIFIER_LEVEL_CODE_TBL_B
25110         , G_PRIMARY_UOM_FLAG_TBL_B
25111         , G_OPER_CALCULATION_CODE_TBL_B
25112         , G_OPERAND_VALUE_TBL_B
25113         , G_NET_AMOUNT_FLAG_TBL_B  -- IT net_amount 2720717
25114         , G_PRICING_GROUP_SEQUENCE_TBL_B
25115         , G_ASK_FOR_FLAG_TBL_B
25116         , G_LIST_TYPE_CODE_TBL_B
25117         , G_PRICING_PHASE_ID_TBL_B
25118         , G_PRICE_BREAK_TYPE_CODE_TBL_B
25119         , G_INCOMP_GRP_CODE_TBL_B
25120         , G_PRICE_FORMULA_ID_TBL_B
25121         , G_PRODUCT_PRECEDENCE_TBL_B
25122         , G_OVERRIDE_FLAG_TBL_B
25123         , G_BENEFIT_QTY_TBL_B
25124         , G_BENEFIT_UOM_CODE_TBL_B
25125         , G_LIST_LINE_NO_TBL_B
25126         , G_ACCRUAL_FLAG_TBL_B
25127         , G_ACCR_CONVERSION_RATE_TBL_B
25128         , G_ESTIM_ACCRUAL_RATE_TBL_B
25129         , G_HEADER_LIMIT_EXISTS_TBL_P
25130         , G_LINE_LIMIT_EXISTS_TBL_P
25131         , G_CHARGE_TYPE_CODE_TBL_P
25132         , G_CHARGE_SUBTYPE_CODE_TBL_P
25133         , G_ACCUM_CONTEXT_TBL_P -- accum range break
25134         , G_ACCUM_ATTRIBUTE_TBL_P -- accum range break
25135         , G_ACCUM_FLAG_TBL_P LIMIT nROWS;
25136 
25137 	   EXIT WHEN G_LINE_INDEX_TBL_B.COUNT = 0;
25138 
25139 
25140    IF (G_LINE_INDEX_TBL_B.COUNT > 0) THEN
25141     FOR I in G_LINE_INDEX_TBL_B.FIRST .. G_LINE_INDEX_TBL_B.LAST  LOOP
25142 
25143      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25144      engine_debug('List line id selected from blind cur: '||G_LIST_LINE_ID_TBL_B(I) );
25145      END IF;
25146      IF (lq_line_index <> g_line_index_tbl_b(I) OR lq_list_line_id <> g_list_line_id_tbl_b(I)) THEN
25147         l_line_detail_index :=GET_LINE_DETAIL_INDEX;
25148         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25149         engine_debug('Getting new line detail index2 '||l_line_detail_index);
25150         END IF;
25151 
25152         G_LINE_INDEX_LD_TBL(M)                :=G_LINE_INDEX_TBL_B(I);
25153         G_LINE_DETAIL_INDEX_LD_TBL(M)         :=L_LINE_DETAIL_INDEX;
25154         G_LIST_HEADER_ID_LD_TBL(M)            :=G_LIST_HEADER_ID_TBL_B(I);
25155         G_LIST_LINE_ID_LD_TBL(M)              :=G_LIST_LINE_ID_TBL_B(I);
25156         G_PRICING_STATUS_CODE_LD_TBL(M)       :=G_STATUS_NEW;
25157         G_PRICING_STATUS_TEXT_LD_TBL(M)       :='GOOD_FOR_ALL';
25158         G_APPLIED_FLAG_LD_TBL(M)              :=G_AUTOMATIC_FLAG_TBL_B(I);
25159         G_PROCESSED_FLAG_LD_TBL(M)            :=G_NOT_PROCESSED;
25160         G_LINE_DETAIL_TYPE_CODE_TBL(M)        :='NULL';
25161         G_PRICE_BREAK_TYPE_CODE_TBL(M)        :=G_PRICE_BREAK_TYPE_CODE_TBL_B(I);
25162         G_LIST_LINE_TYPE_TBL(M)               :=G_LIST_LINE_TYPE_TBL_B(I);
25163         G_LIST_TYPE_CODE_TBL(M)               :=G_LIST_TYPE_CODE_TBL_B(I);
25164         G_CREATED_FROM_SQL_TBL(M)             :='GOOD_FOR_ALL';
25165         G_PRICING_GROUP_SEQUENCE_TBL(M)       :=G_PRICING_GROUP_SEQUENCE_TBL_B(I);
25166         G_PRICING_PHASE_ID_TBL(M)             :=G_PRICING_PHASE_ID_TBL_B(I);
25167         G_OPERAND_CALCULATION_CODE_TBL(M)     :=G_OPER_CALCULATION_CODE_TBL_B(I);
25168         G_OPERAND_VALUE_TBL(M)                :=G_OPERAND_VALUE_TBL_B(I);
25169         G_NET_AMOUNT_FLAG_TBL(M)              :=G_NET_AMOUNT_FLAG_TBL_B(I);  -- IT net_amount 2720717
25170         G_ASK_FOR_FLAG_TBL(M)                 :=G_ASK_FOR_FLAG_TBL_B(I);
25171         G_PRICE_FORMULA_ID_TBL(M)             :=G_PRICE_FORMULA_ID_TBL_B(I);
25172         G_PRODUCT_PRECEDENCE_TBL(M)           :=G_PRODUCT_PRECEDENCE_TBL_B(I);
25173         G_INCOMP_GRP_CODE_TBL(M)              :=G_INCOMP_GRP_CODE_TBL_B(I);
25174         G_AUTOMATIC_FLAG_TBL(M)               :=G_AUTOMATIC_FLAG_TBL_B(I);
25175         G_OVERRIDE_FLAG_TBL(M)                :=G_OVERRIDE_FLAG_TBL_B(I);
25176         G_PRIMARY_UOM_FLAG_TBL(M)             :=G_PRIMARY_UOM_FLAG_TBL_B(I);
25177         G_MODIFIER_LEVEL_CODE_TBL(M)          :=G_MODIFIER_LEVEL_CODE_TBL_B(I);
25178         G_BENEFIT_QTY_TBL(M)                  :=G_BENEFIT_QTY_TBL_B(I);
25179         G_BENEFIT_UOM_CODE_TBL(M)             :=G_BENEFIT_UOM_CODE_TBL_B(I);
25180         G_LIST_LINE_NO_TBL(M)                 :=G_LIST_LINE_NO_TBL_B(I);
25181         G_ACCRUAL_FLAG_TBL(M)                 :=G_ACCRUAL_FLAG_TBL_B(I);
25182         G_ACCRUAL_CONVERSION_RATE_TBL(M)      :=G_ACCR_CONVERSION_RATE_TBL_B(I);
25183         G_ESTIM_ACCRUAL_RATE_TBL(M)           :=G_ESTIM_ACCRUAL_RATE_TBL_B(I);
25184         G_HEADER_LIMIT_EXISTS_TBL(M)          :=G_HEADER_LIMIT_EXISTS_TBL_P(I);
25185         G_LINE_LIMIT_EXISTS_TBL(M)            :=G_LINE_LIMIT_EXISTS_TBL_P(I);
25186         G_CHARGE_TYPE_CODE_TBL(M)            :=nvl(G_CHARGE_TYPE_CODE_TBL_P(I),'');
25187         G_CHARGE_SUBTYPE_CODE_TBL(M)          :=nvl(G_CHARGE_SUBTYPE_CODE_TBL_P(I),'');
25188         G_ACCUM_CONTEXT_TBL(M)                :=G_ACCUM_CONTEXT_TBL_P(I);   -- accum range break
25189         G_ACCUM_ATTRIBUTE_TBL(M)              :=G_ACCUM_ATTRIBUTE_TBL_P(I); -- accum range break
25190         G_ACCUM_FLAG_TBL(M)                   :=G_ACCUM_FLAG_TBL_P(I);      -- accum range break
25191         M:=M+1;
25192         lq_line_index := g_line_index_tbl_b(I);
25193         lq_list_line_id := g_list_line_id_tbl_b(I);
25194 
25195      END IF;
25196 
25197     END LOOP;
25198    END IF; --IF
25199   END LOOP;
25200 
25201   qp_debug_util.tstop('L_CUR');
25202 
25203   CLOSE l_cur;
25204 END IF;  --for blind discount
25205 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25206 engine_debug('After blind cursor');
25207 
25208 
25209 END IF;
25210 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
25211   --RAISE OTHERS;
25212   NULL;
25213 END IF;
25214 
25215 -- Keep it for debugging purposes
25216 /* FOR Z In 1 .. g_line_detail_index_ld_tbl.count
25217 Loop
25218 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25219 engine_debug(  '1: ' || G_LINE_DETAIL_INDEX_LD_TBL(Z));
25220 engine_debug(  '2: ' || G_LINE_DETAIL_TYPE_CODE_TBL(Z));
25221 engine_debug(  '3: ' || G_PRICE_BREAK_TYPE_CODE_TBL(Z));
25222 engine_debug(  '5: ' || G_LINE_INDEX_LD_TBL(Z)  );
25223 engine_debug(  '6: ' || G_LIST_HEADER_ID_LD_TBL(Z));
25224 engine_debug(  '7: ' || G_LIST_LINE_ID_LD_TBL(Z) );
25225 engine_debug(  '8: ' || G_LIST_LINE_TYPE_TBL(Z) );
25226 engine_debug(  '9: ' || G_LIST_TYPE_CODE_TBL(Z));
25227 engine_debug(  '10: ' || G_CREATED_FROM_SQL_TBL(Z));
25228 engine_debug(  '11: ' || G_PRICING_GROUP_SEQUENCE_TBL(Z));
25229 engine_debug(  '12: ' || G_PRICING_PHASE_ID_TBL(Z));
25230 engine_debug(  '13: ' || G_OPERAND_CALCULATION_CODE_TBL(Z));
25231 engine_debug(  '14: ' || G_OPERAND_VALUE_TBL(Z));
25232 engine_debug(  '15: ' || G_SUBSTITUTION_TYPE_CODE_TBL(Z));
25233 engine_debug(  '16: ' || G_SUBSTITUTION_VALUE_FROM_TBL(Z));
25234 engine_debug(  '17: ' || G_SUBSTITUTION_VALUE_TO_TBL(Z));
25235 engine_debug(  '18: ' || G_ASK_FOR_FLAG_TBL(Z));
25236 engine_debug(  '19: ' || G_PRICE_FORMULA_ID_TBL(Z));
25237 engine_debug(  '20: ' || G_PRICING_STATUS_CODE_LD_TBL(Z));
25238 engine_debug(  '21: ' || G_PRICING_STATUS_TEXT_LD_TBL(Z));
25239 engine_debug(  '22: ' || G_PRODUCT_PRECEDENCE_TBL(Z) );
25240 engine_debug(  '23: ' || G_INCOMP_GRP_CODE_TBL(Z));
25241 engine_debug(  '24: ' || G_PROCESSED_FLAG_LD_TBL(Z));
25242 engine_debug(  '25: ' || G_APPLIED_FLAG_LD_TBL(Z));
25243 engine_debug(  '26: ' || G_AUTOMATIC_FLAG_TBL(Z));
25244 engine_debug(  '27: ' || G_OVERRIDE_FLAG_TBL(Z));
25245 engine_debug(  '28: ' || G_PRIMARY_UOM_FLAG_TBL(Z));
25246 engine_debug(  '29: ' || G_PRINT_ON_INVOICE_FLAG_TBL(Z));
25247 engine_debug(  '30: ' || G_MODIFIER_LEVEL_CODE_TBL(Z));
25248 engine_debug(  '31: ' || G_BENEFIT_QTY_TBL(Z));
25249 engine_debug(  '32: ' || G_BENEFIT_UOM_CODE_TBL(Z));
25250 engine_debug(  '33: ' || G_LIST_LINE_NO_TBL(Z));
25251 engine_debug(  '34: ' || G_ACCRUAL_FLAG_TBL(Z));
25252 engine_debug(  '35: ' || G_ACCRUAL_CONVERSION_RATE_TBL(Z));
25253 engine_debug(  '36: ' || G_ESTIM_ACCRUAL_RATE_TBL(Z));
25254 engine_debug(  '37: ' || G_RECURRING_FLAG_TBL(Z));
25255 engine_debug(  '38: ' || G_SELECTED_VOLUME_ATTR_TBL(Z));
25256 engine_debug(  '40: ' || G_HEADER_LIMIT_EXISTS_TBL(Z));
25257 engine_debug(  '41: ' || G_LINE_LIMIT_EXISTS_TBL(Z));
25258 engine_debug(  '42: ' || G_CHARGE_TYPE_CODE_TBL(Z));
25259 engine_debug(  '43: ' || G_CHARGE_SUBTYPE_CODE_TBL(Z));
25260 engine_debug(  '44 net_amount_flag: ' || G_NET_AMOUNT_FLAG_TBL(Z));  -- IT net_amount 2720717
25261 END IF;
25262 End Loop; */
25263 
25264 IF M > 1 THEN
25265   INSERT_LDETS_PVT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
25266                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
25267                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
25268                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
25269                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
25270                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
25271                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
25272                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
25273                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
25274                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
25275                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
25276                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
25277                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
25278                  p_NET_AMOUNT_FLAG              =>G_NET_AMOUNT_FLAG_TBL,  -- IT net_amount 2720717
25279                  p_ASK_FOR_FLAG                 =>G_ASK_FOR_FLAG_TBL,
25280                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
25281                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
25282                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
25283                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
25284                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
25285                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
25286                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
25287                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
25288                  p_OVERRIDE_FLAG                =>G_OVERRIDE_FLAG_TBL,
25289                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
25290                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
25291                  p_BENEFIT_QTY                  =>G_BENEFIT_QTY_TBL,
25292                  p_BENEFIT_UOM_CODE             =>G_BENEFIT_UOM_CODE_TBL,
25293                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
25294                  p_ACCRUAL_FLAG                 =>G_ACCRUAL_FLAG_TBL,
25295                  p_ACCRUAL_CONVERSION_RATE      =>G_ACCRUAL_CONVERSION_RATE_TBL,
25296                  p_ESTIM_ACCRUAL_RATE           =>G_ESTIM_ACCRUAL_RATE_TBL,
25297                  p_HEADER_LIMIT_EXISTS          =>G_HEADER_LIMIT_EXISTS_TBL,
25298                  p_LINE_LIMIT_EXISTS            =>G_LINE_LIMIT_EXISTS_TBL,
25299                  p_CHARGE_TYPE_CODE            =>G_CHARGE_TYPE_CODE_TBL,
25300                  p_CHARGE_SUBTYPE_CODE         =>G_CHARGE_SUBTYPE_CODE_TBL,
25301                  p_ACCUM_CONTEXT                =>G_ACCUM_CONTEXT_TBL,   -- accum range break
25302                  p_ACCUM_ATTRIBUTE              =>G_ACCUM_ATTRIBUTE_TBL, -- accum range break
25303                  p_ACCUM_FLAG                   =>G_ACCUM_FLAG_TBL,      -- accum range break
25304                  x_status_code                  =>l_status_code,
25305                  x_status_text                  =>l_status_text
25306                  );
25307 
25308 END IF;
25309 
25310 IF K > 1 THEN
25311  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25312 	engine_debug('hw: k = ' || k);
25313  END IF;
25314    INSERT_LINE_ATTRS2
25315    (    p_LINE_INDEX_tbl         =>G_LINE_INDEX_tbl,
25316         p_LINE_DETAIL_INDEX_tbl  =>G_LINE_DETAIL_INDEX_tbl,
25317         p_ATTRIBUTE_LEVEL_tbl    =>G_ATTRIBUTE_LEVEL_tbl,
25318         p_ATTRIBUTE_TYPE_tbl     =>G_ATTRIBUTE_TYPE_tbl,
25319         p_LIST_HEADER_ID_tbl     =>G_LIST_HEADER_ID_tbl,
25320         p_LIST_LINE_ID_tbl       =>G_LIST_LINE_ID_tbl,
25321         p_CONTEXT_tbl            =>G_CONTEXT_tbl,
25322         p_ATTRIBUTE_tbl          =>G_ATTRIBUTE_tbl,
25323         p_VALUE_FROM_tbl         =>G_VALUE_FROM_tbl,
25324         p_SETUP_VALUE_FROM_tbl   =>G_SETUP_VALUE_FROM_tbl,
25325         p_VALUE_TO_tbl           =>G_VALUE_TO_tbl,
25326         p_SETUP_VALUE_TO_tbl     =>G_SETUP_VALUE_TO_tbl,
25327         p_GROUPING_NUMBER_tbl    => G_GROUPING_NUMBER_tbl,
25328         p_NO_QUALIFIERS_IN_GRP_tbl      =>G_NO_QUALIFIERS_IN_GRP_tbl,
25329         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
25330         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
25331         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
25332         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
25333         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
25334         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
25335         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
25336         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
25337         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
25338         p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
25339         p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
25340         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
25341         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
25342         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
25343         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
25344         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
25345         x_status_code                   =>l_status_code,
25346         x_status_text                   =>l_status_text);
25347 
25348         IF l_status_code = FND_API.G_RET_STS_ERROR THEN
25349                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
25350         END IF;
25351 
25352 END IF;
25353 
25354 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25355 engine_debug('Before Inserting attributes in excluded cursor');
25356 
25357 END IF;
25358 K := 1;
25359 
25360 /*
25361 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
25362 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
25363 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
25364 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
25365 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
25366 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
25367 
25368 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,QP_PRICING_ATTRIBUTES_N2,LIST_LINE_ID,1
25369 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,QP_PRICING_ATTRIBUTES_N2,EXCLUDER_FLAG,2
25370 
25371 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
25372 INDX,QP_PREQ_GRP.select_modifiers.l_excl_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
25373 
25374 */
25375 
25376 -- Delete Excluded Line Details Directly if the inner select returns an excluded row
25377  UPDATE qp_npreq_ldets_tmp a
25378  SET    pricing_status_code = 'D_EXCLUDER'
25379  WHERE  pricing_phase_id = p_pricing_phase_id
25380  AND    pricing_status_code = G_STATUS_NEW
25381  AND    EXISTS ( SELECT/*+ ORDERED USE_NL(c) index(c qp_preq_line_attrs_tmp_N2) index(b QP_PRICING_ATTRIBUTES_N2) l_excl_cur */
25382                  'x'
25383                  FROM  qp_pricing_attributes b,
25384                        qp_npreq_line_attrs_tmp c
25385                  WHERE b.list_line_id = a.created_from_list_line_id
25386                  AND   b.excluder_flag = G_YES
25387                  AND   b.product_attribute_context = c.context
25388                  AND   b.product_attribute = c.attribute
25389                  AND   b.product_attr_value = c.value_from
25390                  AND   c.attribute_type = G_PRODUCT_TYPE
25391                  AND   c.pricing_status_code = G_STATUS_UNCHANGED
25392                  AND   c.line_index = a.line_index);
25393 
25394 --selecting list line attributes that match excluder flag
25395 /* OPEN l_get_excluded_prods_cur(p_pricing_phase_id);
25396 
25397 LOOP
25398   G_LIST_HEADER_ID_TBL_P.delete;
25399   G_LIST_LINE_ID_TBL_P.delete;
25400   G_LINE_INDEX_TBL_P.delete;
25401   G_VALIDATED_FLAG_TBL_P.delete;
25402   G_APPLIED_FLAG_TBL_P.delete;
25403   G_ATTRIBUTE_LEVEL_TBL_P.delete;
25404   G_ATTRIBUTE_TYPE_TBL_P.delete;
25405   G_CONTEXT_TBL_P.delete;
25406   G_ATTRIBUTE_TBL_P.delete;
25407   G_VALUE_FROM_TBL_P.delete;
25408   G_SETUP_VALUE_FROM_TBL_P.delete;
25409   G_PRICING_ATTR_FLAG_TBL_P.delete;
25410   G_PRODUCT_UOM_CODE_TBL_P.delete;
25411   G_EXCLUDER_FLAG_TBL_P.delete;
25412   G_QUALIFIER_PRECEDENCE_TBL_P.delete;
25413   G_LINE_DETAIL_INDEX_TBL_P.delete;
25414 
25415   FETCH l_get_excluded_prods_cur BULK COLLECT INTO
25416     G_LIST_HEADER_ID_TBL_P
25417   , G_LIST_LINE_ID_TBL_P
25418   , G_LINE_INDEX_TBL_P
25419   , G_VALIDATED_FLAG_TBL_P
25420   , G_APPLIED_FLAG_TBL_P
25421   , G_ATTRIBUTE_LEVEL_TBL_P
25422   , G_ATTRIBUTE_TYPE_TBL_P
25423   , G_CONTEXT_TBL_P
25424   , G_ATTRIBUTE_TBL_P
25425   , G_VALUE_FROM_TBL_P
25426   , G_SETUP_VALUE_FROM_TBL_P
25427   , G_PRICING_ATTR_FLAG_TBL_P
25428   , G_PRODUCT_UOM_CODE_TBL_P
25429   , G_EXCLUDER_FLAG_TBL_P
25430   , G_QUALIFIER_PRECEDENCE_TBL_P
25431   , G_LINE_DETAIL_INDEX_TBL_P LIMIT nROWS;
25432 
25433    EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
25434 
25435  IF (G_LINE_INDEX_TBL_P.COUNT > 0) THEN
25436   FOR I in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST LOOP
25437         --INSERT PRODUCT ATTRIBUTES
25438     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25439 	   engine_debug('Inserting attributes in excluded cursor : ' || G_LINE_INDEX_TBL_P(I));
25440     END IF;
25441         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(I);
25442         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(I);
25443         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(I);
25444         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(I);
25445         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(I);
25446         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(I);
25447         G_VALUE_TO_tbl(K)                := NULL;
25448         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
25449         G_VALIDATED_FLAG_tbl(K)          := G_VALIDATED_FLAG_TBL_P(I);
25450         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(I);
25451         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
25452         G_PRICING_ATTR_FLAG_tbl(K)       := G_PRICING_ATTR_FLAG_TBL_P(I);
25453         G_LINE_DETAIL_INDEX_tbl(K)       := G_LINE_DETAIL_INDEX_TBL_P(I);
25454         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(I);
25455         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(I);
25456         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_P(I);
25457         G_SETUP_VALUE_TO_tbl(K)          := NULL;
25458         G_GROUPING_NUMBER_tbl(K)         := NULL;
25459         G_NO_QUALIFIERS_IN_GRP_tbl(K)    := NULL;
25460         G_PRICING_STATUS_TEXT_tbl(K)     := 'EXCLUDED_PRODUCT_ONLY';
25461         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_P(I);
25462         G_DATATYPE_tbl(K)                := NULL;
25463         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(I);
25464         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(I);
25465         G_QUALIFIER_TYPE_TBL(K)          := NULL;
25466         G_PRICING_PHASE_ID_TBL_A(K)        := p_pricing_phase_id;
25467         G_INCOMP_GRP_CODE_TBL_A(K)         :=NULL;
25468         G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
25469         G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=NULL;
25470         G_PRIMARY_UOM_FLAG_TBL_A(K)        :=NULL;
25471         K:= K+1;
25472   END LOOP;
25473  END IF;
25474 END LOOP;
25475 CLOSE l_get_excluded_prods_cur; */
25476 
25477 
25478 IF K > 1 THEN
25479    INSERT_LINE_ATTRS2
25480    (    p_LINE_INDEX_tbl         =>G_LINE_INDEX_tbl,
25481         p_LINE_DETAIL_INDEX_tbl  =>G_LINE_DETAIL_INDEX_tbl,
25482         p_ATTRIBUTE_LEVEL_tbl    =>G_ATTRIBUTE_LEVEL_tbl,
25483         p_ATTRIBUTE_TYPE_tbl     =>G_ATTRIBUTE_TYPE_tbl,
25484         p_LIST_HEADER_ID_tbl     =>G_LIST_HEADER_ID_tbl,
25485         p_LIST_LINE_ID_tbl       =>G_LIST_LINE_ID_tbl,
25486         p_CONTEXT_tbl            =>G_CONTEXT_tbl,
25487         p_ATTRIBUTE_tbl          =>G_ATTRIBUTE_tbl,
25488         p_VALUE_FROM_tbl         =>G_VALUE_FROM_tbl,
25489         p_SETUP_VALUE_FROM_tbl   =>G_SETUP_VALUE_FROM_tbl,
25490         p_VALUE_TO_tbl           =>G_VALUE_TO_tbl,
25491         p_SETUP_VALUE_TO_tbl     =>G_SETUP_VALUE_TO_tbl,
25492         p_GROUPING_NUMBER_tbl    => G_GROUPING_NUMBER_tbl,
25493         p_NO_QUALIFIERS_IN_GRP_tbl      =>G_NO_QUALIFIERS_IN_GRP_tbl,
25494         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
25495         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
25496         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
25497         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
25498         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
25499         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
25500         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
25501         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
25502         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
25503         p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
25504         p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
25505         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
25506         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
25507         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
25508         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
25509         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
25510         x_status_code                   =>l_status_code,
25511         x_status_text                   =>l_status_text);
25512 IF l_status_code = FND_API.G_RET_STS_ERROR THEN
25513                 RAISE E_ROUTINE_ERRORS;
25514 END IF;
25515 
25516 END IF;
25517 
25518 --Reset_all_tbls;
25519 Reset_All_Tbls(l_status_code ,l_status_text );
25520 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
25521  RAISE E_ROUTINE_ERRORS;
25522 END IF;
25523 
25524 
25525 EXCEPTION
25526   WHEN E_ROUTINE_ERRORS THEN
25527      x_status_code := FND_API.G_RET_STS_ERROR;
25528      x_status_text := l_status_text;
25529      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25530      engine_debug(l_status_text);
25531      END IF;
25532   WHEN OTHERS THEN
25533       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
25534       engine_debug('< In Select_modifiers>: '||SQLERRM);
25535       END IF;
25536       x_status_code := FND_API.G_RET_STS_ERROR;
25537       x_status_text := l_routine||' '||SQLERRM;
25538 END SELECT_MODIFIERS;
25539 
25540 /*+----------------------------------------------------------
25541   |PROCEDURE SELECT_PRICE_LIST_LINES
25542   +----------------------------------------------------------
25543 */
25544 PROCEDURE SELECT_PRICE_LIST_LINES(p_pricing_phase_id   IN  NUMBER,
25545                                   p_freeze_override_flag IN VARCHAR2,
25546                                   x_status_code OUT NOCOPY       VARCHAR2,
25547                                   x_status_text OUT NOCOPY       VARCHAR2,
25548                                   p_control_rec       IN CONTROL_RECORD_TYPE) -- vivek
25549 AS
25550 
25551 -- [julin/4742368/4766135] Added QP_QUALIFIERS_N1 hint to prevent db from using N2
25552 --[julin/5007789] Tuned query as follows:
25553 -- 1. Performing line filter first.
25554 -- 2. Performing qualifier filter before product filter
25555 -- 3. Split into unions ('=', 'BETWEEN', 'NOT =') for better use of indexes
25556 CURSOR l_prod_qual_cur (p_pricing_phase_id NUMBER) IS
25557 -- Product and Qualifier Only. No pricing
25558 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
25559            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
25560            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
25561            INDEX(QPQ QP_QUALIFIERS_N4)
25562            l_prod_qual_cur_pl */
25563        qpl.list_header_id,
25564        qpl.list_line_id,
25565        qpl.list_line_type_code,
25566        qplatpr.line_index,
25567        qplatpr.applied_flag,
25568        qplatpr.attribute_level               product_attribute_level,
25569        qplatpr.attribute_type                product_attribute_type,
25570        qplatpr.context                       product_attribute_context,
25571        qplatpr.attribute                     product_attribute,
25572        qplatpr.value_from                    product_attr_value,
25573        qpprod.product_uom_code               product_uom_code,
25574        qpprod.excluder_flag,
25575        qplatq.context                        qualifier_attribute_context,
25576        qplatq.attribute                      qualifier_attribute,
25577        qplatq.value_from                     qualifier_attribute_value,
25578        qpq.qualifier_grouping_no             qualifier_grouping_no,
25579        qpq.qualifier_precedence              qualifier_precedence,
25580        qpq.qualifier_datatype,
25581        qpq.qualifier_attr_value              setup_value_from,
25582        qpq.qualifier_attr_value_to           setup_value_to,
25583        qpl.automatic_flag,
25584        qpl.modifier_level_code,
25585        qpl.primary_uom_flag,
25586        qpl.arithmetic_operator               operand_calculation_code,
25587        qpl.operand                           operand_value,
25588        qpl.pricing_group_sequence,
25589        qph.list_type_code                    created_from_list_type,
25590        qph.rounding_factor,
25591        qpl.pricing_phase_id,
25592        qpl.price_break_type_code,
25593        qpl.incompatibility_grp_code,
25594        qpl.price_by_formula_id,
25595        qpl.product_precedence,
25596        qpl.list_line_no,
25597        'HQ'                                 qualifier_type
25598       ,QPL.BREAK_UOM_CODE /* Proration */
25599       ,QPL.BREAK_UOM_CONTEXT /* Proration */
25600       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
25601 FROM   --[julin/5007789]
25602        (SELECT /*+ dynamic_sampling(1) */ *
25603         FROM qp_npreq_lines_tmp
25604         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
25605         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
25606        qp_npreq_line_attrs_tmp qplatq,
25607        qp_qualifiers qpq,
25608        qp_list_headers_b qph,
25609        qp_price_req_sources_v qprs,
25610        qp_npreq_line_attrs_tmp qplatpr,
25611        qp_pricing_attributes qpprod,
25612        qp_list_lines qpl
25613 WHERE  qph.list_header_id = qpl.list_header_id
25614 --added for moac -- commented references to security profile
25615 --security will be built into qp_list_headers_b
25616 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
25617 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
25618 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
25619 -- 3594459, context and attribute OR'd together
25620 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
25621        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
25622 AND    qpq.list_header_id = qph.list_header_id
25623 AND   (qplines.price_flag = G_YES OR
25624        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
25625 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
25626 AND    qpq.list_line_id = -1
25627 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
25628 AND   qpl.list_line_id   = qpprod.list_line_id
25629 AND   qph.currency_code = qplines.currency_code
25630 AND   qpl.modifier_level_code = qplines.line_type_code
25631 AND   qph.active_flag = G_YES
25632 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25633        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
25634        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
25635 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25636        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
25637        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
25638 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25639        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
25640        nvl(qpq.end_date_active,qplines.pricing_effective_date)
25641 AND   qpq.qualifier_context    = qplatq.context
25642 AND   qpq.qualifier_attribute  = qplatq.attribute
25643 AND   qpq.comparison_operator_code = '=' --[julin/5007789]
25644 AND   qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
25645 AND   qpq.active_flag = G_YES
25646 AND   qpprod.pricing_phase_id = p_pricing_phase_id
25647 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
25648 AND   qpprod.product_attribute_context = qplatpr.context
25649 AND   qpprod.product_attribute = qplatpr.attribute
25650 AND   qpprod.product_attr_value = qplatpr.value_from
25651 AND   qpprod.excluder_flag = G_NO
25652 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
25653 AND   qplatq.line_index = qplines.line_index
25654 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
25655 AND   qplatpr.line_index = qplatq.line_index
25656 AND   qph.source_system_code = qprs.source_system_code
25657 AND   qplines.request_type_code   = qprs.request_type_code
25658 AND   qplatq.attribute_type = 'QUALIFIER'
25659 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
25660 AND   qplatpr.attribute_type='PRODUCT'
25661 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25662 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
25663 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
25664   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
25665 UNION ALL
25666 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
25667            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
25668            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
25669            INDEX(QPQ QP_QUALIFIERS_N5)
25670            l_prod_qual_cur_pl */
25671        qpl.list_header_id,
25672        qpl.list_line_id,
25673        qpl.list_line_type_code,
25674        qplatpr.line_index,
25675        qplatpr.applied_flag,
25676        qplatpr.attribute_level               product_attribute_level,
25677        qplatpr.attribute_type                product_attribute_type,
25678        qplatpr.context                       product_attribute_context,
25679        qplatpr.attribute                     product_attribute,
25680        qplatpr.value_from                    product_attr_value,
25681        qpprod.product_uom_code               product_uom_code,
25682        qpprod.excluder_flag,
25683        qplatq.context                        qualifier_attribute_context,
25684        qplatq.attribute                      qualifier_attribute,
25685        qplatq.value_from                     qualifier_attribute_value,
25686        qpq.qualifier_grouping_no             qualifier_grouping_no,
25687        qpq.qualifier_precedence              qualifier_precedence,
25688        qpq.qualifier_datatype,
25689        qpq.qualifier_attr_value              setup_value_from,
25690        qpq.qualifier_attr_value_to           setup_value_to,
25691        qpl.automatic_flag,
25692        qpl.modifier_level_code,
25693        qpl.primary_uom_flag,
25694        qpl.arithmetic_operator               operand_calculation_code,
25695        qpl.operand                           operand_value,
25696        qpl.pricing_group_sequence,
25697        qph.list_type_code                    created_from_list_type,
25698        qph.rounding_factor,
25699        qpl.pricing_phase_id,
25700        qpl.price_break_type_code,
25701        qpl.incompatibility_grp_code,
25702        qpl.price_by_formula_id,
25703        qpl.product_precedence,
25704        qpl.list_line_no,
25705        'HQ'                                 qualifier_type
25706       ,QPL.BREAK_UOM_CODE /* Proration */
25707       ,QPL.BREAK_UOM_CONTEXT /* Proration */
25708       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
25709 FROM   --[julin/5007789]
25710        (SELECT /*+ dynamic_sampling(1) */ *
25711         FROM qp_npreq_lines_tmp
25712         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
25713         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
25714        qp_npreq_line_attrs_tmp qplatq,
25715        qp_qualifiers qpq,
25716        qp_list_headers_b qph,
25717        qp_price_req_sources_v qprs,
25718        qp_npreq_line_attrs_tmp qplatpr,
25719        qp_pricing_attributes qpprod,
25720        qp_list_lines qpl
25721 WHERE  qph.list_header_id = qpl.list_header_id
25722 --added for moac -- commented references to security profile
25723 --security will be built into qp_list_headers_b
25724 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
25725 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
25726 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
25727 -- 3594459, context and attribute OR'd together
25728 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
25729        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
25730 AND    qpq.list_header_id = qph.list_header_id
25731 AND   (qplines.price_flag = G_YES OR
25732        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
25733 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
25734 AND    qpq.list_line_id = -1
25735 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
25736 AND   qpl.list_line_id   = qpprod.list_line_id
25737 AND   qph.currency_code = qplines.currency_code
25738 AND   qpl.modifier_level_code = qplines.line_type_code
25739 AND   qph.active_flag = G_YES
25740 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25741        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
25742        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
25743 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25744        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
25745        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
25746 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25747        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
25748        nvl(qpq.end_date_active,qplines.pricing_effective_date)
25749 AND   qpq.qualifier_context    = qplatq.context
25750 AND   qpq.qualifier_attribute  = qplatq.attribute
25751 AND   qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
25752 AND   qpq.active_flag = G_YES
25753 AND   qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
25754 AND   qpprod.pricing_phase_id = p_pricing_phase_id
25755 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
25756 AND   qpprod.product_attribute_context = qplatpr.context
25757 AND   qpprod.product_attribute = qplatpr.attribute
25758 AND   qpprod.product_attr_value = qplatpr.value_from
25759 AND   qpprod.excluder_flag = G_NO
25760 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
25761 AND   qplatq.line_index = qplines.line_index
25762 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
25763 AND   qplatpr.line_index = qplatq.line_index
25764 AND   qph.source_system_code = qprs.source_system_code
25765 AND   qplines.request_type_code   = qprs.request_type_code
25766 AND   qplatq.attribute_type = 'QUALIFIER'
25767 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
25768 AND   qplatpr.attribute_type='PRODUCT'
25769 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25770 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
25771 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
25772   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
25773 UNION ALL
25774 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
25775            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
25776            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
25777            INDEX(QPQ QP_QUALIFIERS_N6)
25778            l_prod_qual_cur_pl */
25779        qpl.list_header_id,
25780        qpl.list_line_id,
25781        qpl.list_line_type_code,
25782        qplatpr.line_index,
25783        qplatpr.applied_flag,
25784        qplatpr.attribute_level               product_attribute_level,
25785        qplatpr.attribute_type                product_attribute_type,
25786        qplatpr.context                       product_attribute_context,
25787        qplatpr.attribute                     product_attribute,
25788        qplatpr.value_from                    product_attr_value,
25789        qpprod.product_uom_code               product_uom_code,
25790        qpprod.excluder_flag,
25791        qplatq.context                        qualifier_attribute_context,
25792        qplatq.attribute                      qualifier_attribute,
25793        qplatq.value_from                     qualifier_attribute_value,
25794        qpq.qualifier_grouping_no             qualifier_grouping_no,
25795        qpq.qualifier_precedence              qualifier_precedence,
25796        qpq.qualifier_datatype,
25797        qpq.qualifier_attr_value              setup_value_from,
25798        qpq.qualifier_attr_value_to           setup_value_to,
25799        qpl.automatic_flag,
25800        qpl.modifier_level_code,
25801        qpl.primary_uom_flag,
25802        qpl.arithmetic_operator               operand_calculation_code,
25803        qpl.operand                           operand_value,
25804        qpl.pricing_group_sequence,
25805        qph.list_type_code                    created_from_list_type,
25806        qph.rounding_factor,
25807        qpl.pricing_phase_id,
25808        qpl.price_break_type_code,
25809        qpl.incompatibility_grp_code,
25810        qpl.price_by_formula_id,
25811        qpl.product_precedence,
25812        qpl.list_line_no,
25813        'HQ'                                 qualifier_type
25814       ,QPL.BREAK_UOM_CODE /* Proration */
25815       ,QPL.BREAK_UOM_CONTEXT /* Proration */
25816       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
25817 FROM   --[julin/5007789]
25818        (SELECT /*+ dynamic_sampling(1) */ *
25819         FROM qp_npreq_lines_tmp
25820         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
25821         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
25822        qp_npreq_line_attrs_tmp qplatq,
25823        qp_qualifiers qpq,
25824        qp_list_headers_b qph,
25825        qp_price_req_sources_v qprs,
25826        qp_npreq_line_attrs_tmp qplatpr,
25827        qp_pricing_attributes qpprod,
25828        qp_list_lines qpl
25829 WHERE  qph.list_header_id = qpl.list_header_id
25830 --added for moac -- commented references to security profile
25831 --security will be built into qp_list_headers_b
25832 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
25833 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
25834 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
25835 -- 3594459, context and attribute OR'd together
25836 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
25837        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
25838 AND    qpq.list_header_id = qph.list_header_id
25839 AND   (qplines.price_flag = G_YES OR
25840        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
25841 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
25842 AND    qpq.list_line_id = -1
25843 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
25844 AND   qpl.list_line_id   = qpprod.list_line_id
25845 AND   qph.currency_code = qplines.currency_code
25846 AND   qpl.modifier_level_code = qplines.line_type_code
25847 AND   qph.active_flag = G_YES
25848 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25849        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
25850        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
25851 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25852        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
25853        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
25854 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
25855        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
25856        nvl(qpq.end_date_active,qplines.pricing_effective_date)
25857 AND   qpq.qualifier_context    = qplatq.context
25858 AND   qpq.qualifier_attribute  = qplatq.attribute
25859 AND   qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
25860 AND   qpq.active_flag = G_YES
25861 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
25862         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
25863        or
25864        (qpq.qualifier_datatype = G_NUMERIC
25865         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
25866             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
25867 AND   qpprod.pricing_phase_id = p_pricing_phase_id
25868 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
25869 AND   qpprod.product_attribute_context = qplatpr.context
25870 AND   qpprod.product_attribute = qplatpr.attribute
25871 AND   qpprod.product_attr_value = qplatpr.value_from
25872 AND   qpprod.excluder_flag = G_NO
25873 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
25874 AND   qplatq.line_index = qplines.line_index
25875 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
25876 AND   qplatpr.line_index = qplatq.line_index
25877 AND   qph.source_system_code = qprs.source_system_code
25878 AND   qplines.request_type_code   = qprs.request_type_code
25879 AND   qplatq.attribute_type = 'QUALIFIER'
25880 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
25881 AND   qplatpr.attribute_type='PRODUCT'
25882 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
25883 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
25884 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
25885   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
25886 ORDER BY 4,2;
25887 
25888 --[julin/4742368/4766135] Added QP_QUALIFIERS_N1 hint to prevent db from using N2
25889 --[julin/5007789] Tuned query as follows:
25890 -- 1. Performing line filter first.
25891 -- 2. Performing qualifier filter before product filter
25892 -- 3. Split into unions ('=', 'BETWEEN', 'NOT =') for better use of indexes
25893 CURSOR l_prod_qual_cur_currency (p_pricing_phase_id NUMBER) IS
25894 -- Product and Qualifier Only. No pricing
25895 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
25896            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
25897            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
25898            INDEX(QPQ QP_QUALIFIERS_N4)
25899        l_prod_qual_cur_pl */
25900        qpl.list_header_id,
25901        qpl.list_line_id,
25902        qpl.list_line_type_code,
25903        qplatpr.line_index,
25904        qplatpr.applied_flag,
25905        qplatpr.attribute_level               product_attribute_level,
25906        qplatpr.attribute_type                product_attribute_type,
25907        qplatpr.context                       product_attribute_context,
25908        qplatpr.attribute                     product_attribute,
25909        qplatpr.value_from                    product_attr_value,
25910        qpprod.product_uom_code               product_uom_code,
25911        qpprod.excluder_flag,
25912        qplatq.context                        qualifier_attribute_context,
25913        qplatq.attribute                      qualifier_attribute,
25914        qplatq.value_from                     qualifier_attribute_value,
25915        qpq.qualifier_grouping_no             qualifier_grouping_no,
25916        qpq.qualifier_precedence              qualifier_precedence,
25917        qpq.qualifier_datatype,
25918        qpq.qualifier_attr_value              setup_value_from,
25919        qpq.qualifier_attr_value_to           setup_value_to,
25920        qpl.automatic_flag,
25921        qpl.modifier_level_code,
25922        qpl.primary_uom_flag,
25923        qpl.arithmetic_operator               operand_calculation_code,
25924        qpl.operand                           operand_value,
25925        qpl.pricing_group_sequence,
25926        qph.list_type_code                    created_from_list_type,
25927        qph.rounding_factor,
25928        qpl.pricing_phase_id,
25929        qpl.price_break_type_code,
25930        qpl.incompatibility_grp_code,
25931        qpl.price_by_formula_id,
25932        qpl.product_precedence,
25933        qpl.list_line_no,
25934        'HQ'                                  qualifier_type,
25935        qcdt.currency_detail_id,
25936        qcdt.currency_header_id,
25937        qcdt.selling_rounding_factor,
25938        qplines.currency_code                 order_currency,
25939        qplines.pricing_effective_date        pricing_effective_date,
25940        qph.currency_code                     base_currency_code
25941       ,QPL.BREAK_UOM_CODE /* Proration */
25942       ,QPL.BREAK_UOM_CONTEXT /* Proration */
25943       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
25944 FROM   --[julin/5007789]
25945        (SELECT /*+ dynamic_sampling(1) */ *
25946         FROM qp_npreq_lines_tmp
25947         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
25948         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
25949        qp_npreq_line_attrs_tmp qplatq,
25950        qp_qualifiers qpq,
25951        qp_list_headers_b qph,
25952        qp_price_req_sources_v qprs,
25953        qp_npreq_line_attrs_tmp qplatpr,
25954        qp_pricing_attributes qpprod,
25955        qp_list_lines qpl,
25956        qp_currency_details qcdt
25957 WHERE  qph.list_header_id = qpl.list_header_id
25958 --added for moac -- commented references to security profile
25959 --security will be built into qp_list_headers_b
25960 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
25961 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
25962 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
25963 -- 3594459, context and attribute OR'd together
25964 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
25965        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
25966 AND    qpq.list_header_id = qph.list_header_id
25967 AND   (qplines.price_flag = G_YES OR
25968        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
25969 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
25970 AND   qpq.list_line_id = -1
25971 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
25972 AND   qpl.list_line_id   = qpprod.list_line_id
25973 --AND   qph.currency_code = qplines.currency_code
25974 AND   qph.currency_header_id = qcdt.currency_header_id
25975 AND   qplines.currency_code = qcdt.to_currency_code
25976 AND   nvl(qplines.pricing_effective_date,trunc(sysdate)) between
25977        nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date) and
25978        nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
25979 AND (
25980         (qcdt.curr_attribute_context is null
25981          and not exists
25982              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
25983 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
25984                where qcdt1.curr_attribute_context IS NOT NULL
25985 		 and qcdt1.curr_attribute_context = pa_tmp.context
25986                  and qcdt1.curr_attribute = pa_tmp.attribute
25987                  and qcdt1.curr_attribute_value = pa_tmp.value_from
25988                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
25989                  and qcdt1.to_currency_code = qcdt.to_currency_code
25990                  and qcdt1.currency_header_id = qcdt.currency_header_id
25991                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
25992                  and pa_tmp.line_index = qplines.line_index
25993                  and qplines.pricing_effective_date between
25994                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
25995                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
25996         OR
25997         (qcdt.curr_attribute_context is not null
25998          and qcdt.precedence =
25999              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
26000 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
26001                where qcdt2.curr_attribute_context IS NOT NULL
26002 		 and qcdt2.curr_attribute_context = pa_tmp1.context
26003                  and qcdt2.curr_attribute = pa_tmp1.attribute
26004                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
26005                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
26006                  and qcdt2.to_currency_code = qcdt.to_currency_code
26007                  and qcdt2.currency_header_id = qcdt.currency_header_id
26008                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
26009                  and pa_tmp1.line_index = qplines.line_index
26010                  and qplines.pricing_effective_date between
26011                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
26012                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
26013              )))
26014 AND   qpl.modifier_level_code = qplines.line_type_code
26015 AND   qph.active_flag = G_YES
26016 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26017        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26018        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26019 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26020        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26021        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26022 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26023        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26024        nvl(qpq.end_date_active,qplines.pricing_effective_date)
26025 AND   qpq.qualifier_context    = qplatq.context
26026 AND   qpq.qualifier_attribute  = qplatq.attribute
26027 AND   qpq.comparison_operator_code = '=' --[julin/5007789]
26028 AND   qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
26029 AND   qpq.active_flag = G_YES
26030 AND   qpprod.pricing_phase_id = p_pricing_phase_id
26031 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
26032 AND   qpprod.product_attribute_context = qplatpr.context
26033 AND   qpprod.product_attribute = qplatpr.attribute
26034 AND   qpprod.product_attr_value = qplatpr.value_from
26035 AND   qpprod.excluder_flag = G_NO
26036 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26037 AND   qplatq.line_index = qplines.line_index
26038 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
26039 AND   qplatpr.line_index = qplatq.line_index
26040 AND   qph.source_system_code = qprs.source_system_code
26041 AND   qplines.request_type_code   = qprs.request_type_code
26042 AND   qplatq.attribute_type = 'QUALIFIER'
26043 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
26044 AND   qplatpr.attribute_type='PRODUCT'
26045 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26046 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26047 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26048   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26049 UNION ALL
26050 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
26051            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
26052            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26053            INDEX(QPQ QP_QUALIFIERS_N5)
26054        l_prod_qual_cur_pl */
26055        qpl.list_header_id,
26056        qpl.list_line_id,
26057        qpl.list_line_type_code,
26058        qplatpr.line_index,
26059        qplatpr.applied_flag,
26060        qplatpr.attribute_level               product_attribute_level,
26061        qplatpr.attribute_type                product_attribute_type,
26062        qplatpr.context                       product_attribute_context,
26063        qplatpr.attribute                     product_attribute,
26064        qplatpr.value_from                    product_attr_value,
26065        qpprod.product_uom_code               product_uom_code,
26066        qpprod.excluder_flag,
26067        qplatq.context                        qualifier_attribute_context,
26068        qplatq.attribute                      qualifier_attribute,
26069        qplatq.value_from                     qualifier_attribute_value,
26070        qpq.qualifier_grouping_no             qualifier_grouping_no,
26071        qpq.qualifier_precedence              qualifier_precedence,
26072        qpq.qualifier_datatype,
26073        qpq.qualifier_attr_value              setup_value_from,
26074        qpq.qualifier_attr_value_to           setup_value_to,
26075        qpl.automatic_flag,
26076        qpl.modifier_level_code,
26077        qpl.primary_uom_flag,
26078        qpl.arithmetic_operator               operand_calculation_code,
26079        qpl.operand                           operand_value,
26080        qpl.pricing_group_sequence,
26081        qph.list_type_code                    created_from_list_type,
26082        qph.rounding_factor,
26083        qpl.pricing_phase_id,
26084        qpl.price_break_type_code,
26085        qpl.incompatibility_grp_code,
26086        qpl.price_by_formula_id,
26087        qpl.product_precedence,
26088        qpl.list_line_no,
26089        'HQ'                                  qualifier_type,
26090        qcdt.currency_detail_id,
26091        qcdt.currency_header_id,
26092        qcdt.selling_rounding_factor,
26093        qplines.currency_code                 order_currency,
26094        qplines.pricing_effective_date        pricing_effective_date,
26095        qph.currency_code                     base_currency_code
26096       ,QPL.BREAK_UOM_CODE /* Proration */
26097       ,QPL.BREAK_UOM_CONTEXT /* Proration */
26098       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
26099 FROM   --[julin/5007789]
26100        (SELECT /*+ dynamic_sampling(1) */ *
26101         FROM qp_npreq_lines_tmp
26102         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
26103         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
26104        qp_npreq_line_attrs_tmp qplatq,
26105        qp_qualifiers qpq,
26106        qp_list_headers_b qph,
26107        qp_price_req_sources_v qprs,
26108        qp_npreq_line_attrs_tmp qplatpr,
26109        qp_pricing_attributes qpprod,
26110        qp_list_lines qpl,
26111        qp_currency_details qcdt
26112 WHERE  qph.list_header_id = qpl.list_header_id
26113 --added for moac -- commented references to security profile
26114 --security will be built into qp_list_headers_b
26115 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26116 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26117 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26118 -- 3594459, context and attribute OR'd together
26119 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
26120        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
26121 AND    qpq.list_header_id = qph.list_header_id
26122 AND   (qplines.price_flag = G_YES OR
26123        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
26124 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
26125 AND   qpq.list_line_id = -1
26126 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
26127 AND   qpl.list_line_id   = qpprod.list_line_id
26128 --AND   qph.currency_code = qplines.currency_code
26129 AND   qph.currency_header_id = qcdt.currency_header_id
26130 AND   qplines.currency_code = qcdt.to_currency_code
26131 AND   nvl(qplines.pricing_effective_date,trunc(sysdate)) between
26132        nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date) and
26133        nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
26134 AND (
26135         (qcdt.curr_attribute_context is null
26136          and not exists
26137              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
26138 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
26139                where qcdt1.curr_attribute_context IS NOT NULL
26140 		 and qcdt1.curr_attribute_context = pa_tmp.context
26141                  and qcdt1.curr_attribute = pa_tmp.attribute
26142                  and qcdt1.curr_attribute_value = pa_tmp.value_from
26143                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
26144                  and qcdt1.to_currency_code = qcdt.to_currency_code
26145                  and qcdt1.currency_header_id = qcdt.currency_header_id
26146                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
26147                  and pa_tmp.line_index = qplines.line_index
26148                  and qplines.pricing_effective_date between
26149                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
26150                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
26151         OR
26152         (qcdt.curr_attribute_context is not null
26153          and qcdt.precedence =
26154              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
26155 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
26156                where qcdt2.curr_attribute_context IS NOT NULL
26157 		 and qcdt2.curr_attribute_context = pa_tmp1.context
26158                  and qcdt2.curr_attribute = pa_tmp1.attribute
26159                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
26160                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
26161                  and qcdt2.to_currency_code = qcdt.to_currency_code
26162                  and qcdt2.currency_header_id = qcdt.currency_header_id
26163                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
26164                  and pa_tmp1.line_index = qplines.line_index
26165                  and qplines.pricing_effective_date between
26166                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
26167                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
26168              )))
26169 AND   qpl.modifier_level_code = qplines.line_type_code
26170 AND   qph.active_flag = G_YES
26171 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26172        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26173        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26174 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26175        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26176        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26177 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26178        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26179        nvl(qpq.end_date_active,qplines.pricing_effective_date)
26180 AND   qpq.qualifier_context    = qplatq.context
26181 AND   qpq.qualifier_attribute  = qplatq.attribute
26182 AND   qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
26183 AND   qpq.active_flag = G_YES
26184 AND   qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
26185 AND   qpprod.pricing_phase_id = p_pricing_phase_id
26186 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
26187 AND   qpprod.product_attribute_context = qplatpr.context
26188 AND   qpprod.product_attribute = qplatpr.attribute
26189 AND   qpprod.product_attr_value = qplatpr.value_from
26190 AND   qpprod.excluder_flag = G_NO
26191 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26192 AND   qplatq.line_index = qplines.line_index
26193 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
26194 AND   qplatpr.line_index = qplatq.line_index
26195 AND   qph.source_system_code = qprs.source_system_code
26196 AND   qplines.request_type_code   = qprs.request_type_code
26197 AND   qplatq.attribute_type = 'QUALIFIER'
26198 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
26199 AND   qplatpr.attribute_type='PRODUCT'
26200 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26201 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26202 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26203   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26204 UNION ALL
26205 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPL)
26206            INDEX(QPLATQ QP_PREQ_LINE_ATTRS_TMP_N1)
26207            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26208            INDEX(QPQ QP_QUALIFIERS_N6)
26209        l_prod_qual_cur_pl */
26210        qpl.list_header_id,
26211        qpl.list_line_id,
26212        qpl.list_line_type_code,
26213        qplatpr.line_index,
26214        qplatpr.applied_flag,
26215        qplatpr.attribute_level               product_attribute_level,
26216        qplatpr.attribute_type                product_attribute_type,
26217        qplatpr.context                       product_attribute_context,
26218        qplatpr.attribute                     product_attribute,
26219        qplatpr.value_from                    product_attr_value,
26220        qpprod.product_uom_code               product_uom_code,
26221        qpprod.excluder_flag,
26222        qplatq.context                        qualifier_attribute_context,
26223        qplatq.attribute                      qualifier_attribute,
26224        qplatq.value_from                     qualifier_attribute_value,
26225        qpq.qualifier_grouping_no             qualifier_grouping_no,
26226        qpq.qualifier_precedence              qualifier_precedence,
26227        qpq.qualifier_datatype,
26228        qpq.qualifier_attr_value              setup_value_from,
26229        qpq.qualifier_attr_value_to           setup_value_to,
26230        qpl.automatic_flag,
26231        qpl.modifier_level_code,
26232        qpl.primary_uom_flag,
26233        qpl.arithmetic_operator               operand_calculation_code,
26234        qpl.operand                           operand_value,
26235        qpl.pricing_group_sequence,
26236        qph.list_type_code                    created_from_list_type,
26237        qph.rounding_factor,
26238        qpl.pricing_phase_id,
26239        qpl.price_break_type_code,
26240        qpl.incompatibility_grp_code,
26241        qpl.price_by_formula_id,
26242        qpl.product_precedence,
26243        qpl.list_line_no,
26244        'HQ'                                  qualifier_type,
26245        qcdt.currency_detail_id,
26246        qcdt.currency_header_id,
26247        qcdt.selling_rounding_factor,
26248        qplines.currency_code                 order_currency,
26249        qplines.pricing_effective_date        pricing_effective_date,
26250        qph.currency_code                     base_currency_code
26251       ,QPL.BREAK_UOM_CODE /* Proration */
26252       ,QPL.BREAK_UOM_CONTEXT /* Proration */
26253       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
26254 FROM   --[julin/5007789]
26255        (SELECT /*+ dynamic_sampling(1) */ *
26256         FROM qp_npreq_lines_tmp
26257         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
26258         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
26259        qp_npreq_line_attrs_tmp qplatq,
26260        qp_qualifiers qpq,
26261        qp_list_headers_b qph,
26262        qp_price_req_sources_v qprs,
26263        qp_npreq_line_attrs_tmp qplatpr,
26264        qp_pricing_attributes qpprod,
26265        qp_list_lines qpl,
26266        qp_currency_details qcdt
26267 WHERE  qph.list_header_id = qpl.list_header_id
26268 --added for moac -- commented references to security profile
26269 --security will be built into qp_list_headers_b
26270 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26271 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26272 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26273 -- 3594459, context and attribute OR'd together
26274 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
26275        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
26276 AND    qpq.list_header_id = qph.list_header_id
26277 AND   (qplines.price_flag = G_YES OR
26278        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
26279 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
26280 AND   qpq.list_line_id = -1
26281 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
26282 AND   qpl.list_line_id   = qpprod.list_line_id
26283 --AND   qph.currency_code = qplines.currency_code
26284 AND   qph.currency_header_id = qcdt.currency_header_id
26285 AND   qplines.currency_code = qcdt.to_currency_code
26286 AND   nvl(qplines.pricing_effective_date,trunc(sysdate)) between
26287        nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date) and
26288        nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
26289 AND (
26290         (qcdt.curr_attribute_context is null
26291          and not exists
26292              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
26293 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
26294                where qcdt1.curr_attribute_context IS NOT NULL
26295 		 and qcdt1.curr_attribute_context = pa_tmp.context
26296                  and qcdt1.curr_attribute = pa_tmp.attribute
26297                  and qcdt1.curr_attribute_value = pa_tmp.value_from
26298                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
26299                  and qcdt1.to_currency_code = qcdt.to_currency_code
26300                  and qcdt1.currency_header_id = qcdt.currency_header_id
26301                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
26302                  and pa_tmp.line_index = qplines.line_index
26303                  and qplines.pricing_effective_date between
26304                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
26305                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
26306         OR
26307         (qcdt.curr_attribute_context is not null
26308          and qcdt.precedence =
26309              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
26310 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
26311                where qcdt2.curr_attribute_context IS NOT NULL
26312 		 and qcdt2.curr_attribute_context = pa_tmp1.context
26313                  and qcdt2.curr_attribute = pa_tmp1.attribute
26314                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
26315                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
26316                  and qcdt2.to_currency_code = qcdt.to_currency_code
26317                  and qcdt2.currency_header_id = qcdt.currency_header_id
26318                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
26319                  and pa_tmp1.line_index = qplines.line_index
26320                  and qplines.pricing_effective_date between
26321                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
26322                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
26323              )))
26324 AND   qpl.modifier_level_code = qplines.line_type_code
26325 AND   qph.active_flag = G_YES
26326 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26327        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26328        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26329 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26330        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26331        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26332 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26333        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26334        nvl(qpq.end_date_active,qplines.pricing_effective_date)
26335 AND   qpq.qualifier_context    = qplatq.context
26336 AND   qpq.qualifier_attribute  = qplatq.attribute
26337 AND   qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
26338 AND   qpq.active_flag = G_YES
26339 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
26340         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
26341        or
26342        (qpq.qualifier_datatype = G_NUMERIC
26343         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
26344             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
26345 AND   qpprod.pricing_phase_id = p_pricing_phase_id
26346 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_HDR_QUAL_IND
26347 AND   qpprod.product_attribute_context = qplatpr.context
26348 AND   qpprod.product_attribute = qplatpr.attribute
26349 AND   qpprod.product_attr_value = qplatpr.value_from
26350 AND   qpprod.excluder_flag = G_NO
26351 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26352 AND   qplatq.line_index = qplines.line_index
26353 AND   qplatpr.line_index = qplines.line_index --[julin/5007789]
26354 AND   qplatpr.line_index = qplatq.line_index
26355 AND   qph.source_system_code = qprs.source_system_code
26356 AND   qplines.request_type_code   = qprs.request_type_code
26357 AND   qplatq.attribute_type = 'QUALIFIER'
26358 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
26359 AND   qplatpr.attribute_type='PRODUCT'
26360 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26361 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26362 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26363   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26364 ORDER BY 4,2;
26365 
26366 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
26367 --[julin/4708044] added index(qplapr QP_PREQ_LINE_ATTRS_TMP_N1), use_nl(qprs)
26368 CURSOR l_prod_qual_pric_cur(p_pricing_phase_id NUMBER) IS
26369 --Product+Qualifiers+Pricing
26370 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
26371            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
26372            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
26373            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26374            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
26375            INDEX(QPQ QP_QUALIFIERS_N4)
26376            l_prod_qual_pric_cur_pl */
26377        qpl.list_header_id,
26378        qpl.list_line_id,
26379        qpl.list_line_type_code,
26380        qplatpr.line_index,
26381        qplatpr.applied_flag,
26382        qplatpr.attribute_level               product_attribute_level,
26383        qplatpr.attribute_type                product_attribute_type,
26384        qplatpr.context                       product_attribute_context,
26385        qplatpr.attribute                     product_attribute,
26386        qplatpr.value_from                    product_attr_value,
26387        qpprod.product_uom_code               product_uom_code,
26388        qpprod.excluder_flag,
26389        qplatq.context                        qualifier_attribute_context,
26390        qplatq.attribute                      qualifier_attribute,
26391        qplatq.value_from                     qualifier_attribute_value,
26392        qpq.qualifier_grouping_no             qualifier_grouping_no,
26393        qpq.qualifier_precedence              qualifier_precedence,
26394        qpq.qualifier_datatype,
26395        qpq.qualifier_attr_value              setup_value_from,
26396        qpq.qualifier_attr_value_to           setup_value_to,
26397        qpl.automatic_flag,
26398        qpl.modifier_level_code,
26399        qpl.primary_uom_flag,
26400        qpl.arithmetic_operator               operand_calculation_code,
26401        qpl.operand                           operand_value,
26402        qpl.pricing_group_sequence,
26403        qph.list_type_code                    created_from_list_type,
26404        qph.rounding_factor,
26405        qpl.pricing_phase_id,
26406        qpl.price_break_type_code,
26407        qpl.incompatibility_grp_code,
26408        qpl.price_by_formula_id,
26409        qpl.product_precedence,
26410        qpl.list_line_no,
26411        'HQ' QUALIFIER_TYPE,
26412        qplatpc.attribute_level               pricing_attribute_level,
26413        qplatpc.attribute_type                pricing_attribute_type,
26414        qplatpc.context                       pricing_attribute_context,
26415        qplatpc.attribute                     pricing_attribute,
26416        qplatpc.value_from                    pricing_attr_value,
26417        qpprod.pricing_attr_value_from        pricing_setup_value_from,
26418        qpprod.pricing_attr_value_to          pricing_setup_value_to,
26419        qpprod.comparison_operator_code       pricing_comparison_operator,
26420        qpprod.pricing_attribute_datatype     pricing_datatype
26421       ,QPL.BREAK_UOM_CODE /* Proration */
26422       ,QPL.BREAK_UOM_CONTEXT /* Proration */
26423       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
26424 FROM   --[julin/5007789]
26425        (SELECT /*+ dynamic_sampling(1) */ *
26426         FROM qp_npreq_lines_tmp
26427         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
26428         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
26429        qp_npreq_line_attrs_tmp qplatq,
26430        qp_qualifiers qpq ,
26431        qp_list_headers_b qph,
26432        qp_price_req_sources_v qprs,
26433        qp_npreq_line_attrs_tmp qplatpr,
26434        qp_pricing_attributes qpprod ,
26435        qp_npreq_line_attrs_tmp qplatpc,
26436        qp_list_lines qpl
26437 WHERE  qph.list_header_id = qpq.list_header_id
26438 -- 3594459, context and attribute OR'd together
26439 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
26440        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
26441 AND   (qplines.price_flag = G_YES OR
26442        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
26443 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
26444 AND   qph.list_header_id = qpl.list_header_id
26445 --added for moac -- commented references to security profile
26446 --security will be built into qp_list_headers_b
26447 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26448 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26449 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26450 AND   qpq.list_line_id = -1
26451 AND   qpl.list_line_id   = qpprod.list_line_id
26452 AND   qph.currency_code = qplines.currency_code
26453 AND   qpl.modifier_level_code = qplines.line_type_code
26454 AND   qph.active_flag = G_YES
26455 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26456        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26457        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26458 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26459        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26460        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26461 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26462        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26463        nvl(qpq.end_date_active,qplines.pricing_effective_date)
26464 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
26465 AND   qpq.qualifier_context    = qplatq.context
26466 AND   qpq.qualifier_attribute  = qplatq.attribute
26467 AND   qpq.comparison_operator_code = '=' --[julin/5007789]
26468 AND   qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
26469 AND   qpq.active_flag = G_YES
26470 AND   qpprod.pricing_phase_id = p_pricing_phase_id
26471 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
26472 AND   qpprod.product_attribute_context = qplatpr.context
26473 AND   qpprod.product_attribute = qplatpr.attribute
26474 AND   qpprod.product_attr_value = qplatpr.value_from
26475 AND   qpprod.excluder_flag = G_NO
26476 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26477 AND   qpprod.pricing_attribute_context = qplatpc.context
26478 AND   qpprod.pricing_attribute = qplatpc.attribute
26479 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
26480         or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
26481 AND   qplatq.line_index = qplatpc.line_index
26482 AND   qplatq.line_index = qplines.line_index
26483 AND   qplatpc.line_index = qplatpr.line_index
26484 AND   qph.source_system_code = qprs.source_system_code
26485 AND   qplines.request_type_code   = qprs.request_type_code
26486 AND   qplatpr.line_index = qplines.line_index --[julin/4708044]
26487 AND   qplatpr.attribute_type='PRODUCT'
26488 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26489 AND   qplatpc.attribute_type = 'PRICING'
26490 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
26491 AND   qplatq.attribute_type = 'QUALIFIER'
26492 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
26493 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
26494 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26495 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26496   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26497 UNION ALL
26498 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
26499            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
26500            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
26501            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26502            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
26503            INDEX(QPQ QP_QUALIFIERS_N5)
26504            l_prod_qual_pric_cur_pl */
26505        qpl.list_header_id,
26506        qpl.list_line_id,
26507        qpl.list_line_type_code,
26508        qplatpr.line_index,
26509        qplatpr.applied_flag,
26510        qplatpr.attribute_level               product_attribute_level,
26511        qplatpr.attribute_type                product_attribute_type,
26512        qplatpr.context                       product_attribute_context,
26513        qplatpr.attribute                     product_attribute,
26514        qplatpr.value_from                    product_attr_value,
26515        qpprod.product_uom_code               product_uom_code,
26516        qpprod.excluder_flag,
26517        qplatq.context                        qualifier_attribute_context,
26518        qplatq.attribute                      qualifier_attribute,
26519        qplatq.value_from                     qualifier_attribute_value,
26520        qpq.qualifier_grouping_no             qualifier_grouping_no,
26521        qpq.qualifier_precedence              qualifier_precedence,
26522        qpq.qualifier_datatype,
26523        qpq.qualifier_attr_value              setup_value_from,
26524        qpq.qualifier_attr_value_to           setup_value_to,
26525        qpl.automatic_flag,
26526        qpl.modifier_level_code,
26527        qpl.primary_uom_flag,
26528        qpl.arithmetic_operator               operand_calculation_code,
26529        qpl.operand                           operand_value,
26530        qpl.pricing_group_sequence,
26531        qph.list_type_code                    created_from_list_type,
26532        qph.rounding_factor,
26533        qpl.pricing_phase_id,
26534        qpl.price_break_type_code,
26535        qpl.incompatibility_grp_code,
26536        qpl.price_by_formula_id,
26537        qpl.product_precedence,
26538        qpl.list_line_no,
26539        'HQ' QUALIFIER_TYPE,
26540        qplatpc.attribute_level               pricing_attribute_level,
26541        qplatpc.attribute_type                pricing_attribute_type,
26542        qplatpc.context                       pricing_attribute_context,
26543        qplatpc.attribute                     pricing_attribute,
26544        qplatpc.value_from                    pricing_attr_value,
26545        qpprod.pricing_attr_value_from        pricing_setup_value_from,
26546        qpprod.pricing_attr_value_to          pricing_setup_value_to,
26547        qpprod.comparison_operator_code       pricing_comparison_operator,
26548        qpprod.pricing_attribute_datatype     pricing_datatype
26549       ,QPL.BREAK_UOM_CODE /* Proration */
26550       ,QPL.BREAK_UOM_CONTEXT /* Proration */
26551       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
26552 FROM   --[julin/5007789]
26553        (SELECT /*+ dynamic_sampling(1) */ *
26554         FROM qp_npreq_lines_tmp
26555         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
26556         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
26557        qp_npreq_line_attrs_tmp qplatq,
26558        qp_qualifiers qpq ,
26559        qp_list_headers_b qph,
26560        qp_price_req_sources_v qprs,
26561        qp_npreq_line_attrs_tmp qplatpr,
26562        qp_pricing_attributes qpprod ,
26563        qp_npreq_line_attrs_tmp qplatpc,
26564        qp_list_lines qpl
26565 WHERE  qph.list_header_id = qpq.list_header_id
26566 -- 3594459, context and attribute OR'd together
26567 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
26568        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
26569 AND   (qplines.price_flag = G_YES OR
26570        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
26571 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
26572 AND   qph.list_header_id = qpl.list_header_id
26573 --added for moac -- commented references to security profile
26574 --security will be built into qp_list_headers_b
26575 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26576 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26577 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26578 AND   qpq.list_line_id = -1
26579 AND   qpl.list_line_id   = qpprod.list_line_id
26580 AND   qph.currency_code = qplines.currency_code
26581 AND   qpl.modifier_level_code = qplines.line_type_code
26582 AND   qph.active_flag = G_YES
26583 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26584        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26585        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26586 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26587        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26588        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26589 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26590        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26591        nvl(qpq.end_date_active,qplines.pricing_effective_date)
26592 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
26593 AND   qpq.qualifier_context    = qplatq.context
26594 AND   qpq.qualifier_attribute  = qplatq.attribute
26595 AND   qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
26596 AND   qpq.active_flag = G_YES
26597 AND   qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
26598 AND   qpprod.pricing_phase_id = p_pricing_phase_id
26599 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
26600 AND   qpprod.product_attribute_context = qplatpr.context
26601 AND   qpprod.product_attribute = qplatpr.attribute
26602 AND   qpprod.product_attr_value = qplatpr.value_from
26603 AND   qpprod.excluder_flag = G_NO
26604 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26605 AND   qpprod.pricing_attribute_context = qplatpc.context
26606 AND   qpprod.pricing_attribute = qplatpc.attribute
26607 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
26608         or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
26609 AND   qplatq.line_index = qplatpc.line_index
26610 AND   qplatq.line_index = qplines.line_index
26611 AND   qplatpc.line_index = qplatpr.line_index
26612 AND   qph.source_system_code = qprs.source_system_code
26613 AND   qplines.request_type_code   = qprs.request_type_code
26614 AND   qplatpr.line_index = qplines.line_index --[julin/4708044]
26615 AND   qplatpr.attribute_type='PRODUCT'
26616 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26617 AND   qplatpc.attribute_type = 'PRICING'
26618 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
26619 AND   qplatq.attribute_type = 'QUALIFIER'
26620 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
26621 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
26622 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26623 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26624   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26625 UNION ALL
26626 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
26627            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
26628            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
26629            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26630            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
26631            INDEX(QPQ QP_QUALIFIERS_N6)
26632            l_prod_qual_pric_cur_pl */
26633        qpl.list_header_id,
26634        qpl.list_line_id,
26635        qpl.list_line_type_code,
26636        qplatpr.line_index,
26637        qplatpr.applied_flag,
26638        qplatpr.attribute_level               product_attribute_level,
26639        qplatpr.attribute_type                product_attribute_type,
26640        qplatpr.context                       product_attribute_context,
26641        qplatpr.attribute                     product_attribute,
26642        qplatpr.value_from                    product_attr_value,
26643        qpprod.product_uom_code               product_uom_code,
26644        qpprod.excluder_flag,
26645        qplatq.context                        qualifier_attribute_context,
26646        qplatq.attribute                      qualifier_attribute,
26647        qplatq.value_from                     qualifier_attribute_value,
26648        qpq.qualifier_grouping_no             qualifier_grouping_no,
26649        qpq.qualifier_precedence              qualifier_precedence,
26650        qpq.qualifier_datatype,
26651        qpq.qualifier_attr_value              setup_value_from,
26652        qpq.qualifier_attr_value_to           setup_value_to,
26653        qpl.automatic_flag,
26654        qpl.modifier_level_code,
26655        qpl.primary_uom_flag,
26656        qpl.arithmetic_operator               operand_calculation_code,
26657        qpl.operand                           operand_value,
26658        qpl.pricing_group_sequence,
26659        qph.list_type_code                    created_from_list_type,
26660        qph.rounding_factor,
26661        qpl.pricing_phase_id,
26662        qpl.price_break_type_code,
26663        qpl.incompatibility_grp_code,
26664        qpl.price_by_formula_id,
26665        qpl.product_precedence,
26666        qpl.list_line_no,
26667        'HQ' QUALIFIER_TYPE,
26668        qplatpc.attribute_level               pricing_attribute_level,
26669        qplatpc.attribute_type                pricing_attribute_type,
26670        qplatpc.context                       pricing_attribute_context,
26671        qplatpc.attribute                     pricing_attribute,
26672        qplatpc.value_from                    pricing_attr_value,
26673        qpprod.pricing_attr_value_from        pricing_setup_value_from,
26674        qpprod.pricing_attr_value_to          pricing_setup_value_to,
26675        qpprod.comparison_operator_code       pricing_comparison_operator,
26676        qpprod.pricing_attribute_datatype     pricing_datatype
26677       ,QPL.BREAK_UOM_CODE /* Proration */
26678       ,QPL.BREAK_UOM_CONTEXT /* Proration */
26679       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
26680 FROM   --[julin/5007789]
26681        (SELECT /*+ dynamic_sampling(1) */ *
26682         FROM qp_npreq_lines_tmp
26683         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
26684         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
26685        qp_npreq_line_attrs_tmp qplatq,
26686        qp_qualifiers qpq ,
26687        qp_list_headers_b qph,
26688        qp_price_req_sources_v qprs,
26689        qp_npreq_line_attrs_tmp qplatpr,
26690        qp_pricing_attributes qpprod ,
26691        qp_npreq_line_attrs_tmp qplatpc,
26692        qp_list_lines qpl
26693 WHERE  qph.list_header_id = qpq.list_header_id
26694 -- 3594459, context and attribute OR'd together
26695 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
26696        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
26697 AND   (qplines.price_flag = G_YES OR
26698        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
26699 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
26700 AND   qph.list_header_id = qpl.list_header_id
26701 --added for moac -- commented references to security profile
26702 --security will be built into qp_list_headers_b
26703 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26704 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26705 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26706 AND   qpq.list_line_id = -1
26707 AND   qpl.list_line_id   = qpprod.list_line_id
26708 AND   qph.currency_code = qplines.currency_code
26709 AND   qpl.modifier_level_code = qplines.line_type_code
26710 AND   qph.active_flag = G_YES
26711 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26712        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26713        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26714 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26715        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26716        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26717 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26718        nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26719        nvl(qpq.end_date_active,qplines.pricing_effective_date)
26720 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
26721 AND   qpq.qualifier_context    = qplatq.context
26722 AND   qpq.qualifier_attribute  = qplatq.attribute
26723 AND   qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
26724 AND   qpq.active_flag = G_YES
26725 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
26726         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
26727        or
26728        (qpq.qualifier_datatype = G_NUMERIC
26729         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
26730             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
26731 AND   qpprod.pricing_phase_id = p_pricing_phase_id
26732 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
26733 AND   qpprod.product_attribute_context = qplatpr.context
26734 AND   qpprod.product_attribute = qplatpr.attribute
26735 AND   qpprod.product_attr_value = qplatpr.value_from
26736 AND   qpprod.excluder_flag = G_NO
26737 AND   qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26738 AND   qpprod.pricing_attribute_context = qplatpc.context
26739 AND   qpprod.pricing_attribute = qplatpc.attribute
26740 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
26741         or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
26742 AND   qplatq.line_index = qplatpc.line_index
26743 AND   qplatq.line_index = qplines.line_index
26744 AND   qplatpc.line_index = qplatpr.line_index
26745 AND   qph.source_system_code = qprs.source_system_code
26746 AND   qplines.request_type_code   = qprs.request_type_code
26747 AND   qplatpr.line_index = qplines.line_index --[julin/4708044]
26748 AND   qplatpr.attribute_type='PRODUCT'
26749 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26750 AND   qplatpc.attribute_type = 'PRICING'
26751 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
26752 AND   qplatq.attribute_type = 'QUALIFIER'
26753 AND   qplatq.pricing_status_code = G_STATUS_UNCHANGED
26754 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
26755 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26756 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26757   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26758 ORDER BY 4,2;
26759 
26760 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
26761 --[julin/4708044] added index(qplapr QP_PREQ_LINE_ATTRS_TMP_N1), use_nl(qprs)
26762 --[julin/5007789]
26763 -- 1. Performing line filter first.
26764 -- 2. Performing qualifier filter before product filter
26765 -- 3. Split into unions ('=', 'BETWEEN', 'NOT =') for better use of indexes
26766 CURSOR l_prod_qual_pric_cur_currency(p_pricing_phase_id NUMBER) IS
26767 --Product+Qualifiers+Pricing
26768 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
26769            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
26770            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
26771            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26772            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
26773            INDEX(QPQ QP_QUALIFIERS_N4)
26774            l_prod_qual_pric_cur_pl */
26775        qpl.list_header_id,
26776        qpl.list_line_id,
26777        qpl.list_line_type_code,
26778        qplatpr.line_index,
26779        qplatpr.applied_flag,
26780        qplatpr.attribute_level               product_attribute_level,
26781        qplatpr.attribute_type                product_attribute_type,
26782        qplatpr.context                       product_attribute_context,
26783        qplatpr.attribute                     product_attribute,
26784        qplatpr.value_from                    product_attr_value,
26785        qpprod.product_uom_code               product_uom_code,
26786        qpprod.excluder_flag,
26787        qplatq.context                        qualifier_attribute_context,
26788        qplatq.attribute                      qualifier_attribute,
26789        qplatq.value_from                     qualifier_attribute_value,
26790        qpq.qualifier_grouping_no             qualifier_grouping_no,
26791        qpq.qualifier_precedence              qualifier_precedence,
26792        qpq.qualifier_datatype,
26793        qpq.qualifier_attr_value              setup_value_from,
26794        qpq.qualifier_attr_value_to           setup_value_to,
26795        qpl.automatic_flag,
26796        qpl.modifier_level_code,
26797        qpl.primary_uom_flag,
26798        qpl.arithmetic_operator               operand_calculation_code,
26799        qpl.operand                           operand_value,
26800        qpl.pricing_group_sequence,
26801        qph.list_type_code                    created_from_list_type,
26802        qph.rounding_factor,
26803        qpl.pricing_phase_id,
26804        qpl.price_break_type_code,
26805        qpl.incompatibility_grp_code,
26806        qpl.price_by_formula_id,
26807        qpl.product_precedence,
26808        qpl.list_line_no,
26809        'HQ' QUALIFIER_TYPE,
26810        qplatpc.attribute_level               pricing_attribute_level,
26811        qplatpc.attribute_type                pricing_attribute_type,
26812        qplatpc.context                       pricing_attribute_context,
26813        qplatpc.attribute                     pricing_attribute,
26814        qplatpc.value_from                    pricing_attr_value,
26815        qpprod.pricing_attr_value_from        pricing_setup_value_from,
26816        qpprod.pricing_attr_value_to          pricing_setup_value_to,
26817        qpprod.comparison_operator_code       pricing_comparison_operator,
26818        qpprod.pricing_attribute_datatype     pricing_datatype,
26819        qcdt.currency_detail_id,
26820        qcdt.currency_header_id,
26821        qcdt.selling_rounding_factor,
26822        qplines.currency_code                 order_currency,
26823        qplines.pricing_effective_date        pricing_effective_date,
26824        qph.currency_code                     base_currency_code
26825       ,QPL.BREAK_UOM_CODE /* Proration */
26826       ,QPL.BREAK_UOM_CONTEXT /* Proration */
26827       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
26828 FROM   --[julin/5007789]
26829        (SELECT /*+ dynamic_sampling(1) */ *
26830         FROM qp_npreq_lines_tmp
26831         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
26832         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
26833        qp_npreq_line_attrs_tmp qplatq,
26834        qp_qualifiers qpq ,
26835        qp_list_headers_b qph,
26836        qp_price_req_sources_v qprs,
26837        qp_npreq_line_attrs_tmp qplatpr,
26838        qp_pricing_attributes qpprod ,
26839        qp_npreq_line_attrs_tmp qplatpc,
26840        qp_list_lines qpl,
26841        qp_currency_details qcdt
26842 WHERE  qph.list_header_id = qpq.list_header_id
26843 -- 3594459, context and attribute OR'd together
26844 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
26845        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
26846 --added for moac -- commented references to security profile
26847 --security will be built into qp_list_headers_b
26848 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
26849 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
26850 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
26851 AND   (qplines.price_flag = G_YES OR
26852        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
26853 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
26854 AND    qph.list_header_id = qpl.list_header_id
26855 AND    qpq.list_line_id = -1
26856 AND    qpl.list_line_id   = qpprod.list_line_id
26857 --AND   qph.currency_code = qplines.currency_code
26858 AND qph.currency_header_id = qcdt.currency_header_id
26859 AND qplines.currency_code = qcdt.to_currency_code
26860 AND qplines.pricing_effective_date between
26861     nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date)
26862     and nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
26863 AND (
26864         (qcdt.curr_attribute_context is null
26865          and not exists
26866              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
26867 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
26868                where qcdt1.curr_attribute_context IS NOT NULL
26869 		 and qcdt1.curr_attribute_context = pa_tmp.context
26870                  and qcdt1.curr_attribute = pa_tmp.attribute
26871                  and qcdt1.curr_attribute_value = pa_tmp.value_from
26872                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
26873                  and qcdt1.to_currency_code = qcdt.to_currency_code
26874                  and qcdt1.currency_header_id = qcdt.currency_header_id
26875                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
26876                  and pa_tmp.line_index = qplines.line_index
26877                  and qplines.pricing_effective_date between
26878                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
26879                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
26880         OR
26881         (qcdt.curr_attribute_context is not null
26882          and qcdt.precedence =
26883              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
26884 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
26885                where qcdt2.curr_attribute_context IS NOT NULL
26886 		 and qcdt2.curr_attribute_context = pa_tmp1.context
26887                  and qcdt2.curr_attribute = pa_tmp1.attribute
26888                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
26889                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
26890                  and qcdt2.to_currency_code = qcdt.to_currency_code
26891                  and qcdt2.currency_header_id = qcdt.currency_header_id
26892                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
26893                  and pa_tmp1.line_index = qplines.line_index
26894                  and qplines.pricing_effective_date between
26895                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
26896                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
26897              )))
26898 AND qpl.modifier_level_code = qplines.line_type_code
26899 AND qph.active_flag = G_YES
26900 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26901        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
26902        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
26903 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26904       nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
26905       nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
26906 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
26907       nvl(qpq.start_date_active, qplines.pricing_effective_date) and
26908       nvl(qpq.end_date_active,qplines.pricing_effective_date)
26909 AND qpl.list_line_type_code in ('PLL','PMR','PBH')
26910 AND qpq.qualifier_context    = qplatq.context
26911 AND qpq.qualifier_attribute  = qplatq.attribute
26912 AND qpq.comparison_operator_code = '=' --[julin/5007789]
26913 AND qplatq.value_from   = qpq.qualifier_attr_value --bug#1761272 Multiple NOT =, [julin/5007789]
26914 AND qpq.active_flag = G_YES
26915 AND qpprod.pricing_phase_id = p_pricing_phase_id
26916 AND qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
26917 AND qpprod.product_attribute_context = qplatpr.context
26918 AND qpprod.product_attribute = qplatpr.attribute
26919 AND qpprod.product_attr_value = qplatpr.value_from
26920 AND qpprod.excluder_flag = G_NO
26921 AND qpprod.list_header_id = qph.list_header_id --[julin/5007789]
26922 AND qpprod.pricing_attribute_context = qplatpc.context
26923 AND qpprod.pricing_attribute = qplatpc.attribute
26924 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
26925       or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
26926 AND qplatq.line_index = qplatpc.line_index
26927 AND qplatq.line_index = qplines.line_index
26928 AND qplatpc.line_index = qplatpr.line_index
26929 AND qph.source_system_code = qprs.source_system_code
26930 AND qplines.request_type_code   = qprs.request_type_code
26931 AND qplatpr.line_index = qplines.line_index --[julin/4708044]
26932 AND qplatpr.attribute_type='PRODUCT'
26933 AND qplatpr.pricing_status_code=G_STATUS_UNCHANGED
26934 AND qplatpc.attribute_type = 'PRICING'
26935 AND qplatpc.pricing_status_code = G_STATUS_UNCHANGED
26936 AND qplatq.attribute_type = 'QUALIFIER'
26937 AND qplatq.pricing_status_code = G_STATUS_UNCHANGED
26938 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
26939 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
26940 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
26941   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
26942 UNION ALL
26943 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
26944            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
26945            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
26946            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
26947            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
26948            INDEX(QPQ QP_QUALIFIERS_N5)
26949            l_prod_qual_pric_cur_pl */
26950        qpl.list_header_id,
26951        qpl.list_line_id,
26952        qpl.list_line_type_code,
26953        qplatpr.line_index,
26954        qplatpr.applied_flag,
26955        qplatpr.attribute_level               product_attribute_level,
26956        qplatpr.attribute_type                product_attribute_type,
26957        qplatpr.context                       product_attribute_context,
26958        qplatpr.attribute                     product_attribute,
26959        qplatpr.value_from                    product_attr_value,
26960        qpprod.product_uom_code               product_uom_code,
26961        qpprod.excluder_flag,
26962        qplatq.context                        qualifier_attribute_context,
26963        qplatq.attribute                      qualifier_attribute,
26964        qplatq.value_from                     qualifier_attribute_value,
26965        qpq.qualifier_grouping_no             qualifier_grouping_no,
26966        qpq.qualifier_precedence              qualifier_precedence,
26967        qpq.qualifier_datatype,
26968        qpq.qualifier_attr_value              setup_value_from,
26969        qpq.qualifier_attr_value_to           setup_value_to,
26970        qpl.automatic_flag,
26971        qpl.modifier_level_code,
26972        qpl.primary_uom_flag,
26973        qpl.arithmetic_operator               operand_calculation_code,
26974        qpl.operand                           operand_value,
26975        qpl.pricing_group_sequence,
26976        qph.list_type_code                    created_from_list_type,
26977        qph.rounding_factor,
26978        qpl.pricing_phase_id,
26979        qpl.price_break_type_code,
26980        qpl.incompatibility_grp_code,
26981        qpl.price_by_formula_id,
26982        qpl.product_precedence,
26983        qpl.list_line_no,
26984        'HQ' QUALIFIER_TYPE,
26985        qplatpc.attribute_level               pricing_attribute_level,
26986        qplatpc.attribute_type                pricing_attribute_type,
26987        qplatpc.context                       pricing_attribute_context,
26988        qplatpc.attribute                     pricing_attribute,
26989        qplatpc.value_from                    pricing_attr_value,
26990        qpprod.pricing_attr_value_from        pricing_setup_value_from,
26991        qpprod.pricing_attr_value_to          pricing_setup_value_to,
26992        qpprod.comparison_operator_code       pricing_comparison_operator,
26993        qpprod.pricing_attribute_datatype     pricing_datatype,
26994        qcdt.currency_detail_id,
26995        qcdt.currency_header_id,
26996        qcdt.selling_rounding_factor,
26997        qplines.currency_code                 order_currency,
26998        qplines.pricing_effective_date        pricing_effective_date,
26999        qph.currency_code                     base_currency_code
27000       ,QPL.BREAK_UOM_CODE /* Proration */
27001       ,QPL.BREAK_UOM_CONTEXT /* Proration */
27002       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
27003 FROM   --[julin/5007789]
27004        (SELECT /*+ dynamic_sampling(1) */ *
27005         FROM qp_npreq_lines_tmp
27006         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
27007         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
27008        qp_npreq_line_attrs_tmp qplatq,
27009        qp_qualifiers qpq ,
27010        qp_list_headers_b qph,
27011        qp_price_req_sources_v qprs,
27012        qp_npreq_line_attrs_tmp qplatpr,
27013        qp_pricing_attributes qpprod ,
27014        qp_npreq_line_attrs_tmp qplatpc,
27015        qp_list_lines qpl,
27016        qp_currency_details qcdt
27017 WHERE  qph.list_header_id = qpq.list_header_id
27018 -- 3594459, context and attribute OR'd together
27019 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
27020        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
27021 --added for moac -- commented references to security profile
27022 --security will be built into qp_list_headers_b
27023 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
27024 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
27025 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
27026 AND   (qplines.price_flag = G_YES OR
27027        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
27028 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
27029 AND    qph.list_header_id = qpl.list_header_id
27030 AND    qpq.list_line_id = -1
27031 AND    qpl.list_line_id   = qpprod.list_line_id
27032 --AND   qph.currency_code = qplines.currency_code
27033 AND qph.currency_header_id = qcdt.currency_header_id
27034 AND qplines.currency_code = qcdt.to_currency_code
27035 AND qplines.pricing_effective_date between
27036     nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date)
27037     and nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
27038 AND (
27039         (qcdt.curr_attribute_context is null
27040          and not exists
27041              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
27042 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
27043                where qcdt1.curr_attribute_context IS NOT NULL
27044 		 and qcdt1.curr_attribute_context = pa_tmp.context
27045                  and qcdt1.curr_attribute = pa_tmp.attribute
27046                  and qcdt1.curr_attribute_value = pa_tmp.value_from
27047                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
27048                  and qcdt1.to_currency_code = qcdt.to_currency_code
27049                  and qcdt1.currency_header_id = qcdt.currency_header_id
27050                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
27051                  and pa_tmp.line_index = qplines.line_index
27052                  and qplines.pricing_effective_date between
27053                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
27054                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
27055         OR
27056         (qcdt.curr_attribute_context is not null
27057          and qcdt.precedence =
27058              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
27059 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
27060                where qcdt2.curr_attribute_context IS NOT NULL
27061 		 and qcdt2.curr_attribute_context = pa_tmp1.context
27062                  and qcdt2.curr_attribute = pa_tmp1.attribute
27063                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
27064                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
27065                  and qcdt2.to_currency_code = qcdt.to_currency_code
27066                  and qcdt2.currency_header_id = qcdt.currency_header_id
27067                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
27068                  and pa_tmp1.line_index = qplines.line_index
27069                  and qplines.pricing_effective_date between
27070                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
27071                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
27072              )))
27073 AND qpl.modifier_level_code = qplines.line_type_code
27074 AND qph.active_flag = G_YES
27075 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27076        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
27077        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
27078 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27079       nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
27080       nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
27081 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27082       nvl(qpq.start_date_active, qplines.pricing_effective_date) and
27083       nvl(qpq.end_date_active,qplines.pricing_effective_date)
27084 AND qpl.list_line_type_code in ('PLL','PMR','PBH')
27085 AND qpq.qualifier_context    = qplatq.context
27086 AND qpq.qualifier_attribute  = qplatq.attribute
27087 AND qpq.comparison_operator_code = 'NOT =' --[julin/5007789]
27088 AND qpq.active_flag = G_YES
27089 AND qplatq.value_from  <> qpq.qualifier_attr_value --[julin/5007789]
27090 AND qpprod.pricing_phase_id = p_pricing_phase_id
27091 AND qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
27092 AND qpprod.product_attribute_context = qplatpr.context
27093 AND qpprod.product_attribute = qplatpr.attribute
27094 AND qpprod.product_attr_value = qplatpr.value_from
27095 AND qpprod.excluder_flag = G_NO
27096 AND qpprod.list_header_id = qph.list_header_id --[julin/5007789]
27097 AND qpprod.pricing_attribute_context = qplatpc.context
27098 AND qpprod.pricing_attribute = qplatpc.attribute
27099 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
27100       or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
27101 AND qplatq.line_index = qplatpc.line_index
27102 AND qplatq.line_index = qplines.line_index
27103 AND qplatpc.line_index = qplatpr.line_index
27104 AND qph.source_system_code = qprs.source_system_code
27105 AND qplines.request_type_code   = qprs.request_type_code
27106 AND qplatpr.line_index = qplines.line_index --[julin/4708044]
27107 AND qplatpr.attribute_type='PRODUCT'
27108 AND qplatpr.pricing_status_code=G_STATUS_UNCHANGED
27109 AND qplatpc.attribute_type = 'PRICING'
27110 AND qplatpc.pricing_status_code = G_STATUS_UNCHANGED
27111 AND qplatq.attribute_type = 'QUALIFIER'
27112 AND qplatq.pricing_status_code = G_STATUS_UNCHANGED
27113 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
27114 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
27115 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
27116   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
27117 UNION ALL
27118 SELECT /*+ ORDERED USE_NL(QPLATQ QPQ QPH QPRS QPLATPR QPPROD QPLATPC QPL)
27119            index(qplatpc QP_PREQ_LINE_ATTRS_TMP_N2)
27120            index(qplatq QP_PREQ_LINE_ATTRS_TMP_N1)
27121            INDEX(QPLAPR QP_PREQ_LINE_ATTRS_TMP_N1)
27122            INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5)
27123            INDEX(QPQ QP_QUALIFIERS_N6)
27124            l_prod_qual_pric_cur_pl */
27125        qpl.list_header_id,
27126        qpl.list_line_id,
27127        qpl.list_line_type_code,
27128        qplatpr.line_index,
27129        qplatpr.applied_flag,
27130        qplatpr.attribute_level               product_attribute_level,
27131        qplatpr.attribute_type                product_attribute_type,
27132        qplatpr.context                       product_attribute_context,
27133        qplatpr.attribute                     product_attribute,
27134        qplatpr.value_from                    product_attr_value,
27135        qpprod.product_uom_code               product_uom_code,
27136        qpprod.excluder_flag,
27137        qplatq.context                        qualifier_attribute_context,
27138        qplatq.attribute                      qualifier_attribute,
27139        qplatq.value_from                     qualifier_attribute_value,
27140        qpq.qualifier_grouping_no             qualifier_grouping_no,
27141        qpq.qualifier_precedence              qualifier_precedence,
27142        qpq.qualifier_datatype,
27143        qpq.qualifier_attr_value              setup_value_from,
27144        qpq.qualifier_attr_value_to           setup_value_to,
27145        qpl.automatic_flag,
27146        qpl.modifier_level_code,
27147        qpl.primary_uom_flag,
27148        qpl.arithmetic_operator               operand_calculation_code,
27149        qpl.operand                           operand_value,
27150        qpl.pricing_group_sequence,
27151        qph.list_type_code                    created_from_list_type,
27152        qph.rounding_factor,
27153        qpl.pricing_phase_id,
27154        qpl.price_break_type_code,
27155        qpl.incompatibility_grp_code,
27156        qpl.price_by_formula_id,
27157        qpl.product_precedence,
27158        qpl.list_line_no,
27159        'HQ' QUALIFIER_TYPE,
27160        qplatpc.attribute_level               pricing_attribute_level,
27161        qplatpc.attribute_type                pricing_attribute_type,
27162        qplatpc.context                       pricing_attribute_context,
27163        qplatpc.attribute                     pricing_attribute,
27164        qplatpc.value_from                    pricing_attr_value,
27165        qpprod.pricing_attr_value_from        pricing_setup_value_from,
27166        qpprod.pricing_attr_value_to          pricing_setup_value_to,
27167        qpprod.comparison_operator_code       pricing_comparison_operator,
27168        qpprod.pricing_attribute_datatype     pricing_datatype,
27169        qcdt.currency_detail_id,
27170        qcdt.currency_header_id,
27171        qcdt.selling_rounding_factor,
27172        qplines.currency_code                 order_currency,
27173        qplines.pricing_effective_date        pricing_effective_date,
27174        qph.currency_code                     base_currency_code
27175       ,QPL.BREAK_UOM_CODE /* Proration */
27176       ,QPL.BREAK_UOM_CONTEXT /* Proration */
27177       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
27178 FROM   --[julin/5007789]
27179        (SELECT /*+ dynamic_sampling(1) */ *
27180         FROM qp_npreq_lines_tmp
27181         WHERE processed_code IN (G_STS_LHS_NOT_FOUND, G_NO_LIST_PASSED)
27182         AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
27183        qp_npreq_line_attrs_tmp qplatq,
27184        qp_qualifiers qpq ,
27185        qp_list_headers_b qph,
27186        qp_price_req_sources_v qprs,
27187        qp_npreq_line_attrs_tmp qplatpr,
27188        qp_pricing_attributes qpprod ,
27189        qp_npreq_line_attrs_tmp qplatpc,
27190        qp_list_lines qpl,
27191        qp_currency_details qcdt
27192 WHERE  qph.list_header_id = qpq.list_header_id
27193 -- 3594459, context and attribute OR'd together
27194 AND   (qpq.qualifier_context <> G_LIST_HEADER_CONTEXT --bug 2799670
27195        OR qpq.qualifier_attribute <> G_PRICELIST_ATTRIBUTE) --bug 2799670
27196 --added for moac -- commented references to security profile
27197 --security will be built into qp_list_headers_b
27198 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
27199 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
27200 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
27201 AND   (qplines.price_flag = G_YES OR
27202        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
27203 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
27204 AND    qph.list_header_id = qpl.list_header_id
27205 AND    qpq.list_line_id = -1
27206 AND    qpl.list_line_id   = qpprod.list_line_id
27207 --AND   qph.currency_code = qplines.currency_code
27208 AND qph.currency_header_id = qcdt.currency_header_id
27209 AND qplines.currency_code = qcdt.to_currency_code
27210 AND qplines.pricing_effective_date between
27211     nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date)
27212     and nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
27213 AND (
27214         (qcdt.curr_attribute_context is null
27215          and not exists
27216              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
27217 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
27218                where qcdt1.curr_attribute_context IS NOT NULL
27219 		 and qcdt1.curr_attribute_context = pa_tmp.context
27220                  and qcdt1.curr_attribute = pa_tmp.attribute
27221                  and qcdt1.curr_attribute_value = pa_tmp.value_from
27222                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
27223                  and qcdt1.to_currency_code = qcdt.to_currency_code
27224                  and qcdt1.currency_header_id = qcdt.currency_header_id
27225                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
27226                  and pa_tmp.line_index = qplines.line_index
27227                  and qplines.pricing_effective_date between
27228                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
27229                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
27230         OR
27231         (qcdt.curr_attribute_context is not null
27232          and qcdt.precedence =
27233              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
27234 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
27235                where qcdt2.curr_attribute_context IS NOT NULL
27236 		 and qcdt2.curr_attribute_context = pa_tmp1.context
27237                  and qcdt2.curr_attribute = pa_tmp1.attribute
27238                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
27239                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
27240                  and qcdt2.to_currency_code = qcdt.to_currency_code
27241                  and qcdt2.currency_header_id = qcdt.currency_header_id
27242                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
27243                  and pa_tmp1.line_index = qplines.line_index
27244                  and qplines.pricing_effective_date between
27245                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
27246                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
27247              )))
27248 AND qpl.modifier_level_code = qplines.line_type_code
27249 AND qph.active_flag = G_YES
27250 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27251        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
27252        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
27253 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27254       nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
27255       nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
27256 AND nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27257       nvl(qpq.start_date_active, qplines.pricing_effective_date) and
27258       nvl(qpq.end_date_active,qplines.pricing_effective_date)
27259 AND qpl.list_line_type_code in ('PLL','PMR','PBH')
27260 AND qpq.qualifier_context    = qplatq.context
27261 AND qpq.qualifier_attribute  = qplatq.attribute
27262 AND qpq.comparison_operator_code = G_OPERATOR_BETWEEN --[julin/5007789]
27263 AND qpq.active_flag = G_YES
27264 and   ((qpq.qualifier_datatype IN (G_VARCHAR,G_DATE_X,G_DATE_Y) --[julin/5007789]
27265         and qplatq.value_from between qpq.qualifier_attr_value and qpq.qualifier_attr_value_to)
27266        or
27267        (qpq.qualifier_datatype = G_NUMERIC
27268         and qp_number.canonical_to_number(decode(qpq.qualifier_datatype,G_NUMERIC,qplatq.value_from,null))
27269             between qpq.qual_attr_value_from_number and qpq.qual_attr_value_to_number))
27270 AND qpprod.pricing_phase_id = p_pricing_phase_id
27271 AND qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_HDR_QUAL_IND
27272 AND qpprod.product_attribute_context = qplatpr.context
27273 AND qpprod.product_attribute = qplatpr.attribute
27274 AND qpprod.product_attr_value = qplatpr.value_from
27275 AND qpprod.excluder_flag = G_NO
27276 AND qpprod.list_header_id = qph.list_header_id --[julin/5007789]
27277 AND qpprod.pricing_attribute_context = qplatpc.context
27278 AND qpprod.pricing_attribute = qplatpc.attribute
27279 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
27280       or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
27281 AND qplatq.line_index = qplatpc.line_index
27282 AND qplatq.line_index = qplines.line_index
27283 AND qplatpc.line_index = qplatpr.line_index
27284 AND qph.source_system_code = qprs.source_system_code
27285 AND qplines.request_type_code   = qprs.request_type_code
27286 AND qplatpr.line_index = qplines.line_index --[julin/4708044]
27287 AND qplatpr.attribute_type='PRODUCT'
27288 AND qplatpr.pricing_status_code=G_STATUS_UNCHANGED
27289 AND qplatpc.attribute_type = 'PRICING'
27290 AND qplatpc.pricing_status_code = G_STATUS_UNCHANGED
27291 AND qplatq.attribute_type = 'QUALIFIER'
27292 AND qplatq.pricing_status_code = G_STATUS_UNCHANGED
27293 --AND   qplatq.pricing_attr_flag = G_YES --[julin/4708044] wrong table, currently not reliable value, not used in index
27294 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
27295 AND  ((nvl(qplatq.DERIVED_QUALIFIER_FLAG,'N') ='N' )
27296   OR (qplatq.DERIVED_QUALIFIER_FLAG ='Y' AND qpq.QUALIFY_HIER_DESCENDENTS_FLAG ='Y')) -- Added for TCA
27297 ORDER BY 4,2;
27298 
27299 --[julin/5007789] Tuned query as follows:
27300 -- 1. Performing line filter first.
27301 -- 2. Merged qplatpr subquery conditions into main where clause.
27302 CURSOR l_prod_cur (p_pricing_phase_id NUMBER) IS
27303 -- Only Product attributes
27304 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPL QPH QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) l_prod_cur_pl */
27305        qpl.list_header_id,
27306        qpl.list_line_id,
27307        qpl.list_line_type_code,
27308        qplatpr.line_index,
27309        qplatpr.applied_flag,
27310        qplatpr.attribute_level     product_attribute_level,
27311        qplatpr.attribute_type      product_attribute_type,
27312        qplatpr.context             product_attribute_context,
27313        qplatpr.attribute           product_attribute,
27314        qplatpr.value_from          product_attr_value,
27315        qpprod.product_uom_code     product_uom_code,
27316        qpprod.excluder_flag,
27317        qpl.automatic_flag,
27318        qpl.modifier_level_code,
27319        qpl.primary_uom_flag,
27320        qpl.arithmetic_operator     operand_calculation_code,
27321        qpl.operand                 operand_value,
27322        qpl.pricing_group_sequence,
27323        qph.list_type_code          created_from_list_type,
27324        qph.rounding_factor,
27325        qpl.pricing_phase_id,
27326        qpl.price_break_type_code,
27327        qpl.incompatibility_grp_code,
27328        qpl.price_by_formula_id,
27329        qpl.product_precedence,
27330        qpl.list_line_no
27331       ,QPL.BREAK_UOM_CODE /* Proration */
27332       ,QPL.BREAK_UOM_CONTEXT /* Proration */
27333       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
27334 FROM --[julin/5000789]
27335      (SELECT /*+ dynamic_sampling(1) */ *
27336       FROM  qp_npreq_lines_tmp
27337       WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
27338       AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
27339      qp_npreq_line_attrs_tmp qplatpr,
27340      qp_pricing_attributes qpprod ,
27341      qp_list_lines qpl ,
27342      qp_list_headers_b  qph  ,
27343      qp_price_req_sources_v qprs
27344 WHERE
27345      qph.list_header_id = qpprod.list_header_id
27346 --added for moac -- commented references to security profile
27347 --security will be built into qp_list_headers_b
27348 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
27349 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
27350 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
27351 AND  qpl.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
27352 AND  qpl.list_line_type_code in ('PLL','PMR','PBH')
27353 AND  (qplines.price_flag = G_YES OR
27354       (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
27355 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
27356 AND  qph.currency_code = qplines.currency_code
27357 AND  qpl.modifier_level_code = qplines.line_type_code
27358 AND  qph.active_flag = G_YES
27359 AND  qpl.list_line_id = qpprod.list_line_id
27360 AND  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27361        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
27362        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
27363 AND  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27364       nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
27365       nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
27366 AND  qpl.pricing_phase_id = p_pricing_phase_id
27367 AND  qpprod.pricing_phase_id = p_pricing_phase_id
27368 AND  qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
27369 AND  qpprod.product_attribute_context = qplatpr.context
27370 AND  qpprod.product_attribute = qplatpr.attribute
27371 AND  qpprod.product_attr_value = qplatpr.value_from
27372 AND  qpprod.excluder_flag = G_NO
27373 AND  qph.source_system_code = qprs.source_system_code
27374 AND  qplines.request_type_code   = qprs.request_type_code
27375 AND  qplatpr.line_index = qplines.line_index
27376 AND  qplatpr.attribute_type='PRODUCT' --[julin/5007789]
27377 AND  qplatpr.pricing_status_code=G_STATUS_UNCHANGED --[julin/5007789]
27378 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
27379 ORDER BY 4,2;  --order by list_line_id
27380 
27381 --[julin/5007789] Tuned query as follows:
27382 -- 1. Performing line filter first.
27383 CURSOR l_prod_cur_currency (p_pricing_phase_id NUMBER) IS
27384 -- Product Only.
27385 SELECT /*+ ORDERED USE_NL(QPLATPR QPPROD QPL QPH QPRS) index(qplatpr QP_PREQ_LINE_ATTRS_TMP_N1) l_prod_cur_pl */
27386        qpl.list_header_id,
27387        qpl.list_line_id,
27388        qpl.list_line_type_code,
27389        qplatpr.line_index,
27390        qplatpr.applied_flag,
27391        qplatpr.attribute_level               product_attribute_level,
27392        qplatpr.attribute_type                product_attribute_type,
27393        qplatpr.context                       product_attribute_context,
27394        qplatpr.attribute                     product_attribute,
27395        qplatpr.value_from                    product_attr_value,
27396        qpprod.product_uom_code               product_uom_code,
27397        qpprod.excluder_flag,
27398        qpl.automatic_flag,
27399        qpl.modifier_level_code,
27400        qpl.primary_uom_flag,
27401        qpl.arithmetic_operator               operand_calculation_code,
27402        qpl.operand                           operand_value,
27403        qpl.pricing_group_sequence,
27404        qph.list_type_code                    created_from_list_type,
27405        qph.rounding_factor,
27406        qpl.pricing_phase_id,
27407        qpl.price_break_type_code,
27408        qpl.incompatibility_grp_code,
27409        qpl.price_by_formula_id,
27410        qpl.product_precedence,
27411        qpl.list_line_no,
27412        qcdt.currency_detail_id,
27413        qcdt.currency_header_id,
27414        qcdt.selling_rounding_factor,
27415        qplines.currency_code                 order_currency,
27416        qplines.pricing_effective_date        pricing_effective_date,
27417        qph.currency_code                     base_currency_code
27418       ,QPL.BREAK_UOM_CODE /* Proration */
27419       ,QPL.BREAK_UOM_CONTEXT /* Proration */
27420       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
27421 FROM --[julin/5007789]
27422      (SELECT /*+ dynamic_sampling(1) */ *
27423       FROM  qp_npreq_lines_tmp
27424       WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
27425       AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
27426        qp_npreq_line_attrs_tmp qplatpr,
27427        qp_pricing_attributes qpprod,
27428        qp_list_lines qpl,
27429        qp_list_headers_b qph,
27430        qp_price_req_sources_v qprs,
27431        qp_currency_details qcdt
27432 WHERE  qph.list_header_id = qpl.list_header_id
27433 --added for moac -- commented references to security profile
27434 --security will be built into qp_list_headers_b
27435 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
27436 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
27437 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
27438 AND   (qplines.price_flag = G_YES OR
27439        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
27440 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
27441 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
27442 AND   qpl.list_line_id   = qpprod.list_line_id
27443 --AND   qph.currency_code = qplines.currency_code
27444 AND   qph.currency_header_id = qcdt.currency_header_id
27445 AND   qplines.currency_code = qcdt.to_currency_code
27446 AND   qplines.pricing_effective_date between
27447       nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date)
27448       and nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
27449 AND (
27450         (qcdt.curr_attribute_context is null
27451          and not exists
27452              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
27453 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
27454                where qcdt1.curr_attribute_context IS NOT NULL
27455 		 and qcdt1.curr_attribute_context = pa_tmp.context
27456                  and qcdt1.curr_attribute = pa_tmp.attribute
27457                  and qcdt1.curr_attribute_value = pa_tmp.value_from
27458                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
27459                  and qcdt1.to_currency_code = qcdt.to_currency_code
27460                  and qcdt1.currency_header_id = qcdt.currency_header_id
27461                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
27462                  and pa_tmp.line_index = qplines.line_index
27463                  and qplines.pricing_effective_date between
27464                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
27465                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
27466         OR
27467         (qcdt.curr_attribute_context is not null
27468          and qcdt.precedence =
27469              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
27470 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
27471                where qcdt2.curr_attribute_context IS NOT NULL
27472 		 and qcdt2.curr_attribute_context = pa_tmp1.context
27473                  and qcdt2.curr_attribute = pa_tmp1.attribute
27474                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
27475                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
27476                  and qcdt2.to_currency_code = qcdt.to_currency_code
27477                  and qcdt2.currency_header_id = qcdt.currency_header_id
27478                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
27479                  and pa_tmp1.line_index = qplines.line_index
27480                  and qplines.pricing_effective_date between
27481                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
27482                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
27483              )))
27484 AND   qpl.modifier_level_code = qplines.line_type_code
27485 AND   qph.active_flag = G_YES
27486 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27487        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
27488        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
27489 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27490        nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
27491        nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
27492 AND   qpprod.pricing_phase_id = p_pricing_phase_id
27493 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_IND
27494 AND   qpprod.product_attribute_context = qplatpr.context
27495 AND   qpprod.product_attribute = qplatpr.attribute
27496 AND   qpprod.product_attr_value = qplatpr.value_from
27497 AND   qpprod.excluder_flag = G_NO
27498 AND   qph.source_system_code = qprs.source_system_code
27499 AND   qplines.request_type_code   = qprs.request_type_code
27500 AND   qplatpr.attribute_type='PRODUCT'
27501 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
27502 AND   QPLATPR.LINE_INDEX = QPLINES.LINE_INDEX -- 4331801/4365538
27503 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
27504 ORDER BY 4,2;
27505 
27506 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
27507 --[julin/5007789] Tuned query as follows:
27508 -- 1. Performing line filter first.
27509 -- 2. Merged qplatpr subquery conditions into main where clause.
27510 -- 3. Merged qplatpc subquery conditions into main where clause.
27511 CURSOR l_prod_pric_cur (p_pricing_phase_id NUMBER) IS
27512 --PRODUCT and PRICING attributes
27513 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 */
27514        qpl.list_header_id,
27515        qpl.list_line_id,
27516        qpl.list_line_type_code,
27517        qplatpr.line_index,
27518        qplatpr.applied_flag,
27519        qplatpr.attribute_level               product_attribute_level,
27520        qplatpr.attribute_type                product_attribute_type,
27521        qplatpr.context                       product_attribute_context,
27522        qplatpr.attribute                     product_attribute,
27523        qplatpr.value_from                    product_attr_value,
27524        qpprod.product_uom_code               product_uom_code,
27525        qpprod.excluder_flag,
27526        qpl.automatic_flag,
27527        qpl.modifier_level_code,
27528        qpl.primary_uom_flag,
27529        qpl.arithmetic_operator               operand_calculation_code,
27530        qpl.operand                           operand_value,
27531        qpl.pricing_group_sequence,
27532        qph.list_type_code                    created_from_list_type,
27533        qph.rounding_factor,
27534        qpl.pricing_phase_id,
27535        qpl.price_break_type_code,
27536        qpl.incompatibility_grp_code,
27537        qpl.price_by_formula_id,
27538        qpl.product_precedence,
27539        qpl.list_line_no,
27540        qplatpc.attribute_level               pricing_attribute_level,
27541        qplatpc.attribute_type                pricing_attribute_type,
27542        qplatpc.context                       pricing_attribute_context,
27543        qplatpc.attribute                     pricing_attribute,
27544        qplatpc.value_from                    pricing_attr_value,
27545        qpprod.pricing_attr_value_from        pricing_setup_value_from,
27546        qpprod.pricing_attr_value_to          pricing_setup_value_to,
27547        qpprod.comparison_operator_code       pricing_comparison_operator,
27548        qpprod.pricing_attribute_datatype     pricing_datatype
27549       ,QPL.BREAK_UOM_CODE /* Proration */
27550       ,QPL.BREAK_UOM_CONTEXT /* Proration */
27551       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
27552 FROM  --[julin/5007789]
27553       (SELECT /*+ dynamic_sampling(1) */ *
27554        FROM  qp_npreq_lines_tmp
27555        WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
27556        AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
27557        qp_npreq_line_attrs_tmp qplatpr,
27558        qp_pricing_attributes qpprod,
27559        qp_npreq_line_attrs_tmp qplatpc,
27560        qp_list_lines qpl,
27561        qp_list_headers_b  qph,
27562        qp_price_req_sources_v QPRS
27563 WHERE
27564       qph.list_header_id = qpl.list_header_id
27565 --added for moac -- commented references to security profile
27566 --security will be built into qp_list_headers_b
27567 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
27568 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
27569 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
27570 AND   qpl.list_line_id = qpprod.list_line_id
27571 AND   qpl.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
27572 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
27573 AND  (qplines.price_flag = G_YES OR
27574       (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
27575 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
27576 AND  qph.currency_code = qplines.currency_code --5922273
27577 AND  qph.active_flag = G_YES
27578 AND  qpl.pricing_phase_id = p_pricing_phase_id
27579 AND  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27580        nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
27581        nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
27582 AND  nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27583       nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date) and
27584       nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
27585 AND  qpprod.pricing_phase_id = p_pricing_phase_id
27586 AND  qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
27587 AND  qpprod.product_attribute_context = qplatpr.context
27588 AND  qpprod.product_attribute = qplatpr.attribute
27589 AND  qpprod.product_attr_value = qplatpr.value_from
27590 AND  qpprod.excluder_flag = G_NO
27591 AND  qpprod.pricing_attribute_context = qplatpc.context
27592 AND  qpprod.pricing_attribute = qplatpc.attribute
27593 AND (qpprod.pricing_attr_value_from = qplatpc.value_from
27594          or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
27595          --or qpl.price_break_type_code = G_RECURRING_BREAK)
27596 AND  qplatpc.attribute_type = 'PRICING' --[julin/5007789]
27597 AND  qplatpc.pricing_status_code = G_STATUS_UNCHANGED --[julin/5007789]
27598 AND  qplatpc.line_index = qplines.line_index
27599 AND  qplatpr.line_index = qplines.line_index
27600 AND  qplatpr.attribute_type = 'PRODUCT' --[julin/5007789]
27601 AND  qplatpr.pricing_status_code = G_STATUS_UNCHANGED --[julin/5007789]
27602 AND  qph.source_system_code = qprs.source_system_code
27603 AND  qplines.request_type_code   = qprs.request_type_code
27604 --AND   qplatpc.pricing_attr_flag = G_YES --[julin/4708044] currently not reliable value, not used in index
27605 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
27606 ORDER BY 4,2;
27607 
27608 --Added INDEX(QPPROD QP_PRICING_ATTRIBUTES_N5) for 3259932
27609 --[julin/5007789] Tuned query as follows:
27610 -- 1. Performing line filter first.
27611 CURSOR l_prod_pric_cur_currency(p_pricing_phase_id NUMBER) IS
27612 --Product+Pricing
27613 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 */
27614        qpl.list_header_id,
27615        qpl.list_line_id,
27616        qpl.list_line_type_code,
27617        qplatpr.line_index,
27618        qplatpr.applied_flag,
27619        qplatpr.attribute_level               product_attribute_level,
27620        qplatpr.attribute_type                product_attribute_type,
27621        qplatpr.context                       product_attribute_context,
27622        qplatpr.attribute                     product_attribute,
27623        qplatpr.value_from                    product_attr_value,
27624        qpprod.product_uom_code               product_uom_code,
27625        qpprod.excluder_flag,
27626        qpl.automatic_flag,
27627        qpl.modifier_level_code,
27628        qpl.primary_uom_flag,
27629        qpl.arithmetic_operator               operand_calculation_code,
27630        qpl.operand                           operand_value,
27631        qpl.pricing_group_sequence,
27632        qph.list_type_code                    created_from_list_type,
27633        qph.rounding_factor,
27634        qpl.pricing_phase_id,
27635        qpl.price_break_type_code,
27636        qpl.incompatibility_grp_code,
27637        qpl.price_by_formula_id,
27638        qpl.product_precedence,
27639        qpl.list_line_no,
27640        qplatpc.attribute_level               pricing_attribute_level,
27641        qplatpc.attribute_type                pricing_attribute_type,
27642        qplatpc.context                       pricing_attribute_context,
27643        qplatpc.attribute                     pricing_attribute,
27644        qplatpc.value_from                    pricing_attr_value,
27645        qpprod.pricing_attr_value_from        pricing_setup_value_from,
27646        qpprod.pricing_attr_value_to          pricing_setup_value_to,
27647        qpprod.comparison_operator_code       pricing_comparison_operator,
27648        qpprod.pricing_attribute_datatype     pricing_datatype,
27649        qcdt.currency_detail_id,
27650        qcdt.currency_header_id,
27651        qcdt.selling_rounding_factor,
27652        qplines.currency_code                 order_currency,
27653        qplines.pricing_effective_date        pricing_effective_date,
27654        qph.currency_code                     base_currency_code
27655       ,QPL.BREAK_UOM_CODE /* Proration */
27656       ,QPL.BREAK_UOM_CONTEXT /* Proration */
27657       ,QPL.BREAK_UOM_ATTRIBUTE /* Proration */
27658 FROM  --[julin/5007789]
27659       (SELECT /*+ dynamic_sampling(1) */ *
27660        FROM  qp_npreq_lines_tmp
27661        WHERE processed_code IN (G_STS_LHS_NOT_FOUND,G_NO_LIST_PASSED)
27662        AND (nvl(validated_flag,G_NO) = G_NO or nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) qplines,
27663        qp_npreq_line_attrs_tmp qplatpr,
27664        qp_pricing_attributes qpprod ,
27665        qp_npreq_line_attrs_tmp qplatpc,
27666        qp_list_lines qpl ,
27667        qp_list_headers_b qph,
27668        qp_price_req_sources_v qprs,
27669        qp_currency_details qcdt
27670 WHERE
27671       qph.list_header_id = qpl.list_header_id
27672 --added for moac -- commented references to security profile
27673 --security will be built into qp_list_headers_b
27674 --AND ((nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND G_CURRENT_USER_OP_UNIT = QPH.orig_org_id) OR -- begin security
27675 --         (nvl(G_SECURITY_CONTROL, 'OFF') = 'ON' AND nvl(QPH.global_flag,'Y') = 'Y') OR
27676 --         nvl(G_SECURITY_CONTROL, 'OFF') = 'OFF' ) -- end security
27677 AND   qpl.list_line_id   = qpprod.list_line_id
27678 AND   (qplines.price_flag = G_YES OR
27679        (qplines.price_flag = G_PHASE AND p_freeze_override_flag = G_YES))
27680 AND   qplines.list_price_override_flag in ('N', 'O') -- po integration
27681 --AND   qph.currency_code = qplines.currency_code
27682 AND   qph.currency_header_id = qcdt.currency_header_id
27683 AND   qplines.currency_code = qcdt.to_currency_code
27684 AND   qplines.pricing_effective_date between
27685        nvl(trunc(qcdt.start_date_active),qplines.pricing_effective_date) and
27686        nvl(trunc(qcdt.end_date_active),qplines.pricing_effective_date)
27687 AND (
27688         (qcdt.curr_attribute_context is null
27689          and not exists
27690              (select /*+ ORDERED use_nl(qcdt1) index(pa_tmp QP_PREQ_LINE_ATTRS_TMP_N1) */ 'x'   --[julin/5139512/4744915]
27691 	       from qp_npreq_line_attrs_tmp pa_tmp,   qp_currency_details qcdt1
27692                where qcdt1.curr_attribute_context IS NOT NULL
27693 		 and qcdt1.curr_attribute_context = pa_tmp.context
27694                  and qcdt1.curr_attribute = pa_tmp.attribute
27695                  and qcdt1.curr_attribute_value = pa_tmp.value_from
27696                  and qcdt1.curr_attribute_type = pa_tmp.attribute_typE
27697                  and qcdt1.to_currency_code = qcdt.to_currency_code
27698                  and qcdt1.currency_header_id = qcdt.currency_header_id
27699                  and pa_tmp.pricing_status_code = G_STATUS_UNCHANGED
27700                  and pa_tmp.line_index = qplines.line_index
27701                  and qplines.pricing_effective_date between
27702                      nvl(trunc(qcdt1.start_date_active),qplines.pricing_effective_date)
27703                      and nvl(trunc(qcdt1.end_date_active),qplines.pricing_effective_date)))
27704         OR
27705         (qcdt.curr_attribute_context is not null
27706          and qcdt.precedence =
27707              (select /*+ ORDERED use_nl(qcdt2) index(pa_tmp1 QP_PREQ_LINE_ATTRS_TMP_N1) */ min(qcdt2.precedence) --[julin/5139512/4744915]
27708 	       from qp_npreq_line_attrs_tmp pa_tmp1, qp_currency_details qcdt2
27709                where qcdt2.curr_attribute_context IS NOT NULL
27710 		 and qcdt2.curr_attribute_context = pa_tmp1.context
27711                  and qcdt2.curr_attribute = pa_tmp1.attribute
27712                  and qcdt2.curr_attribute_value = pa_tmp1.value_from
27713                  and qcdt2.curr_attribute_type = pa_tmp1.attribute_type
27714                  and qcdt2.to_currency_code = qcdt.to_currency_code
27715                  and qcdt2.currency_header_id = qcdt.currency_header_id
27716                  and pa_tmp1.pricing_status_code = G_STATUS_UNCHANGED
27717                  and pa_tmp1.line_index = qplines.line_index
27718                  and qplines.pricing_effective_date between
27719                      nvl(trunc(qcdt2.start_date_active),qplines.pricing_effective_date)
27720                      and nvl(trunc(qcdt2.end_date_active),qplines.pricing_effective_date)
27721              )))
27722 AND   qpl.modifier_level_code = qplines.line_type_code
27723 AND   qph.active_flag = G_YES
27724 AND   nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)) between
27725       nvl(qph.start_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE))) and
27726       nvl(qph.end_date_active,nvl(qplines.pricing_effective_date,TRUNC(SYSDATE)))
27727 AND   qplines.pricing_effective_date between
27728       nvl(TRUNC(qpl.start_date_active), qplines.pricing_effective_date)
27729       and nvl(TRUNC(qpl.end_date_active),qplines.pricing_effective_date)
27730 AND   qpl.list_line_type_code in ('PLL','PMR','PBH')
27731 AND   qpprod.pricing_phase_id = p_pricing_phase_id
27732 AND   qpprod.qualification_ind = QP_PREQ_GRP.G_YES_PROD_PRIC_IND
27733 AND   qpprod.product_attribute_context = qplatpr.context
27734 AND   qpprod.product_attribute = qplatpr.attribute
27735 AND   qpprod.product_attr_value = qplatpr.value_from
27736 AND   qpprod.excluder_flag = G_NO
27737 AND   qpprod.pricing_attribute_context = qplatpc.context
27738 AND   qpprod.pricing_attribute = qplatpc.attribute
27739 AND   (qpprod.pricing_attr_value_from = qplatpc.value_from
27740         or qpprod.comparison_operator_code = G_OPERATOR_BETWEEN)
27741 AND   qplatpc.line_index = qplatpr.line_index
27742 AND   qplatpr.line_index = qplines.line_index -- 4331801/4365538
27743 AND   qph.source_system_code = qprs.source_system_code
27744 AND   qplines.request_type_code   = qprs.request_type_code
27745 AND   qplatpr.attribute_type='PRODUCT'
27746 AND   qplatpr.pricing_status_code=G_STATUS_UNCHANGED
27747 AND   qplatpc.attribute_type = 'PRICING'
27748 AND   qplatpc.pricing_status_code = G_STATUS_UNCHANGED
27749 AND (instr(QPLINES.PROCESS_STATUS,'FREEGOOD')=0) -- bug 2693700
27750 ORDER BY 4,2;
27751 
27752 J PLS_INTEGER:=1;
27753 N PLS_INTEGER:=1;
27754 K PLS_INTEGER:=1;
27755 M PLS_INTEGER:=1;
27756 l_status VARCHAR2(30);
27757 l_status_code VARCHAR2(30);
27758 l_status_text VARCHAR2(240);
27759 l_list_line_id NUMBER := 0 ;
27760 l_line_index PLS_INTEGER := 0 ;
27761 l_routine VARCHAR2(240):='Routine:QP_PREQ_GRP.Select_Price_List_Lines';
27762 l_prod_qual_count PLS_INTEGER :=0;
27763 l_prod_cur_count PLS_INTEGER :=0;
27764 
27765 l_line_detail_index PLS_INTEGER;
27766 lq_line_index              NUMBER := -9999;
27767 lq_list_line_id            NUMBER := -9999;
27768 nROWS                      PLS_INTEGER := 1000;
27769 
27770 E_ROUTINE_ERRORS            EXCEPTION;
27771 
27772 BEGIN
27773 
27774    x_status_code := FND_API.G_RET_STS_SUCCESS;
27775    l_prod_qual_count :=0;
27776    l_prod_cur_count  :=0;
27777 
27778    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27779    engine_debug('Before Big Select');
27780    engine_debug('p_pricing_phase_id: '||p_pricing_phase_id);
27781    engine_debug('p_freeze_override_flag: '||p_freeze_override_flag);
27782 
27783    END IF;
27784 if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
27785   --selecting lists that match product and qualifiers attributes
27786   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27787     engine_debug('cursor for l_prod_qual_cur_currency-multi-currency TRUE');
27788   END IF;
27789   OPEN l_prod_qual_cur_currency(p_pricing_phase_id);
27790 
27791   qp_debug_util.tstart('L_PROD_QUAL_CUR_CURRENCY','Cursor Loop l_prod_qual_cur_currency');
27792   LOOP
27793     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
27794        deleted here.  There is no need to explicitly delete since BULK COLLECT
27795        will truncate the data before populating. */
27796 
27797     -- fetch into _P and _Q tables here
27798     FETCH l_prod_qual_cur_currency BULK COLLECT INTO
27799       G_LIST_HEADER_ID_TBL_P,
27800       G_LIST_LINE_ID_TBL_P,
27801       G_LIST_LINE_TYPE_TBL_P,
27802       G_LINE_INDEX_TBL_P,
27803       G_APPLIED_FLAG_TBL_P,
27804       G_ATTRIBUTE_LEVEL_TBL_P,
27805       G_ATTRIBUTE_TYPE_TBL_P,
27806       G_CONTEXT_TBL_P,
27807       G_ATTRIBUTE_TBL_P,
27808       G_VALUE_FROM_TBL_P,
27809       G_PRODUCT_UOM_CODE_TBL_P,
27810       G_EXCLUDER_FLAG_TBL_P,
27811       G_CONTEXT_TBL_Q,
27812       G_ATTRIBUTE_TBL_Q,
27813       G_VALUE_FROM_TBL_Q,
27814       G_GROUPING_NO_TBL_Q,
27815       G_QUALIFIER_PRECEDENCE_TBL_Q,
27816       G_DATATYPE_TBL_Q,
27817       G_SETUP_VALUE_FROM_TBL_Q,
27818       G_SETUP_VALUE_TO_TBL_Q,
27819       G_AUTOMATIC_FLAG_TBL_P,
27820       G_MODIFIER_LEVEL_CODE_TBL_P,
27821       G_PRIMARY_UOM_FLAG_TBL_P,
27822       G_OPER_CALCULATION_CODE_TBL_P,
27823       G_OPERAND_VALUE_TBL_P,
27824       G_PRICING_GROUP_SEQUENCE_TBL_P,
27825       G_LIST_TYPE_CODE_TBL_P,
27826       G_ROUNDING_FACTOR_TBL_P,
27827       G_PRICING_PHASE_ID_TBL_P,
27828       G_PRICE_BREAK_TYPE_CODE_TBL_P,
27829       G_INCOMP_GRP_CODE_TBL_P,
27830       G_PRICE_FORMULA_ID_TBL_P,
27831       G_PRODUCT_PRECEDENCE_TBL_P,
27832       G_LIST_LINE_NO_TBL_P,
27833       G_QUALIFIER_TYPE_TBL_Q ,
27834       G_CURRENCY_DETAIL_ID_TBL_P,
27835       G_CURRENCY_HEADER_ID_TBL_P,
27836       G_SELLING_ROUNDING_TBL_P,
27837       G_ORDER_CURRENCY_TBL_P,
27838       G_PRICING_EFFECTIVE_DATE_TBL_P,
27839       G_BASE_CURRENCY_CODE_TBL_P
27840      ,G_BREAK_UOM_TBL_P /* Proration */
27841      ,G_BREAK_CONTEXT_TBL_P /* Proration */
27842      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
27843       LIMIT nROWS;
27844 
27845     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
27846 
27847     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27848       engine_debug('shu dbg, after bulk insert');
27849     END IF;
27850 
27851     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
27852 
27853       FOR i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
27854 
27855         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
27856 
27857           l_prod_qual_count := l_prod_qual_count + 1;
27858           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
27859           -- set attributes
27860           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
27861           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
27862           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
27863           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
27864           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
27865           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER_CURRENCY';
27866           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
27867           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
27868           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
27869           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
27870           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
27871           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
27872           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUALIFIER_CURRENCY';
27873           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
27874           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
27875           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
27876           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
27877           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
27878           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
27879           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
27880           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
27881           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
27882           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
27883           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
27884           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
27885           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
27886           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
27887           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
27888           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
27889           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
27890           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
27891           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
27892           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
27893           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
27894 
27895           M:=M+1;
27896 
27897           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27898             engine_debug('M: '|| M);
27899 	  END IF;
27900 
27901 
27902           lq_line_index := G_LINE_INDEX_TBL_P(i);
27903           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
27904         end if;
27905 
27906         -- set product attributes
27907 
27908         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
27909         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
27910         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
27911         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
27912         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
27913         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
27914         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
27915         G_VALIDATED_FLAG_tbl(K)          := G_NO;
27916         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
27917         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
27918         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
27919         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
27920         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
27921         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
27922         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
27923         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
27924         G_GROUPING_NUMBER_tbl(K)         :=NULL;
27925         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_CURRENCY';
27926         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
27927         G_DATATYPE_tbl(K)                :=NULL;
27928         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
27929         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
27930         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
27931         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
27932         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
27933         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
27934         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
27935         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
27936 
27937         K:= K+1;
27938         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27939         engine_debug('The value of K1: ' || K);
27940         END IF;
27941         -- set qualifier attributes
27942         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
27943         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
27944         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
27945         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
27946         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
27947         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
27948         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
27949         G_VALIDATED_FLAG_tbl(K)          := G_NO;
27950         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
27951         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
27952         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
27953         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
27954         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
27955         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
27956         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
27957         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
27958         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
27959         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER_CURRENCY';
27960         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
27961         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
27962         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
27963         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
27964         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
27965         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
27966         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
27967         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
27968         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
27969         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
27970         K:= K+1;
27971         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27972         engine_debug('The value of K2: ' || K);
27973 
27974         END IF;
27975       end loop;
27976     end if;
27977   END LOOP;
27978 
27979   qp_debug_util.tstop('L_PROD_QUAL_CUR_CURRENCY');
27980 
27981   CLOSE l_prod_qual_cur_currency;
27982 
27983   lq_line_index              := -9999;
27984   lq_list_line_id            := -9999;
27985 
27986   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
27987         engine_debug('before l_prod_qual_pric_cur_currency... ');
27988   END IF;
27989 
27990   OPEN l_prod_qual_pric_cur_currency(p_pricing_phase_id);
27991 
27992   qp_debug_util.tstart('L_PROD_QUAL_PRIC_CUR_CURRENCY','Cursor Loop l_prod_qual_pric_cur_currency');
27993   LOOP
27994     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
27995        deleted here.  There is no need to explicitly delete since BULK COLLECT
27996        will truncate the data before populating. */
27997 
27998     -- fetch into _P , _Q tables and _PR tables here
27999     FETCH l_prod_qual_pric_cur_currency BULK COLLECT INTO
28000       G_LIST_HEADER_ID_TBL_P,
28001       G_LIST_LINE_ID_TBL_P,
28002       G_LIST_LINE_TYPE_TBL_P,
28003       G_LINE_INDEX_TBL_P,
28004       G_APPLIED_FLAG_TBL_P,
28005       G_ATTRIBUTE_LEVEL_TBL_P,
28006       G_ATTRIBUTE_TYPE_TBL_P,
28007       G_CONTEXT_TBL_P,
28008       G_ATTRIBUTE_TBL_P,
28009       G_VALUE_FROM_TBL_P,
28010       G_PRODUCT_UOM_CODE_TBL_P,
28011       G_EXCLUDER_FLAG_TBL_P,
28012       G_CONTEXT_TBL_Q,
28013       G_ATTRIBUTE_TBL_Q,
28014       G_VALUE_FROM_TBL_Q,
28015       G_GROUPING_NO_TBL_Q,
28016       G_QUALIFIER_PRECEDENCE_TBL_Q,
28017       G_DATATYPE_TBL_Q,
28018       G_SETUP_VALUE_FROM_TBL_Q,
28019       G_SETUP_VALUE_TO_TBL_Q,
28020       G_AUTOMATIC_FLAG_TBL_P,
28021       G_MODIFIER_LEVEL_CODE_TBL_P,
28022       G_PRIMARY_UOM_FLAG_TBL_P,
28023       G_OPER_CALCULATION_CODE_TBL_P,
28024       G_OPERAND_VALUE_TBL_P,
28025       G_PRICING_GROUP_SEQUENCE_TBL_P,
28026       G_LIST_TYPE_CODE_TBL_P,
28027       G_ROUNDING_FACTOR_TBL_P,
28028       G_PRICING_PHASE_ID_TBL_P,
28029       G_PRICE_BREAK_TYPE_CODE_TBL_P,
28030       G_INCOMP_GRP_CODE_TBL_P,
28031       G_PRICE_FORMULA_ID_TBL_P,
28032       G_PRODUCT_PRECEDENCE_TBL_P,
28033       G_LIST_LINE_NO_TBL_P,
28034       G_QUALIFIER_TYPE_TBL_Q ,
28035       G_ATTRIBUTE_LEVEL_TBL_PR,
28036       G_ATTRIBUTE_TYPE_TBL_PR,
28037       G_CONTEXT_TBL_PR,
28038       G_ATTRIBUTE_TBL_PR,
28039       G_VALUE_FROM_TBL_PR,
28040       G_SETUP_VALUE_FROM_TBL_PR,
28041       G_SETUP_VALUE_TO_TBL_PR,
28042       G_OPERATOR_TYPE_TBL_PR,
28043       G_DATATYPE_TBL_PR,
28044       G_CURRENCY_DETAIL_ID_TBL_P,
28045       G_CURRENCY_HEADER_ID_TBL_P,
28046       G_SELLING_ROUNDING_TBL_P,
28047       G_ORDER_CURRENCY_TBL_P,
28048       G_PRICING_EFFECTIVE_DATE_TBL_P ,
28049       G_BASE_CURRENCY_CODE_TBL_P
28050      ,G_BREAK_UOM_TBL_P /* Proration */
28051      ,G_BREAK_CONTEXT_TBL_P /* Proration */
28052      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
28053       LIMIT nROWS;
28054     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28055 
28056     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
28057       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
28058         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
28059           l_prod_qual_count := l_prod_qual_count + 1;
28060           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
28061 
28062           -- set attributes
28063           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
28064           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
28065           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
28066           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
28067           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
28068           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER_PRICING_CURRENCY';
28069           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
28070           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
28071           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
28072           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
28073           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
28074           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
28075           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUAL_PRICING_CURRENCY';
28076           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
28077           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
28078           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
28079           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
28080           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
28081           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
28082           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
28083           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
28084           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28085           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28086           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
28087           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
28088           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
28089           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
28090           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
28091           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
28092           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
28093           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
28094           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
28095           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
28096           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
28097 
28098           M:=M+1;
28099           lq_line_index := G_LINE_INDEX_TBL_P(i);
28100           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
28101         end if;
28102 
28103         -- set product attributes
28104         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28105         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
28106         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
28107         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
28108         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
28109         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
28110         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
28111         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28112         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28113         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28114         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28115         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28116         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
28117         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
28118         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
28119         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28120         G_GROUPING_NUMBER_tbl(K)         :=NULL;
28121         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING_CURRENCY';
28122         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28123         G_DATATYPE_tbl(K)                :=NULL;
28124         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
28125         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
28126         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
28127         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
28128         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
28129         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28130         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28131         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28132         K:= K+1;
28133         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28134         engine_debug('The value of K: ' || K);
28135 
28136         END IF;
28137         -- set qualifier attributes
28138         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28139         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
28140         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
28141         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
28142         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
28143         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
28144          G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
28145         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28146         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28147         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28148         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28149         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
28150         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
28151         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
28152         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
28153         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
28154         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
28155         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER_PRICING_CURRENCY';
28156         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
28157         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
28158         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
28159         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
28160         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
28161         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
28162         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
28163         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
28164         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
28165         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
28166         K:= K+1;
28167 
28168         --set pricing attributes
28169         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
28170          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
28171          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
28172          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
28173          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
28174          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
28175          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
28176          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
28177          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
28178          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
28179          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
28180          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
28181          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28182          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28183          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28184          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
28185          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
28186          G_GROUPING_NUMBER_tbl(K)         :=NULL;
28187          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING_CURRENCY';
28188          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28189          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
28190          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28191          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28192          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
28193          G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
28194          G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
28195          G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28196          G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28197          G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28198          K:= K+1;
28199        END IF;
28200        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28201        engine_debug('The value of K: ' || K);
28202 
28203        END IF;
28204       end loop;
28205     end if;
28206   END LOOP;
28207 
28208   qp_debug_util.tstop('L_PROD_QUAL_PRIC_CUR_CURRENCY');
28209 
28210   CLOSE l_prod_qual_pric_cur_currency;
28211 
28212   lq_line_index              := -9999;
28213   lq_list_line_id            := -9999;
28214 
28215   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28216         engine_debug('before l_prod_cur_currency... ');
28217   END IF;
28218 
28219   OPEN l_prod_cur_currency(p_pricing_phase_id);
28220 
28221   qp_debug_util.tstart('L_PROD_CUR_CURRENCY','Cursor Loop l_prod_cur_currency');
28222 
28223   LOOP
28224     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
28225        deleted here.  There is no need to explicitly delete since BULK COLLECT
28226        will truncate the data before populating. */
28227 
28228     -- fetch into _P tables here
28229     FETCH l_prod_cur_currency BULK COLLECT INTO
28230       G_LIST_HEADER_ID_TBL_P,
28231       G_LIST_LINE_ID_TBL_P,
28232       G_LIST_LINE_TYPE_TBL_P,
28233       G_LINE_INDEX_TBL_P,
28234       G_APPLIED_FLAG_TBL_P,
28235       G_ATTRIBUTE_LEVEL_TBL_P,
28236       G_ATTRIBUTE_TYPE_TBL_P,
28237       G_CONTEXT_TBL_P,
28238       G_ATTRIBUTE_TBL_P,
28239       G_VALUE_FROM_TBL_P,
28240       G_PRODUCT_UOM_CODE_TBL_P,
28241       G_EXCLUDER_FLAG_TBL_P,
28242       G_AUTOMATIC_FLAG_TBL_P,
28243       G_MODIFIER_LEVEL_CODE_TBL_P,
28244       G_PRIMARY_UOM_FLAG_TBL_P,
28245       G_OPER_CALCULATION_CODE_TBL_P,
28246       G_OPERAND_VALUE_TBL_P,
28247       G_PRICING_GROUP_SEQUENCE_TBL_P,
28248       G_LIST_TYPE_CODE_TBL_P,
28249       G_ROUNDING_FACTOR_TBL_P,
28250       G_PRICING_PHASE_ID_TBL_P,
28251       G_PRICE_BREAK_TYPE_CODE_TBL_P,
28252       G_INCOMP_GRP_CODE_TBL_P,
28253       G_PRICE_FORMULA_ID_TBL_P,
28254       G_PRODUCT_PRECEDENCE_TBL_P,
28255       G_LIST_LINE_NO_TBL_P,
28256       G_CURRENCY_DETAIL_ID_TBL_P,
28257       G_CURRENCY_HEADER_ID_TBL_P,
28258       G_SELLING_ROUNDING_TBL_P,
28259       G_ORDER_CURRENCY_TBL_P,
28260       G_PRICING_EFFECTIVE_DATE_TBL_P,
28261       G_BASE_CURRENCY_CODE_TBL_P
28262      ,G_BREAK_UOM_TBL_P /* Proration */
28263      ,G_BREAK_CONTEXT_TBL_P /* Proration */
28264      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
28265       LIMIT nROWS;
28266 
28267     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28268 
28269     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
28270       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
28271         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
28272           l_prod_qual_count := l_prod_qual_count + 1;
28273           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
28274 
28275           -- set attributes
28276           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
28277           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
28278           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
28279           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
28280           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
28281           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_CURRENCY';
28282           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
28283           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
28284           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
28285           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
28286           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
28287           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
28288           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_CURRENCY';
28289           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
28290           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
28291           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
28292           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
28293           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
28294           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
28295           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
28296           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
28297           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28298           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28299           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
28300           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
28301           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
28302           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
28303           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
28304           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
28305           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
28306           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
28307           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
28308           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
28309           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
28310 
28311 
28312           M:=M+1;
28313           lq_line_index := G_LINE_INDEX_TBL_P(i);
28314           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
28315         end if;
28316 
28317         -- set product attributes
28318         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28319         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
28320         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
28321         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
28322         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
28323         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
28324         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
28325         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28326         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28327         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28328         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28329         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28330         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
28331         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
28332         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
28333         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28334         G_GROUPING_NUMBER_tbl(K)         :=NULL;
28335         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_CURRENCY';
28336         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28337         G_DATATYPE_tbl(K)                :=NULL;
28338         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
28339         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
28340         G_QUALIFIER_TYPE_TBL(K)          :=null;
28341         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
28342         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
28343         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28344         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28345         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28346         K:= K+1;
28347         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28348         engine_debug('The value of K: ' || K);
28349         END IF;
28350       end loop;
28351     end if;
28352   END LOOP;
28353 
28354   qp_debug_util.tstop('L_PROD_CUR_CURRENCY');
28355 
28356   CLOSE l_prod_cur_currency;
28357 
28358    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28359         engine_debug('before l_prod_pric_cur_currency...');
28360    END IF;
28361 
28362   OPEN l_prod_pric_cur_currency(p_pricing_phase_id);
28363 
28364   qp_debug_util.tstart('L_PROD_PRIC_CUR_CURRENCY','Cursor Loop l_prod_pric_cur_currency');
28365 
28366   LOOP
28367     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
28368        deleted here.  There is no need to explicitly delete since BULK COLLECT
28369        will truncate the data before populating. */
28370 
28371     -- fetch into _P , and _PR tables here
28372     FETCH l_prod_pric_cur_currency BULK COLLECT INTO
28373       G_LIST_HEADER_ID_TBL_P,
28374       G_LIST_LINE_ID_TBL_P,
28375       G_LIST_LINE_TYPE_TBL_P,
28376       G_LINE_INDEX_TBL_P,
28377       G_APPLIED_FLAG_TBL_P,
28378       G_ATTRIBUTE_LEVEL_TBL_P,
28379       G_ATTRIBUTE_TYPE_TBL_P,
28380       G_CONTEXT_TBL_P,
28381       G_ATTRIBUTE_TBL_P,
28382       G_VALUE_FROM_TBL_P,
28383       G_PRODUCT_UOM_CODE_TBL_P,
28384       G_EXCLUDER_FLAG_TBL_P,
28385       G_AUTOMATIC_FLAG_TBL_P,
28386       G_MODIFIER_LEVEL_CODE_TBL_P,
28387       G_PRIMARY_UOM_FLAG_TBL_P,
28388       G_OPER_CALCULATION_CODE_TBL_P,
28389       G_OPERAND_VALUE_TBL_P,
28390       G_PRICING_GROUP_SEQUENCE_TBL_P,
28391       G_LIST_TYPE_CODE_TBL_P,
28392       G_ROUNDING_FACTOR_TBL_P,
28393       G_PRICING_PHASE_ID_TBL_P,
28394       G_PRICE_BREAK_TYPE_CODE_TBL_P,
28395       G_INCOMP_GRP_CODE_TBL_P,
28396       G_PRICE_FORMULA_ID_TBL_P,
28397       G_PRODUCT_PRECEDENCE_TBL_P,
28398       G_LIST_LINE_NO_TBL_P,
28399       G_ATTRIBUTE_LEVEL_TBL_PR,
28400       G_ATTRIBUTE_TYPE_TBL_PR,
28401       G_CONTEXT_TBL_PR,
28402       G_ATTRIBUTE_TBL_PR,
28403       G_VALUE_FROM_TBL_PR,
28404       G_SETUP_VALUE_FROM_TBL_PR,
28405       G_SETUP_VALUE_TO_TBL_PR,
28406       G_OPERATOR_TYPE_TBL_PR,
28407       G_DATATYPE_TBL_PR,
28408       G_CURRENCY_DETAIL_ID_TBL_P,
28409       G_CURRENCY_HEADER_ID_TBL_P,
28410       G_SELLING_ROUNDING_TBL_P,
28411       G_ORDER_CURRENCY_TBL_P,
28412       G_PRICING_EFFECTIVE_DATE_TBL_P ,
28413       G_BASE_CURRENCY_CODE_TBL_P
28414      ,G_BREAK_UOM_TBL_P /* Proration */
28415      ,G_BREAK_CONTEXT_TBL_P /* Proration */
28416      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
28417       LIMIT nROWS;
28418     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28419 
28420     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
28421       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
28422         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
28423           l_prod_qual_count := l_prod_qual_count + 1;
28424           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
28425 
28426           -- set attributes
28427           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
28428           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
28429           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
28430           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
28431           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
28432           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_PRICING_CURRENCY';
28433           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
28434           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
28435           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
28436           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
28437           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
28438           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
28439           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_PRICING_CURRENCY';
28440           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
28441           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
28442           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
28443           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
28444           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
28445           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
28446           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
28447           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
28448           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28449           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28450           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
28451           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
28452           G_CURRENCY_DETAIL_ID_TBL(M)        := G_CURRENCY_DETAIL_ID_TBL_P(i);
28453           G_CURRENCY_HEADER_ID_TBL(M)        := G_CURRENCY_HEADER_ID_TBL_P(i);
28454           G_SELLING_ROUNDING_TBL(M)          := G_SELLING_ROUNDING_TBL_P(i);
28455           G_ORDER_CURRENCY_TBL(M)            := G_ORDER_CURRENCY_TBL_P(i);
28456           G_BASE_CURRENCY_CODE_TBL(M)        := G_BASE_CURRENCY_CODE_TBL_P(i);
28457           G_PRICING_EFFECTIVE_DATE_TBL(M)    := G_PRICING_EFFECTIVE_DATE_TBL_P(i);
28458           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
28459           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
28460           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
28461 
28462           M:=M+1;
28463           lq_line_index := G_LINE_INDEX_TBL_P(i);
28464           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
28465         end if;
28466 
28467         -- set product attributes
28468         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28469         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
28470         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
28471         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
28472         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
28473         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
28474         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
28475         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28476         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28477         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28478         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28479         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28480         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
28481         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
28482         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
28483         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28484         G_GROUPING_NUMBER_tbl(K)         :=NULL;
28485         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_CURRENCY';
28486         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28487         G_DATATYPE_tbl(K)                :=NULL;
28488         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
28489         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
28490         --G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i); -- fix bug 2767927 big search failed with no data found
28491         G_QUALIFIER_TYPE_TBL(K)          :=null;
28492         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
28493         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
28494         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28495         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28496         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28497         K:= K+1;
28498         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28499         engine_debug('The value of K: ' || K);
28500 
28501         END IF;
28502         --set pricing attributes
28503         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
28504          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
28505          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
28506          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
28507          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
28508          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
28509          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
28510          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
28511          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
28512          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
28513          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
28514          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
28515          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28516          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28517          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28518          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
28519          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
28520          G_GROUPING_NUMBER_tbl(K)         :=NULL;
28521          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_CURRENCY';
28522          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28523          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
28524          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28525          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28526          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
28527          G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
28528          G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
28529          G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
28530          G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28531          G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28532          K:= K+1;
28533        END IF;
28534        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28535        engine_debug('The value of K: ' || K);
28536        END IF;
28537       end loop;
28538     end if;
28539   END LOOP;
28540   qp_debug_util.tstop('L_PROD_PRIC_CUR_CURRENCY');
28541   CLOSE l_prod_pric_cur_currency; -- 4331801/4365538
28542 else -- vivek, multi currency not installed, not used
28543   --selecting lists that match product and qualifiers attributes
28544 
28545   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28546        engine_debug('before l_prod_qual_cur...');
28547        END IF;
28548 
28549   OPEN l_prod_qual_cur(p_pricing_phase_id);
28550   qp_debug_util.tstart('L_PROD_QUAL_CUR','Cursor Loop l_prod_qual_cur');
28551   LOOP
28552     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
28553        deleted here.  There is no need to explicitly delete since BULK COLLECT
28554        will truncate the data before populating. */
28555 
28556     -- fetch into _P and _Q tables here
28557     FETCH l_prod_qual_cur BULK COLLECT INTO
28558       G_LIST_HEADER_ID_TBL_P,
28559       G_LIST_LINE_ID_TBL_P,
28560       G_LIST_LINE_TYPE_TBL_P,
28561       G_LINE_INDEX_TBL_P,
28562       G_APPLIED_FLAG_TBL_P,
28563       G_ATTRIBUTE_LEVEL_TBL_P,
28564       G_ATTRIBUTE_TYPE_TBL_P,
28565       G_CONTEXT_TBL_P,
28566       G_ATTRIBUTE_TBL_P,
28567       G_VALUE_FROM_TBL_P,
28568       G_PRODUCT_UOM_CODE_TBL_P,
28569       G_EXCLUDER_FLAG_TBL_P,
28570       G_CONTEXT_TBL_Q,
28571       G_ATTRIBUTE_TBL_Q,
28572       G_VALUE_FROM_TBL_Q,
28573       G_GROUPING_NO_TBL_Q,
28574       G_QUALIFIER_PRECEDENCE_TBL_Q,
28575       G_DATATYPE_TBL_Q,
28576       G_SETUP_VALUE_FROM_TBL_Q,
28577       G_SETUP_VALUE_TO_TBL_Q,
28578       G_AUTOMATIC_FLAG_TBL_P,
28579       G_MODIFIER_LEVEL_CODE_TBL_P,
28580       G_PRIMARY_UOM_FLAG_TBL_P,
28581       G_OPER_CALCULATION_CODE_TBL_P,
28582       G_OPERAND_VALUE_TBL_P,
28583       G_PRICING_GROUP_SEQUENCE_TBL_P,
28584       G_LIST_TYPE_CODE_TBL_P,
28585       G_ROUNDING_FACTOR_TBL_P,
28586       G_PRICING_PHASE_ID_TBL_P,
28587       G_PRICE_BREAK_TYPE_CODE_TBL_P,
28588       G_INCOMP_GRP_CODE_TBL_P,
28589       G_PRICE_FORMULA_ID_TBL_P,
28590       G_PRODUCT_PRECEDENCE_TBL_P,
28591       G_LIST_LINE_NO_TBL_P,
28592       G_QUALIFIER_TYPE_TBL_Q
28593      ,G_BREAK_UOM_TBL_P /* Proration */
28594      ,G_BREAK_CONTEXT_TBL_P /* Proration */
28595      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
28596       LIMIT nROWS;
28597 
28598     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28599 
28600     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
28601       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
28602         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
28603           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28604           engine_debug('Product_Qualifier');
28605           END IF;
28606           l_prod_qual_count := l_prod_qual_count + 1;
28607           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
28608 
28609           -- set attributes
28610           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
28611           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
28612           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
28613           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
28614           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
28615           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER';
28616           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
28617           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
28618           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
28619           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
28620           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
28621           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
28622           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUALIFIER';
28623           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
28624           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
28625           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
28626           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
28627           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
28628           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
28629           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
28630           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
28631           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28632           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28633           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
28634           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
28635           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
28636           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
28637           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
28638 
28639           M:=M+1;
28640           lq_line_index := G_LINE_INDEX_TBL_P(i);
28641           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
28642         end if;
28643 
28644         -- set product attributes
28645         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28646         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
28647         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
28648         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
28649         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
28650         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
28651         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
28652         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28653         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28654         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28655         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28656         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28657         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
28658         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
28659         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
28660         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28661         G_GROUPING_NUMBER_tbl(K)         :=NULL;
28662         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER';
28663         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28664         G_DATATYPE_tbl(K)                :=NULL;
28665         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
28666         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
28667         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
28668         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
28669         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
28670         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28671         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28672         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28673         K:= K+1;
28674         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28675         engine_debug('The value of K: ' || K);
28676 
28677         END IF;
28678         -- set qualifier attributes
28679         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28680         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
28681         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
28682         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
28683         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
28684         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
28685         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
28686         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28687         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28688         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28689         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28690         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
28691         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
28692         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
28693         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
28694         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
28695         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
28696         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER';
28697         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
28698         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
28699         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
28700         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
28701         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
28702         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
28703         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
28704         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
28705         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
28706         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
28707         K:= K+1;
28708         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28709         engine_debug('The value of K: ' || K);
28710 
28711         END IF;
28712       end loop;
28713     end if;
28714   END LOOP;
28715   qp_debug_util.tstop('L_PROD_QUAL_CUR');
28716 
28717   CLOSE l_prod_qual_cur;
28718 
28719   lq_line_index              := -9999;
28720   lq_list_line_id            := -9999;
28721 
28722   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28723        engine_debug('before l_prod_qual_pric_cur...');
28724   END IF;
28725 
28726   OPEN l_prod_qual_pric_cur(p_pricing_phase_id);
28727   qp_debug_util.tstart('L_PROD_QUAL_PRIC_CUR','Cursor Loop l_prod_qual_pric_cur');
28728   LOOP
28729     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
28730        deleted here.  There is no need to explicitly delete since BULK COLLECT
28731        will truncate the data before populating. */
28732 
28733     -- fetch into _P , _Q tables and _PR tables here
28734     FETCH l_prod_qual_pric_cur BULK COLLECT INTO
28735       G_LIST_HEADER_ID_TBL_P,
28736       G_LIST_LINE_ID_TBL_P,
28737       G_LIST_LINE_TYPE_TBL_P,
28738       G_LINE_INDEX_TBL_P,
28739       G_APPLIED_FLAG_TBL_P,
28740       G_ATTRIBUTE_LEVEL_TBL_P,
28741       G_ATTRIBUTE_TYPE_TBL_P,
28742       G_CONTEXT_TBL_P,
28743       G_ATTRIBUTE_TBL_P,
28744       G_VALUE_FROM_TBL_P,
28745       G_PRODUCT_UOM_CODE_TBL_P,
28746       G_EXCLUDER_FLAG_TBL_P,
28747       G_CONTEXT_TBL_Q,
28748       G_ATTRIBUTE_TBL_Q,
28749       G_VALUE_FROM_TBL_Q,
28750       G_GROUPING_NO_TBL_Q,
28751       G_QUALIFIER_PRECEDENCE_TBL_Q,
28752       G_DATATYPE_TBL_Q,
28753       G_SETUP_VALUE_FROM_TBL_Q,
28754       G_SETUP_VALUE_TO_TBL_Q,
28755       G_AUTOMATIC_FLAG_TBL_P,
28756       G_MODIFIER_LEVEL_CODE_TBL_P,
28757       G_PRIMARY_UOM_FLAG_TBL_P,
28758       G_OPER_CALCULATION_CODE_TBL_P,
28759       G_OPERAND_VALUE_TBL_P,
28760       G_PRICING_GROUP_SEQUENCE_TBL_P,
28761       G_LIST_TYPE_CODE_TBL_P,
28762       G_ROUNDING_FACTOR_TBL_P,
28763       G_PRICING_PHASE_ID_TBL_P,
28764       G_PRICE_BREAK_TYPE_CODE_TBL_P,
28765       G_INCOMP_GRP_CODE_TBL_P,
28766       G_PRICE_FORMULA_ID_TBL_P,
28767       G_PRODUCT_PRECEDENCE_TBL_P,
28768       G_LIST_LINE_NO_TBL_P,
28769       G_QUALIFIER_TYPE_TBL_Q ,
28770       G_ATTRIBUTE_LEVEL_TBL_PR,
28771       G_ATTRIBUTE_TYPE_TBL_PR,
28772       G_CONTEXT_TBL_PR,
28773       G_ATTRIBUTE_TBL_PR,
28774       G_VALUE_FROM_TBL_PR,
28775       G_SETUP_VALUE_FROM_TBL_PR,
28776       G_SETUP_VALUE_TO_TBL_PR,
28777       G_OPERATOR_TYPE_TBL_PR,
28778       G_DATATYPE_TBL_PR
28779      ,G_BREAK_UOM_TBL_P /* Proration */
28780      ,G_BREAK_CONTEXT_TBL_P /* Proration */
28781      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
28782       LIMIT nROWS;
28783     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28784 
28785     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
28786       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
28787         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
28788           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28789           engine_debug('Product_Qualifier_Pricing');
28790           END IF;
28791           l_prod_qual_count := l_prod_qual_count + 1;
28792           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
28793 
28794           -- set attributes
28795           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
28796           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
28797           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
28798           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
28799           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
28800           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_QUALIFIER_PRICING';
28801           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
28802           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
28803           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
28804           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
28805           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
28806           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
28807           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_QUALIFIER_PRICING';
28808           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
28809           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
28810           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
28811           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
28812           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
28813           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
28814           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
28815           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
28816           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28817           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28818           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
28819           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
28820           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
28821           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
28822           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
28823 
28824           M:=M+1;
28825           lq_line_index := G_LINE_INDEX_TBL_P(i);
28826           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
28827         end if;
28828 
28829         -- set product attributes
28830         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28831         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
28832         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
28833         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
28834         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
28835         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
28836         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
28837         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28838         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28839         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28840         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28841         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28842         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
28843         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
28844         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
28845         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
28846         G_GROUPING_NUMBER_tbl(K)         :=NULL;
28847         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING';
28848         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28849         G_DATATYPE_tbl(K)                :=NULL;
28850         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
28851         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
28852         G_QUALIFIER_TYPE_TBL(K)          :=G_QUALIFIER_TYPE_TBL_Q(i);
28853         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
28854         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
28855         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28856         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
28857         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
28858         K:= K+1;
28859         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28860         engine_debug('The value of K: ' || K);
28861 
28862         END IF;
28863         -- set qualifier attributes
28864         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
28865         G_ATTRIBUTE_LEVEL_tbl(K)         := nvl(G_ATTRIBUTE_LEVEL_TBL_P(i),'X');
28866         G_ATTRIBUTE_TYPE_tbl(K)          := G_QUALIFIER_TYPE;
28867         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_Q(i);
28868         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_Q(i);
28869         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_Q(i);
28870         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
28871         G_VALIDATED_FLAG_tbl(K)          := G_NO;
28872         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
28873         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
28874         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
28875         G_LINE_DETAIL_INDEX_tbl(K)       := L_LINE_DETAIL_INDEX;
28876         G_LIST_HEADER_ID_tbl(K)          := G_LIST_HEADER_ID_TBL_P(i);
28877         G_LIST_LINE_ID_tbl(K)            := G_LIST_LINE_ID_TBL_P(i);
28878         G_SETUP_VALUE_FROM_tbl(K)        := G_SETUP_VALUE_FROM_TBL_Q(i);
28879         G_SETUP_VALUE_TO_tbl(K)          := G_SETUP_VALUE_TO_TBL_Q(i);
28880         G_GROUPING_NUMBER_tbl(K)         := G_GROUPING_NO_TBL_Q(i);
28881         G_PRICING_STATUS_TEXT_tbl(K)     := 'PRODUCT_QUALIFIER_PRICING';
28882         G_QUALIFIER_PRECEDENCE_tbl(K)    := G_QUALIFIER_PRECEDENCE_TBL_Q(i);
28883         G_DATATYPE_tbl(K)                := G_DATATYPE_TBL_Q(i);
28884         G_EXCLUDER_FLAG_TBL(K)           := G_EXCLUDER_FLAG_TBL_P(i);
28885         G_PRODUCT_UOM_CODE_TBL(K)        := G_PRODUCT_UOM_CODE_TBL_P(i);
28886         G_QUALIFIER_TYPE_TBL(K)          := G_QUALIFIER_TYPE_TBL_Q(i);
28887         G_PRICING_PHASE_ID_TBL_A(K)      := G_PRICING_PHASE_ID_TBL_P(i);
28888         G_INCOMP_GRP_CODE_TBL_A(K)       := G_INCOMP_GRP_CODE_TBL_P(i);
28889         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) := 'NULL';
28890         G_MODIFIER_LEVEL_CODE_TBL_A(K)   := G_MODIFIER_LEVEL_CODE_TBL_P(i);
28891         G_PRIMARY_UOM_FLAG_TBL_A(K)      := G_PRIMARY_UOM_FLAG_TBL_P(i);
28892         K:= K+1;
28893 
28894         --set pricing attributes
28895         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
28896          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
28897          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
28898          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
28899          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
28900          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
28901          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
28902          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
28903          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
28904          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
28905          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
28906          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
28907          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
28908          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
28909          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
28910          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
28911          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
28912          G_GROUPING_NUMBER_tbl(K)         :=NULL;
28913          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_QUALIFIER_PRICING';
28914          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
28915          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
28916          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
28917          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
28918          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
28919          G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(I);
28920          G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(I);
28921          G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
28922          G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
28923          G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(I);
28924          K:= K+1;
28925        END IF;
28926        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28927        engine_debug('The value of K: ' || K);
28928 
28929        END IF;
28930       end loop;
28931     end if;
28932   END LOOP;
28933 
28934   qp_debug_util.tstop('L_PROD_QUAL_PRIC_CUR');
28935   CLOSE l_prod_qual_pric_cur;
28936 
28937   lq_line_index              := -9999;
28938   lq_list_line_id            := -9999;
28939 
28940   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28941        engine_debug('before l_prod_cur...');
28942   END IF;
28943 
28944   OPEN l_prod_cur(p_pricing_phase_id);
28945   qp_debug_util.tstart('L_PROD_CUR','Cursor Loop l_prod_cur');
28946   LOOP
28947     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
28948        deleted here.  There is no need to explicitly delete since BULK COLLECT
28949        will truncate the data before populating. */
28950 
28951     -- fetch into _P and _Q tables here
28952     FETCH l_prod_cur BULK COLLECT INTO
28953       G_LIST_HEADER_ID_TBL_P,
28954       G_LIST_LINE_ID_TBL_P,
28955       G_LIST_LINE_TYPE_TBL_P,
28956       G_LINE_INDEX_TBL_P,
28957       G_APPLIED_FLAG_TBL_P,
28958       G_ATTRIBUTE_LEVEL_TBL_P,
28959       G_ATTRIBUTE_TYPE_TBL_P,
28960       G_CONTEXT_TBL_P,
28961       G_ATTRIBUTE_TBL_P,
28962       G_VALUE_FROM_TBL_P,
28963       G_PRODUCT_UOM_CODE_TBL_P,
28964       G_EXCLUDER_FLAG_TBL_P,
28965       G_AUTOMATIC_FLAG_TBL_P,
28966       G_MODIFIER_LEVEL_CODE_TBL_P,
28967       G_PRIMARY_UOM_FLAG_TBL_P,
28968       G_OPER_CALCULATION_CODE_TBL_P,
28969       G_OPERAND_VALUE_TBL_P,
28970       G_PRICING_GROUP_SEQUENCE_TBL_P,
28971       G_LIST_TYPE_CODE_TBL_P,
28972       G_ROUNDING_FACTOR_TBL_P,
28973       G_PRICING_PHASE_ID_TBL_P,
28974       G_PRICE_BREAK_TYPE_CODE_TBL_P,
28975       G_INCOMP_GRP_CODE_TBL_P,
28976       G_PRICE_FORMULA_ID_TBL_P,
28977       G_PRODUCT_PRECEDENCE_TBL_P,
28978       G_LIST_LINE_NO_TBL_P
28979      ,G_BREAK_UOM_TBL_P /* Proration */
28980      ,G_BREAK_CONTEXT_TBL_P /* Proration */
28981      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
28982       LIMIT nROWS;
28983 
28984     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
28985 
28986     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
28987       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
28988         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
28989           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
28990           engine_debug('Product Only');
28991           END IF;
28992           l_prod_qual_count := l_prod_qual_count + 1;
28993           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
28994 
28995           -- set attributes
28996           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
28997           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
28998           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
28999           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
29000           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
29001           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_ONLY';
29002           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
29003           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
29004           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
29005           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
29006           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
29007           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
29008           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_ONLY';
29009           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
29010           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
29011           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
29012           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
29013           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
29014           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
29015           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
29016           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
29017           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
29018           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
29019           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
29020           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
29021           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
29022           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
29023           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
29024 
29025           M:=M+1;
29026           lq_line_index := G_LINE_INDEX_TBL_P(i);
29027           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
29028         end if;
29029 
29030         -- set product attributes
29031         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
29032         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
29033         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
29034         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
29035         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
29036         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
29037         G_COMPARISON_OPERATOR_TYPE_tbl(K):=NULL;
29038         G_VALIDATED_FLAG_tbl(K)          := G_NO;
29039         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
29040         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
29041         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
29042         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
29043         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
29044         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
29045         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
29046         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
29047         G_GROUPING_NUMBER_tbl(K)         :=NULL;
29048         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_ONLY';
29049         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
29050         G_DATATYPE_tbl(K)                :=NULL;
29051         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
29052         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
29053         G_QUALIFIER_TYPE_TBL(K)          :=NULL;
29054         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
29055         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
29056         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
29057         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
29058         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
29059         K:= K+1;
29060         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29061         engine_debug('The value of K: ' || K);
29062 
29063         END IF;
29064       end loop;
29065     end if;
29066   END LOOP;
29067   qp_debug_util.tstop('L_PROD_CUR');
29068   CLOSE l_prod_cur;
29069 
29070   lq_line_index              := -9999;
29071   lq_list_line_id            := -9999;
29072 
29073   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29074        engine_debug('before l_prod_pric_cur...');
29075   END IF;
29076   OPEN l_prod_pric_cur(p_pricing_phase_id);
29077 
29078   qp_debug_util.tstart('L_PROD_PRIC_CUR','Cursor Loop l_prod_pric_cur');
29079   LOOP
29080     /* 4331801/4365538: The PL/SQL tables used for BULK COLLECT were previously
29081        deleted here.  There is no need to explicitly delete since BULK COLLECT
29082        will truncate the data before populating. */
29083 
29084     -- fetch into _P , and  _PR tables here
29085     FETCH l_prod_pric_cur BULK COLLECT INTO
29086       G_LIST_HEADER_ID_TBL_P,
29087       G_LIST_LINE_ID_TBL_P,
29088       G_LIST_LINE_TYPE_TBL_P,
29089       G_LINE_INDEX_TBL_P,
29090       G_APPLIED_FLAG_TBL_P,
29091       G_ATTRIBUTE_LEVEL_TBL_P,
29092       G_ATTRIBUTE_TYPE_TBL_P,
29093       G_CONTEXT_TBL_P,
29094       G_ATTRIBUTE_TBL_P,
29095       G_VALUE_FROM_TBL_P,
29096       G_PRODUCT_UOM_CODE_TBL_P,
29097       G_EXCLUDER_FLAG_TBL_P,
29098       G_AUTOMATIC_FLAG_TBL_P,
29099       G_MODIFIER_LEVEL_CODE_TBL_P,
29100       G_PRIMARY_UOM_FLAG_TBL_P,
29101       G_OPER_CALCULATION_CODE_TBL_P,
29102       G_OPERAND_VALUE_TBL_P,
29103       G_PRICING_GROUP_SEQUENCE_TBL_P,
29104       G_LIST_TYPE_CODE_TBL_P,
29105       G_ROUNDING_FACTOR_TBL_P,
29106       G_PRICING_PHASE_ID_TBL_P,
29107       G_PRICE_BREAK_TYPE_CODE_TBL_P,
29108       G_INCOMP_GRP_CODE_TBL_P,
29109       G_PRICE_FORMULA_ID_TBL_P,
29110       G_PRODUCT_PRECEDENCE_TBL_P,
29111       G_LIST_LINE_NO_TBL_P,
29112       G_ATTRIBUTE_LEVEL_TBL_PR,
29113       G_ATTRIBUTE_TYPE_TBL_PR,
29114       G_CONTEXT_TBL_PR,
29115       G_ATTRIBUTE_TBL_PR,
29116       G_VALUE_FROM_TBL_PR,
29117       G_SETUP_VALUE_FROM_TBL_PR,
29118       G_SETUP_VALUE_TO_TBL_PR,
29119       G_OPERATOR_TYPE_TBL_PR,
29120       G_DATATYPE_TBL_PR
29121      ,G_BREAK_UOM_TBL_P /* Proration */
29122      ,G_BREAK_CONTEXT_TBL_P /* Proration */
29123      ,G_BREAK_ATTRIBUTE_TBL_P /* Proration */
29124       LIMIT nROWS;
29125     EXIT WHEN G_LINE_INDEX_TBL_P.COUNT = 0;
29126 
29127     if (G_LINE_INDEX_TBL_P.COUNT > 0) then
29128       for i in G_LINE_INDEX_TBL_P.FIRST .. G_LINE_INDEX_TBL_P.LAST loop
29129         if (lq_line_index <> G_LINE_INDEX_TBL_P(i) or lq_list_line_id <> G_LIST_LINE_ID_TBL_P(i)) then
29130           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29131           engine_debug('Product Pricing Only');
29132           END IF;
29133           l_prod_qual_count := l_prod_qual_count + 1;
29134           L_LINE_DETAIL_INDEX :=GET_LINE_DETAIL_INDEX;
29135 
29136           -- set attributes
29137           G_LINE_INDEX_LD_TBL(M)             :=G_LINE_INDEX_TBL_P(i);
29138           G_LINE_DETAIL_INDEX_LD_TBL(M)      :=L_LINE_DETAIL_INDEX;
29139           G_LIST_HEADER_ID_LD_TBL(M)         :=G_LIST_HEADER_ID_TBL_P(i);
29140           G_LIST_LINE_ID_LD_TBL(M)           :=G_LIST_LINE_ID_TBL_P(i);
29141           G_PRICING_STATUS_CODE_LD_TBL(M)    :=G_STATUS_NEW;
29142           G_PRICING_STATUS_TEXT_LD_TBL(M)    := 'PRODUCT_PRICING_ONLY';
29143           G_APPLIED_FLAG_LD_TBL(M)           :=G_AUTOMATIC_FLAG_TBL_P(i);
29144           G_PROCESSED_FLAG_LD_TBL(M)         :=G_NOT_PROCESSED;
29145           G_LINE_DETAIL_TYPE_CODE_TBL(M)     :='NULL';
29146           G_PRICE_BREAK_TYPE_CODE_TBL(M)     :=G_PRICE_BREAK_TYPE_CODE_TBL_P(i);
29147           G_LIST_LINE_TYPE_TBL(M)            :=G_LIST_LINE_TYPE_TBL_P(i);
29148           G_LIST_TYPE_CODE_TBL(M)            :=G_LIST_TYPE_CODE_TBL_P(i);
29149           G_CREATED_FROM_SQL_TBL(M)          :='PRODUCT_PRICING_ONLY';
29150           G_PRICING_GROUP_SEQUENCE_TBL(M)    :=G_PRICING_GROUP_SEQUENCE_TBL_P(i);
29151           G_PRICING_PHASE_ID_TBL(M)          :=G_PRICING_PHASE_ID_TBL_P(i);
29152           G_OPERAND_CALCULATION_CODE_TBL(M)  :=G_OPER_CALCULATION_CODE_TBL_P(i);
29153           G_OPERAND_VALUE_TBL(M)             :=G_OPERAND_VALUE_TBL_P(i);
29154           G_PRICE_FORMULA_ID_TBL(M)          :=G_PRICE_FORMULA_ID_TBL_P(i);
29155           G_PRODUCT_PRECEDENCE_TBL(M)        :=G_PRODUCT_PRECEDENCE_TBL_P(i);
29156           G_INCOMP_GRP_CODE_TBL(M)           :=G_INCOMP_GRP_CODE_TBL_P(i);
29157           G_AUTOMATIC_FLAG_TBL(M)            :=G_AUTOMATIC_FLAG_TBL_P(i);
29158           G_PRIMARY_UOM_FLAG_TBL(M)          :=G_PRIMARY_UOM_FLAG_TBL_P(i);
29159           G_MODIFIER_LEVEL_CODE_TBL(M)       :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
29160           G_LIST_LINE_NO_TBL(M)              :=G_LIST_LINE_NO_TBL_P(i);
29161           G_ROUNDING_FACTOR_TBL(M)           :=G_ROUNDING_FACTOR_TBL_P(i);
29162           G_BREAK_UOM_TBL(M)                 := G_BREAK_UOM_TBL_P(i); /* Proration */
29163           G_BREAK_CONTEXT_TBL(M)             := G_BREAK_CONTEXT_TBL_P(i); /* Proration */
29164           G_BREAK_ATTRIBUTE_TBL(M)           := G_BREAK_ATTRIBUTE_TBL_P(i); /* Proration */
29165 
29166           M:=M+1;
29167           lq_line_index := G_LINE_INDEX_TBL_P(i);
29168           lq_list_line_id := G_LIST_LINE_ID_TBL_P(i);
29169         end if;
29170 
29171         -- set product attributes
29172         G_LINE_INDEX_tbl(K)              := G_LINE_INDEX_TBL_P(i);
29173         G_ATTRIBUTE_LEVEL_tbl(K)         := G_ATTRIBUTE_LEVEL_TBL_P(i);
29174         G_ATTRIBUTE_TYPE_tbl(K)          := G_ATTRIBUTE_TYPE_TBL_P(i);
29175         G_CONTEXT_tbl(K)                 := G_CONTEXT_TBL_P(i);
29176         G_ATTRIBUTE_tbl(K)               := G_ATTRIBUTE_TBL_P(i);
29177         G_VALUE_FROM_tbl(K)              := G_VALUE_FROM_TBL_P(i);
29178         G_COMPARISON_OPERATOR_TYPE_tbl(K):= NULL;
29179         G_VALIDATED_FLAG_tbl(K)          := G_NO;
29180         G_APPLIED_FLAG_tbl(K)            := G_APPLIED_FLAG_TBL_P(i);
29181         G_PRICING_STATUS_CODE_tbl(K)     := G_STATUS_NEW;
29182         G_PRICING_ATTR_FLAG_tbl(K)       := G_NO;
29183         G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
29184         G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(i);
29185         G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(i);
29186         G_SETUP_VALUE_FROM_tbl(K)        :=NULL;
29187         G_SETUP_VALUE_TO_tbl(K)          :=NULL;
29188         G_GROUPING_NUMBER_tbl(K)         :=NULL;
29189         G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
29190         G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
29191         G_DATATYPE_tbl(K)                :=NULL;
29192         G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(i);
29193         G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(i);
29194         G_QUALIFIER_TYPE_TBL(K)          :=NULL;
29195         G_PRICING_PHASE_ID_TBL_A(K)      :=G_PRICING_PHASE_ID_TBL_P(i);
29196         G_INCOMP_GRP_CODE_TBL_A(K)       :=G_INCOMP_GRP_CODE_TBL_P(i);
29197         G_LINE_DETAIL_TYPE_CODE_TBL_A(K) :='NULL';
29198         G_MODIFIER_LEVEL_CODE_TBL_A(K)   :=G_MODIFIER_LEVEL_CODE_TBL_P(i);
29199         G_PRIMARY_UOM_FLAG_TBL_A(K)      :=G_PRIMARY_UOM_FLAG_TBL_P(i);
29200         K:= K+1;
29201         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29202         engine_debug('The value of K: ' || K);
29203 
29204         END IF;
29205         --set pricing attributes
29206         IF (G_CONTEXT_TBL_PR(I) IS NOT NULL) THEN
29207          G_LINE_INDEX_tbl(K)              :=G_LINE_INDEX_TBL_P(I);
29208          G_ATTRIBUTE_LEVEL_tbl(K)         :=G_ATTRIBUTE_LEVEL_TBL_PR(I);
29209          G_ATTRIBUTE_TYPE_tbl(K)          :=G_ATTRIBUTE_TYPE_TBL_PR(I);
29210          G_CONTEXT_tbl(K)                 :=G_CONTEXT_TBL_PR(I);
29211          G_ATTRIBUTE_tbl(K)               :=G_ATTRIBUTE_TBL_PR(I);
29212          G_VALUE_FROM_tbl(K)              :=G_VALUE_FROM_TBL_PR(I);
29213          G_COMPARISON_OPERATOR_TYPE_tbl(K):=G_OPERATOR_TYPE_TBL_PR(I);
29214          G_VALIDATED_FLAG_tbl(K)          :=G_NO;
29215          G_APPLIED_FLAG_tbl(K)            :=G_APPLIED_FLAG_TBL_P(I);
29216          G_PRICING_STATUS_CODE_tbl(K)     :=G_STATUS_NEW;
29217          G_PRICING_ATTR_FLAG_tbl(K)       :=G_YES;
29218          G_LINE_DETAIL_INDEX_tbl(K)       :=L_LINE_DETAIL_INDEX;
29219          G_LIST_HEADER_ID_tbl(K)          :=G_LIST_HEADER_ID_TBL_P(I);
29220          G_LIST_LINE_ID_tbl(K)            :=G_LIST_LINE_ID_TBL_P(I);
29221          G_SETUP_VALUE_FROM_tbl(K)        :=G_SETUP_VALUE_FROM_TBL_PR(I);
29222          G_SETUP_VALUE_TO_tbl(K)          :=G_SETUP_VALUE_TO_TBL_PR(I);
29223          G_GROUPING_NUMBER_tbl(K)         :=NULL;
29224          G_PRICING_STATUS_TEXT_tbl(K)     :='PRODUCT_PRICING_ONLY';
29225          G_QUALIFIER_PRECEDENCE_tbl(K)    :=NULL;
29226          G_DATATYPE_tbl(K)                :=G_DATATYPE_TBL_PR(I);
29227          G_EXCLUDER_FLAG_TBL(K)           :=G_EXCLUDER_FLAG_TBL_P(I);
29228          G_PRODUCT_UOM_CODE_TBL(K)        :=G_PRODUCT_UOM_CODE_TBL_P(I);
29229          G_QUALIFIER_TYPE_TBL(K)          :=NULL;
29230          G_PRICING_PHASE_ID_TBL_A(K)        :=G_PRICING_PHASE_ID_TBL_P(I);
29231          G_INCOMP_GRP_CODE_TBL_A(K)         :=G_INCOMP_GRP_CODE_TBL_P(I);
29232          G_LINE_DETAIL_TYPE_CODE_TBL_A(K)   :='NULL';
29233          G_MODIFIER_LEVEL_CODE_TBL_A(K)     :=G_MODIFIER_LEVEL_CODE_TBL_P(I);
29234          G_PRIMARY_UOM_FLAG_TBL_A(K)        :=G_PRIMARY_UOM_FLAG_TBL_P(I);
29235          K:= K+1;
29236        END IF;
29237        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29238        engine_debug('The value of K: ' || K);
29239 
29240        END IF;
29241       end loop;
29242     end if;
29243   END LOOP;
29244 
29245   qp_debug_util.tstop('L_PROD_PRIC_CUR');
29246   CLOSE l_prod_pric_cur;
29247 
29248 --END IF;
29249 end if; -- vivek, multi currency installed
29250 
29251 IF M > 1 THEN
29252  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
29253   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29254   engine_debug('last 4 cursors- multi-currency TRUE - insert_ldets2');
29255   END IF;
29256   INSERT_LDETS_PRICE_LIST_MULT(
29257                  p_LINE_DETAIL_INDEX      => G_LINE_DETAIL_INDEX_LD_TBL,
29258                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
29259                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
29260                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
29261                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
29262                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
29263                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
29264                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
29265                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
29266                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
29267                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
29268                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
29269                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
29270                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
29271                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
29272                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
29273                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
29274                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
29275                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
29276                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
29277                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
29278                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
29279                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
29280                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
29281                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
29282                  p_CURRENCY_DETAIL_ID           =>G_CURRENCY_DETAIL_ID_TBL,
29283                  p_CURRENCY_HEADER_ID           =>G_CURRENCY_HEADER_ID_TBL,
29284                  p_SELLING_ROUNDING_FACTOR      =>G_SELLING_ROUNDING_TBL,
29285                  p_ORDER_CURRENCY               =>G_ORDER_CURRENCY_TBL,
29286                  p_PRICING_EFFECTIVE_DATE       =>G_PRICING_EFFECTIVE_DATE_TBL,
29287                  p_BASE_CURRENCY_CODE           =>G_BASE_CURRENCY_CODE_TBL,
29288                  P_BREAK_UOM_CODE               =>G_BREAK_UOM_TBL, /* Proration */
29289                  P_BREAK_UOM_CONTEXT            =>G_BREAK_CONTEXT_TBL, /* Proration */
29290                  P_BREAK_UOM_ATTRIBUTE          =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
29291                  x_status_code                  =>l_status_code,
29292                  x_status_text                  =>l_status_text);
29293  else -- vivek, multi currency not installed, not used
29294   INSERT_LDETS_PRICE_LIST_PVT( p_LINE_DETAIL_index      => G_LINE_DETAIL_INDEX_LD_TBL,
29295                  p_LINE_DETAIL_TYPE_CODE  => G_LINE_DETAIL_TYPE_CODE_TBL,
29296                  p_PRICE_BREAK_TYPE_CODE  => G_PRICE_BREAK_TYPE_CODE_TBL,
29297                  p_LINE_INDEX             => G_LINE_INDEX_LD_TBL,
29298                  p_CREATED_FROM_LIST_HEADER_ID  =>G_LIST_HEADER_ID_LD_TBL,
29299                  p_CREATED_FROM_LIST_LINE_ID    =>G_LIST_LINE_ID_LD_TBL,
29300                  p_CREATED_FROM_LIST_LINE_TYPE  =>G_LIST_LINE_TYPE_TBL,
29301                  p_CREATED_FROM_LIST_TYPE_CODE  =>G_LIST_TYPE_CODE_TBL,
29302                  p_CREATED_FROM_SQL             =>G_CREATED_FROM_SQL_TBL,
29303                  p_PRICING_GROUP_SEQUENCE       =>G_PRICING_GROUP_SEQUENCE_TBL,
29304                  P_PRICING_PHASE_ID             =>G_PRICING_PHASE_ID_TBL,
29305                  p_OPERAND_CALCULATION_CODE     =>G_OPERAND_CALCULATION_CODE_TBL,
29306                  p_OPERAND_VALUE                =>G_OPERAND_VALUE_TBL,
29307                  p_PRICE_FORMULA_ID             =>G_PRICE_FORMULA_ID_TBL,
29308                  p_PRICING_STATUS_CODE          =>G_PRICING_STATUS_CODE_LD_TBL,
29309                  p_PRICING_STATUS_TEXT          =>G_PRICING_STATUS_TEXT_LD_TBL,
29310                  p_PRODUCT_PRECEDENCE           =>G_PRODUCT_PRECEDENCE_TBL ,
29311                  p_INCOMPATABLILITY_GRP_CODE    =>G_INCOMP_GRP_CODE_TBL,
29312                  p_PROCESSED_FLAG               =>G_PROCESSED_FLAG_LD_TBL,
29313                  p_APPLIED_FLAG                 =>G_APPLIED_FLAG_LD_TBL,
29314                  p_AUTOMATIC_FLAG               =>G_AUTOMATIC_FLAG_TBL,
29315                  p_PRIMARY_UOM_FLAG             =>G_PRIMARY_UOM_FLAG_TBL,
29316                  p_MODIFIER_LEVEL_CODE          =>G_MODIFIER_LEVEL_CODE_TBL,
29317                  p_LIST_LINE_NO                 =>G_LIST_LINE_NO_TBL,
29318                  p_ROUNDING_FACTOR              =>G_ROUNDING_FACTOR_TBL,
29319                  P_BREAK_UOM_CODE               =>G_BREAK_UOM_TBL, /* Proration */
29320                  P_BREAK_UOM_CONTEXT            =>G_BREAK_CONTEXT_TBL, /* Proration */
29321                  P_BREAK_UOM_ATTRIBUTE          =>G_BREAK_ATTRIBUTE_TBL, /* Proration */
29322                  x_status_code                  =>l_status_code,
29323                  x_status_text                  =>l_status_text
29324                  );
29325  end if; -- vivek, multi currency installed
29326 
29327 END IF;
29328 
29329 IF K > 1 THEN
29330    INSERT_PRICE_LIST_ATTRS
29331    (    p_LINE_INDEX_tbl         =>G_LINE_INDEX_tbl,
29332         p_LINE_DETAIL_INDEX_tbl  =>G_LINE_DETAIL_INDEX_tbl,
29333         p_ATTRIBUTE_LEVEL_tbl    =>G_ATTRIBUTE_LEVEL_tbl,
29334         p_ATTRIBUTE_TYPE_tbl     =>G_ATTRIBUTE_TYPE_tbl,
29335         p_LIST_HEADER_ID_tbl     =>G_LIST_HEADER_ID_tbl,
29336         p_LIST_LINE_ID_tbl       =>G_LIST_LINE_ID_tbl,
29337         p_CONTEXT_tbl            =>G_CONTEXT_tbl,
29338         p_ATTRIBUTE_tbl          =>G_ATTRIBUTE_tbl,
29339         p_VALUE_FROM_tbl         =>G_VALUE_FROM_tbl,
29340         p_SETUP_VALUE_FROM_tbl   =>G_SETUP_VALUE_FROM_tbl,
29341         p_SETUP_VALUE_TO_tbl     =>G_SETUP_VALUE_TO_tbl,
29342         p_GROUPING_NUMBER_tbl    => G_GROUPING_NUMBER_tbl,
29343         p_COMPARISON_OPERATOR_TYPE_tbl  =>G_COMPARISON_OPERATOR_TYPE_tbl,
29344         p_VALIDATED_FLAG_tbl            =>G_VALIDATED_FLAG_tbl,
29345         p_APPLIED_FLAG_tbl              =>G_APPLIED_FLAG_tbl,
29346         p_PRICING_STATUS_CODE_tbl       =>G_PRICING_STATUS_CODE_tbl,
29347         p_PRICING_STATUS_TEXT_tbl       =>G_PRICING_STATUS_TEXT_tbl,
29348         p_QUALIFIER_PRECEDENCE_tbl      =>G_QUALIFIER_PRECEDENCE_tbl,
29349         p_DATATYPE_tbl                  =>G_DATATYPE_tbl,
29350         p_PRICING_ATTR_FLAG_tbl         =>G_PRICING_ATTR_FLAG_tbl,
29351         p_QUALIFIER_TYPE_tbl            =>G_QUALIFIER_TYPE_TBL,
29352         p_product_uom_code_tbl          =>G_PRODUCT_UOM_CODE_TBL,
29353         p_excluder_flag_tbl             =>G_EXCLUDER_FLAG_TBL,
29354         p_PRICING_PHASE_ID_TBL          =>G_PRICING_PHASE_ID_TBL_A,
29355         p_INCOMPATABILITY_GRP_CODE_TBL  =>G_INCOMP_GRP_CODE_TBL_A,
29356         p_LINE_DETAIL_TYPE_CODE_TBL     =>G_LINE_DETAIL_TYPE_CODE_TBL_A,
29357         p_MODIFIER_LEVEL_CODE_TBL       =>G_MODIFIER_LEVEL_CODE_TBL_A,
29358         p_PRIMARY_UOM_FLAG_TBL          =>G_PRIMARY_UOM_FLAG_TBL_A,
29359         x_status_code                   =>l_status_code,
29360         x_status_text                   =>l_status_text);
29361 END IF;
29362 
29363 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
29364  RAISE E_ROUTINE_ERRORS;
29365 END IF;
29366 
29367 --Reset_all_tbls;
29368 Reset_All_Tbls(l_status_code ,l_status_text );
29369 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
29370  RAISE E_ROUTINE_ERRORS;
29371 END IF;
29372 
29373 EXCEPTION
29374   WHEN E_ROUTINE_ERRORS THEN
29375     x_status_code := FND_API.G_RET_STS_ERROR;
29376     x_status_text := l_routine||': '||l_status_text;
29377   WHEN OTHERS THEN
29378       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29379       engine_debug('< In Select_Price_List_Lines>: '||SQLERRM);
29380       -- Keep it for debugging purposes
29381       /*
29382 FOR Z In 1 .. G_LIST_HEADER_ID_TBL_P.count
29383 Loop
29384 engine_debug(  '--------');
29385 engine_debug(  'Z: '||Z);
29386 engine_debug(  'G_LIST_HEADER_ID_TBL_P: ' || G_LIST_HEADER_ID_TBL_P(Z));
29387 engine_debug(  'G_LIST_LINE_ID_TBL_P: ' || G_LIST_LINE_ID_TBL_P(Z));
29388 engine_debug(  'G_LINE_INDEX_TBL_P: ' || G_LINE_INDEX_TBL_P(Z));
29389 engine_debug(  'G_APPLIED_FLAG_TBL_P: ' || G_APPLIED_FLAG_TBL_P(Z)  );
29390 engine_debug(  'G_ATTRIBUTE_LEVEL_TBL_P: ' || G_ATTRIBUTE_LEVEL_TBL_P(Z));
29391 engine_debug(  'G_ATTRIBUTE_TYPE_TBL_P: ' || G_ATTRIBUTE_TYPE_TBL_P(Z) );
29392 engine_debug(  'G_CONTEXT_TBL_P: ' ||G_CONTEXT_TBL_P(Z) );
29393 engine_debug(  'G_ATTRIBUTE_TBL_P: ' || G_ATTRIBUTE_TBL_P(Z));
29394 engine_debug(  'G_VALUE_FROM_TBL_P: ' || G_VALUE_FROM_TBL_P(Z));
29395 engine_debug(  'G_PRODUCT_UOM_CODE_TBL_P: ' || G_PRODUCT_UOM_CODE_TBL_P(Z));
29396 engine_debug(  'G_EXCLUDER_FLAG_TBL_P: ' || G_EXCLUDER_FLAG_TBL_P(Z));
29397 engine_debug(  'G_CONTEXT_TBL_Q: ' || G_CONTEXT_TBL_Q(Z));
29398 engine_debug(  'G_ATTRIBUTE_TBL_Q: ' || G_ATTRIBUTE_TBL_Q(Z));
29399 engine_debug(  'G_VALUE_FROM_TBL_Q: ' ||G_VALUE_FROM_TBL_Q(Z));
29400 engine_debug(  'G_GROUPING_NO_TBL_Q: ' || G_GROUPING_NO_TBL_Q(Z));
29401 engine_debug(  'G_QUALIFIER_PRECEDENCE_TBL_Q: ' || G_QUALIFIER_PRECEDENCE_TBL_Q(Z));
29402 engine_debug(  'G_DATATYPE_TBL_Q: ' || G_DATATYPE_TBL_Q(Z));
29403 engine_debug(  'G_SETUP_VALUE_FROM_TBL_Q: ' || G_SETUP_VALUE_FROM_TBL_Q(Z));
29404 engine_debug(  'G_SETUP_VALUE_TO_TBL_Q: ' || G_SETUP_VALUE_TO_TBL_Q(Z));
29405 engine_debug(  'G_AUTOMATIC_FLAG_TBL_P: ' || G_AUTOMATIC_FLAG_TBL_P(Z));
29406 engine_debug(  'G_MODIFIER_LEVEL_CODE_TBL_P: ' || G_MODIFIER_LEVEL_CODE_TBL_P(Z) );
29407 engine_debug(  'G_PRIMARY_UOM_FLAG_TBL_P: ' || G_PRIMARY_UOM_FLAG_TBL_P(Z));
29408 engine_debug(  'G_OPER_CALCULATION_CODE_TBL_P: ' || G_OPER_CALCULATION_CODE_TBL_P(Z));
29409 engine_debug(  'G_OPERAND_VALUE_TBL_P: ' || G_OPERAND_VALUE_TBL_P(Z));
29410 engine_debug(  'G_PRICING_GROUP_SEQUENCE_TBL_P: ' || G_PRICING_GROUP_SEQUENCE_TBL_P(Z));
29411 engine_debug(  'G_LIST_TYPE_CODE_TBL_P: ' || G_LIST_TYPE_CODE_TBL_P(Z));
29412 engine_debug(  'G_ROUNDING_FACTOR_TBL_P: ' || G_ROUNDING_FACTOR_TBL_P(Z));
29413 engine_debug(  'G_PRICING_PHASE_ID_TBL_P: ' || G_PRICING_PHASE_ID_TBL_P(Z));
29414 engine_debug(  'G_PRICE_BREAK_TYPE_CODE_TBL_P: ' || G_PRICE_BREAK_TYPE_CODE_TBL_P(Z));
29415 engine_debug(  'G_INCOMP_GRP_CODE_TBL_P: ' || G_INCOMP_GRP_CODE_TBL_P(Z));
29416 engine_debug(  'G_PRICE_FORMULA_ID_TBL_P: ' || G_PRICE_FORMULA_ID_TBL_P(Z));
29417 engine_debug(  'G_PRODUCT_PRECEDENCE_TBL_P: ' || G_PRODUCT_PRECEDENCE_TBL_P(Z));
29418 engine_debug(  'G_LIST_LINE_NO_TBL_P: ' || G_LIST_LINE_NO_TBL_P(Z));
29419 engine_debug(  'G_QUALIFIER_TYPE_TBL_Q: ' || G_QUALIFIER_TYPE_TBL_Q(Z));
29420 engine_debug(  'G_CURRENCY_DETAIL_ID_TBL_P: ' || G_CURRENCY_DETAIL_ID_TBL_P(Z));
29421 engine_debug(  'G_CURRENCY_HEADER_ID_TBL_P: ' || G_CURRENCY_HEADER_ID_TBL_P(Z));
29422 engine_debug(  'G_SELLING_ROUNDING_TBL_P: ' || G_SELLING_ROUNDING_TBL_P(Z));
29423 engine_debug(  'G_ORDER_CURRENCY_TBL_P: ' || G_ORDER_CURRENCY_TBL_P(Z));
29424 engine_debug(  'G_PRICING_EFFECTIVE_DATE_TBL_P: ' || G_PRICING_EFFECTIVE_DATE_TBL_P(Z));
29425 engine_debug(  'G_BASE_CURRENCY_CODE_TBL_P: ' ||G_BASE_CURRENCY_CODE_TBL_P(Z));
29426 
29427 End Loop;
29428 */
29429       END IF;
29430       x_status_code := FND_API.G_RET_STS_ERROR;
29431       x_status_text := l_routine||': '||SQLERRM;
29432 END SELECT_PRICE_LIST_LINES;
29433 
29434 /*+------------------------------------------------------------
29435   |CREATE_QUALIFIER_FROM_LIST
29436   |We need to make the list we selected from previous phase
29437   |to become qualifier
29438   |because price list might be a qualifier for a discount or promotion
29439   +------------------------------------------------------------
29440 */
29441 
29442 PROCEDURE Create_Qualifier_From_List( x_status_code OUT NOCOPY VARCHAR2,
29443                                       x_status_text OUT NOCOPY VARCHAR2)
29444 AS
29445 v_error_code VARCHAR2(240);
29446 v_error_message VARCHAR2(240);
29447 l_attribute VARCHAR2(240);
29448 l_context VARCHAR2(240);
29449 l_status_code VARCHAR2(30);
29450 l_status_text VARCHAR2(240);
29451 K PLS_INTEGER:= 1;
29452 
29453 --We don't want to create a new list which is already passed in as qualifiers
29454 --on previous phase.
29455 /*
29456 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_line_index_cur,- No Index Used -,NA,NA
29457 */
29458 CURSOR l_get_line_index_cur IS
29459 SELECT line_index
29460 FROM   qp_npreq_lines_tmp
29461 WHERE  line_type_code <> G_ORDER_LEVEL;
29462 
29463 /*
29464 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_modlist_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
29465 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_modlist_cur,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,2
29466 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_modlist_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,3
29467 
29468 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
29469 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
29470 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
29471 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
29472 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
29473 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
29474 */
29475 --check if passed in price list indeed has qualified
29476 CURSOR l_check_modlist_cur(p_line_index IN PLS_INTEGER) IS
29477 SELECT /*+ ORDERED index(qplat qp_preq_line_attrs_tmp_n2) l_check_modlist_cur */ 'X'
29478 FROM   qp_npreq_ldets_tmp qpld,
29479        qp_npreq_line_attrs_tmp qplat
29480 WHERE  qpld.line_index = p_line_index
29481 AND    qpld.pricing_phase_id = G_PRICE_LIST_PHASE_ID
29482 AND    qpld.pricing_status_code = G_STATUS_NEW
29483 AND    qplat.line_index = qpld.line_index
29484 AND    qplat.pricing_status_code = G_STATUS_UNCHANGED
29485 AND    qplat.attribute_type = 'QUALIFIER'
29486 AND    qplat.context = 'MODLIST'
29487 AND    qplat.attribute = 'QUALIFIER_ATTRIBUTE4'
29488 AND    qplat.value_from = TO_CHAR(qpld.created_from_list_header_id);
29489 
29490 -- find line_index(s) whose passed-in price list has not been qualified
29491 CURSOR l_check_no_modlist_cur IS
29492 SELECT /*+ index(qpll QP_PREQ_LINES_TMP_N2) */ qpll.line_index
29493 FROM   qp_npreq_lines_tmp qpll
29494 WHERE  qpll.line_type_code <> G_ORDER_LEVEL
29495 AND    NOT EXISTS (
29496                    SELECT /*+ ORDERED index(qpld QP_PREQ_LDETS_TMP_N1) index(qplat qp_preq_line_attrs_tmp_n2) l_check_modlist_cur */ 'X'
29497                    FROM   qp_npreq_ldets_tmp qpld,
29498                           qp_npreq_line_attrs_tmp qplat
29499                    WHERE  qpld.line_index = qpll.line_index
29500                    AND    qpld.pricing_phase_id = G_PRICE_LIST_PHASE_ID
29501                    AND    qpld.pricing_status_code = G_STATUS_NEW
29502                    AND    qplat.line_index = qpld.line_index
29503                    AND    qplat.pricing_status_code = G_STATUS_UNCHANGED
29504                    AND    qplat.attribute_type = 'QUALIFIER'
29505                    AND    qplat.context = 'MODLIST'
29506                    AND    qplat.attribute = 'QUALIFIER_ATTRIBUTE4'
29507                    AND    qplat.value_from = TO_CHAR(qpld.created_from_list_header_id));
29508 
29509 /*
29510 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
29511 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
29512 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
29513 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
29514 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_check_exists_modlist_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
29515 */
29516 --check if there is a modlist passed
29517 CURSOR l_check_modlist_exists_cur(p_line_index IN PLS_INTEGER) IS
29518        SELECT ROWID
29519        FROM qp_npreq_line_attrs_tmp
29520        WHERE pricing_status_code = G_STATUS_UNCHANGED
29521        AND   attribute_type = 'QUALIFIER'
29522        AND   context = 'MODLIST'
29523        AND   attribute ='QUALIFIER_ATTRIBUTE4'
29524        AND   line_index = p_line_index
29525        AND   ROWNUM = 1;  --just one record need to be returned
29526 
29527 /*
29528 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
29529 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
29530 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
29531 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
29532 INDX,QP_PREQ_GRP.create_qualifier_from_list.l_get_pl_cur,qp_npreq_ldets_tmp_N3,PRICING_STATUS_CODE,5
29533 */
29534 CURSOR l_get_pl_cur(p_line_index IN PLS_INTEGER) IS
29535 SELECT created_from_list_header_id
29536 FROM   qp_npreq_ldets_tmp
29537 WHERE  line_index = p_line_index
29538 and    created_from_list_line_type in (G_PRICE_LIST_TYPE,G_BY_PBH) -- Bug#2882115
29539 and    pricing_status_code = G_STATUS_NEW
29540 and    pricing_phase_id = G_PRICE_LIST_PHASE_ID;
29541 
29542 
29543 l_dummy VARCHAR2(1);
29544 l_rowid ROWID;
29545 l_list_header_id NUMBER;
29546 
29547 l_routine VARCHAR2(30) := 'Create_Qualifier_From_List';
29548 
29549 E_ROUTINE_ERRORS            EXCEPTION;
29550 
29551 l_line_index_tbl NUMBER_TYPE;
29552 
29553 -- julin [3805113]: tables for bulk insert/update
29554 A PLS_INTEGER:=1;
29555 l_a_list_header_id_tbl NUMBER_TYPE;
29556 l_a_line_index_tbl NUMBER_TYPE;
29557 
29558 B PLS_INTEGER:=1;
29559 l_b_list_header_id_tbl NUMBER_TYPE;
29560 l_b_rowid_tbl ROWID_TYPE;
29561 
29562 C PLS_INTEGER:=1;
29563 l_c_line_index_tbl NUMBER_TYPE;
29564 l_c_g_line_level_tbl VARCHAR_30_TYPE;
29565 l_c_G_QUALIFIER_TYPE_tbl VARCHAR_30_TYPE;
29566 l_c_G_LIST_HEADER_CONTEXT_tbl VARCHAR_30_TYPE;
29567 l_c_QUALIFIER_ATTRIBUTE4_tbl VARCHAR_30_TYPE;
29568 l_c_list_header_id_tbl NUMBER_TYPE;
29569 l_c_G_VALIDATED_tbl VARCHAR_30_TYPE;
29570 l_c_G_LIST_APPLIED_tbl VARCHAR_30_TYPE;
29571 l_c_G_STATUS_UNCHANGED_tbl VARCHAR_30_TYPE;
29572 l_c_PRICING_STATUS_TEXT_tbl VARCHAR_TYPE;
29573 
29574 
29575 BEGIN
29576 
29577   --po integration start
29578   UPDATE qp_npreq_lines_tmp a
29579   SET    pricing_status_code = G_STATUS_UPDATED
29580   Where    list_price_override_flag in ('Y', 'O')  --po integration
29581   AND   line_type_code <> G_ORDER_LEVEL;
29582   --po integration end
29583 
29584   -- julin [3805113]: using bulk collect and update
29585   OPEN l_check_no_modlist_cur;
29586   LOOP
29587     FETCH l_check_no_modlist_cur BULK COLLECT INTO
29588       l_line_index_tbl
29589       LIMIT G_BATCH_SIZE;
29590     EXIT WHEN l_line_index_tbl.count = 0;
29591 
29592     l_a_list_header_id_tbl.delete;
29593     l_a_line_index_tbl.delete;
29594 
29595     l_b_list_header_id_tbl.delete;
29596     l_b_rowid_tbl.delete;
29597 
29598     l_c_line_index_tbl.delete;
29599     l_c_g_line_level_tbl.delete;
29600     l_c_G_QUALIFIER_TYPE_tbl.delete;
29601     l_c_G_LIST_HEADER_CONTEXT_tbl.delete;
29602     l_c_QUALIFIER_ATTRIBUTE4_tbl.delete;
29603     l_c_list_header_id_tbl.delete;
29604     l_c_G_VALIDATED_tbl.delete;
29605     l_c_G_LIST_APPLIED_tbl.delete;
29606     l_c_G_STATUS_UNCHANGED_tbl.delete;
29607     l_c_PRICING_STATUS_TEXT_tbl.delete;
29608 
29609   /*FOR i in p_price_list_id_tbl.FIRST .. p_price_list_id_tbl.LAST
29610   LOOP
29611 
29612         OPEN l_check_modlist_cur(l_line_index_tbl(I));
29613         FETCH l_check_modlist_cur INTO l_dummy;
29614         IF l_check_modlist_cur%NOTFOUND THEN
29615   */
29616 
29617     FOR I in l_line_index_tbl.FIRST .. l_line_index_tbl.LAST
29618     LOOP
29619            OPEN l_check_modlist_exists_cur(l_line_index_tbl(I));
29620            FETCH l_check_modlist_exists_cur INTO l_rowid;
29621 
29622            OPEN l_get_pl_cur(l_line_index_tbl(I));
29623            FETCH l_get_pl_cur into l_list_header_id;
29624            CLOSE l_get_pl_cur;
29625 
29626            -- Update the order line with the secondary price list id(for OM displaying purposes)
29627           IF (l_list_header_id IS NOT NULL) THEN
29628             l_a_list_header_id_tbl(A) := l_list_header_id;
29629             l_a_line_index_tbl(A) := l_line_index_tbl(I);
29630             A := A + 1;
29631           END IF;
29632 
29633            IF l_check_modlist_exists_cur%FOUND THEN
29634              --OPEN l_get_pl_cur(l_line_index_tbl(I));
29635              --FETCH l_get_pl_cur into l_list_header_id;
29636              --CLOSE l_get_pl_cur;
29637 
29638              IF (l_list_header_id IS NOT NULL) THEN
29639                l_b_list_header_id_tbl(B) := l_list_header_id;
29640                l_b_rowid_tbl(B) := l_rowid;
29641                B := B + 1;
29642              END IF;
29643 
29644            ELSE
29645              --FOR J IN  l_get_pl_cur(l_line_index_tbl(I)) LOOP
29646               IF (l_list_header_id IS NOT NULL) THEN
29647                 l_c_line_index_tbl(C) := L_LINE_INDEX_TBL(I);
29648                 l_c_g_line_level_tbl(C) := G_LINE_LEVEL;
29649                 l_c_g_qualifier_type_tbl(C) := G_QUALIFIER_TYPE;
29650                 l_c_g_list_header_context_tbl(C) := G_LIST_HEADER_CONTEXT;
29651                 l_c_qualifier_attribute4_tbl(C) := 'QUALIFIER_ATTRIBUTE4';
29652                 l_c_list_header_id_tbl(C) := l_list_header_id;
29653                 l_c_g_validated_tbl(C) := G_VALIDATED;
29654                 l_c_g_list_applied_tbl(C) := G_LIST_APPLIED;
29655                 l_c_g_status_unchanged_tbl(C) := G_STATUS_UNCHANGED;
29656                 l_c_pricing_status_text_tbl(C) := 'Inserted by Create_Qualifier_From_List';
29657                 C := C + 1;
29658              --END LOOP;
29659               END IF;
29660            END IF;
29661            CLOSE l_check_modlist_exists_cur;
29662         --END IF;
29663         --CLOSE l_check_modlist_cur;
29664 
29665      IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
29666         RAISE E_ROUTINE_ERRORS;
29667      END IF;
29668      l_list_header_id := null;  -- Bug No: 7323621
29669     END LOOP;
29670 
29671   -- julin [3805113]: bulk update
29672   IF (l_a_list_header_id_tbl.COUNT > 0) THEN
29673     FORALL I IN l_a_list_header_id_tbl.first..l_a_list_header_id_tbl.last
29674       UPDATE qp_npreq_lines_tmp
29675       SET price_list_header_id = l_a_list_header_id_tbl(I)
29676       WHERE line_index = l_a_line_index_tbl(I);
29677   END IF;
29678 
29679   -- julin [3805113]: bulk update
29680   IF (l_b_list_header_id_tbl.COUNT > 0) THEN
29681     FORALL I IN l_b_list_header_id_tbl.first..l_b_list_header_id_tbl.last
29682       UPDATE qp_npreq_line_attrs_tmp
29683       SET    value_from = TO_CHAR(l_b_list_header_id_tbl(I))
29684       WHERE  rowid = l_b_rowid_tbl(I);
29685   END IF;
29686 
29687   -- julin [3805113]: bulk update
29688   IF (l_c_LINE_INDEX_TBL.COUNT > 0) THEN
29689     FORALL I IN l_c_LINE_INDEX_TBL.first..l_c_LINE_INDEX_TBL.last
29690       INSERT INTO qp_npreq_line_attrs_tmp
29691         (LINE_INDEX,
29692          ATTRIBUTE_LEVEL,
29693          ATTRIBUTE_TYPE,
29694          CONTEXT,
29695          ATTRIBUTE,
29696          VALUE_FROM,
29697          VALIDATED_FLAG,  --We may need to reset it to N
29698          APPLIED_FLAG,
29699          PRICING_STATUS_CODE,
29700          PRICING_STATUS_TEXT
29701         )
29702       VALUES
29703         (l_c_line_index_tbl(i),
29704          l_c_g_line_level_tbl(i),
29705          l_c_g_qualifier_type_tbl(i),
29706          l_c_g_list_header_context_tbl(i),
29707          l_c_qualifier_attribute4_tbl(i),
29708          l_c_list_header_id_tbl(i),
29709          l_c_g_validated_tbl(i),
29710          l_c_g_list_applied_tbl(i),
29711          l_c_g_status_unchanged_tbl(i),   --as it is passed in as qualifiers from the callers
29712          l_c_pricing_status_text_tbl(i));
29713 
29714   END IF;
29715 
29716   END LOOP;
29717   CLOSE l_check_no_modlist_cur;
29718 
29719          -- Update Rounding Factor, if rounding_flag not N
29720         IF (G_ROUNDING_FLAG <> 'N') THEN
29721                 UPDATE_ROUNDING_FACTOR (
29722                         QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
29723                         l_status_code,
29724                         l_status_text);
29725         END IF; -- end if rounding_flag
29726 
29727      IF l_status_code <> FND_API.G_RET_STS_SUCCESS THEN
29728         RAISE E_ROUTINE_ERRORS;
29729      END IF;
29730 
29731 EXCEPTION
29732 WHEN E_ROUTINE_ERRORS THEN
29733   x_status_code := FND_API.G_RET_STS_ERROR;
29734   x_status_text := l_routine||': '||l_status_text;
29735 WHEN OTHERS THEN
29736   v_error_code :=SQLCODE;
29737   v_error_message:=SQLERRM;
29738   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29739    engine_debug('Error in QP_PREQ_GRP.create_qualifier_from_list: '||SQLERRM);
29740   END IF;
29741   x_status_code := FND_API.G_RET_STS_ERROR;
29742   x_status_text := l_routine||': '||SQLERRM;
29743 
29744 END Create_Qualifier_From_List;
29745 
29746 
29747 /*+------------------------------------------------------------
29748   |GET_REASON
29749   |To tell the reasons why certain list line is deleted
29750   +------------------------------------------------------------
29751 */
29752 PROCEDURE Get_Reason (p_line_index   IN  PLS_INTEGER,
29753                       x_reason_code_tbl  OUT NOCOPY VARCHAR_TYPE,
29754                       x_status_code OUT NOCOPY VARCHAR2,
29755                       x_status_text OUT NOCOPY VARCHAR2) AS
29756 /*
29757 -- Can use N1 instead of N3
29758 INDX,QP_PREQ_GRP.get_reason.l_reason_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
29759 */
29760 CURSOR l_reason_cur(p_line_index IN PLS_INTEGER) IS
29761 SELECT distinct pricing_status_code
29762 FROM   qp_npreq_ldets_tmp
29763 WHERE  line_index = p_line_index
29764 AND    pricing_status_code <> G_STATUS_NEW;
29765 
29766 J PLS_INTEGER:=0;
29767 l_routine VARCHAR2(240):='QP_PREQ_GRP.GET_REASON';
29768 BEGIN
29769 
29770 FOR I IN l_reason_cur(p_line_index) LOOP
29771  J:=J+1;
29772  x_reason_code_tbl(J):= I.pricing_status_code;
29773 END LOOP;
29774 
29775 EXCEPTION
29776   WHEN OTHERS THEN
29777    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
29778     engine_debug(l_routine||': '||SQLERRM);
29779    END IF;
29780    x_status_code := FND_API.G_RET_STS_ERROR;
29781    x_status_text := l_routine||': '||SQLERRM;
29782 END Get_Reason;
29783 
29784 /*+------------------------------------------------------------
29785   |Call calculation engine
29786   +------------------------------------------------------------
29787 */
29788 PROCEDURE CALL_CALCULATION_ENGINE (p_phase_sequence       IN NUMBER:=NULL,
29789                                    p_freeze_override_flag IN VARCHAR2:=NULL,
29790                                    p_is_direct_call       IN BOOLEAN:=FALSE,
29791                                    x_status_code          OUT NOCOPY VARCHAR2,
29792                                    x_status_text          OUT NOCOPY VARCHAR2) AS
29793 
29794 p_cal_req_line_rec   QP_Calculate_Price_PUB.l_request_line_rec;
29795 l_cal_req_line_rec   QP_Calculate_Price_PUB.l_request_line_rec;
29796 p_cal_req_ldets_tbl  QP_Calculate_Price_PUB.l_request_line_details_tbl;
29797 l_cal_req_ldets_tbl  QP_Calculate_Price_PUB.l_request_line_details_tbl;
29798 p_cal_req_rltd_tbl   QP_Calculate_Price_PUB.l_related_request_lines_tbl;
29799 l_cal_req_rltd_tbl   QP_Calculate_Price_PUB.l_related_request_lines_tbl;
29800 
29801 /*
29802 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_cur,- No Index Used -,NA,NA
29803 */
29804 CURSOR l_request_line_cur  IS
29805   SELECT /*+ dynamic_sampling(1) */ qplt.LINE_INDEX,
29806          qplt.LINE_TYPE_CODE,
29807          qplt.PRICING_EFFECTIVE_DATE,
29808          qplt.LINE_QUANTITY,
29809          qplt.LINE_UOM_CODE,
29810          qplt.PRICED_QUANTITY,
29811          qplt.PRICED_UOM_CODE,
29812          qplt.CURRENCY_CODE,
29813          qplt.UNIT_PRICE,
29814          qplt.PERCENT_PRICE,
29815 	 qplt.UOM_QUANTITY,
29816          qplt.PARENT_PRICE,
29817          qplt.ADJUSTED_UNIT_PRICE,
29818          qplt.PROCESSED_FLAG,
29819          qplt.PRICE_FLAG,
29820          qplt.PROCESSING_ORDER,
29821          qplt.PRICING_STATUS_CODE,
29822          qplt.PRICING_STATUS_TEXT,
29823          qplt.GROUP_QUANTITY,
29824          qplt.GROUP_AMOUNT,
29825          qplt.ROUNDING_FLAG,
29826          qplt.PRICE_LIST_HEADER_ID,
29827          qplt.ROUNDING_FACTOR,
29828          qplt.CATCHWEIGHT_QTY,
29829          qplt.ACTUAL_ORDER_QUANTITY,
29830          NVL(qplt.price_flag,G_YES)
29831   FROM   qp_npreq_lines_tmp qplt
29832   WHERE  qplt.PRICING_STATUS_CODE IN (G_STATUS_UNCHANGED, G_STATUS_UPDATED)
29833   AND    (qplt.PRICE_FLAG IN (G_YES,G_PHASE)
29834           OR qplt.PROCESSED_CODE = G_BY_ENGINE)
29835   AND	 nvl(qplt.USAGE_PRICING_TYPE,G_REGULAR_USAGE_TYPE) NOT IN
29836 	  (G_AUTHORING_TYPE,G_BILLING_TYPE)
29837   ORDER  BY PROCESSING_ORDER;
29838 
29839 --for the case where p_control_rec.price_flat = 'P' (G_PHASE)
29840 /*
29841 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_detail_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
29842 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_detail_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
29843 
29844 INDX,QP_PREQ_GRP.call_calculation_engine.l_request_line_detail_cur,qp_npreq_lines_tmp_N2,LINE_TYPE_CODE,1
29845 */
29846  CURSOR l_request_line_detail_cur(L_LINE_INDEX PLS_INTEGER,
29847                                   p_price_flag VARCHAR2) IS
29848    -- hint added as temporary R12 fix for 5573442
29849    SELECT /*+ index(qplt) */  --5658579
29850           QPLT.LINE_DETAIL_INDEX,
29851           QPLT.LINE_DETAIL_TYPE_CODE,
29852           QPLT.LINE_INDEX,
29853           QPLT.CREATED_FROM_LIST_HEADER_ID,
29854           QPLT.CREATED_FROM_LIST_LINE_ID,
29855           QPLT.CREATED_FROM_LIST_LINE_TYPE,
29856           QPLT.CREATED_FROM_LIST_TYPE_CODE,
29857           QPLT.PRICE_BREAK_TYPE_CODE,
29858           QPLT.PRICING_GROUP_SEQUENCE,
29859           QPLT.OPERAND_CALCULATION_CODE,
29860           QPLT.OPERAND_VALUE,
29861           QPLT.NET_AMOUNT_FLAG, -- IT net_amount 2720717
29862           QPLT.AUTOMATIC_FLAG,
29863           QPLT.ACCRUAL_FLAG,
29864           QPLT.ACCRUAL_CONVERSION_RATE,
29865           QPLT.ESTIM_ACCRUAL_RATE,
29866           QPLT.RECURRING_VALUE, -- block pricing
29867           QPLT.MODIFIER_LEVEL_CODE,
29868           QPLT.GROUP_QUANTITY,
29869           QPLT.GROUP_AMOUNT,
29870           QPLT.LINE_QUANTITY, --2388011_new
29871           QPLT.SELECTED_VOLUME_ATTR -- 2388011_new
29872    FROM qp_npreq_ldets_tmp QPLT
29873    WHERE QPLT.LINE_INDEX = L_LINE_INDEX
29874    AND QPLT.PRICING_STATUS_CODE = G_STATUS_NEW
29875    UNION
29876    -- hints added as temporary R12 fix for 5573442
29877    SELECT /*+ ORDERED USE_NL(QPLL QPLT) INDEX(QPLL) INDEX(QPLT) */  --5658579
29878           QPLT.LINE_DETAIL_INDEX,
29879           QPLT.LINE_DETAIL_TYPE_CODE,
29880           QPLT.LINE_INDEX,
29881           QPLT.CREATED_FROM_LIST_HEADER_ID,
29882           QPLT.CREATED_FROM_LIST_LINE_ID,
29883           QPLT.CREATED_FROM_LIST_LINE_TYPE,
29884           QPLT.CREATED_FROM_LIST_TYPE_CODE,
29885           QPLT.PRICE_BREAK_TYPE_CODE,
29886           QPLT.PRICING_GROUP_SEQUENCE,
29887           QPLT.OPERAND_CALCULATION_CODE,
29888           QPLT.OPERAND_VALUE,
29889           QPLT.NET_AMOUNT_FLAG, -- IT net_amount 2720717
29890           QPLT.AUTOMATIC_FLAG,
29891           QPLT.ACCRUAL_FLAG,
29892 	     QPLT.ACCRUAL_CONVERSION_RATE,
29893 	     QPLT.ESTIM_ACCRUAL_RATE,
29894 	     QPLT.RECURRING_VALUE, -- block pricing
29895           QPLT.MODIFIER_LEVEL_CODE,
29896 		QPLT.GROUP_QUANTITY,
29897 		QPLT.GROUP_AMOUNT,
29898           QPLT.LINE_QUANTITY, --2388011_new
29899           QPLT.SELECTED_VOLUME_ATTR -- 2388011_new
29900    FROM   qp_npreq_lines_tmp QPLL,
29901           qp_npreq_ldets_tmp QPLT
29902    WHERE  QPLL.LINE_TYPE_CODE = G_ORDER_LEVEL
29903    AND    QPLT.LINE_INDEX = QPLL.LINE_INDEX
29904    AND    QPLT.PRICING_STATUS_CODE = G_STATUS_NEW
29905    AND    QPLT.CREATED_FROM_LIST_TYPE_CODE <> G_CHARGES_HEADER
29906    ORDER BY 9; -- 9 - Pricing Group Sequence
29907 
29908 /*
29909 INDX,QP_PREQ_GRP.call_calculation_engine.l_line_attrs_cur,qp_npreq_line_attrs_tmp_N3,LINE_DETAIL_INDEX,1
29910 */
29911 CURSOR l_line_attrs_cur(l_line_detail_index PLS_INTEGER) IS
29912   SELECT VALUE_FROM,
29913          VALUE_TO,
29914          ATTRIBUTE
29915   FROM qp_npreq_line_attrs_tmp
29916   WHERE line_detail_index = l_line_detail_index
29917   AND ATTRIBUTE_LEVEL = G_DETAIL_LEVEL;
29918 
29919 /*
29920 INDX,QP_PREQ_GRP.call_calculation_engine.l_list_line_attribute_cur,QP_PRICING_ATTRIBUTES_N2,LIST_LINE_ID,1
29921 */
29922 CURSOR l_list_line_attribute_cur(p_list_line_id PLS_INTEGER) IS
29923    SELECT /*+ index(qpp qp_pricing_attributes_n2) l_list_line_attribute_cur */ PRICING_ATTRIBUTE
29924    FROM   QP_PRICING_ATTRIBUTES qpp
29925    WHERE LIST_LINE_ID = p_list_line_id
29926    AND   PRICING_ATTRIBUTE_CONTEXT = G_PRIC_VOLUME_CONTEXT;
29927 
29928 -- Cursor for getting the related line index for the line index
29929 -- Ex: Related Line Index - Oracle 8i Line Index - Service Line
29930 /*
29931 INDX,QP_PREQ_GRP.call_calculation_engine.l_service_item_cur,- No Index Used -,NA,NA
29932 */
29933 CURSOR l_service_item_cur(l_line_index PLS_INTEGER) IS
29934   SELECT LINE_INDEX
29935   FROM   qp_npreq_rltd_lines_tmp
29936   WHERE  RELATED_LINE_INDEX = l_line_index
29937   AND    RELATIONSHIP_TYPE_CODE = G_SERVICE_LINE;
29938 
29939 -- Cursor for getting the unit price of the parent line ex: Oracle 8i line
29940 /*
29941 INDX,QP_PREQ_GRP.call_calculation_engine.l_get_price_parent_line_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
29942 */
29943 CURSOR l_get_price_parent_line_cur(l_line_index PLS_INTEGER) IS
29944   SELECT UNIT_PRICE,
29945          LINE_UNIT_PRICE, --fix bug 2776849, uom_service_pricing
29946          PRICED_QUANTITY,
29947          LINE_QUANTITY,
29948          LINE_UOM_CODE  --fix bug 2776849, uom_service_pricing
29949   FROM   qp_npreq_lines_tmp
29950   WHERE  LINE_INDEX = l_line_index;
29951 
29952 /*
29953 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
29954 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
29955 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,CONTEXT,3
29956 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE,4
29957 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,LINE_INDEX,5
29958 INDX,lQP_PREQ_GRP.create_qualifier_from_list._check_modlist_cur,qp_npreq_line_attrs_tmp_N2,VALUE_FROM,6
29959 */
29960 CURSOR gsa_qualifier_exists(p_line_index PLS_INTEGER)  IS
29961   SELECT 'X'
29962   FROM   qp_npreq_line_attrs_tmp
29963   WHERE  CONTEXT = G_CUSTOMER_CONTEXT
29964   AND    ATTRIBUTE = G_GSA_ATTRIBUTE
29965   AND    VALUE_FROM = G_YES
29966   AND    LINE_INDEX = p_line_index
29967   AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED
29968   AND    ATTRIBUTE_TYPE = G_QUALIFIER_TYPE;
29969 
29970 -- begin shulin bug 1605829 fix
29971 CURSOR get_request_prclst_name_cur (p_list_header_id PLS_INTEGER) IS
29972 	SELECT name
29973 	FROM qp_list_headers_v a
29974  	WHERE a.list_header_id = p_list_header_id;
29975 
29976 CURSOR get_request_inv_item_id_cur(p_line_index PLS_INTEGER) IS
29977 	SELECT qp_number.canonical_to_number(VALUE_FROM)
29978 	FROM   qp_npreq_line_attrs_tmp
29979 	WHERE  CONTEXT = G_PRIC_ITEM_CONTEXT
29980 	AND    ATTRIBUTE = G_PRIC_ATTRIBUTE1
29981 	AND    ATTRIBUTE_TYPE = G_PRODUCT_TYPE
29982 	AND    LINE_INDEX = p_line_index
29983 	AND    PRICING_STATUS_CODE = G_STATUS_UNCHANGED;
29984 
29985 CURSOR get_request_inv_item_name_cur(p_item_id PLS_INTEGER) IS
29986  	SELECT concatenated_segments
29987  	--INTO l_request_item_name
29988  	FROM mtl_system_items_vl
29989  	WHERE inventory_item_id = p_item_id
29990         AND organization_id = QP_UTIL.Get_Item_Validation_Org;
29991 -- end shulin bug 1605829 fix
29992 
29993 J PLS_INTEGER:=1;
29994 N PLS_INTEGER:=1;
29995 B PLS_INTEGER:=0;
29996 C PLS_INTEGER:=0;
29997 l_reason_tbl VARCHAR_TYPE;
29998 l_parent_line_detail_index PLS_INTEGER;
29999 l_rltd_line_index PLS_INTEGER;
30000 l_parent_line_index PLS_INTEGER;
30001 l_percent_price NUMBER := 0;
30002 l_parent_unit_price    NUMBER :=NULL; -- fix bug 2776849, uom_service_pricing
30003 l_parent_line_unit_price    NUMBER :=NULL; -- fix bug 2776849, uom_service_pricing
30004 l_parent_line_quantity NUMBER:=NULL;
30005 l_parent_priced_quantity NUMBER:=NULL;
30006 l_parent_line_uom_code VARCHAR2(30);
30007 l_GSA_Enabled_Flag VARCHAR2(50);
30008 l_GSA_Qualifier_Flag VARCHAR2(50);
30009 l_status_code   VARCHAR2(30);
30010 l_status_text   VARCHAR2(240);
30011 l_gsa_violation_flag   VARCHAR2(1);
30012 l_routine VARCHAR2(240):= 'Routine:QP_PREQ_GRP.Call_Calculation_Engine';
30013 l_err_line_index   NUMBER;
30014 l_attribute	    VARCHAR2(30);
30015 l_value            VARCHAR2(30);
30016 V                  PLS_INTEGER := 0;
30017 U                  PLS_INTEGER := 0;
30018 Y                  PLS_INTEGER := 0;
30019 L                  PLS_INTEGER := 0;
30020 
30021 G_UNIT_PRICE_TBL_C             NUMBER_TYPE;
30022 G_LINE_UNIT_PRICE_TBL_C	       NUMBER_TYPE; -- shu_latest
30023 G_ORDER_UOM_TBL_C              NUMBER_TYPE; -- bug 2693700
30024 G_PERCENT_PRICE_TBL_C          NUMBER_TYPE;
30025 G_ADJUSTED_UNIT_PRICE_TBL_C    NUMBER_TYPE;
30026 G_PARENT_PRICE_TBL_C           NUMBER_TYPE;
30027 G_PARENT_PRICED_QUANTITY_TBL_C NUMBER_TYPE;
30028 G_PARENT_LINE_QUANTITY_TBL_C   NUMBER_TYPE;
30029 G_PARENT_LINE_UOM_TBL_C        VARCHAR_TYPE;
30030 G_LINE_INDEX_TBL_C             NUMBER_TYPE;
30031 G_EXTENDED_PRICE_TBL_C         NUMBER_TYPE; -- block pricing
30032 G_GSA_LINE_INDEX_TBL_C         NUMBER_TYPE;
30033 l_line_details_exist_flag      BOOLEAN := FALSE;
30034 
30035 G_ADJUSTMENT_AMOUNT_TBL_D      NUMBER_TYPE;
30036 --G_LINE_QUANTITY_TBL_D          NUMBER_TYPE;
30037 G_BENEFIT_QUANTITY_TBL_D       NUMBER_TYPE;
30038 G_OPERAND_VALUE_TBL_D          NUMBER_TYPE;
30039 G_QUALIFIER_VALUE_TBL_D        NUMBER_TYPE;
30040 G_LINE_DETAIL_INDEX_TBL_D      NUMBER_TYPE;
30041 
30042 G_LINE_QUANTITY_TBL_R          NUMBER_TYPE;
30043 G_ADJUSTMENT_AMOUNT_TBL_R      NUMBER_TYPE;
30044 G_LINE_DETAIL_INDEX_TBL_R      NUMBER_TYPE;
30045 
30046 G_PARENT_PRICE_TBL_P           NUMBER_TYPE;
30047 
30048 --[prarasto:Post Round] Start : new variables
30049 l_adjusted_unit_price_ur       NUMBER_TYPE;
30050 l_unit_selling_price_ur        NUMBER_TYPE;
30051 l_extended_selling_price_ur    NUMBER_TYPE;
30052 l_adjusted_unit_price          NUMBER_TYPE;
30053 l_unit_selling_price           NUMBER_TYPE;
30054 l_extended_selling_price       NUMBER_TYPE;
30055 --[prarasto:Post Round] End : new variables
30056 
30057 -- begin shulin bug 1605829 fix
30058 l_request_price_list_name qp_list_headers_v.name%type;
30059 l_request_uom VARCHAR2(30);
30060 l_request_item_id NUMBER;
30061 l_request_item_name mtl_system_items_vl.concatenated_segments%type;
30062 l_message VARCHAR2(240);
30063 -- end shulin bug 1605829 fix
30064 
30065 l_line_unit_price  NUMBER:= NULL; -- shu, default to null, fix bug 2354422, avoid division zero
30066 l_line_adjusted_unit_price  NUMBER:= NULL;
30067 l_conversion_rate NUMBER:= NULL; -- shu, to fix bug 2354422
30068 l_order_uom_selling_price NUMBER:= NULL; -- bug 2693700
30069 v_price_round_options VARCHAR2(30):= FND_PROFILE.Value('QP_SELLING_PRICE_ROUNDING_OPTIONS'); --shu, new rounding
30070 
30071 E_CAL_ENGINE_ERROR EXCEPTION;
30072 
30073 BEGIN
30074 
30075 
30076   x_status_code := FND_API.G_RET_STS_SUCCESS;
30077 
30078   --For manual discount, we want pricing_group sequence to be NULL
30079 /*
30080 -- This update is not needed as it is taken care of by the setup
30081 INDX,QP_PREQ_GRP.call_calculation_engine.call_calculation_engine_upd1,qp_npreq_ldets_tmp_N6,AUTOMATIC_FLAG,1
30082 */
30083   /* UPDATE qp_npreq_ldets_tmp
30084   SET    PRICING_GROUP_SEQUENCE = NULL
30085   WHERE  AUTOMATIC_FLAG = G_NO; */
30086 
30087 
30088   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30089   engine_debug( '-------------In call calculation engine-----------');
30090   END IF;
30091 
30092   l_GSA_Enabled_Flag := FND_PROFILE.VALUE(G_GSA_Max_Discount_Enabled);
30093 
30094   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30095   engine_debug ('GSA Enabled Flag : ' || l_GSA_Enabled_Flag);
30096   engine_debug ('Freeze_override_flag: '||p_freeze_override_flag);
30097   END IF;
30098 
30099   G_UNIT_PRICE_TBL_C.delete;
30100   G_LINE_UNIT_PRICE_TBL_C.delete; -- shu_latest
30101   G_ORDER_UOM_TBL_C.delete; -- bug 2693700
30102   G_PERCENT_PRICE_TBL_C.delete;
30103   G_ADJUSTED_UNIT_PRICE_TBL_C.delete;
30104   G_PARENT_PRICE_TBL_C.delete;
30105   G_PARENT_PRICED_QUANTITY_TBL_C.delete;
30106   G_PARENT_LINE_QUANTITY_TBL_C.delete;
30107   G_PARENT_LINE_UOM_TBL_C.delete;
30108   G_LINE_INDEX_TBL_C.delete;
30109   G_GSA_LINE_INDEX_TBL_C.delete;
30110   G_EXTENDED_PRICE_TBL_C.delete; -- block pricing
30111 
30112   G_ADJUSTMENT_AMOUNT_TBL_D.delete;
30113   --G_LINE_QUANTITY_TBL_D.delete;
30114   G_BENEFIT_QUANTITY_TBL_D.delete;
30115   G_OPERAND_VALUE_TBL_D.delete;
30116   G_QUALIFIER_VALUE_TBL_D.delete;
30117   G_LINE_DETAIL_INDEX_TBL_D.delete;
30118 
30119   G_LINE_QUANTITY_TBL_R.delete;
30120   G_ADJUSTMENT_AMOUNT_TBL_R.delete;
30121   G_LINE_DETAIL_INDEX_TBL_R.delete;
30122   G_PARENT_PRICE_TBL_P.delete;
30123 
30124   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30125     engine_debug ('  G_REQUEST_TYPE_CODE: ' ||G_REQUEST_TYPE_CODE); -- shu, aso rounding
30126     engine_debug ('  G_ROUNDING_FLAG: ' ||G_ROUNDING_FLAG); -- shu, aso rounding
30127   END IF; -- END IF DEBUG
30128 
30129   FOR I IN l_request_line_cur LOOP
30130 
30131     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30132       engine_debug('-----l_request_line_cur I loop ------');
30133       engine_debug ('  line_index: ' ||i.line_index);
30134       engine_debug ('  line_type_code: ' ||i.line_type_code);
30135       engine_debug ('  rounding_factor: ' ||i.rounding_factor);
30136       engine_debug ('  price_list_header_id: ' ||i.price_list_header_id);
30137     END IF;
30138 
30139     IF (l_GSA_Enabled_Flag = G_YES) THEN
30140       OPEN gsa_qualifier_exists(I.LINE_INDEX) ;
30141       FETCH gsa_qualifier_exists INTO l_GSA_Qualifier_Flag;
30142       CLOSE gsa_qualifier_exists;
30143     END IF;
30144 
30145     IF (I.PRICE_FLAG <> G_NO) THEN
30146 	--IF (l_attribute = G_QUANTITY_ATTRIBUTE) THEN
30147 	-- Default value
30148       p_cal_req_line_rec.qualifier_value := NVL(I.priced_quantity,I.line_quantity);
30149 	--ELSE
30150       -- p_cal_req_line_rec.qualifier_value := nvl(nvl(I.PRICED_QUANTITY,I.LINE_QUANTITY) * I.UNIT_PRICE,0);
30151 	--END IF;
30152 
30153 
30154       p_cal_req_line_rec.line_index             :=I.line_index;
30155       p_cal_req_line_rec.unit_price             :=I.unit_price;
30156       p_cal_req_line_rec.percent_price          :=I.percent_price;
30157       p_cal_req_line_rec.service_duration       :=nvl(I.uom_quantity,1);
30158       p_cal_req_line_rec.gsa_qualifier_flag     :=l_GSA_Qualifier_Flag;
30159       p_cal_req_line_rec.gsa_enabled_flag       :=l_GSA_Enabled_Flag;
30160       p_cal_req_line_rec.pricing_effective_date :=I.pricing_effective_date;
30161       p_cal_req_line_rec.rounding_factor        :=I.rounding_factor;
30162       p_cal_req_line_rec.rounding_flag          :=I.rounding_flag;
30163 
30164     END IF; -- END IF (I.PRICE_FLAG <> G_NO)
30165 
30166     IF (I.PROCESSING_ORDER > 1) THEN -- service pricing
30167 
30168       OPEN l_service_item_cur(I.LINE_INDEX);
30169       FETCH l_service_item_cur INTO l_parent_line_index;
30170       CLOSE l_service_item_cur;
30171 
30172       IF (l_parent_line_index IS NOT NULL) THEN
30173 
30174 	OPEN  l_get_price_parent_line_cur(l_parent_line_index);
30175 	FETCH l_get_price_parent_line_cur
30176         INTO  l_parent_unit_price,      --fix bug 2776849, uom_service_pricing
30177               l_parent_line_unit_price, --fix bug 2776849, uom_service_pricing
30178               l_parent_priced_quantity,
30179               l_parent_line_quantity,
30180               l_parent_line_uom_code;
30181 	CLOSE l_get_price_parent_line_cur;
30182 
30183         -- if price flag is 'N' for the parent line , then that record would not exist in g_parent_price_tbl_p
30184         -- So check  g_parent_price_tbl_p.exists(l_parent_line_index), bug# 2163919
30185         -- begin fix bug 2776849, uom_service_pricing
30186         IF (g_parent_price_tbl_p.count > 0) AND g_parent_price_tbl_p.exists(l_parent_line_index) THEN
30187           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);
30188         ELSE
30189           p_cal_req_line_rec.RELATED_ITEM_PRICE := nvl(l_parent_line_unit_price, l_parent_unit_price);
30190         END IF; -- END IF (g_parent_price_tbl_p.count > 0)
30191 
30192         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30193           engine_debug('  l_parent_line index : '|| l_parent_line_index);
30194           engine_debug('  p_cal_req_line_rec.RELATED_ITEM_PRICE: '|| p_cal_req_line_rec.RELATED_ITEM_PRICE);
30195         END IF; -- END IF DEBUG
30196 
30197       ELSE -- l_parent_line_index is null
30198 		-- Error Condition
30199         null;
30200         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30201           engine_debug('Unable to find parent line for a service item');
30202         END IF;
30203         l_err_line_index := I.LINE_INDEX;
30204         DELETE_LINES(l_err_line_index,
30205                        G_STATUS_OTHER_ERRORS,
30206                        'Could not find parent line for a child service line:'||l_err_line_index,
30207                        l_status_code,
30208                        l_status_text);
30209         GOTO E_LOOP;
30210       END IF;  -- END IF (l_parent_line_index IS NOT NULL)
30211 
30212     END IF; -- END IF (I.PROCESSING_ORDER > 1)
30213 
30214     FOR K IN l_request_line_detail_cur(I.LINE_INDEX,I.PRICE_FLAG) LOOP
30215       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30216            engine_debug('-----l_request_line_detail_cur K loop------');
30217       END IF;
30218 
30219       l_line_details_exist_flag := TRUE;
30220 
30221        -- Don't populate calculation engine rec if it is not an automatic discount
30222        -- and it is not a direct call
30223        -- If freight charges and Discount related manual Price Breaks or recurring discounts,
30224        -- do not skip calculation even if automatic_flag = 'N'
30225          IF K.AUTOMATIC_FLAG = G_NO AND p_is_direct_call = FALSE  THEN
30226            IF (K.created_from_list_line_type NOT IN (G_FREIGHT_CHARGE,G_PRICE_BREAK_TYPE) AND
30227                K.created_from_list_type_code NOT IN ('PRL','AGR') AND
30228                K.PRICE_BREAK_TYPE_CODE <> G_RECURRING_BREAK AND
30229                K.LINE_DETAIL_TYPE_CODE <> G_CHILD_DETAIL_TYPE)THEN
30230              GOTO SKIP_CAL_LOOP;
30231            END IF;
30232          END IF;
30233 
30234          IF (K.LINE_DETAIL_TYPE_CODE <> G_CHILD_DETAIL_TYPE) THEN
30235 
30236             p_cal_req_ldets_tbl(J).created_from_list_type   := K.created_from_list_type_code;
30237             p_cal_req_ldets_tbl(J).created_from_list_line_id:= K.created_from_list_line_id;
30238             p_cal_req_ldets_tbl(J).created_from_list_header_id:= K.created_from_list_header_id;
30239             p_cal_req_ldets_tbl(J).line_detail_index        := K.line_detail_index;
30240             p_cal_req_ldets_tbl(J).created_from_list_line_type:= K.created_from_list_line_type;
30241             p_cal_req_ldets_tbl(J).pricing_group_sequence   := K.pricing_group_sequence;
30242             p_cal_req_ldets_tbl(J).accrual_flag             := K.accrual_flag;
30243             p_cal_req_ldets_tbl(J).automatic_flag           := K.automatic_flag;
30244             p_cal_req_ldets_tbl(J).accrual_conversion_rate  := K.accrual_conversion_rate;
30245             p_cal_req_ldets_tbl(J).estim_accrual_rate       := K.estim_accrual_rate;
30246             p_cal_req_ldets_tbl(J).price_break_type_code    := K.price_break_type_code;
30247             p_cal_req_ldets_tbl(J).bucketed_flag := 'N';   -- TO_DO 2388011, IT bucket, for now, should from the cursor
30248             --p_cal_req_ldets_tbl(J).bucketed_flag := k.bucketed_flag; -- TO_DO 2388011, IT bucket
30249              p_cal_req_ldets_tbl(J).bucketed_flag := nvl(k.net_amount_flag, 'N'); -- 2720717, IT net_amount
30250 
30251 
30252 
30253             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30254             engine_debug('List Line Id for Qualifier Value: ' || k.created_from_list_line_id);
30255 
30256             END IF;
30257             -- This is not needed as in Process_Line_Group procedure we are populating the right attibute
30258             -- So either it would be group_quantity or group_amount
30259 
30260                /* OPEN l_list_line_attribute_cur(K.created_from_list_line_id);
30261                FETCH l_list_line_attribute_cur INTO l_attribute;
30262                CLOSE l_list_line_attribute_cur; */
30263 
30264                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30265 		  engine_debug('Modifier Level Code: ' || K.modifier_level_code);
30266                END IF;
30267 
30268                IF (K.MODIFIER_LEVEL_CODE = G_LINE_GROUP) THEN
30269                  -- begin 2388011_new
30270                  IF (K.SELECTED_VOLUME_ATTR = G_AMOUNT) THEN -- 2388011_new
30271                    p_cal_req_ldets_tbl(J).qualifier_value  := nvl(K.line_quantity,0);
30272                  END IF;
30273                  p_cal_req_ldets_tbl(J).line_quantity := nvl(K.group_quantity,K.group_amount); -- ASK RAVI
30274                  --p_cal_req_ldets_tbl(J).line_quantity := nvl(K.line_quantity,0); --2388011, grp_lines_pbh
30275                  --end 2388011_new
30276                  p_cal_req_ldets_tbl(J).modifier_level_code := 'LINEGROUP'; --2388011, grp_lines_pbh
30277                ELSE
30278                  -- begin 2388011_new
30279                  -- 2388011_latest whole block
30280                 IF (K.SELECTED_VOLUME_ATTR = G_QUANTITY) THEN -- ravi_latest
30281                  p_cal_req_ldets_tbl(J).line_quantity :=  NVL(I.priced_quantity,I.line_quantity);
30282                  p_cal_req_ldets_tbl(J).modifier_level_code := 'LINE'; -- new ravi
30283                 ELSE -- Amount and Other Attributes
30284                  p_cal_req_ldets_tbl(J).line_quantity :=  NVL(I.priced_quantity,I.line_quantity);
30285                  p_cal_req_ldets_tbl(J).modifier_level_code := 'LINE'; -- new ravi
30286                  p_cal_req_ldets_tbl(J).qualifier_value  := nvl(K.line_quantity,0);
30287                 END IF;
30288                 -- end 2388011_latest
30289                  l_value := null;
30290                END IF;
30291 
30292             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30293             engine_debug('Qualifier Value for loading: ' || p_cal_req_ldets_tbl(J).qualifier_value);
30294 
30295             END IF;
30296             p_cal_req_ldets_tbl(J).operand_calculation_code:=K.operand_calculation_code;
30297             p_cal_req_ldets_tbl(J).operand_value:=K.operand_value;
30298 
30299             IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30300             engine_debug('accrual_flag: '||p_cal_req_ldets_tbl(J).accrual_flag);
30301             engine_debug('estim_accrual_rate: '||p_cal_req_ldets_tbl(J).estim_accrual_rate);
30302             engine_debug('accrual_conversion_rate: '||p_cal_req_ldets_tbl(J).accrual_conversion_rate);
30303 
30304             END IF;
30305             J:=J+1;
30306 
30307            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30308            engine_debug('+--------------------------------+');
30309            engine_debug('| In Parent Line                 |');
30310            engine_debug('+--------------------------------+');
30311            engine_debug('LINE_DETAIL_INDEX: '||K.line_detail_index);
30312            engine_debug('LINE_INDEX: '|| K.line_index);
30313            engine_debug('CREATED_FROM_LIST_LINE_ID :'||K.created_from_list_line_id);
30314            engine_debug('CREATED_FROM_LIST_LINE_TYPE : '||K.created_from_list_line_type);
30315            engine_debug('CREATED_FROM_LIST_TYPE : '||K.created_from_list_type_code);
30316            engine_debug('PRICING_GROUP_SEQUENCE: '||K.pricing_group_sequence);
30317            engine_debug('OPERAND_CALCULATION_CODE: '||K.operand_calculation_code);
30318            engine_debug('OPERAND_VALUE: '||K.operand_value);
30319             engine_debug('NET_AMOUNT_FLAG: '||k.net_amount_flag); -- 2720717, IT net_amount
30320 
30321            END IF;
30322           ELSIF  (K.LINE_DETAIL_TYPE_CODE = G_CHILD_DETAIL_TYPE) THEN
30323                 --FOR P IN l_line_attrs_cur(K.LINE_DETAIL_INDEX) LOOP
30324 
30325                 p_cal_req_rltd_tbl(N).value_from := qp_number.canonical_to_number(G_CHILD_VALUE_FROM_TBL(k.line_detail_index));
30326                 p_cal_req_rltd_tbl(N).value_to   := qp_number.canonical_to_number(G_CHILD_VALUE_TO_TBL(k.line_detail_index));
30327                 p_cal_req_rltd_tbl(N).operand_calculation_code := K.operand_calculation_code;
30328                 p_cal_req_rltd_tbl(N).operand_value := K.operand_value;
30329                 p_cal_req_rltd_tbl(N).price_break_type_code := K.price_break_type_code;
30330                 p_cal_req_rltd_tbl(N).child_line_detail_index :=K.line_detail_index;
30331                 p_cal_req_rltd_tbl(N).related_list_line_type := K.created_from_list_line_type;
30332                 p_cal_req_rltd_tbl(N).pricing_group_sequence := K.pricing_group_sequence;
30333                 p_cal_req_rltd_tbl(N).recurring_value := K.recurring_value; -- block pricing
30334 
30335                 --get the parent line detail index for this pbh line
30336 
30337 /*
30338 INDX,QP_PREQ_GRP.call_calculation_engine.call_calculation_engine_sel1,-No Index Used-,NA,NA
30339 */
30340                 /* julin [3805113]: using global table populated in handle_break
30341                 SELECT LINE_DETAIL_INDEX
30342                 INTO  l_parent_line_detail_index
30343                 FROM  qp_npreq_rltd_lines_tmp
30344                 WHERE RELATED_LINE_DETAIL_INDEX = K.line_detail_index;
30345                 */
30346                 --p_cal_req_rltd_tbl(N).line_detail_index  is actually parent line detail index
30347                 p_cal_req_rltd_tbl(N).line_detail_index  := TO_NUMBER(G_PARENT_LINE_DETAIL_INDEX_TBL(k.line_detail_index));
30348 
30349                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30350                 engine_debug('----IN Children line------------');
30351                 engine_debug('value from: '||p_cal_req_rltd_tbl(N).value_from);
30352                 engine_debug('value to: '  ||p_cal_req_rltd_tbl(N).value_to);
30353                 engine_debug('LINE_INDEX: '||I.LINE_INDEX);
30354                 engine_debug('Calculation Code: '||K.OPERAND_CALCULATION_CODE);
30355                 engine_debug('Operand Value: '||K.OPERAND_VALUE);
30356                 engine_debug('Price_break_type_code: '||K.PRICE_BREAK_TYPE_CODE);
30357                 engine_debug('Parent line detail index: '||l_parent_line_detail_index);
30358                 engine_debug('Child line detail index: '||K.LINE_DETAIL_INDEX);
30359                 engine_debug('Related List line type: '||K.created_from_list_line_type);
30360                 engine_debug('List Line ID: '||K.created_from_list_line_id);
30361 
30362                 END IF;
30363                 N:=N+1;
30364 
30365                 --END LOOP;
30366 
30367 
30368           END IF;
30369           <<SKIP_CAL_LOOP>>
30370            IF(K.AUTOMATIC_FLAG = G_NO AND p_is_direct_call = FALSE) THEN
30371               IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30372               engine_debug('Not calling cal engine for child break line because automatic_flag was set to ''N''');
30373               END IF;
30374               null;
30375            END IF;
30376 
30377        END LOOP;  --END K loop
30378 
30379 
30380 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30381 engine_debug(l_routine||' Before calling cal engine');
30382 
30383 END IF;
30384      QP_Calculate_Price_PUB.Calculate_Price
30385           (p_cal_req_line_rec,
30386            p_cal_req_ldets_tbl,
30387            p_cal_req_rltd_tbl,
30388            l_status_code,
30389            l_status_text);
30390 
30391 IF (l_status_code = FND_API.G_RET_STS_ERROR) THEN
30392    l_err_line_index := I.LINE_INDEX;
30393    DELETE_LINES(l_err_line_index,
30394                 G_STATUS_OTHER_ERRORS,
30395                 'Error returned by QP_Calculate_Price_PUB.Calculate_Price',
30396                 l_status_code,
30397                 l_status_text);
30398     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30399     engine_debug('Error text '||l_status_text);
30400     END IF;
30401     GOTO E_LOOP;
30402 
30403 END IF;
30404 
30405 /* fix bug 2776849, move this to later
30406 -- Holding the parent price for service pricing
30407 IF (i.PROCESSING_ORDER = 1 ) THEN
30408  G_PARENT_PRICE_TBL_P(i.line_index) := p_cal_req_line_rec.UNIT_PRICE;
30409 END IF;
30410 */
30411 -- Indicating that there was a GSA Violation
30412 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30413 engine_debug ('GSA Status Code : ' || l_status_code);
30414 END IF;
30415 IF (l_status_code = G_STATUS_GSA_VIOLATION) THEN
30416   l_gsa_violation_flag := 'Y';
30417   V := V + 1;
30418   G_GSA_LINE_INDEX_TBL_C(V) := I.LINE_INDEX;
30419 ELSE
30420   l_gsa_violation_flag := 'N';
30421 END IF;
30422 
30423 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30424 engine_debug ('In Line Update Information100');
30425 END IF;
30426  -- Load Line Information
30427  IF (l_line_details_exist_flag = TRUE) THEN --Change
30428   U := U+1; --Change
30429   G_UNIT_PRICE_TBL_C(U) := p_cal_req_line_rec.UNIT_PRICE;
30430   G_PERCENT_PRICE_TBL_C(U) := p_cal_req_line_rec.PERCENT_PRICE;
30431   G_ADJUSTED_UNIT_PRICE_TBL_C(U) := p_cal_req_line_rec.ADJUSTED_UNIT_PRICE;
30432   --G_PARENT_PRICE_TBL_C(U) := l_parent_line_price;
30433   G_PARENT_PRICE_TBL_C(U) := l_parent_line_unit_price; -- fix 2776849, uom_service_pricing
30434   G_PARENT_PRICED_QUANTITY_TBL_C(U) := l_parent_priced_quantity;
30435   G_PARENT_LINE_QUANTITY_TBL_C(U) := l_parent_line_quantity;
30436   G_PARENT_LINE_UOM_TBL_C(U) := l_parent_line_uom_code;
30437   G_LINE_INDEX_TBL_C(U) := i.line_index;
30438   G_EXTENDED_PRICE_TBL_C(U) := p_cal_req_line_rec.EXTENDED_PRICE; -- block pricing
30439   --G_LINE_UNIT_PRICE_TBL_C(U) := p_cal_req_line_rec.UNIT_PRICE * i.PRICED_QUANTITY / i.LINE_QUANTITY;
30440 
30441   -- begin shu, round line unit price (unit price by order uom)
30442   -- shu, fix bug 2354422, avoid division zero if i.LINE_QUANTITY is zero
30443 
30444   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30445   engine_debug ('parent_qty: '|| l_parent_priced_quantity);
30446   engine_debug ('unit_price: '|| p_cal_req_line_rec.UNIT_PRICE);
30447   engine_debug ('priced_qty: '|| i.PRICED_QUANTITY);
30448   engine_debug ('line_qty: '|| i.LINE_QUANTITY);
30449   END IF;
30450 
30451   IF (i.LINE_QUANTITY <> 0 AND i.LINE_QUANTITY IS NOT NULL) THEN
30452    -- l_line_unit_price := p_cal_req_line_rec.UNIT_PRICE * i.PRICED_QUANTITY / i.LINE_QUANTITY;-- bug 2693700
30453    -- l_line_unit_price:=(p_cal_req_line_rec.UNIT_PRICE * i.PRICED_QUANTITY/i.LINE_QUANTITY)*nvl(i.catchweight_qty, 1);
30454    IF (i.catchweight_qty IS NOT NULL) THEN
30455     l_line_unit_price :=
30456     p_cal_req_line_rec.unit_price * (i.priced_quantity/i.actual_order_quantity)* (i.catchweight_qty/i.line_quantity);
30457    ELSIF (i.actual_order_quantity IS NOT NULL) THEN
30458     l_line_unit_price :=
30459     p_cal_req_line_rec.unit_price * (i.priced_quantity/i.actual_order_quantity);
30460    ELSE
30461     l_line_unit_price := p_cal_req_line_rec.unit_price * (i.priced_quantity/i.line_quantity);
30462    END IF;
30463 
30464    -- bug 2693700
30465    --l_order_uom_selling_price :=
30466    --(nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
30467    --i.priced_quantity/ i.line_quantity)* nvl(i.catchweight_qty, 1);
30468    -- bug 2693700
30469 
30470    IF (i.catchweight_qty IS NOT NULL) THEN
30471     l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
30472     (i.priced_quantity/i.actual_order_quantity)* (i.catchweight_qty/i.line_quantity));
30473    ELSIF (i.actual_order_quantity IS NOT NULL) THEN
30474     l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
30475     (i.priced_quantity/i.actual_order_quantity));
30476    ELSE
30477     l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price)*
30478     (i.priced_quantity/i.line_quantity));
30479    END IF;
30480 
30481   ELSE
30482    IF (i.LINE_UOM_CODE = i.PRICED_UOM_CODE) THEN  -- no uom conversion
30483     l_line_unit_price := p_cal_req_line_rec.UNIT_PRICE;
30484     l_line_adjusted_unit_price := nvl(p_cal_req_line_rec.ADJUSTED_UNIT_PRICE,p_cal_req_line_rec.UNIT_PRICE);
30485    ELSE -- uom conversion, need to show line_unit_price even line_qty is zero or null
30486     Inv_convert.inv_um_conversion(i.line_uom_code,
30487                                   i.priced_uom_code,
30488                                   null,
30489                                   l_conversion_rate);
30490     l_line_unit_price := p_cal_req_line_rec.UNIT_PRICE * l_conversion_rate;
30491     l_line_adjusted_unit_price := nvl(p_cal_req_line_rec.ADJUSTED_UNIT_PRICE,p_cal_req_line_rec.UNIT_PRICE) *
30492                                   l_conversion_rate;
30493    END IF;
30494 
30495    -- l_order_uom_selling_price := (nvl(p_cal_req_line_rec.adjusted_unit_price,p_cal_req_line_rec.unit_price) *
30496    -- l_conversion_rate * i.priced_quantity/ i.line_quantity)* nvl(i.catchweight_qty, 1);
30497    -- bug 2693700
30498    IF (i.catchweight_qty IS NOT NULL) THEN
30499 
30500       if (i.line_quantity <> 0) then
30501        l_order_uom_selling_price := (l_line_adjusted_unit_price *
30502 (i.priced_quantity/i.actual_order_quantity)* (i.catchweight_qty/i.line_quantity));
30503       Else
30504        l_order_uom_selling_price := l_line_adjusted_unit_price;
30505 --Bug#3075286
30506       End if;
30507       ELSIF (i.actual_order_quantity IS NOT NULL) THEN
30508 
30509       if i.actual_order_quantity <> 0 then
30510        l_order_uom_selling_price := (l_line_adjusted_unit_price * (i.priced_quantity/i.actual_order_quantity));
30511       Else
30512        l_order_uom_selling_price := l_line_adjusted_unit_price;   --Bug#3075286
30513       End if;
30514       ELSE
30515 
30516 
30517        IF i.LINE_QUANTITY <> 0 THEN
30518 
30519            l_order_uom_selling_price := (l_line_adjusted_unit_price *(i.priced_quantity/i.line_quantity));
30520        ELSE
30521            l_order_uom_selling_price := l_line_adjusted_unit_price;
30522 --Bug#3075286
30523        END IF;
30524       END IF;
30525 
30526   END IF;
30527   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30528   engine_debug ('line_unit_price bfe round: '||l_line_unit_price);
30529   engine_debug ('rounding_factor:'|| i.rounding_factor);
30530   engine_debug (' order_uom_selling_price bfe round : ' || l_order_uom_selling_price); -- bug 2693700
30531   END IF;
30532 
30533   -- Holding the parent price for service pricing
30534   IF (i.PROCESSING_ORDER = 1 ) THEN
30535     G_PARENT_PRICE_TBL_P(i.line_index) := nvl(l_line_unit_price, p_cal_req_line_rec.UNIT_PRICE) ;
30536   END IF;
30537 
30538   --===[prarasto:Post Round] Start : Calculate rounded values ==--
30539   l_adjusted_unit_price_ur(U) := NVL(G_ADJUSTED_UNIT_PRICE_TBL_C(U), G_UNIT_PRICE_TBL_C(U));
30540 
30541   l_unit_selling_price_ur(U) := l_order_uom_selling_price;
30542 
30543   IF( G_EXTENDED_PRICE_TBL_C(U) is not null )THEN
30544       IF ( i.catchweight_qty is null ) and ( i.actual_order_quantity IS NOT NULL ) THEN
30545         l_extended_selling_price_ur(U) := l_unit_selling_price_ur(U) * i.actual_order_quantity;
30546       ELSE
30547         l_extended_selling_price_ur(U) := l_unit_selling_price_ur(U) * i.line_quantity;
30548       END IF;
30549   ELSE
30550     l_extended_selling_price_ur(U) := G_EXTENDED_PRICE_TBL_C(U);
30551   END IF;
30552 
30553   IF (G_ROUNDING_FLAG = 'N') or (i.rounding_factor IS null) THEN
30554     l_adjusted_unit_price(U) := l_adjusted_unit_price_ur(U);
30555     l_unit_selling_price(U) := l_unit_selling_price_ur(U);
30556     l_extended_selling_price(U) := l_extended_selling_price_ur(U);
30557    	G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
30558 ELSE
30559     l_adjusted_unit_price(U) := round(l_adjusted_unit_price_ur(U), - 1 * i.rounding_factor);
30560     l_unit_selling_price(U) := round(l_unit_selling_price_ur(U),  - 1 * i.rounding_factor);
30561     l_extended_selling_price(U) := round(l_extended_selling_price_ur(U),  - 1 * i.rounding_factor);
30562     G_LINE_UNIT_PRICE_TBL_C(U) := round(l_line_unit_price,  - 1 * i.rounding_factor);
30563   END IF;
30564 /*
30565   IF G_ROUNDING_FLAG = 'Y'  AND i.rounding_factor IS NOT NULL THEN -- aso rounding
30566 
30567   	l_line_unit_price := ROUND(l_line_unit_price, (-1)*i.rounding_factor);
30568   	G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
30569 
30570         l_order_uom_selling_price := ROUND(l_order_uom_selling_price, (-1)*i.rounding_factor); --bug 2693700
30571         G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
30572 
30573 
30574   ELSIF (G_ROUNDING_FLAG = 'Q') THEN -- check qp_selling_price_rounding_options profile -- shu, new rounding
30575   	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
30576   		l_line_unit_price := ROUND(l_line_unit_price, (-1)*i.rounding_factor);
30577   		G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
30578 
30579                 l_order_uom_selling_price := ROUND(l_order_uom_selling_price, (-1)*i.rounding_factor); --bug 2693700
30580                 G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
30581 
30582   	ELSE -- 'NO_ROUND', 'NO_ROUND_ADJ'
30583   		G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
30584                 G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
30585   	END IF;
30586   ELSE
30587   	G_LINE_UNIT_PRICE_TBL_C(U) := l_line_unit_price;
30588         G_ORDER_UOM_TBL_C(U) := l_order_uom_selling_price; -- bug 2693700
30589   END IF;
30590 */
30591   --===[prarasto:Post Round] End : Calculate rounded values ==--
30592 
30593   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30594   engine_debug (' final line_unit_price : '||l_line_unit_price);
30595   engine_debug (' order_uom_selling_price : ' || l_order_uom_selling_price); -- bug 2693700
30596   engine_debug ('G_LINE_UNIT_PRICE_TBL_C(U) : '||G_LINE_UNIT_PRICE_TBL_C(U));	--[prarasto:Post Round]
30597   engine_debug ('l_unit_selling_price(U) : '||l_unit_selling_price(U));		--[prarasto:Post Round]
30598   END IF;
30599   -- end shu
30600   l_line_details_exist_flag := FALSE; -- reset
30601   l_line_unit_price := NULL; --reset, shu
30602   l_order_uom_selling_price := NULL; -- bug 2693700
30603   l_conversion_rate := NULL; -- shu
30604  END IF;
30605 
30606 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30607 engine_debug ('In Line Update Information200');
30608 END IF;
30609  --Load Line Detail Information
30610 IF (p_cal_req_ldets_tbl.COUNT > 0) THEN
30611  FOR X IN p_cal_req_ldets_tbl.FIRST .. p_cal_req_ldets_tbl.LAST
30612  LOOP
30613   Y := Y + 1;
30614   G_ADJUSTMENT_AMOUNT_TBL_D(Y) := p_cal_req_ldets_tbl(X).adjustment_amount;
30615   G_BENEFIT_QUANTITY_TBL_D(Y) := p_cal_req_ldets_tbl(X).benefit_qty;
30616   G_OPERAND_VALUE_TBL_D(Y) := p_cal_req_ldets_tbl(X).operand_value;
30617 
30618   -- 2388011_new
30619   /*
30620   --begin 2388011, grp_of_lines_pbh
30621   IF (p_cal_req_ldets_tbl(X).modifier_level_code = G_LINE_GROUP) THEN
30622    G_QUALIFIER_VALUE_TBL_D(Y) := p_cal_req_ldets_tbl(X).qualifier_value;
30623   ELSE
30624    G_QUALIFIER_VALUE_TBL_D(Y) := NULL; -- needed , do not remove this code
30625   END IF;
30626   -- end 2388011, grp_of_lines_pbh
30627   */
30628 
30629   G_LINE_DETAIL_INDEX_TBL_D(Y) := p_cal_req_ldets_tbl(X).line_detail_index;
30630  END LOOP;
30631 END IF;
30632 
30633 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30634 engine_debug ('In Line Update Information300');
30635 engine_debug ('Related Pl/sql table count : ' || p_cal_req_rltd_tbl.count);
30636 
30637 END IF;
30638  -- Load Related Lines Information
30639 IF (p_cal_req_rltd_tbl.COUNT > 0) THEN
30640  FOR X IN p_cal_req_rltd_tbl.FIRST .. p_cal_req_rltd_tbl.LAST
30641  LOOP
30642 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30643 engine_debug ('In Line Update Information3001');
30644 engine_debug ('Line Qty : ' || p_cal_req_rltd_tbl(X).line_qty);
30645 engine_debug ('Adjustment Amt : ' || p_cal_req_rltd_tbl(X).adjustment_amount);
30646 engine_debug ('Line Detail : ' || p_cal_req_rltd_tbl(X).child_line_detail_index);
30647 END IF;
30648   L := L+1;
30649   G_LINE_QUANTITY_TBL_R(L) := p_cal_req_rltd_tbl(X).line_qty;
30650   G_ADJUSTMENT_AMOUNT_TBL_R(L) := p_cal_req_rltd_tbl(X).adjustment_amount;
30651   G_LINE_DETAIL_INDEX_TBL_R(L) := p_cal_req_rltd_tbl(X).child_line_detail_index;
30652  END LOOP;
30653 END IF;
30654 
30655 --Need to change it when have more time. Using bulk binding features.
30656 --to imporve performance
30657 
30658 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30659 engine_debug ('In Line Update Information400');
30660  engine_debug('#7');
30661 END IF;
30662  --Bug# 1372485
30663  --Unit price can not be null at the very first phase
30664   IF (p_phase_sequence = G_PRICE_LIST_SEQUENCE
30665      AND  p_cal_req_line_rec.UNIT_PRICE IS NULL
30666      AND  I.line_type_code <> G_ORDER_LEVEL
30667 	AND  I.price_flag <> G_NO) THEN
30668 
30669 	-- begin shu, fix bug 2425027
30670    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30671  	 engine_debug ('percent price: '||p_cal_req_line_rec.PERCENT_PRICE);
30672  	 engine_debug ('related item price: '||p_cal_req_line_rec.RELATED_ITEM_PRICE);
30673    END IF;
30674 
30675  	 IF p_cal_req_line_rec.PERCENT_PRICE IS NOT NULL AND p_cal_req_line_rec.RELATED_ITEM_PRICE IS NULL THEN
30676  	 	l_message := ' No refernce of parent item or parent price is null for percent-based pricing.';
30677     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30678  	 	engine_debug ('line_index: '||i.line_index);
30679     END IF;
30680  	 	UPDATE qp_npreq_lines_tmp qplines
30681   		SET
30682          	PROCESSED_FLAG = G_PROCESSED,
30683          	PERCENT_PRICE = p_cal_req_line_rec.PERCENT_PRICE -- still keep the percent_price
30684   		WHERE qplines.LINE_INDEX = i.LINE_INDEX;
30685 
30686   		DELETE_LINES (i.LINE_INDEX,
30687                   		G_STATUS_INVALID_PRICE_LIST,
30688                   		l_message,
30689                                 l_status_code,
30690                                 l_status_text);
30691  	 ELSE
30692 	 -- end shu, fix bug 2425027
30693 
30694    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30695  		engine_debug('#8');
30696 
30697    END IF;
30698         	-- begin shulin bug 1605829 fix
30699 
30700  		OPEN get_request_prclst_name_cur(I.PRICE_LIST_HEADER_ID);
30701       		FETCH get_request_prclst_name_cur INTO l_request_price_list_name;
30702      		CLOSE get_request_prclst_name_cur;
30703 
30704 		OPEN get_request_inv_item_id_cur(I.LINE_INDEX);
30705       		FETCH get_request_inv_item_id_cur INTO l_request_item_id;
30706      		CLOSE get_request_inv_item_id_cur;
30707 
30708  		OPEN get_request_inv_item_name_cur(l_request_item_id);
30709       		FETCH get_request_inv_item_name_cur INTO l_request_item_name;
30710      		CLOSE get_request_inv_item_name_cur;
30711 
30712  		-- if item_name does not exist, then use inventory_id to display
30713  		IF l_request_item_name IS NULL AND l_request_item_id IS NOT NULL THEN
30714  			l_request_item_name := ' ID: ' || l_request_item_id;
30715  		END IF;
30716 
30717  		l_request_uom := I.LINE_UOM_CODE;
30718 
30719  		FND_MESSAGE.SET_NAME('QP','QP_PRC_NO_LIST_PRICE');
30720 		FND_MESSAGE.SET_TOKEN('ITEM',l_request_item_name);
30721 		FND_MESSAGE.SET_TOKEN('UNIT',l_request_uom);
30722 		FND_MESSAGE.SET_TOKEN('PRICE_LIST',l_request_price_list_name);
30723 
30724                 l_message := FND_MESSAGE.GET;
30725 
30726           IF (G_REQUEST_TYPE_CODE = 'PO' AND l_request_price_list_name IS NULL) THEN
30727        		SET_STATUS_CODE(NULL,
30728                        l_message,
30729                        I.LINE_INDEX,
30730                        NULL,
30731                       'LINES',
30732                       l_status_code,
30733                       l_status_text);
30734 
30735               ELSE
30736        		SET_STATUS_CODE(G_STATUS_INVALID_PRICE_LIST,
30737                        l_message,
30738                        I.LINE_INDEX,
30739                        NULL,
30740                       'LINES',
30741                       l_status_code,
30742                       l_status_text);
30743                  END IF;
30744 
30745        		SET_STATUS_CODE(G_STATUS_DELETED,
30746                        l_message,
30747                        I.LINE_INDEX,
30748                        NULL,
30749                       'ATTRS',
30750                       l_status_code,
30751                       l_status_text);
30752 
30753        		SET_STATUS_CODE(G_STATUS_DELETED,
30754                        l_message,
30755                        I.LINE_INDEX,
30756                        NULL,
30757                       'LDETS',
30758                       l_status_code,
30759                       l_status_text);
30760 
30761 	-- end shu bug 1605829 fix
30762 
30763 	END IF; -- end if p_cal_req_line_rec.PERCENT_PRICE IS NOT NULL, shu fix bug 2425027
30764   END IF;
30765 
30766 --Reset the values for next loop
30767  l_parent_line_quantity := NULL;
30768  l_parent_unit_price :=NULL; --2776849
30769  l_parent_line_unit_price :=NULL; -- 2776849
30770  l_parent_line_uom_code :=NULL;
30771  l_message := NULL; -- shu, fix bug 2425027
30772  p_cal_req_line_rec := l_cal_req_line_rec;
30773  p_cal_req_ldets_tbl.DELETE ;
30774  p_cal_req_rltd_tbl.DELETE;
30775  J := 1; -- For new request line
30776 
30777 <<E_LOOP>>
30778 null;
30779 END LOOP;  --end loop for I
30780 
30781 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30782 engine_debug ('In Line Update Information500');
30783 END IF;
30784  -- Update All the Line Information at 1 shot
30785 IF (G_LINE_INDEX_TBL_C.COUNT > 0 ) THEN
30786 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30787 engine_debug ('In Line Update Information');
30788 END IF;
30789  FORALL M IN G_LINE_INDEX_TBL_C.FIRST.. G_LINE_INDEX_TBL_C.LAST
30790   UPDATE qp_npreq_lines_tmp qplines
30791   SET    PRICING_STATUS_CODE = G_STATUS_UPDATED,
30792          PROCESSED_FLAG = G_PROCESSED,
30793          UNIT_PRICE = G_UNIT_PRICE_TBL_C(M),
30794          LINE_UNIT_PRICE = G_LINE_UNIT_PRICE_TBL_C(M), --shu_latest
30795 --         ORDER_UOM_SELLING_PRICE = G_ORDER_UOM_TBL_C(M), -- bug 2693700
30796          ORDER_UOM_SELLING_PRICE = l_unit_selling_price(M),         --[prarasto:Post Round]
30797          --ORDER_UOM_SELLING_PRICE_UR = l_unit_selling_price_ur(M),   --[prarasto:Post Round], [julin/postround] redesign
30798          PERCENT_PRICE = G_PERCENT_PRICE_TBL_C(M),
30799 --         ADJUSTED_UNIT_PRICE = NVL(G_ADJUSTED_UNIT_PRICE_TBL_C(M), G_UNIT_PRICE_TBL_C(M)),
30800          ADJUSTED_UNIT_PRICE = l_adjusted_unit_price(M),            --[prarasto:Post Round]
30801          --ADJUSTED_UNIT_PRICE_UR = l_adjusted_unit_price_ur(M),      --[prarasto:Post Round], [julin/postround] redesign
30802          PARENT_PRICE = G_PARENT_PRICE_TBL_C(M),
30803          --PARENT_QUANTITY = NVL(G_PARENT_PRICED_QUANTITY_TBL_C(M),G_PARENT_LINE_QUANTITY_TBL_C(M)),
30804          PARENT_QUANTITY = NVL(G_PARENT_LINE_QUANTITY_TBL_C(M), G_PARENT_PRICED_QUANTITY_TBL_C(M)), -- 2776849
30805          --PARENT_UOM_CODE = G_PARENT_LINE_UOM_TBL_C(M),
30806          PARENT_UOM_CODE = G_PARENT_LINE_UOM_TBL_C(M), -- 2776849
30807 --         EXTENDED_PRICE = G_EXTENDED_PRICE_TBL_C(M) -- block pricing
30808          EXTENDED_PRICE = l_extended_selling_price(M)               --[prarasto:Post Round]
30809          --EXTENDED_SELLING_PRICE_UR = l_extended_selling_price_ur(M)  --[prarasto:Post Round], [julin/postround] redesign
30810   WHERE qplines.LINE_INDEX = G_LINE_INDEX_TBL_C(M)
30811   AND (qplines.PRICE_FLAG <> G_NO or qplines.PROCESSED_CODE = G_BY_ENGINE) --CURRENT OF l_request_line_cur;
30812   -- shu, add following line to fix bug 2425027, so pricing_status_code IPL does not get changed to be UPDATED here
30813   AND (qplines.PRICING_STATUS_CODE <> G_STATUS_INVALID_PRICE_LIST
30814   OR  qplines.LIST_PRICE_OVERRIDE_FLAG IN ('Y', 'O'));  --po integration
30815 END IF;
30816 
30817 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30818 engine_debug ('In Line Update Information600');
30819 END IF;
30820 IF (p_is_direct_call = TRUE) THEN
30821  -- Update All the Line Details Information at 1 Shot for all Lines
30822  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30823  engine_debug ('In Line Detail Update Information1');
30824  END IF;
30825  IF (G_LINE_DETAIL_INDEX_TBL_D.COUNT > 0) THEN
30826   FORALL O IN G_LINE_DETAIL_INDEX_TBL_D.FIRST .. G_LINE_DETAIL_INDEX_TBL_D.LAST
30827    UPDATE qp_npreq_ldets_tmp
30828    SET ADJUSTMENT_AMOUNT = G_ADJUSTMENT_AMOUNT_TBL_D(O),
30829       --LINE_QUANTITY     = G_QUALIFIER_VALUE_TBL_D(O),-- 2388011, ASK RAVI, either priced_quantity,group_quantity,group_amount
30830       BENEFIT_QTY       = G_BENEFIT_QUANTITY_TBL_D(O),
30831       OPERAND_VALUE     = G_OPERAND_VALUE_TBL_D(O) --2388011_new, remove comma
30832       -- GROUP_QUANTITY    = G_QUALIFIER_VALUE_TBL_D(O), --2388011_new
30833       -- GROUP_AMOUNT      = G_QUALIFIER_VALUE_TBL_D(O)  --2388011_new
30834    WHERE LINE_DETAIL_INDEX =  G_LINE_DETAIL_INDEX_TBL_D(O);
30835  END IF;
30836 ELSE
30837 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30838 engine_debug ('In Line Detail Update Information2');
30839 END IF;
30840  -- Update All the Line Details Information at 1 Shot for all Lines
30841  IF (G_LINE_DETAIL_INDEX_TBL_D.COUNT > 0) THEN
30842   FORALL O IN G_LINE_DETAIL_INDEX_TBL_D.FIRST .. G_LINE_DETAIL_INDEX_TBL_D.LAST
30843    UPDATE /*+ index(QP_NPREQ_LDETS_TMP QP_PREQ_LDETS_TMP_U1) */  qp_npreq_ldets_tmp  --5658579
30844    SET ADJUSTMENT_AMOUNT = G_ADJUSTMENT_AMOUNT_TBL_D(O),
30845       --LINE_QUANTITY     = G_QUALIFIER_VALUE_TBL_D(O), -- 2388011, ASK RAVI, either priced_quantity,group_quantity,group_amount
30846       BENEFIT_QTY       = G_BENEFIT_QUANTITY_TBL_D(O),
30847       OPERAND_VALUE     = G_OPERAND_VALUE_TBL_D(O),
30848       --GROUP_QUANTITY    = G_QUALIFIER_VALUE_TBL_D(O), --2388011_new
30849       --GROUP_AMOUNT      = G_QUALIFIER_VALUE_TBL_D(O), --2388011_new
30850       APPLIED_FLAG      = AUTOMATIC_FLAG
30851    WHERE LINE_DETAIL_INDEX =  G_LINE_DETAIL_INDEX_TBL_D(O);
30852  END IF;
30853 END IF;
30854 
30855 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30856 engine_debug ('In Line Detail Update Information3');
30857 END IF;
30858  -- Update All the Related Line Details Information at 1 Shot for all Lines
30859 IF (G_LINE_DETAIL_INDEX_TBL_R.COUNT > 0) THEN
30860  FORALL O IN G_LINE_DETAIL_INDEX_TBL_R.FIRST .. G_LINE_DETAIL_INDEX_TBL_R.LAST
30861   UPDATE qp_npreq_ldets_tmp
30862   SET ADJUSTMENT_AMOUNT = G_ADJUSTMENT_AMOUNT_TBL_R(O),
30863       LINE_QUANTITY     = G_LINE_QUANTITY_TBL_R(O)
30864   WHERE LINE_DETAIL_INDEX =  G_LINE_DETAIL_INDEX_TBL_R(O);
30865 END IF;
30866 
30867  -- Update all GSA Violations at 1 shot
30868  --INDX,QP_PREQ_GRP.call_calculation_engine.call_calculation_engine_upd6,qp_npreq_lines_tmp_N1,LINE_INDEX,1
30869 IF (G_GSA_LINE_INDEX_TBL_C.COUNT > 0) THEN
30870  FORALL K IN G_GSA_LINE_INDEX_TBL_C.FIRST .. G_GSA_LINE_INDEX_TBL_C.LAST
30871   UPDATE qp_npreq_lines_tmp
30872   SET PRICING_STATUS_CODE = G_STATUS_GSA_VIOLATION,
30873       PRICING_STATUS_TEXT = l_status_text
30874   WHERE LINE_INDEX = G_GSA_LINE_INDEX_TBL_C(K);
30875 END IF;
30876 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30877 engine_debug ('In End Update Information');
30878 
30879 END IF;
30880   -- Reset All tables
30881   G_UNIT_PRICE_TBL_C.delete;
30882   G_PERCENT_PRICE_TBL_C.delete;
30883   G_ADJUSTED_UNIT_PRICE_TBL_C.delete;
30884   G_PARENT_PRICE_TBL_C.delete;
30885   G_PARENT_PRICED_QUANTITY_TBL_C.delete;
30886   G_PARENT_LINE_QUANTITY_TBL_C.delete;
30887   G_PARENT_LINE_UOM_TBL_C.delete;
30888   G_LINE_INDEX_TBL_C.delete;
30889   G_GSA_LINE_INDEX_TBL_C.delete;
30890   G_EXTENDED_PRICE_TBL_C.delete; -- block pricing
30891 
30892   G_ADJUSTMENT_AMOUNT_TBL_D.delete;
30893   --G_LINE_QUANTITY_TBL_D.delete;
30894   G_BENEFIT_QUANTITY_TBL_D.delete;
30895   G_OPERAND_VALUE_TBL_D.delete;
30896   G_QUALIFIER_VALUE_TBL_D.delete;
30897   G_LINE_DETAIL_INDEX_TBL_D.delete;
30898 
30899   G_LINE_QUANTITY_TBL_R.delete;
30900   G_ADJUSTMENT_AMOUNT_TBL_R.delete;
30901   G_LINE_DETAIL_INDEX_TBL_R.delete;
30902 
30903 EXCEPTION
30904   WHEN E_CAL_ENGINE_ERROR THEN
30905     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30906     engine_debug(l_routine||' '||l_status_text);
30907     END IF;
30908      DELETE_LINES(l_err_line_index,
30909                   G_STATUS_OTHER_ERRORS,
30910                   'Error returned by QP_Calculate_Price_PUB.Calculate_Price',
30911                   l_status_code,
30912                   l_status_text);
30913   WHEN OTHERS THEN
30914     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
30915     engine_debug('Exception in internal procedure CALL_CALCULATION_ENGINE ' || SQLERRM);
30916     END IF;
30917     x_status_code := FND_API.G_RET_STS_ERROR;
30918     x_status_text :=l_routine||' '||SQLERRM;
30919     null;
30920 END;
30921 
30922 /*+------------------------------------------------------------
30923   | FORMULA INTEGRATION
30924   +------------------------------------------------------------
30925 */
30926 
30927 PROCEDURE Formula_Processing(p_line_index       IN NUMBER,
30928                              p_pricing_phase_id IN NUMBER,
30929                              x_status_code      OUT NOCOPY VARCHAR2,
30930                              x_status_text      OUT NOCOPY VARCHAR2    ) AS
30931 
30932 /*
30933 INDX,QP_PREQ_GRP.formula_processing.l_get_formula_id_cur,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
30934 INDX,QP_PREQ_GRP.formula_processing.l_get_formula_id_cur,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
30935 INDX,QP_PREQ_GRP.formula_processing.l_get_formula_id_cur,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
30936 
30937 -- Full table scan on qp_npreq_lines_tmp
30938 */
30939   CURSOR l_get_formula_id_cur IS
30940 
30941   SELECT /*+ ORDERED USE_NL(b) index(b QP_PREQ_LDETS_TMP_N1) l_get_formula_id_cur */
30942          b.LINE_INDEX , b.PRICE_FORMULA_ID,a.PRICING_EFFECTIVE_DATE,b.CREATED_FROM_LIST_LINE_ID,
30943 	 b.OPERAND_CALCULATION_CODE , b.OPERAND_VALUE, b.CREATED_FROM_LIST_LINE_TYPE,b.LINE_DETAIL_TYPE_CODE,
30944          b.GROUP_QUANTITY,b.LINE_QUANTITY GROUP_AMOUNT
30945   FROM
30946          qp_npreq_lines_tmp a,
30947          qp_npreq_ldets_tmp b
30948   WHERE  a.LINE_INDEX = b.LINE_INDEX
30949   AND    b.PRICING_STATUS_CODE = G_STATUS_NEW
30950   AND    b.PRICING_PHASE_ID = p_pricing_phase_id
30951   AND    b.PRICE_FORMULA_ID IS NOT NULL;
30952 
30953 CURSOR l_get_list_price_cur(p_line_index PLS_INTEGER) IS
30954   SELECT UNIT_PRICE
30955   FROM   qp_npreq_lines_tmp
30956   WHERE  LINE_INDEX = p_line_index;
30957 
30958   l_req_line_attrs_rec     QP_FORMULA_PRICE_CALC_PVT.req_line_attrs_rec;
30959   l_req_line_attrs_tbl     QP_FORMULA_PRICE_CALC_PVT.req_line_attrs_tbl;
30960   l_index                  NUMBER := 1;
30961   l_formula_based_price    NUMBER;
30962   l_list_line_id           NUMBER;
30963   l_return_status          VARCHAR2(240);
30964   E_FORMULA_CALL_ERROR     EXCEPTION;
30965   l_list_price             NUMBER;
30966   l_modifier_value         NUMBER;
30967   l_routine                VARCHAR2(240):='Routine:QP_PREQ_GRP.Formula_Processing';
30968   l_line_index             NUMBER;
30969   l_status_code            VARCHAR2(30);
30970   l_status_text            VARCHAR2(240);
30971   l_attr_inserted_flag       BOOLEAN := FALSE;
30972   l_group_amount             NUMBER;
30973 
30974 
30975   TYPE Num_Type IS TABLE OF Number INDEX BY BINARY_INTEGER;
30976   TYPE Char_Type IS TABLE OF Varchar2(30) INDEX BY BINARY_INTEGER;
30977 
30978   l_line_index_tbl           Num_Type;
30979   l_attribute_type_tbl       Char_Type;
30980   l_context_tbl              Char_Type;
30981   l_attribute_tbl            Char_Type;
30982   l_pricing_status_code_tbl  Char_Type;
30983   l_value_from_tbl           Num_Type;
30984   l_value_from               Number;
30985   l_msg_attribute            VARCHAR2(80);
30986   l_msg_context              VARCHAR2(240);
30987   l_rows  NATURAL := 5000;
30988 
30989   -- Bug 2772214
30990   l_pass_qualifiers varchar2(10) := FND_PROFILE.VALUE('QP_PASS_QUALIFIERS_TO_GET_CUSTOM');
30991 
30992   -- added for formula messages
30993   E_ATTRIBUTE_NON_NUMERIC EXCEPTION;
30994   CURSOR am_attr_cols_cur
30995   IS
30996     SELECT /*+ dynamic_sampling(1) */ line_index, attribute_type, context, attribute,
30997            pricing_status_code, qp_number.canonical_to_number(value_from)
30998     FROM   qp_npreq_line_attrs_tmp lattr
30999     WHERE  attribute_type IN ('PRICING', 'PRODUCT')
31000     AND    pricing_status_code = G_STATUS_UNCHANGED
31001     AND    EXISTS (SELECT format_type
31002                    FROM   fnd_flex_value_sets VSET,
31003                           qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
31004                    WHERE  vset.flex_value_set_id = segments.user_valueset_id
31005                    AND    segments.application_id = 661
31006                    AND    pcontexts.prc_context_type <> 'QUALIFIER'
31007                    AND    pcontexts.prc_context_code = lattr.context
31008                    AND    segments.segment_mapping_column = lattr.attribute
31009                    AND    segments.prc_context_id = pcontexts.prc_context_id
31010                    AND    vset.format_type = 'N');
31011 
31012     -- Bug 2772214, To pass Qualifiers to get_custom_price
31013 
31014    CURSOR am_attr_qual_cols_cur
31015    IS
31016     SELECT line_index, attribute_type, context, attribute,
31017            pricing_status_code, qp_number.canonical_to_number(value_from)
31018     FROM   qp_npreq_line_attrs_tmp lattr
31019     WHERE  attribute_type IN ('PRICING', 'PRODUCT', 'QUALIFIER')
31020     AND    pricing_status_code = G_STATUS_UNCHANGED
31021     AND    EXISTS (SELECT format_type
31022                    FROM   fnd_flex_value_sets VSET,
31023                           qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
31024                    WHERE  vset.flex_value_set_id = segments.user_valueset_id
31025                    AND    segments.application_id = 661
31026                    AND    pcontexts.prc_context_code = lattr.context
31027                    AND    segments.segment_mapping_column = lattr.attribute
31028                    AND    segments.prc_context_id = pcontexts.prc_context_id
31029                    AND    vset.format_type = 'N');
31030 
31031 -- added for formula error messages
31032  CURSOR am_attr_qual_msg_cur
31033  IS
31034  SELECT  lattr.value_from,lattr.context,
31035          nvl(SEGMENTS_TL.SEEDED_SEGMENT_NAME,SEGMENTS_TL.USER_SEGMENT_NAME) attribute
31036  FROM    qp_npreq_line_attrs_tmp lattr, fnd_flex_value_sets VSET,
31037          qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS , qp_segments_tl SEGMENTS_TL
31038  WHERE   attribute_type IN ('PRICING', 'PRODUCT', 'QUALIFIER')
31039                    AND    pricing_status_code = G_STATUS_UNCHANGED
31040                    AND    vset.flex_value_set_id = segments.user_valueset_id
31041                    AND    segments.application_id = 661
31042                    AND    pcontexts.prc_context_code = lattr.context
31043                    AND    segments.segment_mapping_column = lattr.attribute
31044                    AND    segments.prc_context_id = pcontexts.prc_context_id
31045                    AND    segments.segment_id = segments_tl.segment_id
31046                    AND    vset.format_type = 'N';
31047 
31048 
31049   CURSOR attr_cols_cur
31050   IS
31051     SELECT line_index, attribute_type, context, attribute,
31052            pricing_status_code, qp_number.canonical_to_number(value_from)
31053     FROM   qp_npreq_line_attrs_tmp lattr
31054     WHERE  attribute_type IN ('PRICING', 'PRODUCT')
31055     AND    pricing_status_code = G_STATUS_UNCHANGED
31056     AND    EXISTS (SELECT format_type
31057                    FROM fnd_flex_value_sets VSET,
31058                         fnd_descr_flex_column_usages DFLEX
31059                    WHERE vset.flex_value_set_id = dflex.flex_value_set_id
31060 	           AND dflex.application_id = 661
31061                    AND dflex.descriptive_flexfield_name =
31062                                        'QP_ATTR_DEFNS_PRICING'
31063                    AND dflex.descriptive_flex_context_code = lattr.context
31064                    AND dflex.application_column_name = lattr.attribute
31065 	           AND vset.format_type = 'N');
31066 
31067   BEGIN
31068    x_status_code := FND_API.G_RET_STS_SUCCESS;
31069    qp_debug_util.tstart('FORMULA_PROCESSING','Processing Formulas');
31070    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31071    engine_debug('In ---'||l_routine||'---');
31072    engine_debug('PRICING_PHASE_ID: '||p_pricing_phase_id);
31073 
31074    END IF;
31075    FOR i IN l_get_formula_id_cur
31076    LOOP
31077            l_line_index := i.line_index;
31078 
31079            -- performance related change. Populate the temp table
31080            --qp_preq_line_attrs_formula_tmp with relevant records from
31081            --qp_npreq_line_attrs_tmp with
31082            IF l_get_formula_id_cur%ROWCOUNT = 1 THEN
31083 
31084             IF G_INSERT_INTO_FORMULA_TMP
31085             THEN
31086 
31087              --Delete already existing rows from formula tmp table
31088              DELETE FROM qp_preq_line_attrs_formula_tmp;
31089 
31090              --Insert request line attrs with datatype = 'N'
31091 	     IF G_AM_INSTALLED_PROFILE = G_YES THEN
31092                If nvl(l_pass_qualifiers, 'N') = 'N' Then /* Bug 2772214 */
31093                OPEN am_attr_cols_cur;
31094                LOOP
31095                  l_line_index_tbl.delete;
31096                  l_attribute_type_tbl.delete;
31097                  l_context_tbl.delete;
31098                  l_attribute_tbl.delete;
31099                  l_pricing_status_code_tbl.delete;
31100                  l_value_from_tbl.delete;
31101 
31102                  FETCH am_attr_cols_cur BULK COLLECT INTO
31103                         l_line_index_tbl, l_attribute_type_tbl, l_context_tbl,
31104                         l_attribute_tbl, l_pricing_status_code_tbl,
31105                         l_value_from_tbl LIMIT l_rows;
31106 
31107                  EXIT WHEN l_line_index_tbl.COUNT = 0;
31108 
31109                  --Change flexible mask to mask below for formula pattern use.
31110                  qp_number.canonical_mask :=
31111               '00999999999999999999999.99999999999999999999999999999999999999';
31112                  FORALL i IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
31113                    INSERT INTO qp_preq_line_attrs_formula_tmp
31114                    ( line_index,
31115                      attribute_type,
31116                      context,
31117                      attribute,
31118                      pricing_status_code,
31119                      value_from
31120                    )
31121                    VALUES
31122                    ( l_line_index_tbl(i),
31123                      l_attribute_type_tbl(i),
31124                      l_context_tbl(i),
31125                      l_attribute_tbl(i),
31126                      l_pricing_status_code_tbl(i),
31127                      qp_number.number_to_canonical(l_value_from_tbl(i))
31128                    );
31129 
31130                  --Change mask back to flexible mask.
31131                  qp_number.canonical_mask :=
31132               'FM999999999999999999999.9999999999999999999999999999999999999999';
31133 
31134                END LOOP; --Loop for bulk fetch
31135 
31136                CLOSE am_attr_cols_cur;
31137              Else
31138            BEGIN
31139                OPEN am_attr_qual_cols_cur;
31140                LOOP
31141                  l_line_index_tbl.delete;
31142                  l_attribute_type_tbl.delete;
31143                  l_context_tbl.delete;
31144                  l_attribute_tbl.delete;
31145                  l_pricing_status_code_tbl.delete;
31146                  l_value_from_tbl.delete;
31147                  FETCH am_attr_qual_cols_cur  BULK COLLECT INTO
31148                         l_line_index_tbl, l_attribute_type_tbl, l_context_tbl,
31149                         l_attribute_tbl, l_pricing_status_code_tbl,
31150                         l_value_from_tbl LIMIT l_rows;
31151 
31152                  EXIT WHEN l_line_index_tbl.COUNT = 0;
31153                --Change flexible mask to mask below for formula pattern use.
31154                  qp_number.canonical_mask :=
31155               '00999999999999999999999.99999999999999999999999999999999999999';
31156                  FORALL i IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
31157                    INSERT INTO qp_preq_line_attrs_formula_tmp
31158                    ( line_index,
31159                      attribute_type,
31160                      context,
31161                      attribute,
31162                      pricing_status_code,
31163                      value_from
31164                    )
31165                    VALUES
31166                    ( l_line_index_tbl(i),
31167                      l_attribute_type_tbl(i),
31168                      l_context_tbl(i),
31169                      l_attribute_tbl(i),
31170                      l_pricing_status_code_tbl(i),
31171                      qp_number.number_to_canonical(l_value_from_tbl(i))
31172                    );
31173               qp_number.canonical_mask :=
31174               'FM999999999999999999999.9999999999999999999999999999999999999999';
31175 
31176                END LOOP; --Loop for bulk fetch
31177                CLOSE  am_attr_qual_cols_cur;
31178            EXCEPTION
31179            WHEN OTHERS THEN
31180                BEGIN
31181                  fnd_message.set_name('QP','QP_PRICING_ATTR_NON_NUMERIC');
31182                  FOR l_rec IN am_attr_qual_msg_cur
31183                  LOOP
31184                          l_msg_context   := l_rec.context;
31185                          l_msg_attribute := l_rec.attribute;
31186                          l_value_from := qp_number.canonical_to_number(l_rec.value_from);
31187                  END LOOP;
31188                EXCEPTION
31189                WHEN OTHERS THEN
31190                     fnd_message.set_token('CONTEXT',l_msg_context);
31191                     fnd_message.set_token('ATTRIBUTE',l_msg_attribute);
31192                END;
31193 
31194                RAISE  E_ATTRIBUTE_NON_NUMERIC;
31195            END;
31196 
31197              End If;
31198 
31199                  --Change flexible mask to mask below for formula pattern use.
31200                  qp_number.canonical_mask :=
31201               '00999999999999999999999.99999999999999999999999999999999999999';
31202 
31203              -- Bug 2772214 l_pass_qualifiers condition in where clause
31204              --Insert request line attrs with datatype 'X', 'Y', 'C' or null
31205                INSERT INTO qp_preq_line_attrs_formula_tmp
31206                ( line_index,
31207                  attribute_type,
31208                  context,
31209                  attribute,
31210                  pricing_status_code,
31211                  value_from
31212                )
31213                SELECT /*+ dynamic_sampling(1) */ line_index,
31214                       attribute_type,
31215                       context,
31216                       attribute,
31217                       pricing_status_code,
31218                       value_from
31219                FROM   qp_npreq_line_attrs_tmp lattr
31220                WHERE
31221                       ((nvl(l_pass_qualifiers, 'N') = 'Y'
31222                       AND attribute_type IN ('QUALIFIER'))
31223                      OR attribute_type IN ('PRICING', 'PRODUCT')) -- Changed for bug2806857
31224                AND    pricing_status_code = G_STATUS_UNCHANGED
31225 	       AND    NOT EXISTS (
31226                    SELECT format_type
31227                    FROM fnd_flex_value_sets VSET,
31228                         qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
31229                    WHERE vset.flex_value_set_id = segments.user_valueset_id
31230                    AND segments.application_id = 661
31231                    AND pcontexts.prc_context_type = decode(lattr.attribute_type,'PRICING','PRICING_ATTRIBUTE',
31232                        lattr.attribute_type) -- Changed for bug2806857
31233                    AND pcontexts.prc_context_code = lattr.context
31234                    AND segments.segment_mapping_column = lattr.attribute
31235                    AND segments.prc_context_id = pcontexts.prc_context_id
31236                    AND vset.format_type = 'N'); --by yangli 03/06/2002 9:30am
31237 
31238                  --Change mask back to flexible mask.
31239                  qp_number.canonical_mask :=
31240               'FM999999999999999999999.9999999999999999999999999999999999999999';
31241 
31242 	     ELSE --If AM not installed
31243 
31244                OPEN attr_cols_cur;
31245                LOOP
31246                  l_line_index_tbl.delete;
31247                  l_attribute_type_tbl.delete;
31248                  l_context_tbl.delete;
31249                  l_attribute_tbl.delete;
31250                  l_pricing_status_code_tbl.delete;
31251                  l_value_from_tbl.delete;
31252 
31253                  FETCH attr_cols_cur BULK COLLECT INTO
31254                         l_line_index_tbl, l_attribute_type_tbl, l_context_tbl,
31255                         l_attribute_tbl, l_pricing_status_code_tbl,
31256                         l_value_from_tbl LIMIT l_rows;
31257 
31258                  EXIT WHEN l_line_index_tbl.COUNT = 0;
31259 
31260                  --Change flexible mask to mask below for formula pattern use.
31261                  qp_number.canonical_mask :=
31262               '00999999999999999999999.99999999999999999999999999999999999999';
31263 
31264                  FORALL i IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
31265                    INSERT INTO qp_preq_line_attrs_formula_tmp
31266                    ( line_index,
31267                      attribute_type,
31268                      context,
31269                      attribute,
31270                      pricing_status_code,
31271                      value_from
31272                    )
31273                    VALUES
31274                    ( l_line_index_tbl(i),
31275                      l_attribute_type_tbl(i),
31276                      l_context_tbl(i),
31277                      l_attribute_tbl(i),
31278                      l_pricing_status_code_tbl(i),
31279                      qp_number.number_to_canonical(l_value_from_tbl(i))
31280                    );
31281 
31282                  --Change mask back to flexible mask.
31283                  qp_number.canonical_mask :=
31284               'FM999999999999999999999.9999999999999999999999999999999999999999';
31285 
31286                END LOOP; --Loop for bulk fetch
31287 
31288                CLOSE attr_cols_cur;
31289 
31290                  --Change flexible mask to mask below for formula pattern use.
31291                  qp_number.canonical_mask :=
31292               '00999999999999999999999.99999999999999999999999999999999999999';
31293 
31294                --Insert request line attrs with datatype 'X', 'Y', 'C' or null
31295                INSERT INTO qp_preq_line_attrs_formula_tmp
31296                ( line_index,
31297                  attribute_type,
31298                  context,
31299                  attribute,
31300                  pricing_status_code,
31301                  value_from
31302                )
31303                SELECT line_index,
31304                       attribute_type,
31305                       context,
31306                       attribute,
31307                       pricing_status_code,
31308                       value_from
31309                FROM   qp_npreq_line_attrs_tmp lattr
31310                WHERE  attribute_type IN ('PRICING', 'PRODUCT')
31311                AND    pricing_status_code = G_STATUS_UNCHANGED
31312 	       AND    NOT EXISTS (
31313                    SELECT format_type
31314                    FROM fnd_flex_value_sets VSET,
31315                         fnd_descr_flex_column_usages DFLEX
31316                    WHERE vset.flex_value_set_id = dflex.flex_value_set_id
31317 	           AND dflex.application_id = 661
31318                    AND dflex.descriptive_flexfield_name =
31319                                 'QP_ATTR_DEFNS_PRICING'
31320                    AND dflex.descriptive_flex_context_code = lattr.context
31321                    AND dflex.application_column_name = lattr.attribute
31322 	           AND vset.format_type = 'N');
31323 
31324                  --Change mask back to flexible mask.
31325                  qp_number.canonical_mask :=
31326               'FM999999999999999999999.9999999999999999999999999999999999999999';
31327 
31328 	     END IF; -- if G_AM_INSTALLED_PROFILE is true
31329 
31330              --Reset Global Flag
31331              G_INSERT_INTO_FORMULA_TMP := FALSE;
31332              --G_INSERT_INTO_FORMULA_TMP := 'N';
31333 
31334             END IF; --If G_INSERT_INTO_FORMULA_TMP is true
31335 
31336            END IF; --If cur%rowcount is 1
31337 
31338            -- FTE
31339 
31340             -- Delete for every modifier
31341             IF(l_attr_inserted_flag = TRUE) THEN
31342              DELETE FROM qp_preq_line_attrs_formula_tmp
31343              WHERE line_index = i.line_index
31344              AND   context = 'VOLUME'
31345              AND   attribute IN ('PRICING_ATTRIBUTE4','PRICING_ATTRIBUTE5')
31346              AND   pricing_status_code = G_STATUS_UNCHANGED;
31347             END IF;
31348 
31349             l_attr_inserted_flag := FALSE;
31350 
31351             IF (i.group_quantity IS NOT NULL and l_attr_inserted_flag = FALSE) THEN
31352 
31353 
31354                   --Change flexible mask to mask below for formula pattern use.
31355                   qp_number.canonical_mask :=
31356                '00999999999999999999999.99999999999999999999999999999999999999';
31357                     INSERT INTO qp_preq_line_attrs_formula_tmp
31358                     ( line_index,
31359                       attribute_type,
31360                       context,
31361                       attribute,
31362                       pricing_status_code,
31363                       value_from
31364                     )
31365                     VALUES
31366                     ( i.line_index,
31367                       G_PRICING_TYPE,
31368                       'VOLUME',
31369                       'PRICING_ATTRIBUTE4',
31370                       G_STATUS_UNCHANGED,
31371                       qp_number.number_to_canonical(i.group_quantity)
31372                     );
31373 
31374                   --Change mask back to flexible mask.
31375                   qp_number.canonical_mask :=
31376                'FM999999999999999999999.9999999999999999999999999999999999999999';
31377 
31378                 l_attr_inserted_flag := TRUE;
31379 
31380             END IF;
31381 
31382             IF (i.group_amount IS NOT NULL and l_attr_inserted_flag = FALSE) THEN
31383 
31384                   --Change flexible mask to mask below for formula pattern use.
31385                   qp_number.canonical_mask :=
31386                '00999999999999999999999.99999999999999999999999999999999999999';
31387                     INSERT INTO qp_preq_line_attrs_formula_tmp
31388                     ( line_index,
31389                       attribute_type,
31390                       context,
31391                       attribute,
31392                       pricing_status_code,
31393                       value_from
31394                     )
31395                     VALUES
31396                     ( i.line_index,
31397                       G_PRICING_TYPE,
31398                       'VOLUME',
31399                       'PRICING_ATTRIBUTE5',
31400                       G_STATUS_UNCHANGED,
31401                       qp_number.number_to_canonical(i.group_amount)
31402                     );
31403 
31404                   --Change mask back to flexible mask.
31405                   qp_number.canonical_mask :=
31406                'FM999999999999999999999.9999999999999999999999999999999999999999';
31407 
31408                 l_attr_inserted_flag := TRUE;
31409 
31410             END IF;
31411 
31412            -- FTE
31413 
31414 	  --FOR K IN l_get_line_attrs_cur
31415 	  --LOOP
31416 --Commenting the population of plsql table l_req_line_attrs_rec.
31417 -- Change.
31418 /*
31419 	    l_req_line_attrs_rec.line_index := i.LINE_INDEX;
31420 	    l_req_line_attrs_rec.attribute_type := i.ATTRIBUTE_TYPE;
31421 	    l_req_line_attrs_rec.context := i.CONTEXT;
31422 	    l_req_line_attrs_rec.attribute := i.ATTRIBUTE;
31423 	    l_req_line_attrs_rec.value := i.VALUE_FROM;
31424 	    l_req_line_attrs_tbl(1) := l_req_line_attrs_rec;
31425 	    l_index := l_index + 1;
31426 */
31427 	  --END LOOP;
31428 
31429           l_list_price := NULL;
31430 
31431           IF(p_pricing_phase_id = G_PRICE_LIST_PHASE_ID AND i.operand_calculation_code = 'UNIT_PRICE') THEN
31432              l_list_price := I.operand_value;
31433              l_modifier_value := NULL;
31434           ELSE
31435             OPEN  l_get_list_price_cur(I.line_index);
31436             FETCH l_get_list_price_cur INTO l_list_price;
31437             CLOSE l_get_list_price_cur;
31438             l_modifier_value := I.operand_value; -- This value needs to be passed eventually
31439           END IF;
31440 
31441           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31442           engine_debug('Processing Formula ID :'||i.PRICE_FORMULA_ID);
31443           engine_debug('Line Index: '||i.line_index);
31444 
31445           END IF;
31446           --Commented parameter l_req_line_attrs_tbl and
31447           --added parameters l_line_index and i.created_from_list_line_type.
31448           -- Change.
31449 	   l_formula_based_price :=
31450               QP_FORMULA_PRICE_CALC_PVT.Calculate(i.PRICE_FORMULA_ID,
31451                                                  l_list_price,
31452                      				 i.PRICING_EFFECTIVE_DATE,
31453                      				 --l_req_line_attrs_tbl,
31454                                                  l_line_index,
31455                                                  i.CREATED_FROM_LIST_LINE_TYPE,
31456                      				 l_return_status,
31457                                                  l_modifier_value);
31458 
31459           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31460           engine_debug('Formula return status: '||l_return_status);
31461           engine_debug ('Formula Base Price : '|| l_formula_based_price);
31462 
31463           END IF;
31464        IF l_return_status IS NULL THEN
31465           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31466           engine_debug('Formula return status is NULL');
31467           engine_debug('FND_API.G_RET_STS_ERROR: '|| FND_API.G_RET_STS_ERROR);
31468           END IF;
31469           null;
31470        END IF;
31471 
31472        IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
31473            -- OR l_formula_based_price IS NOT NULL) THEN
31474 	   IF (i.OPERAND_CALCULATION_CODE in ('UNIT_PRICE','LIST_PRICE')) THEN
31475 /*
31476 INDX,QP_PREQ_GRP.formula_processing.upd1,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
31477 INDX,QP_PREQ_GRP.formula_processing.upd1,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
31478 INDX,QP_PREQ_GRP.formula_processing.upd1,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
31479 */
31480 	    UPDATE qp_npreq_ldets_tmp --upd1
31481 	    SET    OPERAND_VALUE = l_formula_based_price
31482 	    WHERE  CREATED_FROM_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID
31483 	    AND    PRICING_PHASE_ID = p_pricing_phase_id
31484 	    AND    LINE_INDEX = i.line_index
31485 	    AND    PRICING_STATUS_CODE = G_STATUS_NEW;
31486 
31487 /*
31488 INDX,QP_PREQ_GRP.formula_processing.formula_processing_upd2.qp_npreq_lines_tmp_N1,LINE_INDEX,1
31489 */
31490 	    UPDATE qp_npreq_lines_tmp --upd2
31491 	    SET    UNIT_PRICE = l_formula_based_price,
31492                    PRICING_STATUS_CODE = G_STATUS_UPDATED,
31493                    PRICING_STATUS_TEXT ='Priced by formula'
31494 	    WHERE  LINE_INDEX = i.line_index;
31495 	   ELSIF (i.OPERAND_CALCULATION_CODE = 'PERCENT_PRICE') THEN
31496 /*
31497 INDX,QP_PREQ_GRP.formula_processing.upd3,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
31498 INDX,QP_PREQ_GRP.formula_processing.upd3,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
31499 INDX,QP_PREQ_GRP.formula_processing.upd3,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
31500 */
31501 	    UPDATE qp_npreq_ldets_tmp --upd3
31502 	    SET    OPERAND_VALUE = l_formula_based_price
31503 	    WHERE  CREATED_FROM_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID
31504 	    AND    PRICING_PHASE_ID = p_pricing_phase_id
31505 	    AND    LINE_INDEX = i.line_index
31506 	    AND    PRICING_STATUS_CODE = G_STATUS_NEW;
31507 
31508 /*
31509 INDX,QP_PREQ_GRP.formula_processing.formula_processing_upd4.qp_npreq_lines_tmp_N1,LINE_INDEX,1
31510 */
31511 	    UPDATE qp_npreq_lines_tmp --upd4
31512 	    SET    PERCENT_PRICE = l_formula_based_price,
31513                    PRICING_STATUS_CODE = G_STATUS_UPDATED,
31514                    PRICING_STATUS_TEXT ='Priced by formula'
31515 	    WHERE  LINE_INDEX = i.line_index;
31516         ELSE  -- BLOCK_PRICE, % , AMT , NEWPRICE
31517 /*
31518 INDX,QP_PREQ_GRP.formula_processing.upd5,qp_npreq_ldets_tmp_N1,LINE_INDEX,1
31519 INDX,QP_PREQ_GRP.formula_processing.upd5,qp_npreq_ldets_tmp_N1,PRICING_STATUS_CODE,2
31520 INDX,QP_PREQ_GRP.formula_processing.upd5,qp_npreq_ldets_tmp_N1,PRICING_PHASE_ID,3
31521 */
31522          UPDATE qp_npreq_ldets_tmp --upd5
31523 	    SET    OPERAND_VALUE = l_formula_based_price
31524 	    WHERE  CREATED_FROM_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID
31525 	    AND    PRICING_PHASE_ID = p_pricing_phase_id
31526 	    AND    LINE_INDEX = i.line_index
31527          AND    PRICING_STATUS_CODE = G_STATUS_NEW;
31528 
31529          -- Update the operand on the related lines also
31530          IF (i.LINE_DETAIL_TYPE_CODE = G_CHILD_DETAIL_TYPE) THEN
31531 
31532             UPDATE qp_npreq_rltd_lines_tmp
31533 	    SET    OPERAND = l_formula_based_price
31534 	    WHERE  RELATED_LIST_LINE_ID = i.CREATED_FROM_LIST_LINE_ID --bug#2875361
31535 	    AND    LINE_INDEX = i.line_index
31536             AND    PRICING_STATUS_CODE = G_STATUS_NEW
31537             AND    RELATIONSHIP_TYPE_CODE = G_PBH_LINE;
31538 
31539          END IF;
31540        END IF;
31541        ELSE
31542           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31543           engine_debug('Error returned by QP_FORMULA_PRICE_CALC_PVT.Calculate');
31544           END IF;
31545 
31546              -- Commented raise and added following for Bug 2722477
31547            G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
31548            DELETE_LINES(l_line_index,
31549                   G_STATUS_FORMULA_ERROR,
31550                   FND_MESSAGE.GET,
31551                   l_status_code,
31552                   l_status_text);
31553          -- RAISE E_Formula_Call_Error;
31554 	  null; -- Error in Formula Calculation
31555       END IF;
31556    END LOOP;
31557 
31558    qp_debug_util.tstop('FORMULA_PROCESSING');
31559 
31560 EXCEPTION
31561    WHEN E_ATTRIBUTE_NON_NUMERIC THEN
31562      G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
31563      DELETE_LINES(l_line_index,
31564                   G_STATUS_FORMULA_ERROR,
31565                   FND_MESSAGE.GET,
31566                   l_status_code,
31567                   l_status_text);
31568      x_status_code := FND_API.G_RET_STS_ERROR;
31569 
31570    WHEN E_Formula_Call_Error THEN
31571      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31572      engine_debug('In Formula Integration');
31573      engine_debug('Error returned by QP_FORMULA_PRICE_CALC_PVT.Calculate');
31574      END IF;
31575      G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
31576      --G_INSERT_INTO_FORMULA_TMP := 'N'; --Reset Global Flag ( Change)
31577      DELETE_LINES(l_line_index,
31578                   G_STATUS_FORMULA_ERROR,
31579                   FND_MESSAGE.GET,
31580                   l_status_code,
31581                   l_status_text);
31582    WHEN OTHERS THEN
31583      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31584      engine_debug('In Formula Integration');
31585      engine_debug(SQLERRM);
31586      END IF;
31587      G_INSERT_INTO_FORMULA_TMP := FALSE; --Reset Global Flag ( Change)
31588      --G_INSERT_INTO_FORMULA_TMP := 'N'; --Reset Global Flag ( Change)
31589      DELETE_LINES(l_line_index,
31590                   G_STATUS_FORMULA_ERROR,
31591                   FND_MESSAGE.GET,
31592                   l_status_code,
31593                   l_status_text);
31594      x_status_code := FND_API.G_RET_STS_ERROR;
31595      x_status_text := l_routine||' '|| ' Formula Not Found ';
31596 END Formula_Processing;
31597 
31598 /*+-----------------------------------------------------------
31599   |Procedure Truncate_temp_tables
31600   +-----------------------------------------------------------
31601 */
31602 PROCEDURE Truncate_Temp_tables (x_status_code OUT NOCOPY VARCHAR2,
31603                                 x_status_text OUT NOCOPY VARCHAR2)
31604 IS
31605 l_routine VARCHAR2(240):= 'Procedure Truncate_Temp_Tables';
31606 l_count	number;
31607 Begin
31608         x_status_code := FND_API.G_RET_STS_SUCCESS;
31609   --added by yangli for Java Engine project
31610   IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
31611     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31612      ENGINE_DEBUG('Truncate_Temp_tables: Java Engine not Installed ----------');
31613     END IF;
31614   --added by yangli for Java Engine project
31615 	--Delete from qp_npreq_lines_tmp;
31616 	--Delete from qp_npreq_line_attrs_tmp;
31617 	--Delete From qp_npreq_ldets_tmp;
31618 	--Delete From qp_npreq_rltd_lines_tmp;
31619         --Delete From QP_PREQ_QUAL_TMP;
31620         --Delete From qp_nformula_step_values_tmp;
31621         --Delete From QP_PREQ_LINE_ATTRS_FORMULA_TMP;
31622 
31623 
31624           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31625 	   select count(*) into l_count from qp_npreq_lines_tmp;
31626     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31627 	   engine_debug('qp_npreq_lines_tmp '||l_count);
31628     END IF;
31629 	   select count(*) into l_count from qp_npreq_line_attrs_tmp;
31630     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31631 	   engine_debug('qp_npreq_line_attrs_tmp '||l_count);
31632     END IF;
31633 	   select count(*) into l_count from qp_npreq_ldets_tmp;
31634     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31635 	   engine_debug('qp_npreq_ldets_tmp '||l_count);
31636     END IF;
31637           END IF;
31638     --added by yangli for Java Engine project
31639   ELSE
31640     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31641      ENGINE_DEBUG('Truncate_Temp_tables: Java Engine is Installed ----------');
31642     END IF;
31643 	--Delete from qp_int_lines;
31644 	--Delete from qp_int_line_attrs;
31645 	--Delete From qp_int_ldets;
31646 	--Delete From qp_int_rltd_lines;
31647         --Delete From qp_int_formula_step_values;
31648 
31649           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31650 	   select count(*) into l_count from qp_int_lines;
31651     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31652 	   engine_debug('qp_int_lines '||l_count);
31653     END IF;
31654 	   select count(*) into l_count from qp_int_line_attrs;
31655     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31656 	   engine_debug('qp_int_line_attrs '||l_count);
31657     END IF;
31658 	   select count(*) into l_count from qp_int_ldets;
31659     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31660 	   engine_debug('qp_int_ldets '||l_count);
31661     END IF;
31662           END IF;
31663 
31664   END IF;
31665 EXCEPTION
31666    WHEN OTHERS THEN
31667      x_status_code := FND_API.G_RET_STS_ERROR;
31668      x_status_text :=l_routine||' '||SQLERRM;
31669 End Truncate_Temp_tables;
31670 
31671 /*+------------------------------------------------------------
31672   |PROCEDURE Set_Order_Level_Rltd
31673   +------------------------------------------------------------
31674 The relationship between order level adjustments and request lines
31675 need to be returned back to the caller.
31676 Example: list 'a' is a order level adjustment with line_detail_index
31677 of 3. There are 3 request lines with 4,5,6 line index then
31678 the data in qp_npreq_rltd_lines_tmp should be:
31679 +---------------------------------------------------------------+
31680 | related_line_detail_index| line_index| Relation_ship_type_code|
31681 +--------------------------+-----------+------------------------+
31682 |    3                     |      4    | ORDER_TO_LINE          |
31683 |    3                     |      5    | ORDER_TO_LINE          |
31684 |    3                     |      6    | ORDER_TO_LINE          |
31685 +--------------------------+-----------+------------------------+
31686 */
31687 
31688 PROCEDURE Set_Order_Level_Rltd(p_freeze_override_flag IN VARCHAR2,
31689                               p_pricing_phase_id     IN NUMBER,
31690                               x_status_code          OUT NOCOPY VARCHAR2,
31691                               x_status_text          OUT NOCOPY VARCHAR2) AS
31692 
31693 /*
31694 INDX,QP_PREQ_GRP.set_order_level_rltd.l_line_index_cur,- No Index Used -,NA,NA
31695 */
31696 CURSOR l_line_index_cur(p_freeze_override_flag VARCHAR2) is
31697 SELECT line_index
31698 FROM   qp_npreq_lines_tmp
31699 WHERE pricing_status_code = G_STATUS_UPDATED
31700 AND (PRICE_FLAG = G_YES
31701      OR
31702      (PRICE_FLAG = G_PHASE
31703       AND
31704       p_freeze_override_flag = G_YES)
31705      );
31706 
31707 /*
31708 -- Can use N2 instead of N4
31709 INDX,QP_PREQ_GRP.set_order_level_rltd.l_line_detail_index_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
31710 INDX,QP_PREQ_GRP.set_order_level_rltd.l_line_detail_index_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
31711 */
31712 CURSOR l_line_detail_index_cur is
31713 SELECT line_detail_index
31714 FROM   qp_npreq_ldets_tmp
31715 WHERE  PRICING_STATUS_CODE = G_STATUS_NEW
31716 AND    PRICING_PHASE_ID    = p_pricing_phase_id
31717 AND    MODIFIER_LEVEL_CODE = G_ORDER_LEVEL;
31718 
31719 l_line_index_tbl        number_type;
31720 l_line_detail_index_tbl number_type;
31721 l_line_detail_index_tbl1 number_type;
31722 J NUMBER:=0;
31723 l_routine VARCHAR2(240):= 'QP_PREQ_GRP.Set_Order_Level_Rltd';
31724 BEGIN
31725   x_status_code := FND_API.G_RET_STS_SUCCESS;
31726 
31727   FOR I IN l_line_detail_index_cur LOOP
31728     J:=J+1;
31729     l_line_detail_index_tbl(J):=I.line_detail_index;
31730   END LOOP;
31731 
31732 
31733 IF J > 0 THEN  --do this only if there is order level modifier
31734 J:=0;
31735   FOR I IN l_line_index_cur(p_freeze_override_flag) LOOP
31736     FOR K in l_line_detail_index_tbl.FIRST..l_line_detail_index_tbl.LAST LOOP
31737       J:=J+1;
31738       l_line_detail_index_tbl1(J):=l_line_detail_index_tbl(K);
31739       l_line_index_tbl(J):= I.line_index;
31740     END LOOP;
31741   END LOOP;
31742 
31743 END IF;
31744 
31745 IF J > 0 THEN
31746   FORALL K IN l_line_index_tbl.FIRST..l_line_index_tbl.LAST
31747   INSERT INTO qp_npreq_rltd_lines_tmp
31748   (LINE_INDEX,RELATED_LINE_DETAIL_INDEX,RELATIONSHIP_TYPE_CODE,PRICING_STATUS_CODE)
31749   VALUES
31750   (l_line_index_tbl(K),l_line_detail_index_tbl1(K),G_ORDER_TO_LINE,G_STATUS_NEW);
31751 END IF;
31752 
31753 EXCEPTION
31754   WHEN OTHERS THEN
31755      x_status_code := FND_API.G_RET_STS_ERROR;
31756      x_status_text := SQLERRM;
31757      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31758      engine_debug(l_routine||' :'||SQLERRM);
31759      END IF;
31760 END;
31761 
31762 
31763 procedure Get_Price_List_Sequence(
31764                            x_status_code OUT NOCOPY VARCHAR2,
31765                            x_status_text OUT NOCOPY VARCHAR2)
31766 is
31767 l_routine VARCHAR2(30) := 'get_price_list_sequence';
31768 begin
31769 
31770   --Get the sequence for price list
31771 /*
31772 INDX,QP_PREQ_GRP.get_price_list_sequence.cur_get_price_list_sequence,- No Index Used -,NA,NA
31773 */
31774   SELECT PHASE_SEQUENCE,PRICING_PHASE_ID
31775   INTO   G_PRICE_LIST_SEQUENCE,G_PRICE_LIST_PHASE_ID
31776   FROM   QP_PRICING_PHASES
31777   WHERE  LIST_TYPE_CODE = 'PRL'
31778   AND    ROWNUM < 2;
31779 
31780   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31781   engine_debug('G_PRICE_LIST_SEQUENCE: '|| G_PRICE_LIST_SEQUENCE );
31782   END IF;
31783 EXCEPTION
31784   WHEN OTHERS THEN
31785    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
31786    engine_debug(l_routine||' '||SQLERRM);
31787    END IF;
31788    x_status_code := FND_API.G_RET_STS_ERROR;
31789    x_status_text := 'Error in '||l_routine||SQLERRM;
31790 end Get_Price_List_Sequence;
31791 
31792 /*+----------------------------------------------------------------------------------------------------
31793  *| PROCEDURE/FUNCTION TO INCLUDE TCA HIERARCHY STRUCTURE FOR QUALIFIER  ATTRIBUTE  ADDED for TCA
31794  *+----------------------------------------------------------------------------------------------------
31795  */
31796 
31797   PROCEDURE INSERT_QUALIFIER_HIERARCHY
31798 IS
31799 l_count number;
31800 BEGIN
31801 select count(*) into l_count from qp_npreq_line_attrs_tmp;
31802 
31803 engine_debug('count of attr before insert  '|| l_count);
31804 
31805    --[julin/4865213] tuned
31806    INSERT INTO qp_npreq_line_attrs_tmp
31807      (   LINE_INDEX
31808         ,LINE_DETAIL_INDEX
31809         ,ATTRIBUTE_LEVEL
31810         ,ATTRIBUTE_TYPE
31811         ,LIST_HEADER_ID
31812         ,LIST_LINE_ID
31813         ,CONTEXT
31814         ,ATTRIBUTE
31815         ,VALUE_FROM
31816         ,SETUP_VALUE_FROM
31817         ,VALUE_TO
31818         ,SETUP_VALUE_TO
31819         ,GROUPING_NUMBER
31820         ,NO_QUALIFIERS_IN_GRP
31821         ,COMPARISON_OPERATOR_TYPE_CODE
31822         ,VALIDATED_FLAG
31823         ,APPLIED_FLAG
31824         ,PRICING_STATUS_CODE
31825         ,PRICING_STATUS_TEXT
31826         ,QUALIFIER_PRECEDENCE
31827         ,PRICING_ATTR_FLAG
31828         ,QUALIFIER_TYPE
31829         ,DATATYPE
31830         ,PRODUCT_UOM_CODE
31831         ,PROCESSED_CODE
31832         ,EXCLUDER_FLAG
31833         ,GROUP_QUANTITY
31834         ,GROUP_AMOUNT
31835         ,DISTINCT_QUALIFIER_FLAG
31836         ,PRICING_PHASE_ID
31837         ,INCOMPATABILITY_GRP_CODE
31838         ,LINE_DETAIL_TYPE_CODE
31839         ,MODIFIER_LEVEL_CODE
31840         ,PRIMARY_UOM_FLAG
31841         ,REQUEST_ID
31842         ,DERIVED_QUALIFIER_FLAG)
31843         SELECT /*+ ORDERED use_nl(qpc qs hn) index(qnlat QP_PREQ_LINE_ATTRS_TMP_N2) */
31844          qnlat.LINE_INDEX
31845         ,qnlat.LINE_DETAIL_INDEX
31846         ,qnlat.ATTRIBUTE_LEVEL
31847         ,qnlat.ATTRIBUTE_TYPE
31848         ,qnlat.LIST_HEADER_ID
31849         ,qnlat.LIST_LINE_ID
31850         ,qnlat.CONTEXT
31851         ,qnlat.ATTRIBUTE
31852         ,to_char(hn.PARENT_ID)
31853         ,qnlat.SETUP_VALUE_FROM
31854         ,qnlat.VALUE_TO
31855         ,qnlat.SETUP_VALUE_TO
31856         ,qnlat.GROUPING_NUMBER
31857         ,qnlat.NO_QUALIFIERS_IN_GRP
31858         ,qnlat.COMPARISON_OPERATOR_TYPE_CODE
31859         ,qnlat.VALIDATED_FLAG
31860         ,qnlat.APPLIED_FLAG
31861         ,qnlat.PRICING_STATUS_CODE
31862         ,qnlat.PRICING_STATUS_TEXT
31863         ,qnlat.QUALIFIER_PRECEDENCE
31864         ,qnlat.PRICING_ATTR_FLAG
31865         ,qnlat.QUALIFIER_TYPE
31866         ,qnlat.DATATYPE
31867         ,qnlat.PRODUCT_UOM_CODE
31868         ,qnlat.PROCESSED_CODE
31869         ,qnlat.EXCLUDER_FLAG
31870         ,qnlat.GROUP_QUANTITY
31871         ,qnlat.GROUP_AMOUNT
31872         ,qnlat.DISTINCT_QUALIFIER_FLAG
31873         ,qnlat.PRICING_PHASE_ID
31874         ,qnlat.INCOMPATABILITY_GRP_CODE
31875         ,qnlat.LINE_DETAIL_TYPE_CODE
31876         ,qnlat.MODIFIER_LEVEL_CODE
31877         ,qnlat.PRIMARY_UOM_FLAG
31878         ,qnlat.REQUEST_ID
31879         ,'Y'
31880         FROM qp_npreq_line_attrs_tmp qnlat,
31881              qp_prc_contexts_b qpc,
31882              qp_segments_b qs,
31883              HZ_HIERARCHY_NODES hn
31884         WHERE qnlat.pricing_status_code = G_STATUS_UNCHANGED
31885           AND qnlat.attribute_type = G_QUALIFIER_TYPE
31886           AND qpc.PRC_CONTEXT_TYPE = 'QUALIFIER'
31887           AND qpc.PRC_CONTEXT_CODE = qnlat.CONTEXT
31888           AND qs.SEGMENT_MAPPING_COLUMN = qnlat.ATTRIBUTE
31889           AND qs.PRC_CONTEXT_ID = qpc.PRC_CONTEXT_ID
31890           AND qs.PARTY_HIERARCHY_ENABLED_FLAG = 'Y'
31891           AND nvl(qs.user_format_type, qs.seeded_format_type) = G_NUMERIC
31892           AND hn.CHILD_ID = to_number(qnlat.VALUE_FROM)
31893           AND hn.child_table_name = 'HZ_PARTIES'
31894           AND hn.HIERARCHY_TYPE = FND_PROFILE.VALUE('QP_PRICING_PARTY_HIERARCHY_TYPE')
31895           AND trunc(nvl(hn.EFFECTIVE_START_DATE,sysdate)) <= trunc(sysdate)
31896           AND trunc(nvl(hn.EFFECTIVE_END_DATE,sysdate)) >= trunc(sysdate)
31897           AND hn.LEVEL_NUMBER > 0;
31898 
31899 END INSERT_QUALIFIER_HIERARCHY;
31900 
31901 /*+------------------------------------------------------------
31902   |PROCEDURE PRICE_REQUEST
31903   +------------------------------------------------------------
31904 */
31905 
31906 PROCEDURE PRICE_REQUEST
31907 (p_line_tbl               IN   LINE_TBL_TYPE,
31908  p_qual_tbl               IN   QUAL_TBL_TYPE,
31909  p_line_attr_tbl          IN   LINE_ATTR_TBL_TYPE,
31910  p_LINE_DETAIL_tbl        IN   LINE_DETAIL_TBL_TYPE,
31911  p_LINE_DETAIL_qual_tbl   IN   LINE_DETAIL_QUAL_TBL_TYPE,
31912  p_LINE_DETAIL_attr_tbl   IN   LINE_DETAIL_ATTR_TBL_TYPE,
31913  p_related_lines_tbl      IN   RELATED_LINES_TBL_TYPE,
31914  p_control_rec            IN   CONTROL_RECORD_TYPE,
31915  x_line_tbl               OUT  NOCOPY LINE_TBL_TYPE,
31916  x_line_qual              OUT  NOCOPY QUAL_TBL_TYPE,
31917  x_line_attr_tbl          OUT  NOCOPY LINE_ATTR_TBL_TYPE,
31918  x_line_detail_tbl        OUT  NOCOPY LINE_DETAIL_TBL_TYPE,
31919  x_line_detail_qual_tbl   OUT  NOCOPY LINE_DETAIL_QUAL_TBL_TYPE,
31920  x_line_detail_attr_tbl   OUT  NOCOPY LINE_DETAIL_ATTR_TBL_TYPE,
31921  x_related_lines_tbl      OUT  NOCOPY RELATED_LINES_TBL_TYPE,
31922  x_return_status          OUT NOCOPY VARCHAR2,
31923  x_return_status_text     OUT NOCOPY VARCHAR2
31924  ) AS
31925 
31926 
31927  l_line_tbl               LINE_TBL_TYPE;
31928  l_line_qual              QUAL_TBL_TYPE;
31929  l_line_attr_tbl          LINE_ATTR_TBL_TYPE;
31930  l_line_detail_tbl        LINE_DETAIL_TBL_TYPE;
31931  l_line_detail_qual_tbl   LINE_DETAIL_QUAL_TBL_TYPE;
31932  l_line_detail_attr_tbl   LINE_DETAIL_ATTR_TBL_TYPE;
31933  l_related_lines_tbl      RELATED_LINES_TBL_TYPE;
31934  l_line_index		      PLS_INTEGER;
31935  x_list_line_id		  PLS_INTEGER;
31936  l_list_price	            NUMBER;
31937  l_list_line_id             NUMBER;
31938  l_return_status            VARCHAR2(240);
31939  l_pricing_phase_id         PLS_INTEGER;
31940  l_line_quantity            NUMBER;
31941  l_line_uom_code            VARCHAR2(30);
31942  l_priced_quantity          NUMBER;
31943  l_priced_uom_code          VARCHAR2(30);
31944  l_GSA_Enabled_Flag         VARCHAR2(1);
31945  l_GSA_Qualifier_Flag	    VARCHAR2(1);
31946  l_incompat_resolve_code    VARCHAR2(30);
31947  l_GSA_Max_Discount_Enabled CONSTANT VARCHAR2(30) := 'QP_VERIFY_GSA';
31948  l_status_text              VARCHAR2(240);
31949  l_further_search           VARCHAR2(1) := 'N';
31950  l_dummy                    VARCHAR2(30);
31951  l_routine                  VARCHAR2(30);
31952  l_pricing_effective_date   DATE;
31953  l_volume_attribute	    VARCHAR2(30);
31954  l_bypass_pricing           VARCHAR2(30);
31955  I                          PLS_INTEGER;
31956  l_FIXED_PRICE              CONSTANT NUMBER := 11.99;
31957  l_pricelist_phase_count    PLS_INTEGER:=0;
31958  l_discount_phase_count     PLS_INTEGER:=0;
31959  l_disc_exist_flag          VARCHAR2(1) := 'N';
31960  l_rounding_flag            VARCHAR2(1):=NULL;
31961  l_rounding_factor          PLS_INTEGER:=0;
31962  l_rare_phase_id            PLS_INTEGER:=5;
31963  l_exec_flag                VARCHAR2(3):=G_YES;
31964  l_pricing_status_code      VARCHAR2(30);
31965  l_pricing_phase            NUMBER;
31966  l_price_phase_flag         BOOLEAN;
31967  l_freeze_override_flag     VARCHAR2(3);
31968  l_output_file			 VARCHAR2(240);
31969  v_debug_switch    CONSTANT VARCHAR2(30) := 'QP_DEBUG';
31970  v_om_debug_switch    CONSTANT VARCHAR2(30) := 'ONT_DEBUG_LEVEL';
31971  l_max_line_detail_index    PLS_INTEGER;
31972  l_price_flag_indx          NUMBER;
31973  l_price_flag_yes_only      VARCHAR2(1);
31974  l_header_limit_exists      VARCHAR2(1);
31975  l_line_limit_exists        VARCHAR2(1);
31976  v_order_amount             NUMBER;
31977  l_pricing_start_time       NUMBER;
31978  l_pricing_end_time         NUMBER;
31979  l_time_difference          NUMBER;
31980  l_pricing_start_redo       NUMBER;
31981  l_pricing_end_redo         NUMBER;
31982  l_redo_difference          NUMBER;
31983  l_prev_pricing_phase_id    NUMBER := -9999;
31984  l_error_status_code        VARCHAR2(30);
31985  l_error_status_text        VARCHAR2(240);
31986  l_time_stats		    VARCHAR2(240);
31987 
31988 -- Essilor Fix bug 2789138
31989  L_MANUAL_ADJUSTMENTS_CALL_FLAG  VARCHAR2(1) := 'N';
31990  L_RETURN_MANUAL_DISCOUNT   VARCHAR2(1) :=   nvl(FND_PROFILE.VALUE('QP_RETURN_MANUAL_DISCOUNTS'),'N');
31991 
31992  E_SEARCH_FLAG_IS_NULL    EXCEPTION;
31993  E_INVALID_CONTROL_RECORD EXCEPTION;
31994  E_ROUTINE_ERRORS         EXCEPTION;
31995  E_INVALID_PHASE          EXCEPTION;
31996  E_NO_SOURCE_SYSTEM       EXCEPTION;
31997  E_DEBUG_ROUTINE_ERROR    EXCEPTION;
31998 
31999  l_gone_in_phase_cur_loop varchar2(1); -- bug 3963888
32000 /*
32001 INDX,QP_PREQ_GRP.price_request.l_phase_cur,QP_EVENT_PHASES_U1,PRICING_EVENT_CODE,1
32002 
32003 INDX,QP_PREQ_GRP.price_request.l_phase_cur,QP_PRICING_PHASES_U1,PRICING_PHASE_ID,1
32004 */
32005 
32006 -- Essilor Fix bug 2789138
32007 --[julin/4865213] merged unions, plan unaffected
32008  CURSOR l_phase_cur(l_event_code VARCHAR2,
32009                    l_event_code1 VARCHAR2) IS
32010   SELECT QPP.PRICING_PHASE_ID,
32011          QPP.LIST_TYPE_CODE,
32012          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
32013          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
32014          QPP.PHASE_SEQUENCE,
32015          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG,
32016 	 QPP.NAME
32017          --QPEP.PRICING_EVENT_CODE
32018   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
32019   WHERE  ((L_MANUAL_ADJUSTMENTS_CALL_FLAG IS NULL)
32020           OR
32021           (L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'N' AND
32022            NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('A', 'B'))
32023           OR
32024           (L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'Y' AND
32025            (L_RETURN_MANUAL_DISCOUNT = 'N' AND
32026             NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('M', 'B'))
32027            OR
32028            (L_RETURN_MANUAL_DISCOUNT = 'Y')
32029           )
32030          )
32031    AND  QPEP.PRICING_EVENT_CODE IN
32032         (SELECT decode(rownum
32033           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
32034           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32035              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32036           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32037               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32038           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32039               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32040           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32041               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32042           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32043               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
32044          FROM  qp_event_phases
32045          WHERE rownum < 7)
32046   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
32047                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
32048   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
32049     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
32050   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
32051          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
32052   ORDER  BY 5,3 DESC;
32053 
32054 /*
32055   UNION
32056   SELECT QPP.PRICING_PHASE_ID,
32057          QPP.LIST_TYPE_CODE,
32058          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
32059          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
32060          QPP.PHASE_SEQUENCE,
32061          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
32062          --QPEP.PRICING_EVENT_CODE
32063   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
32064   WHERE  L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'N'
32065   AND    NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('A', 'B')
32066   AND    QPEP.PRICING_EVENT_CODE IN
32067         (SELECT decode(rownum
32068           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
32069           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32070              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32071           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32072               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32073           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32074               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32075           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32076               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32077           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32078               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
32079          FROM  qp_event_phases
32080          WHERE rownum < 7)
32081   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
32082                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
32083   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
32084     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
32085   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
32086          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
32087 UNION
32088   SELECT QPP.PRICING_PHASE_ID,
32089          QPP.LIST_TYPE_CODE,
32090          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
32091          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
32092          QPP.PHASE_SEQUENCE,
32093          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
32094          --QPEP.PRICING_EVENT_CODE
32095   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
32096   WHERE  L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'Y'
32097   AND    L_RETURN_MANUAL_DISCOUNT = 'N'
32098   AND    NVL(QPP.MANUAL_MODIFIER_FLAG,'B') in ('M', 'B')
32099   AND    QPEP.PRICING_EVENT_CODE IN
32100         (SELECT decode(rownum
32101           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
32102           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32103              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32104           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32105               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32106           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32107               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32108           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32109               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32110           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32111               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
32112          FROM  qp_event_phases
32113          WHERE rownum < 7)
32114   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
32115                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
32116   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
32117     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
32118   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
32119          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
32120 UNION
32121   SELECT QPP.PRICING_PHASE_ID,
32122          QPP.LIST_TYPE_CODE,
32123          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
32124          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
32125          QPP.PHASE_SEQUENCE,
32126          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
32127          --QPEP.PRICING_EVENT_CODE
32128   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
32129   WHERE  L_MANUAL_ADJUSTMENTS_CALL_FLAG = 'Y'
32130   AND    L_RETURN_MANUAL_DISCOUNT = 'Y'
32131   AND    QPEP.PRICING_EVENT_CODE IN
32132         (SELECT decode(rownum
32133           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
32134           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32135              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32136           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32137               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32138           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32139               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32140           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32141               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32142           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32143               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
32144          FROM  qp_event_phases
32145          WHERE rownum < 7)
32146   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
32147                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
32148   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
32149     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
32150   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
32151          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))*/
32152 
32153 /* CURSOR l_phase_cur(l_event_code VARCHAR2,
32154                    l_event_code1 VARCHAR2) IS
32155   SELECT QPP.PRICING_PHASE_ID,
32156          QPP.LIST_TYPE_CODE,
32157          nvl(QPEP.USER_SEARCH_FLAG,QPEP.SEARCH_FLAG) SEARCH_FLAG,
32158          nvl(QPP.USER_INCOMPAT_RESOLVE_CODE,QPP.INCOMPAT_RESOLVE_CODE) INCOMPAT_RESOLVE_CODE,
32159          QPP.PHASE_SEQUENCE,
32160          nvl(QPP.USER_FREEZE_OVERRIDE_FLAG,QPP.FREEZE_OVERRIDE_FLAG) FREEZE_OVERRIDE_FLAG
32161          --QPEP.PRICING_EVENT_CODE
32162   FROM   QP_PRICING_PHASES QPP, QP_EVENT_PHASES QPEP
32163   WHERE  QPEP.PRICING_EVENT_CODE IN
32164         (SELECT decode(rownum
32165           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
32166           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32167              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32168           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32169               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32170           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32171               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32172           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32173               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32174           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32175               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
32176          FROM  qp_event_phases
32177          WHERE rownum < 7)
32178   AND    trunc(sysdate) between trunc(nvl(QPEP.START_DATE_ACTIVE,sysdate))
32179                         and     trunc(nvl(QPEP.END_DATE_ACTIVE,sysdate))
32180   AND    QPP.PRICING_PHASE_ID = QPEP.PRICING_PHASE_ID
32181     -- if p_control_rec.get_freight_flag is 'Y' then select phases from qp_pricing_phases table freight_exists column has value 'Y'
32182   AND    ((nvl(p_control_rec.get_freight_flag, G_NO) = G_YES AND QPP.freight_exists = G_YES) OR
32183          (nvl(p_control_rec.get_freight_flag, G_NO) = G_NO))
32184   ORDER  BY QPP.PHASE_SEQUENCE,SEARCH_FLAG DESC;  */
32185 
32186 /*
32187 Can use N2 instead of N4
32188 INDX,QP_PREQ_GRP.price_request.l_get_line_index_cur,qp_npreq_ldets_tmp_N2,PRICING_PHASE_ID,1
32189 INDX,QP_PREQ_GRP.price_request.l_get_line_index_cur,qp_npreq_ldets_tmp_N2,PRICING_STATUS_CODE,2
32190 */
32191 CURSOR l_get_line_index_cur(p_pricing_phase_id NUMBER) IS
32192   SELECT DISTINCT LINE_INDEX
32193   FROM   qp_npreq_ldets_tmp
32194   WHERE  PRICING_PHASE_ID = p_pricing_phase_id
32195   AND    PRICING_STATUS_CODE = G_STATUS_NEW;
32196 
32197 /*
32198 INDX,QP_PREQ_GRP.price_request.l_get_list_price_cur,qp_npreq_lines_tmp_N1,LINE_INDEX,1
32199 */
32200 CURSOR l_get_list_price_cur(p_line_index PLS_INTEGER) IS
32201   SELECT UNIT_PRICE,LINE_QUANTITY,PRICED_QUANTITY,PRICED_UOM_CODE,LINE_UOM_CODE,PRICING_EFFECTIVE_DATE
32202   FROM   qp_npreq_lines_tmp
32203   WHERE  LINE_INDEX = p_line_index;
32204   --FOR UPDATE OF ROUNDING_FACTOR;
32205 
32206 /*
32207 INDX,QP_PREQ_GRP.price_request.get_source_system_cur,QP_PRICE_REQ_SOURCES_PK,REQUEST_TYPE_CODE,1
32208 */
32209 CURSOR get_source_system_cur IS
32210   SELECT 'X'
32211   FROM   dual
32212   WHERE EXISTS
32213     (Select 'X'
32214      --From  QP_PRICE_REQ_SOURCES
32215      From  QP_PRICE_REQ_SOURCES_V /* yangli */
32216      Where REQUEST_TYPE_CODE
32217      In (SELECT REQUEST_TYPE_CODE
32218      FROM qp_npreq_lines_tmp));
32219 
32220 CURSOR get_request_type_code_cur IS   -- shu, aso rounding
32221   SELECT REQUEST_TYPE_CODE
32222   FROM qp_npreq_lines_tmp
32223   WHERE rownum=1;
32224 
32225 /*
32226 INDX,QP_PREQ_GRP.price_request.debug_cur,- No Index Used -,NA,NA
32227 */
32228 CURSOR debug_cur IS
32229 SELECT REQUEST_TYPE_CODE,LINE_INDEX,LINE_TYPE_CODE,PRICE_FLAG,PRICE_LIST_HEADER_ID,ROUNDING_FACTOR
32230 FROM qp_npreq_lines_tmp;
32231 
32232 /*
32233 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,LINE_INDEX,1
32234 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,PRICING_PHASE_ID,2
32235 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,ASK_FOR_FLAG,3
32236 INDX,QP_PREQ_GRP.delete_invalid_pbh_children.l_check_deleted_pbh_cur,qp_npreq_ldets_tmp_N3,CREATED_FROM_LIST_LINE_TYPE,4
32237 */
32238 CURSOR l_chk_deleted_pbh_cur(p_line_index IN PLS_INTEGER,
32239 					    p_pricing_phase_id NUMBER) IS
32240 SELECT 'X'
32241 FROM qp_npreq_ldets_tmp
32242 WHERE created_from_list_line_type = G_PRICE_BREAK_TYPE
32243 AND   line_index = p_line_index
32244 AND   pricing_phase_id = p_pricing_phase_id
32245 AND   pricing_status_code <> G_STATUS_NEW;
32246 
32247 --check if there is such a list line with passed in phase id
32248 /*
32249 INDX,QP_PREQ_GRP.price_request.l_chk_phase_exists,QP_LIST_LINES_N5,PRICING_PHASE_ID,1
32250 */
32251 
32252 -- [julin/4742368/4766135] modified to try list_header_phases first; if not found, go to
32253 -- lines/headers; assuming that phase/qual on lines is a better EXISTS filter than
32254 -- active flag on headers (can purge if many inactive modifiers)
32255 CURSOR l_chk_phase_exists(p_phase_id IN PLS_INTEGER) IS
32256 SELECT 'x'
32257 FROM   dual
32258 WHERE
32259 EXISTS (
32260   select /*+ ORDERED */ 'x'
32261   from qp_list_header_phases lhp, qp_list_headers_b qplh
32262   where lhp.pricing_phase_id = p_phase_id
32263     and qplh.list_header_id = lhp.list_header_id
32264     and qplh.active_flag = 'Y')
32265 OR
32266 EXISTS (
32267   select /*+ ORDERED */ 'x'
32268   from qp_list_lines qpll, qp_list_headers_b qplh
32269   where qpll.pricing_phase_id = p_phase_id
32270     and qpll.qualification_ind in (0, 4, 20)
32271     and qpll.list_header_id = qplh.list_header_id
32272     and qplh.active_flag = 'Y');
32273 /*
32274 -- julin [3773033]: removing hint /*+ ordered use_nl(qpll) index(qpll QP_LIST_LINES_N5) /
32275 -- bug 3804392 - exclude factor lists as well
32276 CURSOR l_chk_phase_exists(p_phase_id IN PLS_INTEGER) IS
32277 select 'x'
32278   from qp_list_headers_b qplh, qp_list_lines qpll
32279  where qplh.active_flag = 'Y'
32280    and qplh.list_type_code not in ('PRL', 'AGR', 'PML')
32281    and qpll.list_header_id = qplh.list_header_id
32282    and qpll.pricing_phase_id = p_phase_id
32283    and qpll.qualification_ind in (0, 2, 4, 6, 8, 10, 12, 14, 20, 22, 28, 30)
32284    and rownum = 1;
32285 select 'X' from dual
32286 	where exists (select 'X' from qp_list_lines
32287 					where pricing_phase_id = p_phase_id
32288 					AND modifier_level_code IN ('LINE','LINEGROUP','ORDER')  --3169430
32289 					and rownum = 1);*/
32290 
32291 /*
32292 INDX,QP_PREQ_GRP.price_request.l_debug,- No Index Used -,NA,NA
32293 */
32294 CURSOR l_debug IS
32295 SELECT CONTEXT,
32296        ATTRIBUTE,
32297        VALUE_FROM,
32298        LINE_INDEX,
32299        LINE_DETAIL_INDEX
32300 FROM   qp_npreq_line_attrs_tmp;
32301 
32302 /*
32303 INDX,QP_PREQ_GRP.price_request.l_check_pricing_phase_exists,QP_PRICING_PHASES_U1,PRICING_PHASE_ID,1
32304 
32305 INDX,QP_PREQ_GRP.price_request.l_check_pricing_phase_exists,QP_EVENT_PHASES_U1,PRICING_EVENT_CODE,1
32306 INDX,QP_PREQ_GRP.price_request.l_check_pricing_phase_exists,QP_EVENT_PHASES_U1,PRICING_PHASE_ID,2
32307 */
32308 CURSOR l_check_pricing_phase_exists(l_event_code VARCHAR2,l_event_code1 VARCHAR2) IS
32309 SELECT b.pricing_phase_id,b.freeze_override_flag
32310 FROM   qp_event_phases a , qp_pricing_phases b
32311 WHERE  a.pricing_event_code in (SELECT decode(rownum
32312           ,1 ,substr(l_event_code,1,instr(l_event_code1,',',1,1)-1)
32313           ,2 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32314              instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32315           ,3 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32316               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32317           ,4 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32318               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32319           ,5 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32320               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1))
32321           ,6 ,substr(l_event_code , instr(l_event_code1,',',1,rownum-1) + 1,
32322               instr(l_event_code1,',',1,rownum)-1 - instr(l_event_code1,',',1,rownum-1)))
32323          FROM  qp_event_phases
32324          WHERE rownum < 7)
32325 AND    a.pricing_phase_id = G_PRICE_LIST_PHASE_ID
32326 AND    b.pricing_phase_id = G_PRICE_LIST_PHASE_ID
32327 AND    trunc(sysdate) BETWEEN trunc(nvl(a.START_DATE_ACTIVE,sysdate))
32328 AND                           trunc(nvl(a.END_DATE_ACTIVE,sysdate));
32329 
32330 /*
32331 INDX,QP_PREQ_GRP.price_request.l_get_max_line_detail_index,qp_npreq_ldets_tmp_U1,LINE_DETAIL_INDEX,1
32332 */
32333 CURSOR l_get_max_line_detail_index IS
32334  SELECT MAX(LINE_DETAIL_INDEX)
32335  FROM   qp_npreq_ldets_tmp;
32336 
32337 /*
32338 INDX,QP_PREQ_GRP.price_request.l_limit_check_cur,qp_npreq_ldets_tmp_N4,HEADER_LIMIT_EXISTS,1
32339 INDX,QP_PREQ_GRP.price_request.l_limit_check_cur,qp_npreq_ldets_tmp_N4,PRICING_STATUS_CODE,2
32340 */
32341 CURSOR l_limit_check_cur IS
32342 SELECT HEADER_LIMIT_EXISTS,LINE_LIMIT_EXISTS
32343 FROM   qp_npreq_ldets_tmp
32344 WHERE  PRICING_STATUS_CODE = G_STATUS_NEW
32345 AND    HEADER_LIMIT_EXISTS = G_YES ;
32346 
32347 /*
32348 INDX,QP_PREQ_GRP.price_request.order_amount_cur,- No Index Used -,NA,NA
32349 */
32350 CURSOR order_amount_cur IS
32351 --SELECT nvl(SUM(UNIT_PRICE * PRICED_QUANTITY),0)
32352 select nvl(sum(nvl(line_unit_price * line_quantity, UNIT_PRICE * PRICED_QUANTITY)),0)
32353 FROM   qp_npreq_lines_tmp
32354  WHERE charge_periodicity_code is NULL;    -- added for recurring charges Bug # 4465168
32355 
32356 /*
32357 INDX,QP_PREQ_GRP.price_request.limit_trans_cur,QP_LIMIT_TRANSACTIONS_U1,PRICE_REQUEST_CODE,1
32358 */
32359 CURSOR limit_trans_cur IS
32360 SELECT 'X'
32361 FROM   qp_limit_transactions
32362 WHERE  price_request_code > fnd_global.local_chr(0);
32363 --WHERE  price_request_code > chr(0);  fix GSCC compilation warning
32364 
32365  l_product_app_id           number; -- bug 3841192
32366 
32367 CURSOR pricing_install_status_cur IS
32368 SELECT status
32369 FROM   fnd_product_installations
32370 WHERE  application_id=l_product_app_id;
32371 
32372 -- ** Added for showing context and attribute in msg which caused number conversion error **
32373  CURSOR am_attr_msg_cur
32374    IS
32375    SELECT  lattr.value_from,lattr.value_to,lattr.context,
32376            nvl(SEGMENTS_TL.SEEDED_SEGMENT_NAME,SEGMENTS_TL.USER_SEGMENT_NAME) attribute
32377     FROM   qp_npreq_line_attrs_tmp lattr,fnd_flex_value_sets VSET,
32378            qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS, qp_segments_tl SEGMENTS_TL
32379     WHERE attribute_type = G_PRICING_TYPE
32380                 AND pricing_status_code = G_STATUS_UNCHANGED
32381                 AND  vset.flex_value_set_id = segments.user_valueset_id
32382                 AND segments.application_id = 661
32383                 AND pcontexts.prc_context_type <> 'QUALIFIER'
32384                 AND pcontexts.prc_context_code = lattr.context
32385                 AND segments.segment_mapping_column = lattr.attribute
32386                 AND segments.prc_context_id = pcontexts.prc_context_id
32387                 AND segments.segment_id = segments_tl.segment_id
32388                 AND vset.format_type = 'N';
32389 
32390 CURSOR   attr_msg_cur
32391    IS
32392    SELECT  value_from,value_to,context,attribute
32393     FROM   qp_npreq_line_attrs_tmp lattr
32394                WHERE attribute_type = G_PRICING_TYPE
32395             AND pricing_status_code = G_STATUS_UNCHANGED
32396             AND exists (
32397                 SELECT format_type
32398                 FROM fnd_flex_value_sets VSET,fnd_descr_flex_column_usages DFLEX
32399                 WHERE vset.flex_value_set_id = dflex.flex_value_set_id
32400                 AND dflex.application_id = 661
32401                 AND dflex.descriptive_flexfield_name = 'QP_ATTR_DEFNS_PRICING'
32402                 AND dflex.descriptive_flex_context_code = lattr.context
32403                 AND dflex.application_column_name = lattr.attribute
32404                 AND vset.format_type = 'N');
32405 
32406 --added by yangli for Java Engine changes
32407 CURSOR l_lines_info_cur
32408 is
32409 select line_index, unit_price, price_flag
32410 from qp_npreq_lines_tmp
32411 where QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N'
32412 UNION ALL
32413 select line_index, unit_price, price_flag
32414 from qp_int_lines
32415 where QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'Y';
32416 
32417 
32418 --added by yangli for Java Engine changes
32419 l_msg_value_from NUMBER;
32420 l_msg_value_to   NUMBER;
32421 l_msg_context    VARCHAR2(240);
32422 l_msg_attribute  VARCHAR2(80);
32423 -- end changes
32424 
32425 l_trans VARCHAR2(1);
32426 l_install_status VARCHAR2(1);
32427 l_limits_installed VARCHAR2(1) := FND_PROFILE.VALUE('QP_LIMITS_INSTALLED');
32428 --added by yangli for Java Engine 3086881
32429 l_begin_time number;
32430 l_end_time number;
32431 l_request_id number;
32432 --added by yangli for Java Engine 3086881
32433 
32434 BEGIN
32435 qp_debug_util.tstart('ENGINE_CALL_QPXGPREB','QPXGPREB Price Engine Call');
32436 
32437 --==========START: Debug Viewere needed by JAVA and PL/SQL engine=======
32438  --G_QP_DEBUG_PROFILE_VALUE := FND_PROFILE.VALUE(v_debug_switch);
32439  G_PUBLIC_API_CALL_FLAG := nvl(p_control_rec.public_api_call_flag,'N');
32440 
32441  -- Set the G_DEBUG_ENGINE if the call is not from public API
32442  IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
32443   Set_QP_Debug;
32444  END IF;
32445 
32446   l_pricing_start_time := dbms_utility.get_time;
32447 
32448 IF G_QP_DEBUG_PROFILE_VALUE = G_ENGINE_TIME_TRACE_ON THEN   --3085171
32449   --added to note redo generation
32450   begin
32451    select value into l_pricing_start_redo
32452    from v$mystat, v$statname
32453    where v$mystat.statistic# = v$statname.statistic#
32454    and v$statname.name = 'redo size';
32455   exception
32456   when others then
32457    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32458     engine_debug('Error in looking up debug'||SQLERRM);
32459    END IF;
32460   end;
32461 END IF;
32462 
32463  --l_pricing_start_time := sysdate;
32464 
32465 -- Debug Screen related change
32466 -- Irrespective of om debug if qp debug is on debug information is captured into qp debug tables
32467  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
32468     (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
32469   -- A call to QP_COPY_DEBUG_PVT.Generate_Debug_Req_Seq to initialize Global Variables
32470   IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
32471      QP_COPY_DEBUG_PVT.Generate_Debug_Req_Seq(l_return_status,
32472                                               l_status_text);
32473      --x_return_status := l_return_status; -- fix bug 2756754
32474      --x_return_status_text := l_status_text; -- fix bug 2756754
32475      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
32476         IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32477            engine_debug('Error QP_COPY_DEBUG_PVT.Generate_Debug_Req_Seq: '||l_status_text);
32478         END IF; -- END IF G_DEBUG_ENGINE
32479         RAISE E_DEBUG_ROUTINE_ERROR; -- fix bug 2756754, dbg failed should not be an hard error
32480      END IF;
32481   END IF;
32482  END IF;
32483 
32484 
32485 /* IF (NOT OE_DEBUG_PUB.ISDebugOn) THEN --If om debug is not on , then only look at qp_debug
32486  IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
32487     (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
32488   oe_debug_pub.SetDebugLevel(10);
32489   oe_debug_pub.Initialize;
32490   oe_debug_pub.debug_on;
32491   l_output_file := oe_debug_pub.Set_Debug_Mode('FILE');
32492   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32493   engine_debug ('The output file is : ' || l_output_file );
32494   END IF;
32495   G_DEBUG_ENGINE:= FND_API.G_TRUE;
32496  ELSE
32497   G_DEBUG_ENGINE:= FND_API.G_FALSE;
32498  END IF;
32499 ELSE
32500  G_DEBUG_ENGINE:= FND_API.G_TRUE;
32501 END IF; */
32502 
32503  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32504  engine_debug('***Entering Oracle Pricing***');
32505  engine_debug('Please set debug level 3 in profile option to see all Pricing Debug Messages');
32506  engine_debug('-----------------New Engine Call----------------------');
32507  engine_debug('Pricing Event: ' || p_control_rec.PRICING_EVENT);
32508  engine_debug('Pricing Engine Version: ' || QP_PREQ_GRP.GET_VERSION);
32509 
32510  END IF;
32511  X_RETURN_STATUS:=FND_API.G_RET_STS_SUCCESS;
32512 --==========END: Debug Viewere needed by JAVA and PL/SQL engine=======
32513 
32514 --======moved here by yangli, needed by JAVA and PL/SQL engine=============
32515 G_TEMP_TABLE_INSERT_FLAG := nvl(p_control_rec.temp_table_insert_flag,'Y');
32516 
32517 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
32518   --=====START: Specific to PL/SQL engine =======================
32519   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32520         ENGINE_DEBUG('Java Engine not Installed ----------');
32521   END IF;
32522 
32523   -- julin [3805113]: resetting tables used in handle_break/call_calculation_engine
32524   G_CHILD_VALUE_FROM_TBL.delete;
32525   G_CHILD_VALUE_TO_TBL.delete;
32526   G_PARENT_LINE_DETAIL_INDEX_TBL.delete;
32527 
32528  --dbms_output.put_line('Final Debug: ' || oe_debug_pub.g_debug);
32529  --G_DEBUG_ENGINE := FND_API.G_TRUE;
32530  --G_LINE_DETAIL_INDEX := 0;
32531  G_MANUAL_DISCOUNT_FLAG := nvl(FND_PROFILE.VALUE(G_RETURN_MANUAL_DISCOUNTS),'Y'); --p_control_rec.manual_discount_flag;
32532  G_GSA_CHECK_FLAG  := p_control_rec.gsa_check_flag;
32533  G_GSA_DUP_CHECK_FLAG  := nvl(p_control_rec.gsa_dup_check_flag,'N');
32534  --moved to top for both PL/SQL and Java Engine
32535  --G_TEMP_TABLE_INSERT_FLAG := nvl(p_control_rec.temp_table_insert_flag,'Y');
32536  G_MANUAL_ADJUSTMENTS_CALL_FLAG := nvl(p_control_rec.manual_adjustments_call_flag,'N');
32537  G_INSERT_INTO_FORMULA_TMP := FALSE;
32538  G_INSERT_FORMULA_STEP_VALUES := nvl(FND_PROFILE.VALUE('QP_INSERT_FORMULA_STEP_VALUES'),'Y');
32539  G_BLIND_DISCOUNT_PROFILE := nvl(FND_PROFILE.VALUE(G_BLIND_DISCOUNT),'N');
32540  G_MULTI_CURRENCY_PROFILE := nvl(FND_PROFILE.VALUE(G_MULTI_CURRENCY),'N'); -- vivek
32541  G_QUALIFY_SECONDARY := NVL(FND_PROFILE.VALUE('QP_QUALIFY_SECONDARY_PRICE_LISTS'),'N');--profile option
32542  --G_USE_MULTI_CURRENCY  := p_control_rec.use_multi_currency; -- Vivek
32543  G_ORDER_ID := null; -- accum range break
32544 
32545  if p_control_rec.use_multi_currency = 'Y' then
32546    G_USE_MULTI_CURRENCY := p_control_rec.use_multi_currency;
32547  else
32548    -- Added new profile (QP_MULTI_CURRENCY_USAGE) with default value 'N' to maintain
32549    -- current behaviour,bug 2943033
32550    G_USE_MULTI_CURRENCY := nvl(fnd_profile.value('QP_MULTI_CURRENCY_USAGE'), 'N');
32551  end if;
32552 
32553  -- Essilor Fix bug 2789138
32554  L_MANUAL_ADJUSTMENTS_CALL_FLAG := nvl(p_control_rec.manual_adjustments_call_flag,NULL);
32555 
32556  -- shu ADD TO MAIN
32557  IF G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN
32558  	G_MCURR_INSTALLED_USED := 'Y';
32559  ELSE
32560  	G_MCURR_INSTALLED_USED := 'N';
32561  END IF;
32562  G_SECURITY_CONTROL := nvl(FND_PROFILE.VALUE('QP_SECURITY_CONTROL'), 'OFF'); --security
32563  G_CURRENT_USER_OP_UNIT := NVL(p_control_rec.org_id, QP_UTIL.GET_ORG_ID); --security
32564  						     -- [prarasto] changed to use get_org_id instead of profile for implementing MOAC
32565 
32566     --added for moac
32567     --Initialize MOAC and set org context to Org passed in nvl(p_control_rec.org_id, mo_default_org_id)
32568     --so that the pricing engine will look at data specific to the
32569     --passed org or mo_default_org plus global data only
32570 
32571     IF MO_GLOBAL.get_access_mode is null THEN
32572       MO_GLOBAL.Init('QP');
32573       IF G_CURRENT_USER_OP_UNIT IS NOT NULL THEN
32574         MO_GLOBAL.set_policy_context('S', G_CURRENT_USER_OP_UNIT);
32575       END IF;
32576     END IF;--MO_GLOBAL
32577 
32578 
32579  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32580    engine_debug('G_SECURITY_CONTROL: '||G_SECURITY_CONTROL);
32581    engine_debug('G_CURRENT_USER_OP_UNIT: '||G_CURRENT_USER_OP_UNIT);
32582 
32583  END IF;
32584   --=====END: Specific to PL/SQL engine =======================
32585 END IF; --Java engine is not insalled
32586 
32587 --=====START: Set_Request_Id needed by both Java and PL/SQL engine
32588  -- Set the request id if called from plsql/path and not temp table insert path
32589  IF (G_TEMP_TABLE_INSERT_FLAG = G_YES) THEN
32590   QP_Price_Request_Context.Set_Request_Id;
32591   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32592   engine_debug('Request id in QP_PREQ_GRP : ' ||sys_context('qp_context','request_id'));
32593   END IF;
32594  END IF;
32595 --=====END: Set_Request_Id needed by both Java and PL/SQL engine
32596 
32597 --=====START: No-Pricing-Line check needed by both Java and PL/SQL engine
32598  l_price_flag_indx := NULL;
32599  l_price_flag_yes_only := G_NO;
32600 
32601  IF G_TEMP_TABLE_INSERT_FLAG = G_YES THEN -- pl/sql path
32602 
32603  IF (p_line_tbl.COUNT > 0) THEN
32604   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32605   engine_debug('There are lines to be priced');
32606   END IF;
32607   FOR i in p_line_tbl.FIRST .. p_line_tbl.LAST
32608   LOOP
32609    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32610    engine_debug('In the Loop');
32611    engine_debug('Before Pricing Line Index: ' || p_line_tbl(i).line_index);
32612    engine_debug('Before Pricing Unit Price: ' || p_line_tbl(i).unit_price);
32613    engine_debug('Before Pricing Price Flag: ' || p_line_tbl(i).price_flag);
32614    END IF;
32615   END LOOP;
32616  ELSE -- else (p_line_tbl.COUNT > 0)
32617   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32618   engine_debug('There are no lines to be priced');
32619   END IF;
32620  END IF; -- end if (p_line_tbl.COUNT > 0)
32621 
32622  ELSE --G_TEMP_TABLE_INSERT_FLAG = 'N', direct insert/performance path, shulin dbg 2437534
32623   --FOR cl IN (select line_index, unit_price, price_flag from qp_npreq_lines_tmp)
32624   FOR cl IN l_lines_info_cur --by yangli for Java Engine changes
32625   LOOP
32626    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32627    engine_debug('In direct insert Loop / performance path');
32628    engine_debug('Before Pricing Line Index: ' || cl.line_index);
32629    engine_debug('Before Pricing Unit Price: ' || cl.unit_price);
32630    engine_debug('Before Pricing Price Flag: ' || cl.price_flag);
32631    END IF;
32632   END LOOP;
32633 END IF;--temp_table_insert_flag
32634 
32635 --for Java Engine case, the check here will catch it instead of contacting Java Engine
32636  IF (G_TEMP_TABLE_INSERT_FLAG = G_YES) THEN -- If records are inserted in pricing engine from pl/sql tables
32637   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32638   engine_debug('Check to see if all the lines have price flag N');
32639   END IF;
32640   I:= p_line_tbl.FIRST;
32641   WHILE I IS NOT NULL
32642   LOOP
32643    IF (p_line_tbl(I).PRICE_FLAG = G_YES or p_line_tbl(I).PRICE_FLAG = G_PHASE) THEN
32644     l_price_flag_indx := p_line_tbl(I).LINE_INDEX;
32645     EXIT;
32646    END IF;
32647    I:=p_line_tbl.NEXT(I);
32648   END LOOP;
32649 
32650   I:= p_line_tbl.FIRST;
32651   WHILE I IS NOT NULL
32652   LOOP
32653 
32654    	--shu, begin for bug 2437534
32655   	--if there is at least 1 line with price_flag = 'Y'
32656 	--or if there is at least 1 line with price_flag = 'P' and unit_price is not passed price list search should be done
32657 	IF l_price_flag_yes_only = G_NO THEN  -- shu, 'N' was default init value for l_price_flag_yes_only
32658 		IF p_line_tbl(I).PRICE_FLAG = G_YES
32659 			or (p_line_tbl(I).PRICE_FLAG = G_PHASE -- G_PHASE is 'P'
32660 			and p_line_tbl(I).unit_price is null)
32661 		THEN
32662 			l_price_flag_yes_only := G_YES;
32663 			EXIT;
32664 		END IF;--PRICE_FLAG = G_YES or PRICE_FLAG = G_PHASE
32665 	END IF;--l_price_flag_yes_only
32666    	-- shu, fix bug 2437534
32667 
32668    I:=p_line_tbl.NEXT(I);
32669   END LOOP;
32670 
32671    -- The flag tells if there is atleast 1 order line with price_flag = 'Y'
32672    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32673    engine_debug('Price Flag Yes: ' || l_price_flag_yes_only);
32674 
32675    END IF;
32676   IF (l_price_flag_indx IS NULL ) THEN
32677    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32678    engine_debug('All the lines have price flag N.Hence no pricing returning');
32679    END IF;
32680    x_line_tbl  := p_line_tbl;
32681    x_line_qual := p_qual_tbl;
32682    x_line_attr_tbl := p_line_attr_tbl;
32683    x_line_detail_tbl := p_line_detail_tbl;
32684    RETURN; -- No pricing needs to be done as all the lines have price flag as 'N'
32685   END IF;
32686  END IF;
32687 --=====END: No-Pricing-Line check needed by both Java and PL/SQL engine
32688 
32689 --=====START: needed by both Java and PL/SQL engine, used later in shared code
32690  --this method will populate G_PRICE_LIST_SEQUENCE and G_PRICE_LIST_PHASE_ID
32691  --and later NOT-NULL check against these two globals are performed
32692  Get_Price_List_Sequence(l_return_status,l_status_text);
32693 
32694  IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
32695   RAISE E_ROUTINE_ERRORS;
32696  END IF;
32697 --=====END: needed by both Java and PL/SQL engine, used later in shared code
32698 
32699 --=====START: needed by both Java and PL/SQL engine, used in Populate_Output()
32700  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32701   engine_debug('Rounding flag: '||p_control_rec.rounding_flag);
32702  END IF;
32703  l_rounding_flag := nvl(p_control_rec.rounding_flag,G_YES);
32704 --=====START: needed by both Java and PL/SQL engine, used in Populate_Output()
32705 
32706 --********************************************************************
32707 --If user populates the temp tables directly
32708 --the public API will populate the currency_code etc in
32709 --public variables
32710 --********************************************************************
32711 -- qp_number.canonical_mask := 'FM999999999999999999999.99999999999999999999999999999999999999'; --3085147
32712 qp_number.canonical_mask := 'FM999999999999999999999.9999999999999999999999999999999999999999'; --3169430
32713 
32714 --=======START: Pre-pricing processing  needed by JAVA and PL/SQL engine======
32715 IF G_TEMP_TABLE_INSERT_FLAG = G_YES THEN
32716 
32717  /*Truncate_Temp_Tables (l_return_status,l_status_text);
32718  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
32719    RAISE E_ROUTINE_ERRORS;
32720  END IF; */
32721 
32722 -- qp_number.canonical_mask := 'FM999999999999999999999.99999999999999999999999999999999999999';
32723 
32724 
32725  l_bypass_pricing := FND_PROFILE.VALUE(G_BYPASS_PRICING);
32726 
32727  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32728  engine_debug ('Pricing Bypass : ' || l_bypass_pricing);
32729 
32730  END IF;
32731  IF (l_bypass_pricing = 'Y' ) THEN
32732 
32733   x_line_tbl  := p_line_tbl;
32734   x_line_qual := p_qual_tbl;
32735   x_line_attr_tbl := p_line_attr_tbl;
32736   x_line_detail_tbl := p_line_detail_tbl;
32737 
32738   I:= x_line_tbl.FIRST;
32739 
32740  WHILE I IS NOT NULL LOOP
32741    If x_line_tbl(I).UNIT_PRICE is null or x_line_tbl(I).ADJUSTED_UNIT_PRICE is null
32742 	or x_line_tbl(I).UNIT_PRICE = fnd_api.g_miss_num or
32743 	x_line_tbl(I).ADJUSTED_UNIT_PRICE = fnd_api.g_miss_num then
32744 
32745      x_line_tbl(I).UNIT_PRICE := l_FIXED_PRICE;
32746      x_line_tbl(I).ADJUSTED_UNIT_PRICE := l_FIXED_PRICE;
32747      x_line_tbl(I).STATUS_CODE := QP_PREQ_GRP.G_STATUS_UPDATED;
32748    end if;
32749    I:=x_line_tbl.NEXT(I);
32750  END LOOP;
32751 
32752  RETURN;
32753 END IF;
32754 
32755 	 IF(p_control_rec.PRICING_EVENT = NULL
32756 	    OR p_control_rec.calculate_flag = NULL
32757 	    OR UPPER(p_control_rec.SIMULATION_FLAG) NOT IN (G_YES,G_NO)
32758 	   ) THEN
32759 	    RAISE E_INVALID_CONTROL_RECORD;
32760 	 END IF;
32761 
32762 
32763 	 IF(G_PRICE_LIST_SEQUENCE = NULL OR G_PRICE_LIST_SEQUENCE = FND_API.G_MISS_NUM
32764 	    OR G_PRICE_LIST_PHASE_ID = NULL OR  G_PRICE_LIST_PHASE_ID = FND_API.G_MISS_NUM) THEN
32765 	   RAISE E_INVALID_PHASE;
32766 	 END IF;
32767 
32768  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32769 	engine_debug('Related_lines count: '||p_related_lines_tbl.COUNT);
32770 
32771  END IF;
32772 	IF l_return_status = FND_API.G_RET_STS_ERROR THEN
32773 	  RAISE E_ROUTINE_ERRORS;
32774 	END IF;
32775 
32776         --=====needed by both Java Engine and PL/SQL engine, used in populate_output()
32777 	IF (p_control_rec.calculate_flag = G_CALCULATE_ONLY) THEN
32778 	  l_pricing_status_code := G_STATUS_NEW;
32779 	ELSE
32780 	  l_pricing_status_code := G_STATUS_UNCHANGED;
32781 	END IF;
32782 
32783 	OPEN l_check_pricing_phase_exists(p_control_rec.PRICING_EVENT,p_control_rec.PRICING_EVENT || ',');
32784 	FETCH l_check_pricing_phase_exists INTO l_pricing_phase,l_freeze_override_flag;
32785 	CLOSE l_check_pricing_phase_exists;
32786 
32787 	IF (l_pricing_phase IS NOT NULL) THEN
32788 	 l_price_phase_flag := TRUE;
32789 	 G_PRICE_PHASE_FLAG := TRUE;
32790 	ELSE
32791 	 l_price_phase_flag := FALSE;
32792 	 G_PRICE_PHASE_FLAG := FALSE;
32793 	END IF;
32794         --=====needed by both Java Engine and PL/SQL engine, used in populate_output()
32795 
32796 ELSE --g_temp_table_insert_flag = 'N', performance path
32797  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32798 	engine_debug('Calling application inserted into temp tables');
32799 
32800  END IF;
32801 G_CURRENCY_CODE := QP_PREQ_PUB.G_CURRENCY_CODE;
32802 G_PRICE_PHASE_FLAG := QP_PREQ_PUB.G_PRICE_PHASE_FLAG;
32803 G_PRICE_LIST_SEQUENCE := QP_PREQ_PUB.G_PRICE_LIST_SEQUENCE;
32804 G_PRICE_LIST_PHASE_ID := QP_PREQ_PUB.G_PRICE_LIST_PHASE_ID;
32805 G_MIN_PRICING_DATE := QP_PREQ_PUB.G_MIN_PRICING_DATE;
32806 G_MAX_PRICING_DATE := QP_PREQ_PUB.G_MAX_PRICING_DATE;
32807 
32808 l_price_flag_yes_only := NULL; -- reset, default
32809 -- Check if atleast there is one line with price_flag = 'Y'
32810 -- shu, begin bug 2437534 fix
32811  IF l_price_flag_yes_only is null THEN
32812    --FOR cl IN (select unit_price, price_flag from qp_npreq_lines_tmp)
32813    FOR cl IN l_lines_info_cur
32814    LOOP
32815    	IF cl.price_flag = G_YES OR (cl.unit_price is NULL and cl.price_flag = G_PHASE) then
32816    		l_price_flag_yes_only := G_YES;
32817    		exit;
32818    	END IF;
32819   END LOOP;
32820 
32821  END IF;
32822 -- shu, end bug 2437534 fix
32823 
32824 l_price_flag_indx := NULL;
32825 -- Check if atleast there is one line with price_flag = 'Y' or price_flag = 'P'
32826 BEGIN
32827 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
32828  SELECT 1
32829  INTO l_price_flag_indx
32830  FROM qp_npreq_lines_tmp
32831  WHERE PRICE_FLAG IN (G_YES,G_PHASE)
32832  AND   ROWNUM=1;
32833 --added by yangli for Java Engine
32834 ELSE
32835  SELECT 1
32836  INTO l_price_flag_indx
32837  FROM qp_int_lines
32838  WHERE PRICE_FLAG IN (G_YES, G_PHASE)
32839  AND ROWNUM=1;
32840 END IF;
32841 --added by yangli for Java Engine
32842 EXCEPTION
32843  WHEN NO_DATA_FOUND THEN
32844   l_price_flag_indx := NULL;
32845 END ;
32846 
32847 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32848 engine_debug('Direct Temp Table Insert Price Flag Yes Only : '||l_price_flag_yes_only);
32849 
32850 END IF;
32851 -- This is the code when calling app inserted into temp tables to quit pricing when there are no lines
32852 -- with either price flag = 'Y' or 'P'
32853 IF (l_price_flag_indx IS NULL) THEN
32854  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32855  engine_debug('No Pricing. Returning, call from direct insert into temp tables by calling app');
32856  END IF;
32857  RETURN;
32858 END IF;
32859 
32860 END IF;---p_control_rec.temp_table_insert_flag = G_NO
32861 --=======END: Pre-pricing processing  needed by JAVA and PL/SQL engine======
32862 
32863  --IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32864 --engine_debug('Pricing Event: ' || p_control_rec.PRICING_EVENT);
32865 --engine_debug('Pricing Engine Version: ' || QP_PREQ_GRP.GET_VERSION);
32866  --END IF; -- 4033618
32867 
32868 IF (G_TEMP_TABLE_INSERT_FLAG = G_YES) THEN
32869 --=======START: Truncate/Populate_Temp_tables() needed by JAVA and PL/SQL engine======
32870  Truncate_Temp_Tables (l_return_status,l_status_text);
32871  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
32872    RAISE E_ROUTINE_ERRORS;
32873  END IF;
32874 
32875  Populate_Temp_Tables
32876            (p_line_tbl,
32877             p_qual_tbl,
32878             p_line_attr_tbl,
32879             p_LINE_DETAIL_tbl,
32880             p_LINE_DETAIL_qual_tbl,
32881             p_LINE_DETAIL_attr_tbl,
32882             p_related_lines_tbl,
32883             l_rounding_flag,
32884             l_pricing_status_code,
32885             l_price_phase_flag,
32886 	    l_freeze_override_flag,
32887             p_control_rec.pricing_event,
32888             p_control_rec.calculate_flag,
32889             l_return_status,
32890             l_status_text);
32891 
32892  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
32893   RAISE E_ROUTINE_ERRORS;
32894  END IF;
32895 --========END: Truncate/Populate_Temp_tables() needed by JAVA and PL/SQL engine======
32896 ELSE
32897   -----------------START: Specific to PL/SQL Engine----------------------
32898 --added by yangli for Java Engine project
32899 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
32900   -- for accum range break
32901   -- manually set G_ORDER_ID in the direct insert path
32902   -- because Populate_Temp_Tables was not called
32903   BEGIN
32904     select line_id
32905     into G_ORDER_ID
32906     from qp_npreq_lines_tmp
32907     where line_type_code = QP_PREQ_GRP.G_ORDER_LEVEL;
32908   EXCEPTION
32909   WHEN NO_DATA_FOUND THEN
32910  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32911     QP_PREQ_GRP.engine_debug(' - could not get order header ID!  Summary request line missing');
32912  END IF; --4033618
32913   END;
32914 END IF;--java engine not installed
32915 --added by yangli for Java Engine project
32916   -----------------END: Specific to PL/SQL Engine----------------------
32917 END IF;
32918 
32919 -- [5112585/5087820]
32920 -- This block of code moved outside of the previous IF-THEN-ELSE block.
32921 -- max(line_detail_index)+1 is now correctly computed for both the PL/SQL table
32922 -- and the direct insert path for the PL/SQL engine.
32923 -----------------START: Specific to PL/SQL Engine----------------------
32924 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
32925   -- Assign the max line detail index
32926   OPEN l_get_max_line_detail_index;
32927   FETCH l_get_max_line_detail_index INTO l_max_line_detail_index;
32928   CLOSE l_get_max_line_detail_index;
32929 
32930   --Put back the changes for bug 2457983
32931   --in OC case where caller passes adjustments, the adjustments are inserted
32932   --but G_LINE_DETAIL_INDEX is not incremented which causes a
32933   --unique constraint violation on qp_npreq_ldets_tmp_U1
32934   --hence need to fetch the maximum line_detail_index
32935   G_LINE_DETAIL_INDEX := nvl(l_max_line_detail_index,1);
32936   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32937     engine_debug('G_LINE_DETAIL_INDEX '||G_LINE_DETAIL_INDEX);
32938   END IF;
32939 END IF;--java engine not installed
32940 -----------------END: Specific to PL/SQL Engine----------------------
32941 
32942 /*+------------------TO INSERT HIERARCHY RECORDS IN ATTRS_TMP  Added for TCA ----+*/
32943 
32944  INSERT_QUALIFIER_HIERARCHY;
32945 
32946 /*+------------------------------------------------------------------------------+*/
32947 
32948 --added by yangli for Java Engine project
32949 IF QP_JAVA_ENGINE_UTIL_PUB.Java_Engine_Running = 'N' THEN
32950   -----------------START: Specific to PL/SQL Engine----------------------
32951  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32952         ENGINE_DEBUG('Java Engine not Installed ----------');
32953  END IF;
32954 
32955 Update_Processing_Order(l_return_status,l_status_text);
32956 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32957 engine_debug('After calling update_procss--');
32958 
32959 END IF;
32960 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
32961   RAISE E_ROUTINE_ERRORS;
32962 END IF;
32963 
32964 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32965   FOR i in l_debug loop
32966   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32967   engine_debug('=CONTEXT PASSED: '||i.CONTEXT);
32968   engine_debug('=ATTRIBUTE     : '||i.ATTRIBUTE);
32969   engine_debug('=VALUE         : ' ||i.VALUE_FROM);
32970   engine_debug('=LINE INDEX    : ' ||i.LINE_INDEX);
32971   engine_debug('================================');
32972   END IF;
32973   END LOOP;
32974 
32975   FOR I in debug_cur LOOP
32976  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
32977 	engine_debug('Request Type Code: '|| I.REQUEST_TYPE_CODE);
32978 	engine_debug('Line Index: '|| I.LINE_INDEX);
32979 	engine_debug('Line Type Code: '|| I.LINE_TYPE_CODE);
32980 	engine_debug('Price Flag: ' || I.PRICE_FLAG);
32981 	engine_debug('Price List Header Id: ' || I.PRICE_LIST_HEADER_ID);
32982 	engine_debug('Rounding Factor : ' || I.ROUNDING_FACTOR);
32983  END IF;
32984   END LOOP;
32985 
32986 
32987 END IF;
32988 
32989 /*
32990 INDX,QP_PREQ_GRP.price_request.price_request_upd1,qp_npreq_line_attrs_tmp_N2,PRICING_STATUS_CODE,1
32991 INDX,QP_PREQ_GRP.price_request.price_request_upd1,qp_npreq_line_attrs_tmp_N2,ATTRIBUTE_TYPE,2
32992 */
32993 /*
32994 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,APPLICATION_ID,1
32995 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,DESCRIPTIVE_FLEXFIELD_NAME,2
32996 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,DESCRIPTIVE_FLEX_CONTEXT_CODE,3
32997 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_DESCR_FLEX_COL_USAGES_U1,APPLICATION_COLUMN_NAME,4
32998 
32999 INDX,QP_PREQ_GRP.price_request.price_request_sel1,FND_FLEX_VALUE_SETS_U1,FLEX_VALUE_SET_ID,1
33000 */
33001 	--G_AM_INSTALLED_PROFILE := nvl(FND_PROFILE.value('QP_ATTRIBUTE_MANAGER_INSTALLED'), G_YES); /* default is G_YES by yangli 03/12/2002*/
33002 	G_AM_INSTALLED_PROFILE := QP_UTIL.Attrmgr_Installed;
33003 		/* by yangli 05/02/02*/
33004 
33005        IF G_AM_INSTALLED_PROFILE = G_YES THEN
33006        BEGIN
33007             UPDATE /*+ dynamic_sampling(1) */ qp_npreq_line_attrs_tmp lattr
33008 	    SET value_from = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_from)),
33009 	        value_to = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_to))
33010     	    WHERE attribute_type = G_PRICING_TYPE
33011 	    AND pricing_status_code = G_STATUS_UNCHANGED
33012 	    AND exists (
33013                 SELECT format_type
33014                 FROM fnd_flex_value_sets VSET,
33015                      qp_segments_b SEGMENTS, qp_prc_contexts_b PCONTEXTS
33016                 WHERE vset.flex_value_set_id = segments.user_valueset_id
33017                 AND segments.application_id = 661
33018                 AND pcontexts.prc_context_type <> 'QUALIFIER'
33019                 AND pcontexts.prc_context_code = lattr.context
33020                 AND segments.segment_mapping_column = lattr.attribute
33021                 AND segments.prc_context_id = pcontexts.prc_context_id
33022                 AND vset.format_type = 'N'); --by yangli 03/06/2002 9:30am
33023 
33024         EXCEPTION
33025            WHEN OTHERS THEN
33026                  x_return_status := FND_API.G_RET_STS_ERROR;
33027                 BEGIN
33028 
33029                  FOR l_rec IN am_attr_msg_cur
33030                  LOOP
33031                          l_msg_context    := l_rec.context;
33032                          l_msg_attribute  := l_rec.attribute;
33033                          l_msg_value_from := qp_number.number_to_canonical(l_rec.value_from);
33034                          l_msg_value_to   := qp_number.number_to_canonical(l_rec.value_to);
33035                  END LOOP;
33036 
33037                 EXCEPTION
33038                  WHEN OTHERS THEN
33039                              l_status_text := 'Exception in QP_PREQ_GRP.PRICE_REQUEST ';
33040                              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 ';
33041                IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33042                  engine_debug('l_status_text '|| l_status_text);
33043                END IF; --4033618
33044                 END;
33045                 RAISE E_ROUTINE_ERRORS;
33046          END;
33047 
33048 	ELSE
33049 
33050          BEGIN
33051 	    UPDATE qp_npreq_line_attrs_tmp lattr
33052 	    SET value_from = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_from)),
33053 	        value_to = qp_number.number_to_canonical(qp_number.canonical_to_number(lattr.value_to))
33054 	    WHERE attribute_type = G_PRICING_TYPE
33055 	    AND pricing_status_code = G_STATUS_UNCHANGED
33056 	    AND exists (
33057                 SELECT format_type
33058                 FROM fnd_flex_value_sets VSET,fnd_descr_flex_column_usages DFLEX
33059                 WHERE vset.flex_value_set_id = dflex.flex_value_set_id
33060 	        AND dflex.application_id = 661
33061                 AND dflex.descriptive_flexfield_name = 'QP_ATTR_DEFNS_PRICING'
33062                 AND dflex.descriptive_flex_context_code = lattr.context
33063                 AND dflex.application_column_name = lattr.attribute
33064 	        AND vset.format_type = 'N');
33065 
33066          EXCEPTION
33067         --changes for bug 2174000 a qty>23digits causes numeric or value error
33068         --due to the format mas in number_to_canonical
33069         When OTHERS Then
33070           x_return_status := FND_API.G_RET_STS_ERROR;
33071               BEGIN
33072                  FOR l_rec IN attr_msg_cur
33073                  LOOP
33074                          l_msg_context    := l_rec.context;
33075                          l_msg_attribute  := l_rec.attribute;
33076                          l_msg_value_from := qp_number.number_to_canonical(l_rec.value_from);
33077                          l_msg_value_to   := qp_number.number_to_canonical(l_rec.value_to);
33078                  END LOOP;
33079               EXCEPTION
33080                          WHEN OTHERS THEN
33081                              l_status_text := 'Exception in QP_PREQ_GRP.PRICE_REQUEST ';
33082                              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
33083 s non-numeric/Errored';
33084               END;
33085           Raise E_ROUTINE_ERRORS;
33086         END;
33087 
33088        END IF; --if G_AM_INSTALLED_PROFILE is true
33089 
33090 -- begin shu, aso rounding
33091 FOR i IN get_request_type_code_cur LOOP
33092   G_REQUEST_TYPE_CODE:=i.request_type_code;
33093 END LOOP;
33094 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33095 engine_debug ('G_REQUEST_TYPE_CODE: '||G_REQUEST_TYPE_CODE);
33096 engine_debug ('G_TEMP_TABLE_INSERT_FLAG: '||G_TEMP_TABLE_INSERT_FLAG);
33097 END IF;
33098 IF (p_control_rec.rounding_flag IS NULL) THEN
33099   IF G_REQUEST_TYPE_CODE = 'ASO' AND G_TEMP_TABLE_INSERT_FLAG='Y' THEN
33100     G_ROUNDING_FLAG := 'Q';
33101   ELSE -- non 'ASO'
33102     G_ROUNDING_FLAG := 'Y';
33103   END IF;
33104 ELSE -- p_control_rec.rounding_flag not null, honor what is passed
33105   G_ROUNDING_FLAG := p_control_rec.rounding_flag;
33106 END IF;
33107 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33108 engine_debug ('G_ROUNDING_FLAG: '||G_ROUNDING_FLAG);
33109 END IF;
33110 -- end shu, aso rounding
33111 
33112 -- Bug 3143535 - ORDER AMOUNT CALCULATION ISSUE
33113 -- if G_PRICE_PHASE_FLAG = TRUE then *** Comment for bug#3588320 ***
33114   OPEN order_amount_cur;
33115   FETCH order_amount_cur INTO G_BEFORE_PRICING_ORD_AMT;
33116   CLOSE order_amount_cur;
33117   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33118     engine_debug ('G_BEFORE_PRICING_ORD_AMT: '||G_BEFORE_PRICING_ORD_AMT);
33119   END IF;
33120 -- end if;
33121 
33122 IF (p_control_rec.calculate_flag = G_CALCULATE_ONLY) THEN
33123 
33124   CALL_CALCULATION_ENGINE(p_is_direct_call => TRUE,
33125                           x_status_code    =>l_return_status,
33126                           x_status_text    =>l_status_text);
33127 
33128   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
33129     RAISE E_ROUTINE_ERRORS;
33130   END IF;
33131 
33132 ELSIF (p_control_rec.calculate_flag IN (G_SEARCH_N_CALCULATE,G_SEARCH_ONLY) )THEN
33133 
33134 -- 4227407/4361975, this call to update_rounding_factor used to be inside l_phase_cur
33135 -- shu, fix bug 2416047
33136 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33137   engine_debug('update_rounding_factor...');
33138 END IF;
33139 -- Update Rounding Factor, if rounding_flag not N  -- Ravi, shu new rounding
33140 IF G_ROUNDING_FLAG <> 'N' THEN -- shu, aso rounding,
33141     	 	UPDATE_ROUNDING_FACTOR (
33142     	 		QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
33143     	 		l_return_status,
33144                 	l_status_text);
33145 END IF; -- end if rounding_flag
33146 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33147   RAISE E_ROUTINE_ERRORS;
33148 END IF;
33149 
33150 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33151 engine_debug('BEFORE event phase loop');
33152 END IF;
33153  l_gone_in_phase_cur_loop := 'N';
33154  FOR I IN l_phase_cur(l_event_code => p_control_rec.pricing_event,
33155                       l_event_code1 => p_control_rec.pricing_event || ',') LOOP
33156  l_gone_in_phase_cur_loop := 'Y';
33157 
33158  IF (l_prev_pricing_phase_id <> I.pricing_phase_id) THEN
33159 
33160   l_prev_pricing_phase_id := I.pricing_phase_id;
33161 
33162   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33163   engine_debug('Price Flag Yes Only : '||l_price_flag_yes_only);
33164   END IF;
33165 
33166   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
33167 
33168     qp_debug_util.tstart('L_PHASE_CUR_LIST_PRICE','List Line Phase(Id) : '||I.name||' ('||I.pricing_phase_id||') ', false, true);
33169     --Set Global Flag ( Change)
33170     G_INSERT_INTO_FORMULA_TMP := TRUE;
33171     --G_INSERT_INTO_FORMULA_TMP := 'Y';
33172 
33173     -- Call to Source Item Quantity
33174     /*IF (l_pricelist_phase_count = 0) THEN
33175 	 Source_Vol_Contexts_Attributes(I.PHASE_SEQUENCE,
33176                                      I.FREEZE_OVERRIDE_FLAG,
33177 							  nvl(p_control_rec.source_order_amount_flag,G_NO),
33178                                      l_return_status,
33179                                      l_status_text);
33180          l_pricelist_phase_count := l_pricelist_phase_count + 1;
33181     END IF;*/
33182 
33183      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33184      engine_debug('Working on phase: '||I.pricing_phase_id);
33185      END IF;
33186 
33187      -- Update the price list id , validated flag
33188      Update_Price_List_Information(I.freeze_override_flag, l_return_status, l_status_text);  -- fix bug 2756754
33189      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
33190        Raise E_ROUTINE_ERRORS;
33191      END IF;
33192 
33193      -- ********
33194      -- 4227047/4361975, the call to Update_Rounding_Factor that used to be here
33195      -- was moved to before this phase cursor
33196 
33197      qp_debug_util.tstart('PLL_LIST_HEADER_SEARCH','Price List Search - LIST_HEADER_SEARCH API');
33198      LIST_HEADER_SEARCH(p_pricing_phase_id     => I.pricing_phase_id,
33199                         p_is_price_list        => TRUE,
33200                         p_freeze_override_flag => I.freeze_override_flag,
33201                         p_control_rec          => p_control_rec,
33202                         p_list_mode            => 'PLL',
33203                         x_further_search       => l_further_search,
33204                         x_status_code          => l_return_status,
33205                         x_status_text          => l_status_text
33206                         );
33207 
33208       qp_debug_util.tstop('PLL_LIST_HEADER_SEARCH');
33209       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33210         RAISE E_ROUTINE_ERRORS;
33211       END IF;
33212 
33213       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33214       engine_debug('l_further_search: '||l_further_search);
33215       engine_debug('l_further_search: '||l_further_search);
33216 
33217       END IF;
33218 	 -- Do further search only if asked for using I.SEARCH_FLAG on the price list phase
33219 	 -- Bug# 1367546
33220 
33221      IF (l_further_search =  G_YES and (I.SEARCH_FLAG = G_YES or
33222          nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) = G_YES)) -- price book
33223      THEN
33224      qp_debug_util.tstart('SELECT_PRICE_LIST_LINES','Select Price List Lines(Search Flag on) - SELECT_PRICE_LIST_LINES API');
33225 
33226          SELECT_PRICE_LIST_LINES(p_pricing_phase_id => I.pricing_phase_id,
33227                                  p_freeze_override_flag => I.freeze_override_flag,
33228                                  x_status_code => l_return_status,
33229                                  x_status_text => l_status_text,
33230                                  p_control_rec => p_control_rec); -- vivek\
33231 	qp_debug_util.tstop('SELECT_PRICE_LIST_LINES');
33232        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33233         RAISE E_ROUTINE_ERRORS;
33234        END IF;
33235 
33236       --perform grouping will group all the attributes which
33237       --contribute to one list. It will compare, the incoming
33238       --attributes against setup attributes.  If the count all the
33239       --required attributes match, then it will UPDATE
33240       --pricing status code of the list from 'T'(transient) to 'N'
33241       --(new). If doesn't mathch then it will set the status as
33242       --D_GRP (DELETED by grouping).
33243 
33244       --Evaluating between operator for both qualifiers and pricing attributes
33245       Evaluate_Between(I.pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
33246 
33247       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33248        RAISE E_ROUTINE_ERRORS;
33249       END IF;
33250 
33251 
33252       -- Check for multiple item categories and customer classes
33253       Eliminate_Multiple_Hierarchies(I.pricing_phase_id,l_return_status,l_status_text);
33254 
33255       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33256        RAISE E_ROUTINE_ERRORS;
33257       END IF;
33258 
33259       --Handle_Excluder(I.pricing_phase_id,NULL,l_return_status,l_status_text);
33260 
33261       Perform_Grouping(I.pricing_phase_id, NULL,l_return_status, l_status_text);
33262 
33263       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33264         RAISE E_ROUTINE_ERRORS;
33265       END IF;
33266 
33267       --Process_Line_Group(I.pricing_phase_id);
33268 
33269       --Evaluating between operator for both qualifiers and pricing attributes
33270       Evaluate_Between(I.pricing_phase_id,'Y',NULL,l_return_status,l_status_text);
33271 
33272       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33273        RAISE E_ROUTINE_ERRORS;
33274       END IF;
33275 
33276        QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty
33277 				(p_line_index        => NULL,
33278  				 p_order_uom_code    => NULL,
33279 				 p_order_qty         => NULL,
33280 				 p_pricing_phase_id  => I.pricing_phase_id,
33281                                  p_call_big_search   => TRUE,
33282 				 x_list_line_id	 => l_list_line_id,
33283 				 x_return_status     => l_return_status,
33284 				 x_return_status_txt => l_status_text);
33285 
33286         IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33287          RAISE E_ROUTINE_ERRORS;
33288         END IF;
33289 
33290        -- 3773652
33291        -- re-run Evaluate_Between after UOM conversion to check PLL really qualifies
33292        begin
33293          select 'x' into l_dummy
33294          from qp_npreq_lines_tmp
33295          where LINE_UOM_CODE <> nvl(PRICED_UOM_CODE, LINE_UOM_CODE)
33296          and (PRICE_FLAG = G_YES
33297               or
33298               PRICE_FLAG = G_PHASE and l_freeze_override_flag = G_YES)
33299          and rownum = 1;
33300 
33301          Evaluate_Between(i.pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
33302        exception
33303          when no_data_found then
33304            null;
33305        end;
33306 
33307 
33308          Update_Request_Line_Status(p_control_rec,'SUCCESS',i.freeze_override_flag,l_return_status,l_status_text);  --[julin/4708044]
33309          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33310           RAISE E_ROUTINE_ERRORS;
33311          END IF;
33312 
33313 
33314          --bug# 2091386 not reflecting the right price on change on UOM on the order line . Since
33315          --QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty determines the pricing_qty
33316          --which is needed later in Get_Eligible_Price_Break we need to call Get_Eligible_Price_Break
33317          --after QP_Resolve_Incompatability_PVT.Determine_Pricing_UOM_And_Qty.
33318          --By doing this we will get the right price in the PRICE event on change of UOM on the order line
33319          --for price based on price break
33320          Get_Eligible_Price_Break(I.pricing_phase_id,NULL,l_return_status,l_status_text);
33321 
33322         -- Update the request line status for lines which got valid price list
33323 
33324         --delete children lines of PBH if the parent PBH line get eliminated in
33325         --QP_Resolve_Incompatability_PVT
33326 
33327         /*OPEN l_chk_deleted_pbh_cur(J.line_index,G_PRICE_LIST_PHASE_ID);
33328         FETCH l_chk_deleted_pbh_cur INTO l_dummy;
33329         IF l_chk_deleted_pbh_cur%FOUND THEN
33330             Delete_Invalid_PBH_Children(J.line_index,G_PRICE_LIST_PHASE_ID);
33331         END IF;
33332         CLOSE l_chk_deleted_pbh_cur;*/
33333 
33334      END IF; -- l_further_search
33335 
33336      -- Bug 3183982, following 4 lines added
33337      CREATE_QUALIFIER_FROM_LIST(l_return_status,l_status_text);
33338      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33339       RAISE E_ROUTINE_ERRORS;
33340      END IF;
33341 
33342      -- Formula Integration
33343       Formula_Processing(NULL, --J.LINE_INDEX,
33344                         I.pricing_phase_id,
33345                         l_return_status,
33346                         l_status_text);
33347 
33348     /*IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33349            DELETE_LINES(J.LINE_INDEX,
33350                         l_return_status,
33351                         l_status_text);
33352     END IF;*/
33353 
33354 
33355  -- vivek, call new API
33356  if G_MULTI_CURRENCY_PROFILE = 'Y' and G_USE_MULTI_CURRENCY = 'Y' THEN  /*vivek*/
33357  	G_MCURR_INSTALLED_USED := 'Y';  -- shulin, used in QPXPCLPB Calculate_List_Price
33358   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33359   engine_debug('multi-currency TRUE - calling QP_MULTI_CURRENCY_PVT.CURRENCY_CONVERSION_API');
33360   END IF;
33361     QP_MULTI_CURRENCY_PVT.CURRENCY_CONVERSION_API(
33362                                       P_USER_CONVERSION_RATE => P_CONTROL_REC.USER_CONVERSION_RATE
33363                                      ,P_USER_CONVERSION_TYPE => P_CONTROL_REC.USER_CONVERSION_TYPE
33364                                      ,P_FUNCTION_CURRENCY => P_CONTROL_REC.FUNCTION_CURRENCY
33365                                      ,P_ROUNDING_FLAG => nvl(P_CONTROL_REC.ROUNDING_FLAG, 'Y')
33366                                     );
33367  end if;
33368    -- Calculation Engine
33369    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33370    engine_debug('------Before 1st call cal-----------');
33371 
33372    END IF;
33373 
33374    -- Bug 3183982, following 4 lines commented and moved above before calling formula engine
33375    --CREATE_QUALIFIER_FROM_LIST(l_return_status,l_status_text);
33376    --IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33377    -- RAISE E_ROUTINE_ERRORS;
33378    --END IF;
33379 
33380 --   IF p_control_rec.calculate_flag = G_SEARCH_N_CALCULATE THEN
33381       Call_Calculation_Engine(p_phase_sequence => I.phase_sequence,
33382                               p_freeze_override_flag => I.freeze_override_flag,
33383                               x_status_code =>l_return_status,
33384                               x_status_text =>l_status_text);
33385  --  END IF;
33386 
33387      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33388       RAISE E_ROUTINE_ERRORS;
33389      END IF;
33390 
33391    --If it is a price list sequence we need to create this
33392    --list as a qualifier for next phase. Because price list itself
33393    --can be a qualifier for next phase.
33394 
33395      qp_debug_util.tstop('L_PHASE_CUR_LIST_PRICE');
33396 
33397 ELSE  -- not a price list sequence
33398 
33399     qp_debug_util.tstart('L_PHASE_CUR_MODIFIERS','Modifiers Phase(Id) : '||I.name||' ('||I.pricing_phase_id||') ', false, true);
33400 
33401     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33402      engine_debug ('Starting new a phase, pricing phase id :' || i.pricing_phase_id);
33403     END IF;
33404      --do not execute the rest is there is no list lines at all
33405      --in those rarely used phase.
33406 
33407      -- [julin/4329337/4336077] checking for price list phase before l_chk_phase_exists
33408      IF (i.pricing_phase_id = G_PRICE_LIST_PHASE_ID) THEN
33409        l_exec_flag := G_NO;
33410      ELSE
33411      --IF i.pricing_phase_id >= l_rare_phase_id THEN
33412        OPEN l_chk_phase_exists(i.pricing_phase_id);
33413        FETCH l_chk_phase_exists INTO l_dummy;
33414        IF l_chk_phase_exists%NOTFOUND THEN
33415          l_exec_flag := G_NO;
33416          IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33417          engine_debug('In rare_phase_id:'||i.pricing_phase_id||' exec_flag set to N');
33418          END IF;
33419        ELSE
33420          l_exec_flag := G_YES;
33421        END IF;
33422        CLOSE l_chk_phase_exists;
33423      --END IF;
33424      END IF;
33425 
33426     -- shu, get price_list_header_id for ORDER event, manual adjustments BATCH EVENT
33427     -- so we can update rounding factor in lines_tmp
33428 
33429     IF (G_PRICE_PHASE_FLAG=FALSE) THEN
33430 
33431       --[julin/pricebook] added hint
33432       UPDATE qp_npreq_lines_tmp  a
33433       SET  (price_list_header_id,validated_flag)  =
33434       (SELECT /*+ index(b QP_PREQ_LINE_ATTRS_TMP_N2) */ distinct qp_number.canonical_to_number(value_from),validated_flag
33435       FROM qp_npreq_line_attrs_tmp b
33436       WHERE a.line_index = b.line_index
33437       AND context = G_LIST_HEADER_CONTEXT
33438       AND attribute = G_PRICELIST_ATTRIBUTE
33439       AND attribute_type = G_QUALIFIER_TYPE
33440       AND pricing_status_code = G_STATUS_UNCHANGED
33441       AND a.PRICE_LIST_HEADER_ID < 0 )
33442       WHERE a.PRICE_LIST_HEADER_ID < 0;
33443 
33444       -- ********
33445       -- 4227047/4361975, the call to Update_Rounding_Factor that used to be here
33446       -- was moved to before this phase cursor
33447 
33448     END IF; /* G_PRICE_PHASE_FLAG = FALSE */
33449 
33450    IF l_exec_flag = G_YES THEN
33451 
33452     IF (l_discount_phase_count = 0) THEN
33453 
33454          --Set Global Flag
33455          G_INSERT_INTO_FORMULA_TMP := TRUE;
33456          --G_INSERT_INTO_FORMULA_TMP := 'Y';
33457 
33458 	 Source_Vol_Contexts_Attributes(I.PHASE_SEQUENCE,
33459                                      	I.FREEZE_OVERRIDE_FLAG,
33460 					nvl(p_control_rec.source_order_amount_flag,G_NO),
33461                                      	l_return_status,
33462                                      	l_status_text);
33463          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33464           RAISE E_ROUTINE_ERRORS;
33465          END IF;
33466 
33467          Update_Distinct_Qualifier_Flag(l_return_status,l_status_text);
33468          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33469           RAISE E_ROUTINE_ERRORS;
33470          END IF;
33471 
33472          l_discount_phase_count := l_discount_phase_count + 1;
33473     END IF;
33474 
33475 
33476     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33477     engine_debug('#9999999999990');
33478 
33479     END IF;
33480     qp_debug_util.tstart('DIS_LIST_HEADER_SEARCH','Modifier Search - LIST_HEADER_SEARCH API');
33481      LIST_HEADER_SEARCH(p_pricing_phase_id     => I.pricing_phase_id,
33482                         p_is_price_list        => FALSE,
33483                         p_freeze_override_flag => I.freeze_override_flag,
33484                         p_control_rec          => p_control_rec,
33485                         p_list_mode            => 'DIS',
33486                         x_further_search       => l_further_search,
33487                         x_status_code          => l_return_status,
33488                         x_status_text          => l_status_text
33489                         );
33490       qp_debug_util.tstop('DIS_LIST_HEADER_SEARCH');
33491       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33492         RAISE E_ROUTINE_ERRORS;
33493       END IF;
33494 
33495 
33496 
33497       --only modifiers look at search flag
33498       IF (I.SEARCH_FLAG  =  G_YES) THEN
33499 
33500          l_disc_exist_flag := 'Y';
33501 	 qp_debug_util.tstart('SELECT_MODIFIERS','Modifier Selection - SELECT_MODIFIERS API');
33502          SELECT_MODIFIERS(p_pricing_phase_id => I.pricing_phase_id,
33503                           p_freeze_override_flag => I.freeze_override_flag,
33504                           x_status_code => l_return_status,
33505                           x_status_text => l_status_text);
33506 
33507          qp_debug_util.tstop('SELECT_MODIFIERS');
33508        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33509         RAISE E_ROUTINE_ERRORS;
33510        END IF;
33511       END IF;
33512 
33513       -- Check for multiple item categories and customer classes
33514       Eliminate_Multiple_Hierarchies(I.pricing_phase_id,l_return_status,l_status_text);
33515 
33516       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33517         RAISE E_ROUTINE_ERRORS;
33518       END IF;
33519 
33520       --Evaluating between operator for only pricing attributes and not qualifiers
33521       Evaluate_Between(I.pricing_phase_id,NULL,NULL,l_return_status,l_status_text);
33522 
33523       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33524        RAISE E_ROUTINE_ERRORS;
33525       END IF;
33526 
33527 	 -- Not needed in modifiers phases as l_outer_qual_cur takes care of this
33528       --Handle_Excluder(I.pricing_phase_id,l_return_status,l_status_text);
33529 
33530       -- Only product grouping is done in this ...
33531       Perform_Grouping(I.pricing_phase_id, NULL,l_return_status, l_status_text);
33532 
33533       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33534         RAISE E_ROUTINE_ERRORS;
33535       END IF;
33536 
33537       Process_Line_Group(I.pricing_phase_id,l_return_status,l_status_text);
33538       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33539        RAISE E_ROUTINE_ERRORS;
33540       END IF;
33541 
33542       --Evaluating between operator for both qualifiers and pricing attributes
33543       Evaluate_Between(I.pricing_phase_id,'Y',NULL,l_return_status,l_status_text);
33544 
33545       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33546        RAISE E_ROUTINE_ERRORS;
33547       END IF;
33548 
33549       Get_Eligible_Price_Break(I.pricing_phase_id,NULL,l_return_status,l_status_text);
33550       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33551        RAISE E_ROUTINE_ERRORS;
33552       END IF;
33553 
33554       --[julin/5529345]
33555       QP_Process_Other_Benefits_PVT.Calculate_Recurring_Quantity(I.pricing_phase_id, l_return_status, l_status_text);
33556 
33557       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33558        RAISE E_ROUTINE_ERRORS;
33559       END IF;
33560 
33561     FOR J IN l_get_line_index_cur(I.pricing_phase_id)
33562     LOOP
33563      OPEN  l_get_list_price_cur(J.LINE_INDEX);
33564      FETCH l_get_list_price_cur
33565 	INTO l_list_price,l_line_quantity,l_priced_quantity,l_priced_uom_code,l_line_uom_code,l_pricing_effective_date;
33566      CLOSE l_get_list_price_cur;
33567 
33568      Delete_Un_Asked_For_Promotions(J.LINE_INDEX,
33569                                     I.pricing_phase_id,
33570                                     I.INCOMPAT_RESOLVE_CODE,
33571                                     l_return_status,
33572                                     l_status_text);
33573 
33574 	 -- OID/PRG/DIS/Freight Charges
33575 	 QP_Process_Other_Benefits_PVT.Process_Other_Benefits
33576                      (J.LINE_INDEX,
33577                       I.pricing_phase_id,
33578 		      l_pricing_effective_date,
33579 		      l_priced_quantity,
33580 		      p_control_rec.simulation_flag,
33581 		      l_return_status,
33582 		      l_status_text);
33583 
33584         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33585            DELETE_LINES(J.LINE_INDEX,
33586                         l_return_status,
33587                         l_status_text,
33588                         l_error_status_code,
33589                         l_error_status_text);
33590         END IF;
33591 
33592      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33593      engine_debug('list price after phase 1 :'||l_list_price);
33594      END IF;
33595 
33596      --IF (l_list_price IS NOT NULL) THEN
33597        IF (I.INCOMPAT_RESOLVE_CODE = G_INCOMP_PRECEDENCE) THEN
33598           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33599           engine_debug('Precedence evaluation');
33600           END IF;
33601 	  qp_debug_util.tstart('RESOLVE_INCOMPATABILITY','Resolving Modifiers Incompatability - Resolve_Incompatability API');
33602 	  QP_Resolve_Incompatability_PVT.Resolve_Incompatability
33603                 (I.pricing_phase_id,
33604                  G_DISCOUNT_PROCESSING,
33605                  l_list_price,
33606                  J.LINE_INDEX,
33607                  l_return_status,
33608                  l_status_text);
33609           qp_debug_util.tstop('RESOLVE_INCOMPATABILITY');
33610          IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33611           RAISE E_ROUTINE_ERRORS;
33612          END IF;
33613        ELSIF (I.INCOMPAT_RESOLVE_CODE = G_INCOMP_BEST_PRICE) THEN
33614           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33615           engine_debug('Best price for phase');
33616           END IF;
33617 	  QP_Resolve_Incompatability_PVT.Best_Price_For_Phase
33618                                    (l_list_price,
33619                                     J.LINE_INDEX,
33620                                     I.pricing_phase_id,
33621                                     l_return_status,
33622                                     l_status_text);
33623           IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33624            RAISE E_ROUTINE_ERRORS;
33625           END IF;
33626        ELSE
33627           IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33628           engine_debug('Error, invalid incomp code: '||I.INCOMPAT_RESOLVE_CODE);
33629           END IF;
33630        END IF;
33631        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33632        engine_debug ('G_LINE_DETAIL_INDEX 6: '||G_LINE_DETAIL_INDEX);
33633        END IF;
33634 
33635         --check if there is a pbh line deleted by incomp
33636         --if it has one, delete the children lines.
33637         OPEN l_chk_deleted_pbh_cur(J.line_index,I.pricing_phase_id);
33638         FETCH l_chk_deleted_pbh_cur INTO l_dummy;
33639         IF l_chk_deleted_pbh_cur%FOUND THEN
33640             Delete_Invalid_PBH_Children(J.line_index,I.pricing_phase_id,l_return_status,l_status_text);
33641             IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33642              RAISE E_ROUTINE_ERRORS;
33643             END IF;
33644         END IF;
33645         CLOSE l_chk_deleted_pbh_cur;
33646 
33647      --END IF;
33648 
33649 
33650        IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
33651             DELETE_LINES(J.LINE_INDEX,
33652                         l_return_status,
33653                         l_status_text,
33654                         l_error_status_code,
33655                         l_error_status_text);
33656       END IF;
33657 
33658     END LOOP; --l_get_line_index_cur
33659 
33660     -- Formula  Processing
33661      Formula_Processing(NULL, --J.LINE_INDEX,
33662                        I.pricing_phase_id,
33663                        l_return_status,
33664                        l_status_text);
33665 
33666     /*IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33667            DELETE_LINES(J.LINE_INDEX,
33668                         l_return_status,
33669                         l_status_text);
33670     END IF;*/
33671    END IF;    --end if for if l_exec_flag=G_YES
33672    qp_debug_util.tstop('L_PHASE_CUR_MODIFIERS');
33673   END IF;     --end if for if price_list_sequence
33674    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33675    engine_debug('calling Set_Order_List_Rltd');
33676    END IF;
33677 
33678 
33679      Set_Order_Level_Rltd(p_freeze_override_flag =>I.freeze_override_flag,
33680                          p_pricing_phase_id     =>I.pricing_phase_id,
33681                          x_status_code          =>l_return_status,
33682                          x_status_text          =>l_status_text);
33683      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33684       RAISE E_ROUTINE_ERRORS;
33685      END IF;
33686   END IF; -- l_pricing_phase_id <> I.pricing_phase_id
33687  END LOOP l_phase_cur;
33688 
33689    --Bug fix 3963888 - Call UPDATE_ROUNDING_FACTOR if l_phase_cur cursor did not return any record
33690   If l_gone_in_phase_cur_loop = 'N' then
33691     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33692       engine_debug('l_gone_in_phase_cur_loop is N');
33693     END IF;
33694     -- Update Rounding Factor, if rounding_flag not N  -- Ravi, shu new rounding
33695    IF G_ROUNDING_FLAG <> 'N' THEN -- shu, aso rounding,
33696        UPDATE_ROUNDING_FACTOR (
33697          QP_PREQ_GRP.G_MCURR_INSTALLED_USED,
33698        l_return_status,
33699          l_status_text);
33700 
33701    END IF; -- end if rounding_flag
33702     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33703       RAISE E_ROUTINE_ERRORS;
33704     END IF;
33705   End if;
33706 
33707  l_product_app_id := 661; -- bug 3963628
33708 
33709  OPEN pricing_install_status_cur;
33710  FETCH pricing_install_status_cur into l_install_status;
33711  CLOSE pricing_install_status_cur;
33712 
33713  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33714  engine_debug('Pricing Install Status : ' || l_install_status);
33715  engine_debug('Limits Install Status : ' || l_limits_installed);
33716 
33717  END IF;
33718  --4900095
33719  IF QP_PREQ_GRP.G_Service_line_qty_tbl.COUNT = 0 THEN
33720    QP_PREQ_PUB.Determine_svc_item_quantity;
33721  END IF;
33722 -- Reset
33723 -- This global variable is used to not calculate the Recurring Qty routine and update the Operand
33724 -- if Limits Code is called to avoid second time calculation of the OPERAND value from the Calculation Engine
33725 -- QP_Process_Other_Limits.Calculate_Recurring_Qty
33726 G_LIMITS_CODE_EXECUTED := 'N';
33727 
33728  -- If advanced pricing and limits profile option = 'Y' call calc engine for limits
33729  IF (l_install_status = 'I' and l_limits_installed = G_YES and
33730      UPPER(p_control_rec.simulation_flag) = 'N' and
33731      nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES) -- price book
33732  THEN
33733   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33734   engine_debug('------Advanced Pricing and Limits Profile is Set-----------');
33735   END IF;
33736   --IF p_control_rec.calculate_flag = G_SEARCH_N_CALCULATE THEN -- check not needed once limits are installed
33737    Call_Calculation_Engine(x_status_code =>l_return_status,
33738                            x_status_text =>l_status_text);
33739      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
33740               RAISE E_ROUTINE_ERRORS;
33741      END IF;
33742 
33743      G_LIMITS_CODE_EXECUTED := 'Y';
33744 
33745   --END IF;
33746  ELSE
33747   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33748   engine_debug('------Not calling calculation Engine of limits-----------');
33749   END IF;
33750  END IF ; --l_install_status = 'I' and l_limits_installed = G_YES
33751 
33752 END IF; --  END IF for G_SEARCH_ONLY or G_SEARCH_N_CALCULATE
33753 
33754 
33755 IF (l_install_status = 'I' and l_limits_installed = G_YES and
33756     UPPER(p_control_rec.simulation_flag) = 'N' and
33757     nvl(QP_PREQ_PUB.G_CALL_FROM_PRICE_BOOK, G_NO) <> G_YES) -- price book
33758 THEN
33759   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33760   engine_debug('------Advanced Pricing and Limits Profile is Set 2 -----------');
33761 
33762   END IF;
33763  --Call the Delete Transactions API only if there is atleast one record in
33764  --qp_limit_transactions table(that is, if limits functionality being used)
33765  OPEN  limit_trans_cur;
33766  FETCH limit_trans_cur INTO l_trans;
33767 
33768  IF limit_trans_cur%FOUND THEN
33769      QP_Limit_Transactions_PVT.Delete(p_control_rec.pricing_event, l_return_status);
33770      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33771       RAISE E_ROUTINE_ERRORS;
33772      END IF;
33773  END IF;
33774  CLOSE limit_trans_cur;
33775 
33776  OPEN  l_limit_check_cur;
33777  FETCH l_limit_check_cur INTO l_header_limit_exists , l_line_limit_exists;
33778  CLOSE l_limit_check_cur;
33779 
33780  -- Process Limits and call calculation engine
33781  IF (l_header_limit_exists = G_YES or l_line_limit_exists = G_YES) THEN
33782    -- Bug 3143535
33783    -- get the order amount from attributes. if not found then sum it from order lines
33784    begin
33785      select qp_number.canonical_to_number(value_from) -- 5515203
33786        into v_order_amount
33787       from qp_npreq_line_attrs_tmp
33788      where CONTEXT = G_PRIC_VOLUME_CONTEXT
33789        AND ATTRIBUTE = G_ORDER_AMOUNT_ATTRIBUTE
33790        AND ATTRIBUTE_TYPE = G_QUALIFIER_TYPE
33791        AND PRICING_STATUS_CODE = G_STATUS_UNCHANGED
33792        and rownum = 1;
33793    exception
33794      when no_data_found then
33795        IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33796          engine_debug ('order amount not found in attributes ');
33797        END IF;
33798        OPEN order_amount_cur;
33799        FETCH order_amount_cur INTO v_order_amount;
33800        CLOSE order_amount_cur;
33801    end;
33802 
33803    IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33804      engine_debug ('Total order amount = ' || v_order_amount);
33805    END IF;
33806 
33807   /*
33808   INDX,QP_PREQ_GRP.price_request.price_request_upd1,qp_npreq_lines_tmp_N2,LINE_TYPE_CODE,1
33809   */
33810   UPDATE qp_npreq_lines_tmp
33811   SET UNIT_PRICE = v_order_amount,
33812       PRICED_QUANTITY = 1
33813   WHERE LINE_TYPE_CODE = 'ORDER';
33814 
33815   QP_Limit_Balance_Check_PVT.Process_Limits(l_return_status,l_status_text);
33816 
33817   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
33818     RAISE E_ROUTINE_ERRORS;
33819   END IF;
33820 
33821   --fix for bug 4765137
33822   --to call the delete txn API to delete the limit transactions
33823   --for the modifiers that the process_limits API marked deleted
33824   --during exceptions
33825   --note that the delete API was already called earlier to delete
33826   --the transactions for the modifiers the search engine did not apply
33827   --need to call the delete API again after process_limits which will also
33828   --update the balance
33829    --Call the Delete Transactions API only if there is atleast one record in
33830    --qp_limit_transactions table(that is, if limits functionality being used)
33831    OPEN  limit_trans_cur;
33832    FETCH limit_trans_cur INTO l_trans;
33833 
33834      IF limit_trans_cur%FOUND THEN
33835        QP_Limit_Transactions_PVT.Delete(p_control_rec.pricing_event, l_return_status);
33836        IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
33837         RAISE E_ROUTINE_ERRORS;
33838        END IF;--l_return_status
33839      END IF;--limit_trans_cur%FOUND
33840    CLOSE limit_trans_cur;
33841   --end fix for bug 4765137
33842 
33843 
33844  END IF ;
33845 END IF; --l_install_status = 'I' and l_limits_installed = G_YES
33846 
33847  -- Do not Call Calculation Engine if it is from public API Call
33848  -- l_disc_exist_flag will be G_YES when there are discounts. Make a second calculation engine call
33849  -- only if there are discounts,since calculation engine is called for pricing once
33850  IF (G_PUBLIC_API_CALL_FLAG = G_NO and l_disc_exist_flag = G_YES) THEN
33851   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33852   engine_debug('------Calling Calculation Engine as the call is from Group Engine Call-----------');
33853   END IF;
33854   Call_Calculation_Engine(x_status_code =>l_return_status,
33855                           x_status_text =>l_status_text);
33856   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
33857      RAISE E_ROUTINE_ERRORS;
33858   END IF;
33859  ELSE
33860   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33861   engine_debug('------Not Calling Calculation Engine as the call is from Public Engine Call-----------');
33862   END IF;
33863  END IF;
33864 
33865 
33866  l_status_text:='QP_COUPON_PVT.REDEEM_COUPONS';
33867  QP_COUPON_PVT.REDEEM_COUPONS(p_control_rec.simulation_flag, l_return_status, l_status_text);
33868 
33869   IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
33870       l_status_text:= 'QP_COUPON_PVT.REDEEM_COUPONS'||l_status_text;
33871 	 RAISE E_ROUTINE_ERRORS;
33872   END IF;
33873   -----------------END: Specific to PL/SQL Engine----------------------
33874 ELSE --Java Engine installed
33875   -----------------START: Specific to Java Engine------------------------
33876   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33877     engine_debug('Before calling QP_JAVA_ENGINE.request_price..');
33878     l_begin_time := dbms_utility.get_time;
33879   END IF;
33880 
33881   l_request_id := QP_Price_Request_Context.GET_REQUEST_ID;
33882   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33883     engine_debug('Request Id:'||l_request_id);
33884     engine_debug('calc_flag:'||p_control_rec.calculate_flag);
33885   END IF;
33886 
33887   QP_JAVA_ENGINE.request_price(request_id => l_request_id,
33888                                 p_control_rec => p_control_rec,
33889                                 x_return_status => l_return_status,
33890                                 x_return_status_text => l_status_Text);
33891 
33892   IF(l_return_status = FND_API.G_RET_STS_ERROR) THEN
33893     --l_status_text:= 'QP_JAVA_ENGINE.request_price:'||l_status_text;
33894     RAISE E_ROUTINE_ERRORS;
33895   END IF;
33896   IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33897     l_end_time := dbms_utility.get_time;
33898     engine_debug('Elapsed time for calling QP_JAVA_ENGINE: '||(l_end_time - l_begin_time)/100);
33899   END IF;
33900   --------------END: Specific to Java Engine------------------
33901 END IF; -- DONE PL/SQL and JAVA ENGINE CALL SWITCH by yangli
33902 
33903 --============START: Populate_Output() needed by Java and PL/SQL engine=============
33904 IF (G_TEMP_TABLE_INSERT_FLAG = G_YES and G_PUBLIC_API_CALL_FLAG = G_NO) THEN
33905  Populate_Output ( l_line_tbl,
33906                    l_line_qual,
33907                    l_line_attr_tbl,
33908                    l_line_detail_tbl,
33909                    l_line_detail_qual_tbl,
33910                    l_line_detail_attr_tbl,
33911                    l_related_lines_tbl);
33912 
33913  x_line_tbl := l_line_tbl;
33914  x_line_qual := l_line_qual;
33915  x_line_attr_tbl := l_line_attr_tbl;
33916  x_line_detail_tbl := l_line_detail_tbl;
33917  x_line_detail_qual_tbl := l_line_detail_qual_tbl;
33918  x_line_detail_attr_tbl := l_line_detail_attr_tbl;
33919  x_related_lines_tbl :=  l_related_lines_tbl;
33920 
33921  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33922  engine_debug('No of record in x_line_detail_attr_tbl: '|| x_line_detail_attr_tbl.count);
33923 
33924  END IF;
33925 END IF;
33926 --===========END: Populate_Output() needed by both Java Engine and PL/SQL engine=======
33927 
33928  --l_pricing_end_time := sysdate;
33929 
33930  --l_pricing_end_time := dbms_utility.get_time;
33931 
33932 
33933  --l_time_difference := (l_pricing_end_time - l_pricing_start_time)/100 ;
33934 
33935 --============START: Debug Viewer needed by Java and PL/SQL engine=============
33936 IF G_QP_DEBUG_PROFILE_VALUE = G_ENGINE_TIME_TRACE_ON THEN   --3085171
33937  --added to note redo log
33938  begin
33939  select value into l_pricing_end_redo
33940   from v$mystat, v$statname
33941   where v$mystat.statistic# = v$statname.statistic#
33942   and v$statname.name = 'redo size';
33943  exception
33944  when others then
33945  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33946  engine_debug('Error in looking up redo end '||SQLERRM);
33947  END IF;
33948  end;
33949 END IF;
33950 
33951  	--hw
33952  	-- change session time and session redo
33953 	g_start_time := g_total_time;
33954 	g_start_redo := g_total_redo;
33955 	g_total_time := g_total_time + (dbms_utility.get_time - l_pricing_start_time)/100;
33956 	g_total_redo := g_total_redo + (l_pricing_end_redo - l_pricing_start_redo);
33957 
33958 --Changes for bug2961617
33959 /*
33960 	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 ';
33961 */
33962 
33963 IF G_QP_DEBUG_PROFILE_VALUE = G_ENGINE_TIME_TRACE_ON THEN   --3085171
33964 BEGIN
33965 
33966         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 ';
33967 /*
33968 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;
33969 */
33970 
33971 EXCEPTION
33972 
33973 WHEN OTHERS THEN
33974     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33975     engine_debug('< In Price_Request procedure>. Failed to get time statistics');
33976     END IF;
33977 END;
33978 END IF;
33979 
33980  /*
33981   l_redo_difference := l_pricing_end_redo - l_pricing_start_redo ;
33982 
33983  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 ';
33984  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33985  engine_debug('redo log in GRP '||l_redo_difference);
33986  END IF;
33987 */
33988 
33989  /* IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
33990     x_return_status := FND_API.G_RET_STS_ERROR;
33991     IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
33992     engine_debug('< In Price_Request procedure>. Populate_Temp_Tables return with errors');
33993     END IF;
33994     RETURN;
33995  END IF; */
33996 
33997    IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
33998       (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
33999       IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34000            QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34001                                           l_return_status,
34002                                           l_status_text
34003                                           );
34004          --x_return_status := l_return_status; -- fix bug 2756754
34005          --x_return_status_text := l_status_text; -- fix bug 2756754
34006          IF l_return_status = FND_API.G_RET_STS_ERROR THEN  -- fix bug 2756754
34007            IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34008              engine_debug('Error QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES: '||l_status_text);
34009            END IF; -- END IF G_DEBUG_ENGINE
34010            RAISE E_DEBUG_ROUTINE_ERROR; -- fix bug 2756754, dbg error should not be an hard error
34011          END IF;
34012       END IF;
34013    END IF;
34014 
34015 	-- added global condition for caching - hwong
34016 	G_NEW_PRICING_CALL := G_YES;
34017  IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34018 	engine_debug('hw/pre: change to g_yes');
34019 
34020 engine_debug('***Exiting Oracle Pricing***');
34021 
34022  END IF;
34023 --============END: Debug Viewer needed by Java and PL/SQL engine=============
34024 
34025 qp_debug_util.tstop('ENGINE_CALL_QPXGPREB');
34026 
34027 EXCEPTION
34028    WHEN E_SEARCH_FLAG_IS_NULL THEN
34029      x_return_status := FND_API.G_RET_STS_ERROR;
34030      x_return_status_text := 'The search flag on qp_event_phase is null for phase '||l_pricing_phase_id;
34031      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34032      engine_debug( 'The search flag on qp_event_phase is null for phase '||l_pricing_phase_id);
34033      END IF;
34034        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
34035           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
34036           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34037                QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34038                                               l_return_status,
34039                                               l_status_text
34040                                               );
34041              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
34042                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34043                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
34044                 END IF;
34045              END IF;
34046           END IF;
34047        END IF;
34048    WHEN E_INVALID_CONTROL_RECORD THEN
34049      x_return_status := FND_API.G_RET_STS_ERROR;
34050      x_return_status_text := 'INVALID CONTROL RECORD';
34051 
34052        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
34053           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
34054           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34055                QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34056                                               l_return_status,
34057                                               l_status_text
34058                                               );
34059              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
34060                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34061                 engine_debug('Error occured in Debug Routine: ' || l_return_status);
34062                 END IF;
34063              END IF;
34064           END IF;
34065        END IF;
34066    WHEN E_ROUTINE_ERRORS THEN
34067      x_return_status := FND_API.G_RET_STS_ERROR;
34068      x_return_status_text := l_status_text;
34069      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34070      engine_debug(l_status_text);
34071 
34072      END IF;
34073        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
34074           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
34075           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34076                QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34077                                               l_return_status,
34078                                               l_status_text
34079                                               );
34080              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
34081                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34082                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
34083                 END IF;
34084              END IF;
34085           END IF;
34086        END IF;
34087    WHEN E_INVALID_PHASE THEN
34088       x_return_status := FND_API.G_RET_STS_ERROR;
34089       x_return_status_text := 'Invalid phase sequence for Price List phase, Check setup data';
34090       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34091       engine_debug('Invalid phase sequence for Price List phase');
34092 
34093       END IF;
34094        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
34095           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
34096           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34097                 QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34098                                               l_return_status,
34099                                               l_status_text
34100                                               );
34101              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
34102                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34103                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
34104                 END IF;
34105              END IF;
34106           END IF;
34107        END IF;
34108    WHEN E_NO_SOURCE_SYSTEM THEN
34109       x_return_status := FND_API.G_RET_STS_ERROR;
34110       x_return_status_text := ('No source system found for your request type');
34111       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34112       engine_debug('No source system found for your request type');
34113 
34114       END IF;
34115        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
34116           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
34117           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34118                 QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34119                                               l_return_status,
34120                                               l_status_text
34121                                               );
34122              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
34123                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34124                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
34125                 END IF;
34126              END IF;
34127           END IF;
34128        END IF;
34129    --fix bug 2756754
34130    WHEN E_DEBUG_ROUTINE_ERROR THEN
34131       IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34132         engine_debug('Error occured in Debug Routine.');
34133       END IF;
34134 
34135    WHEN OTHERS THEN
34136      IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34137      engine_debug('In Price_Request: '||l_status_text||' '||SQLERRM);
34138      END IF;
34139      x_return_status := FND_API.G_RET_STS_ERROR;
34140      x_return_status_text := SQLERRM;
34141 
34142        IF (G_QP_DEBUG_PROFILE_VALUE = G_YES) OR
34143           (G_QP_DEBUG_PROFILE_VALUE = G_DONT_WRITE_TO_DEBUG) THEN  -- If qp debug is on
34144           IF (G_PUBLIC_API_CALL_FLAG = G_NO) THEN
34145                 QP_COPY_DEBUG_PVT.WRITE_TO_DEBUG_TABLES(p_control_rec,
34146                                               l_return_status,
34147                                               l_status_text
34148                                               );
34149              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
34150                 IF G_DEBUG_ENGINE = FND_API.G_TRUE THEN
34151                 engine_debug('Error occured in Debug Routine: ' || l_status_text);
34152                 END IF;
34153              END IF;
34154           END IF;
34155        END IF;
34156 END PRICE_REQUEST;
34157 
34158 END QP_PREQ_GRP;