[Home] [Help]
PACKAGE BODY: APPS.ASO_PRICING_FLOWS_PVT
Source
1 PACKAGE BODY ASO_PRICING_FLOWS_PVT as
2 /* $Header: asovpflb.pls 120.6.12000000.2 2007/07/09 12:55:18 akushwah ship $ */
3 -- Start of Comments
4 -- Package name : ASO_PRICING_FLOWS_PVT
5 -- Purpose :
6 -- History :
7 -- NOTE :
8 -- End of Comments
9
10
11 G_PKG_NAME CONSTANT VARCHAR2(30):= 'ASO_PRICING_FLOWS_PVT';
12 G_FILE_NAME CONSTANT VARCHAR2(12) := 'asovpflb.pls';
13 --G_ADJ_NUM CONSTANT NUMBER := 999;
14
15 /******************************************************************************
16 * *
17 * Code Path when price mode is ENTIRE_QUOTE *
18 * *
19 ******************************************************************************/
20
21 PROCEDURE Price_Entire_Quote(
22 P_Api_Version_Number IN NUMBER,
23 P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE,
24 P_Commit IN VARCHAR2 := FND_API.G_FALSE,
25 p_control_rec IN ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE,
26 p_qte_header_rec IN ASO_QUOTE_PUB.Qte_Header_Rec_Type,
27 p_hd_shipment_rec IN ASO_QUOTE_PUB.Shipment_Rec_Type
28 := ASO_QUOTE_PUB.G_Miss_Shipment_Rec,
29 p_qte_line_tbl IN ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
30 p_internal_call_flag IN VARCHAR2 := 'N',
31 x_qte_line_tbl OUT NOCOPY /* file.sql.39 change */ ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
32 x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
33 x_msg_count OUT NOCOPY /* file.sql.39 change */ NUMBER,
34 x_msg_data OUT NOCOPY /* file.sql.39 change */ VARCHAR2)
35 IS
36 l_api_name CONSTANT VARCHAR2(30) := 'Price_Entire_Quote';
37 l_api_version_number CONSTANT NUMBER := 1.0;
38 l_req_control_rec QP_PREQ_GRP.CONTROL_RECORD_TYPE;
39 l_prc_control_rec ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE;
40 l_qte_line_id NUMBER;
41 l_qte_line_dtl_rec ASO_QUOTE_PUB.Qte_Line_Dtl_Rec_Type;
42 l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
43 l_return_status VARCHAR2(1);
44 l_return_status_text VARCHAR2(2000);
45 l_message_text VARCHAR2(2000);
46 i BINARY_INTEGER;
47 j BINARY_INTEGER;
48 l_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
49 l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
50 l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
51 x_pass_line VARCHAR2(10);
52 l_qte_line_id_tbl JTF_NUMBER_TABLE;
53 l_qte_adj_id_tbl JTF_NUMBER_TABLE;
54 l_service_qte_line_id_tbl JTF_NUMBER_TABLE;
55 l_index_counter Number; -- This is used to keep track of lx_index_counter
56 lx_index_counter Number;
57 lx_order_status_rec QP_UTIL_PUB.ORDER_LINES_STATUS_REC_TYPE;
58 l_adj_id_tbl Index_Link_Tbl_Type;
59 l_price_index Number;
60 px_line_index_search_tbl ASO_PRICING_CORE_PVT.Index_Link_Tbl_Type;
61 l_global_pls_tbl QP_PREQ_GRP.pls_integer_type;
62 l_global_num_tbl QP_PREQ_GRP.NUMBER_TYPE;
63 l_pricing_start_time NUMBER;
64 l_pricing_end_time NUMBER;
65 l_accum_aso_time NUMBER;
66 l_accum_qp_time NUMBER;
67
68
69 BEGIN
70
71 -- Standard call to check for call compatibility.
72 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
73 p_api_version_number,
74 l_api_name,
75 G_PKG_NAME)
76 THEN
77 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
78 END IF;
79
80 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
81 l_pricing_start_time := dbms_utility.get_time;
82 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Start of Price_Entire_Quote',1,'Y');
83 END IF;
84
85 x_return_status := FND_API.G_RET_STS_SUCCESS;
86
87 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
88 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.request_type:'||p_control_rec.request_type,1,'Y');
89 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.pricing_event:'||p_control_rec.pricing_event,1,'Y');
90 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_control_rec.calculate_flag:'||p_control_rec.calculate_flag,1,'Y');
91 END IF;
92
93 l_prc_control_rec := p_control_rec;
94 l_price_index := 1;
95
96 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
97 aso_debug_pub.add('********************* PROCESSING HEADER STARTS *******************************',1,'Y');
98 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_internal_call_flag: '||p_internal_call_flag,1,'Y');
99 END IF;
100
101 If p_internal_call_flag = 'N' then
102 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
103 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Header Level... ',1,'Y');
104 END IF;
105 ASO_PRICING_INT.G_HEADER_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
106 p_qte_header_rec => p_qte_header_rec,
107 p_shipment_rec => p_hd_shipment_rec);
108 end If;--If p_internal_call_flag = 'N' then
109
110 ASO_PRICING_CORE_PVT.Print_G_Header_Rec;
111 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
112 l_pricing_end_time := dbms_utility.get_time;
113 l_accum_aso_time := l_pricing_end_time - l_pricing_start_time;
114 END IF;
115
116 QP_Price_Request_Context.Set_Request_Id;
117
118 QP_ATTR_MAPPING_PUB.Build_Contexts (
119 P_REQUEST_TYPE_CODE => p_control_rec.request_type,
120 P_PRICING_TYPE_CODE => 'H',
121 P_line_index => l_price_index,
122 P_pricing_event => p_control_rec.pricing_event,
123 p_check_line_flag => 'N',
124 x_pass_line => x_pass_line);
125
126
127 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
128 l_pricing_start_time := dbms_utility.get_time;
129 l_accum_qp_time := l_pricing_start_time - l_pricing_end_time;
130 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
131 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Header_To_Request...',1,'Y');
132 END IF;
133
134
135 ASO_PRICING_CORE_PVT.Copy_Header_To_Request(
136 p_Request_Type => p_control_rec.request_type,
137 p_price_line_index => l_price_index,
138 px_index_counter => 1);
139
140 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
141 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
142 END IF;
143
144 lx_index_counter:= 1;
145 ASO_PRICING_CORE_PVT.Append_asked_for(
146 p_pricing_event => p_control_rec.pricing_event,
147 p_price_line_index => l_price_index,
148 p_header_id => p_qte_header_rec.quote_header_id,
149 px_index_counter => lx_index_counter);
150
151 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
152 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:After Append Ask for lx_index_counter:'
153 ||lx_index_counter,1,'Y');
154 END IF;
155 --increment the line index
156 l_price_index:= l_price_index+1;
157
158 -- Header ends here
159
160 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
161 aso_debug_pub.add('************************ HEADER LEVEL ENDS *******************************',1,'Y');
162 aso_debug_pub.add(' ',1,'Y');
163 aso_debug_pub.add('************************ LINE LEVEL BEGINS *******************************',1,'Y');
164 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of ASO UTL PVT Query_Pricing_Line_Rows...',1,'Y');
165 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Before call Get_Order_Lines_Status:p_control_rec.pricing_event:'
166 ||p_control_rec.pricing_event,1,'Y');
167 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Before call Get_Order_Lines_Status:p_control_rec.request_type:'
168 ||p_control_rec.request_type,1,'Y');
169 l_pricing_end_time := dbms_utility.get_time;
170 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
171 END IF;
172
173 QP_UTIL_PUB.Get_Order_Lines_Status(p_event_code => p_control_rec.pricing_event,
174 x_order_status_rec => lx_order_status_rec,
175 p_freight_call_flag => 'Y',
176 p_request_type_code => p_control_rec.request_type);
177
178 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
179 l_pricing_start_time := dbms_utility.get_time;
180 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
181
182 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:lx_order_status_rec.all_lines_flag:'
183 ||lx_order_status_rec.all_lines_flag,1,'Y');
184 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:lx_order_status_rec.changed_lines_flag:'
185 ||lx_order_status_rec.changed_lines_flag,1,'Y');
186 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:lx_order_status_rec.summary_line_flag:'
187 ||lx_order_status_rec.summary_line_flag,1,'Y');
188 END IF;
189
190 If lx_order_status_rec.all_lines_flag = 'N' then
191 l_prc_control_rec.PRG_REPRICE_MODE := 'F';
192 else
193 l_prc_control_rec.PRG_REPRICE_MODE := 'A';
194 end if;
195
196 l_qte_line_tbl := ASO_UTILITY_PVT.Query_Pricing_Line_Rows(p_qte_header_rec.quote_header_id);
197
198 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
199 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl.count :'||NVL(l_qte_line_tbl.count,0),1,'Y');
200 l_pricing_end_time := dbms_utility.get_time;
201 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
202 END IF;
203
204 -- Added this code to delete all the adjustments when there are no items in the cart
205 If l_qte_line_tbl.count = 0 Then
206 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
207 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:No lines in the database',1,'Y');
208 END IF;
209
210 Else
211 -- Line Count <> 0.
212
213 For i in 1..l_qte_line_tbl.count Loop
214
215 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
216 l_pricing_start_time := dbms_utility.get_time;
217 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Line_Dtl_Rows...',1,'Y');
218 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).quote_line_id:'
219 ||NVL(l_qte_line_tbl(i).quote_line_id,0),1,'Y');
220 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).pricing_line_type_indicator:'
221 ||l_qte_line_tbl(i).pricing_line_type_indicator,1,'Y');
222 END IF;
223
224 l_qte_line_id := l_qte_line_tbl(i).quote_line_id;
225 l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(l_qte_line_id);
226
227 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
228 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Defaulting Hdr Lvl Price List and Currency..',1,'Y');
229 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.currency_code :'
230 ||NVL(p_qte_header_rec.currency_code,'NULL'),1,'Y');
231 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.price_list_id :'
232 ||NVL(to_char(p_qte_header_rec.price_list_id),'NULL'),1,'Y');
233 END IF;
234 -- Pass header_level currency_code to line level by default.
235 l_qte_line_tbl(i).currency_code := p_qte_header_rec.currency_code;
236
237 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
238 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).price_list_id :'
239 ||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
240 END IF;
241 -- Pass Header level price list by default.
242 IF l_qte_line_tbl(i).pricing_line_type_indicator = 'F' then
243 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
244 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Free line so not defaulting of the price list',1,'Y');
245 END IF;
246 ELSE
247 /*Default the price list*/
248 If (l_qte_line_tbl(i).price_list_id is null
249 OR l_qte_line_tbl(i).price_list_id= FND_API.G_MISS_NUM) Then
250 l_qte_line_tbl(i).price_list_id := p_qte_header_rec.price_list_id;
251 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
252 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Price list id defaulted from Header:'
253 ||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
254 END IF;
255 End if;
256 END IF;--l_qte_line_tbl(i).pricing_line_type_indicator = 'F'
257
258 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
259 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_dtl_tbl.count :'
260 ||NVL(l_qte_line_dtl_tbl.count,0),1,'Y');
261 END IF;
262 IF l_qte_line_dtl_tbl.count = 1 THEN
263 l_qte_line_dtl_rec := l_qte_line_dtl_tbl(1);
264 ELSE
265 l_qte_line_dtl_rec := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_REC ;
266 END IF;
267
268 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
269 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Shipment_Rows..',1,'Y');
270 END IF;
271 l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows
272 (p_qte_header_rec.quote_header_id, l_QTE_LINE_ID);
273 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
274 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_shipment_tbl.count :'
275 ||NVL(l_shipment_tbl.count,0),1,'Y');
276 END IF;
277 IF l_shipment_tbl.count = 1 THEN
278 l_shipment_rec := l_shipment_tbl(1);
279 else
280 l_shipment_rec := ASO_QUOTE_PUB.G_Miss_Shipment_rec;
281 END IF;
282
283 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
284 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Line Level...', 1, 'Y');
285 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:These values will be defaulted from header for pricing qualification only:',1,'Y');
286 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(i).invoice_to_party_site_id:'
287 ||NVL(to_char(l_qte_line_tbl(i).invoice_to_party_site_id),'NULL'),1,'Y');
288 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.ship_to_party_site_id:'
289 ||NVL(to_char(l_shipment_rec.ship_to_party_site_id),'NULL'),1,'Y');
290 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(i).agreement_id:'
291 ||NVL(to_char(l_qte_line_tbl(i).agreement_id),'NULL'),1,'Y');
292 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.ship_method_code:'
293 ||NVL(l_shipment_rec.ship_method_code,'NULL'),1,'Y');
294 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.freight_terms_code:'
295 ||NVL(l_shipment_rec.freight_terms_code,'NULL'),1,'Y');
296 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.FREIGHT_CARRIER_CODE:'
297 ||NVL(l_shipment_rec.FREIGHT_CARRIER_CODE,'NULL'),1,'Y');
298 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.FOB_CODE:'
299 ||NVL(l_shipment_rec.FOB_CODE,'NULL'),1,'Y');
300 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.REQUEST_DATE:'
301 ||NVL(to_char(l_shipment_rec.REQUEST_DATE),'NULL'),1,'Y');
302 END IF;
303
304 ASO_PRICING_INT.G_LINE_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
305 p_qte_line_rec => l_qte_line_tbl(i),
306 p_qte_line_dtl_rec => l_qte_line_dtl_rec,
307 p_shipment_rec => l_shipment_rec);
308
309 ASO_PRICING_CORE_PVT.Print_G_Line_Rec;
310
311 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
312 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP Build_Contexts - Line Level...',1,'Y');
313 l_pricing_end_time := dbms_utility.get_time;
314 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
315 END IF;
316 QP_ATTR_MAPPING_PUB.Build_Contexts (
317 p_request_type_code => p_control_rec.request_type,
318 p_line_index => l_price_index,
319 p_check_line_flag => 'N',
320 p_pricing_event => p_control_rec.pricing_event,
321 p_pricing_type_code => 'L',
322 p_price_list_validated_flag => 'N',
323 x_pass_line => x_pass_line);
324 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
325 l_pricing_start_time := dbms_utility.get_time;
326 l_accum_qp_time := l_accum_qp_time +(l_pricing_start_time - l_pricing_end_time);
327 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
328 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Line_To_Request...',1,'Y');
329 END IF;
330
331 ASO_PRICING_CORE_PVT.Copy_Line_To_Request(
332 p_Request_Type => p_control_rec.request_type,
333 p_price_line_index => l_price_index,
334 px_index_counter => i+1);
335
336
337 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
338 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
339 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Before Append Ask for lx_index_counter:'
340 ||lx_index_counter,1,'Y');
341 END IF;
342 l_index_counter := lx_index_counter;
343 ASO_PRICING_CORE_PVT.Append_asked_for(
344 p_pricing_event => p_control_rec.pricing_event,
345 p_price_line_index => l_price_index,
346 p_header_id => p_qte_header_rec.quote_header_id,
347 p_line_id => l_qte_line_tbl(i).quote_line_id,
348 px_index_counter => lx_index_counter);
349 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
350 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:After Append Ask for lx_index_counter:'
351 ||lx_index_counter,1,'Y');
352 END IF;
353 If lx_index_counter = 0 then
354 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
355 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Assigning the value of l_index_counter back to lx_index_counter:'||l_index_counter,1,'Y');
356 END IF;
357 lx_index_counter := l_index_counter;
358 end if;
359
360 /*Store the line_id of all the service_lines*/
361 If l_qte_line_tbl(i).service_item_flag = 'Y' then
362 if l_service_qte_line_id_tbl.EXISTS(1) then
363 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
364 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of l_service_qte_line_id_tbl.extend...',1,'Y');
365 END IF;
366 l_service_qte_line_id_tbl.extend;
367 l_service_qte_line_id_tbl(l_service_qte_line_id_tbl.count)
368 := l_qte_line_tbl(i).quote_line_id;
369 else
370 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
371 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: First quote_line_id in l_service_qte_line_id_tbl',1,'Y');
372 END IF;
373 l_service_qte_line_id_tbl:= JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
374 end if;
375 end if;-- l_qte_line_tbl(i).service_item_flag = 'Y'
376
377 /*Store all the quote_line_id processed*/
378 IF l_Qte_Line_id_tbl.EXISTS(1) THEN
379 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
380 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of l_qte_line_id_tbl.extend...',1,'Y');
381 END IF;
382 l_Qte_Line_id_tbl.extend;
386 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: First quote_line_id in l_qte_line_id_tbl',1,'Y');
383 l_Qte_Line_id_tbl(l_Qte_Line_id_tbl.count) := l_qte_line_tbl(i).quote_line_id;
384 ELSE
385 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
387 END IF;
388 l_Qte_Line_id_tbl := JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
389 END IF;
390 --increment the line index
391 px_line_index_search_tbl(l_qte_line_id) := l_price_index;
392 l_price_index:= l_price_index+1;
393 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
394 l_pricing_end_time := dbms_utility.get_time;
395 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
396 END IF;
397 End Loop; -- l_Qte_Line_tbl.count checking.
398
399 -- Call to Price Adjustment Relationships and Service Relationships
400 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
401 l_pricing_start_time := dbms_utility.get_time;
402 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Price_Adjustments...',1,'Y');
403 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_id_tbl.count :'
404 ||NVL(l_qte_line_id_tbl.count,0),1,'Y');
405 END IF;
406 ASO_PRICING_CORE_PVT.Query_Price_Adjustments
407 (p_quote_header_id => p_qte_header_rec.quote_header_id,
408 p_qte_line_id_tbl => l_qte_line_id_tbl,
409 x_adj_id_tbl => l_qte_adj_id_tbl);
410
411 If l_qte_adj_id_tbl.exists(1) OR l_service_qte_line_id_tbl.exists(1) Then
412 -- Adjustment and line Relationships and services...
413 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
414 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Adj_rltship_Bulk...',1,'Y');
415 If l_qte_adj_id_tbl is not null then
416 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_adj_id_tbl.count :'
417 ||NVL(l_qte_adj_id_tbl.count,0),1,'Y');
418 end if;
419 If l_service_qte_line_id_tbl is not null then
420 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_qte_line_id_tbl.count :'
421 ||NVL(l_service_qte_line_id_tbl.count,0),1,'Y');
422 end if;
423 END IF;
424 ASO_PRICING_CORE_PVT.Query_relationships
425 (p_qte_adj_id_tbl => l_qte_adj_id_tbl,
426 p_service_qte_line_id_tbl => l_service_qte_line_id_tbl);
427 else
428 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
429 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: There are no service lines or manual related Adjustments',1,'Y');
430 END IF;
431 end if;--If l_qte_adj_id_tbl.exists(1) OR l_service_qte_line_id_tbl.exists(1)
432
433 END IF; -- l_qte_line_tbl.count = 0 check.
434
435
436 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
437 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin bulk collect adj ids', 1, 'Y');
438 END IF;
439
440 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
441 --If nvl(l_qte_adj_id_tbl.count,0) > 0 then
442 If l_qte_adj_id_tbl is not null then
443 For i in 1..l_qte_adj_id_tbl.count loop
444 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Querying for the following adjustment ids:',1,'Y');
445 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_adj_id_tbl(i):'||l_qte_adj_id_tbl(i),1,'Y');
446 end loop;
447 end if;
448 END IF;
449
450 SELECT adj.PRICE_ADJUSTMENT_ID
451 BULK COLLECT INTO
452 l_adj_id_tbl
453 FROM ASO_PRICE_ADJUSTMENTS adj
454 WHERE adj.quote_header_id = p_qte_header_rec.quote_header_id
455 AND adj.price_adjustment_id NOT IN (SELECT column_value
456 FROM TABLE (CAST(l_qte_adj_id_tbl AS JTF_NUMBER_TABLE)) passed_adj);
457
458 if aso_debug_pub.g_debug_flag = 'Y' THEN
459 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: No. of adjustment lines selected is sql%rowcount: '||sql%rowcount,1,'Y');
460 end if;
461
462 if aso_debug_pub.g_debug_flag = 'Y' THEN
463
464 if l_adj_id_tbl.count > 0 then
465
466 for k in l_adj_id_tbl.FIRST..l_adj_id_tbl.LAST loop
467 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_adj_id_tbl('||k||'): ' || l_adj_id_tbl(k),1,'Y');
468 end loop;
469
470 end if;
471
472 end if;
473
474 if l_adj_id_tbl.count > 0 then
475 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
476 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_ATTRIBS', 1, 'Y');
477 END IF;
478 FORALL i IN l_adj_id_tbl.FIRST..l_adj_id_tbl.LAST
479 DELETE FROM ASO_PRICE_ADJ_ATTRIBS
480 WHERE PRICE_ADJUSTMENT_ID = l_adj_id_tbl(i);
481
482 if aso_debug_pub.g_debug_flag = 'Y' THEN
483 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:No of adjustment attribute lines deleted is sql%rowcount: '||sql%rowcount,1,'Y');
484 end if;
485
486 end if;
487
488 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
489 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS', 1, 'Y');
490 END IF;
491 DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS
492 WHERE QUOTE_LINE_ID in (SELECT quote_line_id
493 FROM ASO_PRICE_ADJUSTMENTS
494 WHERE quote_header_id = p_qte_header_rec.quote_header_id
495 AND quote_line_id IS NOT NULL);
496
497 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
498 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Rltd adj Lines deleted '||sql%ROWCOUNT,1,'Y');
502 DELETE FROM ASO_PRICE_ADJUSTMENTS
499 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJUSTMENTS', 1, 'Y');
500 END IF;
501
503 WHERE quote_header_id = p_qte_header_rec.quote_header_id;
504 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
505 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adjustment Lines deleted '||sql%ROWCOUNT,1,'Y');
506 END IF;
507
508
509 If (l_qte_line_tbl.count <> 0 ) OR (p_control_rec.pricing_event = 'ORDER') then
510 --Condition was placed because engine call was not necessary if the event is price and there are no lines
511
512 --Need to modify the global index table of pls integer types
513 l_global_pls_tbl := ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL;
514 ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_PlsIndex_Table(
515 p_global_tbl => l_global_pls_tbl,
516 p_search_tbl => px_line_index_search_tbl);
517 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL;
518 ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
519 p_global_tbl => l_global_num_tbl,
520 p_search_tbl => px_line_index_search_tbl);
521 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL;
522 ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
523 p_global_tbl => l_global_num_tbl,
524 p_search_tbl => px_line_index_search_tbl);
525
526 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
527 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Populate_QP_Temp_tables...',1,'Y');
528 l_pricing_end_time := dbms_utility.get_time;
529 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
530 END IF;
531
532 ASO_PRICING_CORE_PVT.populate_qp_temp_tables;
533
534 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
535 l_pricing_start_time := dbms_utility.get_time;
536 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
537 END IF;
538
539
540 -- Set the control rec for QP
541
542 l_req_control_rec.pricing_event := p_control_rec.pricing_event;
543 l_req_control_rec.calculate_flag := p_control_rec.calculate_flag;
544 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
545 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_req_control_rec.calculate_flag:'||l_req_control_rec.calculate_flag,1,'Y');
546 END IF;
547 l_req_control_rec.simulation_flag := p_control_rec.simulation_flag;
548 l_req_control_rec.TEMP_TABLE_INSERT_FLAG := 'N'; ---- Modified
549 l_req_control_rec.source_order_amount_flag := 'Y';
550 l_req_control_rec.GSA_CHECK_FLAG := 'Y';
551 l_req_control_rec.GSA_DUP_CHECK_FLAG := 'Y';
552 l_req_control_rec.REQUEST_TYPE_CODE := p_control_rec.request_type;
553 l_req_control_rec.rounding_flag := 'Q';
554
555 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
556 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
557 l_pricing_end_time := dbms_utility.get_time;
558 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
559 END IF;
560
561 /* Change for populating QP_PREQ_GRP.CONTROL_RECORD_TYPE.ORG_ID Yogeshwar (MOAC) */
562
563 l_req_control_rec.ORG_ID := p_qte_header_rec.org_id;
564
565 /* End of Change (MOAC) */
566
567
568
569 QP_PREQ_PUB.PRICE_REQUEST
570 (p_control_rec =>l_req_control_rec
571 ,x_return_status =>l_return_status
572 ,x_return_status_Text =>l_return_status_Text
573 );
574 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
575 x_return_status := l_return_status;
576 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
577 FND_MESSAGE.Set_Name('ASO', 'ASO_OM_ERROR');
578 FND_MESSAGE.Set_Token('MSG_TXT', substr(l_return_status_text, 1,255), FALSE);
579 FND_MSG_PUB.ADD;
580 END IF;
581 RAISE FND_API.G_EXC_ERROR;
582 END IF;
583
584 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
585 l_pricing_start_time := dbms_utility.get_time;
586 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
587 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: End of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
588 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status:'
589 ||l_return_status, 1, 'Y');
590 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status_text '
591 ||l_return_status_text,1,'Y');
592 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Post_Price_Request...',1,'Y');
593 END IF;
594
595
596 ASO_PRICING_CORE_PVT.Copy_Price_To_Quote(
597 P_Api_Version_Number => 1.0,
598 P_Init_Msg_List => FND_API.G_FALSE,
599 P_Commit => FND_API.G_FALSE,
600 p_control_rec => l_prc_control_rec,
601 p_qte_header_rec => p_qte_header_rec,
602 x_return_status => x_return_status,
603 x_msg_count => x_msg_count,
604 x_msg_data => x_msg_data);
605 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
606 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Copy_Price_To_Quote : x_return_status: '
610 If p_internal_call_flag = 'N' then
607 ||nvl(x_return_status,'NULL'),1,'Y');
608 END IF;
609
611 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
612 ASO_PRICING_CORE_PVT.Process_PRG(
613 P_Api_Version_Number => 1.0,
614 P_Init_Msg_List => FND_API.G_FALSE,
615 P_Commit => FND_API.G_FALSE,
616 p_control_rec => l_prc_control_rec,
617 p_qte_header_rec => p_qte_header_rec,
618 x_qte_line_tbl => x_qte_line_tbl,
619 x_return_status => x_return_status,
620 x_msg_count => x_msg_count,
621 x_msg_data => x_msg_data);
622
623 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
624 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Process_PRG : x_return_status: '
625 ||nvl(x_return_status,'NULL'),1,'Y');
626 END IF;
627
628 END IF;--x_return_status = FND_API.G_RET_STS_SUCCESS
629
630 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
631 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
632 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After Process_PRG : x_qte_line_tbl.count: '
633 ||x_qte_line_tbl.count,1,'Y');
634 END IF;
635
636 ASO_PRICING_CORE_PVT.Process_Charges(
637 P_Api_Version_Number => 1.0,
638 P_Init_Msg_List => FND_API.G_FALSE,
639 P_Commit => FND_API.G_FALSE,
640 p_control_rec => l_prc_control_rec,
641 p_qte_header_rec => p_qte_header_rec,
642 x_return_status => x_return_status,
643 x_msg_count => x_msg_count,
644 x_msg_data => x_msg_data);
645 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
646 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Process_Charges : x_return_status: '
647 ||nvl(x_return_status,'NULL'),1,'Y');
648 END IF;
649
650 END IF;--x_return_status = FND_API.G_RET_STS_SUCCESS
651
652 End If;--p_internal_call_flag = 'N'
653 End if;--(l_qte_line_tbl.count <> 0 ) OR (p_control_rec.pricing_event = 'ORDER')
654
655
656 FND_MSG_PUB.Count_And_Get
657 ( p_encoded => 'F',
658 p_count => x_msg_count,
659 p_data => x_msg_data
660 );
661
662 FOR l IN 1 .. x_msg_count LOOP
663 x_msg_data := FND_MSG_PUB.GET( p_msg_index => l, p_encoded => 'F');
664 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
665 aso_debug_pub.add('Messge count and get '||x_msg_data, 1, 'Y');
666 aso_debug_pub.add('Messge count and get '||x_msg_count, 1, 'Y');
667 END IF;
668 END LOOP;
669
670 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
671 l_pricing_end_time := dbms_utility.get_time;
672 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
673 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:**********Timing in Price Entire Quote**************',1,'Y');
674 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Total time taken (in secs) in Price Entire Quote(Besides Pricing):'||l_accum_aso_time/100,1,'Y');
675 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Total time taken (in secs) in Pricing+BuildContext:'||l_accum_qp_time/100,1,'Y');
676 END IF;
677
678 END Price_Entire_Quote;
679
680
681 /******************************************************************************
682 * *
683 * Code Path when price mode is QUOTE_LINE *
684 * *
685 ******************************************************************************/
686
687
688 PROCEDURE Price_Quote_Line(
689
690 P_Api_Version_Number IN NUMBER,
691 P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE,
692 P_Commit IN VARCHAR2 := FND_API.G_FALSE,
693 p_control_rec IN ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE,
694 p_qte_header_rec IN ASO_QUOTE_PUB.Qte_Header_Rec_Type,
695 p_hd_shipment_rec IN ASO_QUOTE_PUB.Shipment_Rec_Type
696 := ASO_QUOTE_PUB.G_Miss_Shipment_Rec,
697 p_qte_line_tbl IN ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
698 x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
699 x_msg_count OUT NOCOPY /* file.sql.39 change */ NUMBER,
700 x_msg_data OUT NOCOPY /* file.sql.39 change */ VARCHAR2)
701 IS
702 l_api_name CONSTANT VARCHAR2(30) := 'Price_Quote_Line';
703 l_api_version_number CONSTANT NUMBER := 1.0;
704 --l_request_type VARCHAR2(60);
705 l_req_control_rec QP_PREQ_GRP.CONTROL_RECORD_TYPE;
706 l_qte_line_id NUMBER;
707 l_child_qte_line_id NUMBER;
708 l_found NUMBER;
709 l_qte_line_dtl_rec ASO_QUOTE_PUB.Qte_Line_Dtl_Rec_Type;
710 l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
711 l_return_status VARCHAR2(1);
712 l_return_status_text VARCHAR2(2000);
713 l_message_text VARCHAR2(2000);
714 i BINARY_INTEGER;
715 j BINARY_INTEGER;
719 x_pass_line VARCHAR2(10);
716 l_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
717 l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
718 l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
720 l_qte_line_id_tbl JTF_NUMBER_TABLE;
721 l_qte_adj_id_tbl JTF_NUMBER_TABLE;
722 l_service_qte_line_id_tbl JTF_NUMBER_TABLE;
723 l_qte_line_rec ASO_QUOTE_PUB.Qte_Line_Rec_Type;
724 l_ref_type_code ASO_QUOTE_LINE_DETAILS.SERVICE_REF_TYPE_CODE%TYPE;
725 l_service_ref_line_id ASO_QUOTE_LINE_DETAILS.SERVICE_REF_LINE_ID%TYPE;
726 l_service_proc_done_flag VARCHAR2(1);
727 l_service_product_id_tbl Index_Link_Tbl_Type;
728 l_service_ref_line_id_tbl Index_Link_Tbl_Type;
729 l_service_id_tbl Index_Link_Tbl_Type;
730 lx_index_counter Number;
731 l_index_counter Number; -- This is used to keep track of lx_index_counter
732 l_price_index Number;
733 px_line_index_search_tbl ASO_PRICING_CORE_PVT.Index_Link_Tbl_Type;
734 l_global_pls_tbl QP_PREQ_GRP.pls_integer_type;
735 l_global_num_tbl QP_PREQ_GRP.NUMBER_TYPE;
736
737 -- The following three cursors are needed for service lines processing.
738 CURSOR c_Qte_Line_SVC_ref(p_qte_line_id IN NUMBER) IS
739 SELECT service_ref_type_code , service_ref_line_id
740 FROM ASO_QUOTE_LINE_DETAILS
741 WHERE quote_line_id = p_qte_line_id;
742
743 CURSOR c_order_line (p_order_line_id IN NUMBER) IS
744 SELECT line_id, inventory_item_id, pricing_quantity, pricing_quantity_uom,
745 unit_list_price, price_list_id
746 FROM OE_ORDER_LINES_ALL
747 WHERE line_id = p_order_line_id;
748
749 -- Cursors used for the customer account (Sold_to_org_id)
750 CURSOR c_get_cust_acct_id IS
751 SELECT cust_account_id
752 FROM ASO_QUOTE_HEADERS_ALL
753 WHERE quote_header_id = p_qte_header_rec.quote_header_id;
754
755 CURSOR c_csi_line(p_instance_id IN NUMBER, p_cust_account_id NUMBER) IS
756 SELECT original_order_line_id
757 FROM csi_instance_accts_rg_v
758 WHERE customer_product_id = p_instance_id
759 AND account_id = p_cust_account_id;
760
761 BEGIN
762
763
764 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
765 aso_debug_pub.add('Start of Price_Quote_Line',1,'Y');
766 END IF;
767 -- Standard Start of API savepoint
768 SAVEPOINT PRICE_QUOTE_LINE_PVT;
769
770 -- Standard call to check for call compatibility.
771 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
772 p_api_version_number,
773 l_api_name,
774 G_PKG_NAME)
775 THEN
776 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
777 END IF;
778
779 x_return_status := FND_API.G_RET_STS_SUCCESS;
780
781
782 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
783 aso_debug_pub.add('p_control_rec.request_type:'||p_control_rec.request_type,1,'Y');
784 aso_debug_pub.add('p_control_rec.pricing_event:'||p_control_rec.pricing_event,1,'Y');
785 END IF;
786
787
788 l_price_index := 1;
789
790
791 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
792 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Header Level... ',1,'Y');
793 END IF;
794 ASO_PRICING_INT.G_HEADER_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
795 p_qte_header_rec => p_qte_header_rec,
796 p_shipment_rec => p_hd_shipment_rec);
797
798 ASO_PRICING_CORE_PVT.Print_G_Header_Rec;
799
800 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
801 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP Build Contexts - Header Level ... ',1,'Y');
802 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.quote_header_id: '
803 ||NVL(to_char(p_qte_header_rec.quote_header_id),'NULL'),1,'Y');
804 END IF;
805
806 QP_Price_Request_Context.Set_Request_Id;
807
808 QP_ATTR_MAPPING_PUB.Build_Contexts (
809 P_REQUEST_TYPE_CODE => p_control_rec.request_type,
810 P_PRICING_TYPE_CODE => 'H',
811 P_line_index => l_price_index,
812 P_pricing_event => p_control_rec.pricing_event,
813 p_check_line_flag => 'N',
814 x_pass_line => x_pass_line);
815
816 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
817 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
818 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Header_To_Request...',1,'Y');
819 END IF;
820
821
822 ASO_PRICING_CORE_PVT.Copy_Header_To_Request(
823 p_Request_Type => p_control_rec.request_type,
824 p_price_line_index => l_price_index,
825 px_index_counter => 1);
826
827 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
828 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
829 END IF;
830
831 lx_index_counter := 1;
832 ASO_PRICING_CORE_PVT.Append_asked_for(
833 p_pricing_event => p_control_rec.pricing_event,
834 p_price_line_index => l_price_index,
835 p_header_id => p_qte_header_rec.quote_header_id,
836 px_index_counter => lx_index_counter);
837 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
841
838 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After Header Append_asked_for: lx_index_counter:'
839 ||lx_index_counter,1,'Y');
840 END IF;
842 IF ( p_control_rec.pricing_event = 'BATCH' ) THEN
843 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
844 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Price_Adj_Header...',1,'Y');
845 END IF;
846 ASO_PRICING_CORE_PVT.Query_Price_Adj_Header(
847 p_quote_header_id => p_qte_header_rec.quote_header_id) ;
848 END IF;
849 --increment the line index
850 l_price_index:= l_price_index+1;
851
852 -- Header ends here
853
854 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
855 aso_debug_pub.add('************************ HEADER LEVEL ENDS *******************************',1,'Y');
856 aso_debug_pub.add('Code Path PRICE_MODE = QUOTE_LINE where Line Count <> 0 ',1,'Y');
857 aso_debug_pub.add('************************ LINE LEVEL BEGINS *******************************',1,'Y');
858 END IF;
859
860 -- Added this code to delete all the adjustments when there are no items in the cart
861 IF NVL(p_qte_line_tbl.count,0) = 0 THEN
862 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
863 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Deleting from ASO_PRICE_ADJUSTMENTS if p_qte_line_tbl.count = 0',1,'Y');
864 END IF;
865
866 IF p_control_rec.pricing_event = 'BATCH' THEN
867 DELETE FROM aso_price_adjustments
868 WHERE quote_header_id = p_qte_header_rec.quote_header_id
869 AND quote_line_id IS NULL;
870 End if;--p_control_rec.pricing_event = 'BATCH'
871
872 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
873 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adjustment Lines deleted if p_qte_line_tbl.count = 0 '||sql%ROWCOUNT,1,'Y');
874 END IF;
875 END IF; -- p_qte_line_tbl.count = 0
876
877
878 IF p_qte_line_tbl.count IS NOT NULL AND
879 p_qte_line_tbl.count > 0
880 THEN
881 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
882 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_line_tbl.count :'||NVL(p_qte_line_tbl.count,0),1,'Y');
883 END IF;
884
885
886 -- Filtering OUT NOCOPY /* file.sql.39 change */ deleted and updated lines from p_qte_line_tbl.
887
888 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
889 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Filtering Quote lines that are deleted...',1,'Y');
890 END IF;
891 l_service_proc_done_flag := 'N';
892 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
893 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Initialize... l_service_proc_done_flag :'||NVL(l_service_proc_done_flag,'null'),1,'Y');
894 END IF;
895 For i in 1..p_qte_line_tbl.count Loop
896 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
897 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_line_tbl('||i||').quote_line_id :'||NVL(to_char(p_qte_line_tbl(i).quote_line_id),'NULL'),1,'Y');
898 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_line_tbl('||i||').operation_code :'||NVL(p_qte_line_tbl(i).operation_code,'null'),1,'Y');
899 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_line_tbl('||i||').service_item_flag :'||NVL(p_qte_line_tbl(i).service_item_flag,'null'),1,'Y');
900 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_line_tbl('||i||').serviceable_product_flag:'||NVL(p_qte_line_tbl(i).serviceable_product_flag,'null'),1,'Y');
901 END IF;
902 IF p_qte_line_tbl(i).operation_code = 'DELETE' THEN
903 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
904 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_line_tbl('||i||').quote_line_id - deleted :'||NVL(to_char(p_qte_line_tbl(i).quote_line_id),'NULL'),1,'Y');
905 END IF;
906 -- This Quote Line is not added to the l_quote_line_tbl.
907 ELSE
908 -- Operation is either CREATE or UPDATE.
909
910 -- Service Processing Logic Begins Here...
911
912 IF NVL(p_qte_line_tbl(i).serviceable_product_flag,'N') = 'Y' AND
913 NVL(l_service_proc_done_flag,'N') = 'N'
914 THEN
915 l_service_product_id_tbl(p_qte_line_tbl(i).quote_line_id) := p_qte_line_tbl(i).quote_line_id;
916 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
917 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_product_id_tbl('||p_qte_line_tbl(i).quote_line_id||'). :'||NVL(to_char(l_service_product_id_tbl(p_qte_line_tbl(i).quote_line_id)),'null'),1,'Y');
918 END IF;
919 END IF;
920
921 IF NVL(p_qte_line_tbl(i).service_item_flag,'N') = 'Y' THEN
922 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
923 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Service lines processing........ ',1,'Y');
924 END IF;
925 IF NVL(l_service_proc_done_flag,'N') = 'N' THEN
926 FOR j IN i..p_qte_line_tbl.COUNT LOOP
927 IF NVL(p_qte_line_tbl(j).serviceable_product_flag,'N') = 'Y' THEN
928 l_service_product_id_tbl(p_qte_line_tbl(j).quote_line_id) := p_qte_line_tbl(j).quote_line_id;
929 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
930 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_product_id_tbl('||p_qte_line_tbl(j).quote_line_id||'). :'||NVL(to_char(l_service_product_id_tbl(p_qte_line_tbl(j).quote_line_id)),'null'),1,'Y');
931 END IF;
932 END IF;
933 IF NVL(p_qte_line_tbl(j).service_item_flag,'N') = 'Y' THEN
934 l_service_id_tbl(p_qte_line_tbl(j).quote_line_id) := p_qte_line_tbl(j).quote_line_id;
935 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
936 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_id_tbl('||p_qte_line_tbl(j).quote_line_id||'). :'||NVL(to_char(l_service_id_tbl(p_qte_line_tbl(j).quote_line_id)),'null'),1,'Y');
940 l_service_proc_done_flag := 'Y';
937 END IF;
938 END IF;
939 END LOOP;
941 END IF;
942 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
943 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_proc_done_flag: '||NVL(l_service_proc_done_flag,'null'),1,'Y');
944 IF (l_service_id_tbl.exists(1)) THEN
945 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_id_tbl.count: '||NVL(l_service_id_tbl.count,0),1,'Y');
946 END IF;
947 IF (l_service_product_id_tbl.exists(1)) THEN
948 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_product_id_tbl.count: '||NVL(l_service_product_id_tbl.count,0),1,'Y');
949 END IF;
950 END IF;
951
952 OPEN c_qte_line_SVC_ref(p_qte_line_tbl(i).quote_line_id);
953 FETCH c_qte_line_SVC_ref INTO l_ref_type_code, l_service_ref_line_id;
954 CLOSE c_qte_line_SVC_ref;
955
956 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
957 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_ref_type_code: '||NVL(l_ref_type_code,'null'),1,'Y');
958 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_ref_line_id: '||NVL(to_char(l_service_ref_line_id),'NULL'),1,'Y');
959 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Service Line collection to pass for Query Relationships procedure... ',1,'Y');
960 END IF;
961
962 -- l_service_qte_line_id_tbl is used to collect all quote line id(s) of service lines only.
963 -- l_service_qte_line_id_tbl is one of the parameter for ASO_PRICING_CORE_PVT.Query_Relationships procedure.
964 IF l_service_qte_line_id_tbl.exists(1) THEN
965 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
966 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Service Qte Line ID Tbl already exists... ',1,'Y');
967 END IF;
968 l_service_qte_line_id_tbl.extend;
969 l_service_qte_line_id_tbl(l_service_qte_line_id_tbl.COUNT) := p_qte_line_tbl(i).quote_line_id;
970 ELSE
971 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
972 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Service Qte Line ID Tbl NOT exists... ',1,'Y');
973 END IF;
974 l_service_qte_line_id_tbl := JTF_NUMBER_TABLE(p_qte_line_tbl(i).quote_line_id);
975 END IF;
976
977 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
978 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Service Line collection ... ',1,'Y');
979 END IF;
980
981
982 -- l_service_ref_line_id_tbl is used for parent line id collection and its different
983 -- from l_service_qte_line_id_tbl.
984
985 IF l_ref_type_code = 'ORDER' THEN
986 IF l_service_ref_line_id_tbl.exists(l_service_ref_line_id) THEN
987 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
988 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Order Line exists in p_qte_line_tbl. ',1,'Y');
989 END IF;
990 ELSE
991 FOR c_order_line_rec IN c_order_line(l_service_ref_line_id) LOOP
992 l_service_ref_line_id_tbl(l_service_ref_line_id) := l_service_ref_line_id;
993 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
994 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Order Line Not Exists... ', 1, 'N');
995 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_ref_line_id_tbl('||l_service_ref_line_id||').: '||NVL(to_char(l_service_ref_line_id_tbl(l_service_ref_line_id)),'null'),1,'Y');
996 END IF;
997 l_qte_line_rec.QUOTE_LINE_ID := c_order_line_rec.LINE_ID;
998 l_qte_line_rec.INVENTORY_ITEM_ID := c_order_line_rec.INVENTORY_ITEM_ID;
999 l_qte_line_rec.QUANTITY := c_order_line_rec.PRICING_QUANTITY;
1000 l_qte_line_rec.UOM_CODE := c_order_line_rec.PRICING_QUANTITY_UOM;
1001 l_qte_line_rec.PRICE_LIST_ID := c_order_line_rec.PRICE_LIST_ID;
1002 l_qte_line_rec.LINE_LIST_PRICE := c_order_line_rec.UNIT_LIST_PRICE;
1003 l_qte_line_rec.LINE_CATEGORY_CODE := 'SERVICE_REF_ORDER_LINE';
1004
1005 l_Qte_Line_tbl(l_Qte_Line_tbl.COUNT+1) := l_Qte_Line_rec;
1006 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1007 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Order Line Count: '|| NVL(l_Qte_line_tbl.COUNT,0), 1, 'N');
1008 END IF;
1009 END LOOP;
1010 END IF; -- Parent line already exists.
1011 ELSIF l_ref_type_code = 'CUSTOMER_PRODUCT' THEN
1012 IF l_service_ref_line_id_tbl.exists(l_service_ref_line_id) THEN
1013 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1014 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Instance Line exists in p_qte_line_tbl. ',1,'Y');
1015 END IF;
1016 ELSE
1017 FOR c_get_cust_acct_id_rec IN c_get_cust_acct_id LOOP
1018 FOR c_csi_line_rec IN c_csi_line
1019 (l_service_ref_line_id,c_get_cust_acct_id_rec.cust_account_id) LOOP
1020 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1021 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: c_get_cust_acct_id_rec.cust_account_id'||c_get_cust_acct_id_rec.cust_account_id, 1, 'N');
1022 END IF;
1023 l_service_ref_line_id_tbl(l_service_ref_line_id) := l_service_ref_line_id;
1024 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1025 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Instance Line not exists...', 1, 'N');
1026 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_ref_line_id_tbl('||l_service_ref_line_id||').: '||NVL(to_char(l_service_ref_line_id_tbl(l_service_ref_line_id)),'null'),1,'Y');
1027 END IF;
1028 FOR c_order_line_rec IN c_order_line(c_csi_line_rec.original_order_line_id) LOOP
1029 l_qte_line_rec.QUOTE_LINE_ID := l_service_ref_line_id;
1030 l_qte_line_rec.INVENTORY_ITEM_ID := c_order_line_rec.INVENTORY_ITEM_ID;
1031 l_qte_line_rec.QUANTITY := c_order_line_rec.PRICING_QUANTITY;
1032 l_qte_line_rec.UOM_CODE := c_order_line_rec.PRICING_QUANTITY_UOM;
1036 l_Qte_Line_tbl(l_Qte_Line_tbl.COUNT+1) := l_Qte_Line_rec;
1033 l_qte_line_rec.PRICE_LIST_ID := c_order_line_rec.PRICE_LIST_ID;
1034 l_qte_line_rec.LINE_LIST_PRICE := c_order_line_rec.UNIT_LIST_PRICE;
1035 l_qte_line_rec.LINE_CATEGORY_CODE := 'SERVICE_REF_CUSTOMER_LINE';
1037 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1038 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Instance Line Count: '|| NVL(l_Qte_line_tbl.COUNT,0), 1, 'N');
1039 END IF;
1040 END LOOP;--c_order_line
1041 END LOOP;--c_csi_line
1042 END LOOP;-- c_get_cust_acct_id
1043 END IF; -- Parent line already exists.
1044 ELSIF l_ref_type_code = 'QUOTE' THEN
1045 IF l_service_ref_line_id_tbl.exists(l_service_ref_line_id) OR
1046 l_service_product_id_tbl.exists(l_service_ref_line_id)
1047 THEN
1048 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1049 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Quote Line exists in p_qte_line_tbl. ',1,'Y');
1050 END IF;
1051 ELSE
1052 l_service_ref_line_id_tbl(l_service_ref_line_id) := l_service_ref_line_id;
1053 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1054 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Parent Quote Line NOT exists in p_qte_line_tbl. ',1,'Y');
1055 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_ref_line_id_tbl('||l_service_ref_line_id||'). :'||NVL(to_char(l_service_ref_line_id_tbl(l_service_ref_line_id)),'null'),1,'Y');
1056 END IF;
1057 l_qte_line_tbl(l_qte_line_tbl.COUNT+1) := ASO_UTILITY_PVT.Query_Qte_Line_Row(l_service_ref_line_id);
1058 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1059 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Quote Line Count: '|| NVL(l_Qte_line_tbl.COUNT,0), 1, 'N');
1060 END IF;
1061 END IF;-- Parent line already exists.
1062 END IF; -- ref_type_code check.
1063 END IF; -- Service Item Flag Check.
1064 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1065 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start the Process of adding the service(child)or any normal lines into l_qte_line_tbl ...',1,'Y');
1066 END IF;
1067 IF l_qte_line_tbl.exists(1) THEN
1068 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1069 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: One or more records exists in l_qte_line_tbl...',1,'Y');
1070 END IF;
1071 --changes for bug 4353654
1072 l_qte_line_rec := ASO_UTILITY_PVT.Query_Qte_Line_Row(p_qte_line_tbl(i).quote_line_id);
1073 l_qte_line_tbl(l_qte_line_tbl.COUNT+1) := l_qte_line_rec;
1074 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1075 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After adding a new record in l_qte_line_tbl...',1,'Y');
1076 END IF;
1077 ELSE
1078 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1079 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: No record exists in l_qte_line_tbl...',1,'Y');
1080 END IF;
1081 l_qte_line_tbl(1) := ASO_UTILITY_PVT.Query_Qte_Line_Row(p_qte_line_tbl(i).quote_line_id);
1082 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1083 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After adding a new record in l_qte_line_tbl...',1,'Y');
1084 END IF;
1085 END IF; -- l_qte_line_tbl.exists.
1086 END IF; -- operation code check
1087 END LOOP;
1088
1089 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1090 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: TOTAL Number of records in l_qte_line_tbl... :'||NVL(l_qte_line_tbl.count,0),1,'Y');
1091 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: *************** l_qte_line_tbl List **************** ',1,'Y');
1092 For i in 1..l_qte_line_tbl.count Loop
1093 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT : l_qte_line_tbl('||i||').quote_line_id :'||NVL(l_qte_line_tbl(i).quote_line_id,0),1,'Y');
1094 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT : l_qte_line_tbl('||i||').serviceable_product_flag:'||NVL(l_qte_line_tbl(i).serviceable_product_flag,'null'),1,'Y');
1095 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT : l_qte_line_tbl('||i||').service_item_flag:'||NVL(l_qte_line_tbl(i).service_item_flag,'null'),1,'Y');
1096 END LOOP;
1097 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: *************** l_qte_line_tbl List End **************** ',1,'Y');
1098 END IF;
1099
1100 IF (l_service_qte_line_id_tbl.exists(1)) THEN
1101 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1102 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_qte_line_id_tbl.count :'||NVL(l_service_qte_line_id_tbl.count,0),1,'Y');
1103 END IF;
1104 ELSE
1105 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1106 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: No service lines exists',1,'Y');
1107 END IF;
1108 END IF;
1109
1110 For i in 1..l_qte_line_tbl.count Loop
1111
1112 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1113 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Line_Dtl_Rows...',1,'Y');
1114 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl('||i||').quote_line_id :'||NVL(l_qte_line_tbl(i).quote_line_id,0),1,'Y');
1115 END IF;
1116 l_qte_line_id := l_qte_line_tbl(i).quote_line_id;
1117 l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(l_qte_line_id);
1118
1119
1120 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1121 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Defaulting Hdr Lvl Price List and Currency..',1,'Y');
1122 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.currency_code :'||NVL(p_qte_header_rec.currency_code,'NULL'),1,'Y');
1123 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.price_list_id :'||NVL(to_char(p_qte_header_rec.price_list_id),'NULL'),1,'Y');
1124 END IF;
1125 -- Pass header_level currency_code to line level by default.
1126 l_qte_line_tbl(i).currency_code := p_qte_header_rec.currency_code;
1127
1128
1129 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1133 IF (l_qte_line_tbl(i).price_list_id is null OR
1130 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).price_list_id :'||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
1131 END IF;
1132 -- Pass Header level price list by default.
1134 l_qte_line_tbl(i).price_list_id= FND_API.G_MISS_NUM) THEN
1135 l_qte_line_tbl(i).price_list_id := p_qte_header_rec.price_list_id;
1136 END IF;
1137
1138
1139 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1140 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_dtl_tbl.count :'||NVL(l_qte_line_dtl_tbl.count,0),1,'Y');
1141 END IF;
1142 IF l_qte_line_dtl_tbl.count = 1 THEN
1143 l_qte_line_dtl_rec := l_qte_line_dtl_tbl(1);
1144 ELSE
1145 l_qte_line_dtl_rec := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_REC ;
1146 END IF;
1147
1148 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1149 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Shipment_Rows..',1,'Y');
1150 END IF;
1151 l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows
1152 (p_qte_header_rec.quote_header_id, l_QTE_LINE_ID);
1153 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1154 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_shipment_tbl.count :'||NVL(l_shipment_tbl.count,0),1,'Y');
1155 END IF;
1156 l_shipment_rec := ASO_QUOTE_PUB.G_Miss_Shipment_rec;
1157 IF l_shipment_tbl.count = 1 THEN
1158 l_shipment_rec := l_shipment_tbl(1);
1159 END IF;
1160
1161
1162 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1163 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Line Level...', 1, 'Y');
1164 END IF;
1165 ASO_PRICING_INT.G_LINE_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
1166 p_qte_line_rec => l_qte_line_tbl(i),
1167 p_qte_line_dtl_rec => l_qte_line_dtl_rec,
1168 p_shipment_rec => l_shipment_rec);
1169
1170 ASO_PRICING_CORE_PVT.Print_G_Line_Rec;
1171
1172
1173 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1174 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP Build_Contexts - Line Level...',1,'Y');
1175 END IF;
1176
1177 QP_ATTR_MAPPING_PUB.Build_Contexts (
1178 p_request_type_code => p_control_rec.request_type,
1179 p_line_index => l_price_index,
1180 p_check_line_flag => 'N',
1181 p_pricing_event => p_control_rec.pricing_event,
1182 p_pricing_type_code => 'L',
1183 p_price_list_validated_flag => 'N',
1184 x_pass_line => x_pass_line);
1185
1186
1187 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1188 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line : '||nvl(x_pass_line,'null'),1,'Y');
1189 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Line_To_Request...',1,'Y');
1190 END IF;
1191
1192 -- Begin fix for bug 5951790.
1193 -- We should send null as selling_price to pricing engine when the pricing_event is PRICE.
1194
1195 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1196
1197 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_control_rec.pricing_event: ' || p_control_rec.pricing_event,1,'Y');
1198 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Old ASO_PRICING_INT.G_LINE_REC.line_quote_price: ' || ASO_PRICING_INT.G_LINE_REC.line_quote_price,1,'Y');
1199
1200 END IF;
1201
1202 IF (p_control_rec.pricing_event = 'PRICE') THEN
1203 ASO_PRICING_INT.G_LINE_REC.line_quote_price := null;
1204 END IF;
1205
1206 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1207 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: New ASO_PRICING_INT.G_LINE_REC.line_quote_price: ' || ASO_PRICING_INT.G_LINE_REC.line_quote_price,1,'Y');
1208 END IF;
1209
1210 -- End fix for bug 5951790.
1211
1212 ASO_PRICING_CORE_PVT.Copy_Line_To_Request(
1213 p_Request_Type => p_control_rec.request_type,
1214 p_price_line_index => l_price_index,
1215 px_index_counter => i+1);
1216
1217
1218 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1219 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
1223 ASO_PRICING_CORE_PVT.Append_asked_for(
1220 END IF;
1221
1222 l_index_counter := lx_index_counter;
1224 p_pricing_event => p_control_rec.pricing_event
1225 ,p_price_line_index => l_price_index
1226 ,p_header_id => p_qte_header_rec.quote_header_id
1227 ,p_line_id => l_qte_line_tbl(i).quote_line_id
1228 ,px_index_counter => lx_index_counter);
1229 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1230 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After Line Append_asked_for: lx_index_counter : '||NVL(lx_index_counter,0),1,'Y');
1231 END IF;
1232 IF lx_index_counter = 0 THEN
1233 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1234 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Assigning the value of l_index_counter back to lx_index_counter:'||l_index_counter,1,'Y');
1235 END IF;
1236 lx_index_counter := l_index_counter;
1237 END IF;
1238
1239 IF ( i = 1 ) THEN
1240 l_Qte_Line_id_tbl := JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
1241 ELSE
1242 l_Qte_Line_id_tbl.extend;
1243 l_Qte_Line_id_tbl(i) := l_qte_line_tbl(i).quote_line_id;
1244 END IF;
1245
1246 --increment the line index
1247 px_line_index_search_tbl(l_qte_line_id) := l_price_index;
1248 l_price_index:= l_price_index+1;
1249
1250 END LOOP;
1251
1252 -- Call to Price Adjustment Relationships and Service Relationships
1253 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1254 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Price_Adjustments...',1,'Y');
1255 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_id_tbl.count : '||NVL(l_qte_line_id_tbl.count,0),1,'Y');
1256 END IF;
1257
1258 IF p_control_rec.pricing_event = 'BATCH' THEN
1259 ASO_PRICING_CORE_PVT.Query_Price_Adjustments(
1260 p_quote_header_id => p_qte_header_rec.quote_header_id,
1261 p_qte_line_id_tbl => l_qte_line_id_tbl,
1262 x_adj_id_tbl => l_qte_adj_id_tbl);
1263 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1264 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_adj_id_tbl.count : '||NVL(l_qte_adj_id_tbl.count,0),1,'Y');
1265 END IF;
1266 END IF;--p_control_rec.pricing_event = 'BATCH'
1267
1268 -- Adjustment,line,Services Relationships.
1269 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1270 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Relationships...',1,'Y');
1271 END IF;
1272 ASO_PRICING_CORE_PVT.Query_Relationships(
1273 p_qte_adj_id_tbl => l_qte_adj_id_tbl,
1274 p_service_qte_line_id_tbl => l_service_qte_line_id_tbl);
1275
1276 FOR i IN 1..l_qte_line_tbl.count LOOP
1277 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1278 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_ATTRIBS', 1, 'Y');
1279 END IF;
1280 IF p_control_rec.pricing_event = 'BATCH' THEN
1281 DELETE FROM ASO_PRICE_ADJ_ATTRIBS
1282 WHERE PRICE_ADJUSTMENT_ID IN (SELECT PRICE_ADJUSTMENT_ID
1283 FROM ASO_PRICE_ADJUSTMENTS
1284 WHERE QUOTE_HEADER_ID = p_qte_header_rec.quote_header_id
1285 AND QUOTE_LINE_ID = l_qte_line_tbl(i).quote_line_id);
1286
1287 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1288 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adj Attribs Lines deleted '||sql%ROWCOUNT,1,'Y');
1289 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS', 1, 'Y');
1290 END IF;
1291 DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS
1292 WHERE QUOTE_LINE_ID = l_qte_line_tbl(i).quote_line_id;
1293 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1294 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Rltd adj Lines deleted '||sql%ROWCOUNT,1,'Y');
1295 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJUSTMENTS', 1, 'Y');
1296 END IF;
1297
1298 DELETE FROM ASO_PRICE_ADJUSTMENTS
1299 WHERE quote_line_id = l_qte_line_tbl(i).quote_line_id;
1300 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1301 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adjustment Lines deleted '||sql%ROWCOUNT,1,'Y');
1302 END IF;
1303 END IF;--p_control_rec.pricing_event = 'BATCH'
1304 END LOOP;
1305
1306 END IF; -- p_qte_line_tbl.count > 0.
1307
1308 If l_qte_line_tbl.count >0 then
1309
1310 --Need to modify the global index table of pls integer types
1311 l_global_pls_tbl := ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL;
1312 ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_PlsIndex_Table(
1313 p_global_tbl => l_global_pls_tbl,
1314 p_search_tbl => px_line_index_search_tbl);
1315 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL;
1316 ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
1317 p_global_tbl => l_global_num_tbl,
1318 p_search_tbl => px_line_index_search_tbl);
1319 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL;
1320 ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
1321 p_global_tbl => l_global_num_tbl,
1322 p_search_tbl => px_line_index_search_tbl);
1323
1324 End If; -- l_qte_line_tbl.count >0
1325
1326 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1330 ASO_PRICING_CORE_PVT.populate_qp_temp_tables;
1327 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Populate_QP_Temp_tables...',1,'Y');
1328 END IF;
1329
1331
1332 -- Set the control rec for QP
1333
1334 l_req_control_rec.pricing_event := p_control_rec.pricing_event;
1335 l_req_control_rec.calculate_flag := p_control_rec.calculate_flag;
1336 l_req_control_rec.simulation_flag := p_control_rec.simulation_flag;
1337 l_req_control_rec.TEMP_TABLE_INSERT_FLAG := 'N'; ---- Modified
1338 l_req_control_rec.source_order_amount_flag := 'Y';
1339 l_req_control_rec.GSA_CHECK_FLAG := 'Y';
1340 l_req_control_rec.GSA_DUP_CHECK_FLAG := 'Y';
1341 l_req_control_rec.REQUEST_TYPE_CODE := p_control_rec.request_type;
1342 l_req_control_rec.rounding_flag := 'Q';
1343
1344 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1345 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
1346 END IF;
1347
1348 /* Change for populating QP_PREQ_GRP.CONTROL_RECORD_TYPE.ORG_ID Yogeshwar (MOAC) */
1349
1350 l_req_control_rec.ORG_ID := p_qte_header_rec.org_id;
1351
1352 /* End of Change (MOAC) */
1353
1354
1355
1356 QP_PREQ_PUB.PRICE_REQUEST
1357 (p_control_rec =>l_req_control_rec
1358 ,x_return_status =>l_return_status
1359 ,x_return_status_Text =>l_return_status_Text
1360 );
1361
1362 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1363 x_return_status := l_return_status;
1364 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1365 FND_MESSAGE.Set_Name('ASO', 'ASO_OM_ERROR');
1366 FND_MESSAGE.Set_Token('MSG_TXT', substr(l_return_status_text, 1,255), FALSE);
1367 FND_MSG_PUB.ADD;
1368 END IF;
1369 RAISE FND_API.G_EXC_ERROR;
1370 END IF;
1371
1372 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1373 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: End of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
1374 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status:'
1375 ||l_return_status, 1, 'Y');
1376 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status_text '
1377 ||l_return_status_text,1,'Y');
1378 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Price_To_Quote...',1,'Y');
1379 END IF;
1380
1381
1382 ASO_PRICING_CORE_PVT.Copy_Price_To_Quote(
1383 P_Api_Version_Number => 1.0,
1384 P_Init_Msg_List => FND_API.G_FALSE,
1385 P_Commit => p_commit,
1386 p_control_rec => p_control_rec,
1387 p_qte_header_rec => p_qte_header_rec,
1388 x_return_status => x_return_status,
1389 x_msg_count => x_msg_count,
1390 x_msg_data => x_msg_data);
1391 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1392 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Copy_Price_To_Quote : x_return_status: '
1393 ||NVL(x_return_status,'X'),1,'Y');
1394 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Copy_Price_To_Quote : x_msg_count: '
1395 ||NVL(x_msg_count,0),1,'Y');
1396 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Copy_Price_To_Quote : x_msg_data: '
1397 ||NVL(x_msg_data,'X'),1,'Y');
1398 END IF;
1399
1400 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1401
1402 ASO_PRICING_CORE_PVT.Process_Charges(
1403 P_Api_Version_Number => 1.0,
1404 P_Init_Msg_List => FND_API.G_FALSE,
1405 P_Commit => p_commit,
1406 p_control_rec => p_control_rec,
1407 p_qte_header_rec => p_qte_header_rec,
1408 x_return_status => x_return_status,
1409 x_msg_count => x_msg_count,
1410 x_msg_data => x_msg_data);
1411 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1412 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Process_Charges : x_return_status: '
1413 ||nvl(x_return_status,'NULL'),1,'Y');
1414 END IF;
1415
1416 END IF;--x_return_status = FND_API.G_RET_STS_SUCCESS
1417 FND_MSG_PUB.Count_And_Get
1418 ( p_encoded => 'F',
1419 p_count => x_msg_count,
1420 p_data => x_msg_data
1421 );
1422
1423 FOR l IN 1 .. x_msg_count LOOP
1424 x_msg_data := FND_MSG_PUB.GET( p_msg_index => l, p_encoded => 'F');
1425 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1426 aso_debug_pub.add('Messge count and get '||x_msg_data, 1, 'Y');
1427 aso_debug_pub.add('Messge count and get '||x_msg_count, 1, 'Y');
1428 END IF;
1429 END LOOP;
1430
1431 EXCEPTION
1432 WHEN FND_API.G_EXC_ERROR THEN
1433 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1434 aso_debug_pub.add('after inside EXCEPTION return status'||x_return_status, 1, 'Y');
1435 END IF;
1436 ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
1437 P_API_NAME => L_API_NAME
1438 ,P_PKG_NAME => G_PKG_NAME
1439 ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
1440 ,P_PACKAGE_TYPE => ASO_UTILITY_PVT.G_PVT
1441 ,P_SQLCODE => SQLCODE
1442 ,P_SQLERRM => SQLERRM
1443 ,X_MSG_COUNT => X_MSG_COUNT
1444 ,X_MSG_DATA => X_MSG_DATA
1445 ,X_RETURN_STATUS => X_RETURN_STATUS);
1446
1447 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1448 ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
1452 ,P_PACKAGE_TYPE => ASO_UTILITY_PVT.G_PVT
1449 P_API_NAME => L_API_NAME
1450 ,P_PKG_NAME => G_PKG_NAME
1451 ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1453 ,P_SQLCODE => SQLCODE
1454 ,P_SQLERRM => SQLERRM
1455 ,X_MSG_COUNT => X_MSG_COUNT
1456 ,X_MSG_DATA => X_MSG_DATA
1457 ,X_RETURN_STATUS => X_RETURN_STATUS);
1458
1459 WHEN OTHERS THEN
1460 ASO_UTILITY_PVT.HANDLE_EXCEPTIONS(
1461 P_API_NAME => L_API_NAME
1462 ,P_PKG_NAME => G_PKG_NAME
1463 ,P_EXCEPTION_LEVEL => ASO_UTILITY_PVT.G_EXC_OTHERS
1464 ,P_PACKAGE_TYPE => ASO_UTILITY_PVT.G_PVT
1465 ,P_SQLCODE => SQLCODE
1466 ,P_SQLERRM => SQLERRM
1467 ,X_MSG_COUNT => X_MSG_COUNT
1468 ,X_MSG_DATA => X_MSG_DATA
1469 ,X_RETURN_STATUS => X_RETURN_STATUS);
1470
1471 END Price_Quote_Line;
1472
1473
1474 /******************************************************************************
1475 * *
1476 * Code Path with change lines logic *
1477 * *
1478 ******************************************************************************/
1479
1480 PROCEDURE Price_Quote_With_Change_Lines(
1481 P_Api_Version_Number IN NUMBER,
1482 P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE,
1483 P_Commit IN VARCHAR2 := FND_API.G_FALSE,
1484 p_control_rec IN ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE,
1485 p_qte_header_rec IN ASO_QUOTE_PUB.Qte_Header_Rec_Type,
1486 p_hd_shipment_rec IN ASO_QUOTE_PUB.Shipment_Rec_Type
1487 := ASO_QUOTE_PUB.G_Miss_Shipment_Rec,
1488 p_qte_line_tbl IN ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
1489 p_internal_call_flag IN VARCHAR2 := 'N',
1490 x_qte_line_tbl OUT NOCOPY /* file.sql.39 change */ ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
1491 x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
1492 x_msg_count OUT NOCOPY /* file.sql.39 change */ NUMBER,
1493 x_msg_data OUT NOCOPY /* file.sql.39 change */ VARCHAR2)
1494 IS
1495 l_api_name CONSTANT VARCHAR2(30) := 'Price_Quote_With_Change_Lines';
1496 l_api_version_number CONSTANT NUMBER := 1.0;
1497 l_req_control_rec QP_PREQ_GRP.CONTROL_RECORD_TYPE;
1498 l_prc_control_rec ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE;
1499 l_qte_line_id NUMBER;
1500 l_qte_line_dtl_rec ASO_QUOTE_PUB.Qte_Line_Dtl_Rec_Type;
1501 l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
1502 l_return_status VARCHAR2(1);
1503 l_return_status_text VARCHAR2(2000);
1504 l_message_text VARCHAR2(2000);
1505 i BINARY_INTEGER;
1506 j BINARY_INTEGER;
1507 l_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
1508 lx_Qte_Line_Tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
1509 l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
1510 l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
1511 x_pass_line VARCHAR2(10);
1512 l_qte_line_id_tbl JTF_NUMBER_TABLE;
1513 l_qte_adj_id_tbl JTF_NUMBER_TABLE;
1514 l_service_qte_line_id_tbl JTF_NUMBER_TABLE;
1515 l_index_counter Number; -- This is used to keep track of lx_index_counter
1516 lx_index_counter Number;
1517 lx_order_status_rec QP_UTIL_PUB.ORDER_LINES_STATUS_REC_TYPE;
1518 l_adj_id_tbl Index_Link_Tbl_Type;
1519 l_price_index Number;
1520 px_line_index_search_tbl ASO_PRICING_CORE_PVT.Index_Link_Tbl_Type;
1521 l_global_pls_tbl QP_PREQ_GRP.pls_integer_type;
1522 l_global_num_tbl QP_PREQ_GRP.NUMBER_TYPE;
1523
1524 l_changed_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
1525 l_changed_line_index NUMBER;
1526 l_check_line_flag VARCHAR2(1);
1527 l_complete_qte_flag VARCHAR2(1);
1528 l_db_ln_counter NUMBER;
1529 l_processed_flag VARCHAR2(1);
1530
1531 l_pricing_start_time NUMBER;
1532 l_pricing_end_time NUMBER;
1533 l_accum_aso_time NUMBER;
1534 l_accum_qp_time NUMBER;
1535
1536
1537 BEGIN
1538
1539 -- Standard call to check for call compatibility.
1540 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1541 p_api_version_number,
1542 l_api_name,
1543 G_PKG_NAME)
1544 THEN
1545 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1546 END IF;
1547
1548 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1549 l_pricing_start_time := dbms_utility.get_time;
1550 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Start of Price_Quote_With_Change_Lines',1,'Y');
1551 END IF;
1552
1553 x_return_status := FND_API.G_RET_STS_SUCCESS;
1554
1555 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1556 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.request_type:'||p_control_rec.request_type,1,'Y');
1557 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.pricing_event:'||p_control_rec.pricing_event,1,'Y');
1561 l_prc_control_rec := p_control_rec;
1558 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.price_mode:'||p_control_rec.price_mode,1,'Y');
1559 END IF;
1560
1562 l_price_index := 1;
1563 l_complete_qte_flag := 'Y';
1564
1565 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1566 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_prc_control_rec.price_mode:'||l_prc_control_rec.price_mode,1,'Y');
1567 END IF;
1568
1569 --Always process and send the summary line
1570
1571 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1572 aso_debug_pub.add('********************* PROCESSING HEADER STARTS *******************************',1,'Y');
1573 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_internal_call_flag: '||p_internal_call_flag,1,'Y');
1574 END IF;
1575
1576 If p_internal_call_flag = 'N' then
1577 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1578 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Header Level... ',1,'Y');
1579 END IF;
1580 ASO_PRICING_INT.G_HEADER_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
1581 p_qte_header_rec => p_qte_header_rec,
1582 p_shipment_rec => p_hd_shipment_rec);
1583 end If;--If p_internal_call_flag = 'N' then
1584
1585 ASO_PRICING_CORE_PVT.Print_G_Header_Rec;
1586
1587 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1588 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Build_Context - Header Level... ',1,'Y');
1589 l_pricing_end_time := dbms_utility.get_time;
1590 l_accum_aso_time := l_pricing_end_time - l_pricing_start_time;
1591 END IF;
1592
1593 QP_Price_Request_Context.Set_Request_Id;
1594
1595
1596 QP_ATTR_MAPPING_PUB.Build_Contexts (
1597 P_REQUEST_TYPE_CODE => p_control_rec.request_type,
1598 P_PRICING_TYPE_CODE => 'H',
1599 P_line_index => l_price_index,
1600 P_pricing_event => p_control_rec.pricing_event,
1601 p_check_line_flag => 'N',
1602 x_pass_line => x_pass_line);
1603
1604 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1605 l_pricing_start_time := dbms_utility.get_time;
1606 l_accum_qp_time := l_pricing_start_time - l_pricing_end_time;
1607 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
1608 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Header_To_Request...',1,'Y');
1609 END IF;
1610
1611
1612 ASO_PRICING_CORE_PVT.Copy_Header_To_Request(
1613 p_Request_Type => p_control_rec.request_type,
1614 p_price_line_index => l_price_index,
1615 px_index_counter => 1);
1616
1617 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1618 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
1619 END IF;
1620
1621 lx_index_counter:= 1;
1622 ASO_PRICING_CORE_PVT.Append_asked_for(
1623 p_pricing_event => p_control_rec.pricing_event,
1624 p_price_line_index => l_price_index,
1625 p_header_id => p_qte_header_rec.quote_header_id,
1626 px_index_counter => lx_index_counter);
1627
1628 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1629 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:After Append Ask for lx_index_counter:'
1630 ||lx_index_counter,1,'Y');
1631 END IF;
1632 --increment the line index
1633 l_price_index:= l_price_index+1;
1634
1635 -- Header ends here
1636
1637 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1638 aso_debug_pub.add('************************ HEADER LEVEL ENDS *******************************',1,'Y');
1639 aso_debug_pub.add(' ',1,'Y');
1640 aso_debug_pub.add('************************ LINE LEVEL BEGINS *******************************',1,'Y');
1641 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Before call Get_Order_Lines_Status:p_control_rec.pricing_event:'
1642 ||p_control_rec.pricing_event,1,'Y');
1643 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Before call Get_Order_Lines_Status:p_control_rec.request_type:'
1644 ||p_control_rec.request_type,1,'Y');
1645 l_pricing_end_time := dbms_utility.get_time;
1646 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
1647 END IF;
1648
1649 QP_UTIL_PUB.Get_Order_Lines_Status(p_event_code => p_control_rec.pricing_event,
1650 x_order_status_rec => lx_order_status_rec,
1651 p_freight_call_flag => 'Y',
1652 p_request_type_code => p_control_rec.request_type);
1653
1654 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1655 l_pricing_start_time := dbms_utility.get_time;
1656 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
1657
1658 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:lx_order_status_rec.all_lines_flag:'
1659 ||lx_order_status_rec.all_lines_flag,1,'Y');
1660 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:lx_order_status_rec.changed_lines_flag:'
1661 ||lx_order_status_rec.changed_lines_flag,1,'Y');
1662 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:lx_order_status_rec.summary_line_flag:'
1663 ||lx_order_status_rec.summary_line_flag,1,'Y');
1664 END IF;
1665
1666 If lx_order_status_rec.all_lines_flag = 'N' then
1667 l_prc_control_rec.PRG_REPRICE_MODE := 'F';
1668 else
1669 l_prc_control_rec.PRG_REPRICE_MODE := 'A';
1670 end if;
1671
1672 -- Initialize the id tables
1676 if l_qte_adj_id_tbl is not NULL then
1673 if l_qte_line_id_tbl is not NULL then
1674 l_qte_line_id_tbl.delete;
1675 end if;
1677 l_qte_adj_id_tbl.delete;
1678 end if;
1679 if l_service_qte_line_id_tbl is not NULL then
1680 l_service_qte_line_id_tbl.delete;
1681 end if;
1682
1683 --Query all lines and Serviceable lines
1684 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1685 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Pricing_Line_Rows...',1,'Y');
1686 END IF;
1687
1688 l_qte_line_tbl := ASO_UTILITY_PVT.Query_Pricing_Line_Rows(P_Qte_Header_Id => p_qte_header_rec.quote_header_id,
1689 P_change_line_flag => FND_API.G_TRUE);
1690 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1691 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After Query_Lines_lineIdlocation l_qte_line_tbl.count :'
1692 ||NVL(l_qte_line_tbl.count,0),1,'Y');
1693 l_pricing_end_time := dbms_utility.get_time;
1694 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
1695 END IF;
1696
1697 If l_qte_line_tbl.count > 0 Then
1698 --l_qte_line_tbl.count > 0
1699 --Set Check line flag from the given QP matrix
1700 --If the line is not changed and the all_lines_flag is 'Y' then only l_check_line_flag = 'Y'
1701 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1702 l_pricing_start_time := dbms_utility.get_time;
1703 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Count of passed table p_qte_line_tbl.count:'
1704 ||nvl(p_qte_line_tbl.count,0),1,'Y');
1705 END IF;
1706
1707 For i in 1..p_qte_line_tbl.count loop
1708 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1709 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Operation code:'||p_qte_line_tbl(i).operation_code,1,'Y');
1710 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_qte_line_tbl(i).quote_line_id:'
1711 ||p_qte_line_tbl(i).quote_line_id,1,'Y');
1712 END IF;
1713 if p_qte_line_tbl(i).operation_code <> 'DELETE' Then
1714 --changed line
1715 --assign all the Is_line_changed_flag to 'N' for the ones that are created and updated i.e. are the chg lines
1716 --Is Line Changed flag is set to 'N' because this value is what needs to be sent to BuildContext
1717 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1718 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Assign the Is_line_changed_flag to N',1,'Y');
1719 END IF;
1720 l_qte_line_tbl(p_qte_line_tbl(i).quote_line_id).Is_line_changed_flag := 'N';
1721 l_changed_qte_line_tbl(p_qte_line_tbl(i).quote_line_id) := l_qte_line_tbl(p_qte_line_tbl(i).quote_line_id);
1722 end if;
1723 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1724 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(p_qte_line_tbl(i).quote_line_id).Is_line_changed_flag:'
1725 ||l_qte_line_tbl(p_qte_line_tbl(i).quote_line_id).Is_line_changed_flag,1,'Y');
1726 END IF;
1727 end loop;
1728
1729 --If all lines flag is 'N' and changed lines flag 'Y' then in the table just have the changed lines.
1730 If (lx_order_status_rec.all_lines_flag = 'N') AND (lx_order_status_rec.changed_lines_flag = 'Y') then
1731 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1732 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_changed_qte_line_tbl.count:'
1733 ||NVL(l_changed_qte_line_tbl.count,0),1,'Y');
1734 END IF;
1735 l_qte_line_tbl := l_changed_qte_line_tbl;
1736 End If;
1737
1738 i := l_qte_line_tbl.first;
1739 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1740 l_pricing_end_time := dbms_utility.get_time;
1741 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
1742 END IF;
1743
1744 While i is not null Loop
1745 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1746 l_pricing_start_time := dbms_utility.get_time;
1747 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:--------------Start line loop---------------',1,'Y');
1748 END IF;
1749 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1750 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).quote_line_id:'
1751 ||NVL(l_qte_line_tbl(i).quote_line_id,0),1,'Y');
1752 END IF;
1753
1754 l_check_line_flag := l_qte_line_tbl(i).Is_line_changed_flag;
1755 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1756 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_check_line_flag passed to Build Context:'
1757 ||l_check_line_flag,1,'Y');
1758 END IF;
1759
1760 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1761 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Defaulting Hdr Lvl Price List and Currency..',1,'Y');
1762 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.currency_code :'
1763 ||NVL(p_qte_header_rec.currency_code,'NULL'),1,'Y');
1764 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.price_list_id :'
1765 ||NVL(to_char(p_qte_header_rec.price_list_id),'NULL'),1,'Y');
1766 END IF;
1767
1768 -- Pass header_level currency_code to line level by default.
1769 l_qte_line_tbl(i).currency_code := p_qte_header_rec.currency_code;
1770
1771 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1772 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).price_list_id :'
1773 ||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
1774 END IF;
1778 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Free line so not defaulting of the price list',1,'Y');
1775 -- Pass Header level price list by default.
1776 IF l_qte_line_tbl(i).pricing_line_type_indicator = 'F' then
1777 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1779 END IF;
1780 ELSE
1781 /*Default the price list*/
1782 If l_qte_line_tbl(i).price_list_id is null Then
1783 l_qte_line_tbl(i).price_list_id := p_qte_header_rec.price_list_id;
1784 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1785 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Price list id defaulted from Header:'
1786 ||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
1787 END IF;
1788 End if;
1789 END IF;--l_qte_line_tbl(i).pricing_line_type_indicator = 'F'
1790
1791 l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(l_qte_line_tbl(i).quote_line_id);
1792 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1793 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_dtl_tbl.count :'
1794 ||NVL(l_qte_line_dtl_tbl.count,0),1,'Y');
1795 END IF;
1796 IF l_qte_line_dtl_tbl.count = 1 THEN
1797 l_qte_line_dtl_rec := l_qte_line_dtl_tbl(1);
1798 ELSE
1799 l_qte_line_dtl_rec := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_REC ;
1800 END IF;
1801
1802 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1803 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Shipment_Rows..',1,'Y');
1804 END IF;
1805 l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows
1806 (p_qte_header_rec.quote_header_id, l_qte_line_tbl(i).quote_line_id);
1807 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1808 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_shipment_tbl.count :'
1809 ||NVL(l_shipment_tbl.count,0),1,'Y');
1810 END IF;
1811 IF l_shipment_tbl.count = 1 THEN
1812 l_shipment_rec := l_shipment_tbl(1);
1813 else
1814 l_shipment_rec := ASO_QUOTE_PUB.G_Miss_Shipment_rec;
1815 END IF;
1816 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1817 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Line Level...', 1, 'Y');
1818 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:These values will be defaulted from header for pricing qualification only:',1,'Y');
1819 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(i).invoice_to_party_site_id:'
1820 ||NVL(to_char(l_qte_line_tbl(i).invoice_to_party_site_id),'NULL'),1,'Y');
1821 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.ship_to_party_site_id:'
1822 ||NVL(to_char(l_shipment_rec.ship_to_party_site_id),'NULL'),1,'Y');
1823 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(i).agreement_id:'
1824 ||NVL(to_char(l_qte_line_tbl(i).agreement_id),'NULL'),1,'Y');
1825 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.ship_method_code:'
1826 ||NVL(l_shipment_rec.ship_method_code,'NULL'),1,'Y');
1827 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.freight_terms_code:'
1828 ||NVL(l_shipment_rec.freight_terms_code,'NULL'),1,'Y');
1829 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.FREIGHT_CARRIER_CODE:'
1830 ||NVL(l_shipment_rec.FREIGHT_CARRIER_CODE,'NULL'),1,'Y');
1831 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.FOB_CODE:'
1832 ||NVL(l_shipment_rec.FOB_CODE,'NULL'),1,'Y');
1833 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.REQUEST_DATE:'
1834 ||NVL(to_char(l_shipment_rec.REQUEST_DATE),'NULL'),1,'Y');
1835 END IF;
1836
1837 ASO_PRICING_INT.G_LINE_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
1838 p_qte_line_rec => l_qte_line_tbl(i),
1839 p_qte_line_dtl_rec => l_qte_line_dtl_rec,
1840 p_shipment_rec => l_shipment_rec);
1841
1842 ASO_PRICING_CORE_PVT.Print_G_Line_Rec;
1843
1844 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1845 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP Build_Contexts - Line Level...',1,'Y');
1846 l_pricing_end_time := dbms_utility.get_time;
1847 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
1848 END IF;
1849
1850 QP_ATTR_MAPPING_PUB.Build_Contexts (
1851 p_request_type_code => p_control_rec.request_type,
1852 p_line_index => l_price_index,
1853 p_check_line_flag => l_check_line_flag,
1854 p_pricing_event => p_control_rec.pricing_event,
1855 p_pricing_type_code => 'L',
1856 p_price_list_validated_flag => 'N',
1857 x_pass_line => x_pass_line);
1858
1859 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1860 l_pricing_start_time := dbms_utility.get_time;
1861 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
1865 --Note: If the line has been changed, we have to send this line to pricing engine
1862 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
1863 END IF;
1864
1866 --Also, if the line has not been changed but x_pass_line is 'Y' then we have to send this line to PE
1867 If (x_pass_line = 'Y' AND l_check_line_flag = 'Y') OR (l_check_line_flag = 'N') then
1868 --Store this in the processed id table and put it in the PE structure
1869 /*Store all the quote_line_id processed*/
1870 IF l_Qte_Line_id_tbl.EXISTS(1) THEN
1871 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1872 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of l_qte_line_id_tbl.extend...',1,'Y');
1873 END IF;
1874 l_Qte_Line_id_tbl.extend;
1875 l_Qte_Line_id_tbl(l_Qte_Line_id_tbl.count) := l_qte_line_tbl(i).quote_line_id;
1876 ELSE
1877 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1878 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: First quote_line_id in l_qte_line_id_tbl',1,'Y');
1879 END IF;
1880 l_Qte_Line_id_tbl := JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
1881 END IF;
1882
1883 --Store all the service lines processed in the service line id table
1884 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1885 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).service_item_flag: '
1886 ||l_qte_line_tbl(i).service_item_flag,1,'Y');
1887 END IF;
1888 If l_qte_line_tbl(i).service_item_flag = 'Y' then
1889 if l_service_qte_line_id_tbl.EXISTS(1) then
1890 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1891 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of l_service_qte_line_id_tbl.extend...',1,'Y');
1892 END IF;
1893 l_service_qte_line_id_tbl.extend;
1894 l_service_qte_line_id_tbl(l_service_qte_line_id_tbl.count) := l_qte_line_tbl(i).quote_line_id;
1895 else
1896 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1897 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: First quote_line_id in l_service_qte_line_id_tbl',1,'Y');
1898 END IF;
1899 l_service_qte_line_id_tbl:= JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
1900 end if;
1901 end if;-- l_qte_line_tbl(i).service_item_flag = 'Y'
1902
1903 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1904 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Line_To_Request...',1,'Y');
1905 END IF;
1906 ASO_PRICING_CORE_PVT.Copy_Line_To_Request(
1907 p_Request_Type => p_control_rec.request_type,
1908 p_price_line_index => l_price_index,
1909 px_index_counter => l_price_index);
1910
1911 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1912 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
1913 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Before Append Ask for lx_index_counter:'
1914 ||lx_index_counter,1,'Y');
1915 END IF;
1916 l_index_counter := lx_index_counter;
1917 ASO_PRICING_CORE_PVT.Append_asked_for(
1918 p_pricing_event => p_control_rec.pricing_event,
1919 p_price_line_index => l_price_index,
1920 p_header_id => p_qte_header_rec.quote_header_id,
1921 p_line_id => l_qte_line_tbl(i).quote_line_id,
1922 px_index_counter => lx_index_counter);
1923 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1924 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:After Append Ask for lx_index_counter:'
1925 ||lx_index_counter,1,'Y');
1926 END IF;
1927 If lx_index_counter = 0 then
1928 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1929 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Assigning l_index_counter back to lx_index_counter:'
1930 ||l_index_counter,1,'Y');
1931 END IF;
1932 lx_index_counter := l_index_counter;
1933 end if;
1934
1935 px_line_index_search_tbl(l_qte_line_tbl(i).quote_line_id) := l_price_index;--Used for modify globals
1936 --end of building one line
1937 i:= l_qte_line_tbl.next(i);
1938 l_price_index:= l_price_index+1;
1939 Else
1940 -- x_pass_line = 'N' OR l_check_line_flag = 'Y'
1941 l_complete_qte_flag := 'N';
1942 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1943 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:This line is not passed to PE:'
1944 ||l_qte_line_tbl(i).quote_line_id,1,'Y');
1945 END IF;
1946 i:= l_qte_line_tbl.next(i);
1947 end If;--x_pass_line = 'Y' AND l_check_line_flag = 'Y'
1948 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1949 l_pricing_end_time := dbms_utility.get_time;
1950 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
1951 END IF;
1952
1953 End Loop;--End of While loop
1954
1955 End If; --l_qte_line_tbl.count > 0
1956
1957
1958 --- Need to track the changed lines counter.....
1962 --Check no of lines in the db and the (l_price_index - 2), if <> then l_complete_qte_flag is 'N'
1959 If (lx_order_status_rec.all_lines_flag = 'N') AND (lx_order_status_rec.changed_lines_flag = 'Y') then
1960 --If l_price_index = 2 then there were no changed lines as all the records
1961 --in p_qte_line_tbl were deletes.
1963
1964 SELECT count(rowid)
1965 INTO l_db_ln_counter
1966 FROM ASO_QUOTE_LINES_ALL
1967 WHERE quote_header_id = p_qte_header_rec.quote_header_id;
1968 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1969 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_db_ln_counter:'||l_db_ln_counter,1,'Y');
1970 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_price_index:'||l_price_index,1,'Y');
1971 END IF;
1972 If (l_db_ln_counter <> (l_price_index - 2)) Then
1973 l_complete_qte_flag := 'N';
1974 end if;
1975 elsif (lx_order_status_rec.all_lines_flag = 'N') AND (lx_order_status_rec.changed_lines_flag = 'N') then
1976 --Changed Lines flag = 'N'
1977 --then pass only header to Price_Request
1978 --Since we are only sending the summary line to pricing the quote is not completely priced
1979 l_complete_qte_flag := 'N';
1980
1981 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1982 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:All line flag is N and changed line flag is N',1,'Y');
1983 END IF;
1984
1985 End If;
1986
1987 -- Call to Price Adjustments, Adjustments Relationships, and Service Relationships
1988 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1989 l_pricing_start_time := dbms_utility.get_time;
1990 END IF;
1991 IF l_Qte_Line_id_tbl.EXISTS(1) THEN
1992 -- Call to Price Adjustment Relationships and Service Relationships
1993 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
1994 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Price_Adjustments...',1,'Y');
1995 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_id_tbl.count :'
1996 ||NVL(l_qte_line_id_tbl.count,0),1,'Y');
1997 END IF;
1998 ASO_PRICING_CORE_PVT.Query_Price_Adjustments
1999 (p_quote_header_id => p_qte_header_rec.quote_header_id,
2000 p_qte_line_id_tbl => l_qte_line_id_tbl,
2001 x_adj_id_tbl => l_qte_adj_id_tbl);
2002
2003 If l_qte_adj_id_tbl.exists(1) OR l_service_qte_line_id_tbl.exists(1) Then
2004 -- Adjustment and line Relationships and services...
2005 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2006 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Adj_rltship_Bulk...',1,'Y');
2007 If l_qte_adj_id_tbl is not null then
2008 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_adj_id_tbl.count :'
2009 ||NVL(l_qte_adj_id_tbl.count,0),1,'Y');
2010 end if;
2011 If l_service_qte_line_id_tbl is not null then
2012 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_service_qte_line_id_tbl.count :'
2013 ||NVL(l_service_qte_line_id_tbl.count,0),1,'Y');
2014 end if;
2015 END IF;
2016 ASO_PRICING_CORE_PVT.Query_relationships
2017 (p_qte_adj_id_tbl => l_qte_adj_id_tbl,
2018 p_service_qte_line_id_tbl => l_service_qte_line_id_tbl);
2019 else
2020 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2021 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: There are no service lines or manual related Adjustments',1,'Y');
2022 END IF;
2023 end if;--If l_qte_adj_id_tbl.exists(1) OR l_service_qte_line_id_tbl.exists(1)
2024 ELSIF (lx_order_status_rec.summary_line_flag = 'Y') THEN
2025 --Just send the header level manual adjustments
2026 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2027 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Price_Adj_Header...',1,'Y');
2028 END IF;
2029 ASO_PRICING_CORE_PVT.Query_Price_Adj_Header
2030 (p_quote_header_id => p_qte_header_rec.quote_header_id);
2031
2032 END IF; -- l_Qte_Line_id_tbl.EXISTS(1) check.
2033
2034 -- Start of Deleting of attributes logic
2035
2036 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2037 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin bulk collect adj ids that are not passed to PE', 1, 'Y');
2038 END IF;
2039
2040 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2041 If l_qte_adj_id_tbl is not null then
2042 For i in 1..l_qte_adj_id_tbl.count loop
2043 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Querying for the following adjustment ids:',1,'Y');
2044 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_adj_id_tbl(i):'||l_qte_adj_id_tbl(i),1,'Y');
2045 end loop;
2046 end if;
2047 END IF;
2048
2049 If l_qte_adj_id_tbl.EXISTS(1) then
2050 SELECT adj.PRICE_ADJUSTMENT_ID
2051 BULK COLLECT INTO
2052 l_adj_id_tbl
2053 FROM ASO_PRICE_ADJUSTMENTS adj
2054 WHERE adj.quote_header_id = p_qte_header_rec.quote_header_id
2055 AND adj.price_adjustment_id NOT IN (SELECT column_value
2056 FROM TABLE (CAST(l_qte_adj_id_tbl AS JTF_NUMBER_TABLE)) passed_adj);
2057
2058 IF aso_debug_pub.g_debug_flag = 'Y' THEN
2059 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: No. of adjustment lines selected is sql%rowcount(Both hdr and lines): '
2060 ||sql%rowcount,1,'Y');
2061 END IF;
2062 Elsif (lx_order_status_rec.summary_line_flag = 'Y') Then
2063 SELECT adj.PRICE_ADJUSTMENT_ID
2064 BULK COLLECT INTO
2065 l_adj_id_tbl
2066 FROM ASO_PRICE_ADJUSTMENTS adj
2067 WHERE adj.quote_header_id = p_qte_header_rec.quote_header_id
2068 AND adj.quote_line_id IS NULL;
2072 END IF;
2069 IF aso_debug_pub.g_debug_flag = 'Y' THEN
2070 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: No. of adjustment lines selected is sql%rowcount(Header): '
2071 ||sql%rowcount,1,'Y');
2073 END If;--l_qte_adj_id_tbl.EXISTS(1)
2074
2075 IF aso_debug_pub.g_debug_flag = 'Y' THEN
2076
2077 if l_adj_id_tbl.count > 0 then
2078
2079 for k in l_adj_id_tbl.FIRST..l_adj_id_tbl.LAST loop
2080 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_adj_id_tbl('||k||'): ' || l_adj_id_tbl(k),1,'Y');
2081 end loop;
2082
2083 end if;
2084
2085 END IF;
2086
2087 if l_adj_id_tbl.count > 0 then
2088 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2089 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_ATTRIBS', 1, 'Y');
2090 END IF;
2091 FORALL i IN l_adj_id_tbl.FIRST..l_adj_id_tbl.LAST
2092 DELETE FROM ASO_PRICE_ADJ_ATTRIBS
2093 WHERE PRICE_ADJUSTMENT_ID = l_adj_id_tbl(i);
2094
2095 IF aso_debug_pub.g_debug_flag = 'Y' THEN
2096 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:No of adjustment attribute lines deleted is sql%rowcount: '
2097 ||sql%rowcount,1,'Y');
2098 END IF;
2099
2100 end if;
2101
2102 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2103 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_complete_qte_flag before delete:'||l_complete_qte_flag,1,'Y');
2104 END IF;
2105
2106 -- End Deleting of attributes
2107
2108 if l_complete_qte_flag = 'Y' then
2109 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2110 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS', 1, 'Y');
2111 END IF;
2112 DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS
2113 WHERE QUOTE_LINE_ID in (SELECT quote_line_id
2114 FROM ASO_PRICE_ADJUSTMENTS
2115 WHERE quote_header_id = p_qte_header_rec.quote_header_id
2116 AND quote_line_id IS NOT NULL);
2117
2118 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2119 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Rltd adj Lines deleted '||sql%ROWCOUNT,1,'Y');
2120 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJUSTMENTS', 1, 'Y');
2121 END IF;
2122
2123 DELETE FROM ASO_PRICE_ADJUSTMENTS
2124 WHERE quote_header_id = p_qte_header_rec.quote_header_id;
2125 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2126 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adjustment Lines deleted '||sql%ROWCOUNT,1,'Y');
2127 END IF;
2128
2129 else
2130 --l_complete_qte_flag is 'N'
2131
2132 IF l_Qte_Line_id_tbl.EXISTS(1) THEN
2133 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2134 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS', 1, 'Y');
2135 For i in 1..l_qte_line_id_tbl.count loop
2136 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE for l_qte_line_id_tbl(i):'
2137 ||l_qte_line_id_tbl(i), 1, 'Y');
2138 end loop;
2139 END IF;
2140
2141 DELETE FROM ASO_PRICE_ADJ_RELATIONSHIPS
2142 WHERE quote_line_id IN (SELECT column_value
2143 FROM TABLE (CAST(l_qte_line_id_tbl AS JTF_NUMBER_TABLE)));
2144
2145 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2146 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Rltd adj Lines deleted '||sql%ROWCOUNT,1,'Y');
2147 END IF;
2148
2149 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2150 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Begin DELETE FROM ASO_PRICE_ADJUSTMENTS', 1, 'Y');
2151 END IF;
2152 DELETE FROM ASO_PRICE_ADJUSTMENTS
2153 WHERE quote_line_id IN (SELECT column_value
2154 FROM TABLE (CAST(l_qte_line_id_tbl AS JTF_NUMBER_TABLE)))
2155 AND quote_header_id = p_qte_header_rec.quote_header_id;
2156 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2157 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adjustment Lines deleted '||sql%ROWCOUNT,1,'Y');
2158 END IF;
2159
2160 DELETE FROM ASO_PRICE_ADJUSTMENTS
2161 WHERE quote_header_id = p_qte_header_rec.quote_header_id
2162 AND quote_line_id is NULL;
2163
2164 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2165 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Header Adjustment deleted '||sql%ROWCOUNT,1,'Y');
2166 END IF;
2167 ELSIF (lx_order_status_rec.summary_line_flag = 'Y') Then
2168 DELETE FROM ASO_PRICE_ADJUSTMENTS
2169 WHERE quote_header_id = p_qte_header_rec.quote_header_id
2170 AND quote_line_id is NULL;
2171
2172 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2173 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Header Adjustment deleted '||sql%ROWCOUNT,1,'Y');
2174 END IF;
2175
2176 END IF;--l_Qte_Line_id_tbl.EXISTS(1)
2177
2178
2179 end if;--l_complete_qte_flag = 'Y'
2180
2181
2182 If (l_Qte_Line_id_tbl.EXISTS(1))
2183 OR (p_control_rec.pricing_event = 'ORDER')
2184 OR (lx_order_status_rec.summary_line_flag = 'Y') then
2185 --Condition was placed because engine call was not necessary if the event is price and there are no lines
2186
2187 --Need to modify the global index table of pls integer types
2188 l_global_pls_tbl := ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL;
2189 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2190 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Modifying G_LDET_LINE_INDEX_TBL',1,'Y');
2191 END IF;
2195 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL;
2192 ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_PlsIndex_Table(
2193 p_global_tbl => l_global_pls_tbl,
2194 p_search_tbl => px_line_index_search_tbl);
2196 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2197 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Modifying G_RLTD_LINE_INDEX_TBL',1,'Y');
2198 END IF;
2199 ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
2200 p_global_tbl => l_global_num_tbl,
2201 p_search_tbl => px_line_index_search_tbl);
2202 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL;
2203 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2204 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Modifying G_RLTD_RELATED_LINE_IND_TBL',1,'Y');
2205 END IF;
2206 ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
2207 p_global_tbl => l_global_num_tbl,
2208 p_search_tbl => px_line_index_search_tbl);
2209
2210 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2211 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Populate_QP_Temp_tables...',1,'Y');
2212 l_pricing_end_time := dbms_utility.get_time;
2213 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2214 END IF;
2215
2216 ASO_PRICING_CORE_PVT.populate_qp_temp_tables;
2217
2218 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2219 l_pricing_start_time := dbms_utility.get_time;
2220 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
2221 END IF;
2222 -- Set the control rec for QP
2223
2224 l_req_control_rec.pricing_event := p_control_rec.pricing_event;
2225 l_req_control_rec.calculate_flag := p_control_rec.calculate_flag;
2226 l_req_control_rec.simulation_flag := p_control_rec.simulation_flag;
2227 l_req_control_rec.TEMP_TABLE_INSERT_FLAG := 'N'; ---- Modified
2228 l_req_control_rec.source_order_amount_flag := 'Y';
2229 l_req_control_rec.GSA_CHECK_FLAG := 'Y';
2230 l_req_control_rec.GSA_DUP_CHECK_FLAG := 'Y';
2231 l_req_control_rec.REQUEST_TYPE_CODE := p_control_rec.request_type;
2232 l_req_control_rec.rounding_flag := 'Q';
2233 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2234 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_req_control_rec.calculate_flag:'||l_req_control_rec.calculate_flag,1,'Y');
2235 END IF;
2236
2237 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2238 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
2239 l_pricing_end_time := dbms_utility.get_time;
2240 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2241 END IF;
2242
2243 /* Change for populating QP_PREQ_GRP.CONTROL_RECORD_TYPE.ORG_ID Yogeshwar (MOAC) */
2244
2245 l_req_control_rec.ORG_ID := p_qte_header_rec.org_id;
2246
2247 /* End of Change (MOAC) */
2248
2249
2250 QP_PREQ_PUB.PRICE_REQUEST
2251 (p_control_rec =>l_req_control_rec
2252 ,x_return_status =>l_return_status
2253 ,x_return_status_Text =>l_return_status_Text
2254 );
2255 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2256 x_return_status := l_return_status;
2257 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2258 FND_MESSAGE.Set_Name('ASO', 'ASO_OM_ERROR');
2259 FND_MESSAGE.Set_Token('MSG_TXT', substr(l_return_status_text, 1,255), FALSE);
2260 FND_MSG_PUB.ADD;
2261 END IF;
2262 RAISE FND_API.G_EXC_ERROR;
2263 END IF;
2264
2265 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2266 l_pricing_start_time := dbms_utility.get_time;
2267 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
2268 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: End of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
2269 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status:'
2270 ||l_return_status, 1, 'Y');
2271 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status_text '
2272 ||l_return_status_text,1,'Y');
2273 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Post_Price_Request...',1,'Y');
2274 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_complete_qte_flag:'||l_complete_qte_flag,1,'Y');
2275 END IF;
2276 /*Insert all the applied adjustments and the nonapplied manual adjustments*/
2277 ASO_PRICING_CORE_PVT.Copy_Price_To_Quote(
2278 P_Api_Version_Number => 1.0,
2279 P_Init_Msg_List => FND_API.G_FALSE,
2280 P_Commit => FND_API.G_FALSE,
2281 p_control_rec => l_prc_control_rec,
2282 p_qte_header_rec => p_qte_header_rec,
2283 P_Insert_Type => 'HDR',
2284 x_return_status => x_return_status,
2285 x_msg_count => x_msg_count,
2286 x_msg_data => x_msg_data);
2287 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2288 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Copy_Price_To_Quote : x_return_status: '
2289 ||nvl(x_return_status,'NULL'),1,'Y');
2290 END IF;
2291
2292 If p_internal_call_flag = 'N' then
2293 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
2294 ASO_PRICING_CORE_PVT.Process_PRG(
2295 P_Api_Version_Number => 1.0,
2299 p_qte_header_rec => p_qte_header_rec,
2296 P_Init_Msg_List => FND_API.G_FALSE,
2297 P_Commit => FND_API.G_FALSE,
2298 p_control_rec => l_prc_control_rec,
2300 x_qte_line_tbl => x_qte_line_tbl,
2301 x_return_status => x_return_status,
2302 x_msg_count => x_msg_count,
2303 x_msg_data => x_msg_data);
2304
2305 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2306 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Process_PRG : x_return_status: '
2307 ||nvl(x_return_status,'NULL'),1,'Y');
2308 END IF;
2309
2310 END IF;--x_return_status = FND_API.G_RET_STS_SUCCESS
2311
2312 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
2313 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2314 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After Process_PRG : x_qte_line_tbl.count: '
2315 ||x_qte_line_tbl.count,1,'Y');
2316 END IF;
2317
2318 ASO_PRICING_CORE_PVT.Process_Charges(
2319 P_Api_Version_Number => 1.0,
2320 P_Init_Msg_List => FND_API.G_FALSE,
2321 P_Commit => FND_API.G_FALSE,
2322 p_control_rec => l_prc_control_rec,
2323 p_qte_header_rec => p_qte_header_rec,
2324 x_return_status => x_return_status,
2325 x_msg_count => x_msg_count,
2326 x_msg_data => x_msg_data);
2327 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2328 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Process_Charges : x_return_status: '
2329 ||nvl(x_return_status,'NULL'),1,'Y');
2330 END IF;
2331
2332 END IF;--x_return_status = FND_API.G_RET_STS_SUCCESS
2333 End If;--p_internal_call_flag = 'N'??????????Is this okay????
2334
2335 -- After the code review according to SPGOPAL if the summary line flag is 'N' then we don't need to make
2336 -- the calculate flag. Also we cannot compare the percentage of the header level since in future if there
2337 -- is a bucketing implementation for the header level modifier ASO does not have a way to compare the percentages.
2338 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2339 l_pricing_end_time := dbms_utility.get_time;
2340 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2341 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:**********Timing Before Calculate Call****************',1,'Y');
2342
2343 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Total time taken (in secs) in Price Entire Quote(Besides Pricing):'||l_accum_aso_time/100,1,'Y');
2344 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Total time taken (in secs) in Pricing+BuildContext:'||l_accum_qp_time/100,1,'Y');
2345 END IF;
2346
2347 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
2348 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2349 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Before Calling Calculate Call l_complete_qte_flag:'
2350 ||l_complete_qte_flag,1,'Y');
2351 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Before Calling Calculate Call lx_order_status_rec.summary_line_flag:'
2352 ||lx_order_status_rec.summary_line_flag,1,'Y');
2353 END IF;
2354 If (l_complete_qte_flag = 'N') then
2355 If (lx_order_status_rec.summary_line_flag <> 'N') then
2356 --If the l_processed_flag value is 'C' reprice the whole quote with all the lines with calculate only option
2357 --Since the processed flag is not coded for Order Capture, Current work around is such that Order Capture should
2358 --always make the second call except in the above two conditions of complete qte flag and summary line flag.
2359
2360 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2361 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Price Request should be called again to get header level adj',1,'Y');
2362 END IF;
2363
2364 l_prc_control_rec.calculate_flag := QP_PREQ_GRP.G_CALCULATE_ONLY;
2365
2366 --Call Calculate only call
2367
2368 Price_Quote_Calculate_Call(
2369 P_Api_Version_Number => P_Api_Version_Number,
2370 P_Init_Msg_List => FND_API.G_FALSE,
2371 P_Commit => FND_API.G_FALSE,
2372 p_control_rec => l_prc_control_rec,
2373 p_qte_header_rec => p_qte_header_rec,
2374 p_delta_line_id_tbl => l_qte_line_id_tbl,
2375 x_qte_line_tbl => lx_Qte_Line_Tbl,
2376 x_return_status => x_return_status,
2377 x_msg_count => x_msg_count,
2378 x_msg_data => x_msg_data);
2379
2380 End If; -- If (lx_order_status_rec.summary_line_flag <> 'N')
2381
2382 End If;-- If l_complete_qte_flag = 'N'
2383
2384
2385 END IF;-- x_return_status = FND_API.G_RET_STS_SUCCESS
2386
2387
2388 --End If;--p_internal_call_flag = 'N'
2389 End if;-- (l_Qte_Line_id_tbl.EXISTS(1)) OR (p_control_rec.pricing_event = 'ORDER')
2390
2391
2392 FND_MSG_PUB.Count_And_Get
2393 ( p_encoded => 'F',
2394 p_count => x_msg_count,
2395 p_data => x_msg_data
2396 );
2397
2398 FOR l IN 1 .. x_msg_count LOOP
2399 x_msg_data := FND_MSG_PUB.GET( p_msg_index => l, p_encoded => 'F');
2400 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2401 aso_debug_pub.add('Messge count and get '||x_msg_data, 1, 'Y');
2405
2402 aso_debug_pub.add('Messge count and get '||x_msg_count, 1, 'Y');
2403 END IF;
2404 END LOOP;
2406 END Price_Quote_With_Change_Lines;
2407
2408 PROCEDURE Price_Quote_Calculate_Call(
2409 P_Api_Version_Number IN NUMBER,
2410 P_Init_Msg_List IN VARCHAR2 := FND_API.G_FALSE,
2411 P_Commit IN VARCHAR2 := FND_API.G_FALSE,
2412 p_control_rec IN ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE,
2413 p_qte_header_rec IN ASO_QUOTE_PUB.Qte_Header_Rec_Type,
2414 p_delta_line_id_tbl IN JTF_NUMBER_TABLE,
2415 x_qte_line_tbl OUT NOCOPY /* file.sql.39 change */ ASO_QUOTE_PUB.Qte_Line_Tbl_Type,
2416 x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
2417 x_msg_count OUT NOCOPY /* file.sql.39 change */ NUMBER,
2418 x_msg_data OUT NOCOPY /* file.sql.39 change */ VARCHAR2)
2419 IS
2420 l_api_name CONSTANT VARCHAR2(30) := 'Price_Quote_Calculate_Call';
2421 l_api_version_number CONSTANT NUMBER := 1.0;
2422 l_price_index NUMBER;
2423 l_req_control_rec QP_PREQ_GRP.CONTROL_RECORD_TYPE;
2424 l_prc_control_rec ASO_PRICING_INT.PRICING_CONTROL_REC_TYPE;
2425 x_pass_line VARCHAR2(10);
2426 l_qte_line_tbl ASO_QUOTE_PUB.Qte_Line_Tbl_Type;
2427 l_qte_line_id NUMBER;
2428 l_qte_line_dtl_rec ASO_QUOTE_PUB.Qte_Line_Dtl_Rec_Type;
2429 l_qte_line_dtl_tbl ASO_QUOTE_PUB.Qte_Line_Dtl_Tbl_Type;
2430 l_shipment_tbl ASO_QUOTE_PUB.Shipment_Tbl_Type;
2431 l_shipment_rec ASO_QUOTE_PUB.Shipment_Rec_Type;
2432 lx_index_counter Number;
2433 l_index_counter Number;
2434 l_return_status_text VARCHAR2(2000);
2435 l_message_text VARCHAR2(2000);
2436 l_return_status VARCHAR2(1);
2437
2438 l_service_qte_line_id_tbl JTF_NUMBER_TABLE;
2439 l_qte_line_id_tbl JTF_NUMBER_TABLE;
2440 l_qte_adj_id_tbl JTF_NUMBER_TABLE;
2441 px_line_index_search_tbl ASO_PRICING_CORE_PVT.Index_Link_Tbl_Type;
2442 l_global_pls_tbl QP_PREQ_GRP.pls_integer_type;
2443 l_global_num_tbl QP_PREQ_GRP.NUMBER_TYPE;
2444
2445 l_pricing_start_time NUMBER;
2446 l_pricing_end_time NUMBER;
2447 l_accum_aso_time NUMBER;
2448 l_accum_qp_time NUMBER;
2449
2450 BEGIN
2451 -- Standard call to check for call compatibility.
2452 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2453 p_api_version_number,
2454 l_api_name,
2455 G_PKG_NAME)
2456 THEN
2457 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2458 END IF;
2459
2460 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2461 l_pricing_start_time := dbms_utility.get_time;
2462 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Start of Price_Quote_Calculate_Call',1,'Y');
2463 END IF;
2464
2465 x_return_status := FND_API.G_RET_STS_SUCCESS;
2466
2467 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2468 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.request_type:'||p_control_rec.request_type,1,'Y');
2469 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.pricing_event:'||p_control_rec.pricing_event,1,'Y');
2470 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_control_rec.calculate_flag:'||p_control_rec.calculate_flag,1,'Y');
2471 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_qte_header_rec.quote_header_id:'||p_qte_header_rec.quote_header_id,1,'Y');
2472 IF p_delta_line_id_tbl is not null THEN
2473 for i in 1..p_delta_line_id_tbl.count loop
2474 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:p_delta_line_id_tbl(i):'||p_delta_line_id_tbl(i), 1, 'Y');
2475 end loop;
2476 END IF;
2477 END IF;
2478 l_prc_control_rec := p_control_rec;
2479 l_price_index := 1;
2480
2481 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2482 aso_debug_pub.add('********************* PROCESSING HEADER STARTS *******************************',1,'Y');
2483 END IF;
2484 ASO_PRICING_CORE_PVT.Print_G_Header_Rec;
2485 /*Initialize the global tables*/
2486 ASO_PRICING_CORE_PVT.Initialize_Global_Tables;
2487
2488 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2489 l_pricing_end_time := dbms_utility.get_time;
2490 l_accum_aso_time := l_pricing_end_time - l_pricing_start_time;
2491 END IF;
2492
2493 QP_Price_Request_Context.Set_Request_Id;
2494
2495 QP_ATTR_MAPPING_PUB.Build_Contexts (
2496 P_REQUEST_TYPE_CODE => p_control_rec.request_type,
2497 P_PRICING_TYPE_CODE => 'H',
2498 P_line_index => l_price_index,
2499 P_pricing_event => p_control_rec.pricing_event,
2500 p_check_line_flag => 'N',
2501 x_pass_line => x_pass_line);
2502
2503 l_price_index := 1;
2504 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2505 l_pricing_start_time := dbms_utility.get_time;
2506 l_accum_qp_time := l_pricing_start_time - l_pricing_end_time;
2507 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
2508 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Header_To_Request...',1,'Y');
2509 END IF;
2510 ASO_PRICING_CORE_PVT.Copy_Header_To_Request(
2511 p_Request_Type => p_control_rec.request_type,
2512 p_price_line_index => l_price_index,
2516 -- Do we need to do append ask for in the calculate only call????
2513 px_index_counter => 1);
2514
2515
2517 --increment the line index
2518 l_price_index:= l_price_index+1;
2519
2520 -- Header ends here
2521
2522 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2523 aso_debug_pub.add('************************ HEADER LEVEL ENDS *******************************',1,'Y');
2524 aso_debug_pub.add(' ',1,'Y');
2525 aso_debug_pub.add('************************ LINE LEVEL BEGINS *******************************',1,'Y');
2526 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of ASO UTL PVT Query_Pricing_Line_Rows...',1,'Y');
2527 END IF;
2528
2529 l_qte_line_tbl := ASO_UTILITY_PVT.Query_Pricing_Line_Rows(p_qte_header_rec.quote_header_id);
2530 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2531 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl.count :'||NVL(l_qte_line_tbl.count,0),1,'Y');
2532 l_pricing_end_time := dbms_utility.get_time;
2533 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2534 END IF;
2535
2536 If l_qte_line_tbl.count = 0 Then
2537 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2538 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:No lines in the database',1,'Y');
2539 END IF;
2540
2541 Else
2542 -- Line Count <> 0.
2543 For i in 1..l_qte_line_tbl.count Loop
2544
2545 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2546 l_pricing_start_time := dbms_utility.get_time;
2547 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Line_Dtl_Rows...',1,'Y');
2548 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).quote_line_id:'
2549 ||NVL(l_qte_line_tbl(i).quote_line_id,0),1,'Y');
2550 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).pricing_line_type_indicator:'
2551 ||l_qte_line_tbl(i).pricing_line_type_indicator,1,'Y');
2552 END IF;
2553
2554 l_qte_line_id := l_qte_line_tbl(i).quote_line_id;
2555 l_qte_line_dtl_tbl := ASO_UTILITY_PVT.Query_Line_Dtl_Rows(l_qte_line_id);
2556
2557 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2558 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Defaulting Hdr Lvl Price List and Currency..',1,'Y');
2559 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.currency_code :'
2560 ||NVL(p_qte_header_rec.currency_code,'NULL'),1,'Y');
2561 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: p_qte_header_rec.price_list_id :'
2562 ||NVL(to_char(p_qte_header_rec.price_list_id),'NULL'),1,'Y');
2563 END IF;
2564 -- Pass header_level currency_code to line level by default.
2565 l_qte_line_tbl(i).currency_code := p_qte_header_rec.currency_code;
2566
2567 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2568 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_tbl(i).price_list_id :'
2569 ||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
2570 END IF;
2571 -- Pass Header level price list by default.
2572 IF l_qte_line_tbl(i).pricing_line_type_indicator = 'F' then
2573 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2574 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Free line so not defaulting of the price list',1,'Y');
2575 END IF;
2576 ELSE
2577 /*Default the price list*/
2578 If l_qte_line_tbl(i).price_list_id is null Then
2579 l_qte_line_tbl(i).price_list_id := p_qte_header_rec.price_list_id;
2580 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2581 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Price list id defaulted from Header:'
2582 ||NVL(to_char(l_qte_line_tbl(i).price_list_id),'NULL'),1,'Y');
2583 END IF;
2584 End if;
2585 END IF;--l_qte_line_tbl(i).pricing_line_type_indicator = 'F'
2586
2587 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2588 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_qte_line_dtl_tbl.count :'
2589 ||NVL(l_qte_line_dtl_tbl.count,0),1,'Y');
2590 END IF;
2591 IF l_qte_line_dtl_tbl.count = 1 THEN
2592 l_qte_line_dtl_rec := l_qte_line_dtl_tbl(1);
2593 ELSE
2594 l_qte_line_dtl_rec := ASO_QUOTE_PUB.G_Miss_Qte_Line_Dtl_REC ;
2595 END IF;
2596
2597 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2598 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Shipment_Rows..',1,'Y');
2599 END IF;
2600 l_shipment_tbl := ASO_UTILITY_PVT.Query_Shipment_Rows
2601 (p_qte_header_rec.quote_header_id, l_QTE_LINE_ID);
2602 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2603 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: l_shipment_tbl.count :'
2604 ||NVL(l_shipment_tbl.count,0),1,'Y');
2605 END IF;
2606 IF l_shipment_tbl.count = 1 THEN
2607 l_shipment_rec := l_shipment_tbl(1);
2608 else
2609 l_shipment_rec := ASO_QUOTE_PUB.G_Miss_Shipment_rec;
2610 END IF;
2611
2612
2613 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2614 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Set_Global_Rec - Line Level...', 1, 'Y');
2615 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:These values will be defaulted from header for pricing qualification only:',1,'Y');
2616 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(i).invoice_to_party_site_id:'
2617 ||NVL(to_char(l_qte_line_tbl(i).invoice_to_party_site_id),'NULL'),1,'Y');
2618 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.ship_to_party_site_id:'
2619 ||NVL(to_char(l_shipment_rec.ship_to_party_site_id),'NULL'),1,'Y');
2620 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_qte_line_tbl(i).agreement_id:'
2621 ||NVL(to_char(l_qte_line_tbl(i).agreement_id),'NULL'),1,'Y');
2622 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.ship_method_code:'
2623 ||NVL(l_shipment_rec.ship_method_code,'NULL'),1,'Y');
2624 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.freight_terms_code:'
2625 ||NVL(l_shipment_rec.freight_terms_code,'NULL'),1,'Y');
2626 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.FREIGHT_CARRIER_CODE:'
2627 ||NVL(l_shipment_rec.FREIGHT_CARRIER_CODE,'NULL'),1,'Y');
2628 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.FOB_CODE:'
2629 ||NVL(l_shipment_rec.FOB_CODE,'NULL'),1,'Y');
2630 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:l_shipment_rec.REQUEST_DATE:'
2631 ||NVL(to_char(l_shipment_rec.REQUEST_DATE),'NULL'),1,'Y');
2632 END IF;
2633
2634 ASO_PRICING_INT.G_LINE_REC := ASO_PRICING_CORE_PVT.Set_Global_Rec (
2635 p_qte_line_rec => l_qte_line_tbl(i),
2636 p_qte_line_dtl_rec => l_qte_line_dtl_rec,
2637 p_shipment_rec => l_shipment_rec);
2638
2639 ASO_PRICING_CORE_PVT.Print_G_Line_Rec;
2640
2641 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2642 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP Build_Contexts - Line Level...',1,'Y');
2643 l_pricing_end_time := dbms_utility.get_time;
2644 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2645 END IF;
2646
2647 QP_ATTR_MAPPING_PUB.Build_Contexts (
2648 p_request_type_code => p_control_rec.request_type,
2649 p_line_index => l_price_index,
2650 p_check_line_flag => 'N',
2651 p_pricing_event => p_control_rec.pricing_event,
2652 p_pricing_type_code => 'L',
2653 p_price_list_validated_flag => 'N',
2654 x_pass_line => x_pass_line);
2655 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2656 l_pricing_start_time := dbms_utility.get_time;
2657 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
2658 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: x_pass_line: '||nvl(x_pass_line,'null'),1,'Y');
2659 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Copy_Line_To_Request...',1,'Y');
2660 END IF;
2661
2662 ASO_PRICING_CORE_PVT.Copy_Line_To_Request(
2663 p_Request_Type => p_control_rec.request_type,
2664 p_price_line_index => l_price_index,
2665 px_index_counter => i+1);
2666
2667
2668 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2672 END IF;
2669 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Append_asked_for...',1,'Y');
2670 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Before Append Ask for lx_index_counter:'
2671 ||lx_index_counter,1,'Y');
2673 l_index_counter := lx_index_counter;
2674
2675 --Do we need to call append ask for at line level
2676
2677 /*Store the line_id of all the service_lines*/
2678 If l_qte_line_tbl(i).service_item_flag = 'Y' then
2679 if l_service_qte_line_id_tbl.EXISTS(1) then
2680 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2681 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of l_service_qte_line_id_tbl.extend...',1,'Y');
2682 END IF;
2683 l_service_qte_line_id_tbl.extend;
2684 l_service_qte_line_id_tbl(l_service_qte_line_id_tbl.count)
2685 := l_qte_line_tbl(i).quote_line_id;
2686 else
2687 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2688 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: First quote_line_id in l_service_qte_line_id_tbl',1,'Y');
2689 END IF;
2690 l_service_qte_line_id_tbl:= JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
2691 end if;
2692 end if;-- l_qte_line_tbl(i).service_item_flag = 'Y'
2693
2694 /*Store all the quote_line_id processed*/
2695 IF l_Qte_Line_id_tbl.EXISTS(1) THEN
2696 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2697 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of l_qte_line_id_tbl.extend...',1,'Y');
2698 END IF;
2699 l_Qte_Line_id_tbl.extend;
2700 l_Qte_Line_id_tbl(l_Qte_Line_id_tbl.count) := l_qte_line_tbl(i).quote_line_id;
2701 ELSE
2702 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2703 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: First quote_line_id in l_qte_line_id_tbl',1,'Y');
2704 END IF;
2705 l_Qte_Line_id_tbl := JTF_NUMBER_TABLE(l_qte_line_tbl(i).quote_line_id);
2706 END IF;
2707 --increment the line index
2708 px_line_index_search_tbl(l_qte_line_id) := l_price_index;
2709 l_price_index:= l_price_index+1;
2710 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2711 l_pricing_end_time := dbms_utility.get_time;
2712 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2713 END IF;
2714
2715 End Loop; -- l_Qte_Line_tbl.count checking.
2716
2717 -- Call to Price Adjustment Relationships and Service Relationships
2718 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2719 l_pricing_start_time := dbms_utility.get_time;
2720 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Price_Adj_All...',1,'Y');
2721 END IF;
2722
2723 ASO_PRICING_CORE_PVT.Query_Price_Adj_All
2724 (p_quote_header_id => p_qte_header_rec.quote_header_id,
2725 x_adj_id_tbl => l_qte_adj_id_tbl);
2726
2727
2728 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2729 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Query_Relationships...',1,'Y');
2730 END IF;
2731
2732 ASO_PRICING_CORE_PVT.Query_Relationships(
2733 p_qte_adj_id_tbl => l_qte_adj_id_tbl,
2734 p_service_qte_line_id_tbl => l_service_qte_line_id_tbl);
2735
2736
2737 END IF; -- l_qte_line_tbl.count = 0 check.
2738
2739 -- Delete only the header level adj that are applied or updated because
2740 -- line level modifiers will not change in Calculate only call
2741 DELETE FROM ASO_PRICE_ADJUSTMENTS
2742 WHERE quote_header_id = p_qte_header_rec.quote_header_id
2743 AND quote_line_id IS NULL
2744 AND (applied_flag = 'Y' OR updated_flag = 'Y');
2745 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2746 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Adjustment Lines deleted '||sql%ROWCOUNT,1,'Y');
2747 END IF;
2748 DELETE FROM ASO_PRICE_ADJ_ATTRIBS
2749 WHERE PRICE_ADJUSTMENT_ID IN (SELECT PRICE_ADJUSTMENT_ID
2750 FROM ASO_PRICE_ADJUSTMENTS
2751 WHERE QUOTE_HEADER_ID = p_qte_header_rec.quote_header_id
2752 AND QUOTE_LINE_ID is NULL
2753 AND (applied_flag = 'Y' OR updated_flag = 'Y'));
2754 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2755 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Hdr Adjustment Attributes deleted '||sql%ROWCOUNT,1,'Y');
2756 END IF;
2757
2758 --Need to modify the global index table of pls integer types
2759 l_global_pls_tbl := ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL;
2760 ASO_PRICING_CORE_PVT.G_LDET_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_PlsIndex_Table(
2761 p_global_tbl => l_global_pls_tbl,
2762 p_search_tbl => px_line_index_search_tbl);
2763 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL;
2764 ASO_PRICING_CORE_PVT.G_RLTD_LINE_INDEX_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
2765 p_global_tbl => l_global_num_tbl,
2766 p_search_tbl => px_line_index_search_tbl);
2767 l_global_num_tbl := ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL;
2768 ASO_PRICING_CORE_PVT.G_RLTD_RELATED_LINE_IND_TBL:= ASO_PRICING_CORE_PVT.Modify_Global_NumIndex_Table(
2769 p_global_tbl => l_global_num_tbl,
2770 p_search_tbl => px_line_index_search_tbl);
2771
2772 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2773 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Populate_QP_Temp_tables...',1,'Y');
2777
2774 l_pricing_end_time := dbms_utility.get_time;
2775 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2776 END IF;
2778 ASO_PRICING_CORE_PVT.populate_qp_temp_tables;
2779
2780 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2781 l_pricing_start_time := dbms_utility.get_time;
2782 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
2783 END IF;
2784 -- Set the control rec for QP
2785
2786 l_req_control_rec.pricing_event := '';
2787 l_req_control_rec.calculate_flag := p_control_rec.calculate_flag;
2788 l_req_control_rec.simulation_flag := p_control_rec.simulation_flag;
2789 l_req_control_rec.TEMP_TABLE_INSERT_FLAG := 'N'; ---- Modified
2790 l_req_control_rec.source_order_amount_flag := 'Y';
2791 l_req_control_rec.GSA_CHECK_FLAG := 'Y';
2792 l_req_control_rec.GSA_DUP_CHECK_FLAG := 'Y';
2793 l_req_control_rec.REQUEST_TYPE_CODE := p_control_rec.request_type;
2794 l_req_control_rec.rounding_flag := 'Q';
2795
2796 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2797 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
2798 l_pricing_end_time := dbms_utility.get_time;
2799 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2800 END IF;
2801
2802 /* Change for populating QP_PREQ_GRP.CONTROL_RECORD_TYPE.ORG_ID Yogeshwar (MOAC) */
2803
2804 l_req_control_rec.ORG_ID := p_qte_header_rec.org_id;
2805
2806 /* End of Change (MOAC) */
2807
2808
2809
2810
2811 QP_PREQ_PUB.PRICE_REQUEST
2812 (p_control_rec =>l_req_control_rec
2813 ,x_return_status =>l_return_status
2814 ,x_return_status_Text =>l_return_status_Text
2815 );
2816 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2817 x_return_status := l_return_status;
2818 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2819 FND_MESSAGE.Set_Name('ASO', 'ASO_OM_ERROR');
2820 FND_MESSAGE.Set_Token('MSG_TXT', substr(l_return_status_text, 1,255), FALSE);
2821 FND_MSG_PUB.ADD;
2822 END IF;
2823 RAISE FND_API.G_EXC_ERROR;
2824 END IF;
2825
2826 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2827 l_pricing_start_time := dbms_utility.get_time;
2828 l_accum_qp_time := l_accum_qp_time + (l_pricing_start_time - l_pricing_end_time);
2829 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: End of QP_PREQ_PUB.PRICE_REQUEST', 1, 'Y');
2830 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status:'
2831 ||l_return_status, 1, 'Y');
2832 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: After PRICE_REQUEST l_return_status_text '
2833 ||l_return_status_text,1,'Y');
2834 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Start of Post_Price_Request...',1,'Y');
2835 END IF;
2836
2837 ASO_PRICING_CORE_PVT.Copy_Price_To_Quote(
2838 P_Api_Version_Number => 1.0,
2839 P_Init_Msg_List => FND_API.G_FALSE,
2840 P_Commit => FND_API.G_FALSE,
2841 p_control_rec => l_prc_control_rec,
2842 p_qte_header_rec => p_qte_header_rec,
2843 p_insert_type => 'HDR_ONLY',
2844 x_return_status => x_return_status,
2845 x_msg_count => x_msg_count,
2846 x_msg_data => x_msg_data);
2847 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2848 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Copy_Price_To_Quote : x_return_status: '
2849 ||nvl(x_return_status,'NULL'),1,'Y');
2850 END IF;
2851 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
2852 ASO_PRICING_CORE_PVT.Process_Charges(
2853 P_Api_Version_Number => 1.0,
2854 P_Init_Msg_List => FND_API.G_FALSE,
2855 P_Commit => FND_API.G_FALSE,
2856 p_control_rec => l_prc_control_rec,
2857 p_qte_header_rec => p_qte_header_rec,
2858 x_return_status => x_return_status,
2859 x_msg_count => x_msg_count,
2860 x_msg_data => x_msg_data);
2861 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2862 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT: Process_Charges : x_return_status: '
2863 ||nvl(x_return_status,'NULL'),1,'Y');
2864 END IF;
2865 END IF;
2866
2867 FND_MSG_PUB.Count_And_Get
2868 ( p_encoded => 'F',
2869 p_count => x_msg_count,
2870 p_data => x_msg_data
2871 );
2872
2873 FOR l IN 1 .. x_msg_count LOOP
2874 x_msg_data := FND_MSG_PUB.GET( p_msg_index => l, p_encoded => 'F');
2875 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2876 aso_debug_pub.add('Messge count and get '||x_msg_data, 1, 'Y');
2877 aso_debug_pub.add('Messge count and get '||x_msg_count, 1, 'Y');
2878 END IF;
2879 END LOOP;
2880
2881
2882 IF ASO_DEBUG_PUB.G_Debug_Flag = 'Y' THEN
2883 l_pricing_end_time := dbms_utility.get_time;
2884 l_accum_aso_time := l_accum_aso_time + (l_pricing_end_time - l_pricing_start_time);
2885 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:********Timing in Calculate Call**************',1,'Y');
2886 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Total time taken (in secs) in Calculate call(Besides Pricing):'||l_accum_aso_time/100,1,'Y');
2887 aso_debug_pub.add('ASO_PRICING_FLOWS_PVT:Total time taken (in secs) in Pricing+BuildContext:'||l_accum_qp_time/100,1,'Y');
2888 END IF;
2889
2890
2891
2892 END Price_Quote_Calculate_Call;
2893
2894
2895
2896 End ASO_PRICING_FLOWS_PVT;