DBA Data[Home] [Help]

PACKAGE BODY: APPS.PON_BID_DEFAULTING_PKG

Source


1 PACKAGE BODY PON_BID_DEFAULTING_PKG AS
2 --$Header: PONBDDFB.pls 120.52.12010000.3 2009/01/07 12:10:50 amundhra ship $
3 
4 g_pkg_name CONSTANT VARCHAR2(30) := 'PON_BID_DEFAULTING_PKG';
5 g_debug_mode    CONSTANT VARCHAR2(1)  := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'),'N');
6 g_module_prefix CONSTANT VARCHAR2(35) := 'pon.plsql.bidDefaultingPkg.';
7 g_bid_rate                   PON_BID_HEADERS.RATE%TYPE;
8 g_curr_prec                  FND_CURRENCIES.PRECISION%TYPE;
9 g_advance_negotiable         PON_AUCTION_HEADERS_ALL.ADVANCE_NEGOTIABLE_FLAG%TYPE;
10 g_recoupment_negotiable      PON_AUCTION_HEADERS_ALL.RECOUPMENT_NEGOTIABLE_FLAG%TYPE;
11 g_prog_pymt_negotiable       PON_AUCTION_HEADERS_ALL.PROGRESS_PYMT_NEGOTIABLE_FLAG%TYPE;
12 g_max_rtng_negotiable        PON_AUCTION_HEADERS_ALL.MAX_RETAINAGE_NEGOTIABLE_FLAG%TYPE;
13 g_rtng_negotiable            PON_AUCTION_HEADERS_ALL.RETAINAGE_NEGOTIABLE_FLAG%TYPE;
14 g_copy_only_from_auc          VARCHAR2(1);
15 
16 
17 -- ======================================================================
18 -- PROCEDURE:	LOG_MESSAGE		PRIVATE
19 --  PARAMETERS:
20 --  p_module   			IN Pass the module name
21 --  p_message  			IN the string to be logged
22 --
23 --  COMMENT: Common procedure to log messages in FND_LOG.
24 -- ======================================================================
25 PROCEDURE log_message
26 (
27 	p_module 			IN VARCHAR2,
28 	p_message 			IN VARCHAR2
29 ) IS
30 BEGIN
31   IF (g_debug_mode = 'Y') THEN
32       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
33           FND_LOG.string(log_level => FND_LOG.level_statement,
34                          module    => g_module_prefix || p_module,
35                          message   => p_message);
36       END IF;
37    END IF;
38 END log_message;
39 
40 -- ======================================================================
41 -- PROCEDURE:	POPULATE_DISPLAY_PF_FLAG  PRIVATE
42 --  PARAMETERS:
43 --	p_auc_header_id		IN auction_header_id of negotiation
44 --  	p_bid_number   		IN bid number to populate pf flags for
45 --	p_supp_seq_number	IN sequence number of current supplier
46 --
47 --  COMMENT: populate line and header display_price_factors_flag
48 -- ======================================================================
49 PROCEDURE populate_display_pf_flag
50 (
51 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
52 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
53 	p_supp_seq_number	IN pon_bidding_parties.sequence%TYPE,
54 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
55 	p_batch_end		IN pon_bid_item_prices.line_number%TYPE,
56 	x_skip_pf_for_batch	OUT NOCOPY VARCHAR2
57 ) IS
58 	l_supplier_view		pon_auction_headers_all.supplier_view_type%TYPE;
59 	l_pf_type		pon_auction_headers_all.pf_type_allowed%TYPE;
60 	l_has_pfs		pon_auction_headers_all.has_price_elements%TYPE;
61 BEGIN
62 
63 
64 	-- Get the price factor type info
65 	SELECT 	ah.supplier_view_type,
66 		ah.pf_type_allowed,
67 		ah.has_price_elements
68 	INTO 	l_supplier_view,
69 		l_pf_type,
70 		l_has_pfs
71 	FROM 	pon_auction_headers_all ah
72 	WHERE 	ah.auction_header_id = p_auc_header_id;
73 
74 	-- blindly set to N if pf type is NONE, there are no price factors
75 	-- or the view is untransformed (BUYER pf only)
76 	IF (l_pf_type = 'NONE' OR l_has_pfs = 'N'
77 		OR l_supplier_view = 'UNTRANSFORMED') THEN
78 
79 		UPDATE pon_bid_item_prices
80 		SET display_price_factors_flag = 'N'
81 		WHERE bid_number = p_bid_number
82 		AND line_number BETWEEN p_batch_start AND p_batch_end;
83 
84 		x_skip_pf_for_batch := 'Y';
85 
86 		RETURN;
87 	END IF;
88 
89 	-- Populate line level display_price_factors_flag
90 	-- Y if there is a supplier price factor (besides line price)
91 	-- N if not (buyer price factors handled by next sql)
92 	UPDATE pon_bid_item_prices bl
93 	SET bl.display_price_factors_flag =
94 		nvl((SELECT 'Y'
95 		FROM pon_price_elements apf
96 		WHERE apf.auction_header_id = p_auc_header_id
97 			AND apf.line_number = bl.line_number
98 			AND apf.pf_type = 'SUPPLIER'
99 			AND apf.price_element_type_id <> -10
100 			AND rownum = 1), 'N')
101 	WHERE bl.bid_number = p_bid_number
102 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end;
103 
104 	-- The display_price_factors_flag is also set if the line
105 	-- has a buyer price factor with a value, regardless of
106 	-- whether it is to be displayed to the supplier
107 	-- Buyer price factors will not apply in the following cases:
108 	-- 1. Supplier/site not on invitation list
109 	-- 2. The negotiation only allows SUPPLIER price factors
110 	IF (p_supp_seq_number IS NOT null
111 		AND l_pf_type <> 'SUPPLIER') THEN
112 
113 		UPDATE pon_bid_item_prices bl
114 		SET bl.display_price_factors_flag =
115 			nvl((SELECT 'Y'
116 			FROM pon_pf_supplier_values pfv
117 			WHERE pfv.auction_header_id = p_auc_header_id
118 				AND pfv.line_number = bl.line_number
119 				AND pfv.supplier_seq_number = p_supp_seq_number
120 				AND nvl(pfv.value, 0) <> 0
121 				AND rownum = 1), 'N')
122 		WHERE bl.bid_number = p_bid_number
123 			-- no need to update lines with supplier price factors
124 			AND bl.display_price_factors_flag = 'N'
125 			AND bl.line_number BETWEEN p_batch_start AND p_batch_end;
126 	END IF;
127 
128 	-- Determine if there are price factors in this batch
129 	SELECT decode(count(bl.bid_number), 0, 'Y', 'N')
130 	INTO x_skip_pf_for_batch
131 	FROM pon_bid_item_prices bl
132 	WHERE bl.bid_number = p_bid_number
133 		AND bl.display_price_factors_flag = 'Y'
134 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end
135 		AND rownum = 1;
136 
137 EXCEPTION
138 	WHEN OTHERS THEN
139 		x_skip_pf_for_batch := 'N';
140 END populate_display_pf_flag;
141 
142 -- ======================================================================
143 -- PROCEDURE:	INSERT_AUCTION_LINES	PRIVATE
144 --  PARAMETERS:
145 --	p_auc_header_id		IN auction header id of negotiation
146 --	p_bid_number		IN new bid number
147 --	p_userid			IN userid of bid creator
148 --	p_auctpid			IN auction creators trading partner id
149 --	p_tpid				IN trading partner id of supplier
150 --	p_has_pe_flag		IN flag to indicate of auction has price elements
151 --	p_supp_seq_number	IN sequence number of supplier for price elements
152 --	p_rate				IN rate for bid to auction currency
153 --	p_price_prec		IN auction bid currency precision
154 --	p_curr_prec			IN bid currency precision
155 --
156 --  COMMENT: Insert missing auction side lines into a draft bid
157 -- ======================================================================
158 PROCEDURE insert_auction_lines
159 (
160 	p_auc_header_id		IN pon_bid_headers.auction_header_id%TYPE,
161 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
162 	p_userid		IN pon_bid_headers.created_by%TYPE,
163 	p_auctpid		IN pon_auction_headers_all.trading_partner_id%TYPE,
164 	p_tpid			IN pon_bid_headers.trading_partner_id%TYPE,
165 	p_vensid		IN pon_bid_headers.vendor_site_id%TYPE,
166 	p_has_pe_flag		IN VARCHAR2,
167 	p_blanket		IN VARCHAR2,
168 	p_full_qty		IN VARCHAR2,
169 	p_supp_seq_number	IN pon_bidding_parties.sequence%TYPE,
170 	p_rate			IN pon_bid_headers.rate%TYPE,
171 	p_price_prec		IN pon_bid_headers.number_price_decimals%TYPE,
172 	p_curr_prec		IN fnd_currencies.precision%TYPE,
173 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
174 	p_batch_end		IN pon_bid_item_prices.line_number%TYPE
175 ) IS
176 	l_skip_pf_for_batch VARCHAR2(1);
177 	l_restricted_flag	VARCHAR2(1);
178 	l_supp_seq_number	pon_bidding_parties.sequence%TYPE;
179 BEGIN
180 
181 
182 	/************************************************************
183 	 * STEP 1: For lines with negotiable shipments, insert all the
184 	** missing bid shipments for only those lines that the supplier
185 	** never attempted to bid on. We need to insert these shipments
186 	** before we actually insert the bid lines so that the "not
187 	** exists" clause doesn't cause data corruption.
188 	*************************************************************/
189 
190 	-- Insert missing shipments for all non-negotiable shipments
191 	INSERT INTO pon_bid_shipments
192 	(
193 		BID_NUMBER,
194 		LINE_NUMBER,
195 		SHIPMENT_NUMBER,
196 		AUCTION_HEADER_ID,
197 		AUCTION_LINE_NUMBER,
198 		AUCTION_SHIPMENT_NUMBER,
199 		SHIPMENT_TYPE,
200 		SHIP_TO_ORGANIZATION_ID,
201 		SHIP_TO_LOCATION_ID,
202 		QUANTITY,
203 		MAX_QUANTITY,
204 		PRICE_TYPE,
205 		PRICE,
206 		EFFECTIVE_START_DATE,
207 		EFFECTIVE_END_DATE,
208 		CREATION_DATE,
209 		CREATED_BY,
210 		LAST_UPDATE_DATE,
211 		LAST_UPDATED_BY,
212 		LAST_UPDATE_LOGIN,
213 		HAS_PRICE_DIFFERENTIALS_FLAG
214 	)
215 	(SELECT
216 		p_bid_number,			-- BID_NUMBER
217 		apb.line_number,		-- LINE_NUMBER
218 		apb.shipment_number+1,		-- SHIPMENT_NUMBER
219 		p_auc_header_id,		-- AUCTION_HEADER_ID
220 		apb.line_number,		-- AUCTION_LINE_NUMBER
221 		apb.shipment_number,		-- AUCTION_SHIPMENT_NUMBER
222 		apb.shipment_type,		-- SHIPMENT_TYPE
223 		apb.ship_to_organization_id, 	-- SHIP_TO_ORGANIZATION_ID
224 		apb.ship_to_location_id, 	-- SHIP_TO_LOCATION_ID
225 		apb.quantity, 			-- QUANTITY
226 		apb.max_quantity,               -- MAX_QUANTITY
227 		'PRICE', 			-- PRICE_TYPE
228 		apb.price, 			-- PRICE
229 		apb.effective_start_date, 	-- EFFECTIVE_START_DATE
230 		apb.effective_end_date, 	-- EFFECTIVE_END_DATE
231 		sysdate,			-- CREATION_DATE
232 		p_userid,			-- CREATED_BY
233 		sysdate,			-- LAST_UPDATE_DATE
234 		p_userid,			-- LAST_UPDATED_BY
235 		null,				-- LAST_UPDATE_LOGIN
236 		apb.has_price_differentials_flag -- HAS_PRICE_DIFFERENTIALS_FLAG
237 	FROM 	pon_auction_shipments_all apb, pon_auction_item_prices_all aip
238 	WHERE 	apb.auction_header_id = p_auc_header_id
239 	AND     aip.auction_header_id = apb.auction_header_id
240 	AND 	apb.line_number BETWEEN p_batch_start AND p_batch_end
241 	AND     aip.line_number = apb.line_number
242 	AND 	nvl(aip.price_break_neg_flag, 'N') = 'Y'
243 	AND 	NOT EXISTS
244 			(SELECT pbip.line_number
245 			 FROM   pon_bid_item_prices pbip
246 			 WHERE  pbip.bid_number = p_bid_number
247 			 AND    pbip.line_number = apb.line_number));
248 
249 
250 	/************************************************************
251 	 * STEP 2: Check whether the current supplier was excluded from
252 	** bidding oncertain lines. Set the flags in local variables.
253 	** Logic used is to blindly insert all the lines and then
254 	** delete the lines that the current supplier was excluded from.
255 	*************************************************************/
256 
257 	BEGIN
258 		-- Check if the supplier has restricted lines, and get sequence number
259 		SELECT decode(bp.access_type, 'RESTRICTED', 'Y', 'N'), bp.sequence
260 		INTO l_restricted_flag, l_supp_seq_number
261 		FROM pon_bidding_parties bp
262 		WHERE bp.auction_header_id = p_auc_header_id
263 			AND bp.trading_partner_id = p_tpid
264 			AND nvl(bp.vendor_site_id, -1) = p_vensid;
265 	EXCEPTION
266 		WHEN NO_DATA_FOUND THEN
267 			l_restricted_flag := 'N';
268 			l_supp_seq_number := null;
269 	END;
270 
271 
272 	/************************************************************
273 	 * STEP 3: Insert missing auction lines.  pon_bid_item_prices
274 	** has an index on (bid_number, line_number) so the EXISTS
275 	** clause does not result in a full table scan.
276 	*************************************************************/
277 
278 	INSERT INTO pon_bid_item_prices
279 	(
280 		AUCTION_HEADER_ID,
281 		AUCTION_LINE_NUMBER,
282 		BID_NUMBER,
283 		LINE_NUMBER,
284 		ITEM_DESCRIPTION,
285 		CATEGORY_ID,
286 		CATEGORY_NAME,
287 		UOM,
288 		QUANTITY,
289 		LANGUAGE_CODE,
290 		CREATION_DATE,
291 		CREATED_BY,
292 		LAST_UPDATE_DATE,
293 		LAST_UPDATED_BY,
294 		AUCTION_CREATION_DATE,
295 		SHIP_TO_LOCATION_ID,
296 		PROXY_BID_FLAG,
297 		UNIT_OF_MEASURE,
298 		HAS_ATTRIBUTES_FLAG,
299 		FREIGHT_TERMS_CODE,
300 		TBD_PRICING_FLAG,
301 		AUC_TRADING_PARTNER_ID,
302 		BID_TRADING_PARTNER_ID,
303 		PRICE_BREAK_TYPE,
304 		HAS_SHIPMENTS_FLAG,
305 		IS_CHANGED_LINE_FLAG,
306 		HAS_PRICE_DIFFERENTIALS_FLAG,
307 		PRICE_DIFF_SHIPMENT_NUMBER,
308 		HAS_BID_FLAG,
309         HAS_BID_PAYMENTS_FLAG,
310         BID_START_PRICE,
311         HAS_QUANTITY_TIERS
312 
313 	)
314 	(SELECT
315 		al.auction_header_id,		-- AUCTION_HEADER_ID
316 		al.line_number,			-- AUCTION_LINE_NUMBER
317 		p_bid_number,			-- BID_NUMBER
318 		al.line_number,			-- LINE_NUMBER
319 		al.item_description,		-- ITEM_DESCRIPTION
320 		al.category_id,			-- CATEGORY_ID
321 		al.category_name,		-- CATEGORY_NAME
322 		al.uom_code,			-- UOM
323 		decode(p_blanket, 'Y', null,
324 			decode(p_full_qty, 'Y', al.quantity,
325 				decode(al.group_type, 'LOT_LINE', al.quantity,
326 					decode(al.order_type_lookup_code, 'AMOUNT',
327 					al.quantity, null)))), -- QUANTITY
328 		userenv('LANG'),			-- LANGUAGE_CODE
329 		SYSDATE,					-- CREATION_DATE
330 		p_userid,					-- CREATED_BY
331 		SYSDATE,					-- LAST_UPDATE_DATE
332 		p_userid,					-- LAST_UPDATED_BY
333 		al.auction_creation_date,	-- AUCTION_CREATION_DATE
334 		al.ship_to_location_id,		-- SHIP_TO_LOCATION_ID
335 		'N',				-- PROXY_BID_FLAG
336 		al.unit_of_measure,		-- UNIT_OF_MEASURE
337 		al.has_attributes_flag,		-- HAS_ATTRIBUTES_FLAG
338 		al.freight_terms_code,		-- FREIGHT_TERMS_CODE
339 		'N',				-- TBD_PRICING_FLAG
340 		p_auctpid,			-- AUC_TRADING_PARTNER_ID
341 		p_tpid,				-- BID_TRADING_PARTNER_ID
342 		al.price_break_type,		-- PRICE_BREAK_TYPE
343 		al.has_shipments_flag, 		-- HAS_SHIPMENTS_FLAG
344 		'N',				-- IS_CHANGED_LINE_FLAG
345 		al.has_price_differentials_flag,-- HAS_PRICE_DIFFERENTIALS_FLAG
346 		al.price_diff_shipment_number,	-- PRICE_DIFF_SHIPMENT_NUMBER *
347 		'N',				-- HAS_BID_FLAG
348         	'N',				-- HAS_BID_PAYMENTS_FLAG
349 		al.bid_start_price,		-- BID_START_PRICE
350 		al.has_quantity_tiers 		-- HAS_QUANTITY_TIERS
351 	FROM pon_auction_item_prices_all al
352 	WHERE al.auction_header_id = p_auc_header_id
353 		AND al.line_number BETWEEN p_batch_start AND p_batch_end
354 		AND NOT EXISTS
355 			(SELECT bl.line_number
356 			FROM pon_bid_item_prices bl
357 			WHERE bl.bid_number = p_bid_number
358 				AND bl.line_number = al.line_number));
359 
360 	/************************************************************
361 	** STEP 4: Delete all the excluded lines.
362 	*************************************************************/
363 
364 	IF (l_restricted_flag = 'Y') THEN
365 
366 		DELETE FROM pon_bid_item_prices bl
367 		WHERE bl.bid_number = p_bid_number
368 			AND bl.line_number BETWEEN p_batch_start AND p_batch_end
369 			AND EXISTS
370 				(SELECT le.line_number
371 				FROM pon_party_line_exclusions le, pon_auction_item_prices_all al
372 				WHERE al.auction_header_id = p_auc_header_id
373 					AND al.line_number = bl.line_number
374 					AND le.auction_header_id = al.auction_header_id
375 					AND le.line_number = nvl(al.parent_line_number, al.line_number)
376 					AND le.trading_partner_id = p_tpid
377 					AND le.vendor_site_id = p_vensid);
378 	END IF;
379 
380 
381 	/************************************************************
382 	** STEP 5: Insert missing line attributes
383 	*************************************************************/
384 
385 	INSERT INTO pon_bid_attribute_values
386 	(
387 		AUCTION_HEADER_ID,
388 		AUCTION_LINE_NUMBER,
389 		BID_NUMBER,
390 		LINE_NUMBER,
391 		ATTRIBUTE_NAME,
392 		DATATYPE,
393 		CREATION_DATE,
394 		CREATED_BY,
395 		LAST_UPDATE_DATE,
396 		LAST_UPDATED_BY,
397 		SEQUENCE_NUMBER,
398 		ATTR_LEVEL,
399 		ATTR_GROUP_SEQ_NUMBER,
400 		ATTR_DISP_SEQ_NUMBER
401 	)
402 	(SELECT
403 		aa.auction_header_id,		-- AUCTION_HEADER_ID
404 		aa.line_number,				-- AUCTION_LINE_NUMBER
405 		p_bid_number,				-- BID_NUMBER
406 		aa.line_number,				-- LINE_NUMBER
407 		aa.attribute_name,			-- ATTRIBUTE_NAME
408 		aa.datatype,				-- DATATYPE
409 		sysdate,					-- CREATION_DATE
410 		p_userid,					-- CREATED_BY
411 		sysdate,					-- LAST_UPDATE_DATE
412 		p_userid,					-- LAST_UPDATED_BY
413 		aa.sequence_number,			-- SEQUENCE_NUMBER
414 		aa.attr_level,				-- ATTR_LEVEL
415 		aa.attr_group_seq_number,	-- ATTR_GROUP_SEQ_NUMBER
416 		aa.attr_disp_seq_number		-- ATTR_DISP_SEQ_NUMBER
417 	FROM pon_auction_attributes aa
418 	WHERE aa.auction_header_id = p_auc_header_id
419 		AND aa.line_number BETWEEN p_batch_start AND p_batch_end
420 		AND NOT EXISTS
421 			(SELECT pbav.attribute_name
422 			 FROM 	pon_bid_attribute_values pbav
423 			 WHERE  pbav.bid_number = p_bid_number
424 			 AND    pbav.line_number = aa.line_number
425 			 AND    pbav.sequence_number = aa.sequence_number));
426 
427 	/************************************************************
428 	** STEP 6: Insert missing bid cost factors or price elements
429 	** or price factors
430 	*************************************************************/
431 
432 	/************************************************************
433 	** STEP 6a: Populate display_price_factors flag as it is a
434 	** rel12 column
435 	*************************************************************/
436 
437 	populate_display_pf_flag (p_auc_header_id,
438 		 		  p_bid_number,
439 		 		  p_supp_seq_number,
440 		 		  p_batch_start,
441 		 		  p_batch_end,
442 		 		  l_skip_pf_for_batch);
443 
444 	/************************************************************
445 	** STEP 6b: Batching enabled inserts - if we are not supposed to
446 	** skip this set of lines in the batch, then go ahead with
447 	** inserts
448 	*************************************************************/
449 
450 	IF (l_skip_pf_for_batch = 'N') THEN
451 
452 		-- Insert missing SUPPLIER price factors only if they exist
453 		IF (p_has_pe_flag = 'Y') THEN
454 			INSERT INTO pon_bid_price_elements
455 			(
456 				BID_NUMBER,
457 				LINE_NUMBER,
458 				PRICE_ELEMENT_TYPE_ID,
459 				AUCTION_HEADER_ID,
460 				PRICING_BASIS,
461 				SEQUENCE_NUMBER,
462 				CREATION_DATE,
463 				CREATED_BY,
464 				LAST_UPDATE_DATE,
465 				LAST_UPDATED_BY,
466 				PF_TYPE
467 			)
468 			(SELECT
469 				p_bid_number,				-- BID_NUMBER
470 				apf.line_number,			-- LINE_NUMBER
471 				apf.price_element_type_id,	-- PRICE_ELEMENT_TYPE_ID
472 				p_auc_header_id,			-- AUCTION_HEADER_ID
473 				apf.pricing_basis,			-- PRICING_BASIS
474 				apf.sequence_number,		-- SEQUENCE_NUMBER
475 				sysdate,					-- CREATION_DATE
476 				p_userid,					-- CREATED_BY
477 				sysdate,					-- LAST_UPDATE_DATE
478 				p_userid,					-- LAST_UPDATED_BY
479 				apf.pf_type					-- PF_TYPE
480 			FROM pon_price_elements apf
481 			WHERE apf.auction_header_id = p_auc_header_id
482 				AND apf.pf_type = 'SUPPLIER'			-- only supplier price factors
483 				AND apf.line_number BETWEEN p_batch_start AND p_batch_end
484 				AND NOT EXISTS
488                                        	AND   	pbpe.line_number = apf.line_number
485                                        (SELECT 	pbpe.price_element_type_id
486                                        	FROM 	pon_bid_price_elements pbpe
487                                        	WHERE 	pbpe.bid_number = p_bid_number
489 					AND  	pbpe.price_element_type_id = apf.price_element_type_id));
490 
491 
492 		END IF;
493 
494 
495 
496 	/************************************************************
497 	** STEP 6c: Check for buyer price factors - if this supplier
498 	** is invited to the negotiation.
499 	*************************************************************/
500 
501 		-- Insert missing BUYER price factors if applicable
502 		IF (p_supp_seq_number IS NOT null) THEN
503 
504 			INSERT INTO pon_bid_price_elements
505 			(
506 				BID_NUMBER,
507 				LINE_NUMBER,
508 				PRICE_ELEMENT_TYPE_ID,
509 				AUCTION_HEADER_ID,
510 				PRICING_BASIS,
511 				AUCTION_CURRENCY_VALUE,
512 				BID_CURRENCY_VALUE,
513 				SEQUENCE_NUMBER,
514 				CREATION_DATE,
515 				CREATED_BY,
516 				LAST_UPDATE_DATE,
517 				LAST_UPDATED_BY,
518 				PF_TYPE
519 			)
520 			(SELECT
521 				p_bid_number,				-- BID_NUMBER
522 				apf.line_number,			-- LINE_NUMBER
523 				apf.price_element_type_id,	-- PRICE_ELEMENT_TYPE_ID
524 				p_auc_header_id,			-- AUCTION_HEADER_ID
525 				apf.pricing_basis,			-- PRICING_BASIS
526 				pf.value,					-- AUCTION_CURRENCY_VALUE
527 				decode(apf.pricing_basis,
528 					'PER_UNIT', round(pf.value * p_rate, p_price_prec),
529 					'FIXED_AMOUNT', round(pf.value * p_rate, p_curr_prec),
530 					'PERCENTAGE', pf.value), -- BID_CURRENCY_VALUE
531 				apf.sequence_number,		-- SEQUENCE_NUMBER
532 				sysdate,					-- CREATION_DATE
533 				p_userid,					-- CREATED_BY
534 				sysdate,					-- LAST_UPDATE_DATE
535 				p_userid,					-- LAST_UPDATED_BY
536 				apf.pf_type					-- PF_TYPE
537 			FROM pon_price_elements apf,
538 				pon_pf_supplier_values pf,
539 				pon_bid_item_prices bl
540 			WHERE apf.auction_header_id = p_auc_header_id
541 				AND apf.pf_type = 'BUYER'		-- only buyer pf that are to be displayed
542 				AND apf.display_to_suppliers_flag = 'Y'
543 				AND bl.bid_number = p_bid_number
544 				AND bl.line_number = apf.line_number
545 				AND bl.display_price_factors_flag = 'Y'
546 				AND pf.auction_header_id = apf.auction_header_id
547 				AND pf.line_number = apf.line_number
548 				AND pf.pf_seq_number = apf.sequence_number
549 				AND pf.supplier_seq_number = p_supp_seq_number
550 				AND nvl(pf.value, 0) <> 0
551 				AND apf.line_number BETWEEN p_batch_start AND p_batch_end
552 				AND NOT EXISTS
553 					(SELECT pbpe.price_element_type_id
554 					 FROM 	pon_bid_price_elements pbpe
555 					 WHERE  pbpe.bid_number = p_bid_number
556 					 AND    pbpe.line_number = apf.line_number
557 					 AND    pbpe.price_element_type_id = apf.price_element_type_id));
558 
559 		END IF;
560 	END IF;
561 
562 	-- Insert missing shipments for all non-negotiable shipments
563 
564 
565 	/************************************************************
566 	** STEP 7: Insert all the missing non-negotiable or required
567 	** or mandatory shipments/price breaks.
568 	*************************************************************/
569 
570     /*
571      * Price Tiers Enhancements
572      * Quantity tiers are negotiable shipments so no need to copy the max_quantity field here
573      */
574 
575 	INSERT INTO pon_bid_shipments
576 	(
577 		BID_NUMBER,
578 		LINE_NUMBER,
579 		SHIPMENT_NUMBER,
580 		AUCTION_HEADER_ID,
581 		AUCTION_LINE_NUMBER,
582 		AUCTION_SHIPMENT_NUMBER,
583 		SHIPMENT_TYPE,
584 		SHIP_TO_ORGANIZATION_ID,
585 		SHIP_TO_LOCATION_ID,
586 		QUANTITY,
587 		PRICE_TYPE,
588 		PRICE,
589 		EFFECTIVE_START_DATE,
590 		EFFECTIVE_END_DATE,
591 		CREATION_DATE,
592 		CREATED_BY,
593 		LAST_UPDATE_DATE,
594 		LAST_UPDATED_BY,
595 		LAST_UPDATE_LOGIN,
596 		HAS_PRICE_DIFFERENTIALS_FLAG
597 	)
598 	(SELECT
599 		p_bid_number,			-- BID_NUMBER
600 		apb.line_number,		-- LINE_NUMBER
601 		apb.shipment_number+1,		-- SHIPMENT_NUMBER
602 		p_auc_header_id,		-- AUCTION_HEADER_ID
603 		apb.line_number,		-- AUCTION_LINE_NUMBER
604 		apb.shipment_number,		-- AUCTION_SHIPMENT_NUMBER
605 		apb.shipment_type,		-- SHIPMENT_TYPE
606 		apb.ship_to_organization_id, 	-- SHIP_TO_ORGANIZATION_ID
607 		apb.ship_to_location_id, 	-- SHIP_TO_LOCATION_ID
608 		apb.quantity, 			-- QUANTITY
609 		'PRICE', 			-- PRICE_TYPE
610 		apb.price, 			-- PRICE
611 		apb.effective_start_date, 	-- EFFECTIVE_START_DATE
612 		apb.effective_end_date, 	-- EFFECTIVE_END_DATE
613 		sysdate,			-- CREATION_DATE
614 		p_userid,			-- CREATED_BY
615 		sysdate,			-- LAST_UPDATE_DATE
616 		p_userid,			-- LAST_UPDATED_BY
617 		null,				-- LAST_UPDATE_LOGIN
618 		apb.has_price_differentials_flag -- HAS_PRICE_DIFFERENTIALS_FLAG
619 	FROM 	pon_auction_shipments_all apb, pon_auction_item_prices_all aip
620 	WHERE 	apb.auction_header_id = p_auc_header_id
621 	AND 	apb.line_number BETWEEN p_batch_start AND p_batch_end
622 	AND	aip.auction_header_id = apb.auction_header_id
623 	AND	aip.line_number = apb.line_number
624 	AND 	nvl(aip.price_break_neg_flag, 'Y') = 'N'
628 			 WHERE  pbs.bid_number = p_bid_number
625 	AND 	NOT EXISTS
626 			(SELECT pbs.auction_shipment_number
627 			 FROM   pon_bid_shipments pbs
629 			 AND    pbs.line_number = apb.line_number
630 			 AND    pbs.auction_shipment_number = apb.shipment_number));
631 
632 	/************************************************************
633 	** STEP 8: Insert all the missing line-level as well as shipment
634 	** level price breaks in a single insert statement.
635 	*************************************************************/
636 
637 	INSERT INTO pon_bid_price_differentials
638 	(
639 		AUCTION_HEADER_ID,
640 		BID_NUMBER,
641 		LINE_NUMBER,
642 		SHIPMENT_NUMBER,
643 		PRICE_DIFFERENTIAL_NUMBER,
644 		PRICE_TYPE,
645 		CREATION_DATE,
646 		CREATED_BY,
647 		LAST_UPDATE_DATE,
648 		LAST_UPDATED_BY,
649 		LAST_UPDATE_LOGIN
650 	)
651 	(SELECT
652 		p_auc_header_id,			-- AUCTION_HEADER_ID
653 		p_bid_number,				-- BID_NUMBER
654 		apd.line_number,			-- LINE_NUMBER
655 		decode(apd.shipment_number, -1, -1, apd.shipment_number+1),	-- SHIPMENT_NUMBER
656 		apd.price_differential_number, 		-- PRICE_DIFFERENTIAL_NUMBER
657 		apd.price_type,				-- PRICE_TYPE
658 		sysdate,				-- CREATION_DATE
659 		p_userid,				-- CREATED_BY
660 		sysdate,				-- LAST_UPDATE_DATE
661 		p_userid,				-- LAST_UPDATED_BY
662 		null					-- LAST_UPDATE_LOGIN
663 	FROM pon_price_differentials apd
664 	WHERE apd.auction_header_id = p_auc_header_id
665 		AND apd.line_number BETWEEN p_batch_start AND p_batch_end
666 		AND NOT EXISTS
667 			(SELECT pbpd.price_differential_number
668 			 FROM   pon_bid_price_differentials pbpd
669 			 WHERE  pbpd.bid_number = p_bid_number
670 			 AND    pbpd.line_number = apd.line_number
671 			 AND    pbpd.price_differential_number = apd.price_differential_number));
672 
673 END insert_auction_lines;
674 
675 -- ======================================================================
676 -- PROCEDURE:	POPULATE_OLD_VALUE_COLUMNS	PRIVATE
677 --  PARAMETERS:
678 --	p_bid_number		IN new bid number
679 --	p_source_bid_num	IN source bid number
680 --
681 --  COMMENT: Populate old value columns for a bid
682 -- ======================================================================
683 PROCEDURE populate_old_value_columns
684 (
685 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
686 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
687 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
688 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE
689 ) IS
690 BEGIN
691 
692 	-- Update line level old value columns
693 	UPDATE pon_bid_item_prices bl
694 	SET (bl.old_price,
695 		bl.old_bid_currency_unit_price,
696 		bl.old_bid_currency_price,
697 		bl.old_bid_currency_limit_price,
698 		bl.old_po_bid_min_rel_amount,
699 		bl.old_quantity,
700 		bl.old_publish_date,
701 		bl.old_promised_date,
702 		bl.old_note_to_auction_owner,
703 		bl.old_bid_curr_advance_amount,
704 		bl.old_recoupment_rate_percent,
705 		bl.old_progress_pymt_rate_percent,
706 		bl.old_retainage_rate_percent,
707 		bl.old_bid_curr_max_retainage_amt) =
708 		(SELECT
709 			old_bl.price,
710 			old_bl.bid_currency_unit_price,
711 			old_bl.bid_currency_price,
712 			old_bl.bid_currency_limit_price,
713 			old_bl.po_bid_min_rel_amount,
714 			old_bl.quantity,
715 			old_bl.publish_date,
716 			old_bl.promised_date,
717 			old_bl.note_to_auction_owner,
718 			old_bl.bid_curr_advance_amount,
719 			old_bl.recoupment_rate_percent,
720 			old_bl.progress_pymt_rate_percent,
721 			old_bl.retainage_rate_percent,
722 			old_bl.bid_curr_max_retainage_amt
723 		FROM pon_bid_item_prices old_bl
724 		WHERE old_bl.bid_number = p_source_bid_num
725 			AND old_bl.line_number = bl.line_number)
726 	WHERE bl.bid_number = p_bid_number
727 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end;
728 
729 	-- Update attribute old value columns
730 	UPDATE pon_bid_attribute_values ba
731 	SET	ba.old_value =
732 		(SELECT old_ba.value
733 		FROM pon_bid_attribute_values old_ba
734 		WHERE old_ba.bid_number = p_source_bid_num
735 			AND old_ba.line_number = ba.line_number
736 			AND old_ba.attribute_name = ba.attribute_name)
737 	WHERE ba.bid_number = p_bid_number
738 		AND ba.line_number BETWEEN p_batch_start AND p_batch_end;
739 
740 	-- Update SUPPLIER price factor old value columns
741 	UPDATE pon_bid_price_elements bpf
742 	SET	bpf.old_bid_currency_value =
743 		(SELECT old_bpf.bid_currency_value
744 		FROM pon_bid_price_elements old_bpf
745 		WHERE old_bpf.bid_number = p_source_bid_num
746 			AND old_bpf.line_number = bpf.line_number
747 			AND old_bpf.price_element_type_id = bpf.price_element_type_id)
748 	WHERE bpf.bid_number = p_bid_number
749 		AND bpf.pf_type = 'SUPPLIER'
750 		AND bpf.line_number BETWEEN p_batch_start AND p_batch_end;
751 
752 	-- Update price break old value columns
753 	UPDATE pon_bid_shipments bpb
754 	SET	(bpb.old_bid_currency_unit_price,
755 		bpb.old_bid_currency_price,
756 		bpb.old_price_discount,
757 		bpb.old_ship_to_org_id,
758 		bpb.old_ship_to_loc_id,
759 		bpb.old_effective_start_date,
760 		bpb.old_effective_end_date,
761 		bpb.old_quantity,
762 		bpb.old_max_quantity,
766 			old_bpb.bid_currency_price,
763 		bpb.old_price_type) =
764 		(SELECT
765 			old_bpb.bid_currency_unit_price,
767 			old_bpb.price_discount,
768 			old_bpb.ship_to_organization_id,
769 			old_bpb.ship_to_location_id,
770 			old_bpb.effective_start_date,
771 			old_bpb.effective_end_date,
772 			old_bpb.quantity,
773 			old_bpb.max_quantity,
774 			old_bpb.price_type
775 		FROM pon_bid_shipments old_bpb
776 		WHERE old_bpb.bid_number = p_source_bid_num
777 			AND old_bpb.line_number = bpb.line_number
778 			AND old_bpb.shipment_number = bpb.shipment_number)
779 	WHERE bpb.bid_number = p_bid_number
780 		AND bpb.line_number BETWEEN p_batch_start AND p_batch_end;
781 
782 	-- Update price differential old value columns
783 	UPDATE pon_bid_price_differentials bpd
784 	SET	bpd.old_multiplier =
785 		(SELECT old_bpd.multiplier
786 		FROM pon_bid_price_differentials old_bpd
787 		WHERE old_bpd.bid_number = p_source_bid_num
788 			AND old_bpd.line_number = bpd.line_number
789 			AND old_bpd.shipment_number = bpd.shipment_number
790 			AND old_bpd.price_differential_number = bpd.price_differential_number)
791 	WHERE bpd.bid_number = p_bid_number
792 		AND bpd.line_number BETWEEN p_batch_start AND p_batch_end;
793 
794 END populate_old_value_columns;
795 
796 -- ======================================================================
797 -- PROCEDURE:	HANDLE_PROXY   PRIVATE
798 --  PARAMETERS:
799 --	p_auc_header_id		IN the auction header id
800 --  p_draft_bid_num   	IN bid number to update proxy for
801 --	p_tpid				IN trading partner id of supplier
802 --	p_tpcid				IN trading partner contact id of supplier
803 --	p_vensid			IN vendor site bid is placed on
804 --  x_prev_bid_number	OUT returned backing bid number
805 --  x_rebid_flag		OUT Y/N if the current bid is a rebid/not a rebid
806 --
807 --  COMMENT: updates price, limit_price, and copy_price_for_proxy_flag
808 --			First finds the backing ACTIVE bid, if it exists and determine
809 --			if the bid was a rebid
810 -- ======================================================================
811 PROCEDURE handle_proxy
812 (
813 	p_auc_header_id		IN pon_bid_headers.auction_header_id%TYPE,
814 	p_draft_bid_num		IN pon_bid_headers.bid_number%TYPE,
815 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
816 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
817 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE,
818 	x_prev_bid_number	OUT NOCOPY pon_bid_headers.bid_number%TYPE,
819 	x_rebid_flag		OUT NOCOPY VARCHAR2
820 ) IS
821 	l_max_line_number	pon_bid_item_prices.line_number%TYPE;
822 	l_batch_start		pon_bid_item_prices.line_number%TYPE;
823 	l_batch_end			pon_bid_item_prices.line_number%TYPE;
824 BEGIN
825 
826 	-- Determine the latest ACTIVE bid and set rebid_flag to Y
827 	-- Since there can only exist a single ACTIVE bid on an amendment for
828 	-- a particular user on a site, we use the rownum = 1 optimisation
829 
830 	-- It is possible that another supplier from the same supplier company
831 	-- is modifying the draft. So we can't use the login in supplier's tpcid,
832 	-- we should use the tpcid of the user who creates the draft
833 	SELECT bh.bid_number, 'Y'
834 	INTO x_prev_bid_number, x_rebid_flag
835 	FROM pon_bid_headers bh
836 	WHERE bh.auction_header_id = p_auc_header_id
837 		AND bh.trading_partner_id = p_tpid
838 		AND bh.trading_partner_contact_id =
839 			(SELECT trading_partner_contact_id
840 			FROM pon_bid_headers bh2
841 			WHERE bh2.bid_number = p_draft_bid_num)
842 		AND bh.vendor_site_id = p_vensid
843 		AND bh.bid_status = 'ACTIVE'
844 		AND rownum = 1
845 	ORDER BY bh.publish_date DESC;
846 
847 	-- Update old_bid_number to new source bid
848 	UPDATE pon_bid_headers bh
849 	SET bh.old_bid_number = x_prev_bid_number
850 	WHERE bh.bid_number = p_draft_bid_num;
851 
852 	-- START BATCHING
853 
854 	-- Determine the maximum line number for the negotiation
855 	SELECT ah.max_internal_line_num
856 	INTO l_max_line_number
857 	FROM pon_auction_headers_all ah
858 	WHERE ah.auction_header_id = p_auc_header_id;
859 
860 	-- Define the initial batch range (line numbers are indexed from 1)
861 	l_batch_start := 1;
862 	IF (l_max_line_number < PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE) THEN
863 		l_batch_end := l_max_line_number;
864 	ELSE
865 		l_batch_end := PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
866 	END IF;
867 
868 	WHILE (l_batch_start <= l_max_line_number) LOOP
869 
870 		-- Copy over price columns and set copy_price_for_proxy_flag
871 		-- If the proxy has been exhausted, copy_price_for_proxy flag changed to N
872 		UPDATE pon_bid_item_prices bl
873 		SET (bl.price, bl.proxy_bid_limit_price, bl.bid_currency_price,
874 			bl.bid_currency_limit_price, bl.bid_currency_trans_price,
875 			bl.unit_price, bl.bid_currency_unit_price, bl.copy_price_for_proxy_flag,
876 			bl.old_price, bl.old_bid_currency_unit_price, bl.old_bid_currency_price,
877 			bl.old_bid_currency_limit_price) =
878 			(SELECT old_bl.price, old_bl.proxy_bid_limit_price, old_bl.bid_currency_price,
879 				old_bl.bid_currency_limit_price, old_bl.bid_currency_trans_price,
880 				old_bl.unit_price, old_bl.bid_currency_unit_price,
881 				decode(sign(old_bl.proxy_bid_limit_price - old_bl.price),
882 					0, 'N', 'Y'),
883 				old_bl.price, old_bl.bid_currency_unit_price, old_bl.bid_currency_price, old_bl.bid_currency_limit_price
884 			FROM pon_bid_item_prices old_bl
885 			WHERE old_bl.bid_number = x_prev_bid_number
889 			AND bl.line_number BETWEEN l_batch_start AND l_batch_end;
886 				AND old_bl.line_number = bl.line_number)
887 		WHERE bl.bid_number = p_draft_bid_num
888 			AND bl.copy_price_for_proxy_flag = 'Y'
890 
891 		-- Copy over the rank for all lines
892 		UPDATE pon_bid_item_prices bl
893 		SET rank =
894 			(SELECT old_bl.rank
895 			FROM pon_bid_item_prices old_bl
896 			WHERE old_bl.bid_number = x_prev_bid_number
897 				AND old_bl.line_number = bl.line_number)
898 		WHERE bl.bid_number = p_draft_bid_num
899 			AND bl.line_number BETWEEN l_batch_start AND l_batch_end;
900 
901 		-- Find the new batch range
902 		l_batch_start := l_batch_end + 1;
903 		IF (l_batch_end + PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE > l_max_line_number) THEN
904 			l_batch_end := l_max_line_number;
905 		ELSE
906 			l_batch_end := l_batch_end + PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
907 		END IF;
908 
909 	END LOOP;
910 
911 	-- END BATCHING
912 
913 EXCEPTION
914 	-- No ACTIVE bids on the current amendment
915 	WHEN NO_DATA_FOUND THEN
916 		SELECT bh.old_bid_number
917 		INTO x_prev_bid_number
918 		FROM pon_bid_headers bh
919 		WHERE bh.bid_number = p_draft_bid_num;
920 		x_rebid_flag := 'N';
921 
922 END handle_proxy;
923 
924 -- ======================================================================
925 -- PROCEDURE:	INSERT_INTO_BID_HEADER  PRIVATE
926 --  PARAMETERS:
927 --	p_auc_header_id		IN auction_header_id of negotiation
928 --	p_source_bid_num	IN source_bid to default from
929 --	p_tpid				IN trading partner id of supplier
930 --	p_tpname			IN trading partner name of supplier
931 --	p_tpcid				IN trading partner contact id of supplier
932 --	p_tpcname			IN trading partner contact name of supplier
933 --	p_userid			IN userid of bid creator
934 --	p_venid				IN vendor id
935 --	p_vensid			IN vendor site id to place bid for
936 --	p_venscode			IN vendor site code to place bid for
937 --	p_auctpid			IN buyers trading partner id
938 --	p_auctpcid			IN buyers trading partner contact id
939 --	p_buyer_user		IN flag indicating surrogate bid or not
940 --	p_rebid_flag		IN flag indicating rebid or not
941 --	x_bid_number		OUT bid number of the new bid
942 --
943 --  COMMENT: inserts a bid header for the new bid. Also generates the bid number
944 -- ======================================================================
945 PROCEDURE insert_into_bid_header
946 (
947 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
948 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
949 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
950 	p_tpname			IN pon_bid_headers.trading_partner_name%TYPE,
951 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
952 	p_tpcname			IN pon_bid_headers.trading_partner_contact_name%TYPE,
953 	p_userid			IN pon_bid_headers.created_by%TYPE,
954 	p_venid				IN pon_bid_headers.vendor_id%TYPE,
955 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE,
956 	p_venscode			IN pon_bid_headers.vendor_site_code%TYPE,
957 	p_auctpid			IN pon_bid_headers.surrog_bid_created_tp_id%TYPE,
958 	p_auctpcid			IN pon_bid_headers.surrog_bid_created_contact_id%TYPE,
959 	p_buyer_user		IN VARCHAR2,
960 	p_rebid_flag		IN VARCHAR2,
961 	p_prev_bid_disq		IN VARCHAR2,
962 	x_bid_number		OUT NOCOPY pon_bid_headers.bid_number%TYPE
963 ) IS
964     l_old_min_bid_change_type pon_auction_headers_all.min_bid_change_type%TYPE;
965     l_old_min_bid_change pon_auction_headers_all.min_bid_decrement%TYPE;
966     -- added by Allen Yang 2009/01/06 for surrogate bid bug 7664486
967     ----------------------------------------------------------------
968     l_two_part_flag pon_auction_headers_all.TWO_PART_FLAG%TYPE;
969     l_technical_evaluation_status pon_auction_headers_all.TECHNICAL_EVALUATION_STATUS%TYPE;
970     ----------------------------------------------------------------
971 BEGIN
972 
973     IF p_source_bid_num IS NOT NULL AND p_source_bid_num <> 0 THEN
974       SELECT pah.min_bid_change_type,
975              pah.min_bid_decrement
976              -- added by Allen Yang 2009/01/06 for surrogate bid bug 7664486
977              -------------------------------------------------------
978              , pah.TWO_PART_FLAG
979              , pah.TECHNICAL_EVALUATION_STATUS
980              -------------------------------------------------------
981       INTO l_old_min_bid_change_type,
982            l_old_min_bid_change
983            -- added by Allen Yang 2009/01/06 for surrogate bid bug 7664486
984            -------------------------------------------------------
985            , l_two_part_flag
986            , l_technical_evaluation_status
987            -------------------------------------------------------
988       FROM PON_AUCTION_HEADERS_ALL pah,
989            PON_BID_HEADERS pbh
990       WHERE pah.auction_header_id = pbh.auction_header_id
991       AND pbh.bid_number = p_source_bid_num;
992     END IF;
993 
994 	-- Generate next bid number
995 	SELECT pon_bid_headers_s.nextval INTO x_bid_number
996 	FROM dual;
997 
998 	INSERT INTO pon_bid_headers
999 	(
1000 		BID_NUMBER,
1001 		AUCTION_HEADER_ID,
1002 		BIDDERS_BID_NUMBER,
1003 		BID_TYPE,
1004 		CONTRACT_TYPE,
1005 		TRADING_PARTNER_CONTACT_NAME,
1006 		TRADING_PARTNER_CONTACT_ID,
1007 		TRADING_PARTNER_NAME,
1008 		TRADING_PARTNER_ID,
1009 		BID_STATUS,
1010 		BID_EFFECTIVE_DATE,
1014 		CARRIER_CODE,
1011 		BID_EXPIRATION_DATE,
1012 		DISQUALIFY_REASON,
1013 		FREIGHT_TERMS_CODE,
1015 		FOB_CODE,
1016 		NOTE_TO_AUCTION_OWNER,
1017 		LANGUAGE_CODE,
1018 		CREATION_DATE,
1019 		CREATED_BY,
1020 		LAST_UPDATE_DATE,
1021 		LAST_UPDATED_BY,
1022 		AUCTION_CREATION_DATE,
1023 		BID_CURRENCY_CODE,
1024 		RATE,
1025 		MIN_BID_CHANGE ,
1026 		PROXY_BID_FLAG ,
1027 		NUMBER_PRICE_DECIMALS,
1028 		DOCTYPE_ID,
1029 		VENDOR_ID,
1030 		VENDOR_SITE_ID ,
1031 		RATE_DSP,
1032 		INITIATE_APPROVAL,
1033 		DRAFT_LOCKED,
1034 		DRAFT_LOCKED_BY,
1035 		DRAFT_LOCKED_BY_CONTACT_ID,
1036 		DRAFT_LOCKED_DATE,
1037 		VENDOR_SITE_CODE,
1038 		SHORTLIST_FLAG,
1039 		ATTRIBUTE_LINE_NUMBER,
1040 		NOTE_TO_SUPPLIER,
1041 		SURROG_BID_CREATED_TP_ID,
1042 		SURROG_BID_CREATED_CONTACT_ID,
1043 		--SURROG_BID_RECEIPT_DATE,
1044 		SURROG_BID_ONLINE_ENTRY_DATE,
1045 		SURROG_BID_FLAG,
1046 		COLOR_SEQUENCE_ID,
1047 		OLD_NOTE_TO_AUCTION_OWNER,
1048 		OLD_BIDDERS_BID_NUMBER,
1049 		OLD_BID_EXPIRATION_DATE,
1050 		OLD_MIN_BID_CHANGE,
1051 		OLD_BID_STATUS,
1052 		OLD_SURROG_BID_RECEIPT_DATE,
1053 		REL12_DRAFT_FLAG,
1054 		OLD_BID_NUMBER
1055     --added by Allen Yang 2009/01/06 for surrogate bid bug 7664486
1056     --------------------------------------------------------------
1057     , SUBMIT_STAGE
1058     --------------------------------------------------------------
1059 	)
1060 	(SELECT
1061 		x_bid_number,				-- BID_NUMBER
1062 		ah.auction_header_id,		-- AUCTION_HEADER_ID
1063 		bh.bidders_bid_number,		-- BIDDERS_BID_NUMBER
1064 		'REVERSE',					-- BID_TYPE
1065 		ah.contract_type,			-- CONTRACT_TYPE
1066 		p_tpcname,					-- TRADING_PARTNER_CONTACT_NAME
1067 		p_tpcid,					-- TRADING_PARTNER_CONTACT_ID
1068 		p_tpname,					-- TRADING_PARTNER_NAME
1069 		p_tpid,						-- TRADING_PARTNER_ID
1070 		'DRAFT',					-- BID_STATUS
1071 		bh.bid_effective_date,		-- BID_EFFECTIVE_DATE
1072 		bh.bid_expiration_date,		-- BID_EXPIRATION_DATE
1073 		decode(p_prev_bid_disq, 'Y', bh.disqualify_reason, null), -- DISQUALIFY_REASON
1074 		ah.freight_terms_code,		-- FREIGHT_TERMS_CODE
1075 		ah.carrier_code,			-- CARRIER_CODE
1076 		ah.fob_code,				-- FOB_CODE
1077 		bh.note_to_auction_owner,	-- NOTE_TO_AUCTION_OWNER
1078 		userenv('LANG'),			-- LANGUAGE_CODE
1079 		SYSDATE,					-- CREATION_DATE
1080 		p_userid,					-- CREATED_BY
1081 		SYSDATE,					-- LAST_UPDATE_DATE
1082 		p_userid,					-- LAST_UPDATED_BY
1083 		ah.creation_date,			-- AUCTION_CREATION_DATE
1084 		nvl(bh.bid_currency_code, ah.currency_code), -- BID_CURRENCY_CODE
1085 		nvl(bh.rate, 1),			-- RATE
1086 	decode(ah.min_bid_change_type, l_old_min_bid_change_type,
1087     decode(ah.min_bid_decrement, l_old_min_bid_change, bh.min_bid_change, null), null),			-- MIN_BID_CHANGE
1088 		'N',						-- PROXY_BID_FLAG
1089 		nvl(bh.number_price_decimals, ah.number_price_decimals), -- NUMBER_PRICE_DECIMALS
1090 		ah.doctype_id,				-- DOCTYPE_ID
1091 		p_venid,					-- VENDOR_ID
1092 		p_vensid,					-- VENDOR_SITE_ID
1093 		nvl(bh.rate_dsp, 1),		-- RATE_DSP
1094 		bh.initiate_approval,		-- INITIATE_APPROVAL
1095 		'Y',						-- DRAFT_LOCKED
1096 		decode(p_buyer_user, 'Y', p_auctpid, p_tpid), -- DRAFT_LOCKED_BY
1097 		decode(p_buyer_user, 'Y', p_auctpcid, p_tpcid), -- DRAFT_LOCKED_BY_CONTACT_ID
1098 		SYSDATE,					-- DRAFT_LOCKED_DATE
1099 		p_venscode,					-- VENDOR_SITE_CODE
1100 		'N',						-- SHORTLIST_FLAG
1101 		-1,							-- ATTRIBUTE_LINE_NUMBER
1102 		ah.note_to_bidders,			-- NOTE_TO_SUPPLIER
1103 		decode(p_buyer_user, 'Y', p_auctpid, null), -- SURROG_BID_CREATED_TP_ID
1104 		decode(p_buyer_user, 'Y', p_auctpcid, null), -- SURROG_BID_CREATED_CONTACT_ID
1105 		--decode(p_buyer_user, 'Y', bh.surrog_bid_receipt_date, null),	-- SURROG_BID_RECEIPT_DATE
1106 		decode(p_buyer_user, 'Y', sysdate, null), -- SURROG_BID_ONLINE_ENTRY_DATE
1107 		p_buyer_user,				-- SURROG_BID_FLAG
1108 		bh.color_sequence_id,		-- COLOR_SEQUENCE_ID
1109 		decode(p_rebid_flag, 'Y', bh.note_to_auction_owner, null), -- OLD_NOTE_TO_AUCTION_OWNER
1110 		decode(p_rebid_flag, 'Y', bh.bidders_bid_number, null), -- OLD_BIDDERS_BID_NUMBER
1111 		decode(p_rebid_flag, 'Y', bh.bid_expiration_date, null), -- OLD_BID_EXPIRATION_DATE
1112 		decode(p_rebid_flag, 'Y', bh.min_bid_change, null), -- OLD_MIN_BID_CHANGE
1113 		decode(p_rebid_flag, 'Y', bh.bid_status, null),	-- OLD_BID_STATUS
1114 		decode(p_rebid_flag, 'Y', bh.surrog_bid_receipt_date, null), -- OLD_SURROG_BID_RECEIPT_DATE
1115 		'Y',						-- REL12_DRAFT_FLAG
1116 		decode(p_source_bid_num, 0, null, p_source_bid_num)        -- OLD_BID_NUMBER
1117     -- added by Allen Yang 2009/01/06 for surrogate bid bug 7664486
1118     -----------------------------------------------------------------------------
1119     -- set submit_stage to TECHNICAL when requoting in commercial stage
1120     , decode(p_rebid_flag, 'Y',                                -- SUBMIT_STAGE
1121              decode(l_two_part_flag, 'Y',
1122                     decode(p_buyer_user, 'Y',
1123                            decode(l_technical_evaluation_status, 'COMPLETED', 'TECHNICAL', null), null), null), null)
1124     -----------------------------------------------------------------------------
1125 	FROM pon_auction_headers_all ah, pon_bid_headers bh
1126 	WHERE ah.auction_header_id = p_auc_header_id
1127 		AND	bh.bid_number (+) = p_source_bid_num
1128 		AND ah.auction_header_id >= bh.auction_header_id (+));
1129 
1130 END insert_into_bid_header;
1134 --  PARAMETERS:
1131 
1132 -- ======================================================================
1133 -- PROCEDURE:	INSERT_INTO_BID_ITEMS  PRIVATE
1135 --	p_auc_header_id		IN auction_header_id of negotiation
1136 --	p_bid_number		IN bid number to insert lines for
1137 --	p_source_bid_num	IN source_bid to default from
1138 --	p_tpid				IN trading partner id of supplier
1139 --	p_userid			IN userid of bid creator
1140 --	p_vensid			IN vendor site id to place bid for
1141 --	p_rebid_flag		IN flag indicating rebid or not
1142 --	p_restricted_flag	IN flag indicating whether certain lines may be restricted
1143 --
1144 --  COMMENT: inserts lines for the new bid, defualting as necessary
1145 -- ======================================================================
1146 PROCEDURE insert_into_bid_items
1147 (
1148 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
1149 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
1150 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
1151 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
1152 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
1153 	p_userid			IN pon_bid_headers.created_by%TYPE,
1154 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE,
1155 	p_rebid_flag		IN VARCHAR2,
1156 	p_restricted_flag	IN VARCHAR2,
1157 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
1158 	p_batch_end		IN pon_bid_item_prices.line_number%TYPE,
1159         p_surrog_bid_flag       IN pon_bid_headers.surrog_bid_flag%TYPE
1160 ) IS
1161 	l_auctpid			pon_auction_headers_all.trading_partner_id%TYPE;
1162 	l_blanket			VARCHAR2(1);
1163 	l_full_qty			VARCHAR2(1);
1164 	l_enforce_prevrnd_price_flag  VARCHAR2(1);
1165 	l_prev_rnd_active_bid_number  NUMBER;
1166 	l_auction_header_id_prev_round NUMBER;
1167 	l_unit_price NUMBER;
1168 	l_quantity NUMBER;
1169         l_is_paused pon_auction_headers_all.is_paused%TYPE;
1170         l_last_pause_date pon_auction_headers_all.last_pause_date%TYPE;
1171         l_closed_compare_date DATE;
1172 BEGIN
1173 
1174 	SELECT ah.trading_partner_id,
1175 		decode(ah.contract_type, 'BLANKET', 'Y', 'CONTRACT', 'Y', 'N'),
1176 		decode(ah.full_quantity_bid_code, 'FULL_QTY_BIDS_REQD', 'Y', 'N'),
1177 		enforce_prevrnd_bid_price_flag,
1178 		auction_header_id_prev_round,
1179                 is_paused,
1180                 last_pause_date
1181 	INTO l_auctpid,
1182 		l_blanket,
1183 		l_full_qty,
1184 		l_enforce_prevrnd_price_flag,
1185 		l_auction_header_id_prev_round,
1186                 l_is_paused,
1187                 l_last_pause_date
1188 	FROM pon_auction_headers_all ah
1189 	WHERE ah.auction_header_id = p_auc_header_id;
1190 
1191 	INSERT INTO pon_bid_item_prices
1192 	(
1193 		AUCTION_HEADER_ID,
1194 		AUCTION_LINE_NUMBER,
1195 		BID_NUMBER,
1196 		LINE_NUMBER,
1197 		ITEM_DESCRIPTION,
1198 		CATEGORY_ID,
1199 		CATEGORY_NAME,
1200 		UOM,
1201 		QUANTITY,
1202 		PRICE,
1203 		MINIMUM_BID_PRICE,
1204 		PROMISED_DATE,
1205 		NOTE_TO_AUCTION_OWNER,
1206 		LANGUAGE_CODE,
1207 		CREATION_DATE,
1208 		CREATED_BY,
1209 		LAST_UPDATE_DATE,
1210 		LAST_UPDATED_BY,
1211 		AUCTION_CREATION_DATE,
1212 		SHIP_TO_LOCATION_ID,
1213 		PUBLISH_DATE,
1214 		PROXY_BID_LIMIT_PRICE,
1215 		PROXY_BID_LIMIT_PRICE_DATE,
1216 		BID_CURRENCY_PRICE,
1217 		BID_CURRENCY_LIMIT_PRICE,
1218 		PROXY_BID_FLAG,
1219 		FIRST_BID_PRICE,
1220 		UNIT_OF_MEASURE,
1221 		HAS_ATTRIBUTES_FLAG,
1222 		FREIGHT_TERMS_CODE,
1223 		TBD_PRICING_FLAG,
1224 		AUC_TRADING_PARTNER_ID,
1225 		BID_TRADING_PARTNER_ID,
1226 		TOTAL_WEIGHTED_SCORE,
1227 		RANK,
1228 		PO_MIN_REL_AMOUNT,
1229 		PO_BID_MIN_REL_AMOUNT,
1230 		PRICE_BREAK_TYPE,
1231 		HAS_SHIPMENTS_FLAG,
1232 		IS_CHANGED_LINE_FLAG,
1233 		HAS_PRICE_DIFFERENTIALS_FLAG,
1234 		PRICE_DIFF_SHIPMENT_NUMBER,
1235 		BID_CURRENCY_TRANS_PRICE,
1236 		UNIT_PRICE,
1237 		BID_CURRENCY_UNIT_PRICE,
1238 		GROUP_AMOUNT,
1239 		HAS_BID_PAYMENTS_FLAG,
1240 		ADVANCE_AMOUNT,
1241 		BID_CURR_ADVANCE_AMOUNT,
1242 		RECOUPMENT_RATE_PERCENT,
1243 		PROGRESS_PYMT_RATE_PERCENT,
1244 		RETAINAGE_RATE_PERCENT,
1245 		MAX_RETAINAGE_AMOUNT,
1246 		BID_CURR_MAX_RETAINAGE_AMT,
1247 		OLD_NO_OF_PAYMENTS,
1248 		OLD_PRICE,
1249 		OLD_BID_CURRENCY_UNIT_PRICE,
1250 		OLD_BID_CURRENCY_PRICE,
1251 		OLD_BID_CURRENCY_LIMIT_PRICE,
1252 		OLD_PO_BID_MIN_REL_AMOUNT,
1253 		OLD_QUANTITY,
1254 		OLD_PUBLISH_DATE,
1255 		OLD_PROMISED_DATE,
1256 		OLD_NOTE_TO_AUCTION_OWNER,
1257 		HAS_BID_FLAG,
1258 		OLD_BID_CURR_ADVANCE_AMOUNT,
1259 		OLD_RECOUPMENT_RATE_PERCENT,
1260 		OLD_PROGRESS_PYMT_RATE_PERCENT,
1261 		OLD_RETAINAGE_RATE_PERCENT,
1262 		OLD_BID_CURR_MAX_RETAINAGE_AMT,
1263 		COPY_PRICE_FOR_PROXY_FLAG,
1264 		BID_START_PRICE,
1265                 HAS_QUANTITY_TIERS
1266 	)
1267 	(SELECT
1268 		al.auction_header_id,		-- AUCTION_HEADER_ID
1269 		al.line_number,				-- AUCTION_LINE_NUMBER
1270 		p_bid_number,				-- BID_NUMBER
1271 		al.line_number,				-- LINE_NUMBER
1272 		al.item_description,		-- ITEM_DESCRIPTION
1273 		al.category_id,				-- CATEGORY_ID
1274 		al.category_name,			-- CATEGORY_NAME
1275 		al.uom_code,				-- UOM
1276 		decode(al.modified_date-old_al.modified_date,
1277 			0, bl.quantity, decode(l_blanket, 'Y', null,
1278 				decode(l_full_qty, 'Y', al.quantity,
1282 		decode(al.modified_date-old_al.modified_date,
1279 					decode(al.group_type, 'LOT_LINE', al.quantity,
1280 						decode(al.order_type_lookup_code, 'AMOUNT',
1281 						al.quantity, null))))), -- QUANTITY
1283 			0, bl.price, null), 	-- PRICE
1284 		decode(al.modified_date-old_al.modified_date,
1285 			0, bl.minimum_bid_price, null), -- MINIMUM_BID_PRICE
1286 		decode(al.modified_date-old_al.modified_date,
1287 			0, bl.promised_date, null), -- PROMISED_DATE
1288 		decode(al.modified_date-old_al.modified_date,
1289 			0, bl.note_to_auction_owner, null), -- NOTE_TO_AUCTION_OWNER
1290 		userenv('LANG'),			-- LANGUAGE_CODE
1291 		SYSDATE,					-- CREATION_DATE
1292 		p_userid,					-- CREATED_BY
1293 		SYSDATE,					-- LAST_UPDATE_DATE
1294 		p_userid,					-- LAST_UPDATED_BY
1295 		al.auction_creation_date,	-- AUCTION_CREATION_DATE
1296 		al.ship_to_location_id,		-- SHIP_TO_LOCATION_ID
1297 		decode(al.modified_date-old_al.modified_date,
1298 			0, bl.publish_date, null), -- PUBLISH_DATE
1299 		decode(al.modified_date-old_al.modified_date,
1300 			0, bl.proxy_bid_limit_price, null), -- PROXY_BID_LIMIT_PRICE
1301 		decode(al.modified_date-old_al.modified_date,
1302 			0, bl.proxy_bid_limit_price_date, null), -- PROXY_BID_LIMIT_PRICE_DATE
1303 		decode(al.modified_date-old_al.modified_date,
1304 			0, bl.bid_currency_price, null), -- BID_CURRENCY_PRICE
1305 		decode(al.modified_date-old_al.modified_date,
1306 			0, bl.bid_currency_limit_price, null), -- BID_CURRENCY_LIMIT_PRICE
1307 		'N',						-- PROXY_BID_FLAG
1308 		decode(al.modified_date-old_al.modified_date,
1309 			0, bl.first_bid_price, null), -- FIRST_BID_PRICE
1310 		al.unit_of_measure,			-- UNIT_OF_MEASURE
1311 		al.has_attributes_flag,		-- HAS_ATTRIBUTES_FLAG
1312 		al.freight_terms_code,		-- FREIGHT_TERMS_CODE
1313 		'N',						-- TBD_PRICING_FLAG
1314 		l_auctpid,					-- AUC_TRADING_PARTNER_ID
1315 		p_tpid,						-- BID_TRADING_PARTNER_ID
1316 		decode(al.modified_date-old_al.modified_date,
1317 			0, bl.total_weighted_score, null), -- TOTAL_WEIGHTED_SCORE
1318 		decode(p_rebid_flag, 'Y', bl.rank, null), -- RANK
1319 		decode(al.modified_date-old_al.modified_date,
1320 			0, bl.po_min_rel_amount, null), -- PO_MIN_REL_AMOUNT
1321 		decode(al.modified_date-old_al.modified_date,
1322 			0, bl.po_bid_min_rel_amount, null),	-- PO_BID_MIN_REL_AMOUNT
1323 		al.price_break_type,		-- PRICE_BREAK_TYPE
1324 		decode(al.modified_date-old_al.modified_date,
1325 			0, bl.has_shipments_flag, al.has_shipments_flag), -- HAS_SHIPMENTS_FLAG
1326 		-- Rebid: set changed_line to N
1327 		-- Otherwise it is the same as the has_bid_flag
1328 		decode(p_rebid_flag, 'Y', 'N',
1329 			decode(al.modified_date-old_al.modified_date, 0,
1330 				nvl(bl.has_bid_flag, 'N'), 'N')), -- IS_CHANGED_LINE_FLAG
1331 		al.has_price_differentials_flag,-- HAS_PRICE_DIFFERENTIALS_FLAG
1332 		al.price_diff_shipment_number,	-- PRICE_DIFF_SHIPMENT_NUMBER *
1333 		decode(al.modified_date-old_al.modified_date,
1334 			0, bl.bid_currency_trans_price, null), -- BID_CURRENCY_TRANS_PRICE
1335 		decode(al.modified_date-old_al.modified_date,
1336 			0, bl.unit_price, null), -- UNIT_PRICE
1337 		decode(al.modified_date-old_al.modified_date,
1338 			0, bl.bid_currency_unit_price, null), -- BID_CURRENCY_UNIT_PRICE
1339 		decode(al.modified_date-old_al.modified_date,
1340 			0, bl.group_amount, null), -- GROUP_AMOUNT
1341 		decode(g_copy_only_from_auc, 'Y', al.has_payments_flag,
1342 		           decode(al.modified_date-old_al.modified_date,0,bl.has_bid_payments_flag,al.has_payments_flag
1343 			         )
1344 		       ),--HAS_BID_PAYMENTS_FLAG
1345 		decode(al.modified_date-old_al.modified_date, 0,decode(g_advance_negotiable,'Y',bl.advance_amount,al.advance_amount
1346 		                                                      )
1347 							       , al.advance_amount
1348 		      ),--ADVANCE_AMOUNT
1349 		decode(al.modified_date-old_al.modified_date, 0,decode(g_advance_negotiable,'Y',bl.bid_curr_advance_amount
1350 		                                                         ,round(al.advance_amount * g_bid_rate, g_curr_prec)
1351 		                                                      )
1352 							       , round(al.advance_amount * g_bid_rate, g_curr_prec)
1353 		      ),--BID_CURR_ADVANCE_AMOUNT
1354 		decode(al.modified_date-old_al.modified_date, 0,decode(g_recoupment_negotiable,'Y',bl.recoupment_rate_percent
1355 		                                                                                  ,al.recoupment_rate_percent
1356 								      )
1357 							       , al.recoupment_rate_percent
1358 		      ),--RECOUPMENT_RATE_PERCENT
1359 		decode(al.modified_date-old_al.modified_date, 0,decode(g_prog_pymt_negotiable,'Y',bl.progress_pymt_rate_percent
1360 		                                                                                 ,al.progress_pymt_rate_percent
1361 								      )
1362 							       , al.progress_pymt_rate_percent
1363 		      ),--PROGRESS_PYMT_RATE_PERCENT
1364 		decode(al.modified_date-old_al.modified_date, 0,decode(g_rtng_negotiable,'Y',bl.retainage_rate_percent,al.retainage_rate_percent
1365 		                                                      )
1366 							       , al.retainage_rate_percent
1367 		      ),--RETAINAGE_RATE_PERCENT
1368 		decode(al.modified_date-old_al.modified_date, 0,decode(g_max_rtng_negotiable,'Y',bl.max_retainage_amount,al.max_retainage_amount
1369 		                                                      )
1370 							       , al.max_retainage_amount
1371 		      ),--MAX_RETAINAGE_AMOUNT
1375 							       , round(al.max_retainage_amount * g_bid_rate, g_curr_prec)
1372 		decode(al.modified_date-old_al.modified_date, 0,decode(g_max_rtng_negotiable,'Y',bl.bid_curr_max_retainage_amt
1373 		                                                        , round(al.max_retainage_amount * g_bid_rate, g_curr_prec)
1374 		                                                      )
1376 		),--BID_CURR_MAX_RETAINAGE_AMT
1377 	        decode(p_rebid_flag, 'Y', (select count(1) from pon_bid_payments_shipments
1378 		                          where bid_number=bl.bid_number and bid_line_number=bl.line_number)
1379 		                        ,null
1380 		      ),	--OLD_NO_OF_PAYMENTS
1381 		decode(p_rebid_flag, 'Y', bl.price, null), -- OLD_PRICE
1382 		decode(p_rebid_flag, 'Y', bl.bid_currency_unit_price, null),-- OLD_BID_CURRENCY_UNIT_PRICE
1383 		decode(p_rebid_flag, 'Y', bl.bid_currency_price, null), -- OLD_BID_CURRENCY_PRICE
1384 		decode(p_rebid_flag, 'Y', bl.bid_currency_limit_price, null), -- OLD_BID_CURRENCY_LIMIT_PRICE
1385 		decode(p_rebid_flag, 'Y', bl.po_bid_min_rel_amount, null), -- OLD_PO_BID_MIN_REL_AMOUNT
1386 		decode(p_rebid_flag, 'Y', bl.quantity, null), -- OLD_QUANTITY
1387 		decode(p_rebid_flag, 'Y', bl.publish_Date, null), -- OLD_PUBLISH_DATE
1388 		decode(p_rebid_flag, 'Y', bl.promised_Date, null), -- OLD_PROMISED_DATE
1389 		decode(p_rebid_flag, 'Y', bl.note_to_auction_owner, null), -- OLD_NOTE_TO_AUCTION_OWNER
1390 		-- If the line was modified, set to N, else set to source has_bid_flag
1391 		-- If the source has_bid_flag is null, set to N since there was no source bid
1392 		decode(al.modified_date-old_al.modified_date, 0,
1393 			nvl(bl.has_bid_flag, 'N'), 'N'), -- HAS_BID_FLAG
1394 		decode(p_rebid_flag, 'Y', bl.bid_curr_advance_amount, null), -- OLD_BID_CURR_ADVANCE_AMOUNT
1395 		decode(p_rebid_flag, 'Y', bl.recoupment_rate_percent, null), -- OLD_RECOUPMENT_RATE_PERCENT
1396 		decode(p_rebid_flag, 'Y', bl.progress_pymt_rate_percent, null), -- OLD_PROGRESS_PYMT_RATE_PERCENT
1397 		decode(p_rebid_flag, 'Y', bl.retainage_rate_percent, null), -- OLD_RETAINAGE_RATE_PERCENT
1398 		decode(p_rebid_flag, 'Y', bl.bid_curr_max_retainage_amt, null), -- OLD_BID_CURR_MAX_RETAINAGE_AMT
1399 		decode(p_rebid_flag, 'Y',
1400 			decode(sign(bl.proxy_bid_limit_price-bl.price), -1, 'Y', 'N'), 'N'), 	 -- COPY_PRICE_FOR_PROXY_FLAG
1401 		al.bid_start_price,
1402       		decode(al.modified_date-old_al.modified_date,
1403         		0, bl.has_quantity_tiers, al.has_quantity_tiers) -- HAS_quantity_tiers
1404 	FROM pon_auction_item_prices_all al,
1405         pon_auction_item_prices_all old_al,
1406         pon_bid_item_prices bl
1407 	WHERE al.auction_header_id = p_auc_header_id
1408 		AND bl.bid_number(+) = p_source_bid_num
1409 		AND bl.line_number(+) = al.line_number
1410 		AND old_al.auction_header_id (+) = bl.auction_header_id
1411 		AND old_al.line_number (+) = bl.line_number
1412 		AND al.line_number BETWEEN p_batch_start AND p_batch_end);
1413 
1414    -- determine if there exists an active bid in the previous round
1415    -- for the supplier/contact/site
1416    -- this will be used to populate the bid_start_price column
1417    IF (l_enforce_prevrnd_price_flag = 'Y') THEN
1418         BEGIN
1419             SELECT MAX(bid_number)
1420             INTO   l_prev_rnd_active_bid_number
1421             FROM   pon_bid_headers bh
1422             WHERE  bh.auction_header_id = l_auction_header_id_prev_round
1423             AND    bh.trading_partner_id = p_tpid
1424             AND    bh.trading_partner_contact_id = p_tpcid
1425             AND    bh.bid_status ='ACTIVE'
1426             AND    NVL(bh.vendor_site_id, -1) = NVL(p_vensid, -1);
1427 
1428             IF l_prev_rnd_active_bid_number IS NOT NULL THEN
1429             	-- if active bid exists then
1430             	-- update the bid_start_price for the current bid lines
1431             	-- using values from the previous round auction/bid
1432     	    	UPDATE     pon_bid_item_prices bl
1433         		SET        bid_start_price = nvl((SELECT pon_bid_defaulting_pkg.apply_price_factors(p_auc_header_id, l_prev_rnd_active_bid_number, al.line_number, bl1.unit_price, bl1.quantity)
1434                 	   		FROM   pon_auction_item_prices_all al, pon_bid_item_prices bl1
1435 	                   		WHERE  al.auction_header_id = l_auction_header_id_prev_round
1436     	               		AND    al.line_number = bl.line_number
1437                        		AND    al.line_number = bl1.line_number
1438         	           		AND    bl1.bid_number = l_prev_rnd_active_bid_number), bid_start_price)
1439 	        	WHERE      bl.bid_number = p_bid_number;
1440 	        END IF;
1441 
1442 		EXCEPTION
1443             WHEN NO_DATA_FOUND THEN
1444                 l_enforce_prevrnd_price_flag := 'N';
1445         END;
1446 	END IF;
1447    -- end 'start price for multi round negotiations' code
1448 
1449 	-- Delete excluded lines
1450 	IF (p_restricted_flag = 'Y') THEN
1451 
1452 		DELETE FROM pon_bid_item_prices bl
1453 		WHERE bl.bid_number = p_bid_number
1454 			AND bl.line_number BETWEEN p_batch_start AND p_batch_end
1455 			AND EXISTS
1456 				(SELECT le.line_number
1457 				FROM pon_party_line_exclusions le, pon_auction_item_prices_all al
1458 				WHERE al.auction_header_id = p_auc_header_id
1459 					AND al.line_number = bl.line_number
1460 					AND le.auction_header_id = al.auction_header_id
1461 					AND le.line_number = nvl(al.parent_line_number, al.line_number)
1462 					AND le.trading_partner_id = p_tpid
1463 					AND le.vendor_site_id = p_vensid);
1464 	END IF;
1465 
1466 
1467         -- In case of a non-rebid and non surrogate bid do not copy over
1468         -- closed lines.
1472                              ', l_closed_compare_date = ' || to_char (l_closed_compare_date, 'dd-mon-yyyy hh24:mi:ss') ||
1469         log_message ('insert_into_bid_items', 'p_rebid_flag = ' || p_rebid_flag ||
1470                              ', p_surrog_bid_flag = ' || p_surrog_bid_flag ||
1471                              ', l_is_paused = ' || l_is_paused ||
1473                              ', l_last_pause_date = ' || to_char (l_last_pause_date, 'dd-mon-yyyy hh24:mi:ss'));
1474 
1475         IF ( nvl (p_rebid_flag, 'N') = 'N' AND nvl (p_surrog_bid_flag, 'N') = 'N') THEN
1476 
1477           log_message ('insert_into_bid_items', 'This is not a rebid and this is not a surrogate bid.');
1478 
1479           IF (nvl (l_is_paused, 'N') = 'Y') THEN
1480             l_closed_compare_date := l_last_pause_date;
1481           ELSE
1482             l_closed_compare_date := sysdate;
1483           END IF;
1484 
1485           DELETE FROM pon_bid_item_prices bl
1486           WHERE bl.bid_number = p_bid_number
1487           AND bl.line_number BETWEEN p_batch_start AND p_batch_end
1488           AND EXISTS (SELECT al.line_number
1489                       FROM pon_auction_item_prices_all al
1490                       WHERE al.auction_header_id = p_auc_header_id
1491                       AND al.line_number = bl.line_number
1492                       AND al.close_bidding_date < l_closed_compare_date);
1493         END IF;
1494 
1495 END insert_into_bid_items;
1496 
1497 -- ======================================================================
1498 -- PROCEDURE:	INSERT_INTO_HEADER_ATTRIBUTES  PRIVATE
1499 --  PARAMETERS:
1500 --	p_auc_header_id		IN auction_header_id of negotiation
1501 --	p_bid_number		IN bid number to insert attributes for
1502 --	p_source_bid_num	IN source_bid to default from
1503 --	p_userid			IN userid of bid creator
1504 --	p_rebid_flag		IN flag indicating rebid or not
1505 --
1506 --  COMMENT: inserts header attributes for the new bid, defualting as necessary
1507 -- ======================================================================
1508 PROCEDURE insert_into_header_attributes
1509 (
1510 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
1511 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
1512 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
1513 	p_userid			IN pon_bid_headers.created_by%TYPE,
1514 	p_rebid_flag		IN VARCHAR2
1515 ) IS
1516 
1517 l_has_scoring_teams_flag     pon_auction_headers_all.has_scoring_teams_flag%TYPE;
1518 
1519 BEGIN
1520 
1521 -- Bug 5046909 - Determine if team scoring is enabled
1522 -- If team scoring is enabled, we do not copy the score over from the
1523 -- earlier bid. If team scoring is not enabled, we copy the score over
1524 -- for a header attribute only if the attribute has not been modified.
1525 -- In both cases, scores by individual scorers are not copied over -
1526 -- only the final one is
1527 -- Adding this SELECT from auction_headers_all - ideally, this should
1528 -- be combined and only one call made for the entire flow...will log a
1529 -- tracking bug for this
1530 
1531 
1532  SELECT has_scoring_teams_flag
1533    INTO l_has_scoring_teams_flag
1534    FROM pon_auction_headers_all
1535   WHERE auction_header_id = p_auc_header_id;
1536 
1537 	-- Insert header attributes
1538 	INSERT INTO pon_bid_attribute_values
1539 	(
1540 		AUCTION_HEADER_ID,
1541 		AUCTION_LINE_NUMBER,
1542 		BID_NUMBER,
1543 		LINE_NUMBER,
1544 		ATTRIBUTE_NAME,
1545 		DATATYPE,
1546 		VALUE,
1547 		CREATION_DATE,
1548 		CREATED_BY,
1549 		LAST_UPDATE_DATE,
1550 		LAST_UPDATED_BY,
1551 		SCORE,
1552 		SEQUENCE_NUMBER,
1553 		ATTR_LEVEL,
1554 		WEIGHTED_SCORE,
1555 		ATTR_GROUP_SEQ_NUMBER,
1556 		ATTR_DISP_SEQ_NUMBER,
1557 		OLD_VALUE
1558 	)
1559 	(SELECT
1560 		aa.auction_header_id,		-- AUCTION_HEADER_ID
1561 		aa.line_number,				-- AUCTION_LINE_NUMBER
1562 		p_bid_number,				-- BID_NUMBER
1563 		aa.line_number,				-- LINE_NUMBER
1564 		aa.attribute_name,			-- ATTRIBUTE_NAME
1565 		aa.datatype,				-- DATATYPE
1566 		decode(aa.modified_date-old_aa.modified_date,
1567 			0, ba.value, null), -- VALUE
1568 		sysdate,					-- CREATION_DATE
1569 		p_userid,					-- CREATED_BY
1570 		sysdate,					-- LAST_UPDATE_DATE
1571 		p_userid,					-- LAST_UPDATED_BY
1572 		DECODE(l_has_scoring_teams_flag, 'N',decode(aa.modified_date-old_aa.modified_date,
1573 			0, ba.score, null),'Y', NULL), -- SCORE
1574 		aa.sequence_number,			-- SEQUENCE_NUMBER
1575 		aa.attr_level,				-- ATTR_LEVEL
1576 		decode(l_has_scoring_teams_flag, 'N', decode(aa.modified_date-old_aa.modified_date,
1577 			0, ba.weighted_score, null), 'Y', NULL),	-- WEIGHTED_SCORE
1578 		aa.attr_group_seq_number,	-- ATTR_GROUP_SEQ_NUMBER
1579 		aa.attr_disp_seq_number,	-- ATTR_DISP_SEQ_NUMBER
1580 		decode(p_rebid_flag, 'Y', ba.value, null) -- OLD_VALUE
1581 	FROM pon_auction_attributes aa,
1582 		pon_bid_attribute_values ba,
1583 		pon_auction_attributes old_aa
1584 	WHERE aa.auction_header_id = p_auc_header_id
1585 		AND aa.line_number= -1
1586 		AND ba.bid_number (+) = p_source_bid_num
1587 		AND ba.line_number (+) = aa.line_number
1588 		AND ba.sequence_number (+) = aa.sequence_number
1589 		AND ba.auction_header_id = old_aa.auction_header_id (+)
1590 		AND ba.line_number = old_aa.line_number (+)
1591 		AND ba.sequence_number = old_aa.sequence_number (+));
1592 
1593 END insert_into_header_attributes;
1594 
1598 --	p_auc_header_id		IN auction_header_id of negotiation
1595 -- ======================================================================
1596 -- PROCEDURE:	INSERT_INTO_LINE_ATTRIBUTES  PRIVATE
1597 --  PARAMETERS:
1599 --	p_bid_number		IN bid number to insert attributes for
1600 --	p_source_bid_num	IN source_bid to default from
1601 --	p_userid			IN userid of bid creator
1602 --	p_rebid_flag		IN flag indicating rebid or not
1603 --
1604 --  COMMENT: inserts line attributes for the new bid, defualting as necessary
1605 -- ======================================================================
1606 PROCEDURE insert_into_line_attributes
1607 (
1608 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
1609 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
1610 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
1611 	p_userid			IN pon_bid_headers.created_by%TYPE,
1612 	p_rebid_flag		IN VARCHAR2,
1613 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
1614 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE
1615 ) IS
1616 BEGIN
1617 
1618 	-- Insert line attributes
1619 	INSERT INTO pon_bid_attribute_values
1620 	(
1621 		AUCTION_HEADER_ID,
1622 		AUCTION_LINE_NUMBER,
1623 		BID_NUMBER,
1624 		LINE_NUMBER,
1625 		ATTRIBUTE_NAME,
1626 		DATATYPE,
1627 		VALUE,
1628 		CREATION_DATE,
1629 		CREATED_BY,
1630 		LAST_UPDATE_DATE,
1631 		LAST_UPDATED_BY,
1632 		SCORE,
1633 		SEQUENCE_NUMBER,
1634 		ATTR_LEVEL,
1635 		WEIGHTED_SCORE,
1636 		ATTR_GROUP_SEQ_NUMBER,
1637 		ATTR_DISP_SEQ_NUMBER,
1638 		OLD_VALUE
1639 	)
1640 	-- NOTE: we check the has_bid_flag because it is 'N' if
1641 	-- the line has been modified since the defaulting happened
1642 	(SELECT
1643 		aa.auction_header_id,		-- AUCTION_HEADER_ID
1644 		aa.line_number,				-- AUCTION_LINE_NUMBER
1645 		p_bid_number,				-- BID_NUMBER
1646 		aa.line_number,				-- LINE_NUMBER
1647 		aa.attribute_name,			-- ATTRIBUTE_NAME
1648 		aa.datatype,				-- DATATYPE
1649 		decode(bl.has_bid_flag, 'Y', ba.value, null), -- VALUE
1650 		sysdate,					-- CREATION_DATE
1651 		p_userid,					-- CREATED_BY
1652 		sysdate,					-- LAST_UPDATE_DATE
1653 		p_userid,					-- LAST_UPDATED_BY
1654 		decode(bl.has_bid_flag, 'Y', ba.score, null), -- SCORE
1655 		aa.sequence_number,			-- SEQUENCE_NUMBER
1656 		aa.attr_level,				-- ATTR_LEVEL
1657 		decode(bl.has_bid_flag, 'Y', ba.weighted_score, null), -- WEIGHTED_SCORE
1658 		aa.attr_group_seq_number,	-- ATTR_GROUP_SEQ_NUMBER
1659 		aa.attr_disp_seq_number,	-- ATTR_DISP_SEQ_NUMBER
1660 		decode(p_rebid_flag, 'Y', ba.value, null) -- OLD_VALUE
1661 	FROM pon_auction_attributes aa,
1662 		pon_bid_attribute_values ba,
1663 		pon_bid_item_prices bl
1664 	WHERE aa.auction_header_id = p_auc_header_id
1665 		AND aa.line_number > 0
1666 		AND bl.bid_number = p_bid_number
1667 		AND bl.line_number = aa.line_number
1668 		AND ba.bid_number (+) = p_source_bid_num
1669 		AND ba.line_number (+) = aa.line_number
1670 		AND ba.sequence_number (+) = aa.sequence_number
1671 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
1672 
1673 END insert_into_line_attributes;
1674 
1675 -- ======================================================================
1676 -- PROCEDURE:	INSERT_INTO_PRICE_FACTORS  PRIVATE
1677 --  PARAMETERS:
1678 --	p_auc_header_id		IN auction_header_id of negotiation
1679 --	p_bid_number		IN bid number to insert price factors for
1680 --	p_source_bid_num	IN source_bid to default from
1681 --	p_userid			IN userid of bid creator
1682 --	p_supp_seq_number	IN sequence number if supplier was invited
1683 --	p_rebid_flag		IN flag indicating rebid or not
1684 --
1685 --  COMMENT: insert price factors for the new bid, defualting as necessary
1686 -- ======================================================================
1687 PROCEDURE insert_into_price_factors
1688 (
1689 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
1690 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
1691 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
1692 	p_userid			IN pon_bid_headers.created_by%TYPE,
1693 	p_supp_seq_number	IN pon_pf_supplier_values.supplier_seq_number%TYPE,
1694 	p_rebid_flag		IN VARCHAR2,
1695 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
1696 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE
1697 ) IS
1698 	l_price_prec		pon_bid_headers.number_price_decimals%TYPE;
1699 	l_curr_prec			fnd_currencies.precision%TYPE;
1700 	l_rate				pon_bid_headers.rate%TYPE;
1701 	l_supplier_view		pon_auction_headers_all.supplier_view_type%TYPE;
1702 	l_pf_type			pon_auction_headers_all.pf_type_allowed%TYPE;
1703 BEGIN
1704 
1705 	-- Get bid currency precisions and rate
1706 	SELECT bh.number_price_decimals,
1707 		cu.precision,
1708 		bh.rate
1709 	INTO l_price_prec,
1710 		l_curr_prec,
1711 		l_rate
1712 	FROM pon_bid_headers bh,
1713 		fnd_currencies cu
1714 	WHERE bh.bid_number = p_bid_number
1715 		AND cu.currency_code = bh.bid_currency_code;
1716 
1717 	-- Get the price factor type info
1718 	SELECT ah.supplier_view_type, ah.pf_type_allowed
1719 	INTO l_supplier_view, l_pf_type
1720 	FROM pon_auction_headers_all ah
1721 	WHERE ah.auction_header_id = p_auc_header_id;
1722 
1723 	-- copy over all supplier price factors, including line price
1724 	-- do not copy line price pf for lines with display_price_factors_flag = N
1725 	IF (l_supplier_view <> 'UNTRANSFORMED') THEN
1726 
1727 		INSERT INTO pon_bid_price_elements
1728 		(
1729 			BID_NUMBER,
1730 			LINE_NUMBER,
1731 			PRICE_ELEMENT_TYPE_ID,
1735 			BID_CURRENCY_VALUE,
1732 			AUCTION_HEADER_ID,
1733 			PRICING_BASIS,
1734 			AUCTION_CURRENCY_VALUE,
1736 			SEQUENCE_NUMBER,
1737 			CREATION_DATE,
1738 			CREATED_BY,
1739 			LAST_UPDATE_DATE,
1740 			LAST_UPDATED_BY,
1741 			PF_TYPE,
1742 			OLD_BID_CURRENCY_VALUE
1743 		)
1744 		(SELECT
1745 			p_bid_number,				-- BID_NUMBER
1746 			apf.line_number,			-- LINE_NUMBER
1747 			apf.price_element_type_id,	-- PRICE_ELEMENT_TYPE_ID
1748 			p_auc_header_id,			-- AUCTION_HEADER_ID
1749 			apf.pricing_basis,			-- PRICING_BASIS
1750 			decode(bl.has_bid_flag, 'Y',
1751 				bpf.auction_currency_value, null), -- AUCTION_CURRENCY_VALUE
1752 			decode(bl.has_bid_flag, 'Y',
1753 				bpf.bid_currency_value, null), -- BID_CURRENCY_VALUE
1754 			apf.sequence_number,		-- SEQUENCE_NUMBER
1755 			sysdate,					-- CREATION_DATE
1756 			p_userid,					-- CREATED_BY
1757 			sysdate,					-- LAST_UPDATE_DATE
1758 			p_userid,					-- LAST_UPDATED_BY
1759 			apf.pf_type,				-- PF_TYPE
1760 			decode(p_rebid_flag, 'Y', bpf.bid_currency_value, null) -- OLD_BID_CURRENCY_VALUE
1761 		FROM pon_price_elements apf,
1762 			pon_bid_price_elements bpf,
1763 			pon_bid_item_prices bl
1764 		WHERE apf.auction_header_id = p_auc_header_id
1765 			AND apf.pf_type = 'SUPPLIER'			-- only for supplier price factors
1766 			AND bl.bid_number = p_bid_number
1767 			AND bl.line_number = apf.line_number
1768 			AND bl.display_price_factors_flag = 'Y' -- only for lines with price factors
1769 			AND bpf.bid_number (+) = p_source_bid_num
1770 			AND bpf.line_number (+) = apf.line_number
1771 			AND bpf.price_element_type_id (+) = apf.price_element_type_id
1772 			AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
1773 	END IF;
1774 
1775 	-- copy over all buyer price factors that can be displayed to the supplier
1776 	-- display flag checked and have nonzero value
1777 	-- need to populate bid_currency_value, rounding as necessary
1778 	IF (p_supp_seq_number IS NOT null AND l_pf_type <> 'SUPPLIER') THEN
1779 
1780 		INSERT INTO pon_bid_price_elements
1781 		(
1782 			BID_NUMBER,
1783 			LINE_NUMBER,
1784 			PRICE_ELEMENT_TYPE_ID,
1785 			AUCTION_HEADER_ID,
1786 			PRICING_BASIS,
1787 			AUCTION_CURRENCY_VALUE,
1788 			BID_CURRENCY_VALUE,
1789 			SEQUENCE_NUMBER,
1790 			CREATION_DATE,
1791 			CREATED_BY,
1792 			LAST_UPDATE_DATE,
1793 			LAST_UPDATED_BY,
1794 			PF_TYPE,
1795 			OLD_BID_CURRENCY_VALUE
1796 		)
1797 		(SELECT
1798 			p_bid_number,				-- BID_NUMBER
1799 			apf.line_number,			-- LINE_NUMBER
1800 			apf.price_element_type_id,	-- PRICE_ELEMENT_TYPE_ID
1801 			p_auc_header_id,			-- AUCTION_HEADER_ID
1802 			apf.pricing_basis,			-- PRICING_BASIS
1803 			pf.value,					-- AUCTION_CURRENCY_VALUE
1804 			decode(apf.pricing_basis,
1805 				'PER_UNIT', round(pf.value * l_rate, l_price_prec),
1806 				'FIXED_AMOUNT', round(pf.value * l_rate, l_curr_prec),
1807 				'PERCENTAGE', pf.value), -- BID_CURRENCY_VALUE
1808 			apf.sequence_number,		-- SEQUENCE_NUMBER
1809 			sysdate,					-- CREATION_DATE
1810 			p_userid,					-- CREATED_BY
1811 			sysdate,					-- LAST_UPDATE_DATE
1812 			p_userid,					-- LAST_UPDATED_BY
1813 			apf.pf_type,				-- PF_TYPE
1814 			null						-- OLD_BID_CURRENCY_VALUE
1815 		FROM pon_price_elements apf,
1816 			pon_pf_supplier_values pf,
1817 			pon_bid_item_prices bl
1818 		WHERE apf.auction_header_id = p_auc_header_id
1819 			AND apf.pf_type = 'BUYER'			-- only buyer pf that are to be displayed
1820 			AND apf.display_to_suppliers_flag = 'Y'
1821 			AND bl.bid_number = p_bid_number
1822 			AND bl.line_number = apf.line_number
1823 			AND bl.display_price_factors_flag = 'Y'
1824 			AND pf.auction_header_id = apf.auction_header_id
1825 			AND pf.line_number = apf.line_number
1826 			AND pf.pf_seq_number = apf.sequence_number
1827 			AND pf.supplier_seq_number = p_supp_seq_number
1828 			AND nvl(pf.value, 0) <> 0
1829 			AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
1830 	END IF;
1831 
1832 END	insert_into_price_factors;
1833 
1834 -- ======================================================================
1835 -- PROCEDURE:	INSERT_INTO_PRICE_TIERS  PRIVATE
1836 --  PARAMETERS:
1837 --	p_auc_header_id		IN auction_header_id of negotiation
1838 --	p_bid_number		IN bid number to insert price breaks for
1839 --	p_source_bid_num	IN source_bid to default from
1840 --	p_userid			IN userid of bid creator
1841 --	p_rebid_flag		IN flag indicating rebid or not
1842 --
1843 --  COMMENT: inserts price tiers for the new bid, defualting as necessary
1844 -- ======================================================================
1845 PROCEDURE insert_into_price_tiers
1846 (
1847 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
1848 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
1849 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
1850 	p_userid			IN pon_bid_headers.created_by%TYPE,
1851 	p_rebid_flag		IN VARCHAR2,
1852 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
1853 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE
1854 ) IS
1855 BEGIN
1856 
1857 	-- Get all auction side price breaks for modified lines that had a bid
1858 	-- or for unmodified lines that had no bid
1859 	INSERT INTO pon_bid_shipments
1860 	(
1861 		BID_NUMBER,
1862 		LINE_NUMBER,
1863 		SHIPMENT_NUMBER,
1864 		AUCTION_HEADER_ID,
1865 		AUCTION_LINE_NUMBER,
1866 		AUCTION_SHIPMENT_NUMBER,
1867 		SHIPMENT_TYPE,
1868 		SHIP_TO_ORGANIZATION_ID,
1872 		PRICE_TYPE,
1869 		SHIP_TO_LOCATION_ID,
1870 		QUANTITY,
1871 		MAX_QUANTITY,
1873 		PRICE,
1874 		BID_CURRENCY_PRICE,
1875 		PRICE_DISCOUNT,
1876 		EFFECTIVE_START_DATE,
1877 		EFFECTIVE_END_DATE,
1878 		CREATION_DATE,
1879 		CREATED_BY,
1880 		LAST_UPDATE_DATE,
1881 		LAST_UPDATED_BY,
1882 		LAST_UPDATE_LOGIN,
1883 		HAS_PRICE_DIFFERENTIALS_FLAG,
1884 		UNIT_PRICE,
1885 		BID_CURRENCY_UNIT_PRICE
1886 	)
1887 	(SELECT
1888 		p_bid_number,				-- BID_NUMBER
1889 		apb.line_number,			-- LINE_NUMBER
1890 		apb.shipment_number+1,		-- SHIPMENT_NUMBER
1891 		p_auc_header_id,			-- AUCTION_HEADER_ID
1892 		apb.line_number,			-- AUCTION_LINE_NUMBER
1893                 apb.shipment_number, -- AUCTION_SHIPMENT_NUMBER
1894 		apb.shipment_type, -- SHIPMENT_TYPE
1895 		apb.ship_to_organization_id, -- SHIP_TO_ORGANIZATION_ID
1896 		apb.ship_to_location_id, -- SHIP_TO_LOCATION_ID
1897 		apb.quantity, -- QUANTITY
1898                 apb.max_quantity,  --- MAX_QUANTITY
1899 		'PRICE', -- PRICE_TYPE
1900 		apb.price, 	-- PRICE
1901 		null,		-- BID_CURRENCY_PRICE
1902 		null,			-- PRICE_DISCOUNT
1903 		apb.effective_start_date, -- EFFECTIVE_START_DATE
1904 		apb.effective_end_date, -- EFFECTIVE_END_DATE
1905 		sysdate,					-- CREATION_DATE
1906 		p_userid,					-- CREATED_BY
1907 		sysdate,					-- LAST_UPDATE_DATE
1908 		p_userid,					-- LAST_UPDATED_BY
1909 		null,						-- LAST_UPDATE_LOGIN
1910 		apb.has_price_differentials_flag, -- HAS_PRICE_DIFFERENTIALS_FLAG
1911 		null,				-- UNIT_PRICE
1912 		null                           -- BID_CURRENCY_UNIT_PRICE
1913 	FROM pon_auction_shipments_all apb,
1914 		pon_bid_item_prices bl
1915 	WHERE apb.auction_header_id = p_auc_header_id
1916 		AND bl.bid_number = p_bid_number
1917 		AND bl.line_number = apb.line_number
1918 		-- we only insert those price breaks for which the line was modified
1919 		-- or had no previosu bid on it - has_bid_flag = N in both cases
1920 		AND bl.has_bid_flag = 'N'
1921 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
1922 
1923 	-- Get only-bid-side price breaks for unmodified lines
1924 	INSERT INTO pon_bid_shipments
1925 	(
1926 		BID_NUMBER,
1927 		LINE_NUMBER,
1928 		SHIPMENT_NUMBER,
1929 		AUCTION_HEADER_ID,
1930 		AUCTION_LINE_NUMBER,
1931 		AUCTION_SHIPMENT_NUMBER,
1932 		SHIPMENT_TYPE,
1933 		SHIP_TO_ORGANIZATION_ID,
1934 		SHIP_TO_LOCATION_ID,
1935 		QUANTITY,
1936                 MAX_QUANTITY,
1937 		PRICE_TYPE,
1938 		PRICE,
1939 		BID_CURRENCY_PRICE,
1940 		PRICE_DISCOUNT,
1941 		EFFECTIVE_START_DATE,
1942 		EFFECTIVE_END_DATE,
1943 		CREATION_DATE,
1944 		CREATED_BY,
1945 		LAST_UPDATE_DATE,
1946 		LAST_UPDATED_BY,
1947 		LAST_UPDATE_LOGIN,
1948 		HAS_PRICE_DIFFERENTIALS_FLAG,
1949 		UNIT_PRICE,
1950 		BID_CURRENCY_UNIT_PRICE,
1951  		OLD_BID_CURRENCY_UNIT_PRICE,
1952 		OLD_BID_CURRENCY_PRICE,
1953 		OLD_PRICE_DISCOUNT,
1954 		OLD_SHIP_TO_ORG_ID,
1955 		OLD_SHIP_TO_LOC_ID,
1956 		OLD_EFFECTIVE_START_DATE,
1957 		OLD_EFFECTIVE_END_DATE,
1958 		OLD_QUANTITY,
1959                 OLD_MAX_QUANTITY,
1960 		OLD_PRICE_TYPE
1961 	)
1962 	(SELECT
1963 		p_bid_number,				-- BID_NUMBER
1964 		bpb.line_number,			-- LINE_NUMBER
1965 		bpb.shipment_number,		-- SHIPMENT_NUMBER
1966 		p_auc_header_id,			-- AUCTION_HEADER_ID
1967 		bpb.line_number,			-- AUCTION_LINE_NUMBER
1968 		bpb.auction_shipment_number,-- AUCTION_SHIPMENT_NUMBER
1969 		bpb.shipment_type,			-- SHIPMENT_TYPE
1970 		bpb.ship_to_organization_id,-- SHIP_TO_ORGANIZATION_ID
1971 		bpb.ship_to_location_id,	-- SHIP_TO_LOCATION_ID
1972 		bpb.quantity,				-- QUANTITY
1973                 bpb.max_quantity,           -- MAX_QUANTITY
1974 		bpb.price_type,				-- PRICE_TYPE
1975 		bpb.price,					-- PRICE
1976 		bpb.bid_currency_price,		-- BID_CURRENCY_PRICE
1977 		bpb.price_discount,			-- PRICE_DISCOUNT
1978 		bpb.effective_start_date,	-- EFFECTIVE_START_DATE
1979 		bpb.effective_end_date,		-- EFFECTIVE_END_DATE
1980 		sysdate,					-- CREATION_DATE
1981 		p_userid,					-- CREATED_BY
1982 		sysdate,					-- LAST_UPDATE_DATE
1983 		p_userid,					-- LAST_UPDATED_BY
1984 		null,						-- LAST_UPDATE_LOGIN
1985 		bpb.has_price_differentials_flag, -- HAS_PRICE_DIFFERENTIALS_FLAG
1986 		bpb.unit_price,				-- UNIT_PRICE
1987 		bpb.bid_currency_unit_price,-- BID_CURRENCY_UNIT_PRICE
1988  		decode(p_rebid_flag, 'Y', bpb.bid_currency_unit_price, null), -- OLD_BID_CURRENCY_UNIT_PRICE
1989 		decode(p_rebid_flag, 'Y', bpb.bid_currency_price, null), -- OLD_BID_CURRENCY_PRICE
1990 		decode(p_rebid_flag, 'Y', bpb.price_discount, null), -- OLD_PRICE_DISCOUNT
1991 		decode(p_rebid_flag, 'Y', bpb.ship_to_organization_id, null), -- OLD_SHIP_TO_ORG_ID
1992 		decode(p_rebid_flag, 'Y', bpb.ship_to_location_id, null), -- OLD_SHIP_TO_LOC_ID
1993 		decode(p_rebid_flag, 'Y', bpb.effective_start_date, null), -- OLD_EFFECTIVE_START_DATE
1994 		decode(p_rebid_flag, 'Y', bpb.effective_end_date, null), -- OLD_EFFECTIVE_END_DATE
1995 		decode(p_rebid_flag, 'Y', bpb.quantity, null), -- OLD_QUANTITY
1996                 decode(p_rebid_flag, 'Y', bpb.max_quantity, null), -- OLD_MAX_QUANTITY
1997 		decode(p_rebid_flag, 'Y', bpb.price_type, null) -- OLD_PRICE_TYPE
1998 	FROM pon_bid_shipments bpb,
1999 		pon_bid_item_prices bl
2000 	WHERE bpb.bid_number = p_source_bid_num
2001 		AND bl.bid_number = p_bid_number
2002 		AND bl.line_number = bpb.line_number
2003 		-- only unmodified lines with bids
2007 END insert_into_price_tiers;
2004 		AND bl.has_bid_flag = 'Y'
2005 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
2006 
2008 
2009 -- ======================================================================
2010 -- PROCEDURE:	INSERT_INTO_PRICE_DIFF  PRIVATE
2011 --  PARAMETERS:
2012 --	p_auc_header_id		IN auction_header_id of negotiation
2013 --	p_bid_number		IN bid number to insert price differentials for
2014 --	p_source_bid_num	IN source_bid to default from
2015 --	p_userid			IN userid of bid creator
2016 --	p_rebid_flag		IN flag indicating rebid or not
2017 --
2018 --  COMMENT: inserts price differentials for the new bid, defualting as necessary
2019 -- ======================================================================
2020 PROCEDURE insert_into_price_diff
2021 (
2022 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
2023 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
2024 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
2025 	p_userid			IN pon_bid_headers.created_by%TYPE,
2026 	p_rebid_flag		IN VARCHAR2,
2027 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
2028 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE
2029 ) IS
2030 BEGIN
2031 
2032 	INSERT INTO pon_bid_price_differentials
2033 	(
2034 		AUCTION_HEADER_ID,
2035 		BID_NUMBER,
2036 		LINE_NUMBER,
2037 		SHIPMENT_NUMBER,
2038 		PRICE_DIFFERENTIAL_NUMBER,
2039 		PRICE_TYPE,
2040 		MULTIPLIER,
2041 		CREATION_DATE,
2042 		CREATED_BY,
2043 		LAST_UPDATE_DATE,
2044 		LAST_UPDATED_BY,
2045 		LAST_UPDATE_LOGIN,
2046 		OLD_MULTIPLIER
2047 	)
2048 	(
2049 	-- Insert all line level price differentials
2050 	(SELECT
2051 		p_auc_header_id,			-- AUCTION_HEADER_ID
2052 		p_bid_number,				-- BID_NUMBER
2053 		apd.line_number,			-- LINE_NUMBER
2054 		apd.shipment_number,		-- SHIPMENT_NUMBER
2055 		apd.price_differential_number, -- PRICE_DIFFERENTIAL_NUMBER
2056 		apd.price_type,				-- PRICE_TYPE
2057 		decode(bl.has_bid_flag, 'Y', bpd.multiplier, null), -- MULTIPLIER
2058 		sysdate,					-- CREATION_DATE
2059 		p_userid,					-- CREATED_BY
2060 		sysdate,					-- LAST_UPDATE_DATE
2061 		p_userid,					-- LAST_UPDATED_BY
2062 		null,						-- LAST_UPDATE_LOGIN
2063 		decode(p_rebid_flag, 'Y', bpd.multiplier, null) -- OLD_MULTIPLIER
2064 	FROM pon_price_differentials apd,
2065 		pon_bid_price_differentials bpd,
2066 		pon_bid_item_prices bl
2067 	WHERE apd.auction_header_id = p_auc_header_id
2068 		AND apd.shipment_number = -1				-- only line level differentials
2069 		AND bl.auction_header_id = apd.auction_header_id
2070                 AND bl.bid_number = p_bid_number
2071 		AND bl.line_number = apd.line_number
2072 		AND bpd.bid_number (+) = p_source_bid_num
2073 		AND bpd.line_number (+) = apd.line_number
2074 		AND bpd.shipment_number (+) = apd.shipment_number
2075 		AND bpd.price_differential_number (+) = apd.price_differential_number
2076 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end)
2077 
2078 	UNION
2079 
2080 	-- Insert shipment level price differentials, but only for
2081 	-- those shipments that got copied over
2082 	(SELECT
2083 		p_auc_header_id,			-- AUCTION_HEADER_ID
2084 		p_bid_number,				-- BID_NUMBER
2085 		apd.line_number,			-- LINE_NUMBER
2086 		apd.shipment_number+1,		-- SHIPMENT_NUMBER
2087 		apd.price_differential_number, -- PRICE_DIFFERENTIAL_NUMBER
2088 		apd.price_type,				-- PRICE_TYPE
2089 		decode(bl.has_bid_flag, 'Y', bpd.multiplier, null), -- MULTIPLIER
2090 		sysdate,					-- CREATION_DATE
2091 		p_userid,					-- CREATED_BY
2092 		sysdate,					-- LAST_UPDATE_DATE
2093 		p_userid,					-- LAST_UPDATED_BY
2094 		null,						-- LAST_UPDATE_LOGIN
2095 		decode(p_rebid_flag, 'Y', bpd.multiplier, null) -- OLD_MULTIPLIER
2096 	FROM pon_price_differentials apd,
2097 		pon_bid_price_differentials bpd,
2098 		pon_bid_shipments bpb,
2099 		pon_bid_item_prices bl
2100 	WHERE apd.auction_header_id = p_auc_header_id
2101 		AND apd.shipment_number <> -1			-- only shipment differentials
2102 		AND bl.bid_number = p_bid_number
2103 		AND bl.line_number = apd.line_number
2104 		AND bpb.bid_number = p_bid_number
2105 		AND bpb.line_number = apd.line_number
2106                 AND bpb.shipment_type = 'PRICE BREAK'
2107 		AND bpb.shipment_number = apd.shipment_number + 1
2108 		AND bpd.bid_number (+) = p_source_bid_num
2109 		AND bpd.line_number (+) = apd.line_number
2110 		AND bpd.shipment_number (+) = apd.shipment_number + 1
2111 		AND bpd.price_differential_number (+) = apd.price_differential_number
2112 		AND bl.line_number BETWEEN p_batch_start AND p_batch_end)
2113 	);
2114 
2115 END insert_into_price_diff;
2116 
2117 -- ======================================================================
2118 -- PROCEDURE:	insert_into_payments  PRIVATE
2119 --  PARAMETERS:
2120 --	p_auc_header_id		IN auction_header_id of negotiation
2121 --	p_bid_number		IN bid number to insert price factors for
2122 --	p_source_bid_num	IN source_bid to default from
2123 --      p_copy_only_from_auc,   IN copy all the payments from negotiation only
2124 --      p_supplier_flag,        IN Flag indication if supplier allowed to enter payments
2125 --	p_userid		IN userid of bid creator
2126 --	p_rebid_flag		IN flag indicating rebid or not
2127 --  p_new_round_or_amended IN flag indicating if defaulting result of amend or new round
2128 --  COMMENT: insert payments for the new bid, defualting as necessary
2129 -- ======================================================================
2130 -- Create and default payments
2131 PROCEDURE insert_into_payments
2132 (
2136 	p_copy_only_from_auc	IN VARCHAR2,
2133 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
2134 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
2135 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
2137     p_supplier_flag         IN pon_auction_headers_all.SUPPLIER_ENTERABLE_PYMT_FLAG%TYPE,
2138 	p_userid		IN pon_bid_headers.created_by%TYPE,
2139 	p_rebid_flag		IN VARCHAR2,
2140     p_new_round_or_amended  IN VARCHAR2,
2141 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
2142 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE
2143 ) IS
2144 
2145 
2146 
2147   CURSOR c_bid_pymnts_attach IS
2148     SELECT
2149       DISTINCT
2150       source_pay.bid_number source_bid_number,
2151       source_pay.bid_line_number source_bid_line_number,
2152       source_pay.bid_payment_id source_bid_payment_id,
2153       dest_pay.bid_number dest_bid_number,
2154       dest_pay.bid_line_number dest_bid_line_number,
2155       dest_pay.bid_payment_id dest_bid_payment_id
2156     FROM
2157       PON_BID_PAYMENTS_SHIPMENTS source_pay,
2158       FND_ATTACHED_DOCUMENTS fnd,
2159       PON_BID_PAYMENTS_SHIPMENTS dest_pay,
2160       PON_BID_ITEM_PRICES bl
2161       WHERE   bl.auction_header_id = p_auc_header_id
2162           AND bl.bid_number = p_bid_number
2163 	  AND bl.has_bid_flag = 'Y'
2164           AND dest_pay.bid_number = bl.bid_number
2165           AND dest_pay.bid_line_number = bl.line_number
2166           AND source_pay.bid_number = p_source_bid_num
2167           AND dest_pay.bid_line_number = source_pay.bid_line_number
2168           AND dest_pay.payment_display_number = source_pay.payment_display_number
2169 	  AND fnd.pk1_value = source_pay.bid_number
2170 	  AND fnd.pk2_value = source_pay.bid_line_number
2171 	  AND fnd.pk3_value = source_pay.bid_payment_id
2172           AND fnd.entity_name = 'PON_BID_PAYMENTS_SHIPMENTS'
2173   	  AND bl.line_number BETWEEN p_batch_start AND p_batch_end;
2174 
2175      l_module  CONSTANT VARCHAR2(35) := 'Insert_into_payments';
2176 BEGIN
2177      IF (g_debug_mode = 'Y') THEN
2178                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2179                           FND_LOG.string(log_level => FND_LOG.level_statement,
2180                                    module    => g_module_prefix || l_module,
2181                                    message   => 'entering insert_into_payments' );
2182                        END IF;
2183       END IF;
2184       IF (p_copy_only_from_auc = 'Y') THEN
2185         IF (g_debug_mode = 'Y') THEN
2186                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2187                           FND_LOG.string(log_level => FND_LOG.level_statement,
2188                                    module    => g_module_prefix || l_module,
2189                                    message   => 'In if p_copy_only_from_auc is Y' );
2190                        END IF;
2191       END IF;
2192      --copy all the payments from auction payments only as supplier_enterable flag toggled from Y in prev version to N in new round or amend
2193         INSERT INTO pon_bid_payments_shipments
2194 		(
2195 	        BID_NUMBER,
2196 	        BID_LINE_NUMBER,
2197 	        BID_PAYMENT_ID,
2198 	        AUCTION_HEADER_ID,
2199 	        AUCTION_LINE_NUMBER,
2200 	        CREATION_DATE,
2201 	        CREATED_BY,
2202         	LAST_UPDATE_DATE,
2203         	LAST_UPDATED_BY,
2204 		LAST_UPDATE_LOGIN,
2205         	PAYMENT_DISPLAY_NUMBER,
2206            	PAYMENT_DESCRIPTION,
2207               	AUCTION_PAYMENT_ID,
2208                	PAYMENT_TYPE_CODE,
2209                 QUANTITY,
2210                 UOM_CODE,
2211                 PROMISED_DATE
2212 		)
2213 		(SELECT
2214                  p_bid_number,	                        --BID_NUMBER,
2215                  bl.line_number,		                --BID_LINE_NUMBER,
2216                  pon_bid_payments_shipments_s1.nextval,	--BID_PAYMENT_ID,
2217                  p_auc_header_id,                            --AUCTION_HEADER_ID,
2218                  bl.line_number,	                        --AUCTION_LINE_NUMBER,
2219                  sysdate,		                        --CREATION_DATE,
2220                  p_userid,	                                --CREATED_BY,
2221                  sysdate, 	                                --LAST_UPDATE_DATE,
2222                  p_userid, 	                                --LAST_UPDATED_BY,
2223 		 fnd_global.login_id,                        --LAST_UPDATE_LOGIN
2224                  apmt.PAYMENT_DISPLAY_NUMBER,                --PAYMENT_DISPLAY_NUMBER,
2225                  apmt.PAYMENT_DESCRIPTION,                   --PAYMENT_DESCRIPTION,
2226                  apmt.PAYMENT_ID,    --AUCTION_PAYMENT_ID,
2227                  apmt.PAYMENT_TYPE_CODE,    --PAYMENT_TYPE_CODE,
2228                  apmt.QUANTITY,    --QUANTITY,
2229                  apmt.UOM_CODE,    --UOM_CODE,
2230                  bl.promised_date   --PROMISED_DATE,
2231                  FROM    pon_bid_item_prices bl,pon_auc_payments_shipments apmt
2232                  WHERE   bl.auction_header_id = p_auc_header_id
2233                  AND bl.bid_number = p_bid_number
2234                  AND bl.auction_header_id = apmt.auction_header_id
2235                  AND bl.line_number = apmt.line_number
2236                  AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
2237 
2238 
2239       ELSE  --the following should execute if rebid/disqualified/new round or amend with supplier-enterable_flag Y/
2240            -- new round or amend with supplier flag N in this and previous version
2241 
2242 
2243         IF (g_debug_mode = 'Y') THEN
2247                                    message   => 'In else of p_copy_only_from_auc is Y' );
2244                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2245                           FND_LOG.string(log_level => FND_LOG.level_statement,
2246                                    module    => g_module_prefix || l_module,
2248                        END IF;
2249         END IF;
2250 
2251         IF (g_debug_mode = 'Y') THEN
2252                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2253                           FND_LOG.string(log_level => FND_LOG.level_statement,
2254                                    module    => g_module_prefix || l_module,
2255                                    message   => 'Insert for lines not bid' );
2256                        END IF;
2257         END IF;
2258         --copy all the payments for the lines from auction payments for lines that have not been bid
2259         INSERT INTO pon_bid_payments_shipments
2260 		(
2261                  BID_NUMBER,
2262                  BID_LINE_NUMBER,
2263                  BID_PAYMENT_ID,
2264                  AUCTION_HEADER_ID,
2265                  AUCTION_LINE_NUMBER,
2266                  CREATION_DATE,
2267                  CREATED_BY,
2268                  LAST_UPDATE_DATE,
2269                  LAST_UPDATED_BY,
2270 		 LAST_UPDATE_LOGIN,
2271                  PAYMENT_DISPLAY_NUMBER,
2272                  PAYMENT_DESCRIPTION,
2273                  AUCTION_PAYMENT_ID,
2274                  PAYMENT_TYPE_CODE,
2275                  QUANTITY,
2276                  UOM_CODE,
2277                  PROMISED_DATE
2278 		)
2279 		(SELECT
2280                  p_bid_number,	--BID_NUMBER,
2281                  bl.line_number,		--BID_LINE_NUMBER,
2282                  pon_bid_payments_shipments_s1.nextval,	--BID_PAYMENT_ID,
2283                  p_auc_header_id,  --AUCTION_HEADER_ID,
2284                  bl.line_number,	--AUCTION_LINE_NUMBER,
2285                  sysdate,		--CREATION_DATE,
2286                  p_userid,	--CREATED_BY,
2287                  sysdate, 	--LAST_UPDATE_DATE,
2288                  p_userid, 	--LAST_UPDATED_BY,
2289 		 fnd_global.login_id,                        --LAST_UPDATE_LOGIN
2290                  apmt.PAYMENT_DISPLAY_NUMBER,  --PAYMENT_DISPLAY_NUMBER,
2291                  apmt.PAYMENT_DESCRIPTION,    --PAYMENT_DESCRIPTION,
2292                  decode(p_supplier_flag, 'N',apmt.PAYMENT_ID,null),    --AUCTION_PAYMENT_ID,
2293                  apmt.PAYMENT_TYPE_CODE,    --PAYMENT_TYPE_CODE,
2294                  apmt.QUANTITY,    --QUANTITY,
2295                  apmt.UOM_CODE,    --UOM_CODE,
2296                  bl.promised_date   --PROMISED_DATE,
2297                  FROM    pon_bid_item_prices bl,
2298                  pon_auc_payments_shipments apmt
2299                  WHERE   bl.auction_header_id = p_auc_header_id
2300                  AND bl.bid_number = p_bid_number
2301                  AND bl.auction_header_id = apmt.auction_header_id
2302                  AND bl.line_number = apmt.line_number
2303                  AND bl.has_bid_flag = 'N'
2304                  AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
2305 
2306         IF (g_debug_mode = 'Y') THEN
2307                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2308                           FND_LOG.string(log_level => FND_LOG.level_statement,
2309                                    module    => g_module_prefix || l_module,
2310                                    message   => 'Insert for lines that were bid' );
2311                        END IF;
2312         END IF;
2313            --copy all the payments for the lines from bid payments for lines that have  been bid
2314            INSERT INTO pon_bid_payments_shipments
2315 		(
2316                  BID_NUMBER,
2317                  BID_LINE_NUMBER,
2318                  BID_PAYMENT_ID,
2319                  AUCTION_HEADER_ID,
2320                  AUCTION_LINE_NUMBER,
2321                  CREATION_DATE,
2322                  CREATED_BY,
2323                  LAST_UPDATE_DATE,
2324                  LAST_UPDATED_BY,
2325 		 LAST_UPDATE_LOGIN,
2326                  PAYMENT_DISPLAY_NUMBER,
2327                  PAYMENT_DESCRIPTION,
2328                  AUCTION_PAYMENT_ID,
2329                  PAYMENT_TYPE_CODE,
2330                  QUANTITY,
2331                  UOM_CODE,
2332                  PRICE,
2333                  BID_CURRENCY_PRICE,
2334                  PROMISED_DATE,
2335                  OLD_PAYMENT_DISPLAY_NUMBER,
2336                  OLD_PAYMENT_TYPE_CODE,
2337                  OLD_PAYMENT_DESCRIPTION,
2338                  OLD_QUANTITY,
2339                  OLD_UOM_CODE,
2340                  OLD_BID_CURRENCY_PRICE,
2341                  OLD_PROMISED_DATE
2342 		)
2343 		(SELECT
2344                  p_bid_number,	--BID_NUMBER,
2345                  bl.line_number,		--BID_LINE_NUMBER,
2346                  pon_bid_payments_shipments_s1.nextval,	--BID_PAYMENT_ID,
2347                  p_auc_header_id,  --AUCTION_HEADER_ID,
2348                  bl.line_number,	--AUCTION_LINE_NUMBER,
2349                  sysdate,		--CREATION_DATE,
2350                  p_userid,	--CREATED_BY,
2351                  sysdate, 	--LAST_UPDATE_DATE,
2352                  p_userid, 	--LAST_UPDATED_BY,
2353 		 fnd_global.login_id,                        --LAST_UPDATE_LOGIN
2354                  bpmt.PAYMENT_DISPLAY_NUMBER,  --PAYMENT_DISPLAY_NUMBER,
2355                  bpmt.PAYMENT_DESCRIPTION,    --PAYMENT_DESCRIPTION,
2356                  decode(p_new_round_or_amended , 'Y' ,
2360                                                AND payment_display_number= bpmt.PAYMENT_DISPLAY_NUMBER
2357                              decode(p_supplier_flag ,'N',(select payment_id from pon_auc_payments_shipments
2358                                               where auction_header_id=p_auc_header_id
2359                                               AND line_number = bl.line_number
2361                                                           )
2362                                              , null
2363                                      ),bpmt.AUCTION_PAYMENT_ID
2364                        ),    --AUCTION_PAYMENT_ID,
2365                  bpmt.PAYMENT_TYPE_CODE,    --PAYMENT_TYPE_CODE,
2366                  bpmt.QUANTITY,    --QUANTITY,
2367                  bpmt.UOM_CODE,    --UOM_CODE,
2368                  bpmt.PRICE,    --PRICE,
2369                  bpmt.BID_CURRENCY_PRICE,    --BID_CURRENCY_PRICE,
2370                  bpmt.promised_date,    --PROMISED_DATE,
2371                  decode(p_rebid_flag, 'Y',bpmt.PAYMENT_DISPLAY_NUMBER,null),    --OLD_PAYMENT_DISPLAY_NUMBER,
2372                  decode(p_rebid_flag, 'Y',bpmt.PAYMENT_TYPE_CODE,null),    --OLD_PAYMENT_TYPE_CODE,
2373                  decode(p_rebid_flag, 'Y',bpmt.PAYMENT_DESCRIPTION,null),    --OLD_PAYMENT_DESCRIPTION,
2374                  decode(p_rebid_flag, 'Y',bpmt.QUANTITY,null),	--OLD_QUANTITY,
2375                  decode(p_rebid_flag, 'Y',bpmt.UOM_CODE, null),    --OLD_UOM_CODE,
2376                  decode(p_rebid_flag, 'Y',bpmt.BID_CURRENCY_PRICE, null),    --OLD_BID_CURRENCY_PRICE,
2377                  decode(p_rebid_flag, 'Y',bpmt.PROMISED_DATE, null)    --OLD_PROMISED_DATE
2378                  FROM    pon_bid_item_prices bl,
2379                  pon_bid_payments_shipments bpmt
2380                  WHERE   bl.auction_header_id = p_auc_header_id
2381                  AND bl.bid_number = p_bid_number
2382                  AND bpmt.bid_number = p_source_bid_num
2383                  AND bpmt.bid_line_number = bl.line_number
2384                  AND bl.has_bid_flag = 'Y'
2385                  AND bl.line_number BETWEEN p_batch_start AND p_batch_end);
2386 
2387         IF (g_debug_mode = 'Y') THEN
2388                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2389                           FND_LOG.string(log_level => FND_LOG.level_statement,
2390                                    module    => g_module_prefix || l_module,
2391                                    message   => 'copy attachements from bid' );
2392                        END IF;
2393         END IF;
2394                --copy the attachments for those payments which came from bid
2395                FOR payment_rec in c_bid_pymnts_attach LOOP
2396                         FND_ATTACHED_DOCUMENTS2_PKG.COPY_ATTACHMENTS (
2397                           X_from_entity_name  =>  'PON_BID_PAYMENTS_SHIPMENTS',
2398                           X_from_pk1_value    =>  to_char(payment_rec.source_bid_number),
2399                           X_from_pk2_value    =>  to_char(payment_rec.source_bid_line_number),
2400                           X_from_pk3_value    =>  to_char(payment_rec.source_bid_payment_id),
2401                           X_to_entity_name    =>  'PON_BID_PAYMENTS_SHIPMENTS',
2402                           X_to_pk1_value      =>  to_char(payment_rec.dest_bid_number),
2403                           X_to_pk2_value      =>  to_char(payment_rec.dest_bid_line_number),
2404                           X_to_pk3_value      =>  to_char(payment_rec.dest_bid_payment_id),
2405                           X_created_by        =>  p_userid,
2406                           X_last_update_login =>  fnd_global.login_id);
2407 	       END LOOP;
2408         END IF; --p_copy_only_from_auc
2409      IF (g_debug_mode = 'Y') THEN
2410                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2411                           FND_LOG.string(log_level => FND_LOG.level_statement,
2412                                    module    => g_module_prefix || l_module,
2413                                    message   => 'exiting insert_into_payments' );
2414                        END IF;
2415       END IF;
2416 END	insert_into_payments;
2417 
2418 -- ======================================================================
2419 -- PROCEDURE:	COPY_LINE_ATTACHMENTS  PRIVATE
2420 --  PARAMETERS:
2421 --	p_auc_header_id		IN auction_header_id of negotiation
2422 --	p_bid_number		IN bid number to copy attachments to
2423 --	p_source_header_id	IN auction_header_id of source bids negotiation
2424 --	p_source_bid_num	IN source_bid to copy attachments from
2425 --	p_userid			IN userid of bid creator
2426 --
2427 --  COMMENT: copies over line attachments from source bid
2428 -- ======================================================================
2429 PROCEDURE copy_line_attachments
2430 (
2431 	p_auc_header_id		IN pon_bid_headers.auction_header_id%TYPE,
2432 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
2433 	p_source_header_id	IN pon_bid_headers.auction_header_id%TYPE,
2434 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
2435 	p_userid			IN pon_bid_headers.created_by%TYPE,
2436 	p_batch_start		IN pon_bid_item_prices.line_number%TYPE,
2437 	p_batch_end			IN pon_bid_item_prices.line_number%TYPE,
2438         p_to_category_id    IN NUMBER,
2439         p_change_categ_id       IN VARCHAR2
2440 ) IS
2441 
2442 	CURSOR bid_lines_with_attachments IS
2443 		SELECT DISTINCT ad.pk3_value
2444 		FROM fnd_attached_documents ad, pon_bid_item_prices bl
2445 		WHERE ad.entity_name = 'PON_BID_ITEM_PRICES'
2446 			AND ad.pk1_value = p_source_header_id
2447 			AND ad.pk2_value = p_source_bid_num
2448 			AND ad.pk3_value IS NOT null
2449 			AND bl.bid_number = p_bid_number
2453 
2450 			AND bl.line_number = to_number(ad.pk3_value)
2451 			AND bl.has_bid_flag = 'Y'
2452 			AND bl.line_number BETWEEN p_batch_start AND p_batch_end;
2454 BEGIN
2455         IF p_change_categ_id = 'Y' then
2456                 -- Copy the line's attachments only for unmodified lines, with new target category.
2457                 FOR line IN bid_lines_with_attachments LOOP
2458                         FND_ATTACHED_DOCUMENTS2_PKG.copy_attachments
2459                                 (x_from_entity_name => 'PON_BID_ITEM_PRICES',
2460                                 x_from_pk1_value => p_source_header_id,
2461                                 x_from_pk2_value => p_source_bid_num,
2462                                 x_from_pk3_value => line.pk3_value,
2463                                 x_to_entity_name => 'PON_BID_ITEM_PRICES',
2464                                 x_to_pk1_value => p_auc_header_id,
2465                                 x_to_pk2_value => p_bid_number,
2466                                 x_to_pk3_value => line.pk3_value,
2467                                 x_created_by => p_userid,
2468                                 x_last_update_login => fnd_global.login_id,
2469                                 x_to_category_id => p_to_category_id);
2470                 END LOOP;
2471         ELSE
2472                 -- Copy the line's attachments only for unmodified lines
2473                 FOR line IN bid_lines_with_attachments LOOP
2474                         FND_ATTACHED_DOCUMENTS2_PKG.copy_attachments
2475                                 (x_from_entity_name => 'PON_BID_ITEM_PRICES',
2476                                 x_from_pk1_value => p_source_header_id,
2477                                 x_from_pk2_value => p_source_bid_num,
2478                                 x_from_pk3_value => line.pk3_value,
2479                                 x_to_entity_name => 'PON_BID_ITEM_PRICES',
2480                                 x_to_pk1_value => p_auc_header_id,
2481                                 x_to_pk2_value => p_bid_number,
2482                                 x_to_pk3_value => line.pk3_value,
2483                                 x_created_by => p_userid,
2484                                 x_last_update_login => fnd_global.login_id);
2485                 END LOOP;
2486         END IF; -- }
2487 
2488 END copy_line_attachments;
2489 
2490 -- ======================================================================
2491 -- PROCEDURE:	POPULATE_HAS_BID_FLAG  PRIVATE
2492 --  PARAMETERS:
2493 --	p_auc_header_id		IN auction_header_id of negotiation
2494 --	p_bid_number		IN bid number to populate has_bid_flag for
2495 --
2496 --  COMMENT: populates has_bid_flag - used when defualting from pre-release 12 draft
2497 -- ======================================================================
2498 PROCEDURE populate_has_bid_flag
2499 (
2500 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
2501 	p_bid_number		IN pon_bid_headers.bid_number%TYPE
2502 ) IS
2503 	l_full_qty_reqd		VARCHAR2(1);
2504 BEGIN
2505 
2506 	-- Determine if the auction is full quantity required
2507 	SELECT decode(ah.full_quantity_bid_code, 'FULL_QTY_BIDS_REQD', 'Y', 'N')
2508 	INTO l_full_qty_reqd
2509 	FROM pon_auction_headers_all ah
2510 	WHERE ah.auction_header_id = p_auc_header_id;
2511 
2512 	-- First set has_bid_flag to N
2513 	UPDATE pon_bid_item_prices bl
2514 	SET bl.has_bid_flag = 'N'
2515 	WHERE bl.bid_number = p_bid_number;
2516 
2517 	-- Then, determine which lines have a bid
2518 	UPDATE pon_bid_item_prices bl
2519 	SET bl.has_bid_flag = 'Y'
2520 	WHERE bl.bid_number = p_bid_number
2521 		AND ((bl.promised_date IS NOT null
2522 			OR bl.price IS NOT null
2523 			OR bl.proxy_bid_limit_price IS NOT null
2524 			OR bl.po_bid_min_rel_amount IS NOT null
2525 			OR bl.note_to_auction_owner IS NOT null)
2526 
2527 			OR EXISTS
2528 
2529 			-- Check auction side to check quantity
2530 			(SELECT al.line_number
2531 			FROM pon_auction_item_prices_all al
2532 			WHERE al.auction_header_id = bl.auction_header_id
2533 				AND al.line_number = bl.line_number
2534 				AND (l_full_qty_reqd <> 'Y'
2535 						AND al.order_type_lookup_code <> 'AMOUNT'
2536 						AND al.group_type <> 'LOT_LINE'
2537 						AND bl.quantity IS NOT null))
2538 
2539 			OR EXISTS
2540 
2541 			-- Check attributes
2542 			(SELECT ba.line_number
2543 			FROM pon_bid_attribute_values ba
2544 			WHERE ba.bid_number = bl.bid_number
2545 				AND ba.line_number = bl.line_number
2546 				AND ba.value IS NOT null
2547 				AND rownum = 1)
2548 
2549 			OR EXISTS
2550 
2551 			-- Check price factors
2552 			(SELECT bpf.line_number
2553 			FROM pon_bid_price_elements bpf
2554 			WHERE bpf.bid_number = bl.bid_number
2555 				AND bpf.line_number = bl.line_number
2556 				AND bpf.pf_type = 'SUPPLIER'
2557 				AND bpf.bid_currency_value IS NOT null
2558 				AND rownum = 1)
2559 
2560 			OR EXISTS
2561 
2562 			-- Check shipments
2563 			(SELECT bs.line_number
2564 			FROM pon_bid_shipments bs
2565 			WHERE bs.bid_number = bl.bid_number
2566 				AND bs.line_number = bl.line_number
2567 				AND (bs.auction_shipment_number IS null
2568 					OR bs.price_type = 'PRICE' AND bs.bid_currency_unit_price IS NOT null
2569 					OR bs.price_type = 'PRICE DISCOUNT' AND bs.price_discount IS NOT null
2570 					OR bs.bid_currency_price IS NOT null)
2571 				AND rownum = 1)
2572 
2573 			OR EXISTS
2574 
2578 			WHERE bpd.bid_number = bl.bid_number
2575 			-- Check price differentials, including shipment price differentials
2576 			(SELECT bpd.line_number
2577 			FROM pon_bid_price_differentials bpd
2579 				AND bpd.line_number = bl.line_number
2580 				AND bpd.multiplier IS NOT null
2581 				AND rownum = 1)
2582 			);
2583 
2584 END populate_has_bid_flag;
2585 
2586 -- ======================================================================
2587 -- PROCEDURE:	CREATE_NEW_DRAFT  PRIVATE
2588 --  PARAMETERS:
2589 --	p_auc_header_id		IN auction_header_id of negotiation
2590 --	p_source_bid_num	IN source_bid to default from
2591 --	p_tpid				IN trading partner id of supplier
2592 --	p_tpcid				IN trading partner contact id of supplier
2593 --	p_tpname			IN trading partner name of supplier
2594 --	p_tpcname			IN trading partner contact name of supplier
2595 --	p_userid			IN userid of bid creator
2596 --	p_venid				IN vendor id
2597 --	p_vensid			IN vendor site id to place bid for
2598 --	p_venscode			IN vendor site code to place bid for
2599 --	p_auctpid			IN buyers trading partner id
2600 --	p_auctcpid			IN buyers trading partner contact id
2601 --	p_buyer_user		IN flag indicating surrogate bid or not
2602 --  p_new_round_or_amended IN flag indicating, if bid defualt is happening for new round or amend
2603 --	p_rebid_flag		IN flag indicating rebid or not
2604 --	x_bid_number		OUT the bid number of the created bid
2605 --
2606 --  COMMENT: creates a new draft bid for the specified supplier/site
2607 --			combination on the specified site. Inserts values into all bid
2608 --			side tables and copies attachments
2609 -- ======================================================================
2610 PROCEDURE create_new_draft_bid
2611 (
2612 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
2613 	p_source_bid_num	IN pon_bid_headers.bid_number%TYPE,
2614 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
2615 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
2616 	p_tpname			IN pon_bid_headers.trading_partner_name%TYPE,
2617 	p_tpcname			IN pon_bid_headers.trading_partner_contact_name%TYPE,
2618 	p_userid			IN pon_bid_headers.created_by%TYPE,
2619 	p_venid				IN pon_bid_headers.vendor_id%TYPE,
2620 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE,
2621 	p_venscode			IN pon_bid_headers.vendor_site_code%TYPE,
2622 	p_auctpid			IN pon_bid_headers.surrog_bid_created_tp_id%TYPE,
2623 	p_auctpcid			IN pon_bid_headers.surrog_bid_created_contact_id%TYPE,
2624 	p_buyer_user		IN VARCHAR2,
2625 	p_new_round_or_amended IN VARCHAR2,
2626 	p_rebid_flag		IN VARCHAR2,
2627 	p_prev_bid_disq		IN VARCHAR2,
2628 	x_bid_number		OUT NOCOPY pon_bid_headers.bid_number%TYPE,
2629         x_return_status         OUT NOCOPY NUMBER,
2630         x_return_code           OUT NOCOPY VARCHAR2
2631 ) IS
2632 	l_source_header_id	pon_auction_headers_all.auction_header_id%TYPE;
2633 	l_restricted_flag	VARCHAR2(1);
2634 	l_rel12_draft		VARCHAR2(1);
2635 	l_source_bid_status	pon_bid_headers.bid_status%TYPE;
2636 	l_supp_seq_number	pon_bidding_parties.sequence%TYPE;
2637 
2638 	l_max_line_number	pon_bid_item_prices.line_number%TYPE;
2639 	l_batch_start		pon_bid_item_prices.line_number%TYPE;
2640 	l_batch_end			pon_bid_item_prices.line_number%TYPE;
2641 	l_skip_pf_for_batch VARCHAR2(1);
2642 	l_supplier_flag                             pon_auction_headers_all.SUPPLIER_ENTERABLE_PYMT_FLAG%TYPE;
2643         l_payment_type                              pon_auction_headers_all.PROGRESS_PAYMENT_TYPE%TYPE;
2644         l_contract_type                             pon_auction_headers_all.CONTRACT_TYPE%TYPE;
2645         l_module  CONSTANT VARCHAR2(35) := 'create_new_draft_bid';
2646         l_other_draft_bid_number    pon_bid_headers.bid_number%TYPE;
2647         l_surrog_bid_flag      pon_bid_headers.surrog_bid_flag%TYPE;
2648         l_price_tiers_indicator pon_auction_headers_all.price_tiers_indicator%TYPE;
2649 
2650 
2651         -- Two-part RFQ related variables
2652         l_is_new_round  VARCHAR2(1) := 'N';       -- to store Y for new rounds (default N)
2653         l_to_category_id  NUMBER;       -- to store destination category id
2654         l_prev_two_part  VARCHAR2(1);   -- Y if previous round was two-part, else N or null
2655         l_curr_two_part  VARCHAR2(1);   -- Y if current round is two-part, else N or null
2656         l_categ_id_supp  NUMBER;        -- to store category id of "FromSupplier"
2657         l_categ_id_supp_tech  NUMBER;        -- to store category id of "FromSupplierTechnical"
2658         l_change_categ_id VARCHAR2(1) := 'N'; -- change category id ?
2659 BEGIN
2660 
2661 	BEGIN
2662 		-- Check if the supplier has restricted lines, and get sequence number
2663 		SELECT decode(bp.access_type, 'RESTRICTED', 'Y', 'N'), bp.sequence
2664 		INTO l_restricted_flag, l_supp_seq_number
2665 		FROM pon_bidding_parties bp
2666 		WHERE bp.auction_header_id = p_auc_header_id
2667 			AND bp.trading_partner_id = p_tpid
2668 			AND nvl(bp.vendor_site_id, -1) = p_vensid;
2669 	EXCEPTION
2670 		WHEN NO_DATA_FOUND THEN
2671 			l_restricted_flag := 'N';
2672 			l_supp_seq_number := null;
2673 	END;
2674 
2675 	-- Create and default bid header and get the bid number
2676 	insert_into_bid_header
2677 		(p_auc_header_id,
2678 		p_source_bid_num,
2679 		p_tpid,
2680 		p_tpname,
2681 		p_tpcid,
2682 		p_tpcname,
2683 		p_userid,
2684 		p_venid,
2685 		p_vensid,
2686 		p_venscode,
2687 		p_auctpid,
2688 		p_auctpcid,
2689 		p_buyer_user,
2690 		p_rebid_flag,
2694 	-- Create header attributes
2691 		p_prev_bid_disq,
2692 		x_bid_number);
2693 
2695 	insert_into_header_attributes
2696 		(p_auc_header_id,
2697 		x_bid_number,
2698 		p_source_bid_num,
2699 		p_userid,
2700 		p_rebid_flag);
2701 
2702 	-- Copy over header attachments
2703 	IF (p_source_bid_num IS NOT null) THEN
2704 
2705 		SELECT bh.auction_header_id
2706 		INTO l_source_header_id
2707 		FROM pon_bid_headers bh
2708 		WHERE bh.bid_number = p_source_bid_num;
2709 
2710                 -- get value of two-part flags for current and prev rounds
2711                 select  decode(pah.auction_header_id_prev_round, null, 'N', 'Y'),
2712                         nvl(pah.two_part_flag, 'N'),
2713                         (select nvl(two_part_flag,'N') from pon_auction_headers_all
2714                          where auction_header_id = pah.auction_header_id_prev_round)
2715                 into l_is_new_round, l_curr_two_part, l_prev_two_part
2716                 from    pon_auction_headers_all pah
2717                 where auction_header_id = p_auc_header_id;
2718 
2719                 log_message(l_module, 'Two-Part related variables: l_is_new_round: ' || l_is_new_round || '; l_curr_two_part: '||l_curr_two_part||'; l_prev_two_part: ' || l_prev_two_part);
2720 
2721                 -- if it is a new round, and two-part flag has changed...
2722                 if (l_is_new_round = 'Y' AND (l_curr_two_part <> l_prev_two_part)) THEN -- {
2723                         -- target category id needs to be changed
2724                         -- fetch target category ids.
2725                         select  (select category_id from fnd_document_categories
2726                                  where name = pon_auction_pkg.g_supplier_attachment),
2727                                 (select category_id from fnd_document_categories
2728                                  where name = pon_auction_pkg.g_technical_attachment)
2729                         into    l_categ_id_supp, l_categ_id_supp_tech
2730                         from    fnd_document_categories
2731                         where   ROWNUM = 1;
2732 
2733                         -- if prev round was two part, copy attachments to "FromSupplier"
2734                         if (l_prev_two_part = 'Y') THEN -- {
2735                                 l_to_category_id := l_categ_id_supp;
2736                                 l_change_categ_id := 'Y';
2737                         -- else copy to "FromSupplierTechnical"
2738                         else
2739                                 l_to_category_id := l_categ_id_supp_tech;
2740                                 l_change_categ_id := 'Y';
2741                         end if; -- }
2742 
2743                         log_message(l_module, 'Two-Part related variables: l_to_category_id: ' || l_to_category_id || '; l_categ_id_supp_tech: '||l_categ_id_supp_tech||'; l_categ_id_supp: ' || l_categ_id_supp);
2744 
2745                         -- Copy header attachments to new target category
2746                         FND_ATTACHED_DOCUMENTS2_PKG.copy_attachments
2747                             (x_from_entity_name => 'PON_BID_HEADERS',
2748                             x_from_pk1_value => l_source_header_id,
2749                             x_from_pk2_value => p_source_bid_num,
2750                             x_to_entity_name => 'PON_BID_HEADERS',
2751                             x_to_pk1_value => p_auc_header_id,
2752                             x_to_pk2_value => x_bid_number,
2753                             x_created_by => p_userid,
2754                             x_last_update_login => fnd_global.login_id,
2755                             x_to_category_id => l_to_category_id);
2756 
2757                 ELSE
2758 		-- Copy header level attachments without changing categories
2759 		FND_ATTACHED_DOCUMENTS2_PKG.copy_attachments
2760 			(x_from_entity_name => 'PON_BID_HEADERS',
2761 			x_from_pk1_value => l_source_header_id,
2762 			x_from_pk2_value => p_source_bid_num,
2763 			x_to_entity_name => 'PON_BID_HEADERS',
2764 			x_to_pk1_value => p_auc_header_id,
2765 			x_to_pk2_value => x_bid_number,
2766 			x_created_by => p_userid,
2767 			x_last_update_login => fnd_global.login_id);
2768                 END IF; -- }
2769 	END IF;
2770 
2771 	--get the one time values needed for complex work here to avoid reexcution of
2772 	--query with every batch
2773         g_copy_only_from_auc := 'N';
2774 	  IF (g_debug_mode = 'Y') THEN
2775           IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2776               FND_LOG.string(log_level => FND_LOG.level_statement,
2777                          module    => g_module_prefix || l_module,
2778                          message   => 'initializing negotiation values for complex work');
2779          END IF;
2780      END IF;
2781          select nvl(ah.SUPPLIER_ENTERABLE_PYMT_FLAG, 'N'), nvl(progress_payment_type,'NONE'), contract_type,
2782 	 nvl(ADVANCE_NEGOTIABLE_FLAG,'N'),nvl(RECOUPMENT_NEGOTIABLE_FLAG,'N'),nvl(PROGRESS_PYMT_NEGOTIABLE_FLAG,'N'),
2783 	 nvl(MAX_RETAINAGE_NEGOTIABLE_FLAG,'N'),nvl(RETAINAGE_NEGOTIABLE_FLAG,'N')
2784           into l_supplier_flag, l_payment_type, l_contract_type,
2785 	  g_advance_negotiable,g_recoupment_negotiable,g_prog_pymt_negotiable,g_max_rtng_negotiable,g_rtng_negotiable
2786           FROM pon_auction_headers_all ah where ah.auction_header_id=p_auc_header_id;
2787      IF (g_debug_mode = 'Y') THEN
2788           IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2789               FND_LOG.string(log_level => FND_LOG.level_statement,
2790                          module    => g_module_prefix || l_module,
2794 	   -- Get bid currency precisions and rate and surrogate bid flag
2791                          message   => 'initializing  currency stuff for complex work');
2792          END IF;
2793       END IF;
2795 	   SELECT cu.precision,
2796 		bh.rate,
2797                 bh.surrog_bid_flag
2798 	   INTO g_curr_prec,
2799 		g_bid_rate,
2800                 l_surrog_bid_flag
2801 	   FROM pon_bid_headers bh,
2802 		fnd_currencies cu
2803 	   WHERE bh.bid_number = x_bid_number
2804 		AND cu.currency_code = bh.bid_currency_code;
2805 
2806 	  --do the following only if complex work neg
2807             IF (p_new_round_or_amended = 'Y' and l_supplier_flag = 'N'
2808 			        AND l_payment_type <> 'NONE' AND l_contract_type = 'STANDARD') THEN
2809               IF (g_debug_mode = 'Y') THEN
2810                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2811                           FND_LOG.string(log_level => FND_LOG.level_statement,
2812                                    module    => g_module_prefix || l_module,
2813                                    message   => 'within if for complex work');
2814                        END IF;
2815               END IF;
2816               -- check from where should a payment defualt if supplier flag was
2817               --toggled in new round or amend
2818               -- Here default payments from previous bid if SUPPLIER_ENTERABLE_PYMT_FLAG for
2819               -- new negotiation is Y. but if SUPPLIER_ENTERABLE_PYMT_FLAG is N
2820               -- then if previous neg had SUPPLIER_ENTERABLE_PYMT_FLAG as Y then
2821               -- we need to default payments from neg and not from bid.
2822                select decode(oldah.SUPPLIER_ENTERABLE_PYMT_FLAG, 'Y','Y', 'N')
2823 	            into g_copy_only_from_auc
2824 	            FROM pon_auction_headers_all oldah
2825                WHERE oldah.auction_header_id = l_source_header_id;
2826 
2827                IF (g_debug_mode = 'Y') THEN
2828                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2829                           FND_LOG.string(log_level => FND_LOG.level_statement,
2830                                    module    => g_module_prefix || l_module,
2831                                    message   => 'after selecting supplier flag copy only from auc value is' || g_copy_only_from_auc );
2832                        END IF;
2833               END IF;
2834 
2835          END IF; --p_new_round... ontract_type STANDARD and payment_type <> NONE
2836          IF (g_debug_mode = 'Y') THEN
2837                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2838                           FND_LOG.string(log_level => FND_LOG.level_statement,
2839                                    module    => g_module_prefix || l_module,
2840                                    message   => 'Finished initializing negotiation values for complex work' );
2841                        END IF;
2842         END IF;
2843 	--end values needed for complex work
2844 
2845 	-- START BATCHING
2846 
2847 	-- Determine the maximum line number for the negotiation
2848 	SELECT ah.max_internal_line_num ,ah.price_tiers_indicator
2849 	INTO l_max_line_number,l_price_tiers_indicator
2850 	FROM pon_auction_headers_all ah
2851 	WHERE ah.auction_header_id = p_auc_header_id;
2852 
2853 	-- Define the initial range (line numbers are indexed from 1)
2854 	l_batch_start := 1;
2855 	IF (l_max_line_number < PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE) THEN
2856 		l_batch_end := l_max_line_number;
2857 	ELSE
2858 		l_batch_end := PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
2859 	END IF;
2860 
2861 	WHILE (l_batch_start <= l_max_line_number) LOOP
2862 
2863 		-- Create and default bid lines
2864 		insert_into_bid_items
2865 			(p_auc_header_id,
2866 			x_bid_number,
2867 			p_source_bid_num,
2868 			p_tpid,
2869 			p_tpcid,
2870 			p_userid,
2871 			p_vensid,
2872 			p_rebid_flag,
2873 			l_restricted_flag,
2874 			l_batch_start,
2875 			l_batch_end,
2876                         l_surrog_bid_flag);
2877 
2878 		-- Copy over line attachments
2879 		IF (p_source_bid_num IS NOT null) THEN
2880 
2881 			copy_line_attachments
2882 				(p_auc_header_id,
2883 				x_bid_number,
2884 				l_source_header_id,
2885 				p_source_bid_num,
2886 				p_userid,
2887 				l_batch_start,
2888 				l_batch_end,
2889                                 l_to_category_id,
2890                                 l_change_categ_id);
2891 		END IF;
2892 
2893 		-- Create and default header and line attributes
2894 		insert_into_line_attributes
2895 			(p_auc_header_id,
2896 			x_bid_number,
2897 			p_source_bid_num,
2898 			p_userid,
2899 			p_rebid_flag,
2900 			l_batch_start,
2901 			l_batch_end);
2902 
2903 		-- Populate display_price_factors_flag
2904 		populate_display_pf_flag
2905 			(p_auc_header_id,
2906 			x_bid_number,
2907 			l_supp_seq_number,
2908 			l_batch_start,
2909 			l_batch_end,
2910 			l_skip_pf_for_batch);
2911 
2912 		IF (l_skip_pf_for_batch = 'N') THEN
2913 
2914 			-- Create and defualt price factors
2915 			insert_into_price_factors
2916 				(p_auc_header_id,
2917 				x_bid_number,
2918 				p_source_bid_num,
2919 				p_userid,
2920 				l_supp_seq_number,
2921 				p_rebid_flag,
2922 				l_batch_start,
2923 				l_batch_end);
2924 		END IF;
2925 
2929         l_price_tiers_indicator  <> 'NONE') THEN
2926        --Create and default price tiers only if the price tiers indicator
2927        -- is non null and not NONE
2928        IF (l_price_tiers_indicator  is NOT NULL AND
2930             insert_into_price_tiers
2931                 (p_auc_header_id,
2932                  x_bid_number,
2933                  p_source_bid_num,
2934                  p_userid,
2935                  p_rebid_flag,
2936                  l_batch_start,
2937                  l_batch_end);
2938         END IF;
2939 
2940         -- Create and default price differentials
2941         insert_into_price_diff
2942             (p_auc_header_id,
2943              x_bid_number,
2944              p_source_bid_num,
2945              p_userid,
2946              p_rebid_flag,
2947              l_batch_start,
2948              l_batch_end);
2949 
2950        --complex work
2951        IF (l_payment_type <> 'NONE' AND l_contract_type = 'STANDARD' ) THEN
2952 
2953         IF (g_debug_mode = 'Y') THEN
2954                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2955                           FND_LOG.string(log_level => FND_LOG.level_statement,
2956                                    module    => g_module_prefix || l_module,
2957                                    message   => 'before calling insert_into_payments' );
2958                        END IF;
2959           END IF;
2960    	       -- Create and default payments
2961 		insert_into_payments
2962 			(p_auc_header_id,
2963 			x_bid_number,
2964 			p_source_bid_num,
2965 			g_copy_only_from_auc,
2966 			l_supplier_flag,
2967 			p_userid,
2968 			p_rebid_flag,
2969                         p_new_round_or_amended,
2970 			l_batch_start,
2971 			l_batch_end);
2972          IF (g_debug_mode = 'Y') THEN
2973                         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
2974                           FND_LOG.string(log_level => FND_LOG.level_statement,
2975                                    module    => g_module_prefix || l_module,
2976                                    message   => 'after calling insert_into_payments' );
2977                        END IF;
2978           END IF;
2979         END IF; --contract_type STANDARD and payment_type <> NONE
2980 
2981 
2982                 -- here should commit the batch
2983                 -- before commit, check whether this user already has a draft
2984                 -- created. Maybe from a different session
2985                 BEGIN
2986                     select bid_number
2987                     into l_other_draft_bid_number
2988                     from pon_bid_headers
2989                     where auction_header_id = p_auc_header_id
2990                     and bid_number <> x_bid_number
2991                     and bid_status = 'DRAFT'
2992                     and trading_partner_id = p_tpid
2993                     and trading_partner_contact_id = p_tpcid
2994                     and nvl(vendor_site_id, -1) = nvl(p_vensid, -1);
2995                 EXCEPTION
2996                     WHEN NO_DATA_FOUND THEN
2997                       l_other_draft_bid_number := null;
2998                 END;
2999 
3000                 IF (l_other_draft_bid_number IS NOT null) THEN
3001                     x_return_status := 1;
3002                     x_return_code := 'MULTIPLE_REBID';
3003                     ROLLBACK;
3004                 ELSE
3005                     x_return_status := 0;
3006                     x_return_code := 'SUCCESS';
3007                     COMMIT;
3008                 END IF;
3009 
3010 		-- Find the new range
3011 		l_batch_start := l_batch_end + 1;
3012 		IF (l_batch_end + PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE > l_max_line_number) THEN
3013 			l_batch_end := l_max_line_number;
3014 		ELSE
3015 			l_batch_end := l_batch_end + PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
3016 		END IF;
3017 
3018 	END LOOP;
3019 
3020 	-- END BATCHING
3021 
3022 	-- Populate header level display_price_factors_flag
3023 	-- It is 'Y' if any line has the line level flag set
3024 	UPDATE pon_bid_headers bh
3025 	SET bh.display_price_factors_flag =
3026 		nvl((SELECT 'Y'
3027 		FROM pon_bid_item_prices bl
3028 		WHERE bl.bid_number = bh.bid_number
3029 			AND bl.display_price_factors_flag = 'Y'
3030 			AND rownum = 1), 'N')
3031 	WHERE bh.bid_number = x_bid_number;
3032 
3033 	-- Handle proxy bidding: done in check_and_load_bid
3034 
3035 END create_new_draft_bid;
3036 
3037 -- ======================================================================
3038 -- PROCEDURE:	EXPAND_DRAFT  PRIVATE
3039 --  PARAMETERS:
3040 --	p_bid_number		IN bid_number to expand
3041 --	x_rebid_flag		OUT Y if bid expanded is a rebid
3042 --
3043 --  COMMENT: pre-release 12 draft bids do not have lines without bids.
3044 --			As such, they need to be expanded to include them
3045 -- ======================================================================
3046 PROCEDURE expand_draft
3047 (
3048 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
3049 	x_rebid_flag		OUT NOCOPY VARCHAR2
3050 ) IS
3051 	l_source_bid_num	pon_bid_headers.bid_number%TYPE;
3052 
3053 	l_auc_header_id		pon_auction_headers_all.auction_header_id%TYPE;
3054 	l_auctpid			pon_auction_headers_all.trading_partner_id%TYPE;
3055 	l_tpid				pon_bid_headers.trading_partner_id%TYPE;
3056 	l_tpcid				pon_bid_headers.trading_partner_contact_id%TYPE;
3060 	l_has_pe_flag		VARCHAR2(1);
3057 	l_userid			pon_bid_headers.created_by%TYPE;
3058 	l_vensid			pon_bid_headers.vendor_site_id%TYPE;
3059 	l_supp_seq_number	pon_bidding_parties.sequence%TYPE;
3061 	l_blanket			VARCHAR2(1);
3062 	l_full_qty			VARCHAR2(1);
3063 	l_rate				pon_bid_headers.rate%TYPE;
3064 	l_price_prec		pon_bid_headers.number_price_decimals%TYPE;
3065 	l_curr_prec			fnd_currencies.precision%TYPE;
3066 
3067 	l_max_line_number	pon_bid_item_prices.line_number%TYPE;
3068 	l_batch_start		pon_bid_item_prices.line_number%TYPE;
3069 	l_batch_end			pon_bid_item_prices.line_number%TYPE;
3070 	l_skip_pf_for_batch VARCHAR2(1);
3071 BEGIN
3072 
3073 	-- Need to get auction_header_id and supplier info
3074 	SELECT ah.auction_header_id,
3075 		ah.trading_partner_id,
3076 		decode(ah.has_price_elements, 'Y', 'Y', 'N'),
3077 		decode(ah.contract_type, 'BLANKET', 'Y', 'CONTRACT', 'Y', 'N'),
3078 		decode(ah.full_quantity_bid_code, 'FULL_QTY_BIDS_REQD', 'Y', 'N'),
3079 		bh.trading_partner_id,
3080 		bh.trading_partner_contact_id,
3081 		bh.vendor_site_id,
3082 		bh.created_by,
3083 		bh.rate,
3084 		bh.number_price_decimals,
3085 		cu.precision
3086 	INTO l_auc_header_id,
3087 		l_auctpid,
3088 		l_has_pe_flag,
3089 		l_blanket,
3090 		l_full_qty,
3091 		l_tpid,
3092 		l_tpcid,
3093 		l_vensid,
3094 		l_userid,
3095 		l_rate,
3096 		l_price_prec,
3097 		l_curr_prec
3098 	FROM pon_bid_headers bh, pon_auction_headers_all ah, fnd_currencies cu
3099 	WHERE bh.bid_number = p_bid_number
3100 		AND ah.auction_header_id = bh.auction_header_id
3101 		AND cu.currency_code = bh.bid_currency_code;
3102 
3103 	BEGIN
3104 		-- Get the supplier sequence number
3105 		SELECT 	bp.sequence
3106 		INTO 	l_supp_seq_number
3107 		FROM 	pon_bidding_parties bp
3108 		WHERE 	bp.auction_header_id = l_auc_header_id
3109 		AND 	bp.trading_partner_id = l_tpid
3110 		AND 	bp.vendor_site_id = l_vensid;
3111 
3112 	EXCEPTION
3113 		WHEN NO_DATA_FOUND THEN
3114 
3115 			-- if the current supplier is not invited, then treat this
3116 			-- sequence_number to be null
3117 
3118 			l_supp_seq_number := null;
3119 	END;
3120 
3121 
3122 	BEGIN
3123 
3124 		-- Determine the latest ACTIVE bid and set rebid_flag to Y
3125 		-- Since there can only exist a single ACTIVE bid on an amendment for
3126 		-- a particular user on a site, we use the rownum = 1 optimisation
3127 		SELECT bh.bid_number, 'Y'
3128 		INTO l_source_bid_num, x_rebid_flag
3129 		FROM pon_bid_headers bh
3130 		WHERE bh.auction_header_id = l_auc_header_id
3131 			AND bh.trading_partner_id = l_tpid
3132 			AND bh.trading_partner_contact_id = l_tpcid
3133 			AND bh.vendor_site_id = l_vensid
3134 			AND bh.bid_status = 'ACTIVE'
3135 			AND rownum = 1
3136 		ORDER BY bh.publish_date DESC;
3137 
3138 	EXCEPTION
3139 		-- there is no old bid to get old value columns
3140 		WHEN NO_DATA_FOUND THEN
3141 			x_rebid_flag := 'N';
3142 	END;
3143 
3144 	-- START BATCHING
3145 
3146 	-- Determine the maximum line number for the negotiation
3147 	SELECT ah.max_internal_line_num
3148 	INTO l_max_line_number
3149 	FROM pon_auction_headers_all ah
3150 	WHERE ah.auction_header_id = l_auc_header_id;
3151 
3152 	-- Define the initial range (line numbers are indexed from 1)
3153 	l_batch_start := 1;
3154 	IF (l_max_line_number < PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE) THEN
3155 		l_batch_end := l_max_line_number;
3156 	ELSE
3157 		l_batch_end := PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
3158 	END IF;
3159 
3160 	WHILE (l_batch_start <= l_max_line_number) LOOP
3161 
3162 		-- We need to insert those auction side lines which haven't recieved bids
3163 		-- line level display pf flag also populated
3164 		insert_auction_lines
3165 			(l_auc_header_id,
3166 			p_bid_number,
3167 			l_userid,
3168 			l_auctpid,
3169 			l_tpid,
3170 			l_vensid,
3171 			l_has_pe_flag,
3172 			l_blanket,
3173 			l_full_qty,
3174 			l_supp_seq_number,
3175 			l_rate,
3176 			l_price_prec,
3177 			l_curr_prec,
3178 			l_batch_start,
3179 			l_batch_end);
3180 
3181 		-- If it as a rebid, we need to populate old_value columns
3182 		IF (x_rebid_flag = 'Y') THEN
3183 			-- special case for pre-rel12 draft - check
3184 			populate_old_value_columns
3185 				(p_bid_number,
3186 				l_source_bid_num,
3187 				l_batch_start,
3188 				l_batch_end);
3189 		END IF;
3190 
3191 		-- Find the new range
3192 		l_batch_start := l_batch_end + 1;
3193 		IF (l_batch_end + PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE > l_max_line_number) THEN
3194 			l_batch_end := l_max_line_number;
3195 		ELSE
3196 			l_batch_end := l_batch_end + PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
3197 		END IF;
3198 
3199 	END LOOP;
3200 
3201 	-- END BATCHING
3202 
3203 	-- Populate header level display_price_factors_flag
3204 	-- It is 'Y' if any line has the line level flag set
3205 	UPDATE pon_bid_headers bh
3206 	SET bh.display_price_factors_flag =
3207 		nvl((SELECT 'Y'
3208 		FROM pon_bid_item_prices bl
3209 		WHERE bl.bid_number = bh.bid_number
3210 			AND bl.display_price_factors_flag = 'Y'
3211 			AND rownum = 1), 'N')
3212 	WHERE bh.bid_number = p_bid_number;
3213 
3214 	-- Populate has_bid_flag as it is a rel12 column
3215 	populate_has_bid_flag
3216 		(l_auc_header_id,
3217 		p_bid_number);
3218 
3219 	/* once we have finished upgrading the draft, reset the flag to Y */
3223 
3220 	update 	pon_bid_headers
3221 	set	rel12_draft_flag = 'Y'
3222 	where 	bid_number = p_bid_number;
3224 	-- handle_proxy will be called in check_and_load_bid
3225 
3226 END expand_draft;
3227 
3228 -- ======================================================================
3229 -- PROCEDURE:	LOCK_DRAFT  PRIVATE
3230 --  PARAMETERS:
3231 --	p_bid_number		IN bid number to lock
3232 --	p_tpid				IN trading partner id to lock with
3233 --	p_tpcid				IN trading partner contact id to lock with
3234 --	x_return_status		OUT 0 for success, 1 for error
3235 --	x_return_code		OUT returned error code, or SUCCESS
3236 --
3237 --  COMMENT: If the bid is not locked by another user, it is locked.
3238 -- ======================================================================
3239 PROCEDURE lock_draft
3240 (
3241 	p_bid_number		IN pon_bid_headers.bid_number%TYPE,
3242 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
3243 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
3244 	x_return_status		OUT NOCOPY NUMBER,
3245 	x_return_code 		OUT NOCOPY VARCHAR2
3246 ) IS
3247 	l_draft_locked		pon_bid_headers.draft_locked%TYPE;
3248 	l_tpid				pon_bid_headers.trading_partner_id%TYPE;
3249 	l_tpcid				pon_bid_headers.trading_partner_contact_id%TYPE;
3250 BEGIN
3251 
3252 	-- pull up draft lock info
3253 	SELECT draft_locked, draft_locked_by, draft_locked_by_contact_id
3254 	INTO l_draft_locked, l_tpid, l_tpcid
3255 	FROM pon_bid_headers
3256 	WHERE bid_number = p_bid_number;
3257 
3258 	-- If the draft is locked by another user, return an error
3259 	IF (l_draft_locked = 'Y' AND (p_tpid <> l_tpid OR p_tpcid <> l_tpcid)) THEN
3260 
3261 		x_return_status := 1;
3262 		x_return_code := 'DRAFT_LOCK_ERR';
3263 		RETURN;
3264 
3265 	-- If the draft is not locked, lock it
3266 	ELSIF (l_draft_locked = 'N') THEN
3267 
3268 		UPDATE pon_bid_headers
3269 		SET draft_locked = 'Y',
3270 			draft_locked_by = p_tpid,
3271 			draft_locked_by_contact_id = p_tpcid,
3272 			draft_locked_date = sysdate
3273 		WHERE bid_number = p_bid_number;
3274 
3275 	END IF;
3276 
3277 	x_return_status := 0;
3278 	x_return_code := 'SUCCESS';
3279 
3280 END lock_draft;
3281 
3282 -- ======================================================================
3283 -- PROCEDURE:	CHECK_AMENDMENTS_ACKED  PRIVATE
3284 --  PARAMETERS:
3285 --	p_auc_header_id		IN auction header id of negotiation
3286 --	p_tpid				IN trading partner id of supplier
3287 --	p_tpcid				IN trading partner contact id of supplier
3288 --	x_return_status		OUT 0 for success, 1 for error
3289 --	x_return_code		OUT returned error code, or SUCCESS
3290 --
3291 --  COMMENT: Determines if all amendments on the current round have been acknowledged
3292 -- ======================================================================
3293 PROCEDURE check_amendments_acked
3294 (
3295 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
3296 	p_tpid				IN pon_auction_headers_all.trading_partner_id%TYPE,
3297 	p_tpcid				IN pon_auction_headers_all.trading_partner_contact_id%TYPE,
3298 	x_return_status		OUT NOCOPY NUMBER,
3299 	x_return_code 		OUT NOCOPY VARCHAR2
3300 ) IS
3301 	l_orig_amend_id		pon_auction_headers_all.auction_header_id_orig_amend%TYPE;
3302 	l_amend_not_acked	VARCHAR2(1);
3303 BEGIN
3304 
3305 	-- Get the original amendments auction header id
3306 	SELECT ah.auction_header_id_orig_amend
3307 	INTO l_orig_amend_id
3308 	FROM pon_auction_headers_all ah
3309 	WHERE ah.auction_header_id = p_auc_header_id;
3310 
3311 	-- There must be as many acknowledgements as amendments
3312 	SELECT decode(count(rownum), 0, 'N', 'Y')
3313 	INTO l_amend_not_acked
3314 	FROM pon_auction_headers_all ah, pon_acknowledgements ac
3315 	WHERE ah.auction_header_id_orig_amend = l_orig_amend_id
3316 		AND ah.auction_status IN ('AMENDED', 'ACTIVE')
3317 		-- ignore the original amendment
3318 		AND ah.amendment_number > 0
3319 		AND ac.auction_header_id (+) = ah.auction_header_id
3320 		AND ac.trading_partner_id (+) = p_tpid
3321 		AND ac.trading_partner_contact_id (+)= p_tpcid
3322 		AND ac.acknowledgement_response IS null;
3323 
3324 	IF (l_amend_not_acked = 'Y') THEN
3325 		x_return_status := 1;
3326 		x_return_code := 'NEED_ACKNOWLEDGE';
3327 		RETURN;
3328 	END IF;
3329 
3330 	x_return_status := 0;
3331 	x_return_code := 'SUCCESS';
3332 
3333 END check_amendments_acked;
3334 
3335 -- ======================================================================
3336 -- PROCEDURE:	VALIDATE_SITE  PRIVATE
3337 --  PARAMETERS:
3338 --	p_auc_header_id		IN auction header id of negotiation
3339 --	p_tpid				IN trading partner id of supplier
3340 --	p_vensid			IN vendor site to place a bid for
3341 --	p_venscode			IN corresponding vendor site code
3342 --	x_return_status		OUT 0 for success, 1 for error
3343 --	x_return_code		OUT returned error code, or SUCCESS
3344 --
3345 --  COMMENT: Determine if the vensid, venscode combination can bid on the negotiation
3346 -- ======================================================================
3347 PROCEDURE validate_site
3348 (
3349 	p_auc_header_id		IN pon_bidding_parties.auction_header_id%TYPE,
3350 	p_tpid				IN pon_bidding_parties.trading_partner_id%TYPE,
3351 	p_vensid			IN pon_bidding_parties.vendor_site_id%TYPE,
3352 	p_venscode			IN pon_bidding_parties.vendor_site_code%TYPE,
3356 	CURSOR sites IS
3353 	x_return_status		OUT NOCOPY NUMBER,
3354 	x_return_code		OUT NOCOPY VARCHAR2
3355 ) IS
3357 		SELECT vendor_site_id id, vendor_site_code code
3358 		FROM pon_bidding_parties
3359 		WHERE auction_header_id = p_auc_header_id
3360 			AND trading_partner_id = p_tpid;
3361 
3362 	l_sites_invited		BOOLEAN DEFAULT false;
3363 	l_site_valid		BOOLEAN DEFAULT false;
3364 
3365 BEGIN
3366 
3367 	-- Look through the invited sites for this auction
3368 	FOR site IN sites LOOP
3369 		IF (site.id > 0) THEN
3370 			l_sites_invited := true;
3371 			IF (p_vensid = site.id AND p_venscode = site.code) THEN
3372 				l_site_valid := true;
3373 			END IF;
3374 		END IF;
3375 	END LOOP;
3376 
3377 	-- If multiple sites were invited then, if a site id was specified,
3378 	-- return an error if it was not invited. Else, indicate that
3379 	-- a site id needs to be specified
3380 	IF (l_sites_invited) THEN
3381 		IF (p_vensid > 0) THEN
3382 			IF (NOT l_site_valid) THEN
3383 				x_return_status := 1;
3384 				x_return_code := 'INVALID_VENDOR_SITE';
3385 				RETURN;
3386 			END IF;
3387 		ELSE
3388 			x_return_status := 1;
3389 			x_return_code := 'PICK_VENDOR_SITE';
3390 			RETURN;
3391 		END IF;
3392 	END IF;
3393 
3394 	x_return_status := 0;
3395 	x_return_code := 'SITE_VALID';
3396 
3397 END validate_site;
3398 
3399 -- ======================================================================
3400 -- PROCEDURE:	IS_BIDDING_ALLOWED  PUBLIC
3401 --  PARAMETERS:
3402 --	p_auc_header_id		IN auction header id of negotiation
3403 --	p_tpid				IN trading partner id of supplier
3404 --	p_tpcid				IN trading partner contact id of supplier
3405 --	p_vensid			IN vendor site to place a bid for
3406 --	p_venscode			IN corresponding vendor site code
3407 --	p_buyer_user		IN determines if surrogate bid
3408 --	p_action_code		IN determines if certain validation should be suppressed
3409 --	x_return_status		OUT 0 for success, 1 for error
3410 --	x_return_code		OUT returned error code, or SUCCESS
3411 --
3412 --  COMMENT: Determine if the bidding action specified by action code can
3413 --			be completed at this time.
3414 -- ======================================================================
3415 PROCEDURE is_bidding_allowed
3416 (
3417 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
3418 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
3419 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
3420 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE,
3421 	p_venscode			IN pon_bid_headers.vendor_site_code%TYPE,
3422 	p_buyer_user		IN VARCHAR2,
3423 	p_action_code		IN VARCHAR2,
3424 	x_return_status		OUT NOCOPY NUMBER,
3425 	x_return_code		OUT NOCOPY VARCHAR2
3426 ) IS
3427 	l_current_date		TIMESTAMP;
3428     l_bid_number		NUMBER;
3429 	l_view_by_date		pon_auction_headers_all.view_by_date%TYPE;
3430 	l_open_date			pon_auction_headers_all.open_bidding_date%TYPE;
3431 	l_close_date		pon_auction_headers_all.close_bidding_date%TYPE;
3432 	l_auction_status	pon_auction_headers_all.auction_status%TYPE;
3433 	l_award_status		pon_auction_headers_all.award_status%TYPE;
3434 	l_bid_list_type		pon_auction_headers_all.bid_list_type%TYPE;
3435 	l_invited_flag		VARCHAR2(1);
3436 	l_bid_freq_code		pon_auction_headers_all.bid_frequency_code%TYPE;
3437 	l_has_draft_flag	VARCHAR2(1);
3438 	l_has_bid_flag		VARCHAR2(1);
3439 	l_has_surrog_flag	VARCHAR2(1);
3440 	l_auction_paused	VARCHAR2(1);
3441 	l_orig_amend_id		pon_auction_headers_all.auction_header_id%TYPE;
3442 	l_supp_end_date		TIMESTAMP;
3443 BEGIN
3444 
3445 	-- Verify that a valid site id has been specified if not loading a bid
3446 	IF (p_action_code <> 'LOAD_BID' AND
3447 	    p_action_code <> 'LOAD_DRAFT') THEN
3448 		validate_site(p_auc_header_id, p_tpid, p_vensid, p_venscode, x_return_status, x_return_code);
3449 
3450 		IF (x_return_status = 1) THEN
3451 			-- return status and code already set
3452 			RETURN;
3453 		END IF;
3454 	END IF;
3455 
3456 	BEGIN
3457 		-- select the various values
3458 		SELECT 	sysdate,
3459 				nvl(ah.view_by_date, ah.open_bidding_date),
3460 				ah.open_bidding_date,
3461 				ah.close_bidding_date,
3462 				ah.auction_status,
3463 				nvl(ah.award_status, 'NO'),
3464 				ah.bid_list_type,
3465 				ah.bid_frequency_code,
3466 				ah.auction_header_id_orig_amend,
3467 				nvl(ah.is_paused, 'N')
3468 		INTO 	l_current_date,
3469 				l_view_by_date,
3470 				l_open_date,
3471 				l_close_date,
3472 				l_auction_status,
3473 				l_award_status,
3474 				l_bid_list_type,
3475 				l_bid_freq_code,
3476 				l_orig_amend_id,
3477 				l_auction_paused
3478 		FROM pon_auction_headers_all ah
3479 		WHERE auction_header_id = p_auc_header_id;
3480 
3481 	EXCEPTION
3482 		WHEN NO_DATA_FOUND THEN
3483 			x_return_status := 1;
3484 			x_return_code := 'INVALID_HEADER_ID';
3485 			RETURN;
3486 	END;
3487 
3488 
3489 	-- View by date (or open date if null) should be reached
3490 	IF (l_current_date < l_view_by_date) THEN
3491 		x_return_status := 1;
3492 		x_return_code := 'AUCTION_NOT_VIEW';
3493 		RETURN;
3494 	END IF;
3495 
3496 	-- Auction should not be cancelled
3497 	IF (l_auction_status = 'CANCELLED') THEN
3498 		x_return_status := 1;
3499 		x_return_code := 'AUCTION_CANCELLED';
3500 		RETURN;
3501 	END IF;
3502 
3503     -- Auction should not have been deleted
3507 		RETURN;
3504 	IF (l_auction_status = 'DELETED') THEN
3505 		x_return_status := 1;
3506 		x_return_code := 'AUCTION_DELETED';
3508 	END IF;
3509 
3510 	-- When saving bid
3511 	IF (p_action_code = 'SAVE_BID') THEN
3512 
3513 		-- Auction should be open
3514 		IF (l_current_date < l_open_date) THEN
3515 			x_return_status := 1;
3516 			x_return_code := 'AUCTION_NOT_OPEN';
3517 			RETURN;
3518 		END IF;
3519 
3520 		-- Auction should not be paused
3521 		IF (l_auction_status = 'PAUSED') THEN
3522 			x_return_status := 1;
3523 			x_return_code := 'AUCTION_PAUSED';
3524 			RETURN;
3525 		END IF;
3526 
3527 		-- make sure there is a draft that we're trying
3528 		-- to publish
3529 		BEGIN
3530 			SELECT bid_number
3531 			INTO l_bid_number
3532 			FROM pon_bid_headers bh
3533 			WHERE bh.auction_header_id = p_auc_header_id
3534 				AND bh.trading_partner_id = p_tpid
3535 				AND bh.trading_partner_contact_id = p_tpcid
3536 				AND bh.vendor_site_id = p_vensid
3537 				AND bh.bid_status = 'DRAFT';
3538 
3539 		EXCEPTION
3540 			WHEN NO_DATA_FOUND THEN
3541 				x_return_status := 1;
3542 				x_return_code := 'NO_DRAFT_BID';
3543 				RETURN;
3544 		END;
3545 
3546 		-- Supplier should not be invalid
3547 		BEGIN
3548 			SELECT nvl(pov.end_date_active, sysdate)
3549 			INTO l_supp_end_date
3550 			FROM pon_bid_headers bh, po_vendors pov
3551 			WHERE bh.auction_header_id = p_auc_header_id
3552 				AND bh.trading_partner_id = p_tpid
3553 				AND bh.trading_partner_contact_id = p_tpcid
3554 				AND bh.vendor_site_id = p_vensid
3555 				AND bh.bid_status = 'DRAFT'
3556 				AND pov.vendor_id = bh.vendor_id;
3557 
3558 		EXCEPTION
3559 			WHEN NO_DATA_FOUND THEN
3560 				l_supp_end_date := null;
3561 		END;
3562 
3563 		IF (l_supp_end_date IS null OR l_supp_end_date < l_current_date) THEN
3564 			x_return_status := 1;
3565 			x_return_code := 'INACTIVE_SUPPLIER_ERROR';
3566 			RETURN;
3567 		END IF;
3568 
3569 	END IF;
3570 
3571 	-- Check auction close date (unless the auction is paused)
3572 	IF (l_auction_paused <> 'Y' AND l_close_date < l_current_date) THEN
3573 
3574 		-- Auction should not be closed if not a buyer
3575 		IF (p_buyer_user = 'N') THEN
3576 			x_return_status := 1;
3577 			x_return_code := 'AUCTION_CLOSED';
3578 			RETURN;
3579 		-- Award process should not be started if buyer
3580 		ELSIF (l_award_status <> 'NO') THEN
3581 			x_return_status := 1;
3582 			x_return_code := 'AUCTION_AWARD_STARTED';
3583 			RETURN;
3584 		END IF;
3585 	END IF;
3586 
3587 	-- If private auction, check if supplier is invited
3588 	IF (l_bid_list_type = 'PRIVATE_BID_LIST') THEN
3589 
3590 		-- Do an existence check
3591 		SELECT decode(count(auction_header_id), 0, 'N', 'Y')
3592 		INTO l_invited_flag
3593 		FROM pon_bidding_parties
3594 		WHERE auction_header_id = p_auc_header_id
3595 			AND trading_partner_id = p_tpid;
3596 
3597 		IF (l_invited_flag = 'N') THEN
3598 			x_return_status := 1;
3599 			x_return_code := 'NOT_INVITED';
3600 			RETURN;
3601 		END IF;
3602 	END IF;
3603 
3604 	-- Check if single best bid auction
3605 	IF (l_bid_freq_code = 'SINGLE_BID_ONLY') THEN
3606 
3607 		-- Do an existence check
3608 		SELECT decode(count(auction_header_id), 0, 'N', 'Y')
3609 		INTO l_has_bid_flag
3610 		FROM pon_bid_headers
3611 		WHERE auction_header_id = p_auc_header_id
3612 			AND trading_partner_id = p_tpid
3613 			AND vendor_site_id = p_vensid
3614 			AND bid_status = 'ACTIVE';
3615 
3616 		IF (l_has_bid_flag = 'Y') THEN
3617 			x_return_status := 1;
3618 			x_return_code := 'SINGLE_BEST_BID';
3619 			RETURN;
3620 		END IF;
3621 
3622 		-- Do an existence check
3623                	-- bug 5041654
3624                	-- if we are loading a bid, we do not need
3625                	-- to check whether some other user already has a draft bid
3626                	-- in case of a single-best bid auction, as it is quite rare occurence
3627 		-- in R12 that 2 users from same company will click 'create bid' at the same
3628 		-- time. We will have this check during submit bid anyways
3629 
3630 		SELECT decode(count(auction_header_id), 0, 'N', 'Y')
3631 		INTO l_has_draft_flag
3632 		FROM pon_bid_headers
3633 		WHERE auction_header_id = p_auc_header_id
3634 			AND trading_partner_id = p_tpid
3635 			AND trading_partner_contact_id <> p_tpcid
3636 			AND vendor_site_id = p_vensid
3637 			AND bid_status = 'DRAFT';
3638 
3639 		IF (l_has_draft_flag = 'Y' AND
3640 		    p_action_code <> 'LOAD_DRAFT') THEN
3641 			x_return_status := 1;
3642 			x_return_code := 'OTHER_USERS_DRAFT_SBB';
3643 			RETURN;
3644 		END IF;
3645 	END IF;
3646 
3647 	-- Check if a buyer/supplier has already placed a bid on the round
3648 	-- I.e. check for surrog bid if supplier, or a supplier bid if buyer
3649 	SELECT decode(count(bh.auction_header_id), 0, 'N', 'Y')
3650 	INTO l_has_surrog_flag
3651 	FROM pon_bid_headers bh, pon_auction_headers_all ah
3652 	WHERE ah.auction_header_id_orig_amend = l_orig_amend_id
3653 		AND bh.auction_header_id = ah.auction_header_id
3654 		AND bh.trading_partner_id = p_tpid
3655 		AND bh.trading_partner_contact_id = p_tpcid
3659 		IF (p_buyer_user = 'Y') THEN
3656 		AND nvl(bh.surrog_bid_flag, 'N') = decode(p_buyer_user, 'Y', 'N', 'Y');
3657 
3658 	IF (l_has_surrog_flag = 'Y') THEN
3660 			x_return_status := 1;
3661 			x_return_code := 'SURROG_BID_ERROR_BUYER';
3662 		ELSE
3663 			x_return_status := 1;
3664 			x_return_code := 'SURROG_BID_ERROR_SUPPLIER';
3665 		END IF;
3666 		RETURN;
3667 	END IF;
3668 
3669 	x_return_status := 0;
3670 	x_return_code := 'SUCCESS';
3671 
3672 END is_bidding_allowed;
3673 
3674 -- ======================================================================
3675 -- PROCEDURE:	GET_SOURCE_BID  PRIVATE
3676 --  PARAMETERS:
3677 --	p_auc_header_id		IN auction header id of negotiation
3678 --	p_tpid				IN trading partner id of supplier
3679 --	p_tpcid				IN trading partner contact id of supplier
3680 --	p_vensid			IN vendor site to place a bid for
3681 --	p_action_code		IN determines if certain validation should be suppressed
3682 --	x_rebid_flag		OUT flag determining if rebid or not
3683 --	x_bid_number		OUT bid number of exisiting draft on current amendment
3684 --	x_prev_bid_number	OUT source bid number
3685 --	x_amend_bid_def		OUT Y if source bid is on a previous amendment
3686 --	x_round_bid_def		OUT Y if source bid is on a previous round
3687 --	x_prev_bid_disq		OUT Y is source bid was disqualified
3688 --	x_return_status		OUT 0 for success, 1 for error
3689 --	x_return_code		OUT returned error code, or SUCCESS
3690 --
3691 --  COMMENT: Determine if a draft already exists on the current amendment.
3692 --			If not, determines which bid to default from or to create a new draft.
3693 --			Also checks if another user has a draft on the current amendment.
3694 -- ======================================================================
3695 PROCEDURE get_source_bid
3696 (
3697 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
3698 	p_tpid			IN pon_bid_headers.trading_partner_id%TYPE,
3699 	p_tpcid			IN pon_bid_headers.trading_partner_contact_id%TYPE,
3700 	p_vensid		IN pon_bid_headers.vendor_site_id%TYPE,
3701 	p_action_code		IN VARCHAR2,
3702 
3703 	x_rebid_flag		OUT NOCOPY VARCHAR2,
3704 	x_bid_number		OUT NOCOPY pon_bid_headers.bid_number%TYPE,
3705 	x_prev_bid_number	OUT NOCOPY pon_bid_headers.bid_number%TYPE,
3706 	x_amend_bid_def		OUT NOCOPY VARCHAR2,
3707 	x_round_bid_def		OUT NOCOPY VARCHAR2,
3708 	x_prev_bid_disq		OUT NOCOPY VARCHAR2,
3709 	x_return_status		OUT NOCOPY NUMBER,
3710 	x_return_code		OUT NOCOPY VARCHAR2
3711 ) IS
3712 	l_source_header_id	pon_auction_headers_all.auction_header_id%TYPE;
3713 	l_status_order		NUMBER;
3714 	l_rel12_draft		pon_bid_headers.rel12_draft_flag%TYPE;
3715 
3716 	l_prev_round_id		pon_auction_headers_all.auction_header_id%TYPE;
3717 	l_orig_amend_id		pon_auction_headers_all.auction_header_id%TYPE;
3718 
3719 	l_terms_cond_apply	VARCHAR2(1);
3720 
3721 	l_ignored_return	pon_bid_headers.bid_number%TYPE;
3722 
3723 	-- select bids on all amendments/previous round by the current user for the current site
3724 	CURSOR current_users_bids IS
3725 		SELECT bh.bid_number,
3726 			bh.auction_header_id,
3727 			decode(bh.bid_status, 'DRAFT', 1, 'ACTIVE', 2,
3728 				'RESUBMISSION', 3, 'DISQUALIFIED', 4) status_order,
3729 			decode(bh.bid_status, 'ACTIVE',
3730 				decode(bh.auction_header_id, p_auc_header_id, 'Y', 'N'), 'N') rebid_flag,
3731 			decode(ah.auction_header_id_orig_amend, l_orig_amend_id, 'N', 'Y') prev_round_def,
3732 			decode(ah.auction_header_id, p_auc_header_id, 'N',
3733 				decode(ah.auction_header_id_orig_amend, l_orig_amend_id, 'Y', 'N')) prev_amend_def,
3734 
3735 			decode(bh.bid_status, 'DISQUALIFIED', 'Y', 'N') prev_bid_disq,
3736 			nvl(bh.rel12_draft_flag, 'N') rel12_draft_flag
3737 		FROM pon_bid_headers bh, pon_auction_headers_all ah
3738 		WHERE
3739 			-- look at all amendments on the current round
3740 			(ah.auction_header_id_orig_amend = l_orig_amend_id
3741 			-- look at all amendments on the previous round
3742 				OR ah.auction_header_id_orig_amend = l_prev_round_id)
3743 			AND bh.auction_header_id = ah.auction_header_id
3744 			AND bh.trading_partner_id = p_tpid
3745 			AND bh.trading_partner_contact_id = p_tpcid
3746 			AND nvl(bh.vendor_site_id, -1) = p_vensid
3747 			-- we ignore DRAFT bids on previous rounds
3748 			AND ((bh.bid_status = 'DRAFT'
3749 					AND ah.auction_header_id_orig_amend = l_orig_amend_id)
3750 				OR bh.bid_status IN ('ACTIVE', 'RESUBMISSION', 'DISQUALIFIED'))
3751 		ORDER BY nvl(ah.auction_round_number, 1) DESC,
3752 			ah.amendment_number DESC, status_order ASC, bh.publish_date DESC;
3753 
3754 	-- select bids on the current amendment/previous rounds by the current user for the current site
3755 	CURSOR other_users_bids IS
3756 		SELECT 1 return_status,
3757 			decode(bh.auction_header_id, p_auc_header_id,
3758 				decode(ah.bid_frequency_code, 'SINGLE_BID_ONLY',
3759 					decode(bh.bid_status, 'DRAFT', 'OTHER_USERS_DRAFT_SBB',
3760 						'ACTIVE', 'SINGLE_BEST_BID'),
3761 					decode(bh.bid_status, 'DRAFT', 'OTHER_USERS_DRAFT',
3762 						'ACTIVE', 'OTHER_USERS_ACTIVE')),
3763 				'OTHER_USERS_PREV_ROUND') return_code
3764 		FROM pon_bid_headers bh, pon_auction_headers_all ah
3765 		WHERE
3766 			-- look at the current amendment
3767 			(ah.auction_header_id = p_auc_header_id
3768 				AND bh.bid_status IN ('DRAFT', 'ACTIVE')
3769 			-- look at the previous round
3770 				OR ah.auction_header_id_orig_amend = l_prev_round_id
3771 					AND bh.bid_status = 'ACTIVE')
3772 			AND bh.auction_header_id = ah.auction_header_id
3773 			AND bh.trading_partner_id = p_tpid
3777 			decode(bh.bid_status, 'DRAFT', 1, 'ACTIVE', 2) ASC, bh.publish_date DESC;
3774 			AND bh.trading_partner_contact_id <> p_tpcid
3775 			AND nvl(bh.vendor_site_id, -1) = p_vensid
3776 		ORDER BY nvl(ah.auction_round_number, 1) DESC, ah.amendment_number DESC,
3778 
3779 BEGIN
3780 
3781 	-- Get the original amendment id's for the current and prev rounds.
3782 	-- Also check if contracts have been installed
3783 	SELECT ah.auction_header_id_orig_amend, ah2.auction_header_id_orig_amend,
3784 		nvl2(ah.contract_id, 'Y', 'N')
3785 	INTO l_orig_amend_id, l_prev_round_id, l_terms_cond_apply
3786 	FROM pon_auction_headers_all ah, pon_auction_headers_all ah2
3787 	WHERE ah.auction_header_id = p_auc_header_id
3788 		and ah2.auction_header_id (+) = ah.auction_header_id_prev_round;
3789 
3790 	-- Retrieve the backing bid info from the cursor
3791 	-- We only need the first such bid
3792 	OPEN current_users_bids;
3793 	FETCH current_users_bids
3794 		INTO x_prev_bid_number, l_source_header_id, l_status_order,
3795 			x_rebid_flag, x_round_bid_def, x_amend_bid_def,
3796 			x_prev_bid_disq, l_rel12_draft;
3797 	CLOSE current_users_bids;
3798 
3799 	-- If the current user has a previous bid
3800 	IF (x_prev_bid_number IS NOT null) THEN
3801 
3802 		-- had a backing DRAFT bid
3803 		IF (l_status_order = 1) THEN
3804 			-- Check if the draft is on the current amendment
3805 			IF (l_source_header_id = p_auc_header_id) THEN
3806 
3807 				-- If it is a pre-release 12 draft, need to insert missing lines
3808 				-- NOTE: expand_draft is batched
3809 				IF (l_rel12_draft <> 'Y') THEN
3810 					expand_draft(x_prev_bid_number, x_rebid_flag);
3811 				END IF;
3812 
3813 				-- Set return bid number. No defaulting required
3814 				x_bid_number := x_prev_bid_number;
3815 				x_prev_bid_number := NULL;
3816 				x_return_status := 0;
3817 				x_return_code := 'DRAFT';
3818 
3819 			-- draft is on a previous amendment/round
3820 			ELSE
3821 				-- Need to archive the previous amend/round DRAFT bid
3822 				UPDATE pon_bid_headers
3823 				SET bid_status = 'ARCHIVED_DRAFT',
3824 					last_update_date = sysdate
3825 				WHERE bid_number = x_prev_bid_number;
3826 
3827 				-- If pre-release 12, call handle_proxy to update price, limit_price
3828 				-- set has_bid_flag
3829 				IF (l_rel12_draft <> 'Y') THEN
3830 
3831 					handle_proxy
3832 						(p_auc_header_id,
3833 						x_prev_bid_number,
3834 						p_tpid,
3835 						p_tpcid,
3836 						p_vensid,
3837 						l_ignored_return,
3838 						x_rebid_flag);
3839 
3840 					populate_has_bid_flag(p_auc_header_id, x_prev_bid_number);
3841 				END IF;
3842 
3843 				-- All flags are set; indicate defaulting is necessary
3844 				x_return_status := 0;
3845 				x_return_code := 'DEFAULT';
3846 			END IF;
3847 
3848 		-- had a backing ACTIVE, RESUBMISSION, or DISQUALIFIED bid
3849 		ELSE
3850 			-- All flags are set; indicate that defaulting is necessary
3851 			x_return_status := 0;
3852 			x_return_code := 'DEFAULT';
3853 		END IF;
3854 	ELSE
3855 
3856 		-- Retrieve other users bid info from the cursor
3857 		-- We only need the first bid
3858 		OPEN other_users_bids;
3859 		FETCH other_users_bids
3860 			INTO x_return_status, x_return_code;
3861 		CLOSE other_users_bids;
3862 
3863 		IF (x_return_status = 1) THEN
3864 			RETURN;
3865 		END IF;
3866 
3867 		-- Creating fresh bid.
3868 		-- User must accept terms and conditions if contracts installed.
3869 		IF (l_terms_cond_apply = 'Y') THEN
3870 			x_return_status := 1;
3871 			x_return_code := 'TO_TERMS_COND';
3872 		ELSE
3873 			x_return_status := 0;
3874 			x_return_code := 'CREATE_NEW_DRAFT';
3875 		END IF;
3876 	END IF;
3877 
3878 END get_source_bid;
3879 
3880 -- ======================================================================
3881 -- PROCEDURE:	CREATE_DEFAULTED_BID	PUBLIC
3882 --  PARAMETERS:
3883 --	p_new_header_id		IN auction header id of negotiation
3884 --	p_source_bid		IN the bid to default from
3885 --	x_bid_number		OUT bid number of draft loaded or created
3886 --	x_return_status		OUT 0 for success, 1 for error
3887 --	x_return_code		OUT returned error code, or SUCCESS
3888 --
3889 --  COMMENT: create a new draft on p_auc_header_id, defaulting from
3890 --			p_source_bid
3891 -- ======================================================================
3892 PROCEDURE create_defaulted_draft
3893 (
3894 	p_new_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
3895 	p_source_bid		IN pon_bid_headers.bid_number%TYPE,
3896 	x_bid_number		OUT NOCOPY pon_bid_headers.bid_number%TYPE
3897 ) IS
3898 	l_tpid				pon_bid_headers.trading_partner_id%TYPE;
3899 	l_tpcid				pon_bid_headers.trading_partner_contact_id%TYPE;
3900 	l_tpname			pon_bid_headers.trading_partner_name%TYPE;
3901 	l_tpcname			pon_bid_headers.trading_partner_contact_name%TYPE;
3902 	l_userid			pon_bid_headers.created_by%TYPE;
3903 	l_venid				pon_bid_headers.vendor_id%TYPE;
3904 	l_vensid			pon_bid_headers.vendor_site_id%TYPE;
3905 	l_venscode			pon_bid_headers.vendor_site_code%TYPE;
3906 	l_buyer_user		VARCHAR2(1);
3907 	l_auctpid			pon_bid_headers.surrog_bid_created_tp_id%TYPE;
3908 	l_auctpcid			pon_bid_headers.surrog_bid_created_contact_id%TYPE;
3909 
3910 	l_rebid_flag		VARCHAR2(1);
3911 	l_prev_bid_disq		VARCHAR2(1);
3912 	l_new_round_or_amended  VARCHAR2(1);
3916 
3913         l_return_status         NUMBER;
3914         l_return_code           VARCHAR2(30);
3915 BEGIN
3917 	-- The bid the user is currently working with has been obsoleted
3918 	-- so create a new draft, defaulting from the previous bid.
3919 	-- Eg. If the user clicks bid by spreadsheet from the manage draft
3920 	-- responses page, but a new amendment has been created.
3921 
3922 	l_rebid_flag := 'N';
3923 	l_prev_bid_disq := 'N';
3924 
3925     -- The following flag is needed for payments copy
3926     -- This sets to y if defaulting is happening because the
3927     -- negotiation being amended or new round started
3928     l_new_round_or_amended := 'Y';
3929 
3930 	-- Select out the header values from the previous draft
3931 	SELECT bh.trading_partner_id,
3932 		bh.trading_partner_contact_id,
3933 		bh.trading_partner_name,
3934 		bh.trading_partner_contact_name,
3935 		bh.created_by,
3936 		bh.vendor_id,
3937 		bh.vendor_site_id,
3938 		bh.vendor_site_code,
3939 		bh.surrog_bid_created_tp_id,
3940 		bh.surrog_bid_created_contact_id,
3941 		bh.surrog_bid_flag
3942 	INTO l_tpid,
3943 		l_tpcid,
3944 		l_tpname,
3945 		l_tpcname,
3946 		l_userid,
3947 		l_venid,
3948 		l_vensid,
3949 		l_venscode,
3950 		l_auctpid,
3951 		l_auctpcid,
3952 		l_buyer_user
3953 	FROM pon_bid_headers bh
3954 	WHERE bh.bid_number = p_source_bid;
3955 
3956 	-- Create the new bid
3957 	create_new_draft_bid
3958 		(p_new_header_id,
3959 		p_source_bid,
3960 		l_tpid,
3961 		l_tpcid,
3962 		l_tpname,
3963 		l_tpcname,
3964 		l_userid,
3965 		l_venid,
3966 		l_vensid,
3967 		l_venscode,
3968 		l_auctpid,
3969 		l_auctpcid,
3970 		l_buyer_user,
3971 		l_new_round_or_amended,
3972 		l_rebid_flag,
3973 		l_prev_bid_disq,
3974 		x_bid_number,
3975                 l_return_status,
3976                 l_return_code);
3977 
3978 	-- Update the status of the previous bid
3979 	-- NOTE: if this procedure is used for cases other than spreadsheet upload
3980 	-- on a DRAFT after an amendment, the status will need to be set correctly
3981 	UPDATE pon_bid_headers bh
3982 	SET bh.bid_status = decode('DRAFT', 'ARCHIVED_DRAFT', bh.bid_status)
3983 	WHERE bh.bid_number = p_source_bid;
3984 
3985 END create_defaulted_draft;
3986 
3987 -- ======================================================================
3988 -- PROCEDURE:	CHECK_AND_LOAD_BID	PUBLIC
3989 --  PARAMETERS:
3990 --	p_auc_header_id		IN auction header id of negotiation
3991 --	p_draft_number		IN non-null if a specific draft is to be loaded
3992 --						or if the action code is CREATE_NEW_AMEND_DRAFT
3993 --	p_tpid				IN trading partner id of supplier
3994 --	p_tpcid				IN trading partner contact id of supplier
3995 --	p_tpname			IN trading partner name of supplier
3996 --	p_tpcname			IN trading partner contact name of supplier
3997 --	p_userid			IN userid of bid creator
3998 --	p_venid				IN vendor id
3999 --	p_vensid			IN vendor site to place a bid for
4000 --	p_venscode			IN corresponding vendor site code
4001 --	p_buyer_user		IN determines if surrogate bid
4002 --	p_auctpid			IN trading partner id of buyer if surrogate bid
4003 --	p_auctpcid			IN trading partner contact id of buyer if surrogate bid
4004 
4005 --	x_bid_number		OUT bid number of draft loaded or created
4006 --	x_rebid_flag		OUT flag determining if rebid or not
4007 --	x_prev_bid_number	OUT source bid number
4008 --	x_amend_bid_def		OUT Y if source bid is on a previous amendment
4009 --	x_round_bid_def		OUT Y if source bid is on a previous round
4010 --	x_prev_bid_disq		OUT Y if source bid was disqualified
4011 --	x_edit_draft		OUT Y if we loaded an existing draft
4012 
4013 --	p_action_code		IN determine if a special action needs to be taken
4014 --	x_return_status		OUT 0 for success, 1 for error
4015 --	x_return_code		OUT returned error code, or SUCCESS
4016 --
4017 --  COMMENT: Main procedure which determines whether a new or defaulted bid
4018 -- 			is to be created. Or whether a draft already exists
4019 -- ======================================================================
4020 PROCEDURE check_and_load_bid
4021 (
4022 	p_auc_header_id		IN pon_auction_headers_all.auction_header_id%TYPE,
4023 	p_draft_number		IN pon_bid_headers.bid_number%TYPE,
4024 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
4025 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
4026 	p_tpname			IN pon_bid_headers.trading_partner_name%TYPE,
4027 	p_tpcname			IN pon_bid_headers.trading_partner_contact_name%TYPE,
4028 	p_userid			IN pon_bid_headers.created_by%TYPE,
4029 	p_venid				IN pon_bid_headers.vendor_id%TYPE,
4030 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE,
4031 	p_venscode			IN pon_bid_headers.vendor_site_code%TYPE,
4032 	p_buyer_user		IN VARCHAR2,
4033 	p_auctpid			IN pon_bid_headers.surrog_bid_created_tp_id%TYPE,
4034 	p_auctpcid			IN pon_bid_headers.surrog_bid_created_contact_id%TYPE,
4035 
4036 	x_bid_number		OUT NOCOPY pon_bid_headers.bid_number%TYPE,
4037 	x_rebid_flag		OUT NOCOPY VARCHAR2,
4038 	x_prev_bid_number	OUT NOCOPY pon_bid_headers.bid_number%TYPE,
4039 	x_amend_bid_def		OUT NOCOPY VARCHAR2,
4040 	x_round_bid_def		OUT NOCOPY VARCHAR2,
4041 	x_prev_bid_disq		OUT NOCOPY VARCHAR2,
4042 	x_edit_draft		OUT NOCOPY VARCHAR2,
4043 
4044 	p_action_code		IN VARCHAR2,
4045 	x_return_status		OUT NOCOPY NUMBER,
4046 	x_return_code		OUT NOCOPY VARCHAR2
4047 ) IS
4051 	l_temp_num			NUMBER;
4048 	l_rel12_draft		pon_bid_headers.rel12_draft_flag%TYPE;
4049 	l_new_round_or_amended  VARCHAR2(1);
4050 
4052 BEGIN
4053 
4054 	-- The user indicated that they want to create a fresh bid
4055 	IF (p_action_code = 'CREATE_NEW_DRAFT') THEN
4056 
4057 		x_rebid_flag := 'N';
4058 		x_prev_bid_number := NULL;
4059 		x_amend_bid_def := 'N';
4060 		x_round_bid_def := 'N';
4061 		x_prev_bid_disq := 'N';
4062 		x_edit_draft := 'N';
4063 
4064         -- The following flag is needed for payments copy
4065         -- This sets to y if defaulting is happening because the
4066         -- negotiation being amended or new round started
4067         l_new_round_or_amended := 'N';
4068 
4069 		-- Create the new bid
4070 		create_new_draft_bid
4071 			(p_auc_header_id,
4072 			x_prev_bid_number,
4073 			p_tpid,
4074 			p_tpcid,
4075 			p_tpname,
4076 			p_tpcname,
4077 			p_userid,
4078 			p_venid,
4079 			p_vensid,
4080 			p_venscode,
4081 			p_auctpid,
4082 			p_auctpcid,
4083 			p_buyer_user,
4084 			l_new_round_or_amended,
4085 			x_rebid_flag,
4086 			x_prev_bid_disq,
4087 			x_bid_number,
4088                         x_return_status,
4089                         x_return_code);
4090 
4091 		RETURN;
4092 
4093 	-- If we already know which draft to work with
4094 	ELSIF (p_draft_number IS NOT null AND p_draft_number > 0) THEN
4095 
4096 		-- Check that the draft is not locked by another user and lock it
4097 		IF (p_buyer_user = 'Y') THEN
4098 			lock_draft
4099 				(p_draft_number,
4100 				p_auctpid,
4101 				p_auctpcid,
4102 				x_return_status,
4103 				x_return_code);
4104 		ELSE
4105 			lock_draft
4106 				(p_draft_number,
4107 				p_tpid,
4108 				p_tpcid,
4109 				x_return_status,
4110 				x_return_code);
4111 		END IF;
4112 
4113 		IF (x_return_status = 1) THEN
4114 			RETURN;
4115 		END IF;
4116 
4117 		-- If it is a pre-release 12 draft, we need to expand it
4118 		SELECT nvl(bh.rel12_draft_flag, 'N') rel12_draft_flag
4119 		INTO l_rel12_draft
4120 		FROM pon_bid_headers bh
4121 		WHERE bh.bid_number = p_draft_number;
4122 
4123 		-- If the draft is pre-release 12 we need to fill in the missing lines
4124 		IF (l_rel12_draft <> 'Y') THEN
4125 			expand_draft(p_draft_number, x_rebid_flag);
4126 		END IF;
4127 
4128 		-- Finally, handle proxy bidding and copy rank
4129 		handle_proxy
4130 			(p_auc_header_id,
4131 			p_draft_number,
4132 			p_tpid,
4133 			p_tpcid,
4134 			p_vensid,
4135 			x_prev_bid_number,
4136 			x_rebid_flag);
4137 
4138 		-- set flags and return values before returning
4139 		x_bid_number := p_draft_number;
4140 		x_amend_bid_def := 'N';
4141 		x_round_bid_def := 'N';
4142 		x_prev_bid_disq := 'N';
4143 		x_edit_draft := 'Y';
4144 		x_return_status := 0;
4145 		x_return_code := 'SUCCESS';
4146 		RETURN;
4147 	END IF;
4148 
4149 	-- We are unsure whether a draft exists or we're creating a new bid
4150 
4151 	-- Check if all amendments have been acknowledged
4152 	check_amendments_acked(p_auc_header_id, p_tpid, p_tpcid,
4153 		x_return_status, x_return_code);
4154 
4155 	IF (x_return_status = 1) THEN
4156 		RETURN;
4157 	END IF;
4158 
4159 	-- Get the source bid number and other flags
4160 	get_source_bid
4161 		(p_auc_header_id,
4162 		p_tpid,
4163 		p_tpcid,
4164 		p_vensid,
4165 		p_action_code,
4166 		x_rebid_flag,
4167 		x_bid_number,
4168 		x_prev_bid_number,
4169 		x_amend_bid_def,
4170 		x_round_bid_def,
4171 		x_prev_bid_disq,
4172 		x_return_status,
4173 		x_return_code);
4174 
4175 	IF (x_return_status = 1) THEN
4176 		RETURN;
4177 	END IF;
4178 
4179 	-- If a draft exists, check that it is not locked by another user and lock it
4180 	IF (x_return_code = 'DRAFT') THEN
4181 		IF (p_buyer_user = 'Y') THEN
4182 			lock_draft(x_bid_number, p_auctpid, p_auctpcid,
4183 				x_return_status, x_return_code);
4184 		ELSE
4185 			lock_draft(x_bid_number, p_tpid, p_tpcid,
4186 				x_return_status, x_return_code);
4187 		END IF;
4188 
4189 		IF (x_return_status = 1) THEN
4190 			RETURN;
4191 		END IF;
4192 
4193 		-- set return status
4194 		x_edit_draft := 'Y';
4195 		x_return_status := 0;
4196 		x_return_code := 'SUCCESS';
4197 
4198 	-- Default the bid if necessary
4199 	ELSIF (x_return_code = 'DEFAULT') THEN
4200 
4201 	  -- The following flag is needed for payments copy
4202       -- This sets to y if defaulting is happening because the
4203       -- negotiation being amended or new round started
4204 
4205       IF (x_amend_bid_def = 'Y'  OR x_round_bid_def = 'Y') THEN
4206          l_new_round_or_amended := 'Y';
4207       ELSE
4208          l_new_round_or_amended := 'N';
4209       END IF;
4210 
4211 		create_new_draft_bid
4212 			(p_auc_header_id,
4213 			x_prev_bid_number,
4214 			p_tpid,
4215 			p_tpcid,
4216 			p_tpname,
4217 			p_tpcname,
4218 			p_userid,
4219 			p_venid,
4220 			p_vensid,
4221 			p_venscode,
4222 			p_auctpid,
4223 			p_auctpcid,
4224 			p_buyer_user,
4225 			l_new_round_or_amended,
4226 			x_rebid_flag,
4227 			x_prev_bid_disq,
4228 			x_bid_number,
4229                         x_return_status,
4230                         x_return_code);
4231 
4232 		-- set return status
4233 		x_edit_draft := 'N';
4234 
4235                 -- There is already a draft created for this user. Maybe
4236                 -- through a different session. In this case, return
4237                 -- error MULTIPLE_REBID
4238                 IF (x_return_status = 1) THEN
4239                    RETURN;
4240                 END IF;
4241 
4242 	-- Create a fresh bid if necessary
4243 	ELSIF (x_return_code = 'CREATE_NEW_DRAFT') THEN
4244 
4245 		x_rebid_flag := 'N';
4246 		x_prev_bid_number := NULL;
4247 		x_amend_bid_def := 'N';
4248 		x_round_bid_def := 'N';
4249 		x_prev_bid_disq := 'N';
4250 		x_edit_draft := 'N';
4251 
4252         -- The following flag is needed for payments copy
4253         -- This sets to y if defaulting is happening because the
4254         -- negotiation being amended or new round started
4255         l_new_round_or_amended := 'N';
4256 
4257 		-- Create the new bid
4258 		create_new_draft_bid
4259 			(p_auc_header_id,
4260 			x_prev_bid_number,
4261 			p_tpid,
4262 			p_tpcid,
4263 			p_tpname,
4264 			p_tpcname,
4265 			p_userid,
4266 			p_venid,
4267 			p_vensid,
4268 			p_venscode,
4269 			p_auctpid,
4270 			p_auctpcid,
4271 			p_buyer_user,
4272 			l_new_round_or_amended,
4273 			x_rebid_flag,
4274 			x_prev_bid_disq,
4275 			x_bid_number,
4276             x_return_status,
4277             x_return_code);
4278 		RETURN;
4279 
4280 	END IF;
4281 
4282 	-- Finally, handle proxy bidding and copy rank
4283 	handle_proxy
4284 		(p_auc_header_id,
4285 		x_bid_number,
4286 		p_tpid,
4287 		p_tpcid,
4288 		p_vensid,
4289 		l_temp_num,
4290 		x_rebid_flag);
4291 
4292 	-- We get the returned bid_number into l_temp_num because it will null
4293 	-- out a x_prev_bid_number if it is not the rebidding case
4294 	IF (x_prev_bid_number IS null) THEN
4295 		x_prev_bid_number := l_temp_num;
4296 	END IF;
4297 
4298 END check_and_load_bid;
4299 
4300 -- ======================================================================
4301 -- FUNCTION:	GET_SOURCE_BID_FOR_SPREADSHEET
4302 --  PARAMETERS:
4303 --	p_auc_header_id		IN auction header id of negotiation
4304 --  	p_prev_round_auc_header_id  IN auction header id of prev round negotiation
4305 --	p_tpid			IN trading partner id of supplier
4306 --	p_tpcid			IN trading partner contact id of supplier
4307 --  	p_auc_header_id_orig_amend IN auction header id of original amendment
4308 --	p_amendment_number	IN amendment number
4309 --	p_vensid		IN vendor site to place a bid for
4310 --
4311 --  COMMENT: This function is only used in spreadsheet export case.
4312 --           Determine whether there are any bids existing for the current amendment.
4313 --	     If not, determines whether there are any bids in previous amendment
4314 --           of current round; If still not, check whether there is an active bid
4315 --           from previous round
4316 -- ======================================================================
4317 FUNCTION get_source_bid_for_spreadsheet
4318 (
4319 	p_auc_header_id			IN pon_auction_headers_all.auction_header_id%TYPE,
4320 	p_prev_round_auc_header_id 	IN pon_auction_headers_all.auction_header_id_prev_round%TYPE,
4321 	p_tpid				IN pon_bid_headers.trading_partner_id%TYPE,
4322 	p_tpcid				IN pon_bid_headers.trading_partner_contact_id%TYPE,
4323 	p_auc_header_id_orig_amend 	IN pon_auction_headers_all.auction_header_id_orig_amend%TYPE,
4324 	p_amendment_number		IN pon_auction_headers_all.amendment_number%TYPE,
4325 	p_vensid			IN pon_bid_headers.vendor_site_id%TYPE
4326 
4327 ) RETURN NUMBER IS
4328 
4329      CURSOR current_amendment_bids IS
4330 	select bid_number
4331 		from pon_bid_headers
4335 		and nvl(vendor_site_id, -1) = nvl(p_vensid, -1)
4332 		where auction_header_id = p_auc_header_id
4333 		and trading_partner_id = p_tpid
4334 		and trading_partner_contact_id = p_tpcid
4336 		and bid_status in ('DRAFT', 'ACTIVE', 'DISQUALIFIED')
4337 		order by decode(bid_status, 'DRAFT', 3,
4338 				'ACTIVE', 2,
4339 				'DISQUALIFIED', 1) desc, publish_date desc;
4340 
4341      CURSOR previous_amendments_bids IS
4342 	 select bh.bid_number
4343 		from
4344 		pon_bid_headers bh,
4345 		pon_auction_headers_all ah
4346 		where
4347 		bh.auction_header_id = ah.auction_header_id
4348 		and ah.auction_header_id_orig_amend = p_auc_header_id_orig_amend
4349 		and bh.trading_partner_id = p_tpid
4350 		and bh.trading_partner_contact_id = p_tpcid
4351 		and nvl(bh.vendor_site_id, -1) = nvl(p_vensid, -1)
4352 		and bh.bid_status in ('DRAFT', 'RESUBMISSION', 'DISQUALIFIED')
4353 		order by ah.amendment_number desc,
4354 			decode(bh.bid_status, 'DRAFT', 3,
4355    				'RESUBMISSION' , 2,
4356 				'DISQUALIFIED', 1) desc,
4357 			bh.publish_date desc;
4358 
4359      x_prev_bid_number  NUMBER := -1;
4360 
4361 BEGIN
4362 
4363      OPEN current_amendment_bids;
4364      FETCH current_amendment_bids into x_prev_bid_number;
4365 
4366      IF (current_amendment_bids%NOTFOUND) THEN
4367 
4368 	-- try to find a previous bid from previous amendments in the current round
4369 	IF (p_amendment_number is not null AND p_amendment_number >=1) THEN
4370 
4371 		OPEN previous_amendments_bids;
4372 		FETCH previous_amendments_bids into x_prev_bid_number;
4373 		IF (previous_amendments_bids%NOTFOUND) THEN
4374 			x_prev_bid_number := -1;
4375 		END IF;
4376 		CLOSE previous_amendments_bids;
4377 
4378 	ELSIF (p_prev_round_auc_header_id is not null) THEN
4379 
4380 	  -- try to find an active bid from previous round
4381 
4382 		select max(bid_number) prev_round_bid
4383 		into x_prev_bid_number
4384 		from pon_bid_headers bh,
4385 	     	     pon_auction_headers_all ah,
4386      		     pon_auction_headers_all ah2
4387 		where bh.auction_header_id = ah.auction_header_id
4388 		and ah.auction_header_id_orig_amend = ah2.auction_header_id_orig_amend
4389 		and ah2.auction_header_id = p_prev_round_auc_header_id
4390 		and bh.trading_partner_id = p_tpid
4391 		and bh.trading_partner_contact_id = p_tpcid
4392 		and bh.bid_status in ('ACTIVE', 'RESUBMISSION', 'DISQUALIFIED')
4393 		and nvl(bh.vendor_site_id, -1) = nvl(p_vensid, -1);
4394 
4395 	END IF;
4396      END IF;
4397 
4398      CLOSE current_amendment_bids;
4399 
4400      IF (x_prev_bid_number is null) THEN
4401 	x_prev_bid_number := -1;
4402      END IF;
4403 
4404      return x_prev_bid_number;
4405 
4406 END GET_SOURCE_BID_FOR_SPREADSHEET;
4407 
4408 --------------------------------------------------------------------------------
4409 --                      can_supplier_create_payments                         --
4410 --------------------------------------------------------------------------------
4411 -- Start of Comments
4412 --
4413 -- API Name: can_supplier_create_payments
4414 --
4415 -- Type    : Private
4416 --
4417 -- Pre-reqs: None
4418 --
4419 -- Function: This API is called by the Response Import Spreadsheet page.
4420 --           It determines if there are any lines in the RFQ that can have payments.
4421 --           If yes, then the "Pay Items" will be one of the option in the Import
4422 --           and Export poplists
4423 --
4424 --
4425 -- Parameters:
4426 --
4427 --              p_auction_header_id       IN      NUMBER
4428 --                   Auction header id - required
4429 --              p_bid_number       IN      NUMBER
4430 --                   Bid Number - required
4431 --              p_po_style_id       IN      NUMBER
4432 --                   PO Style Id - required
4433 --
4434 --
4435 --              x_can_create_payments OUT      VARCHAR2
4436 --                   Returns Y if payments can be created for atleast one of the
4437 --                   line to which supplier has access. Otherwise Returns N
4438 --
4439 --
4440 -- End of Comments
4441 --------------------------------------------------------------------------------
4442 -----
4443 PROCEDURE  can_supplier_create_payments(
4444 				       p_auction_header_id       IN        NUMBER,
4445 				       p_bid_number              IN        NUMBER,
4446 				       x_can_create_payments OUT NOCOPY VARCHAR2) IS
4447 BEGIN
4448 	  x_can_create_payments := 'N';
4449 
4450 	    -- Check if there are any lines OTHER THAN GROUP, LOT_LINE and to which supplier does not have access
4451 	    -- If there are lines then l_can_create_payment = 'Y'
4452 	    -- Else l_can_create_payment = 'N';
4453 
4454 	    SELECT 'Y'
4455 	      INTO x_can_create_payments
4456 	      FROM dual
4457 	     WHERE EXISTS (SELECT 1
4458 	                     FROM PON_AUCTION_ITEM_PRICES_ALL pai,
4459 	                          PON_BID_ITEM_PRICES pbi,
4460 	                          PON_AUCTION_HEADERS_ALL pah
4461 			        WHERE pai.auction_header_id = p_auction_header_id
4462 	                      AND pai.group_type NOT IN ('GROUP','LOT_LINE')
4463 	                      AND pbi.auction_header_id = pai.auction_header_id
4464 	                      AND pbi.line_number = pai.line_number
4465 	                      AND pbi.bid_number = p_bid_number
4469   EXCEPTION
4466 	                      AND pah.auction_header_id = pai.auction_header_id
4467 	                      AND pah.progress_payment_type <> 'NONE'
4468 						  AND pah.contract_type = 'STANDARD');
4470 	  WHEN NO_DATA_FOUND
4471 	   THEN
4472 	     x_can_create_payments := 'N';
4473 	  WHEN OTHERS THEN
4474 	       RAISE;
4475 END can_supplier_create_payments;
4476 
4477 --------------------------------------------------------------------------------
4478 --                      apply_price_factors                                   --
4479 --------------------------------------------------------------------------------
4480 /**
4481   * This function calculates the total price on a line including the
4482   * buyer and the supplier price factors in auction currency.
4483   *
4484   * This function will be used in view objects to display supplier's
4485   * previous round price as the start price for this line instead of the
4486   * auction line start price.
4487   *
4488   * This is as per Cendant requirement to enforce upon suppliers to
4489   * bid lower than their bid on the previous round of the negotiation
4490   *
4491   * Currently anticipated usage of this function are on View Bid Page
4492   * (ViewBidItemsVO), Negotiation Summary page (AuctionItemPricesAllVO)
4493   * and bid creation page (ResponseAMImpl)
4494   *
4495   * p_auction_header_id - current round auction header id
4496   * p_prev_auc_active_bid_number - bid number on the previous round
4497   * p_line_number  - current line number
4498   * p_unit_price - bid line price in auction currency
4499   * p_quantity - bid quantity for the current line
4500 */
4501 FUNCTION apply_price_factors(p_auction_header_id	IN NUMBER,
4502                              p_prev_auc_active_bid_number  IN NUMBER,
4503                              p_line_number          IN NUMBER,
4504                              p_unit_price 			IN NUMBER,
4505                              p_quantity 			IN NUMBER
4506                              )
4507 RETURN NUMBER IS
4508 
4509   l_api_name CONSTANT VARCHAR2(30) := 'apply_price_factors';
4510   l_progress VARCHAR2(100) := '0';
4511 
4512   l_total_price NUMBER;
4513   l_bid_line_pf_unit_price NUMBER;
4514   l_auc_pf_unit_price NUMBER;
4515 
4516   l_contract_type pon_auction_headers_all.contract_type%TYPE;
4517   l_supplier_view_type pon_auction_headers_all.supplier_view_type%TYPE;
4518 
4519   l_bid_auction_curr_unit_price pon_bid_item_prices.unit_price%TYPE;
4520   l_bid_quantity pon_bid_item_prices.quantity%TYPE;
4521 
4522   l_is_spo_transformed VARCHAR2(1);
4523 
4524 BEGIN
4525 
4526 -- auction information that we need
4527 
4528 l_progress := '10: fetch auction information';
4529 
4530 SELECT  contract_type,
4531         supplier_view_type
4532 INTO 	l_contract_type,
4533 	    l_supplier_view_type
4534 FROM	pon_auction_headers_all
4535 WHERE	auction_header_id = p_auction_header_id;
4536 
4537 
4538 
4539 l_progress := '20: perform SPO/TRANSFORMED check';
4540 
4541 IF (l_supplier_view_type = 'TRANSFORMED' AND
4542     l_contract_type = 'STANDARD') THEN
4543       l_is_spo_transformed := 'Y';
4544 ELSE
4545       l_is_spo_transformed := 'N';
4546 END IF;
4547 
4548 -- calculate the buyer price factors
4549 
4550 l_progress := '30: calculate unit price plus buyer price factors';
4551 
4552 BEGIN
4553 
4554 SELECT  (p_unit_price * ppsf.percentage) +
4555         ppsf.unit_price +
4556         ppsf.fixed_amount/decode(l_is_spo_transformed,
4557                                  'Y', nvl(p_quantity, 1),
4558                                  nvl(aip.quantity, 1)
4559                                  )
4560 INTO    l_auc_pf_unit_price
4561 FROM	pon_pf_supplier_formula ppsf,
4562        	pon_auction_item_prices_all aip,
4563        	pon_bid_headers pbh
4564 WHERE 	ppsf.auction_header_id = p_auction_header_id
4565 AND   	ppsf.line_number = p_line_number
4566 AND   	ppsf.trading_partner_id = pbh.trading_partner_id
4567 AND   	ppsf.vendor_site_id = pbh.vendor_site_id
4568 AND 	pbh.bid_number = p_prev_auc_active_bid_number
4569 AND     aip.auction_header_id = ppsf.auction_header_id
4570 AND   	aip.line_number = ppsf.line_number;
4571 
4572 EXCEPTION
4573 
4574   WHEN NO_DATA_FOUND THEN
4575   	l_auc_pf_unit_price := p_unit_price;
4576 
4577 END;
4578 
4579 -- calculate the supplier price factors
4580 
4581 l_progress := '40: calculate supplier price factors';
4582 
4583 SELECT nvl(sum(decode(spf.pricing_basis,
4584                      'PER_UNIT', spf.auction_currency_value,
4585                      'PERCENTAGE',  spf.auction_currency_value/100 * p_unit_price,
4586                      (spf.auction_currency_value / decode(l_is_spo_transformed,
4587                                                       'Y', nvl(p_quantity, 1),
4588                                                        nvl(aip.quantity, 1)
4589                                                       )
4590                      )
4591                      )
4592                )
4593            ,0)
4594 INTO l_bid_line_pf_unit_price
4595 FROM pon_bid_price_elements spf,
4596      pon_auction_item_prices_all aip
4597 WHERE spf.bid_number = p_prev_auc_active_bid_number
4598 AND spf.line_number  = p_line_number
4599 AND spf.sequence_number <> -10
4600 AND spf.pf_type = 'SUPPLIER'
4601 AND aip.auction_header_id = spf.auction_header_id
4602 AND aip.line_number = spf.line_number;
4603 
4604 -- total price in auction currency
4605 l_progress := '60: return total price in auction currency';
4606 l_total_price := l_bid_line_pf_unit_price + l_auc_pf_unit_price;
4607 
4608 RETURN l_total_price;
4609 
4610 EXCEPTION
4611 
4612      WHEN OTHERS THEN
4613 	  IF fnd_msg_pub.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)THEN
4614 	     fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name, SQLERRM);
4615 	     IF ( fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
4616 		   fnd_log.string(log_level => fnd_log.level_unexpected
4617 		                  ,module    => g_pkg_name||'.'||l_api_name
4618                           ,message   => l_progress || ': ' || SQLERRM);
4619 	       fnd_log.string(log_level=>fnd_log.level_unexpected,
4620                                 module   =>g_pkg_name ||'.'||l_api_name,
4621                                 message  => 'Input parameter list: ' );
4622            fnd_log.string(log_level=>fnd_log.level_unexpected,
4623                                 module   =>g_pkg_name ||'.'||l_api_name,
4624                                 message  => 'Auction Header Id = ' ||  p_auction_header_id);
4625            fnd_log.string(log_level=>fnd_log.level_unexpected,
4626                                 module   =>g_pkg_name ||'.'||l_api_name,
4627                                 message  => 'Previous Round Active Bid Number = ' || p_prev_auc_active_bid_number);
4628            fnd_log.string(log_level=>fnd_log.level_unexpected,
4629                                 module   =>g_pkg_name ||'.'||l_api_name,
4630                                 message  => 'Line Number = ' || p_line_number);
4631 
4632          END IF;
4633       END IF;
4634       return NULL;
4635 END apply_price_factors;
4636 END PON_BID_DEFAULTING_PKG;