DBA Data[Home] [Help]

PACKAGE BODY: APPS.PON_NEGOTIATION_PUBLISH_PVT

Source


1 PACKAGE BODY PON_NEGOTIATION_PUBLISH_PVT AS
2 /* $Header: PONNEGPB.pls 120.46 2007/08/11 17:39:14 ukottama ship $ */
3 
4 g_module_prefix        CONSTANT VARCHAR2(50) := 'pon.plsql.PON_NEGOTIATION_PUBLISH_PVT.';
5 
6 TYPE DOCUMENT_TYPE_NAME IS TABLE OF PON_AUC_DOCTYPES.DOCTYPE_GROUP_NAME%TYPE INDEX BY BINARY_INTEGER;
7 TYPE DOCUMENT_TYPE_REQUIRED_RULE IS TABLE OF PON_AUC_DOCTYPE_RULES.REQUIRED_FLAG%TYPE INDEX BY PON_AUC_BIZRULES.NAME%TYPE;
8 TYPE DOCUMENT_TYPE_VALIDITY_RULE IS TABLE OF PON_AUC_DOCTYPE_RULES.VALIDITY_FLAG%TYPE INDEX BY PON_AUC_BIZRULES.NAME%TYPE;
9 
10 g_document_type_required_rule DOCUMENT_TYPE_REQUIRED_RULE;
11 g_document_type_validity_rule DOCUMENT_TYPE_VALIDITY_RULE;
12 g_document_type_names DOCUMENT_TYPE_NAME;
13 
14 g_null_int CONSTANT NUMBER := -9999;
15 g_unlimited_int CONSTANT NUMBER := 10000;
16 g_invalid_string CONSTANT VARCHAR2(10) := ')(*%^';
17 g_item_price_type_id CONSTANT NUMBER := -10;
18 g_precision_any CONSTANT NUMBER := 10000;
19 g_temp_labor CONSTANT VARCHAR2(20) := 'TEMP LABOR';
20 g_fixed_price CONSTANT VARCHAR2(20) :='FIXED PRICE';
21 g_fixed_amount CONSTANT VARCHAR2(20) := 'FIXED_AMOUNT';
22 g_per_unit CONSTANT VARCHAR2(10) := 'PER_UNIT';
23 g_empty_price_type CONSTANT VARCHAR2(20) := 'EMPTY PRICE TYPE';
24 g_none CONSTANT VARCHAR2(20) := 'NONE';
25 g_amount CONSTANT VARCHAR2(20) := 'AMOUNT';
26 g_interface_type CONSTANT VARCHAR2(20) := 'PUBLISHNEG';
27 g_auction_item_type CONSTANT VARCHAR2(20) := 'AUCTION_ITEM';
28 g_auction_attrs_type CONSTANT VARCHAR2(20) := 'AUCTION_ATTRS';
29 g_auction_pfs_type CONSTANT VARCHAR2(20) := 'AUCTION_PFS';
30 g_auction_pbs_type CONSTANT VARCHAR2(20) := 'AUCTION_PBS';
31 g_auction_pds_type CONSTANT VARCHAR2(20) := 'AUCTION_PDS';
32 g_rfq_pymts_type CONSTANT VARCHAR2(20) := 'AUCTION_PYMTS';
33 g_program_type_neg_approve CONSTANT VARCHAR2(20) := 'NEG_APPROVAL';
34 g_program_type_neg_publish CONSTANT VARCHAR2(20) := 'NEG_PUBLISH';
35 g_auction_pts_type CONSTANT VARCHAR2(20) := 'AUCTION_PTS';
36 
37 
38 FUNCTION boolean_to_string (
39   p_boolean IN BOOLEAN
40 ) RETURN STRING IS
41 BEGIN
42 
43   IF (p_boolean) THEN
44     RETURN 'TRUE';
45   ELSE
46     RETURN 'FALSE';
47   END IF;
48 END boolean_to_string;
49 
50 FUNCTION IS_PROJECT_SPONSORED (
51   p_project_id IN NUMBER
52 ) RETURN VARCHAR2 IS
53 BEGIN
54 
55   IF p_project_id IS NOT NULL AND
56      GMS_TRANSACTIONS_PUB.IS_SPONSORED_PROJECT(p_project_id) THEN
57     RETURN 'Y';
58   ELSE
59      RETURN 'N';
60   END IF;
61 END IS_PROJECT_SPONSORED;
62 
63 
64 --Start Validation procedures
65 
66 /*
67  * Line validations: The following validations involve only the item_prices_all table and not the
68  * po line types table
69  * 1. The group type for a line should be 'GROUP_LINE' or 'LOT_LINE' if the parent_line_number is populated.
70  *    The group type for a line should be 'GROUP' or 'LOT' if the parent_line_number is not populated
71  * 2. The item description should not be an empty string if the doc type rules do not allow
72  * 3. The line_type_id should not be null
73  * 4. The category should not be empty
74  * 5. Target price should be positive
75  * 6. Bid start price should be positive
76  * 7. Current_price should be positive
77  * 8. Target price should be less than bid start price
78  * 9. If display target price is set then target prices should be entered
79  * 10. Po minimum release amount should be positive
80  * 11. When display unit target prices is set then unit target price should be entered
81  * 12. Target price  precision should be less than the auction currencyprecision
82  * 13. Bid start price precision should be less than the auction currency precision
83  * 14. Current price precision should be less than the auction currency precision
84  * 15. The precision of po minimum release amount should be less than the fnd currency precision
85  * 16. Need_by date should be after start date
86  * 17. Need by date should be after close bidding date. If no close bidding date then after sysdate
87  * 18. Need by start date should be after close bidding date. If no close bidding date then after sysdate
88  * 19. For lines with "planned" inventory items in a SPO negotiation either need-by from or need-by to date must be entered
89  * 20. If this is a global agreement then cummulative price breaks are not allowed.
90  * 21. If the user has selected to enter price breaks then there should be atleast one price break
91  *     If the price breaks are non negotiable (which also means the price break type is 'REQUIRED')
92  *     and the size is zero, the user must enter a price break.
93  * 22. If the user has selected to enter price differentials then there should be atleast one price differential.
94  * 23. if there are no price differentials and price differentails type is not NONE just give an error.
95  * 24. Every LOT or GROUP should have atleast one line inside it.
96  * 25. Unit Price should be greater than zero
97  * 26. There should be atleast one supplier price factor if the unit price is entered
98  * 27. The total weight of all attributes in an MAS auction should be 100
99  * 28. If quantity is entered then it should be positive
100  * 29. The precision of po agreed amount should be less than the auction currency PRECISION
101  * 30. Ship to location should not be NULL in case of RFI
102  * 31. In a private auction there should be no line without any invitees
103  */
104 
105 PROCEDURE VALIDATE_PROJECTS_DETAILS (
106   p_project_id         IN NUMBER,
107   p_task_id            IN NUMBER,
108   p_expenditure_date   IN DATE,
109   p_expenditure_type   IN VARCHAR2,
110   p_expenditure_org    IN NUMBER,
111   p_person_id          IN NUMBER,
112   p_auction_header_id  IN NUMBER,
113   p_line_number        IN NUMBER,
114   p_document_disp_line_number    IN VARCHAR2,
115   p_payment_id         IN NUMBER,
116   p_interface_line_id  IN NUMBER,
117   p_payment_display_number     IN NUMBER,
118   p_batch_id           IN NUMBER,
119   p_table_name         IN VARCHAR2,
120   p_interface_type     IN VARCHAR2,
121   p_entity_type        IN VARCHAR2,
122   p_called_from        IN VARCHAR2
123 ) IS
124 l_module  CONSTANT VARCHAR2(32) := 'VALIDATE_PROJECTS_DETAILS';
125 l_progress         VARCHAR2(200);
126 l_msg_application  VARCHAR2(50);
127 l_msg_type         VARCHAR2(1);
128 l_msg_token1       VARCHAR2(1000);
129 l_msg_token2       VARCHAR2(1000);
130 l_msg_token3       VARCHAR2(1000);
131 l_msg_data         VARCHAR2(1000);
132 l_msg_count        NUMBER;
133 l_billable_flag    VARCHAR2(1);
134 l_error_message_name      VARCHAR2(30);
135 l_token1_name      VARCHAR2(10);
136 l_token1_value      VARCHAR2(22);
137 l_token2_name      VARCHAR2(10);
138 l_token2_value      VARCHAR2(22);
139 l_token3_name      VARCHAR2(10);
140 l_token3_value      VARCHAR2(22);
141 
142 BEGIN
143 
144   IF p_called_from = 'LINES' THEN
145 
146     l_error_message_name := 'PON_PATC_VALIDATION_L';
147     l_token2_name := 'LINENUM';
148     l_token2_value := p_document_disp_line_number;
149     l_token3_name := null;
150     l_token3_value := null;
151   ELSIF p_called_from = 'PAYMENTS' THEN
152 
153     l_error_message_name := 'PON_PATC_VALIDATION_P';
154     l_token2_name := 'LINENUM';
155     l_token2_value := p_document_disp_line_number;
156     l_token3_name := 'PAYITEMNUM';
157     l_token3_value := p_payment_display_number;
158   ELSE --p_called_from = PAYMENTS_SP, LINES_SP
159     l_error_message_name := 'PON_PATC_VALIDATION_G';
160     l_token2_name := null;
161     l_token2_value := null;
162     l_token3_name := null;
163     l_token3_value := null;
164   END IF;
165 
166     PA_TRANSACTIONS_PUB.validate_transaction(
167       X_PROJECT_ID         => p_project_id,
168       X_TASK_ID            => p_task_id,
169       X_EI_DATE            => p_expenditure_date,
170       X_EXPENDITURE_TYPE   => p_expenditure_type,
171       X_NON_LABOR_RESOURCE => null,
172       X_PERSON_ID          => null,
173       x_incurred_by_org_id => p_expenditure_org,
174       X_CALLING_MODULE     => 'PO',
175       X_MSG_APPLICATION    => l_msg_application,
176       X_MSG_TYPE           => l_msg_type,
177       X_MSG_TOKEN1         => l_msg_token1,
178       x_msg_data           => l_msg_data,
179       X_MSG_TOKEN2         => l_msg_token2,
180       X_MSG_TOKEN3         => l_msg_token3,
181       X_MSG_COUNT          => l_msg_count,
182       X_BILLABLE_FLAG      => l_billable_flag);
183 
184     IF l_msg_data IS NOT NULL AND l_msg_type = 'E' THEN
185       INSERT INTO pon_interface_errors
186       (
187          error_message_name,
188          token1_name,
189          token1_value,
190          token2_name,
191          token2_value,
192          token3_name,
193          token3_value,
194          error_value_datatype,
195          interface_type,
196          table_name,
197          batch_id,
198          entity_type,
199          auction_header_id,
200          line_number,
201          payment_id,
202          interface_line_id,
203          expiration_date,
204          created_by,
205          creation_date,
206          last_updated_by,
207          last_update_date,
208          last_update_login
209       )
210        VALUES
211       (
212          l_error_message_name,
213          'PROJMSG',
214          fnd_message.get_string(l_msg_application, l_msg_data),
215          l_token2_name,
216          l_token2_value,
217          l_token3_name,
218          l_token3_value,
219          'TXT',
220          p_interface_type,
221          p_table_name,
222          p_batch_id,
223          p_entity_type, --DECODE(p_called_from,'LINES',g_auction_item_type,'PAYMENTS',g_rfq_pymts_type),
224          p_auction_header_id,
225          p_line_number,
226          p_payment_id,
227          p_interface_line_id,
228          SYSDATE+7,
229          FND_GLOBAL.user_id,
230          SYSDATE,
231          FND_GLOBAL.user_id,
232          SYSDATE,
233          FND_GLOBAL.login_id
234       );
235 	END IF;
236 EXCEPTION
237     WHEN OTHERS THEN
238 
239     IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.g_current_runtime_level) THEN
240       FND_LOG.string (log_level => FND_LOG.level_exception,
241         module  => g_module_prefix || 'VALIDATE_PROJECTS_DETAILS',
242         message => 'Exception occured validate_projects_details'
243             || ' Error Number :' || SQLCODE || ' Exception Message :' || SUBSTR(SQLERRM, 1, 200));
244     END IF;
245 END VALIDATE_PROJECTS_DETAILS;
246 
247 PROCEDURE val_item_prices_all (
248   p_auction_header_id IN NUMBER,
249   p_request_id IN NUMBER,
250   p_expiration_date IN DATE,
251   p_user_id IN NUMBER,
252   p_login_id IN NUMBER,
253   p_batch_id IN NUMBER,
254   p_precision IN NUMBER,
255   p_fnd_precision IN NUMBER,
256   p_close_bidding_date IN DATE,
257   p_contract_type IN VARCHAR2,
258   p_global_agreement_flag IN VARCHAR2,
259   p_bid_ranking IN VARCHAR2,
260   p_doctype_id IN NUMBER,
261   p_invitees_count IN NUMBER,
262   p_bid_list_type IN VARCHAR2
263 ) IS
264 
265 l_temp NUMBER;
266 l_temp_fnd NUMBER;
267 l_price_tiers_indicator PON_AUCTION_HEADERS_ALL.PRICE_TIERS_INDICATOR%TYPE;
268 
269 BEGIN
270 
271   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
272     FND_LOG.string(log_level => FND_LOG.level_procedure,
273       module  =>  g_module_prefix || 'val_item_prices_all',
274       message  => 'Entering PON_NEGOTIATION_HELPER_PVT.val_item_prices_all'
275                   || ', p_auction_header_id = ' || p_auction_header_id
276                   || ', p_expiration_date = ' || p_expiration_date
277                   || ', p_request_id = ' || p_request_id
278                   || ', p_user_id = ' || p_user_id
279                   || ', p_login_id = ' || p_login_id
280                   || ', p_batch_id = ' || p_batch_id);
281   END IF; --}
282 
283   IF (p_precision <> g_precision_any) THEN
284     l_temp := power (10, p_precision);
285   ELSE
286     l_temp := 0;
287   END IF;
288 
289   Select price_tiers_indicator
290   into l_price_tiers_indicator
291   from pon_auction_headers_all
292   where auction_header_id = p_auction_header_id ;
293 
294   l_temp_fnd := power (10, p_fnd_precision);
295   	--Splited 1 -  fix bug 4908493
296   INSERT ALL  --bugfix
297 
298   -- The group type for a line should be 'GROUP_LINE' or 'LOT_LINE' if the parent_line_number is populated
299   -- The group type for a line should be 'GROUP' or 'LOT' if the parent_line_number is not populated
300 
301   WHEN
302   (
303     sel_group_type IS NULL OR
304     (sel_group_type IN ('GROUP_LINE', 'LOT_LINE') AND sel_parent_line_number IS NULL) OR
305     (sel_group_type IN ('GROUP', 'LOT') AND sel_parent_line_number IS NOT NULL)
306   )
307 
308   THEN INTO PON_INTERFACE_ERRORS
309   (
310     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
311     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
312     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
313   )
314   VALUES
315   (
316     g_interface_type, --INTERFACE_TYPE
317     'PON_INVALID_GROUP_TYPE', --ERROR_MESSAGE_NAME
318     p_request_id, -- REQUEST_ID
319     p_batch_id, --BATCH_ID
320     g_auction_item_type, -- ENTITY_TYPE
321     p_auction_header_id, -- AUCTION_HEADER_ID
322     sel_line_number, -- LINE_NUMBER
323     p_expiration_date, -- EXPIRATION_DATE
324     'NUMBER', -- TOKEN1_NAME
325     sel_document_disp_line_number, -- TOKEN1_VALUE
326     p_user_id, -- CREATED_BY
327     sysdate, -- CREATION_DATE
328     p_user_id, -- LAST_UPDATED_BY
329     sysdate, -- LAST_UPDATE_DATE
330     p_login_id
331   )
332 
333   -- The item description should not be an empty string if the doc type rules do not allow
334   WHEN
335   (
336     g_document_type_required_rule('ITEM_DESCRIPTION') = 'Y' AND
337     g_document_type_validity_rule ('ITEM_DESCRIPTION') = 'Y' AND
338     (sel_item_description IS NULL OR trim (sel_item_description) = '')
339   )
340 
341   THEN INTO PON_INTERFACE_ERRORS
342   (
343     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
344     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
345     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
346   )
347   VALUES
348   (
349     g_interface_type, --INTERFACE_TYPE
350     'PON_AUC_ITEMDESC_REQUIRED', -- ERROR_MESSAGE_NAME
351     p_request_id, -- REQUEST_ID
352     p_batch_id, -- BATCH_ID
353     g_auction_item_type, -- ENTITY_TYPE
354     p_auction_header_id, -- AUCTION_HEADER_ID
355     sel_line_number, -- LINE_NUMBER
356     p_expiration_date, -- EXPIRATION_DATE
357     'LINENUM', -- TOKEN1_NAME
358     sel_document_disp_line_number, -- TOKEN1_VALUE
359     p_user_id, -- CREATED_BY
360     sysdate, -- CREATION_DATE
361     p_user_id, -- LAST_UPDATED_BY
362     sysdate,
363     p_login_id
364   )
365   -- THE LINE_TYPE_ID SHOULD NOT BE NULL
366 
367   WHEN
368   (
369     g_document_type_required_rule ('LINE_TYPE') = 'Y' AND
370     g_document_type_validity_rule ('LINE_TYPE') = 'Y' AND
371     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
372     sel_line_type_id IS NULL
373   )
374 
375   THEN INTO PON_INTERFACE_ERRORS
376   (
377     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
378     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
379     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
380   )
381   VALUES
382   (
383     g_interface_type, --INTERFACE_TYPE
384     'PON_AUC_LINETYPE_REQUIRED', -- ERROR_MESSAGE_NAME
385     p_request_id, -- REQUEST_ID
386     p_batch_id, --BATCH_ID
387     g_auction_item_type, -- ENTITY_TYPE
388     p_auction_header_id, -- AUCTION_HEADER_ID
389     sel_line_number, -- LINE_NUMBER
390     p_expiration_date, -- EXPIRATION_DATE
391     'LINENUM', -- TOKEN1_NAME
392     sel_document_disp_line_number, -- TOKEN1_VALUE
393     p_user_id, -- CREATED_BY
394     sysdate, -- CREATION_DATE
395     p_user_id, -- LAST_UPDATED_BY
396     sysdate, -- LAST_UPDATE_DATE
397     p_login_id
398   )
399 
400   -- The category should not be empty
401 
402   WHEN
403   (
404     (sel_category_name IS NULL OR TRIM (sel_category_name) = '' OR sel_category_id IS NULL) AND
405     NVL (sel_group_type, g_invalid_string) <> 'GROUP'
406   )
407 
408   THEN INTO PON_INTERFACE_ERRORS
409   (
410     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
411     EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
412     LAST_UPDATE_LOGIN
413   )
414   VALUES
415   (
416     g_interface_type, --INTERFACE_TYPE
417     'PON_AUC_CAT_REQUIRED', -- ERROR_MESSAGE_NAME
418     p_request_id, -- REQUEST_ID
419     p_batch_id, --BATCH_ID
420     g_auction_item_type, -- ENTITY_TYPE
421     p_auction_header_id, -- AUCTION_HEADER_ID
422     sel_line_number, -- LINE_NUMBER
423     p_expiration_date, -- EXPIRATION_DATE
424     'LINENUM', -- TOKEN1_NAME
425     sel_document_disp_line_number, -- TOKEN1_VALUE
426     p_user_id, -- CREATED_BY
427     sysdate, -- CREATION_DATE
428     p_user_id, -- LAST_UPDATED_BY
429     sysdate, -- LAST_UPDATE_DATE
430     p_login_id
431   )
432 
433   -- Target price should be positive
434 
435   WHEN
436   (
437     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
438     sel_target_price IS NOT NULL AND
439     sel_target_price <= 0
440   )
441 
442   THEN INTO PON_INTERFACE_ERRORS
443   (
444     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
445     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
446     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
447   )
448 
449   VALUES
450   (
451     g_interface_type, --INTERFACE_TYPE
452     'PON_AUCTS_TARGETPRICE_BE_POSIT', -- ERROR_MESSAGE_NAME
453     p_request_id, -- REQUEST_ID
454     p_batch_id, --BATCH_ID
455     g_auction_item_type, -- ENTITY_TYPE
456     p_auction_header_id, -- AUCTION_HEADER_ID
457     sel_line_number, -- LINE_NUMBER
458     p_expiration_date, -- EXPIRATION_DATE
459     'LINENUM', -- TOKEN1_NAME
460     sel_document_disp_line_number, -- TOKEN1_VALUE
461     p_user_id, -- CREATED_BY
462     sysdate, -- CREATION_DATE
463     p_user_id, -- LAST_UPDATED_BY
464     sysdate, -- LAST_UPDATE_DATE
465     p_login_id
466   )
467 
468   -- BID START PRICE SHOULD BE POSITIVE
469 
470   WHEN
471   (
472     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
473     sel_bid_start_price IS NOT NULL AND
474     sel_bid_start_price <= 0
475   )
476 
477   THEN INTO PON_INTERFACE_ERRORS
478   (
479     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
480     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
481     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
482   )
483 
484   VALUES
485   (
486     g_interface_type, --INTERFACE_TYPE
487     'PON_AUCTS_STARTPRICE_BE_POSIT', -- ERROR_MESSAGE_NAME
488     p_request_id, -- REQUEST_ID
489     p_batch_id, --BATCH_ID
490     g_auction_item_type, -- ENTITY_TYPE
491     p_auction_header_id, -- AUCTION_HEADER_ID
492     sel_line_number, -- LINE_NUMBER
493     p_expiration_date, -- EXPIRATION_DATE
494     'LINENUM', -- TOKEN1_NAME
495     sel_document_disp_line_number, -- TOKEN1_VALUE
496     p_user_id, -- CREATED_BY
497     sysdate, -- CREATION_DATE
498     p_user_id, -- LAST_UPDATED_BY
499     sysdate, -- LAST_UPDATE_DATE
500     p_login_id
501   )
502 
503   -- CURRENT_PRICE SHOULD BE POSITIVE
504 
505   WHEN
506   (
507     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
508     sel_current_price IS NOT NULL AND
509     sel_current_price  <= 0
510   )
511 
512   THEN INTO PON_INTERFACE_ERRORS
513   (
514     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
515     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
516     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
517   )
518 
519   VALUES
520   (
521     g_interface_type, --INTERFACE_TYPE
522     'PON_AUCTS_CURRENTPRICE_BE_POS', -- ERROR_MESSAGE_NAME
523     p_request_id, -- REQUEST_ID
524     p_batch_id, --BATCH_ID
525     g_auction_item_type, -- ENTITY_TYPE
526     p_auction_header_id, -- AUCTION_HEADER_ID
527     sel_line_number, -- LINE_NUMBER
528     p_expiration_date, -- EXPIRATION_DATE
529     'LINENUM', -- TOKEN1_NAME
530     sel_document_disp_line_number, -- TOKEN1_VALUE
531     p_user_id, -- CREATED_BY
532     sysdate, -- CREATION_DATE
533     p_user_id, -- LAST_UPDATED_BY
534     sysdate, -- LAST_UPDATE_DATE
535     p_login_id
536   )
537 
538   -- TARGET PRICE SHOULD BE LESS THAN BID START PRICE
539 
540   WHEN
541   (
542     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
543     sel_target_price >= sel_bid_start_price
544   )
545 
546   THEN INTO PON_INTERFACE_ERRORS
547   (
548     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
549     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
550     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
551   )
552 
553   VALUES
554   (
555     g_interface_type, --INTERFACE_TYPE
556     'PON_AUCTS_TARGET_LOWER_START', -- ERROR_MESSAGE_NAME
557     p_request_id, -- REQUEST_ID
558     p_batch_id, --BATCH_ID
559     g_auction_item_type, -- ENTITY_TYPE
560     p_auction_header_id, -- AUCTION_HEADER_ID
561     sel_line_number, -- LINE_NUMBER
562     p_expiration_date, -- EXPIRATION_DATE
563     'LINENUM', -- TOKEN1_NAME
564     sel_document_disp_line_number, -- TOKEN1_VALUE
565     p_user_id, -- CREATED_BY
566     sysdate, -- CREATION_DATE
567     p_user_id, -- LAST_UPDATED_BY
568     sysdate, -- LAST_UPDATE_DATE
569     p_login_id
570   )
571 
572   -- IF DISPLAY TARGET PRICE IS SET THEN TARGET PRICES SHOULD BE ENTERED
573 
574   WHEN
575   (
576     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
577     sel_target_price IS NULL AND
578     sel_display_target_price_flag = 'Y'
579   )
580   THEN INTO PON_INTERFACE_ERRORS
581   (
582     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
583     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
584     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
585   )
586   VALUES
587   (
588     g_interface_type, --INTERFACE_TYPE
589     'PON_AUCTS_NUM_TARGETPRICE', -- ERROR_MESSAGE_NAME
590     p_request_id, -- REQUEST_ID
591     p_batch_id, --BATCH_ID
592     g_auction_item_type, -- ENTITY_TYPE
593     p_auction_header_id, -- AUCTION_HEADER_ID
594     sel_line_number, -- LINE_NUMBER
595     p_expiration_date, -- EXPIRATION_DATE
596     'LINENUM', -- TOKEN1_NAME
597     sel_document_disp_line_number, -- TOKEN1_VALUE
598     p_user_id, -- CREATED_BY
599     sysdate, -- CREATION_DATE
600     p_user_id, -- LAST_UPDATED_BY
601     sysdate, -- LAST_UPDATE_DATE
602     p_login_id -- LAST_UPDATE_LOGIN
603   )
604 
605   -- PO MINIMUM RELEASE AMOUNT SHOULD BE POSITIVE
606 
607   WHEN
608   (
609     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
610     sel_po_min_rel_amount IS NOT NULL AND
611     sel_po_min_rel_amount <> g_null_int AND
612     sel_po_min_rel_amount < 0
613   )
614 
615   THEN INTO PON_INTERFACE_ERRORS
616   (
617     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
618     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
619     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
620   )
621   VALUES
622   (
623     g_interface_type, --INTERFACE_TYPE
624     'PON_AUCTS_MINRELAMT_BE_POSITIV', -- ERROR_MESSAGE_NAME
625     p_request_id, -- REQUEST_ID
626     p_batch_id, --BATCH_ID
627     g_auction_item_type, -- ENTITY_TYPE
628     p_auction_header_id, -- AUCTION_HEADER_ID
629     sel_line_number, -- LINE_NUMBER
630     p_expiration_date, -- EXPIRATION_DATE
631     'LINENUM', -- TOKEN1_NAME
632     sel_document_disp_line_number, -- TOKEN1_VALUE
633     p_user_id, -- CREATED_BY
634     sysdate, -- CREATION_DATE
635     p_user_id, -- LAST_UPDATED_BY
636     sysdate, -- LAST_UPDATE_DATE
637     p_login_id -- LAST_UPDATE_LOGIN
638   )
639 
640   -- WHEN DISPLAY UNIT TARGET PRICES IS SET THEN UNIT TARGET PRICE SHOULD BE ENTERED
641 
642   WHEN
643   (
644     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
645     sel_unit_target_price IS NULL AND
646     sel_unit_display_target_flag = 'Y'
647   )
648 
649   THEN INTO PON_INTERFACE_ERRORS
650   (
651     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
652     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
653     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
654   )
655 
656   VALUES
657   (
658     g_interface_type, --INTERFACE_TYPE
659     'PON_AUC_UNIT_SHOW_TARGET', -- ERROR_MESSAGE_NAME
660     p_request_id, -- REQUEST_ID
661     p_batch_id, --BATCH_ID
662     g_auction_item_type, -- ENTITY_TYPE
663     p_auction_header_id, -- AUCTION_HEADER_ID
664     sel_line_number, -- LINE_NUMBER
665     p_expiration_date, -- EXPIRATION_DATE
666     'LINENUM', -- TOKEN1_NAME
667     sel_document_disp_line_number, -- TOKEN1_VALUE
668     p_user_id, -- CREATED_BY
669     sysdate, -- CREATION_DATE
670     p_user_id, -- LAST_UPDATED_BY
671     sysdate, -- LAST_UPDATE_DATE
672     p_login_id -- LAST_UPDATE_LOGIN
673   )
674 
675   -- TARGET PRICE  PRECISION SHOULD BE LESS THAN THE AUCTION CURRENCYPRECISION
676 
677   WHEN
678   (
679     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
680     sel_target_price IS NOT NULL AND
681     ABS (sel_target_price * l_temp - TRUNC (sel_target_price * l_temp)) > 0
682   )
683   THEN INTO PON_INTERFACE_ERRORS
684   (
685     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
686     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
687     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
688   )
689   VALUES
690   (
691     g_interface_type, --INTERFACE_TYPE
692     'PON_AUCTS_TARGETPRICE_PRECIS', -- ERROR_MESSAGE_NAME
693     p_request_id, -- REQUEST_ID
694     p_batch_id, -- BATCH_ID
695     g_auction_item_type, -- ENTITY_TYPE
696     p_auction_header_id, -- AUCTION_HEADER_ID
697     sel_line_number, -- LINE_NUMBER
698     p_expiration_date, -- EXPIRATION_DATE
699     'LINENUM', -- TOKEN1_NAME
700     sel_document_disp_line_number, -- TOKEN1_VALUE
701     p_user_id, -- CREATED_BY
702     sysdate, -- CREATION_DATE
703     p_user_id, -- LAST_UPDATED_BY
704     sysdate, -- LAST_UPDATE_DATE
705     p_login_id -- LAST_UPDATE_LOGIN
706   )
707 
708   -- BID START PRICE PRECISION SHOULD BE LESS THAN THE AUCTION CURRENCY PRECISION
709 
710   WHEN
711   (
712     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
713     sel_bid_start_price IS NOT NULL AND
714     ABS (sel_bid_start_price * l_temp - TRUNC (sel_bid_start_price * l_temp)) > 0
715   )
716   THEN INTO PON_INTERFACE_ERRORS
717   (
718     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
719     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
720     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
721   )
722   VALUES
723   (
724     g_interface_type, --INTERFACE_TYPE
725     'PON_AUCTS_STARTPRICE_PRECISION', -- ERROR_MESSAGE_NAME
726     p_request_id, -- REQUEST_ID
727     p_batch_id, -- BATCH_ID
728     g_auction_item_type, -- ENTITY_TYPE
729     p_auction_header_id, -- AUCTION_HEADER_ID
730     sel_line_number, -- LINE_NUMBER
731     p_expiration_date, -- EXPIRATION_DATE
732     'LINENUM', -- TOKEN1_NAME
733     sel_document_disp_line_number, -- TOKEN1_VALUE
734     p_user_id, -- CREATED_BY
735     sysdate, -- CREATION_DATE
736     p_user_id, -- LAST_UPDATED_BY
737     sysdate, -- LAST_UPDATE_DATE
738     p_login_id -- LAST_UPDATE_LOGIN
739   )
740 
741   -- CURRENT PRICE PRECISION SHOULD BE LESS THAN THE AUCTION CURRENCY PRECISION
742 
743   WHEN
744   (
745     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
746     sel_current_price IS NOT NULL AND
747     ABS (sel_current_price * l_temp - TRUNC (sel_current_price * l_temp)) > 0
748   )
749   THEN INTO PON_INTERFACE_ERRORS
750   (
751     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
752     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
753     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
754   )
755   VALUES
756   (
757     g_interface_type, --INTERFACE_TYPE
758     'PON_AUCTS_CURRENTPRICE_PRECIS', -- ERROR_MESSAGE_NAME
759     p_request_id, -- REQUEST_ID
760     p_batch_id, -- BATCH_ID
761     g_auction_item_type, -- ENTITY_TYPE
762     p_auction_header_id, -- AUCTION_HEADER_ID
763     sel_line_number, -- LINE_NUMBER
764     p_expiration_date, -- EXPIRATION_DATE
765     'LINENUM', -- TOKEN1_NAME
766     sel_document_disp_line_number, -- TOKEN1_VALUE
767     p_user_id, -- CREATED_BY
768     sysdate, -- CREATION_DATE
769     p_user_id, -- LAST_UPDATED_BY
770     sysdate, -- LAST_UPDATE_DATE
771     p_login_id -- LAST_UPDATE_LOGIN
772   )
773 
774   -- THE PRECISION OF PO MINIMUM RELEASE AMOUNT SHOULD BE LESS THAN THE FND CURRENCY
775   -- PRECISION
776 
777   WHEN
778   (
779     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
780     sel_po_min_rel_amount IS NOT NULL AND
781     sel_po_min_rel_amount <> g_null_int AND
782     ABS (sel_po_min_rel_amount * l_temp_fnd - TRUNC (sel_po_min_rel_amount * l_temp_fnd)) > 0
783   )
784 
785   THEN INTO PON_INTERFACE_ERRORS
786   (
787     INTERFACE_TYPE,
788     ERROR_MESSAGE_NAME,
789     REQUEST_ID,
790     BATCH_ID,
791     ENTITY_TYPE,
792     AUCTION_HEADER_ID,
793     LINE_NUMBER,
794     EXPIRATION_DATE,
795     CREATED_BY,
796     CREATION_DATE,
797     LAST_UPDATED_BY,
798     LAST_UPDATE_DATE,
799     LAST_UPDATE_LOGIN
800   )
801 
802   VALUES
803   (
804      g_interface_type, --INTERFACE_TYPE
805      'PON_AUCTS_TOO_MANY_DIGITS_A', -- ERROR_MESSAGE_NAME
806      p_request_id, -- REQUEST_ID
807      p_batch_id, -- BATCH_ID
808      g_auction_item_type, -- ENTITY_TYPE
809      p_auction_header_id, -- AUCTION_HEADER_ID
810      sel_line_number, -- LINE_NUMBER
811      p_expiration_date, -- EXPIRATION_DATE
812      p_user_id, -- CREATED_BY
813      sysdate, -- CREATION_DATE
814      p_user_id, -- LAST_UPDATED_BY
815      sysdate, -- LAST_UPDATE_DATE
816      p_login_id -- LAST_UPDATE_LOGIN
817   )
818 
819   --  need_by date should be after start date
820 
821   WHEN
822   (
823     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
824     sel_need_by_date < sel_need_by_start_date
825   )
826 
827   THEN INTO PON_INTERFACE_ERRORS
828   (
829     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
830     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
831     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
832   )
833 
834   VALUES
835    (
836     g_interface_type, --INTERFACE_TYPE
837     'PON_AUCTS_NEEDBY_BEFORE_FROM', -- ERROR_MESSAGE_NAME
838     p_request_id, -- REQUEST_ID
839     p_batch_id, --BATCH_ID
840     g_auction_item_type, -- ENTITY_TYPE
841     p_auction_header_id, -- AUCTION_HEADER_ID
842     sel_line_number, -- LINE_NUMBER
843     p_expiration_date, -- EXPIRATION_DATE
844     'LINENUM', -- TOKEN1_NAME
845     sel_document_disp_line_number, -- TOKEN1_VALUE
846     p_user_id, -- CREATED_BY
847     sysdate, -- CREATION_DATE
848     p_user_id, -- LAST_UPDATED_BY
849     sysdate, -- LAST_UPDATE_DATE
850     p_login_id -- LAST_UPDATE_LOGIN
851    )
852 
853   -- NEED BY DATE SHOULD BE AFTER CLOSE BIDDING DATE
854   -- IF NO CLOSE BIDDING DATE THEN AFTER SYSDATE
855 
856   WHEN
857   (
858     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
859     sel_need_by_date IS NOT NULL AND
860     sel_need_by_date < nvl (p_close_bidding_date, SYSDATE)
861   )
862 
863   THEN INTO PON_INTERFACE_ERRORS
864   (
865     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
866     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
867     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
868   )
869 
870   VALUES
871   (
872     g_interface_type, --INTERFACE_TYPE
873     NVL2 (p_close_bidding_date, 'PON_AUC_NEEDBY_TO_BEFORE_CLOSE',
874        'PON_AUC_NEEDBY_TO_BEFORE_TODAY'), -- ERROR_MESSAGE_NAME
875     p_request_id, -- REQUEST_ID
876     p_batch_id, --BATCH_ID
877     g_auction_item_type, -- ENTITY_TYPE
878     p_auction_header_id, -- AUCTION_HEADER_ID
879     sel_line_number, -- LINE_NUMBER
880     p_expiration_date, -- EXPIRATION_DATE
881     'LINENUM', -- TOKEN1_NAME
882     sel_document_disp_line_number, -- TOKEN1_VALUE
883     p_user_id, -- CREATED_BY
884     sysdate, -- CREATION_DATE
885     p_user_id, -- LAST_UPDATED_BY
886     sysdate, -- LAST_UPDATE_DATE
887     p_login_id -- LAST_UPDATE_LOGIN
888   )
889 
890    SELECT
891     LINE_NUMBER sel_line_number,
892     DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
893     GROUP_TYPE sel_group_type,
894     PARENT_LINE_NUMBER sel_parent_line_number,
895     ITEM_DESCRIPTION sel_item_description,
896     LINE_TYPE_ID sel_line_type_id,
897     CATEGORY_NAME sel_category_name,
898     CATEGORY_ID sel_category_id,
899     TARGET_PRICE sel_target_price,
900     PO_MIN_REL_AMOUNT sel_po_min_rel_amount,
901     CURRENT_PRICE sel_current_price,
902     BID_START_PRICE sel_bid_start_price,
903     UNIT_DISPLAY_TARGET_FLAG sel_unit_display_target_flag,
904     UNIT_TARGET_PRICE sel_unit_target_price,
905     DISPLAY_TARGET_PRICE_FLAG sel_display_target_price_flag,
906     NEED_BY_START_DATE sel_need_by_start_date,
907     NEED_BY_DATE sel_need_by_date
908   FROM
909     PON_AUCTION_ITEM_PRICES_ALL
910   WHERE
911     AUCTION_HEADER_ID = p_auction_header_id;
912 
913 
914 
915 	--Split2 - fix bug 4908493
916 	INSERT ALL --bugfix
917 
918 
919   -- NEED BY START DATE SHOULD BE AFTER CLOSE BIDDING DATE
920   -- IF NO CLOSE BIDDING DATE THEN AFTER SYSDATE
921 
922   WHEN
923   (
924     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
925     sel_need_by_start_date IS NOT NULL AND
926     sel_need_by_start_date < nvl (p_close_bidding_date, SYSDATE) AND
927     p_contract_type = 'STANDARD'
928   )
929 
930   THEN INTO PON_INTERFACE_ERRORS
931   (
932     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
933     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
934     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
935   )
936 
937   VALUES
938   (
939     g_interface_type, --INTERFACE_TYPE
940     NVL2 (p_close_bidding_date, 'PON_AUC_NEEDBY_FROM_BEF_CLOSE', 'PON_AUC_NEEDBY_FROM_BEF_TODAY'), -- ERROR_MESSAGE_NAME
941     p_request_id, -- REQUEST_ID
942     p_batch_id, --BATCH_ID
943     g_auction_item_type, -- ENTITY_TYPE
944     p_auction_header_id, -- AUCTION_HEADER_ID
945     sel_line_number, -- LINE_NUMBER
946     p_expiration_date, -- EXPIRATION_DATE
947     'LINENUM', -- TOKEN1_NAME
948     sel_document_disp_line_number, -- TOKEN1_VALUE
949     p_user_id, -- CREATED_BY
950     sysdate, -- CREATION_DATE
951     p_user_id, -- LAST_UPDATED_BY
952     sysdate, -- LAST_UPDATE_DATE
953     p_login_id -- LAST_UPDATE_LOGIN
954   )
955 
956   -- for lines with "planned" inventory items in a SPO negotiation
957   -- either need-by from or need-by to date must be entered
958 
959   WHEN
960   (
961     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
962     sel_need_by_date IS NULL AND
963     sel_need_by_start_date IS NULL AND
964     p_contract_type = 'STANDARD' AND
965     EXISTS (
966       SELECT
967       'X'
968       FROM
969       MTL_SYSTEM_ITEMS_KFV MSI,
970       FINANCIALS_SYSTEM_PARAMS_ALL FSP
971       WHERE
972       NVL(FSP.ORG_ID, -9999) = NVL(sel_org_id,-9999) AND
973       MSI.ORGANIZATION_ID = FSP.INVENTORY_ORGANIZATION_ID AND
974       MSI.INVENTORY_ITEM_ID =  sel_item_id AND
975       (MSI.INVENTORY_PLANNING_CODE IN (1, 2) OR MSI.MRP_PLANNING_CODE IN
976        (3, 4, 7, 8, 9))
977      )
978   )
979 
980   THEN INTO PON_INTERFACE_ERRORS
981   (
982     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
983     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
984     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
985   )
986   VALUES
987   (
988     g_interface_type, --INTERFACE_TYPE
989     'PON_NEED_BY_DATE_REQUIRED', -- ERROR_MESSAGE_NAME
990     p_request_id, -- REQUEST_ID
991     p_batch_id, --BATCH_ID
992     g_auction_item_type, -- ENTITY_TYPE
993     p_auction_header_id, -- AUCTION_HEADER_ID
994     sel_line_number, -- LINE_NUMBER
995     p_expiration_date, -- EXPIRATION_DATE
996     'LINENUM', -- TOKEN1_NAME
997     sel_document_disp_line_number, -- TOKEN1_VALUE
998     p_user_id, -- CREATED_BY
999     sysdate, -- CREATION_DATE
1000     p_user_id, -- LAST_UPDATED_BY
1001     sysdate, -- LAST_UPDATE_DATE
1002     p_login_id -- LAST_UPDATE_LOGIN
1003   )
1004 
1005   -- if this is a global agreement then cummulative price breaks are not
1006   -- allowed
1007 
1008   WHEN
1009   (
1010     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1011     sel_price_break_type = 'CUMULATIVE' AND
1012     p_global_agreement_flag = 'Y' AND
1013     l_price_tiers_indicator = 'PRICE_BREAKS'
1014   )
1015 
1016   THEN INTO PON_INTERFACE_ERRORS
1017   (
1018     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1019     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1020     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1021   )
1022   VALUES
1023   (
1024     g_interface_type, --INTERFACE_TYPE
1025     'PON_AUC_BAD_PBTYPE_GLOBAL', -- ERROR_MESSAGE_NAME
1026     p_request_id, -- REQUEST_ID
1027     p_batch_id, --BATCH_ID
1028     g_auction_item_type, -- ENTITY_TYPE
1029     p_auction_header_id, -- AUCTION_HEADER_ID
1030     sel_line_number, -- LINE_NUMBER
1031     p_expiration_date, -- EXPIRATION_DATE
1032     'LINENUMBER', -- TOKEN1_NAME
1033     sel_document_disp_line_number, -- TOKEN1_VALUE
1034     p_user_id, -- CREATED_BY
1035     sysdate, -- CREATION_DATE
1036     p_user_id, -- LAST_UPDATED_BY
1037     sysdate, -- LAST_UPDATE_DATE
1038     p_login_id -- LAST_UPDATE_LOGIN
1039   )
1040 
1041   -- If the user has selected to enter price breaks
1042   -- then there should be atleast one price break
1043   -- If the price breaks are non negotiable (which also means the price
1044   -- break type is 'REQUIRED') and the size is zero, the user must
1045   -- enter a price break.
1046   WHEN
1047   (
1048     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1049     sel_price_break_neg_flag = 'N' AND
1050     NVL (sel_price_break_type, g_invalid_string) <> g_none AND
1051     NOT EXISTS (
1052       SELECT 1
1053       FROM
1054         PON_AUCTION_SHIPMENTS_ALL PASA
1055       WHERE
1056         PASA.AUCTION_HEADER_ID = p_auction_header_id AND
1057         PASA.LINE_NUMBER = sel_line_number
1058       )
1059   )
1060 
1061   THEN INTO PON_INTERFACE_ERRORS
1062   (
1063     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1064     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, CREATED_BY, CREATION_DATE,
1065     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1066   )
1067 
1068   VALUES
1069   (
1070     g_interface_type, --INTERFACE_TYPE
1071     'PON_PRICEBREAK_MUST_BE_ENTERED', -- ERROR_MESSAGE_NAME
1072     p_request_id, -- REQUEST_ID
1073     p_batch_id, --BATCH_ID
1074     g_auction_item_type, -- ENTITY_TYPE
1075     p_auction_header_id, -- AUCTION_HEADER_ID
1076     sel_line_number, -- LINE_NUMBER
1077     p_expiration_date, -- EXPIRATION_DATE
1078     p_user_id, -- CREATED_BY
1079     sysdate, -- CREATION_DATE
1080     p_user_id, -- LAST_UPDATED_BY
1081     sysdate, -- LAST_UPDATE_DATE
1082     p_login_id -- LAST_UPDATE_LOGIN
1083   )
1084 
1085   -- If the user has selected to enter price differentials then
1086   -- there should be atleast one price differential
1087 
1088   WHEN
1089   (
1090     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1091     sel_differential_response_type IS NOT NULL AND
1092     NOT EXISTS (
1093       SELECT 1
1094       FROM
1095       PON_PRICE_DIFFERENTIALS PPD
1096       WHERE
1097       PPD.AUCTION_HEADER_ID = p_auction_header_id AND
1098       PPD.LINE_NUMBER = sel_line_number AND
1099       PPD.SHIPMENT_NUMBER = -1
1100     )
1101   )
1102 
1103   THEN INTO PON_INTERFACE_ERRORS
1104   (
1105     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1106     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE,TOKEN1_NAME, TOKEN1_VALUE,
1107     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1108   )
1109   VALUES
1110   (
1111     g_interface_type, --INTERFACE_TYPE
1112     'PON_PRICEDIFF_MUST_BE_ENTERED', -- ERROR_MESSAGE_NAME
1113     p_request_id, -- REQUEST_ID
1114     p_batch_id, -- BATCH_ID
1115     g_auction_item_type, -- ENTITY_TYPE
1116     p_auction_header_id, -- AUCTION_HEADER_ID
1117     sel_line_number, -- LINE_NUMBER
1118     p_expiration_date, -- EXPIRATION_DATE
1119     'LINE_NUMBER', -- TOKEN1_NAME
1120     sel_document_disp_line_number, -- TOKEN1_VALUE
1121     p_user_id, -- CREATED_BY
1122     sysdate, -- CREATION_DATE
1123     p_user_id, -- LAST_UPDATED_BY
1124     sysdate, -- LAST_UPDATE_DATE
1125     p_login_id-- LAST_UPDATE_LOGIN
1126   )
1127 
1128   -- if there are no price differentials and price differentails type
1129   -- is not NONE just give an error
1130   WHEN
1131   (
1132     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1133     sel_differential_response_type IS NULL AND
1134     EXISTS (
1135       SELECT 1
1136       FROM
1137       PON_PRICE_DIFFERENTIALS PPD
1138       WHERE
1139       PPD.AUCTION_HEADER_ID = p_auction_header_id AND
1140       PPD.LINE_NUMBER = sel_line_number AND
1141       PPD.SHIPMENT_NUMBER = -1
1142     )
1143   )
1144 
1145   THEN INTO PON_INTERFACE_ERRORS
1146   (
1147     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1148     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE,TOKEN1_NAME, TOKEN1_VALUE,
1149     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1150   )
1151   VALUES
1152    (
1153     g_interface_type, --INTERFACE_TYPE
1154     'PON_SET_DIFF_RESPONSE_TYPE', -- ERROR_MESSAGE_NAME
1155     p_request_id, -- REQUEST_ID
1156     p_batch_id, -- BATCH_ID
1157     g_auction_item_type, -- ENTITY_TYPE
1158     p_auction_header_id, -- AUCTION_HEADER_ID
1159     sel_line_number, -- LINE_NUMBER
1160     p_expiration_date, -- EXPIRATION_DATE
1161     'LINE_NUMBER', -- TOKEN1_NAME
1162     sel_document_disp_line_number, -- TOKEN1_VALUE
1163     p_user_id, -- CREATED_BY
1164     sysdate, -- CREATION_DATE
1165     p_user_id, -- LAST_UPDATED_BY
1166     sysdate, -- LAST_UPDATE_DATE
1167     p_login_id-- LAST_UPDATE_LOGIN
1168    )
1169 
1170   -- Every LOT or GROUP should have atleast one line inside it
1171 
1172   WHEN
1173   (
1174     sel_group_type IN ('LOT', 'GROUP') AND
1175     NOT EXISTS (
1176       SELECT LINE_NUMBER
1177       FROM PON_AUCTION_ITEM_PRICES_ALL
1178       WHERE
1179       AUCTION_HEADER_ID = p_auction_header_id AND
1180       PARENT_LINE_NUMBER = sel_line_number
1181     )
1182   )
1183 
1184   THEN INTO PON_INTERFACE_ERRORS
1185   (
1186     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1187     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1188     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1189   )
1190   VALUES
1191   (
1192     g_interface_type, --INTERFACE_TYPE
1193     decode (sel_group_type, 'LOT', 'PON_LOT_NEEDS_SUBLINES', 'PON_GROUP_NEEDS_SUBLINES'), -- ERROR_MESSAGE_NAME
1194     p_request_id, -- REQUEST_ID
1195     p_batch_id, --BATCH_ID
1196     g_auction_item_type, -- ENTITY_TYPE
1197     p_auction_header_id, -- AUCTION_HEADER_ID
1198     sel_line_number, -- LINE_NUMBER
1199     p_expiration_date, -- EXPIRATION_DATE
1200     'NUMBER', -- TOKEN1_NAME
1201     sel_document_disp_line_number, -- TOKEN1_VALUE
1202     p_user_id, -- CREATED_BY
1203     sysdate, -- CREATION_DATE
1204     p_user_id, -- LAST_UPDATED_BY
1205     sysdate, -- LAST_UPDATE_DATE
1206     p_login_id -- LAST_UPDATE_LOGIN
1207   )
1208 
1209   -- Unit Price should be greater than zero
1210 
1211   WHEN
1212   (
1213     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1214     sel_unit_target_price IS NOT NULL AND
1215     sel_unit_target_price < 0
1216   )
1217 
1218   THEN INTO PON_INTERFACE_ERRORS
1219   (
1220     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1221     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1222     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1223   )
1224   VALUES
1225   (
1226     g_interface_type, --INTERFACE_TYPE
1227     'PON_AUC_UNIT_TARGET_BE_POS', -- ERROR_MESSAGE_NAME
1228     p_request_id, -- REQUEST_ID
1229     p_batch_id, --BATCH_ID
1230     g_auction_item_type, -- ENTITY_TYPE
1231     p_auction_header_id, -- AUCTION_HEADER_ID
1232     sel_line_number, -- LINE_NUMBER
1233     p_expiration_date, -- EXPIRATION_DATE
1234     'LINENUM', -- TOKEN1_NAME
1235     sel_document_disp_line_number, -- TOKEN1_VALUE
1236     p_user_id, -- CREATED_BY
1237     sysdate, -- CREATION_DATE
1238     p_user_id, -- LAST_UPDATED_BY
1239     sysdate, -- LAST_UPDATE_DATE
1240     p_login_id -- LAST_UPDATE_LOGIN
1241   )
1242 
1243   -- There should be atleast one supplier price factor if the unit price is entered
1244 
1245   WHEN
1246   (
1247     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1248     sel_unit_target_price IS NOT NULL AND
1249     NOT EXISTS (
1250         SELECT 1
1251         FROM
1252         PON_PRICE_ELEMENTS
1253         WHERE
1254         AUCTION_HEADER_ID = p_auction_header_id AND
1255         LINE_NUMBER = sel_line_number AND
1256         PF_TYPE='SUPPLIER'
1257        )
1258   )
1259 
1260   THEN INTO PON_INTERFACE_ERRORS
1261   (
1262     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1263     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1264     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1265   )
1266   VALUES
1267   (
1268     g_interface_type, --INTERFACE_TYPE
1269     'PON_AUC_UNITPRICE_SUPPLIER', -- ERROR_MESSAGE_NAME
1270     p_request_id, -- REQUEST_ID
1271     p_batch_id, -- BATCH_ID
1272     g_auction_item_type, -- ENTITY_TYPE
1273     p_auction_header_id, -- AUCTION_HEADER_ID
1274     sel_line_number, -- LINE_NUMBER
1275     p_expiration_date, -- EXPIRATION_DATE
1276     'LINENUM', -- TOKEN1_NAME
1277     sel_document_disp_line_number, -- TOKEN1_VALUE
1278     p_user_id, -- CREATED_BY
1279     sysdate, -- CREATION_DATE
1280     p_user_id, -- LAST_UPDATED_BY
1281     sysdate, -- LAST_UPDATE_DATE
1282     p_login_id -- LAST_UPDATE_LOGIN
1283   )
1284 
1285   -- The total weight of all attributes in an MAS auction should be 100
1286 
1287   WHEN
1288   (
1289     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1290     p_bid_ranking = 'MULTI_ATTRIBUTE_SCORING' AND
1291     EXISTS(
1292       SELECT 1
1293       FROM
1294         PON_AUCTION_ATTRIBUTES
1295       WHERE
1296         AUCTION_HEADER_ID = p_auction_header_id
1297         AND LINE_NUMBER = sel_line_number
1298         AND (NVL (SCORING_TYPE,g_invalid_string)='RANGE' OR NVL (SCORING_TYPE,g_invalid_string)='LOV')
1299     ) AND
1300     (
1301       SELECT
1302         SUM(weight)
1303       FROM
1304         PON_AUCTION_ATTRIBUTES
1305       WHERE
1306         AUCTION_HEADER_ID = p_auction_header_id
1307         AND LINE_NUMBER = sel_line_number) <> 100
1308   )
1309 
1310   THEN INTO PON_INTERFACE_ERRORS
1311   (
1312     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1313     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1314     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1315   )
1316   VALUES
1317   (
1318     g_interface_type, --INTERFACE_TYPE
1319     'PON_AUC_INVALID_WEIGHTS_LINE', -- ERROR_MESSAGE_NAME
1320     p_request_id, -- REQUEST_ID
1321     p_batch_id, --BATCH_ID
1322     g_auction_attrs_type, -- ENTITY_TYPE
1323     p_auction_header_id, -- AUCTION_HEADER_ID
1324     sel_line_number, -- LINE_NUMBER
1325     p_expiration_date, -- EXPIRATION_DATE
1326     'LINE', -- TOKEN1_NAME
1327     sel_document_disp_line_number, -- TOKEN1_VALUE
1328     p_user_id, -- CREATED_BY
1329     sysdate, -- CREATION_DATE
1330     p_user_id, -- LAST_UPDATED_BY
1331     sysdate, -- LAST_UPDATE_DATE
1332     p_login_id -- LAST_UPDATE_LOGIN
1333   )
1334 
1335   -- If quantity is entered then it should be positive
1336   --bug 6193585 - check whether the quantity is less or equal to zero
1337   WHEN
1338   (
1339     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1340     sel_quantity IS NOT NULL AND
1341     sel_quantity <= 0
1342   )
1343 
1344   THEN INTO PON_INTERFACE_ERRORS
1345   (
1346     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1347     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1348     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1349   )
1350   VALUES
1351   (
1352     g_interface_type, --INTERFACE_TYPE
1353     'PON_AUCTS_QUANTITY_BE_POSITIVE', -- ERROR_MESSAGE_NAME
1354     p_request_id, -- REQUEST_ID
1355     p_batch_id, --BATCH_ID
1356     g_auction_item_type, -- ENTITY_TYPE
1357     p_auction_header_id, -- AUCTION_HEADER_ID
1358     sel_line_number, -- LINE_NUMBER
1359     p_expiration_date, -- EXPIRATION_DATE
1360     'LINENUM', -- TOKEN1_NAME
1361     sel_document_disp_line_number, -- TOKEN1_VALUE
1362     p_user_id, -- CREATED_BY
1363     sysdate, -- CREATION_DATE
1364     p_user_id, -- LAST_UPDATED_BY
1365     sysdate, -- LAST_UPDATE_DATE
1366     p_login_id -- LAST_UPDATE_LOGIN
1367   )
1368 
1369   -- The precision of po agreed amount should be less than the auction currency PRECISION
1370 
1371   WHEN
1372   (
1373     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1374     sel_po_agreed_amount IS NOT NULL AND
1375     ABS (sel_po_agreed_amount * l_temp - TRUNC (sel_po_agreed_amount * l_temp)) > 0
1376   )
1377   THEN INTO PON_INTERFACE_ERRORS
1378   (
1379     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1380     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1381     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1382   )
1383 
1384   VALUES
1385   (
1386     g_interface_type, --INTERFACE_TYPE
1387     'PON_AUCTS_POAGREEDAMT_PRECIS', -- ERROR_MESSAGE_NAME
1388     p_request_id, -- REQUEST_ID
1389     p_batch_id, -- BATCH_ID
1390     g_auction_item_type, -- ENTITY_TYPE
1391     p_auction_header_id, -- AUCTION_HEADER_ID
1392     sel_line_number, -- LINE_NUMBER
1393     p_expiration_date, -- EXPIRATION_DATE
1394     'LINENUM', -- TOKEN1_NAME
1395     sel_document_disp_line_number, -- TOKEN1_VALUE
1396     p_user_id, -- CREATED_BY
1397     sysdate, -- CREATION_DATE
1398     p_user_id, -- LAST_UPDATED_BY
1399     sysdate, -- LAST_UPDATE_DATE
1400     p_login_id -- LAST_UPDATE_LOGIN
1401   )
1402 
1403   -- Ship to location should not be NULL for an SPO not coming from a req except in case of RFI
1404 
1405   WHEN
1406   (
1407     g_document_type_required_rule('SHIP_TO_LOCATION') = 'Y' AND
1408     g_document_type_names (p_doctype_id) <> PON_CONTERMS_UTL_PVT.SRC_REQUEST_FOR_INFORMATION AND
1409     p_contract_type = 'STANDARD' AND
1410     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1411     nvl (sel_line_origination_code,g_invalid_string) <> 'REQUISITION' AND
1412     sel_ship_to_location_id IS NULL
1413   )
1414   THEN INTO PON_INTERFACE_ERRORS
1415   (
1416     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1417     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1418     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1419   )
1420   VALUES
1421   (
1422     g_interface_type, --INTERFACE_TYPE
1423     'PON_AUC_SHIPTOLOC_MUST_ENTERED', -- ERROR_MESSAGE_NAME
1424     p_request_id, -- REQUEST_ID
1425     p_batch_id, -- BATCH_ID
1426     g_auction_item_type, -- ENTITY_TYPE
1427     p_auction_header_id, -- AUCTION_HEADER_ID
1428     sel_line_number, -- LINE_NUMBER
1429     p_expiration_date, -- EXPIRATION_DATE
1430     'LINENUM', -- TOKEN1_NAME
1431     sel_document_disp_line_number, -- TOKEN1_VALUE
1432     p_user_id, -- CREATED_BY
1433     sysdate, -- CREATION_DATE
1434     p_user_id, -- LAST_UPDATED_BY
1435     sysdate, -- LAST_UPDATE_DATE
1436     p_login_id -- LAST_UPDATE_LOGIN
1437   )
1438 
1439   -- In a private auction there should be no line without any invitees
1440 
1441   WHEN
1442   (
1443     p_bid_list_type = 'PRIVATE_BID_LIST' AND
1444     (SELECT COUNT(1)
1445     FROM PON_PARTY_LINE_EXCLUSIONS
1446     WHERE
1447     AUCTION_HEADER_ID = p_auction_header_id AND
1448     sel_group_type IN ('LOT', 'GROUP', 'LINE') AND
1449     LINE_NUMBER = sel_line_number) = p_invitees_count
1450   )
1451   THEN INTO PON_INTERFACE_ERRORS
1452   (
1453     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1454     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1455     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1456   )
1457   VALUES
1458   (
1459     g_interface_type, --INTERFACE_TYPE
1460     'PON_LINE_SANS_INVITEE', -- ERROR_MESSAGE_NAME
1461     p_request_id, -- REQUEST_ID
1462     p_batch_id, --BATCH_ID
1463     g_auction_item_type, -- ENTITY_TYPE
1464     p_auction_header_id, -- AUCTION_HEADER_ID
1465     sel_line_number, -- LINE_NUMBER
1466     p_expiration_date, -- EXPIRATION_DATE
1467     'NUMBER', -- TOKEN1_NAME
1468     sel_document_disp_line_number, -- TOKEN1_VALUE
1469     p_user_id, -- CREATED_BY
1470     sysdate, -- CREATION_DATE
1471     p_user_id, -- LAST_UPDATED_BY
1472     sysdate, -- LAST_UPDATE_DATE
1473     p_login_id -- LAST_UPDATE_LOGIN
1474   )
1475   SELECT
1476     LINE_NUMBER sel_line_number,
1477     DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
1478     GROUP_TYPE sel_group_type,
1479     UNIT_TARGET_PRICE sel_unit_target_price,
1480     NEED_BY_START_DATE sel_need_by_start_date,
1481     NEED_BY_DATE sel_need_by_date,
1482     ITEM_ID sel_item_id,
1483     ORG_ID sel_org_id,
1484     PRICE_BREAK_TYPE sel_price_break_type,
1485     DIFFERENTIAL_RESPONSE_TYPE sel_differential_response_type,
1486     PRICE_BREAK_NEG_FLAG sel_price_break_neg_flag,
1487     QUANTITY sel_quantity,
1488     PO_AGREED_AMOUNT sel_po_agreed_amount,
1489     LINE_ORIGINATION_CODE sel_line_origination_code,
1490     SHIP_TO_LOCATION_ID sel_ship_to_location_id
1491   FROM
1492     PON_AUCTION_ITEM_PRICES_ALL
1493   WHERE
1494     AUCTION_HEADER_ID = p_auction_header_id;
1495 
1496   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
1497     FND_LOG.string(log_level => FND_LOG.level_procedure,
1498       module  =>  g_module_prefix || 'val_item_prices_all',
1499       message  => 'Leaving PON_NEGOTIATION_HELPER_PVT.val_item_prices_all'
1500                   || ', p_auction_header_id = ' || p_auction_header_id);
1501   END IF; --}
1502 
1503 END val_item_prices_all;
1504 
1505 /*
1506  * Line validations: The following validations involve the item_prices_all table and the
1507  * po line types table.
1508  * 1. Uom code should not be empty for non fixed price items
1509  * 2. Ship to location should not be NULL for an SPO not coming from a req except in case of RFI
1510  * 3. Job id should not be NULL for temp labor lines
1511  * 4. For temp labor based lines the po agreed amount should be a positive number
1512  * 5. Only global agreements and RFIs can have temp labor lines
1513  * 6. Unit target price precision should be less than currency precision for fixed price lines
1514  * 7. For non fixed price items the unit price should have precision less than the auction currency precision
1515  * 8. Quantity should be entered for blanket/contract for lines with fixed amount price elements and non fixed price items
1516  * 9. Quantity is required if the document is RFI and the line is not temp labor based
1517  */
1518 PROCEDURE val_item_prices_po_lines (
1519   p_auction_header_id IN NUMBER,
1520   p_request_id IN NUMBER,
1521   p_expiration_date IN DATE,
1522   p_user_id IN NUMBER,
1523   p_login_id IN NUMBER,
1524   p_batch_id IN NUMBER,
1525   p_doctype_id IN NUMBER,
1526   p_contract_type IN VARCHAR2,
1527   p_global_agreement_flag IN VARCHAR2,
1528   p_precision IN NUMBER,
1529   p_fnd_precision IN NUMBER
1530 ) IS
1531 
1532 l_temp NUMBER;
1533 l_temp_fnd NUMBER;
1534 BEGIN
1535 
1536   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --
1537     FND_LOG.string(log_level => FND_LOG.level_procedure,
1538       module  =>  g_module_prefix || 'val_item_prices_po_lines',
1539       message  => 'Entering PON_NEGOTIATION_HELPER_PV.val_item_prices_po_lines'
1540                   || ', p_auction_header_id = ' || p_auction_header_id);
1541   END IF; --
1542 
1543   IF (p_precision <> g_precision_any) THEN
1544     l_temp := power (10, p_precision);
1545   ELSE
1546     l_temp := 0;
1547   END IF;
1548 
1549   l_temp_fnd := power (10, p_fnd_precision);
1550 
1551   INSERT ALL
1552 
1553   -- Uom code should not be empty for non fixed price items
1554 
1555   WHEN
1556   (
1557     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1558     NVL (sel_order_type_lookup_code, g_invalid_string) <> g_fixed_price AND
1559     NVL (sel_quantity_disabled_flag, g_invalid_string) <> 'Y' AND
1560     (
1561       sel_uom_code IS NULL OR TRIM (sel_uom_code) = ''
1562     )
1563   )
1564   THEN INTO PON_INTERFACE_ERRORS
1565   (
1566     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1567     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1568     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1569   )
1570   VALUES
1571   (
1572     g_interface_type, --INTERFACE_TYPE
1573     'PON_AUC_UOM_REQUIRED', -- ERROR_MESSAGE_NAME
1574     p_request_id, -- REQUEST_ID
1575     p_batch_id, --BATCH_ID
1576     g_auction_item_type, -- ENTITY_TYPE
1577     p_auction_header_id, -- AUCTION_HEADER_ID
1578     sel_line_number, -- LINE_NUMBER
1579     p_expiration_date, -- EXPIRATION_DATE
1580     'LINENUM', -- TOKEN1_NAME
1581     sel_document_disp_line_number, -- TOKEN1_VALUE
1582     p_user_id, -- CREATED_BY
1583     sysdate, -- CREATION_DATE
1584     p_user_id, -- LAST_UPDATED_BY
1585     sysdate, -- LAST_UPDATE_DATE
1586     p_login_id -- LAST_UPDATE_LOGIN
1587   )
1588 
1589   -- Ship to location should not be NULL in case of RFI and non temp labor lines
1590 
1591   WHEN
1592   (
1593     sel_ship_to_location_id IS NULL AND
1594     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1595     nvl (sel_line_origination_code,g_invalid_string) <> 'REQUISITION' AND
1596     g_document_type_required_rule('SHIP_TO_LOCATION') = 'Y' AND
1597     ((nvl (sel_purchase_basis,g_invalid_string) <> g_temp_labor AND
1598     g_document_type_names (p_doctype_id) = PON_CONTERMS_UTL_PVT.SRC_REQUEST_FOR_INFORMATION) OR
1599     p_contract_type = 'STANDARD')
1600   )
1601   THEN INTO PON_INTERFACE_ERRORS
1602   (
1603     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1604     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1605     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1606   )
1607   VALUES
1608   (
1609     g_interface_type, --INTERFACE_TYPE
1610     'PON_AUC_SHIPTOLOC_MUST_ENTERED', -- ERROR_MESSAGE_NAME
1611     p_request_id, -- REQUEST_ID
1612     p_batch_id, --BATCH_ID
1613     g_auction_item_type, -- ENTITY_TYPE
1614     p_auction_header_id, -- AUCTION_HEADER_ID
1615     sel_line_number, -- LINE_NUMBER
1616     p_expiration_date, -- EXPIRATION_DATE
1617     'LINENUM', -- TOKEN1_NAME
1618     sel_document_disp_line_number, -- TOKEN1_VALUE
1619     p_user_id, -- CREATED_BY
1620     sysdate, -- CREATION_DATE
1621     p_user_id, -- LAST_UPDATED_BY
1622     sysdate, -- LAST_UPDATE_DATE
1623     p_login_id-- LAST_UPDATE_LOGIN
1624   )
1625 
1626   -- Job id should not be NULL for temp labor lines
1627 
1628   WHEN
1629   (
1630     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1631     sel_job_id IS NULL AND
1632     sel_purchase_basis = g_temp_labor
1633   )
1634   THEN INTO PON_INTERFACE_ERRORS
1635   (
1636     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1637     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1638     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1639   )
1640   VALUES
1641   (
1642     g_interface_type, --INTERFACE_TYPE
1643     'PON_AUC_JOB_REQUIRED', -- ERROR_MESSAGE_NAME
1644     p_request_id, -- REQUEST_ID
1645     p_batch_id, --BATCH_ID
1646     g_auction_item_type, -- ENTITY_TYPE
1647     p_auction_header_id, -- AUCTION_HEADER_ID
1648     sel_line_number, -- LINE_NUMBER
1649     p_expiration_date, -- EXPIRATION_DATE
1650     'LINENUM', -- TOKEN1_NAME
1651     sel_document_disp_line_number, -- TOKEN1_VALUE
1652     p_user_id, -- CREATED_BY
1653     sysdate, -- CREATION_DATE
1654     p_user_id, -- LAST_UPDATED_BY
1655     sysdate, -- LAST_UPDATE_DATE
1656     p_login_id -- LAST_UPDATE_LOGIN
1657   )
1658 
1659   -- For temp labor based lines the po agreed amount should be a positive number
1660 
1661   WHEN
1662   (
1663     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1664     sel_po_agreed_amount IS NOT NULL AND
1665     sel_purchase_basis = g_temp_labor AND
1666     sel_po_agreed_amount <= 0
1667   )
1668   THEN INTO PON_INTERFACE_ERRORS
1669   (
1670     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1671     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1672     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1673   )
1674   VALUES
1675   (
1676     g_interface_type, --INTERFACE_TYPE
1677     'PON_AUCTS_POAGREEDAMT_BE_POSIT', -- ERROR_MESSAGE_NAME
1678     p_request_id, -- REQUEST_ID
1679     p_batch_id, --BATCH_ID
1680     g_auction_item_type, -- ENTITY_TYPE
1681     p_auction_header_id, -- AUCTION_HEADER_ID
1682     sel_line_number, -- LINE_NUMBER
1683     p_expiration_date, -- EXPIRATION_DATE
1684     'LINENUM', -- TOKEN1_NAME
1685     sel_document_disp_line_number, -- TOKEN1_VALUE
1686     p_user_id, -- CREATED_BY
1687     sysdate, -- CREATION_DATE
1688     p_user_id, -- LAST_UPDATED_BY
1689     sysdate, -- LAST_UPDATE_DATE
1690     p_login_id-- LAST_UPDATE_LOGIN
1691   )
1692 
1693   -- Only global agreements and RFIs can have temp labor lines
1694 
1695   WHEN
1696   (
1697     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1698     sel_purchase_basis = g_temp_labor AND
1699     g_document_type_names (p_doctype_id) <> PON_CONTERMS_UTL_PVT.SRC_REQUEST_FOR_INFORMATION AND
1700     NVL (p_global_agreement_flag, g_invalid_string) <> 'Y'
1701   )
1702 
1703   THEN INTO PON_INTERFACE_ERRORS
1704   (
1705     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1706     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, CREATED_BY, CREATION_DATE,
1707     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1708   )
1709   VALUES
1710   (
1711     g_interface_type, --INTERFACE_TYPE
1712     'PON_AUCTS_NOT_GLOBAL_TEMP', -- ERROR_MESSAGE_NAME
1713     p_request_id, -- REQUEST_ID
1714     p_batch_id, --BATCH_ID
1715     g_auction_item_type, -- ENTITY_TYPE
1716     p_auction_header_id, -- AUCTION_HEADER_ID
1717     sel_line_number, -- LINE_NUMBER
1718     p_expiration_date, -- EXPIRATION_DATE
1719     p_user_id, -- CREATED_BY
1720     sysdate, -- CREATION_DATE
1721     p_user_id, -- LAST_UPDATED_BY
1722     sysdate, -- LAST_UPDATE_DATE
1723     p_login_id -- LAST_UPDATE_LOGIN
1724   )
1725 
1726   -- Unit target price precision should be less than currency precision for fixed price lines
1727 
1728   WHEN
1729   (
1730     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1731     sel_unit_target_price IS NOT NULL AND
1732     sel_order_type_lookup_code = g_fixed_price AND
1733     ABS (sel_unit_target_price * l_temp_fnd - TRUNC (sel_unit_target_price * l_temp_fnd)) > 0
1734   )
1735 
1736   THEN INTO PON_INTERFACE_ERRORS
1737   (
1738     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1739     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1740     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1741   )
1742 
1743   VALUES
1744   (
1745     g_interface_type, --INTERFACE_TYPE
1746     'PON_AUC_UNITPRICE_CUR_PREC', -- ERROR_MESSAGE_NAME
1747     p_request_id, -- REQUEST_ID
1748     p_batch_id, -- BATCH_ID
1749     g_auction_item_type, -- ENTITY_TYPE
1750     p_auction_header_id, -- AUCTION_HEADER_ID
1751     sel_line_number, -- LINE_NUMBER
1752     p_expiration_date, -- EXPIRATION_DATE
1753     'LINENUM', -- TOKEN1_NAME
1754     sel_document_disp_line_number, -- TOKEN1_VALUE
1755     p_user_id, -- CREATED_BY
1756     sysdate, -- CREATION_DATE
1757     p_user_id, -- LAST_UPDATED_BY
1758     sysdate, -- LAST_UPDATE_DATE
1759     p_login_id -- LAST_UPDATE_LOGIN
1760   )
1761 
1762   -- For non fixed price items the unit price should have precision less than
1763   -- then auction currency precision
1764 
1765   WHEN
1766   (
1767     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1768     sel_unit_target_price IS NOT NULL AND
1769     NVL (sel_order_type_lookup_code, g_invalid_string) <> g_fixed_price AND
1770     ABS (sel_unit_target_price  * l_temp - TRUNC (sel_unit_target_price * l_temp)) > 0
1771   )
1772 
1773   THEN INTO PON_INTERFACE_ERRORS
1774   (
1775     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1776     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
1777     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1778   )
1779 
1780   VALUES
1781   (
1782     g_interface_type, --INTERFACE_TYPE
1783     'PON_AUC_UNITPRICE_PREC', -- ERROR_MESSAGE_NAME
1784     p_request_id, -- REQUEST_ID
1785     p_batch_id, -- BATCH_ID
1786     g_auction_item_type, -- ENTITY_TYPE
1787     p_auction_header_id, -- AUCTION_HEADER_ID
1788     sel_line_number, -- LINE_NUMBER
1789     p_expiration_date, -- EXPIRATION_DATE
1790     'LINENUM', -- TOKEN1_NAME
1791     sel_document_disp_line_number, -- TOKEN1_VALUE
1792     p_user_id, -- CREATED_BY
1793     sysdate, -- CREATION_DATE
1794     p_user_id, -- LAST_UPDATED_BY
1795     sysdate, -- LAST_UPDATE_DATE
1796     p_login_id -- LAST_UPDATE_LOGIN
1797   )
1798 
1799   -- Quantity should be entered for blanket/contract for lines with fixed amount
1800   -- price elements
1801 
1802   WHEN
1803   (
1804     (p_contract_type = 'BLANKET' OR p_contract_type = 'CONTRACT') AND
1805     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1806     NVL (sel_quantity_disabled_flag, g_invalid_string) <> 'Y' AND
1807     NVL (sel_order_type_lookup_code, g_invalid_string) <> g_fixed_price AND
1808     sel_quantity IS NULL AND
1809       EXISTS (
1810         SELECT 1
1811         FROM
1812         PON_PRICE_ELEMENTS
1813         WHERE
1814         AUCTION_HEADER_ID = p_auction_header_id AND
1815         LINE_NUMBER = sel_line_number AND
1816         PRICING_BASIS = g_fixed_amount)
1817   )
1818   THEN INTO PON_INTERFACE_ERRORS
1819   (
1820     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
1821     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY,
1822     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN,
1823     BATCH_ID
1824   )
1825   VALUES
1826   (
1827     g_interface_type, --INTERFACE_TYPE
1828     'PON_AUC_QUAN_FIXED_AMT', -- ERROR_MESSAGE_NAME
1829     p_request_id, -- REQUEST_ID
1830     g_auction_item_type, -- ENTITY_TYPE
1831     p_auction_header_id, -- AUCTION_HEADER_ID
1832     sel_line_number, -- LINE_NUMBER
1833     p_expiration_date, -- EXPIRATION_DATE
1834     'LINENUM', -- TOKEN1_NAME
1835     sel_document_disp_line_number, -- TOKEN1_VALUE
1836     p_user_id, -- CREATED_BY
1837     sysdate, -- CREATION_DATE
1838     p_user_id, -- LAST_UPDATED_BY
1839     sysdate, -- LAST_UPDATE_DATE
1840     p_login_id, -- LAST_UPDATE_LOGIN
1841     p_batch_id -- BATCH_ID
1842   )
1843 
1844   -- Quantity is required if the document is RFI and the line is not
1845   -- temp labor based
1846 
1847   WHEN
1848   (
1849     sel_quantity IS NULL AND
1850     NVL (sel_group_type, g_invalid_string) <> 'GROUP' AND
1851     NVL (sel_quantity_disabled_flag, g_invalid_string) <> 'Y' AND
1852     NVL (sel_order_type_lookup_code, g_invalid_string) <> g_fixed_price AND
1853     NVL (sel_purchase_basis, g_invalid_string) <> g_temp_labor AND
1854     g_document_type_names (p_doctype_id) = PON_CONTERMS_UTL_PVT.SRC_REQUEST_FOR_INFORMATION
1855   )
1856   THEN INTO PON_INTERFACE_ERRORS
1857   (
1858     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
1859     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY,
1860     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN,
1861     BATCH_ID
1862   )
1863   VALUES
1864   (
1865     g_interface_type, --INTERFACE_TYPE
1866     'PON_AUC_QUANTITY_REQUIRED', -- ERROR_MESSAGE_NAME
1867     p_request_id, -- REQUEST_ID
1868     g_auction_item_type, -- ENTITY_TYPE
1869     p_auction_header_id, -- AUCTION_HEADER_ID
1870     sel_line_number, -- LINE_NUMBER
1871     p_expiration_date, -- EXPIRATION_DATE
1872     'LINENUM', -- TOKEN1_NAME
1873     sel_document_disp_line_number, -- TOKEN1_VALUE
1874     p_user_id, -- CREATED_BY
1875     sysdate, -- CREATION_DATE
1876     p_user_id, -- LAST_UPDATED_BY
1877     sysdate, -- LAST_UPDATE_DATE
1878     p_login_id, -- LAST_UPDATE_LOGIN
1879     p_batch_id -- BATCH_ID
1880   )
1881 
1882   SELECT
1883     PAIP.LINE_NUMBER sel_line_number,
1884     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
1885     PAIP.GROUP_TYPE sel_group_type,
1886     PLTB.ORDER_TYPE_LOOKUP_CODE sel_order_type_lookup_code,
1887     PAIP.QUANTITY_DISABLED_FLAG sel_quantity_disabled_flag,
1888     PAIP.UOM_CODE sel_uom_code,
1889     PAIP.SHIP_TO_LOCATION_ID sel_ship_to_location_id,
1890     PAIP.LINE_ORIGINATION_CODE sel_line_origination_code,
1891     PLTB.PURCHASE_BASIS sel_purchase_basis,
1892     PAIP.JOB_ID sel_job_id,
1893     PAIP.PO_AGREED_AMOUNT sel_po_agreed_amount,
1894     PAIP.UNIT_TARGET_PRICE sel_unit_target_price,
1895     PAIP.QUANTITY sel_quantity
1896   FROM
1897     PON_AUCTION_ITEM_PRICES_ALL PAIP,
1898     PO_LINE_TYPES_B PLTB
1899   WHERE
1900     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
1901     PLTB.LINE_TYPE_ID = PAIP.LINE_TYPE_ID;
1902 
1903   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
1904     FND_LOG.string(log_level => FND_LOG.level_procedure,
1905       module  =>  g_module_prefix || 'val_item_prices_po_lines',
1906       message  => 'Returning PON_NEGOTIATION_HELPER_PVT.val_item_prices_po_lines'
1907                   || ', p_auction_header_id = ' || p_auction_header_id);
1908   END IF; --}
1909 END val_item_prices_po_lines;
1910 
1911 /*
1912  * In case of a multi currency auction there cannot be an amount
1913  * based line.
1914  * Need to show only one error (so ROWNUM=1) and hence cannot be merged
1915  * into the other validations.
1916  */
1917 PROCEDURE VAL_LINE_AMOUNT_MULTI_CURR(
1918   p_auction_header_id IN NUMBER,
1919   l_allow_other_bid_currency IN VARCHAR2,
1920   p_request_id IN NUMBER,
1921   p_expiration_date IN DATE,
1922   p_user_id IN NUMBER,
1923   p_login_id IN NUMBER,
1924   p_batch_id IN NUMBER
1925 ) IS
1926 
1927 l_doctype_suffix VARCHAR2(10);
1928 BEGIN
1929   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
1930     FND_LOG.string(log_level => FND_LOG.level_procedure,
1931       module  =>  g_module_prefix || 'VAL_LINE_AMOUNT_MULTI_CURR',
1932       message  => 'Entering PON_NEGOTIATION_HELPER_PVT.VAL_LINE_AMOUNT_MULTI_CURR'
1933                   || ', p_auction_header_id = ' || p_auction_header_id);
1934   END IF; --}
1935 
1936   IF (l_allow_other_bid_currency = 'Y') THEN --{
1937 
1938     l_doctype_suffix := PON_LARGE_AUCTION_UTIL_PKG.GET_DOCTYPE_SUFFIX (p_auction_header_id);
1939 
1940     INSERT INTO PON_INTERFACE_ERRORS
1941     (
1942       INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
1943       AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, CREATED_BY,
1944       CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
1945     )
1946     SELECT
1947       g_interface_type, --INTERFACE_TYPE
1948       'PON_AUC_AMOUNT_CURR' || l_doctype_suffix, -- ERROR_MESSAGE_NAME
1949       p_request_id, -- REQUEST_ID
1950       p_batch_id, --BATCH_ID
1951       g_auction_item_type, -- ENTITY_TYPE
1952       p_auction_header_id, -- AUCTION_HEADER_ID
1953       LINE_NUMBER, -- LINE_NUMBER
1954       p_expiration_date, -- EXPIRATION_DATE
1955       p_user_id, -- CREATED_BY
1956       sysdate, -- CREATION_DATE
1957       p_user_id, -- LAST_UPDATED_BY
1958       sysdate, -- LAST_UPDATE_DATE
1959       p_login_id -- LAST_UPDATE_LOGIN
1960     FROM
1961       PON_AUCTION_ITEM_PRICES_ALL PAIP,
1962       PO_LINE_TYPES_B PLTB
1963     WHERE
1964       AUCTION_HEADER_ID = p_auction_header_id AND
1965       PAIP.LINE_TYPE_ID = PLTB.LINE_TYPE_ID AND
1966       NVL (PAIP.GROUP_TYPE, g_invalid_string) <> 'GROUP' AND
1967       PLTB.ORDER_TYPE_LOOKUP_CODE = g_amount AND
1968       ROWNUM =1;
1969   END IF; --}
1970 
1971   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
1972     FND_LOG.string(log_level => FND_LOG.level_procedure,
1973       module  =>  g_module_prefix || 'VAL_LINE_AMOUNT_MULTI_CURR',
1974       message  => 'Returning PON_NEGOTIATION_HELPER_PVT.VAL_LINE_AMOUNT_MULTI_CURR'
1975                   || ', p_auction_header_id = ' || p_auction_header_id);
1976   END IF; --}
1977 END VAL_LINE_AMOUNT_MULTI_CURR;
1978 
1979 -- START_ATTRIBUTE_VALIDATIONS
1980 /*
1981  * The following attribute validations are performed
1982  * 1. Attribute name should not be empty
1983  * 2. If the display target flag is set to y then the value should not be null
1984  * 3. ==REMOVED ER 4689885, BUG 5633348== If the attribute is only a display attribute then the display target flag should be set
1985  * 4. Weight should be an integer
1986  * 5. The weight value should be between 0 and 100 if entered
1987  * 6. Attribute max score should an integer
1988  * 7. The attrribute maximum score should be a positive number
1989  * 8. If full quantity bids are required then quantity (-20) cannot be scored
1990  * 9. For MAS auctions, if weight is greater than zero then the scoring type should not be null or NONE
1991  */
1992 PROCEDURE VAL_ATTRIBUTES (
1993   p_auction_header_id IN NUMBER,
1994   p_request_id IN NUMBER,
1995   p_expiration_date IN DATE,
1996   p_user_id IN NUMBER,
1997   p_login_id IN NUMBER,
1998   p_batch_id IN NUMBER,
1999   p_full_quantity_bid_code IN VARCHAR2,
2000   p_bid_ranking IN VARCHAR2
2001   ) IS
2002 BEGIN
2003   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2004     FND_LOG.string(log_level => FND_LOG.level_procedure,
2005       module  =>  g_module_prefix || 'VAL_ATTRIBUTES',
2006       message  => 'Entering procedure'
2007                   || ', p_auction_header_id = ' || p_auction_header_id);
2008   END IF; --}
2009 
2010   INSERT ALL
2011 
2012   -- ATTRIBUTE NAME SHOULD NOT BE EMPTY
2013 
2014   WHEN
2015   (
2016     sel_attribute_name IS NULL OR
2017     TRIM (sel_attribute_name) = ''
2018   )
2019   THEN INTO PON_INTERFACE_ERRORS
2020   (
2021     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
2022     LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2023     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2024   )
2025   VALUES
2026   (
2027     g_interface_type, --INTERFACE_TYPE
2028     'PON_ATTRIB_NAME_M', -- ERROR_MESSAGE_NAME
2029     p_request_id, -- REQUEST_ID
2030     p_batch_id, --BATCH_ID
2031     g_auction_attrs_type, -- ENTITY_TYPE
2032     p_auction_header_id, -- AUCTION_HEADER_ID
2033     sel_line_number, -- LINE_NUMBER
2034     sel_attribute_name, -- ATTRIBUTE_NAME
2035     p_expiration_date, -- EXPIRATION_DATE
2036     p_user_id, -- CREATED_BY
2037     sysdate, -- CREATION_DATE
2038     p_user_id, -- LAST_UPDATED_BY
2039     sysdate, -- LAST_UPDATE_DATE
2040     p_login_id -- LAST_UPDATE_LOGIN
2041   )
2042 
2043   -- IF THE DISPLAY TARGET FLAG IS SET TO Y THEN THE VALUE SHOULD NOT BE NULL
2044 
2045   WHEN
2046   (
2047     sel_sequence_number is not null and
2048     sel_sequence_number > 0 and
2049     sel_value IS NULL AND
2050     sel_display_target_flag = 'Y'
2051   )
2052   THEN INTO PON_INTERFACE_ERRORS
2053   (
2054     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2055     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE,
2056     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2057   )
2058   VALUES
2059   (
2060     g_interface_type, --INTERFACE_TYPE
2061     'PON_AUCTS_ATTR_SHOW_TARGET', -- ERROR_MESSAGE_NAME
2062     p_request_id, -- REQUEST_ID
2063     p_batch_id, --BATCH_ID
2064     g_auction_attrs_type, -- ENTITY_TYPE
2065     p_auction_header_id, -- AUCTION_HEADER_ID
2066     sel_line_number, -- LINE_NUMBER
2067     sel_attribute_name, -- ATTRIBUTE_NAME
2068     p_expiration_date, -- EXPIRATION_DATE
2069     p_user_id, -- CREATED_BY
2070     sysdate, -- CREATION_DATE
2071     p_user_id, -- LAST_UPDATED_BY
2072     sysdate, -- LAST_UPDATE_DATE
2073     p_login_id -- LAST_UPDATE_LOGIN
2074   )
2075 
2076   --WEIGHT SHOULD BE An integer
2077 
2078   WHEN
2079   (
2080     sel_weight IS NOT NULL AND
2081     (sel_weight - sel_trunc_weight <> 0)
2082   )
2083   THEN INTO PON_INTERFACE_ERRORS
2084   (
2085     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2086     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE,
2087     TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE,
2088     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2089   )
2090   VALUES
2091   (
2092     g_interface_type, --INTERFACE_TYPE
2093     'PON_AUCTS_LINE_WEIGHT_INT', -- ERROR_MESSAGE_NAME
2094     p_request_id, -- REQUEST_ID
2095     p_batch_id, --BATCH_ID
2096     g_auction_attrs_type, -- ENTITY_TYPE
2097     p_auction_header_id, -- AUCTION_HEADER_ID
2098     sel_line_number, -- LINE_NUMBER
2099     sel_attribute_name, -- ATTRIBUTE_NAME
2100     p_expiration_date, -- EXPIRATION_DATE
2101     'LINE', -- TOKEN1_NAME
2102     sel_document_disp_line_number, -- TOKEN1_VALUE
2103     'ATTRIBUTE', -- TOKEN2_NAME
2104     sel_attribute_name, -- TOKEN2_VALUE
2105     p_user_id, -- CREATED_BY
2106     sysdate, -- CREATION_DATE
2107     p_user_id, -- LAST_UPDATED_BY
2108     sysdate, -- LAST_UPDATE_DATE
2109     p_login_id -- LAST_UPDATE_LOGIN
2110   )
2111 
2112   -- THE WEIGHT VALUE SHOULD BE BETWEEN 0 AND 100 IF ENTERED
2113 
2114   WHEN
2115   (
2116     sel_weight is not null AND
2117     sel_trunc_weight NOT BETWEEN 0 AND 100
2118   )
2119   THEN INTO PON_INTERFACE_ERRORS
2120   (
2121     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2122     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE,
2123     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2124   )
2125   VALUES
2126   (
2127     g_interface_type, --INTERFACE_TYPE
2128     'PON_AUC_LINE_WEIGHT_RANGE', -- ERROR_MESSAGE_NAME
2129     p_request_id, -- REQUEST_ID
2130     p_batch_id, --BATCH_ID
2131     g_auction_attrs_type, -- ENTITY_TYPE
2132     p_auction_header_id, -- AUCTION_HEADER_ID
2133     sel_line_number, -- LINE_NUMBER
2134     sel_attribute_name, -- ATTRIBUTE_NAME
2135     p_expiration_date, -- EXPIRATION_DATE
2136     p_user_id, -- CREATED_BY
2137     sysdate, -- CREATION_DATE
2138     p_user_id, -- LAST_UPDATED_BY
2139     sysdate, -- LAST_UPDATE_DATE
2140     p_login_id -- LAST_UPDATE_LOGIN
2141   )
2142 
2143   -- attribute max score should an integer
2144 
2145   WHEN
2146   (
2147     sel_attr_max_score is not null AND
2148     (sel_attr_max_score - sel_trunc_attr_max_score <> 0)
2149   )
2150   THEN INTO PON_INTERFACE_ERRORS
2151   (
2152     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2153     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE,
2154     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2155   )
2156   VALUES
2157   (
2158     g_interface_type, --INTERFACE_TYPE
2159     'PON_AUCTS_MUST_BE_A_INT_M', -- ERROR_MESSAGE_NAME
2160     p_request_id, -- REQUEST_ID
2161     p_batch_id, --BATCH_ID
2162     g_auction_attrs_type, -- ENTITY_TYPE
2163     p_auction_header_id, -- AUCTION_HEADER_ID
2164     sel_line_number, -- LINE_NUMBER
2165     sel_attribute_name, -- ATTRIBUTE_NAME
2166     p_expiration_date, -- EXPIRATION_DATE
2167     p_user_id, -- CREATED_BY
2168     sysdate, -- CREATION_DATE
2169     p_user_id, -- LAST_UPDATED_BY
2170     sysdate, -- LAST_UPDATE_DATE
2171     p_login_id -- LAST_UPDATE_LOGIN
2172   )
2173 
2174   -- THE ATTRRIBUTE MAXIMUM SCORE SHOULD BE A POSITIVE NUMBER
2175 
2176   WHEN
2177   (
2178     sel_attr_max_score is not null AND
2179     (sel_trunc_attr_max_score < 0)
2180   )
2181   THEN INTO PON_INTERFACE_ERRORS
2182   (
2183     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2184     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE, CREATED_BY,
2185     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2186   )
2187   VALUES
2188   (
2189     g_interface_type, --INTERFACE_TYPE
2190     'PON_AUC_INVALID_MAXSCORE_RANGE', -- ERROR_MESSAGE_NAME
2191     p_request_id, -- REQUEST_ID
2192     p_batch_id, --BATCH_ID
2193     g_auction_attrs_type, -- ENTITY_TYPE
2194     p_auction_header_id, -- AUCTION_HEADER_ID
2195     sel_line_number, -- LINE_NUMBER
2196     sel_attribute_name, -- ATTRIBUTE_NAME
2197     p_expiration_date, -- EXPIRATION_DATE
2198     p_user_id, -- CREATED_BY
2199     sysdate, -- CREATION_DATE
2200     p_user_id, -- LAST_UPDATED_BY
2201     sysdate, -- LAST_UPDATE_DATE
2202     p_login_id -- LAST_UPDATE_LOGIN
2203   )
2204 
2205   -- If full quantity bids are required then quantity (-20) cannot be scored
2206 
2207   WHEN
2208   (
2209     sel_sequence_number = -20 AND
2210     p_bid_ranking = 'MULTI_ATTRIBUTE_SCORING' AND
2211     p_full_quantity_bid_code = 'FULL_QTY_BIDS_REQD'
2212   )
2213   THEN INTO PON_INTERFACE_ERRORS
2214   (
2215     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2216     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE,
2217     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2218   )
2219   VALUES
2220   (
2221     g_interface_type, --INTERFACE_TYPE
2222     'PON_AUC_QUANTITY_SCORE_ERR', -- ERROR_MESSAGE_NAME
2223     p_request_id, -- REQUEST_ID
2224     p_batch_id, --BATCH_ID
2225     g_auction_attrs_type, -- ENTITY_TYPE
2226     p_auction_header_id, -- AUCTION_HEADER_ID
2227     sel_line_number, -- LINE_NUMBER
2228     sel_attribute_name, -- ATTRIBUTE_NAME
2229     p_expiration_date, -- EXPIRATION_DATE
2230     p_user_id, -- CREATED_BY
2231     sysdate, -- CREATION_DATE
2232     p_user_id, -- LAST_UPDATED_BY
2233     sysdate, -- LAST_UPDATE_DATE
2234     p_login_id -- LAST_UPDATE_LOGIN
2235   )
2236 
2237   -- For MAS auctions, if weight is greater than zero then the scoring type
2238   -- should not be null or NONE
2239 
2240   WHEN
2241   (
2242     sel_weight IS NOT NULL AND
2243     sel_weight > 0 AND
2244     p_bid_ranking = 'MULTI_ATTRIBUTE_SCORING' AND
2245     NVL (sel_scoring_type, 'NONE') = 'NONE'
2246   )
2247   THEN INTO PON_INTERFACE_ERRORS
2248   (
2249     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2250     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE, TOKEN1_NAME,
2251     TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE,
2252     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2253   )
2254   VALUES
2255   (
2256     g_interface_type, --INTERFACE_TYPE
2257     'PON_AUC_SCORE_WLINE_REQUIRED', -- ERROR_MESSAGE_NAME
2258     p_request_id, -- REQUEST_ID
2259     p_batch_id, --BATCH_ID
2260     g_auction_attrs_type, -- ENTITY_TYPE
2261     p_auction_header_id, -- AUCTION_HEADER_ID
2262     sel_line_number, -- LINE_NUMBER
2263     sel_attribute_name, -- ATTRIBUTE_NAME
2264     p_expiration_date, -- EXPIRATION_DATE
2265     'LINE', -- TOKEN1_NAME
2266     sel_document_disp_line_number, -- TOKEN1_VALUE
2267     'ATTRIBUTE', -- TOKEN2_NAME
2268     sel_attribute_name, -- TOKEN2_VALUE
2269     p_user_id, -- CREATED_BY
2270     sysdate, -- CREATION_DATE
2271     p_user_id, -- LAST_UPDATED_BY
2272     sysdate, -- LAST_UPDATE_DATE
2273     p_login_id -- LAST_UPDATE_LOGIN
2274   )
2275 
2276   -- For MAS auctions, if weight is zero or null and the scoring type
2277   -- is not null and not none then error
2278 
2279   WHEN
2280   (
2281     p_bid_ranking = 'MULTI_ATTRIBUTE_SCORING' AND
2282     (sel_weight IS NULL OR sel_weight <= 0) AND
2283     NVL (sel_scoring_type, 'NONE') <> 'NONE'
2284   )
2285   THEN INTO PON_INTERFACE_ERRORS
2286   (
2287     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2288     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE, TOKEN1_NAME,
2289     TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE,
2290     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2291   )
2292   VALUES
2293   (
2294     g_interface_type, --INTERFACE_TYPE
2295     'PON_AUC_WEIGHT_LINE_REQUIRED', -- ERROR_MESSAGE_NAME
2296     p_request_id, -- REQUEST_ID
2297     p_batch_id, --BATCH_ID
2298     g_auction_attrs_type, -- ENTITY_TYPE
2299     p_auction_header_id, -- AUCTION_HEADER_ID
2300     sel_line_number, -- LINE_NUMBER
2301     sel_attribute_name, -- ATTRIBUTE_NAME
2302     p_expiration_date, -- EXPIRATION_DATE
2303     'LINE', -- TOKEN1_NAME
2304     sel_document_disp_line_number, -- TOKEN1_VALUE
2305     'ATTRIBUTE', -- TOKEN2_NAME
2306     sel_attribute_name, -- TOKEN2_VALUE
2307     p_user_id, -- CREATED_BY
2308     sysdate, -- CREATION_DATE
2309     p_user_id, -- LAST_UPDATED_BY
2310     sysdate, -- LAST_UPDATE_DATE
2311     p_login_id -- LAST_UPDATE_LOGIN
2312   )
2313 
2314   SELECT
2315     PAA.LINE_NUMBER sel_line_number,
2316     PAA.ATTRIBUTE_NAME sel_attribute_name,
2317     PAA.SEQUENCE_NUMBER sel_sequence_number,
2318     PAA.VALUE sel_value,
2319     PAA.DISPLAY_TARGET_FLAG sel_display_target_flag,
2320     PAA.DISPLAY_ONLY_FLAG sel_display_only_flag,
2321     PAA.WEIGHT sel_weight,
2322     TRUNC (PAA.WEIGHT) sel_trunc_weight,
2323     PAA.ATTR_MAX_SCORE sel_attr_max_score,
2324     TRUNC (PAA.ATTR_MAX_SCORE) sel_trunc_attr_max_score,
2325     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
2326     PAA.SCORING_TYPE sel_scoring_type
2327   FROM
2328     PON_AUCTION_ATTRIBUTES PAA,
2329     PON_AUCTION_ITEM_PRICES_ALL PAIP
2330   WHERE
2331     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
2332     PAA.AUCTION_HEADER_ID = p_auction_header_id AND
2333     PAIP.LINE_NUMBER = PAA.LINE_NUMBER AND
2334     PAA.ATTR_LEVEL = 'LINE';
2335 
2336   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2337     FND_LOG.string(log_level => FND_LOG.level_procedure,
2338       module  =>  g_module_prefix || 'VAL_ATTRIBUTES',
2339       message  => 'Leaving procedure'
2340                   || ', p_auction_header_id = ' || p_auction_header_id);
2341   END IF; --}
2342 END VAL_ATTRIBUTES;
2343 
2344 /*
2345  * Two attributes within a single line cannot have the same name
2346  * Since we have used GroupBy to determine duplicates this cannot
2347  * be merged with the VAL_ATTRIBUTES
2348  */
2349 
2350 PROCEDURE VAL_ATTR_NAME_UNIQUE(
2351   p_auction_header_id IN NUMBER,
2352   p_request_id IN NUMBER,
2353   p_expiration_date IN DATE,
2354   p_user_id IN NUMBER,
2355   p_login_id IN NUMBER,
2356   p_batch_id IN NUMBER
2357   ) IS
2358 BEGIN
2359   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2360     FND_LOG.string(log_level => FND_LOG.level_procedure,
2361       module  =>  g_module_prefix || 'VAL_ATTR_NAME_UNIQUE',
2362       message  => 'Entering PON_NEGOTIATION_HELPER_PVT.VAL_ATTR_NAME_UNIQUE'
2363                   || ', p_auction_header_id = ' || p_auction_header_id);
2364   END IF; --}
2365 
2366   INSERT INTO PON_INTERFACE_ERRORS
2367   (
2368     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2369     AUCTION_HEADER_ID, LINE_NUMBER, ATTRIBUTE_NAME, EXPIRATION_DATE,
2370     TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2371     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2372   )
2373   SELECT
2374     g_interface_type, --INTERFACE_TYPE
2375     'PON_AUC_DUPLICATE_LINE_ATTRS', -- ERROR_MESSAGE_NAME
2376     p_request_id, -- REQUEST_ID
2377     p_batch_id, --BATCH_ID
2378     g_auction_attrs_type, -- ENTITY_TYPE
2379     p_auction_header_id, -- AUCTION_HEADER_ID
2380     LINE_NUMBER, -- LINE_NUMBER
2381     ATTRIBUTE_NAME, -- ATTRIBUTE_NAME
2382     p_expiration_date, -- EXPIRATION_DATE
2383     'ATTRIBUTE_NAME', -- TOKEN1_NAME
2384     ATTRIBUTE_NAME, -- TOKEN1_VALUE
2385     p_user_id, -- CREATED_BY
2386     sysdate, -- CREATION_DATE
2387     p_user_id, -- LAST_UPDATED_BY
2388     sysdate, -- LAST_UPDATE_DATE
2389     p_login_id -- LAST_UPDATE_LOGIN
2390   FROM
2391     PON_AUCTION_ATTRIBUTES
2392   WHERE
2393     ATTR_LEVEL='LINE' AND
2394     AUCTION_HEADER_ID=p_auction_header_id
2395   GROUP by AUCTION_HEADER_ID, LINE_NUMBER, attribute_name
2396   HAVING count(LINE_NUMBER) > 1;
2397 
2398   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2399     FND_LOG.string(log_level => FND_LOG.level_procedure,
2400       module  =>  g_module_prefix || 'VAL_ATTR_NAME_UNIQUE',
2401       message  => 'Returning PON_NEGOTIATION_HELPER_PVT.VAL_ATTR_NAME_UNIQUE'
2402                   || ', p_auction_header_id = ' || p_auction_header_id);
2403   END IF; --}
2404 END VAL_ATTR_NAME_UNIQUE;
2405 
2406 /*
2407  * The following validations are performed:
2408  * 1. Entered score value should be between 0 and 100
2409  * 2. Score must be a positive number
2410  */
2411 PROCEDURE VAL_ATTR_SCORES(
2412   p_auction_header_id IN NUMBER,
2413   p_request_id IN NUMBER,
2414   p_expiration_date IN DATE,
2415   p_user_id IN NUMBER,
2416   p_login_id IN NUMBER,
2417   p_batch_id IN NUMBER
2418   ) IS
2419 BEGIN
2420   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2421     FND_LOG.string(log_level => FND_LOG.level_procedure,
2422       module  =>  g_module_prefix || 'VAL_ATTR_SCORES',
2423       message  => 'Entering PON_NEGOTIATION_HELPER_PVT.VAL_ATTR_SCORES'
2424                   || ', p_auction_header_id = ' || p_auction_header_id);
2425   END IF; --}
2426 
2427   INSERT ALL
2428 
2429   -- Entered score value should be between 0 and 100
2430 
2431   WHEN
2432   (
2433     SCORE is not null AND
2434     sel_trunc_score NOT BETWEEN 0 and 100
2435   )
2436   THEN INTO PON_INTERFACE_ERRORS
2437   (
2438     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID,
2439     ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE,
2440     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2441   )
2442   VALUES
2443   (
2444     g_interface_type, --INTERFACE_TYPE
2445     'PON_AUC_INVALID_SCORE', -- ERROR_MESSAGE_NAME
2446     p_request_id, -- REQUEST_ID
2447     p_batch_id, --BATCH_ID
2448     g_auction_attrs_type, -- ENTITY_TYPE
2449     p_auction_header_id, -- AUCTION_HEADER_ID
2450     LINE_NUMBER, -- LINE_NUMBER
2451     p_expiration_date, -- EXPIRATION_DATE
2452     p_user_id, -- CREATED_BY
2453     sysdate, -- CREATION_DATE
2454     p_user_id, -- LAST_UPDATED_BY
2455     sysdate, -- LAST_UPDATE_DATE
2456     p_login_id -- LAST_UPDATE_LOGIN
2457   )
2458 
2459   -- SCORE MUST BE A POSITIVE NUMBER
2460 
2461   WHEN
2462   (
2463     SCORE is not null AND
2464     (SCORE - sel_trunc_score <>0)
2465   )
2466   THEN INTO PON_INTERFACE_ERRORS
2467   (
2468     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2469     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, CREATED_BY,
2470     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2471   )
2472   VALUES
2473   (
2474     g_interface_type, --INTERFACE_TYPE
2475     'PON_AUCTS_MUST_BE_A_INT_M', -- ERROR_MESSAGE_NAME
2476     p_request_id, -- REQUEST_ID
2477     p_batch_id, --BATCH_ID
2478     g_auction_attrs_type, -- ENTITY_TYPE
2479     p_auction_header_id, -- AUCTION_HEADER_ID
2480     LINE_NUMBER, -- LINE_NUMBER
2481     p_expiration_date, -- EXPIRATION_DATE
2482     p_user_id, -- CREATED_BY
2483     sysdate, -- CREATION_DATE
2484     p_user_id, -- LAST_UPDATED_BY
2485     sysdate, -- LAST_UPDATE_DATE
2486     p_login_id -- LAST_UPDATE_LOGIN
2487   )
2488 
2489   SELECT
2490     SCORE,
2491     LINE_NUMBER,
2492     TRUNC (SCORE) sel_trunc_score
2493   FROM
2494     PON_ATTRIBUTE_SCORES
2495   WHERE
2496     AUCTION_HEADER_ID = p_auction_header_id AND
2497     LINE_NUMBER > 0;
2498 
2499   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2500     FND_LOG.string(log_level => FND_LOG.level_procedure,
2501       module  =>  g_module_prefix || 'VAL_ATTR_SCORES',
2502       message  => 'Returning PON_NEGOTIATION_HELPER_PVT.VAL_ATTR_SCORES'
2503                   || ', p_auction_header_id = ' || p_auction_header_id);
2504   END IF; --}
2505 END VAL_ATTR_SCORES;
2506 
2507 /*
2508  * The following validations are performed
2509  * 1. Price break effective start date should be before effective end date
2510  * 2. Ship to locaton and ship to org should be proper. The ship_to_location and ship_to_org if both are entered then either
2511      a.The Ship_to_location should belong to the Ship_to_organization
2512      b.The Ship_to_location should be a global location (inventory_organization_id is null)
2513  * 3. Price break should not be empty. Only price should not be entered
2514  * 4. Quantity should not be empty or negative
2515  * 5. The price break price should be positive
2516  * 6. Effective start date after sysdate or close date
2517  * 7. Effective end date after sysdate or close date
2518  * 8. Response type if entered should have price differentials
2519  * 9. If the response type is null then there should be no price differentials
2520  * 10. Precision of the price entered should be less than the auction currency precision
2521  * 11. Effective start date should be after po start date
2522  * 12. Effective end date should be after po start date
2523  * 13. The effective start date should be before po end date if both are entered
2524  * 14. Effective end date should be before the po end date
2525  */
2526 PROCEDURE VAL_PRICE_BREAKS (
2527   p_auction_header_id IN NUMBER,
2528   p_close_bidding_date IN DATE,
2529   p_request_id IN NUMBER,
2530   p_expiration_date IN DATE,
2531   p_user_id IN NUMBER,
2532   p_login_id IN NUMBER,
2533   p_batch_id IN NUMBER,
2534   p_precision IN NUMBER,
2535   p_po_start_date IN DATE,
2536   p_po_end_date IN DATE
2537 ) IS
2538 
2539 l_temp NUMBER;
2540 BEGIN
2541 
2542   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
2543     FND_LOG.string(log_level => FND_LOG.level_procedure,
2544       module  =>  g_module_prefix || 'VAL_PRICE_BREAKS',
2545       message  => 'Entering Procedure' || ', p_auction_header_id = ' || p_auction_header_id);
2546   END IF; --}
2547 
2548   IF (p_precision <> g_precision_any) THEN
2549     l_temp := power (10, p_precision);
2550   ELSE
2551     l_temp := 0;
2552   END IF;
2553 
2554   INSERT ALL
2555 
2556   -- PRICE BREAK EFFECTIVE START DATE SHOULD BE BEFORE EFFECTIVE END DATE
2557 
2558   WHEN
2559   (
2560     sel_effective_start_date IS NOT NULL AND
2561     sel_effective_end_date IS NOT NULL AND
2562     sel_effective_end_date < sel_effective_start_date
2563   )
2564   THEN INTO PON_INTERFACE_ERRORS
2565   (
2566     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2567     AUCTION_HEADER_ID, LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME,
2568     TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
2569     LAST_UPDATE_LOGIN
2570   )
2571   VALUES
2572   (
2573     g_interface_type, --INTERFACE_TYPE
2574     'PON_AUCTS_EFFC_END_BEF_START', -- ERROR_MESSAGE_NAME
2575     p_request_id, -- REQUEST_ID
2576     p_batch_id, --BATCH_ID
2577     g_auction_pbs_type, -- ENTITY_TYPE
2578     p_auction_header_id, -- AUCTION_HEADER_ID
2579     sel_line_number, -- LINE_NUMBER
2580     sel_shipment_number, -- SHIPMENT_NUMBER
2581     p_expiration_date, -- EXPIRATION_DATE
2582     'LINENUM', -- TOKEN1_NAME
2583     sel_document_disp_line_number, -- TOKEN1_VALUE
2584     p_user_id, -- CREATED_BY
2585     sysdate, -- CREATION_DATE
2586     p_user_id, -- LAST_UPDATED_BY
2587     sysdate, -- LAST_UPDATE_DATE
2588     p_login_id -- LAST_UPDATE_LOGIN
2589   )
2590 
2591   -- SHIP TO LOCATON AND SHIP TO ORG SHOULD BE PROPER
2592   -- THE SHIP_TO_LOCATION AND SHIP_TO_ORG IF BOTH ARE ENTERED THEN EITHER
2593   -- 1. The Ship_to_location should belong to the Ship_to_organization
2594   -- 2. The Ship_to_location should be a global location (inventory_organization_id is null)
2595 
2596   WHEN
2597   (
2598     sel_ship_to_organization_id IS NOT NULL AND
2599     sel_ship_to_location_id IS NOT NULL AND
2600     NOT EXISTS (SELECT l.INVENTORY_ORGANIZATION_ID
2601         FROM HR_LOCATIONS_ALL L
2602         WHERE SYSDATE < NVL(L.INACTIVE_DATE, SYSDATE + 1) AND
2603         NVL(L.SHIP_TO_SITE_FLAG,'N') = 'Y' AND
2604         L.LOCATION_ID = sel_ship_to_location_id AND
2605         nvl (L.INVENTORY_ORGANIZATION_ID, sel_ship_to_organization_id) = sel_ship_to_organization_id)
2606   )
2607   THEN INTO PON_INTERFACE_ERRORS
2608   (
2609     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2610     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2611     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2612   )
2613   VALUES
2614   (
2615     g_interface_type, --INTERFACE_TYPE
2616     'PON_AUC_SHIP_TO_MATCHING_ERR', -- ERROR_MESSAGE_NAME
2617     p_request_id, -- REQUEST_ID
2618     p_batch_id, --BATCH_ID
2619     g_auction_pbs_type, -- ENTITY_TYPE
2620     p_auction_header_id, -- AUCTION_HEADER_ID
2621     sel_line_number, -- LINE_NUMBER
2622     sel_shipment_number, -- SHIPMENT_NUMBER
2623     p_expiration_date, -- EXPIRATION_DATE
2624     'LINENUM', -- TOKEN1_NAME
2625     sel_document_disp_line_number, -- TOKEN1_VALUE
2626     p_user_id, -- CREATED_BY
2627     sysdate, -- CREATION_DATE
2628     p_user_id, -- LAST_UPDATED_BY
2629     sysdate, -- LAST_UPDATE_DATE
2630     p_login_id -- LAST_UPDATE_LOGIN
2631   )
2632 
2633   -- PRICE BREAK SHOULD NOT BE EMPTY
2634   -- ONLY PRICE SHOULD NOT BE ENTERED
2635 
2636   WHEN
2637   (
2638     sel_ship_to_organization_id IS NULL AND
2639     sel_ship_to_location_id IS NULL AND
2640     sel_effective_start_date IS NULL AND
2641     sel_effective_end_date IS NULL AND
2642     sel_quantity IS NULL
2643   )
2644   THEN INTO PON_INTERFACE_ERRORS
2645   (
2646     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2647     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2648     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2649   )
2650   VALUES
2651   (
2652     g_interface_type, --INTERFACE_TYPE
2653     NVL2 (sel_price, 'PON_AUCTS_PB_PRICE_ONLY', 'PON_AUCTS_SHIPMENT_EMPTY'), -- ERROR_MESSAGE_NAME
2654     p_request_id, -- REQUEST_ID
2655     p_batch_id, --BATCH_ID
2656     g_auction_pbs_type, -- ENTITY_TYPE
2657     p_auction_header_id, -- AUCTION_HEADER_ID
2658     sel_line_number, -- LINE_NUMBER
2659     sel_shipment_number, -- SHIPMENT_NUMBER
2660     p_expiration_date, -- EXPIRATION_DATE
2661     'LINENUM', -- TOKEN1_NAME
2662     sel_document_disp_line_number, -- TOKEN1_VALUE
2663     p_user_id, -- CREATED_BY
2664     sysdate, -- CREATION_DATE
2665     p_user_id, -- LAST_UPDATED_BY
2666     sysdate, -- LAST_UPDATE_DATE
2667     p_login_id -- LAST_UPDATE_LOGIN
2668   )
2669 
2670   -- quantity should not be empty or negative
2671 
2672   WHEN
2673   (
2674     sel_quantity IS NOT NULL AND
2675     sel_quantity < 0 AND
2676     sel_quantity <> g_null_int
2677   )
2678   THEN INTO PON_INTERFACE_ERRORS
2679   (
2680     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2681     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2682     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2683   )
2684   VALUES
2685   (
2686     g_interface_type, --INTERFACE_TYPE
2687     'PON_AUCTS_PB_QUANTITY_POSITIVE', -- ERROR_MESSAGE_NAME
2688     p_request_id, -- REQUEST_ID
2689     p_batch_id, --BATCH_ID
2690     g_auction_pbs_type, -- ENTITY_TYPE
2691     p_auction_header_id, -- AUCTION_HEADER_ID
2692     sel_line_number, -- LINE_NUMBER
2693     sel_shipment_number, -- SHIPMENT_NUMBER
2694     p_expiration_date, -- EXPIRATION_DATE
2695     'LINENUM', -- TOKEN1_NAME
2696     sel_document_disp_line_number, -- TOKEN1_VALUE
2697     p_user_id, -- CREATED_BY
2698     sysdate, -- CREATION_DATE
2699     p_user_id, -- LAST_UPDATED_BY
2700     sysdate, -- LAST_UPDATE_DATE
2701     p_login_id -- LAST_UPDATE_LOGIN
2702   )
2703 
2704   -- the price break price should be positive
2705 
2706   WHEN
2707   (
2708     sel_price < 0
2709   )
2710   THEN INTO PON_INTERFACE_ERRORS
2711   (
2712     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2713     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2714     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2715   )
2716   VALUES
2717   (
2718     g_interface_type, --INTERFACE_TYPE
2719     'PON_AUCTS_PB_RPICE_POSITIVE', -- ERROR_MESSAGE_NAME
2720     p_request_id, -- REQUEST_ID
2721     p_batch_id, --BATCH_ID
2722     g_auction_pbs_type, -- ENTITY_TYPE
2723     p_auction_header_id, -- AUCTION_HEADER_ID
2724     sel_line_number, -- LINE_NUMBER
2725     sel_shipment_number, -- SHIPMENT_NUMBER
2726     p_expiration_date, -- EXPIRATION_DATE
2727     'LINENUM', -- TOKEN1_NAME
2728     sel_document_disp_line_number, -- TOKEN1_VALUE
2729     p_user_id, -- CREATED_BY
2730     sysdate, -- CREATION_DATE
2731     p_user_id, -- LAST_UPDATED_BY
2732     sysdate, -- LAST_UPDATE_DATE
2733     p_login_id -- LAST_UPDATE_LOGIN
2734   )
2735 
2736   --  EFFECTIVE START DATE AFTER SYSDATE OR CLOSE DATE
2737 
2738   WHEN
2739   (
2740     sel_effective_start_date IS NOT NULL AND
2741     sel_effective_start_date <= NVL (p_close_bidding_date, SYSDATE)
2742   )
2743   THEN INTO PON_INTERFACE_ERRORS
2744   (
2745     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2746     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2747     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2748   )
2749   VALUES
2750   (
2751     g_interface_type, --INTERFACE_TYPE
2752     NVL2 (p_close_bidding_date, 'PON_AUC_EFFC_FROM_BEF_CLOSE', 'PON_AUC_EFFC_FROM_BEF_TODAY'), -- ERROR_MESSAGE_NAME
2753     p_request_id, -- REQUEST_ID
2754     p_batch_id, -- BATCH_ID
2755     g_auction_pbs_type, -- ENTITY_TYPE
2756     p_auction_header_id, -- AUCTION_HEADER_ID
2757     sel_line_number, -- LINE_NUMBER
2758     sel_shipment_number, -- SHIPMENT_NUMBER
2759     p_expiration_date, -- EXPIRATION_DATE
2760     'LINENUM', -- TOKEN1_NAME
2761     sel_document_disp_line_number, -- TOKEN1_VALUE
2762     p_user_id, -- CREATED_BY
2763     sysdate, -- CREATION_DATE
2764     p_user_id, -- LAST_UPDATED_BY
2765     sysdate, -- LAST_UPDATE_DATE
2766     p_login_id -- LAST_UPDATE_LOGIN
2767   )
2768 
2769   --  EFFECTIVE END DATE AFTER SYSDATE OR CLOSE DATE
2770 
2771   WHEN
2772   (
2773     sel_effective_end_date IS NOT NULL AND
2774     sel_effective_end_date <= NVL (p_close_bidding_date, SYSDATE)
2775   )
2776   THEN INTO PON_INTERFACE_ERRORS
2777   (
2778     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2779     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2780     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2781   )
2782   VALUES
2783   (
2784     g_interface_type, --INTERFACE_TYPE
2785     NVL2 (p_close_bidding_date, 'PON_AUC_EFFC_TO_BEFORE_CLOSE',
2786       'PON_AUC_EFFC_TO_BEFORE_TODAY'), -- ERROR_MESSAGE_NAME
2787     p_request_id, -- REQUEST_ID
2788     p_batch_id, --BATCH_ID
2789     g_auction_pbs_type, -- ENTITY_TYPE
2790     p_auction_header_id, -- AUCTION_HEADER_ID
2791     sel_line_number, -- LINE_NUMBER
2792     sel_shipment_number, -- SHIPMENT_NUMBER
2793     p_expiration_date, -- EXPIRATION_DATE
2794     'LINENUM', -- TOKEN1_NAME
2795     sel_document_disp_line_number, -- TOKEN1_VALUE
2796     p_user_id, -- CREATED_BY
2797     sysdate, -- CREATION_DATE
2798     p_user_id, -- LAST_UPDATED_BY
2799     sysdate, -- LAST_UPDATE_DATE
2800     p_login_id -- LAST_UPDATE_LOGIN
2801   )
2802 
2803   -- RESPONSE TYPE if entered should have price differentials
2804 
2805   WHEN
2806   (
2807     sel_differential_response_type IS NOT NULL AND
2808     NOT EXISTS (
2809       SELECT 1
2810       FROM PON_PRICE_DIFFERENTIALS PPD
2811       WHERE
2812       PPD.AUCTION_HEADER_ID = p_auction_header_id AND
2813       PPD.LINE_NUMBER = sel_line_number AND
2814       PPD.SHIPMENT_NUMBER = sel_shipment_number
2815     )
2816   )
2817   THEN INTO PON_INTERFACE_ERRORS
2818   (
2819     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2820     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2821     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2822   )
2823   VALUES
2824   (
2825     g_interface_type, --INTERFACE_TYPE
2826     'PON_PRICEDIFF_REQD_FOR_SHIP', -- ERROR_MESSAGE_NAME
2827     p_request_id, -- REQUEST_ID
2828     p_batch_id, --BATCH_ID
2829     g_auction_pbs_type, -- ENTITY_TYPE
2830     p_auction_header_id, -- AUCTION_HEADER_ID
2831     sel_line_number, -- LINE_NUMBER
2832     sel_shipment_number, -- SHIPMENT_NUMBER
2833     p_expiration_date, -- EXPIRATION_DATE
2834     'LINENUM', -- TOKEN1_NAME
2835     sel_document_disp_line_number, -- TOKEN1_VALUE
2836     p_user_id, -- CREATED_BY
2837     sysdate, -- CREATION_DATE
2838     p_user_id, -- LAST_UPDATED_BY
2839     sysdate, -- LAST_UPDATE_DATE
2840     p_login_id -- LAST_UPDATE_LOGIN
2841   )
2842 
2843   -- RESPONSE TYPE: If the response type is null then there should be no price differentials
2844 
2845   WHEN
2846   (
2847     sel_differential_response_type IS NULL AND
2848     EXISTS (
2849       SELECT 1
2850       FROM PON_PRICE_DIFFERENTIALS PPD
2851       WHERE
2852       PPD.AUCTION_HEADER_ID = p_auction_header_id AND
2853       PPD.LINE_NUMBER = sel_line_number AND
2854       PPD.SHIPMENT_NUMBER = sel_shipment_number
2855     )
2856   )
2857   THEN INTO PON_INTERFACE_ERRORS
2858   (
2859     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2860     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2861     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2862   )
2863   VALUES
2864   (
2865     g_interface_type, --INTERFACE_TYPE
2866     'PON_SET_DIFFER_RESPONSE_TYPE', -- ERROR_MESSAGE_NAME
2867     p_request_id, -- REQUEST_ID
2868     p_batch_id, -- BATCH_ID
2869     g_auction_pbs_type, -- ENTITY_TYPE
2870     p_auction_header_id, -- AUCTION_HEADER_ID
2871     sel_line_number, -- LINE_NUMBER
2872     sel_shipment_number, -- SHIPMENT_NUMBER
2873     p_expiration_date, -- EXPIRATION_DATE
2874     'LINENUM', -- TOKEN1_NAME
2875     sel_document_disp_line_number, -- TOKEN1_VALUE
2876     p_user_id, -- CREATED_BY
2877     sysdate, -- CREATION_DATE
2878     p_user_id, -- LAST_UPDATED_BY
2879     sysdate, -- LAST_UPDATE_DATE
2880     p_login_id -- LAST_UPDATE_LOGIN
2881   )
2882 
2883   -- Precision of the price entered should be less than the auction currency precision
2884 
2885   WHEN
2886   (
2887     sel_price >= 0 AND
2888     ABS (sel_price  * l_temp - TRUNC (sel_price * l_temp)) > 0
2889   )
2890   THEN INTO PON_INTERFACE_ERRORS
2891   (
2892     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
2893     AUCTION_HEADER_ID, LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME,
2894     TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2895   )
2896   VALUES
2897   (
2898     g_interface_type, --INTERFACE_TYPE
2899     'PON_PB_PRICE_PRECISION', -- ERROR_MESSAGE_NAME
2900     p_request_id, -- REQUEST_ID
2901     p_batch_id, -- BATCH_ID
2902     g_auction_pbs_type, -- ENTITY_TYPE
2903     p_auction_header_id, -- AUCTION_HEADER_ID
2904     sel_line_number, -- LINE_NUMBER
2905     sel_shipment_number, -- SHIPMENT_NUMBER
2906     p_expiration_date, -- EXPIRATION_DATE
2907     'LINENUM', -- TOKEN1_NAME
2908     sel_document_disp_line_number, -- TOKEN1_VALUE
2909     p_user_id, -- CREATED_BY
2910     sysdate, -- CREATION_DATE
2911     p_user_id, -- LAST_UPDATED_BY
2912     sysdate, -- LAST_UPDATE_DATE
2913     p_login_id -- LAST_UPDATE_LOGIN
2914   )
2915 
2916   -- EFFECTIVE START DATE SHOULD BE AFTER PO START DATE
2917 
2918   WHEN
2919   (
2920     p_po_start_date IS NOT NULL AND
2921     sel_effective_start_date IS NOT NULL AND
2922     sel_effective_start_date < p_po_start_date
2923   )
2924   THEN INTO PON_INTERFACE_ERRORS
2925   (
2926     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, batch_id, ENTITY_TYPE,AUCTION_HEADER_ID, LINE_NUMBER,
2927     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY,CREATION_DATE, LAST_UPDATED_BY,
2928     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2929   )
2930   VALUES
2931   (
2932     g_interface_type, --INTERFACE_TYPE
2933     'PON_AUC_EFFC_FROM_BEF_NEG', -- ERROR_MESSAGE_NAME
2934     p_request_id, -- REQUEST_ID
2935     p_batch_id, -- BATCH_ID
2936     g_auction_pbs_type, -- ENTITY_TYPE
2937     p_auction_header_id, -- AUCTION_HEADER_ID
2938     sel_line_number, -- LINE_NUMBER
2939     sel_shipment_number, -- SHIPMENT_NUMBER
2940     p_expiration_date, -- EXPIRATION_DATE
2941     'LINENUM', -- TOKEN1_NAME
2942     sel_document_disp_line_number, -- TOKEN1_VALUE
2943     p_user_id, -- CREATED_BY
2944     sysdate, -- CREATION_DATE
2945     p_user_id, -- LAST_UPDATED_BY
2946     sysdate, -- LAST_UPDATE_DATE
2947     p_login_id -- LAST_UPDATE_LOGIN
2948   )
2949 
2950   -- EFFECTIVE END DATE SHOULD BE AFTER PO START DATE
2951 
2952   WHEN
2953   (
2954     p_po_start_date IS NOT NULL AND
2955     sel_effective_end_date IS NOT NULL AND
2956     sel_effective_end_date < p_po_start_date
2957   )
2958   THEN INTO PON_INTERFACE_ERRORS
2959   (
2960     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, batch_id, ENTITY_TYPE,AUCTION_HEADER_ID, LINE_NUMBER,
2961     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY,CREATION_DATE, LAST_UPDATED_BY,
2962     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2963   )
2964   VALUES
2965   (
2966     g_interface_type, --INTERFACE_TYPE
2967     'PON_AUC_EFFC_TO_BEFORE_NEG', -- ERROR_MESSAGE_NAME
2968     p_request_id, -- REQUEST_ID
2969     p_batch_id, -- BATCH_ID
2970     g_auction_pbs_type, -- ENTITY_TYPE
2971     p_auction_header_id, -- AUCTION_HEADER_ID
2972     sel_line_number, -- LINE_NUMBER
2973     sel_shipment_number, -- SHIPMENT_NUMBER
2974     p_expiration_date, -- EXPIRATION_DATE
2975     'LINENUM', -- TOKEN1_NAME
2976     sel_document_disp_line_number, -- TOKEN1_VALUE
2977     p_user_id, -- CREATED_BY
2978     sysdate, -- CREATION_DATE
2979     p_user_id, -- LAST_UPDATED_BY
2980     sysdate, -- LAST_UPDATE_DATE
2981     p_login_id -- LAST_UPDATE_LOGIN
2982   )
2983 
2984   -- the effective start date should be before po end date if both are entered
2985 
2986   WHEN
2987   (
2988     p_po_end_date IS NOT NULL AND
2989     sel_effective_start_date IS NOT NULL AND
2990     sel_effective_start_date > p_po_end_date
2991   )
2992   THEN INTO PON_INTERFACE_ERRORS
2993   (
2994     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, batch_id, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
2995     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
2996     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
2997   )
2998   VALUES
2999   (
3000     g_interface_type, --INTERFACE_TYPE
3001     'PON_AUC_EFFC_FROM_AFT_NEG', -- ERROR_MESSAGE_NAME
3002     p_request_id, -- REQUEST_ID
3003     p_batch_id, -- BATCH_ID
3004     g_auction_pbs_type, -- ENTITY_TYPE
3005     p_auction_header_id, -- AUCTION_HEADER_ID
3006     sel_line_number, -- LINE_NUMBER
3007     sel_shipment_number, -- SHIPMENT_NUMBER
3008     p_expiration_date, -- EXPIRATION_DATE
3009     'LINENUM', -- TOKEN1_NAME
3010     sel_document_disp_line_number, -- TOKEN1_VALUE
3011     p_user_id, -- CREATED_BY
3012     sysdate, -- CREATION_DATE
3013     p_user_id, -- LAST_UPDATED_BY
3014     sysdate, -- LAST_UPDATE_DATE
3015     p_login_id -- LAST_UPDATE_LOGIN
3016   )
3017 
3018   -- effective end date should be before the po end date
3019 
3020   WHEN
3021   (
3022     p_po_end_date IS NOT NULL AND
3023     sel_effective_end_date IS NOT NULL AND
3024     sel_effective_end_date > p_po_end_date
3025   )
3026   THEN INTO PON_INTERFACE_ERRORS
3027   (
3028     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, batch_id, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3029     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3030     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3031   )
3032   VALUES
3033   (
3034     g_interface_type, --INTERFACE_TYPE
3035     'PON_AUC_EFFC_TO_AFT_NEG', -- ERROR_MESSAGE_NAME
3036     p_request_id, -- REQUEST_ID
3037     p_batch_id, -- BATCH_ID
3038     g_auction_pbs_type, -- ENTITY_TYPE
3039     p_auction_header_id, -- AUCTION_HEADER_ID
3040     sel_line_number, -- LINE_NUMBER
3041     sel_shipment_number, -- SHIPMENT_NUMBER
3042     p_expiration_date, -- EXPIRATION_DATE
3043     'LINENUM', -- TOKEN1_NAME
3044     sel_document_disp_line_number, -- TOKEN1_VALUE
3045     p_user_id, -- CREATED_BY
3046     sysdate, -- CREATION_DATE
3047     p_user_id, -- LAST_UPDATED_BY
3048     sysdate, -- LAST_UPDATE_DATE
3049     p_login_id -- LAST_UPDATE_LOGIN
3050   )
3051 
3052   SELECT
3053     PAIP.LINE_NUMBER sel_line_number,
3054     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
3055     PASA.SHIPMENT_NUMBER sel_shipment_number,
3056     PASA.PRICE sel_price,
3057     PASA.QUANTITY sel_quantity,
3058     PASA.EFFECTIVE_END_DATE sel_effective_end_date,
3059     PASA.EFFECTIVE_START_DATE sel_effective_start_date,
3060     PASA.SHIP_TO_LOCATION_ID sel_ship_to_location_id,
3061     PASA.SHIP_TO_ORGANIZATION_ID sel_ship_to_organization_id,
3062     PASA.DIFFERENTIAL_RESPONSE_TYPE sel_differential_response_type
3063   FROM
3064     PON_AUCTION_ITEM_PRICES_ALL PAIP,
3065     PON_AUCTION_SHIPMENTS_ALL PASA
3066   WHERE
3067     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
3068     PASA.AUCTION_HEADER_ID = p_auction_header_id AND
3069     PAIP.LINE_NUMBER = PASA.LINE_NUMBER;
3070 
3071   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3072     FND_LOG.string(log_level => FND_LOG.level_procedure,
3073       module  =>  g_module_prefix || 'VAL_PRICE_BREAKS',
3074       message  => 'Leaving procedure');
3075   END IF; --}
3076 
3077 END VAL_PRICE_BREAKS;
3078 
3079 /*
3080  * The following validations are performed
3081  * 1. Min Quantity should not be null or negative
3082  * 2. Max Quantity should not be null or negative
3083  * 3. Max quantity should be greater or equal to the min quantity
3084  * 4. The ranges of min-max quantities should not overlap across tiers for a given line
3085  * 5. The price tier price should be positive if not null
3086  * 6. Precision of the price entered should be less than the auction currency precision
3087  */
3088 PROCEDURE VAL_QTY_BASED_PRICE_TIERS (
3089   p_auction_header_id IN NUMBER,
3090   p_close_bidding_date IN DATE,
3091   p_request_id IN NUMBER,
3092   p_expiration_date IN DATE,
3093   p_user_id IN NUMBER,
3094   p_login_id IN NUMBER,
3095   p_batch_id IN NUMBER,
3096   p_precision IN NUMBER
3097 ) IS
3098 
3099 l_temp NUMBER;
3100 BEGIN
3101 
3102   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3103     FND_LOG.string(log_level => FND_LOG.level_procedure,
3104       module  =>  g_module_prefix || 'VAL_QTY_BASED_PRICE_TIERS',
3105       message  => 'Entering Procedure' || ', p_auction_header_id = ' || p_auction_header_id);
3106   END IF; --}
3107 
3108   IF (p_precision <> g_precision_any) THEN
3109     l_temp := power (10, p_precision);
3110   ELSE
3111     l_temp := 0;
3112   END IF;
3113 
3114   INSERT ALL
3115 
3116   -- The min quantity is a required field. If the min quantity is null,
3117   -- we insert rows into the interface errors table.
3118 
3119   WHEN
3120   (
3121     sel_min_quantity IS NULL
3122     OR
3123     sel_min_quantity = g_null_int
3124   )
3125   THEN INTO PON_INTERFACE_ERRORS
3126   (
3127     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3128     AUCTION_HEADER_ID, LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME,
3129     TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
3130     LAST_UPDATE_LOGIN
3131   )
3132   VALUES
3133   (
3134     g_interface_type, --INTERFACE_TYPE
3135     'PON_AUCTS_PT_MIN_QUANTITY_REQ', -- ERROR_MESSAGE_NAME
3136     p_request_id, -- REQUEST_ID
3137     p_batch_id, --BATCH_ID
3138     g_auction_pts_type, -- ENTITY_TYPE
3139     p_auction_header_id, -- AUCTION_HEADER_ID
3140     sel_line_number, -- LINE_NUMBER
3141     sel_shipment_number, -- SHIPMENT_NUMBER
3142     p_expiration_date, -- EXPIRATION_DATE
3143     'LINENUM', -- TOKEN1_NAME
3144     sel_document_disp_line_number, -- TOKEN1_VALUE
3145     p_user_id, -- CREATED_BY
3146     sysdate, -- CREATION_DATE
3147     p_user_id, -- LAST_UPDATED_BY
3148     sysdate, -- LAST_UPDATE_DATE
3149     p_login_id -- LAST_UPDATE_LOGIN
3150   )
3151 
3152   -- The max quantity is a required field. If the min quantity is null,
3153   -- we insert rows into the interface errors table.
3154 
3155   WHEN
3156   (
3157     sel_max_quantity IS NULL
3158     OR
3159     sel_max_quantity = g_null_int
3160   )
3161   THEN INTO PON_INTERFACE_ERRORS
3162   (
3163     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3164     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3165     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3166   )
3167   VALUES
3168   (
3169     g_interface_type, --INTERFACE_TYPE
3170     'PON_AUCTS_PT_MAX_QUANTITY_REQ', -- ERROR_MESSAGE_NAME
3171     p_request_id, -- REQUEST_ID
3172     p_batch_id, --BATCH_ID
3173     g_auction_pts_type, -- ENTITY_TYPE
3174     p_auction_header_id, -- AUCTION_HEADER_ID
3175     sel_line_number, -- LINE_NUMBER
3176     sel_shipment_number, -- SHIPMENT_NUMBER
3177     p_expiration_date, -- EXPIRATION_DATE
3178     'LINENUM', -- TOKEN1_NAME
3179     sel_document_disp_line_number, -- TOKEN1_VALUE
3180     p_user_id, -- CREATED_BY
3181     sysdate, -- CREATION_DATE
3182     p_user_id, -- LAST_UPDATED_BY
3183     sysdate, -- LAST_UPDATE_DATE
3184     p_login_id -- LAST_UPDATE_LOGIN
3185   )
3186 
3187   -- The min quantity should be a positive number. i.e. strictly greater than zero.
3188 
3189   WHEN
3190   (
3191     (sel_min_quantity IS NOT NULL AND
3192     sel_min_quantity <= 0 AND
3193     sel_min_quantity <> g_null_int)
3194   )
3195   THEN INTO PON_INTERFACE_ERRORS
3196   (
3197     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3198     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3199     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3200   )
3201   VALUES
3202   (
3203     g_interface_type, --INTERFACE_TYPE
3204     'PON_AUCTS_PT_QUANTITY_POSITIVE', -- ERROR_MESSAGE_NAME
3205     p_request_id, -- REQUEST_ID
3206     p_batch_id, --BATCH_ID
3207     g_auction_pts_type, -- ENTITY_TYPE
3208     p_auction_header_id, -- AUCTION_HEADER_ID
3209     sel_line_number, -- LINE_NUMBER
3210     sel_shipment_number, -- SHIPMENT_NUMBER
3211     p_expiration_date, -- EXPIRATION_DATE
3212     'LINENUM', -- TOKEN1_NAME
3213     sel_document_disp_line_number, -- TOKEN1_VALUE
3214     p_user_id, -- CREATED_BY
3215     sysdate, -- CREATION_DATE
3216     p_user_id, -- LAST_UPDATED_BY
3217     sysdate, -- LAST_UPDATE_DATE
3218     p_login_id -- LAST_UPDATE_LOGIN
3219   )
3220 
3221   -- The max quantity should be a positive number. i.e. strictly greater than zero.
3222 
3223   WHEN
3224   (
3225     (sel_max_quantity IS NOT NULL AND
3226     sel_max_quantity <= 0 AND
3227     sel_max_quantity <> g_null_int)
3228   )
3229   THEN INTO PON_INTERFACE_ERRORS
3230   (
3231     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3232     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3233     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3234   )
3235   VALUES
3236   (
3237     g_interface_type, --INTERFACE_TYPE
3238     'PON_AUCTS_PT_QUANTITY_POSITIVE', -- ERROR_MESSAGE_NAME
3239     p_request_id, -- REQUEST_ID
3240     p_batch_id, --BATCH_ID
3241     g_auction_pts_type, -- ENTITY_TYPE
3242     p_auction_header_id, -- AUCTION_HEADER_ID
3243     sel_line_number, -- LINE_NUMBER
3244     sel_shipment_number, -- SHIPMENT_NUMBER
3245     p_expiration_date, -- EXPIRATION_DATE
3246     'LINENUM', -- TOKEN1_NAME
3247     sel_document_disp_line_number, -- TOKEN1_VALUE
3248     p_user_id, -- CREATED_BY
3249     sysdate, -- CREATION_DATE
3250     p_user_id, -- LAST_UPDATED_BY
3251     sysdate, -- LAST_UPDATE_DATE
3252     p_login_id -- LAST_UPDATE_LOGIN
3253   )
3254   -- max quantity should be greater or equal to the min quantity. i.e if min quantity should not
3255   -- be greater than max quantity
3256 
3257   WHEN
3258   (
3259     sel_min_quantity > sel_max_quantity
3260   )
3261   THEN INTO PON_INTERFACE_ERRORS
3262   (
3263     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3264     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3265     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3266   )
3267   VALUES
3268   (
3269     g_interface_type, --INTERFACE_TYPE
3270     'PON_QT_MAX_MIN_QTY_ERR', -- ERROR_MESSAGE_NAME
3271     p_request_id, -- REQUEST_ID
3272     p_batch_id, --BATCH_ID
3273     g_auction_pts_type, -- ENTITY_TYPE
3274     p_auction_header_id, -- AUCTION_HEADER_ID
3275     sel_line_number, -- LINE_NUMBER
3276     sel_shipment_number, -- SHIPMENT_NUMBER
3277     p_expiration_date, -- EXPIRATION_DATE
3278     'LINENUM', -- TOKEN1_NAME
3279     sel_document_disp_line_number, -- TOKEN1_VALUE
3280     p_user_id, -- CREATED_BY
3281     sysdate, -- CREATION_DATE
3282     p_user_id, -- LAST_UPDATED_BY
3283     sysdate, -- LAST_UPDATE_DATE
3284     p_login_id -- LAST_UPDATE_LOGIN
3285   )
3286 
3287   -- the price tier price should be positive( i.e. if it is not null then it should be positive)
3288 
3289   WHEN
3290   (
3291     sel_price <> g_null_int
3292     AND
3293     sel_price <= 0
3294   )
3295   THEN INTO PON_INTERFACE_ERRORS
3296   (
3297     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3298     SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3299     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3300   )
3301   VALUES
3302   (
3303     g_interface_type, --INTERFACE_TYPE
3304     'PON_AUCTS_QT_PRICE_POSITIVE', -- ERROR_MESSAGE_NAME
3305     p_request_id, -- REQUEST_ID
3306     p_batch_id, --BATCH_ID
3307     g_auction_pts_type, -- ENTITY_TYPE
3308     p_auction_header_id, -- AUCTION_HEADER_ID
3309     sel_line_number, -- LINE_NUMBER
3310     sel_shipment_number, -- SHIPMENT_NUMBER
3311     p_expiration_date, -- EXPIRATION_DATE
3312     'LINENUM', -- TOKEN1_NAME
3313     sel_document_disp_line_number, -- TOKEN1_VALUE
3314     p_user_id, -- CREATED_BY
3315     sysdate, -- CREATION_DATE
3316     p_user_id, -- LAST_UPDATED_BY
3317     sysdate, -- LAST_UPDATE_DATE
3318     p_login_id -- LAST_UPDATE_LOGIN
3319   )
3320 
3321   -- Precision of the price entered should be less than the auction currency precision
3322 
3323   WHEN
3324   (
3325     sel_price > 0 AND
3326     ABS (sel_price  * l_temp - TRUNC (sel_price * l_temp)) > 0
3327   )
3328   THEN INTO PON_INTERFACE_ERRORS
3329   (
3330     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3331     AUCTION_HEADER_ID, LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME,
3332     TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3333   )
3334   VALUES
3335   (
3336     g_interface_type, --INTERFACE_TYPE
3337     'PON_QT_PRICE_PRECISION', -- ERROR_MESSAGE_NAME
3338     p_request_id, -- REQUEST_ID
3339     p_batch_id, -- BATCH_ID
3340     g_auction_pts_type, -- ENTITY_TYPE
3341     p_auction_header_id, -- AUCTION_HEADER_ID
3342     sel_line_number, -- LINE_NUMBER
3343     sel_shipment_number, -- SHIPMENT_NUMBER
3344     p_expiration_date, -- EXPIRATION_DATE
3345     'LINENUM', -- TOKEN1_NAME
3346     sel_document_disp_line_number, -- TOKEN1_VALUE
3347     p_user_id, -- CREATED_BY
3348     sysdate, -- CREATION_DATE
3349     p_user_id, -- LAST_UPDATED_BY
3350     sysdate, -- LAST_UPDATE_DATE
3351     p_login_id -- LAST_UPDATE_LOGIN
3352   )
3353 
3354   SELECT
3355     PAIP.LINE_NUMBER sel_line_number,
3356     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
3357     PASA.SHIPMENT_NUMBER sel_shipment_number,
3358     PASA.PRICE sel_price,
3359     PASA.QUANTITY sel_min_quantity,
3360     PASA.MAX_QUANTITY sel_max_quantity
3361   FROM
3362     PON_AUCTION_ITEM_PRICES_ALL PAIP,
3363     PON_AUCTION_SHIPMENTS_ALL PASA
3364   WHERE
3365     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
3366     PASA.AUCTION_HEADER_ID = p_auction_header_id AND
3367     PAIP.LINE_NUMBER = PASA.LINE_NUMBER;
3368 
3369   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3370     FND_LOG.string(log_level => FND_LOG.level_procedure,
3371       module  =>  g_module_prefix || 'VAL_PRICE_BREAKS',
3372       message  => 'Leaving procedure');
3373   END IF; --}
3374 
3375   -- The ranges of min-max quantities should not overlap across tiers for a given line in a negotiation
3376   -- When this validation is performed at shipments level multiple error message were thrown for one particular line
3377   -- To avoid the multiple error messages this validation has to be performed at line level rather than shipments level.
3378 
3379   INSERT INTO PON_INTERFACE_ERRORS
3380   (
3381     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID, LINE_NUMBER,
3382     EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
3383     LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3384   )
3385  Select
3386     g_interface_type, --INTERFACE_TYPE
3387     'PON_AUC_OVERLAP_RANGES_QT', -- ERROR_MESSAGE_NAME
3388     p_request_id, -- REQUEST_ID
3389     p_batch_id, --BATCH_ID
3390     g_auction_pts_type, -- ENTITY_TYPE
3391     p_auction_header_id, -- AUCTION_HEADER_ID
3392     paip.line_number, -- LINE_NUMBER
3393     p_expiration_date, -- EXPIRATION_DATE
3394     'LINENUM', -- TOKEN1_NAME
3395     paip.line_number, -- TOKEN1_VALUE
3396     p_user_id, -- CREATED_BY
3397     sysdate, -- CREATION_DATE
3398     p_user_id, -- LAST_UPDATED_BY
3399     sysdate, -- LAST_UPDATE_DATE
3400     p_login_id    -- LAST_UPDATE_LOGIN
3401 FROM pon_auction_item_prices_all paip
3402 WHERE paip.auction_header_id = p_auction_header_id
3403  AND paip.line_number IN
3404   (SELECT DISTINCT pasa.line_number
3405    FROM pon_auction_shipments_all pasa1,
3406    pon_auction_shipments_all pasa
3407    WHERE pasa1.auction_header_id = p_auction_header_id
3408    and pasa.auction_header_id = p_auction_header_id
3409    AND pasa.line_number = pasa1.line_number
3410    AND pasa1.shipment_number <> pasa.shipment_number
3411    AND pasa1.quantity <= pasa.quantity
3412    AND pasa.quantity <= pasa1.max_quantity) ;
3413 
3414 END VAL_QTY_BASED_PRICE_TIERS;
3415 
3416 /*
3417  * Check to ensure that there are no duplicate price differentials.
3418  * Keeping this outside all other validations as we need a group by here
3419  */
3420 PROCEDURE VAL_PD_UNIQUE(
3421   p_auction_header_id IN NUMBER,
3422   p_request_id IN NUMBER,
3423   p_expiration_date IN DATE,
3424   p_user_id IN NUMBER,
3425   p_login_id IN NUMBER,
3426   p_batch_id IN NUMBER
3427  ) IS
3428 BEGIN
3429   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3430     FND_LOG.string(log_level => FND_LOG.level_procedure,
3431       module  =>  g_module_prefix || 'VAL_PD_UNIQUE',
3432       message  => 'Entering procedure' || ', p_auction_header_id = ' || p_auction_header_id);
3433   END IF; --}
3434 
3435   -- For price differentials directly under the lines
3436 
3437   INSERT INTO PON_INTERFACE_ERRORS
3438   (
3439     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3440     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
3441     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3442   )
3443   SELECT
3444     g_interface_type, --INTERFACE_TYPE
3445     'PON_DUPLICATE_PRICE_TYPES_ERR', -- ERROR_MESSAGE_NAME
3446     p_request_id, -- REQUEST_ID
3447     p_batch_id, --BATCH_ID
3448     g_auction_pds_type, -- ENTITY_TYPE
3449     p_auction_header_id, -- AUCTION_HEADER_ID
3450     PAIP.LINE_NUMBER, -- LINE_NUMBER
3451     p_expiration_date, -- EXPIRATION_DATE
3452     'LINE_NUMBER', -- TOKEN1_NAME
3453     PAIP.DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
3454     p_user_id, -- CREATED_BY
3455     sysdate, -- CREATION_DATE
3456     p_user_id, -- LAST_UPDATED_BY
3457     sysdate, -- LAST_UPDATE_DATE
3458     p_login_id -- LAST_UPDATE_LOGIN
3459   FROM
3460     PON_PRICE_DIFFERENTIALS PPD,
3461     PON_AUCTION_ITEM_PRICES_ALL PAIP
3462   WHERE
3463     PPD.AUCTION_HEADER_ID = p_auction_header_id AND
3464     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
3465     PPD.LINE_NUMBER = PAIP.LINE_NUMBER AND
3466     PPD.SHIPMENT_NUMBER = -1
3467   GROUP BY
3468     PPD.AUCTION_HEADER_ID,
3469     PAIP.LINE_NUMBER,
3470     PAIP.DOCUMENT_DISP_LINE_NUMBER,
3471     PPD.PRICE_TYPE
3472   HAVING
3473     COUNT(PPD.LINE_NUMBER) > 1;
3474 
3475   -- For price differentials under shipments
3476 
3477   INSERT INTO PON_INTERFACE_ERRORS
3478   (
3479     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3480     AUCTION_HEADER_ID, LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
3481     CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3482   )
3483   SELECT
3484     g_interface_type, --INTERFACE_TYPE
3485     'PON_DUPLICATE_PRICE_TYPES', -- ERROR_MESSAGE_NAME
3486     p_request_id, -- REQUEST_ID
3487     p_batch_id, --BATCH_ID
3488     g_auction_pds_type, -- ENTITY_TYPE
3489     p_auction_header_id, -- AUCTION_HEADER_ID
3490     PAIP.LINE_NUMBER, -- LINE_NUMBER
3491     p_expiration_date, -- EXPIRATION_DATE
3492     'LINE_NUMBER', -- TOKEN1_NAME
3493     PAIP.DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
3494     p_user_id, -- CREATED_BY
3495     sysdate, -- CREATION_DATE
3496     p_user_id, -- LAST_UPDATED_BY
3497     sysdate, -- LAST_UPDATE_DATE
3498     p_login_id -- LAST_UPDATE_LOGIN
3499   FROM
3500     PON_PRICE_DIFFERENTIALS PPD,
3501     PON_AUCTION_ITEM_PRICES_ALL PAIP,
3502     PON_AUCTION_SHIPMENTS_ALL PAS
3503   WHERE
3504     PPD.AUCTION_HEADER_ID = p_auction_header_id AND
3505     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
3506     PAS.AUCTION_HEADER_ID = p_auction_header_id AND
3507     PPD.LINE_NUMBER = PAIP.LINE_NUMBER AND
3508     PPD.LINE_NUMBER = PAS.LINE_NUMBER AND
3509     PAS.SHIPMENT_NUMBER = PPD.SHIPMENT_NUMBER
3510   GROUP BY
3511     PPD.AUCTION_HEADER_ID,
3512     PAIP.LINE_NUMBER,
3513     PAIP.DOCUMENT_DISP_LINE_NUMBER,
3514     PPD.PRICE_TYPE,
3515     PAS.SHIPMENT_NUMBER
3516   HAVING
3517     COUNT(PPD.LINE_NUMBER) > 1;
3518 
3519   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3520     FND_LOG.string(log_level => FND_LOG.level_procedure,
3521       module  =>  g_module_prefix || 'VAL_PD_UNIQUE',
3522       message  => 'Leaving procedure');
3523   END IF; --}
3524 END VAL_PD_UNIQUE;
3525 
3526 /*
3527  * The following validations are performed:
3528  * 1. Multiplier should be a positive number
3529  * 2. Price differential should not be empty
3530  *
3531  * Validations are performed for price differentials directly under the lines
3532  * and also for those that are under the shipments
3533  */
3534 PROCEDURE VAL_PRICE_DIFFERENTIALS (
3535   p_auction_header_id IN NUMBER,
3536   p_request_id IN NUMBER,
3537   p_expiration_date IN DATE,
3538   p_user_id IN NUMBER,
3539   p_login_id IN NUMBER,
3540   p_batch_id IN NUMBER
3541 ) IS
3542 BEGIN
3543   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3544     FND_LOG.string(log_level => FND_LOG.level_procedure,
3545       module  =>  g_module_prefix || 'VAL_PRICE_DIFFERENTIALS',
3546       message  => 'Entering procedure' || ', p_auction_header_id = ' || p_auction_header_id);
3547   END IF; --}
3548 
3549   -- FOR PRICE DIFFERENTIALS DIRECTLY UNDER LINES
3550 
3551   INSERT ALL
3552 
3553   -- MULTIPLIER SHOULD BE A POSITIVE NUMBER
3554 
3555   WHEN
3556   (
3557     sel_multiplier IS NULL OR
3558     sel_multiplier <= 0
3559   )
3560   THEN INTO PON_INTERFACE_ERRORS
3561   (
3562     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3563     LINE_NUMBER, PRICE_DIFFERENTIAL_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
3564     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
3565     LAST_UPDATE_LOGIN
3566   )
3567   VALUES
3568   (
3569     g_interface_type, --INTERFACE_TYPE
3570     NVL2 (sel_multiplier, 'PON_AUCTS_TAR_MULT_POSITIVE', 'PON_AUCTS_TAR_MULT_REQD'),         -- ERROR_MESSAGE_NAME
3571     p_request_id, -- REQUEST_ID
3572     p_batch_id, --BATCH_ID
3573     g_auction_pds_type, -- ENTITY_TYPE
3574     p_auction_header_id, -- AUCTION_HEADER_ID
3575     sel_line_number, -- LINE_NUMBER
3576     sel_price_differential_number, -- PRICE_DIFFERENTIAL_NUMBER
3577     p_expiration_date, -- EXPIRATION_DATE
3578     'LINE_NUMBER', -- TOKEN1_NAME
3579     sel_document_disp_line_number, -- TOKEN1_VALUE
3580     'PRICE_TYPE', -- TOKEN2_NAME
3581     sel_price_differential_desc, -- TOKEN2_VALUE
3582     p_user_id, -- CREATED_BY
3583     sysdate, -- CREATION_DATE
3584     p_user_id, -- LAST_UPDATED_BY
3585     sysdate, -- LAST_UPDATE_DATE
3586     p_login_id -- LAST_UPDATE_LOGIN
3587   )
3588 
3589   -- PRICE DIFFERENTIAL SHOULD NOT BE EMPTY
3590 
3591   WHEN
3592   (
3593     sel_price_type = g_empty_price_type AND
3594     sel_multiplier IS NULL
3595   )
3596   THEN INTO PON_INTERFACE_ERRORS
3597   (
3598     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3599     LINE_NUMBER, PRICE_DIFFERENTIAL_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME,
3600     TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3601   )
3602   VALUES
3603   (
3604     g_interface_type, --INTERFACE_TYPE
3605     'PON_AUCTS_PRICE_DIFF_EMPTY', -- ERROR_MESSAGE_NAME
3606     p_request_id, -- REQUEST_ID
3607     p_batch_id, --BATCH_ID
3608     g_auction_pds_type, -- ENTITY_TYPE
3609     p_auction_header_id, -- AUCTION_HEADER_ID
3610     sel_line_number, -- LINE_NUMBER
3611     sel_price_differential_number, -- PRICE_DIFFERENTIAL_NUMBER
3612     p_expiration_date, -- EXPIRATION_DATE
3613     'LINE_NUMBER', -- TOKEN1_NAME
3614     sel_document_disp_line_number, -- TOKEN1_VALUE
3615     'PRICE_TYPE', -- TOKEN1_NAME
3616     sel_price_differential_desc, -- TOKEN1_VALUE
3617     p_user_id, -- CREATED_BY
3618     sysdate, -- CREATION_DATE
3619     p_user_id, -- LAST_UPDATED_BY
3620     sysdate, -- LAST_UPDATE_DATE
3621     p_login_id -- LAST_UPDATE_LOGIN
3622   )
3623 
3624   SELECT
3625     PPD.MULTIPLIER sel_multiplier,
3626     PAIP.LINE_NUMBER sel_line_number,
3627     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
3628     PPD.PRICE_DIFFERENTIAL_NUMBER sel_price_differential_number,
3629     PPDL.PRICE_DIFFERENTIAL_DESC sel_price_differential_desc,
3630     PPD.PRICE_TYPE sel_price_type
3631   FROM
3632     PON_PRICE_DIFFERENTIALS PPD,
3633     PON_AUCTION_ITEM_PRICES_ALL PAIP,
3634     PO_PRICE_DIFF_LOOKUPS_V PPDL
3635   WHERE
3636     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
3637     PPD.AUCTION_HEADER_ID = p_auction_header_id AND
3638     PAIP.LINE_NUMBER = PPD.LINE_NUMBER AND
3639     PPDL.PRICE_DIFFERENTIAL_TYPE = PPD.PRICE_TYPE AND
3640     PPD.SHIPMENT_NUMBER = -1;
3641 
3642   -- FOR PRICE DIFFERENTIALS UNDER PRICE BREAKS
3643 
3644   INSERT ALL
3645 
3646   -- MULTIPLIER SHOULD BE A POSITIVE NUMBER
3647 
3648   WHEN
3649   (
3650     sel_multiplier IS NULL OR
3651     sel_multiplier <= 0
3652   )
3653   THEN INTO PON_INTERFACE_ERRORS
3654   (
3655     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3656     LINE_NUMBER, SHIPMENT_NUMBER, PRICE_DIFFERENTIAL_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
3657     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
3658     LAST_UPDATE_LOGIN
3659   )
3660   VALUES
3661   (
3662     g_interface_type, --INTERFACE_TYPE
3663     DECODE (sel_multiplier, 'PON_AUCTS_TAR_MULT_POS_SHIP', 'PON_AUCTS_TAR_MULT_REQD_SHIP'),         -- ERROR_MESSAGE_NAME
3664     p_request_id, -- REQUEST_ID
3665     p_batch_id, --BATCH_ID
3666     g_auction_pds_type, -- ENTITY_TYPE
3667     p_auction_header_id, -- AUCTION_HEADER_ID
3668     sel_line_number, -- LINE_NUMBER
3669     sel_shipment_number, -- SHIPMENT_NUMBER
3670     sel_price_differential_number, -- PRICE_DIFFERENTIAL_NUMBER
3671     p_expiration_date, -- EXPIRATION_DATE
3672     'LINE_NUMBER', -- TOKEN1_NAME
3673     sel_document_disp_line_number, -- TOKEN1_VALUE
3674     'PRICE_TYPE', -- TOKEN2_NAME
3675     sel_price_differential_desc, -- TOKEN2_VALUE
3676     p_user_id, -- CREATED_BY
3677     sysdate, -- CREATION_DATE
3678     p_user_id, -- LAST_UPDATED_BY
3679     sysdate, -- LAST_UPDATE_DATE
3680     p_login_id -- LAST_UPDATE_LOGIN
3681   )
3682 
3683   -- PRICE DIFFERENTIAL SHOULD NOT BE EMPTY
3684 
3685   WHEN
3686   (
3687     sel_price_type = g_empty_price_type AND
3688     sel_multiplier IS NULL
3689   )
3690   THEN INTO PON_INTERFACE_ERRORS
3691   (
3692     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3693     LINE_NUMBER, SHIPMENT_NUMBER, PRICE_DIFFERENTIAL_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME,
3694     TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3695   )
3696   VALUES
3697   (
3698     g_interface_type, --INTERFACE_TYPE
3699     'PON_AUCTS_PRICE_DIFF_EMPTY', -- ERROR_MESSAGE_NAME
3700     p_request_id, -- REQUEST_ID
3701     p_batch_id, --BATCH_ID
3702     g_auction_pds_type, -- ENTITY_TYPE
3703     p_auction_header_id, -- AUCTION_HEADER_ID
3704     sel_line_number, -- LINE_NUMBER
3705     sel_shipment_number, -- SHIPMENT_NUMBER
3706     sel_price_differential_number, -- PRICE_DIFFERENTIAL_NUMBER
3707     p_expiration_date, -- EXPIRATION_DATE
3708     'LINE_NUMBER', -- TOKEN1_NAME
3709     sel_document_disp_line_number, -- TOKEN1_VALUE
3710     'PRICE_TYPE', -- TOKEN1_NAME
3711     sel_price_differential_desc, -- TOKEN1_VALUE
3712     p_user_id, -- CREATED_BY
3713     sysdate, -- CREATION_DATE
3714     p_user_id, -- LAST_UPDATED_BY
3715     sysdate, -- LAST_UPDATE_DATE
3716     p_login_id -- LAST_UPDATE_LOGIN
3717   )
3718 
3719   SELECT
3720     PPD.MULTIPLIER sel_multiplier,
3721     PAIP.LINE_NUMBER sel_line_number,
3722     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
3723     PPD.PRICE_DIFFERENTIAL_NUMBER sel_price_differential_number,
3724     PPD.PRICE_TYPE sel_price_type,
3725     PPD.SHIPMENT_NUMBER sel_shipment_number,
3726     PPDL.PRICE_DIFFERENTIAL_DESC sel_price_differential_desc
3727   FROM
3728     PON_AUCTION_ITEM_PRICES_ALL PAIP,
3729     PON_AUCTION_SHIPMENTS_ALL PASA,
3730     PON_PRICE_DIFFERENTIALS PPD,
3731     PO_PRICE_DIFF_LOOKUPS_V PPDL
3732   WHERE
3733     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
3734     PPD.AUCTION_HEADER_ID = p_auction_header_id AND
3735     PASA.AUCTION_HEADER_ID = p_auction_header_id AND
3736     PAIP.LINE_NUMBER = PASA.LINE_NUMBER AND
3737     PASA.LINE_NUMBER = PPD.LINE_NUMBER AND
3738     PPDL.PRICE_DIFFERENTIAL_TYPE = PPD.PRICE_TYPE AND
3739     PASA.SHIPMENT_NUMBER = PPD.SHIPMENT_NUMBER;
3740 
3741   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3742     FND_LOG.string(log_level => FND_LOG.level_procedure,
3743       module  =>  g_module_prefix || 'VAL_PRICE_DIFFERENTIALS',
3744       message  => 'Leaving procedure');
3745   END IF; --}
3746 END VAL_PRICE_DIFFERENTIALS;
3747 
3748 /*
3749  * The following validations are performed:
3750  * 1. For line type price elements the value should be > 0
3751  * 2. For non line type price elements the value should be < 0
3752  * 3. If the display target flag is set then target value should be entered
3753  * 4. If the pricing basis is per unit then the value enteres should have a precision less
3754  *    than the auction currency precision
3755  * 5. If the pricing basis is fixed amount then the value precision should be less than the
3756  *    fnd currency precision
3757  * 6. There should not be any inactive price elements
3758  * 7. Pricing Basis should not be NULL - added this for back button support
3759  * 8. Cost Factor name cannot be null - added this for back button support
3760  */
3761 PROCEDURE VAL_PRICE_ELEMENTS (
3762   p_auction_header_id IN NUMBER,
3763   p_request_id IN NUMBER,
3764   p_expiration_date IN DATE,
3765   p_user_id IN NUMBER,
3766   p_login_id IN NUMBER,
3767   p_batch_id IN NUMBER,
3768   p_precision IN NUMBER,
3769   p_fnd_precision IN NUMBER,
3770   p_trading_partner_id IN NUMBER
3771 ) IS
3772 
3773 l_temp NUMBER;
3774 l_temp_fnd NUMBER;
3775 l_doctype_suffix VARCHAR2(10);
3776 BEGIN
3777 
3778   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
3779     FND_LOG.string(log_level => FND_LOG.level_procedure,
3780       module  =>  g_module_prefix || 'VAL_PRICE_ELEMENTS',
3781       message  => 'Entering procedure with:' || ' p_auction_header_id = ' || p_auction_header_id ||
3782                   ', p_trading_partner_id = ' || p_trading_partner_id);
3783   END IF; --}
3784 
3785   IF (p_precision <> g_precision_any) THEN
3786     l_temp := power (10, p_precision);
3787   ELSE
3788     l_temp := 0;
3789   END IF;
3790 
3791   l_doctype_suffix := PON_LARGE_AUCTION_UTIL_PKG.GET_DOCTYPE_SUFFIX (p_auction_header_id);
3792 
3793   INSERT ALL
3794 
3795   -- FOR LINE TYPE PRICE ELEMENTS THE VALUE SHOULD BE > 0
3796 
3797   WHEN
3798   (
3799     sel_value IS NOT NULL AND
3800     sel_price_element_type_id = g_item_price_type_id AND
3801     sel_value <= 0
3802   )
3803   THEN INTO PON_INTERFACE_ERRORS
3804   (
3805     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3806     LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME,
3807     TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3808   )
3809   VALUES
3810   (
3811     g_interface_type, --INTERFACE_TYPE
3812     'PON_PE_VALUE_MUST_BE_POS', -- ERROR_MESSAGE_NAME
3813     p_request_id, -- REQUEST_ID
3814     p_batch_id, --BATCH_ID
3815     g_auction_pfs_type, -- ENTITY_TYPE
3816     p_auction_header_id, -- AUCTION_HEADER_ID
3817     sel_line_number, -- LINE_NUMBER
3818     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
3819     p_expiration_date, -- EXPIRATION_DATE
3820     'LINE_NUMBER', -- TOKEN1_NAME
3821     sel_document_disp_line_number, -- TOKEN1_VALUE
3822     'PE_NAME', -- TOKEN1_NAME
3823     sel_name, -- TOKEN1_VALUE
3824     p_user_id, -- CREATED_BY
3825     sysdate, -- CREATION_DATE
3826     p_user_id, -- LAST_UPDATED_BY
3827     sysdate, -- LAST_UPDATE_DATE
3828     p_login_id -- LAST_UPDATE_LOGIN
3829   )
3830 
3831   -- FOR NON LINE TYPE PRICE ELEMENTS THE VALUE SHOULD BE < 0
3832 
3833   WHEN
3834   (
3835     sel_VALUE IS NOT NULL AND
3836     sel_PRICE_ELEMENT_TYPE_ID <> g_item_price_type_id AND
3837     sel_VALUE < 0
3838   )
3839   THEN INTO PON_INTERFACE_ERRORS
3840   (
3841     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3842     LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
3843     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
3844     LAST_UPDATE_LOGIN
3845   )
3846   VALUES
3847   (
3848     g_interface_type, --INTERFACE_TYPE
3849     'PON_PE_VALUE_BE_POS_OR_ZERO', -- ERROR_MESSAGE_NAME
3850     p_request_id, -- REQUEST_ID
3851     p_batch_id, -- BATCH_ID
3852     g_auction_pfs_type, -- ENTITY_TYPE
3853     p_auction_header_id, -- AUCTION_HEADER_ID
3854     sel_line_number, -- LINE_NUMBER
3855     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
3856     p_expiration_date, -- EXPIRATION_DATE
3857     'LINE_NUMBER', -- TOKEN1_NAME
3858     sel_document_disp_line_number, -- TOKEN1_VALUE
3859     'PE_NAME', -- TOKEN1_NAME
3860     sel_name, -- TOKEN1_VALUE
3861     p_user_id, -- CREATED_BY
3862     sysdate, -- CREATION_DATE
3863     p_user_id, -- LAST_UPDATED_BY
3864     sysdate, -- LAST_UPDATE_DATE
3865     p_login_id -- LAST_UPDATE_LOGIN
3866   )
3867 
3868   -- IF THE DISPLAY TARGET FLAG IS SET THEN TARGET VALUE SHOULD BE ENTERED
3869 
3870   WHEN
3871   (
3872     sel_value IS NULL AND
3873     sel_display_target_flag = 'Y'
3874   )
3875   THEN INTO PON_INTERFACE_ERRORS
3876   (
3877     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
3878     LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
3879     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE,
3880     LAST_UPDATE_LOGIN
3881   )
3882   VALUES
3883   (
3884     g_interface_type, --INTERFACE_TYPE
3885     'PON_AUC_PE_SHOW_TARGET', -- ERROR_MESSAGE_NAME
3886     p_request_id, -- REQUEST_ID
3887     p_batch_id, --BATCH_ID
3888     g_auction_pfs_type, -- ENTITY_TYPE
3889     p_auction_header_id, -- AUCTION_HEADER_ID
3890     sel_line_number, -- LINE_NUMBER
3891     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
3892     p_expiration_date, -- EXPIRATION_DATE
3893     'LINE_NUMBER', -- TOKEN1_NAME
3894     sel_document_disp_line_number, -- TOKEN1_VALUE
3895     'PE_NAME', -- TOKEN1_NAME
3896     sel_name, -- TOKEN1_VALUE
3897     p_user_id, -- CREATED_BY
3898     sysdate, -- CREATION_DATE
3899     p_user_id, -- LAST_UPDATED_BY
3900     sysdate, -- LAST_UPDATE_DATE
3901     p_login_id -- LAST_UPDATE_LOGIN
3902   )
3903 
3904   -- If the pricing basis is per unit then the value enteres should have
3905   -- a precision less than the auction currency precision
3906 
3907   WHEN
3908   (
3909     sel_value IS NOT NULL AND
3910     sel_pricing_basis = g_per_unit AND
3911     ABS (sel_value  * l_temp - TRUNC (sel_value * l_temp))> 0
3912   )
3913 
3914   THEN INTO PON_INTERFACE_ERRORS
3915   (
3916     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3917     AUCTION_HEADER_ID, LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE,
3918     TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY,
3919     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3920   )
3921   VALUES
3922   (
3923     g_interface_type, --INTERFACE_TYPE
3924     'PON_PE_TOO_MANY_DIGITS_M' || l_doctype_suffix, -- ERROR_MESSAGE_NAME
3925     p_request_id, -- REQUEST_ID
3926     p_batch_id, --BATCH_ID
3927     g_auction_pfs_type, -- ENTITY_TYPE
3928     p_auction_header_id, -- AUCTION_HEADER_ID
3929     sel_line_number, -- LINE_NUMBER
3930     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
3931     p_expiration_date, -- EXPIRATION_DATE
3932     'LINE_NUMBER', -- TOKEN1_NAME
3933     sel_document_disp_line_number, -- TOKEN1_VALUE
3934     'PE_NAME', -- TOKEN1_NAME
3935     sel_name, -- TOKEN1_VALUE
3936     p_user_id, -- CREATED_BY
3937     sysdate, -- CREATION_DATE
3938     p_user_id, -- LAST_UPDATED_BY
3939     sysdate, -- LAST_UPDATE_DATE
3940     p_login_id -- LAST_UPDATE_LOGIN
3941   )
3942 
3943   -- If the pricing basis is fixed amount then the value precision should
3944   -- be less than the fnd currency precision
3945 
3946   WHEN
3947   (
3948     sel_value IS NOT NULL AND
3949     sel_pricing_basis = g_fixed_amount AND
3950     ABS (sel_value * l_temp_fnd - TRUNC (sel_value * l_temp_fnd)) >0
3951   )
3952   THEN INTO PON_INTERFACE_ERRORS
3953   (
3954     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3955     AUCTION_HEADER_ID, LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE,
3956     TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY,
3957     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3958   )
3959   VALUES
3960   (
3961     g_interface_type, --INTERFACE_TYPE
3962     'PON_PE_TOO_MANY_DIGITS_A', -- ERROR_MESSAGE_NAME
3963     p_request_id, -- REQUEST_ID
3964     p_batch_id, -- BATCH_ID
3965     g_auction_pfs_type, -- ENTITY_TYPE
3966     p_auction_header_id, -- AUCTION_HEADER_ID
3967     sel_line_number, -- LINE_NUMBER
3968     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
3969     p_expiration_date, -- EXPIRATION_DATE
3970     'LINE_NUMBER', -- TOKEN1_NAME
3971     sel_document_disp_line_number, -- TOKEN1_VALUE
3972     'PE_NAME', -- TOKEN1_NAME
3973     sel_name, -- TOKEN1_VALUE
3974     p_user_id, -- CREATED_BY
3975     sysdate, -- CREATION_DATE
3976     p_user_id, -- LAST_UPDATED_BY
3977     sysdate, -- LAST_UPDATE_DATE
3978     p_login_id -- LAST_UPDATE_LOGIN
3979   )
3980 
3981   -- There should not be any inactive price elements
3982 
3983   WHEN
3984   (
3985     sel_enabled_flag = 'N'
3986   )
3987   THEN INTO PON_INTERFACE_ERRORS
3988   (
3989     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
3990     AUCTION_HEADER_ID, LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE,
3991     TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY,
3992     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
3993   )
3994   VALUES
3995   (
3996     g_interface_type, --INTERFACE_TYPE
3997     'PON_AUC_AUCTION_INA_PES', -- ERROR_MESSAGE_NAME
3998     p_request_id, -- REQUEST_ID
3999     p_batch_id, --BATCH_ID
4000     g_auction_pfs_type, -- ENTITY_TYPE
4001     p_auction_header_id, -- AUCTION_HEADER_ID
4002     sel_line_number, -- LINE_NUMBER
4003     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
4004     p_expiration_date, -- EXPIRATION_DATE
4005     'LINE_NUMBER', -- TOKEN1_NAME
4006     sel_document_disp_line_number, -- TOKEN1_VALUE
4007     'PE_NAME', -- TOKEN1_NAME
4008     sel_name, -- TOKEN1_VALUE
4009     p_user_id, -- CREATED_BY
4010     sysdate, -- CREATION_DATE
4011     p_user_id, -- LAST_UPDATED_BY
4012     sysdate, -- LAST_UPDATE_DATE
4013     p_login_id -- LAST_UPDATE_LOGIN
4014   )
4015 
4016   -- Pricing Basis should not be NULL - added this for back button support
4017   -- Pricing basis column is made nullable on the database
4018 
4019   WHEN
4020   (
4021     sel_pricing_basis IS NULL
4022   )
4023   THEN INTO PON_INTERFACE_ERRORS
4024   (
4025     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
4026     AUCTION_HEADER_ID, LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE,
4027     TOKEN1_NAME, TOKEN1_VALUE,
4028     CREATED_BY,CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4029   )
4030   VALUES
4031   (
4032     g_interface_type, --INTERFACE_TYPE
4033     'PON_AUC_PRICING_BASIS_M', -- ERROR_MESSAGE_NAME
4034     p_request_id, -- REQUEST_ID
4035     p_batch_id, --BATCH_ID
4036     g_auction_pfs_type, -- ENTITY_TYPE
4037     p_auction_header_id, -- AUCTION_HEADER_ID
4038     sel_line_number, -- LINE_NUMBER
4039     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
4040     p_expiration_date, -- EXPIRATION_DATE
4041     'LINE_NUMBER', -- TOKEN1_NAME
4042     sel_document_disp_line_number, -- TOKEN1_VALUE
4043     p_user_id, -- CREATED_BY
4044     sysdate, -- CREATION_DATE
4045     p_user_id, -- LAST_UPDATED_BY
4046     sysdate, -- LAST_UPDATE_DATE
4047     p_login_id -- LAST_UPDATE_LOGIN
4048   )
4049 
4050   -- Cost factor name should not be null (added for back button support)
4051 
4052   WHEN
4053   (
4054     sel_name IS NULL
4055   )
4056   THEN INTO PON_INTERFACE_ERRORS
4057   (
4058     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
4059     AUCTION_HEADER_ID, LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE,
4060     TOKEN1_NAME, TOKEN1_VALUE,
4061     CREATED_BY,CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4062   )
4063   VALUES
4064   (
4065     g_interface_type, --INTERFACE_TYPE
4066     'PON_PE_REQUIRED', -- ERROR_MESSAGE_NAME
4067     p_request_id, -- REQUEST_ID
4068     p_batch_id, --BATCH_ID
4069     g_auction_pfs_type, -- ENTITY_TYPE
4070     p_auction_header_id, -- AUCTION_HEADER_ID
4071     sel_line_number, -- LINE_NUMBER
4072     sel_price_element_type_id, -- PRICE_ELEMENT_TYPE_ID
4073     p_expiration_date, -- EXPIRATION_DATE
4074     'LINE_NUMBER', -- TOKEN1_NAME
4075     sel_document_disp_line_number, -- TOKEN1_VALUE
4076     p_user_id, -- CREATED_BY
4077     sysdate, -- CREATION_DATE
4078     p_user_id, -- LAST_UPDATED_BY
4079     sysdate, -- LAST_UPDATE_DATE
4080     p_login_id -- LAST_UPDATE_LOGIN
4081   )
4082 
4083   SELECT
4084     PAIP.LINE_NUMBER sel_line_number,
4085     PAIP.DOCUMENT_DISP_LINE_NUMBER sel_document_disp_line_number,
4086     PPE.PRICE_ELEMENT_TYPE_ID sel_price_element_type_id,
4087     PPETL.NAME sel_name,
4088     PPE.VALUE sel_value,
4089     PPE.DISPLAY_TARGET_FLAG sel_display_target_flag,
4090     PPE.PRICING_BASIS sel_pricing_basis,
4091     PPET.ENABLED_FLAG sel_enabled_flag,
4092     PPET.SYSTEM_FLAG sel_system_flag
4093   FROM
4094     PON_AUCTION_ITEM_PRICES_ALL PAIP,
4095     PON_PRICE_ELEMENTS PPE,
4096     PON_PRICE_ELEMENT_TYPES_TL PPETL,
4097     PON_PRICE_ELEMENT_TYPES PPET
4098   WHERE
4099     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
4100     PPE.AUCTION_HEADER_ID = p_auction_header_id AND
4101     PAIP.LINE_NUMBER = PPE.LINE_NUMBER AND
4102     PPE.PRICE_ELEMENT_TYPE_ID = PPETL.PRICE_ELEMENT_TYPE_ID(+) AND
4103     PPE.PRICE_ELEMENT_TYPE_ID = PPET.PRICE_ELEMENT_TYPE_ID(+) AND
4104     PPETL.LANGUAGE(+) = USERENV ('LANG');
4105 
4106   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4107     FND_LOG.string(log_level => FND_LOG.level_procedure,
4108       module  =>  g_module_prefix || 'VAL_PRICE_ELEMENTS',
4109       message  => 'Leaving procedure');
4110   END IF; --}
4111 END VAL_PRICE_ELEMENTS;
4112 
4113 /*
4114  * Check to see that there are no duplicate price elements.
4115  * This is being kept outside the other validations as this
4116  * involves a group by
4117  */
4118 PROCEDURE VAL_PE_UNIQUE (
4119   p_auction_header_id IN NUMBER,
4120   p_request_id IN NUMBER,
4121   p_expiration_date IN DATE,
4122   p_user_id IN NUMBER,
4123   p_login_id IN NUMBER,
4124   p_batch_id IN NUMBER
4125  ) IS
4126 BEGIN
4127   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4128     FND_LOG.string(log_level => FND_LOG.level_procedure,
4129       module  =>  g_module_prefix || 'VAL_PE_UNIQUE',
4130       message  => 'Entering PON_NEGOTIATION_HELPER_PVT.VAL_PE_UNIQUE'
4131                   || ', p_auction_header_id = ' || p_auction_header_id);
4132   END IF; --}
4133 
4134   INSERT INTO PON_INTERFACE_ERRORS
4135   (
4136     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
4137     AUCTION_HEADER_ID, LINE_NUMBER, PRICE_ELEMENT_TYPE_ID, EXPIRATION_DATE,
4138     TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY,
4139     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4140   )
4141   SELECT
4142     g_interface_type, --INTERFACE_TYPE
4143     'PON_AUC_DUPLICATE_PES', -- ERROR_MESSAGE_NAME
4144     p_request_id, -- REQUEST_ID
4145     p_batch_id, --BATCH_ID
4146     g_auction_pfs_type, -- ENTITY_TYPE
4147     p_auction_header_id, -- AUCTION_HEADER_ID
4148     PPE.LINE_NUMBER, -- LINE_NUMBER
4149     PPE.PRICE_ELEMENT_TYPE_ID, -- PRICE_ELEMENT_TYPE_ID
4150     p_expiration_date, -- EXPIRATION_DATE
4151     'LINE_NUMBER', -- TOKEN1_NAME
4152     PAIP.DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4153     'PE_NAME', -- TOKEN1_NAME
4154     PPETL.NAME, -- TOKEN1_VALUE
4155     p_user_id, -- CREATED_BY
4156     sysdate, -- CREATION_DATE
4157     p_user_id, -- LAST_UPDATED_BY
4158     sysdate, -- LAST_UPDATE_DATE
4159     p_login_id -- LAST_UPDATE_LOGIN
4160   FROM
4161     PON_AUCTION_ITEM_PRICES_ALL PAIP,
4162     PON_PRICE_ELEMENTS PPE,
4163     PON_PRICE_ELEMENT_TYPES_TL PPETL
4164   WHERE
4165     PAIP.AUCTION_HEADER_ID = p_auction_header_id AND
4166     PPE.AUCTION_HEADER_ID = p_auction_header_id AND
4167     PAIP.LINE_NUMBER = PPE.LINE_NUMBER AND
4168     PPE.PRICE_ELEMENT_TYPE_ID  = PPETL.PRICE_ELEMENT_TYPE_ID AND
4169     PPETL.LANGUAGE = USERENV ('LANG')
4170   GROUP BY
4171     PPE.AUCTION_HEADER_ID,
4172     PPE.LINE_NUMBER,
4173     PPE.PRICE_ELEMENT_TYPE_ID,
4174     PAIP.DOCUMENT_DISP_LINE_NUMBER,
4175     PPETL.NAME
4176   HAVING
4177     COUNT (PPE.LINE_NUMBER) > 1;
4178 
4179   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4180     FND_LOG.string(log_level => FND_LOG.level_procedure,
4181       module  =>  g_module_prefix || 'VAL_PE_UNIQUE',
4182       message  => 'Leaving procedure');
4183   END IF; --}
4184 END VAL_PE_UNIQUE;
4185 
4186 -- Validating if there is any supplier who has been restricted on all the
4187 -- negotiation lines
4188 PROCEDURE VAL_PARTY_EXCLUSIONS (
4189   p_auction_header_id IN NUMBER,
4190   p_request_id IN NUMBER,
4191   p_expiration_date IN DATE,
4192   p_user_id IN NUMBER,
4193   p_login_id IN NUMBER,
4194   p_batch_id IN NUMBER
4195 ) IS
4196 
4197 l_major_line_count NUMBER;
4198 BEGIN
4199   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4200     FND_LOG.string(log_level => FND_LOG.level_procedure,
4201       module  =>  g_module_prefix || 'VAL_PARTY_EXCLUSIONS',
4202       message  => 'Entering Procedure' || ', p_auction_header_id = ' || p_auction_header_id);
4203   END IF; --}
4204 
4205   -- LOGIC: count the number of exclusions for this supplier from
4206   -- pon_party_line_exclusions table and if that number is equal
4207   -- to the number of major lines in the negotiation then it is
4208   -- and error
4209   SELECT
4210     COUNT(LINE_NUMBER)
4211   INTO
4212     l_major_line_count
4213   FROM
4214     pon_auction_item_prices_all
4215   WHERE
4216     auction_header_id = p_auction_header_id AND
4217     group_type IN ('LOT', 'GROUP', 'LINE');
4218 
4219   INSERT INTO PON_INTERFACE_ERRORS
4220   (
4221     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
4222     AUCTION_HEADER_ID, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY,
4223     CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4224   )
4225   SELECT
4226     g_interface_type, --INTERFACE_TYPE
4227     'PON_PARTY_TOTALLY_EXCLUDED', -- ERROR_MESSAGE_NAME
4228     p_request_id, -- REQUEST_ID
4229     p_batch_id, --BATCH_ID
4230     g_auction_attrs_type, -- ENTITY_TYPE
4231     p_auction_header_id, -- AUCTION_HEADER_ID
4232     p_expiration_date, -- EXPIRATION_DATE
4233     'SUPPLIER_NAME', -- TOKEN1_NAME
4234     pbp.trading_partner_name, -- TOKEN1_VALUE
4235     p_user_id, -- CREATED_BY
4236     sysdate, -- CREATION_DATE
4237     p_user_id, -- LAST_UPDATED_BY
4238     sysdate, -- LAST_UPDATE_DATE
4239     p_login_id -- LAST_UPDATE_LOGIN
4240   FROM
4241     pon_bidding_parties pbp
4242   WHERE
4243     pbp.auction_header_id = p_auction_header_id AND
4244     (SELECT
4245        COUNT(trading_partner_id)
4246      FROM
4247        pon_party_line_exclusions pple
4248      WHERE
4249        pple.trading_partner_id = pbp.trading_partner_id AND
4250        pple.vendor_site_id = pbp.vendor_site_id AND
4251        pple.auction_header_id = p_auction_header_id) = l_major_line_count;
4252 
4253   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4254     FND_LOG.string(log_level => FND_LOG.level_procedure,
4255       module  =>  g_module_prefix || 'VAL_PARTY_EXCLUSIONS',
4256       message  => 'Leaving Procedure');
4257   END IF; --}
4258 
4259 END VAL_PARTY_EXCLUSIONS;
4260 
4261 PROCEDURE VAL_LINE_REF_DATA (
4262   p_auction_header_id IN NUMBER,
4263   p_request_id IN NUMBER,
4264   p_expiration_date IN DATE,
4265   p_user_id IN NUMBER,
4266   p_login_id IN NUMBER,
4267   p_batch_id IN NUMBER
4268 ) IS
4269 BEGIN
4270   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4271     FND_LOG.string(log_level => FND_LOG.level_procedure,
4272       module  =>  g_module_prefix || 'VAL_LINE_REF_DATA',
4273       message  => 'Entering Procedure p_auction_header_id = ' || p_auction_header_id);
4274   END IF; --}
4275   INSERT ALL
4276 
4277   -- VALIDATE JOB ID
4278 
4279   WHEN
4280   (
4281      SELECTED_PURCHASE_BASIS = g_temp_labor AND
4282      NOT EXISTS (SELECT 'X'
4283                  FROM PO_JOB_ASSOCIATIONS
4284                  WHERE JOB_ID = SELECTED_JOB_ID)
4285   )
4286   THEN INTO PON_INTERFACE_ERRORS
4287   (
4288     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4289     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE,
4290     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4291   )
4292   VALUES
4293   (
4294     g_interface_type, --INTERFACE_TYPE
4295     'PON_AUC_DATA_INVALID_REF_JOB', -- ERROR_MESSAGE_NAME
4296     p_request_id, -- REQUEST_ID
4297     p_batch_id, --BATCH_ID
4298     g_auction_item_type, -- ENTITY_TYPE
4299     p_auction_header_id, -- AUCTION_HEADER_ID
4300     LINE_NUMBER, -- LINE_NUMBER
4301     p_expiration_date, -- EXPIRATION_DATE
4302     'NUM', -- TOKEN1_NAME
4303     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4304     p_user_id, -- CREATED_BY
4305     sysdate, -- CREATION_DATE
4306     p_user_id, -- LAST_UPDATED_BY
4307     sysdate, -- LAST_UPDATE_DATE
4308     p_login_id -- LAST_UPDATE_LOGIN
4309   )
4310 
4311   -- VALIDATE LINE TYPE ERROR
4312 
4313   WHEN
4314   (
4315     SELECTED_LINE_ORIGINATION_CODE = 'BLANKET' AND
4316     NOT EXISTS (SELECT  'X'
4317                 FROM  PO_LINE_TYPES_B
4318                 WHERE  LINE_TYPE_ID = SELECTED_LINE_TYPE_ID)
4319   )
4320   THEN INTO PON_INTERFACE_ERRORS
4321   (
4322     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4323     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE,
4324     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4325   )
4326   VALUES
4327   (
4328     g_interface_type, --INTERFACE_TYPE
4329     'PON_AUC_DATA_INVALID_REF_LTYP', -- ERROR_MESSAGE_NAME
4330     p_request_id, -- REQUEST_ID
4331     p_batch_id, --BATCH_ID
4332     g_auction_item_type, -- ENTITY_TYPE
4333     p_auction_header_id, -- AUCTION_HEADER_ID
4334     LINE_NUMBER, -- LINE_NUMBER
4335     p_expiration_date, -- EXPIRATION_DATE
4336     'NUM', -- TOKEN1_NAME
4337     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4338     p_user_id, -- CREATED_BY
4339     sysdate, -- CREATION_DATE
4340     p_user_id, -- LAST_UPDATED_BY
4341     sysdate, -- LAST_UPDATE_DATE
4342     p_login_id -- LAST_UPDATE_LOGIN
4343   )
4344 
4345   -- VALIDATE CATEGORY
4346 
4347   WHEN
4348   (
4349     SELECTED_LINE_ORIGINATION_CODE = 'BLANKET' AND
4350     SELECTED_ITEM_ID IS NOT NULL AND
4351     NOT EXISTS (SELECT  'X'
4352                         FROM  MTL_ITEM_CATEGORIES MIC,
4353                               MTL_DEFAULT_SETS_VIEW MDSV,
4354                               FINANCIALS_SYSTEM_PARAMS_ALL FSP
4355                        WHERE  MIC.INVENTORY_ITEM_ID = SELECTED_ITEM_ID
4356                          AND  MIC.ORGANIZATION_ID =
4357                               FSP.INVENTORY_ORGANIZATION_ID
4358                          AND  NVL(FSP.ORG_ID, -9999) = NVL(SELECTED_ORG_ID, -9999)
4359                          AND  MIC.CATEGORY_SET_ID =  MDSV.CATEGORY_SET_ID
4360                          AND  MDSV.FUNCTIONAL_AREA_ID = 2)
4361   )
4362   THEN INTO PON_INTERFACE_ERRORS
4363   (
4364     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4365     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE,
4366     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4367   )
4368   VALUES
4369   (
4370       g_interface_type, --INTERFACE_TYPE
4371       'PON_AUC_DATA_INVALID_REF_CAT', -- ERROR_MESSAGE_NAME
4372       p_request_id, -- REQUEST_ID
4373       p_batch_id, --BATCH_ID
4374       g_auction_item_type, -- ENTITY_TYPE
4375       p_auction_header_id, -- AUCTION_HEADER_ID
4376       LINE_NUMBER, -- LINE_NUMBER
4377       p_expiration_date, -- EXPIRATION_DATE
4378       'NUM', -- TOKEN1_NAME
4379       DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4380       p_user_id, -- CREATED_BY
4381       sysdate, -- CREATION_DATE
4382       p_user_id, -- LAST_UPDATED_BY
4383       sysdate, -- LAST_UPDATE_DATE
4384       p_login_id -- LAST_UPDATE_LOGIN
4385   )
4386 
4387   -- VALIDATE ITEM REVISION
4388 
4389   WHEN
4390   (
4391      SELECTED_LINE_ORIGINATION_CODE = 'BLANKET' AND
4392      SELECTED_ITEM_ID IS NOT NULL AND
4393      SELECTED_ITEM_REVISION IS NOT NULL AND
4394      NOT EXISTS (SELECT  'X'
4395                  FROM  MTL_ITEM_REVISIONS
4396                  WHERE  REVISION = SELECTED_ITEM_REVISION AND
4397                INVENTORY_ITEM_ID = SELECTED_ITEM_ID)
4398   )
4399   THEN INTO PON_INTERFACE_ERRORS
4400   (
4401     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4402     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE,
4403     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4404   )
4405   VALUES
4406   (
4407     g_interface_type, --INTERFACE_TYPE
4408     'PON_AUC_DATA_INVALID_REF_REV', -- ERROR_MESSAGE_NAME
4409     p_request_id, -- REQUEST_ID
4410     p_batch_id, --BATCH_ID
4411     g_auction_item_type, -- ENTITY_TYPE
4412     p_auction_header_id, -- AUCTION_HEADER_ID
4413     LINE_NUMBER, -- LINE_NUMBER
4414     p_expiration_date, -- EXPIRATION_DATE
4415     'NUM', -- TOKEN1_NAME
4416     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4417     p_user_id, -- CREATED_BY
4418     sysdate, -- CREATION_DATE
4419     p_user_id, -- LAST_UPDATED_BY
4420     sysdate, -- LAST_UPDATE_DATE
4421     p_login_id -- LAST_UPDATE_LOGIN
4422   )
4423 
4424   -- VALIDATE OUTSIDE PROCESSING
4425 
4426   WHEN
4427   (
4428     SELECTED_LINE_ORIGINATION_CODE = 'BLANKET' AND
4429     SELECTED_ITEM_ID IS NOT NULL AND
4430     NOT EXISTS (SELECT  'X'
4431                 FROM
4432                 MTL_SYSTEM_ITEMS MSI,
4433                   FINANCIALS_SYSTEM_PARAMS_ALL FSP
4434                 WHERE
4435                 MSI.INVENTORY_ITEM_ID = SELECTED_ITEM_ID AND
4436                 MSI.ORGANIZATION_ID = FSP.INVENTORY_ORGANIZATION_ID AND
4437                 NVL(FSP.ORG_ID, -9999) = NVL(SELECTED_ORG_ID, -9999) AND
4438                 (MSI.OUTSIDE_OPERATION_FLAG <> 'Y'
4439                               OR (MSI.OUTSIDE_OPERATION_FLAG = 'Y'
4440                                  AND EXISTS (SELECT  'OP LINE TYPE'
4441                                                FROM  PO_LINE_TYPES_B PLT
4442                                               WHERE  PLT.LINE_TYPE_ID = SELECTED_LINE_TYPE_ID
4443                                                 AND  PLT.OUTSIDE_OPERATION_FLAG ='Y') ) ) )
4444   )
4445   THEN INTO PON_INTERFACE_ERRORS
4446   (
4447     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4448     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE,
4449     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4450   )
4451   VALUES
4452   (
4453     g_interface_type, --INTERFACE_TYPE
4454     'PON_AUC_INVALID_OP_LINE_REF', -- ERROR_MESSAGE_NAME
4455     p_request_id, -- REQUEST_ID
4456     p_batch_id, --BATCH_ID
4457     g_auction_item_type, -- ENTITY_TYPE
4458     p_auction_header_id, -- AUCTION_HEADER_ID
4459     LINE_NUMBER, -- LINE_NUMBER
4460     p_expiration_date, -- EXPIRATION_DATE
4461     'NUM', -- TOKEN1_NAME
4462     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4463     p_user_id, -- CREATED_BY
4464     sysdate, -- CREATION_DATE
4465     p_user_id, -- LAST_UPDATED_BY
4466     sysdate, -- LAST_UPDATE_DATE
4467     p_login_id -- LAST_UPDATE_LOGIN
4468   )
4469 
4470   -- VALIDATE ITEM PURCHASEABLE
4471 
4472   WHEN
4473   (
4474     SELECTED_LINE_ORIGINATION_CODE = 'BLANKET' AND
4475     SELECTED_ITEM_ID IS NOT NULL AND
4476     NOT EXISTS (SELECT  'X'
4477                 FROM
4478                 MTL_SYSTEM_ITEMS MSI,
4479                   FINANCIALS_SYSTEM_PARAMS_ALL FSP
4480                 WHERE
4481                 MSI.INVENTORY_ITEM_ID = SELECTED_ITEM_ID AND
4482                 MSI.PURCHASING_ENABLED_FLAG = 'Y' AND
4483                 MSI.ORGANIZATION_ID = FSP.INVENTORY_ORGANIZATION_ID AND
4484                 NVL(FSP.ORG_ID, -9999) = NVL(SELECTED_ORG_ID, -9999))
4485   )
4486   THEN INTO PON_INTERFACE_ERRORS
4487   (
4488     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4489     LINE_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, CREATED_BY, CREATION_DATE,
4490     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4491   )
4492   VALUES
4493   (
4494     g_interface_type, --INTERFACE_TYPE
4495     'PON_AUC_ITEM_NOT_PURCHASE_REF', -- ERROR_MESSAGE_NAME
4496     p_request_id, -- REQUEST_ID
4497     p_batch_id, --BATCH_ID
4498     g_auction_item_type, -- ENTITY_TYPE
4499     p_auction_header_id, -- AUCTION_HEADER_ID
4500     LINE_NUMBER, -- LINE_NUMBER
4501     p_expiration_date, -- EXPIRATION_DATE
4502     'NUM', -- TOKEN1_NAME
4503     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4504     p_user_id, -- CREATED_BY
4505     sysdate, -- CREATION_DATE
4506     p_user_id, -- LAST_UPDATED_BY
4507     sysdate, -- LAST_UPDATE_DATE
4508     p_login_id -- LAST_UPDATE_LOGIN
4509   )
4510 
4511   SELECT
4512     PAIP.JOB_ID SELECTED_JOB_ID,
4513     PAIP.PURCHASE_BASIS SELECTED_PURCHASE_BASIS,
4514     PAIP.LINE_ORIGINATION_CODE SELECTED_LINE_ORIGINATION_CODE,
4515     PAIP.LINE_TYPE_ID SELECTED_LINE_TYPE_ID,
4516     PAIP.ITEM_ID SELECTED_ITEM_ID,
4517     PAIP.ORG_ID SELECTED_ORG_ID,
4518     PAIP.ITEM_REVISION SELECTED_ITEM_REVISION,
4519     PAIP.DOCUMENT_DISP_LINE_NUMBER,
4520     PAIP.LINE_NUMBER
4521   FROM
4522     PON_AUCTION_ITEM_PRICES_ALL PAIP
4523   WHERE
4524     PAIP.AUCTION_HEADER_ID = p_auction_header_id;
4525 
4526   INSERT ALL
4527 
4528   -- VALIDATE SHIP TO ORG 1
4529 
4530   WHEN
4531   (
4532     SELECTED_SHIP_TO_ORG_ID IS NOT NULL AND
4533     SELECTED_ITEM_ID IS NOT NULL AND
4534     SELECTED_ITEM_REVISION IS NOT NULL AND
4535     SELECTED_SHIP_TO_ORG_ID NOT IN
4536       (SELECT  OOD.ORGANIZATION_ID
4537          FROM  ORG_ORGANIZATION_DEFINITIONS OOD,
4538                MTL_SYSTEM_ITEMS MSI,
4539                MTL_ITEM_REVISIONS MIR,
4540                FINANCIALS_SYSTEM_PARAMS_ALL FSP,
4541                PO_LINE_TYPES_B PLTB
4542         WHERE  OOD.SET_OF_BOOKS_ID = FSP.SET_OF_BOOKS_ID AND
4543                FSP.ORG_ID = SELECTED_ORG_ID AND
4544                PLTB.LINE_TYPE_ID = SELECTED_LINE_TYPE_ID AND
4545                SYSDATE < NVL(OOD.DISABLE_DATE,SYSDATE+1) AND
4546                OOD.ORGANIZATION_ID = MIR.ORGANIZATION_ID AND
4547                MSI.ORGANIZATION_ID = OOD.ORGANIZATION_ID AND
4548                MSI.PURCHASING_ENABLED_FLAG = 'Y' AND
4549                MIR.INVENTORY_ITEM_ID = SELECTED_ITEM_ID AND
4550                MIR.REVISION = SELECTED_ITEM_REVISION AND
4551                MSI.INVENTORY_ITEM_ID = MIR.INVENTORY_ITEM_ID AND
4552                ((PLTB.OUTSIDE_OPERATION_FLAG = 'Y' AND
4553                  MSI.OUTSIDE_OPERATION_FLAG = 'Y') OR PLTB.OUTSIDE_OPERATION_FLAG = 'N'))
4554   )
4555   THEN INTO PON_INTERFACE_ERRORS
4556   (
4557     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4558     LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
4559     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE,
4560     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4561   )
4562   VALUES
4563   (
4564     g_interface_type, --INTERFACE_TYPE
4565     'PON_AUC_DATA_INVALID_SHIPO_REF', -- ERROR_MESSAGE_NAME
4566     p_request_id, -- REQUEST_ID
4567     p_batch_id, --BATCH_ID
4568     g_auction_pbs_type, -- ENTITY_TYPE
4569     p_auction_header_id, -- AUCTION_HEADER_ID
4570     LINE_NUMBER, -- LINE_NUMBER
4571     SHIPMENT_NUMBER, -- SHIPMENT_NUMBER
4572     p_expiration_date, -- EXPIRATION_DATE
4573     'ITEMNUM', -- TOKEN1_NAME
4574     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4575     'SHIPNUM', -- TOKEN2_NAME
4576     SHIPMENT_NUMBER, -- TOKEN2_VALUE
4577     p_user_id, -- CREATED_BY
4578     sysdate, -- CREATION_DATE
4579     p_user_id, -- LAST_UPDATED_BY
4580     sysdate, -- LAST_UPDATE_DATE
4581     p_login_id -- LAST_UPDATE_LOGIN
4582   )
4583 
4584   -- VALIDATE SHIP TO LOC
4585 
4586   WHEN
4587   (
4588     SELECTED_SHIP_TO_LOCATION_ID IS NOT NULL AND
4589     SELECTED_SHIP_TO_LOCATION_ID NOT IN
4590       (SELECT  LOC.LOCATION_ID
4591          FROM  HR_LOCATIONS_ALL LOC,
4592                HR_ALL_ORGANIZATION_UNITS HAOU
4593         WHERE  HAOU.ORGANIZATION_ID = SELECTED_ORG_ID AND
4594                NVL (LOC.BUSINESS_GROUP_ID, NVL(HAOU.BUSINESS_GROUP_ID, -99)) = NVL (HAOU.BUSINESS_GROUP_ID, -99) AND
4595           LOC.SHIP_TO_SITE_FLAG = 'Y' AND
4596           (SELECTED_SHIP_TO_ORG_ID IS NULL OR
4597            NVL(LOC.INVENTORY_ORGANIZATION_ID, NVL(SELECTED_SHIP_TO_ORG_ID,-1)) = NVL(SELECTED_SHIP_TO_ORG_ID,-1)) AND SYSDATE < NVL(LOC.INACTIVE_DATE, SYSDATE + 1))
4598   )
4599   THEN INTO PON_INTERFACE_ERRORS
4600   (
4601     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4602     LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE, TOKEN2_NAME,
4603     TOKEN2_VALUE, CREATED_BY, CREATION_DATE,
4604     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4605   )
4606   VALUES
4607   (
4608     g_interface_type, --INTERFACE_TYPE
4609     'PON_AUC_DATA_INVALID_SHIPL_REF', -- ERROR_MESSAGE_NAME
4610     p_request_id, -- REQUEST_ID
4611     p_batch_id, --BATCH_ID
4612     g_auction_pbs_type, -- ENTITY_TYPE
4613     p_auction_header_id, -- AUCTION_HEADER_ID
4614     LINE_NUMBER, -- LINE_NUMBER
4615     SHIPMENT_NUMBER, -- SHIPMENT_NUMBER
4616     p_expiration_date, -- EXPIRATION_DATE
4617     'ITEMNUM', -- TOKEN1_NAME
4618     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4619     'SHIPNUM', -- TOKEN2_NAME
4620     SHIPMENT_NUMBER, -- TOKEN2_VALUE
4621     p_user_id, -- CREATED_BY
4622     sysdate, -- CREATION_DATE
4623     p_user_id, -- LAST_UPDATED_BY
4624     sysdate, -- LAST_UPDATE_DATE
4625     p_login_id -- LAST_UPDATE_LOGIN
4626   )
4627 
4628   SELECT
4629     PAIP.LINE_NUMBER,
4630     PAIP.DOCUMENT_DISP_LINE_NUMBER,
4631     PSA.SHIPMENT_NUMBER,
4632     PSA.SHIP_TO_LOCATION_ID SELECTED_SHIP_TO_LOCATION_ID,
4633     PSA.SHIP_TO_ORGANIZATION_ID SELECTED_SHIP_TO_ORG_ID,
4634     PAIP.ORG_ID SELECTED_ORG_ID,
4635     PAIP.ITEM_ID SELECTED_ITEM_ID,
4636     PAIP.ITEM_REVISION SELECTED_ITEM_REVISION,
4637     PAIP.LINE_TYPE_ID SELECTED_LINE_TYPE_ID
4638   FROM
4639     PON_AUCTION_SHIPMENTS_ALL PSA,
4640     PON_AUCTION_ITEM_PRICES_ALL PAIP
4641   WHERE
4642     PSA.AUCTION_HEADER_ID = P_AUCTION_HEADER_ID AND
4643     PAIP.AUCTION_HEADER_ID = P_AUCTION_HEADER_ID AND
4644     PSA.LINE_NUMBER = PAIP.LINE_NUMBER;
4645 
4646   INSERT ALL
4647 
4648   -- VALIDATE SHIP TO ORG 2
4649 
4650   WHEN
4651   (
4652     SELECTED_SHIP_TO_ORG_ID IS NOT NULL AND
4653     SELECTED_ITEM_ID IS NOT NULL AND
4654     SELECTED_ITEM_REVISION IS NULL AND
4655     SELECTED_SHIP_TO_ORG_ID NOT IN
4656       (SELECT  OOD.ORGANIZATION_ID
4657          FROM  ORG_ORGANIZATION_DEFINITIONS OOD,
4658                MTL_SYSTEM_ITEMS_KFV MSI,
4659                FINANCIALS_SYSTEM_PARAMS_ALL FSP,
4660                PO_LINE_TYPES_B PLTB
4661         WHERE  OOD.SET_OF_BOOKS_ID = FSP.SET_OF_BOOKS_ID AND
4662                FSP.ORG_ID = SELECTED_ORG_ID AND
4663                PLTB.LINE_TYPE_ID = SELECTED_LINE_TYPE_ID AND
4664                SYSDATE < NVL(OOD.DISABLE_DATE,SYSDATE+1) AND
4665                OOD.ORGANIZATION_ID = MSI.ORGANIZATION_ID AND
4666                MSI.INVENTORY_ITEM_ID = SELECTED_ITEM_ID AND
4667                MSI.PURCHASING_ENABLED_FLAG = 'Y' AND
4668                NVL(MSI.OUTSIDE_OPERATION_FLAG, 'N') =
4669   NVL(PLTB.OUTSIDE_OPERATION_FLAG, 'N'))
4670   )
4671   THEN INTO PON_INTERFACE_ERRORS
4672   (
4673     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4674     LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
4675     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE,
4676     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4677   )
4678   VALUES
4679   (
4680     g_interface_type, --INTERFACE_TYPE
4681     'PON_AUC_DATA_INVALID_SHIPO_REF', -- ERROR_MESSAGE_NAME
4682     p_request_id, -- REQUEST_ID
4683     p_batch_id, --BATCH_ID
4684     g_auction_pbs_type, -- ENTITY_TYPE
4685     p_auction_header_id, -- AUCTION_HEADER_ID
4686     LINE_NUMBER, -- LINE_NUMBER
4687     SHIPMENT_NUMBER, -- SHIPMENT_NUMBER
4688     p_expiration_date, -- EXPIRATION_DATE
4689     'ITEMNUM', -- TOKEN1_NAME
4690     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4691     'SHIPNUM', -- TOKEN2_NAME
4692     SHIPMENT_NUMBER, -- TOKEN2_VALUE
4693     p_user_id, -- CREATED_BY
4694     sysdate, -- CREATION_DATE
4695     p_user_id, -- LAST_UPDATED_BY
4696     sysdate, -- LAST_UPDATE_DATE
4697     p_login_id -- LAST_UPDATE_LOGIN
4698   )
4699 
4700   -- VALIDATE SHIP TO ORG 3
4701 
4702   WHEN
4703   (
4704     SELECTED_SHIP_TO_ORG_ID IS NOT NULL AND
4705     SELECTED_ITEM_ID IS NULL AND
4706     SELECTED_SHIP_TO_ORG_ID NOT IN
4707       (SELECT  OOD.ORGANIZATION_ID
4708          FROM  ORG_ORGANIZATION_DEFINITIONS OOD,
4709                FINANCIALS_SYSTEM_PARAMS_ALL FSP
4710         WHERE  OOD.SET_OF_BOOKS_ID = FSP.SET_OF_BOOKS_ID AND
4711                FSP.ORG_ID = SELECTED_ORG_ID AND
4712                SYSDATE < NVL(OOD.DISABLE_DATE,SYSDATE+1) )
4713   )
4714   THEN INTO PON_INTERFACE_ERRORS
4715   (
4716     INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE, AUCTION_HEADER_ID,
4717     LINE_NUMBER, SHIPMENT_NUMBER, EXPIRATION_DATE, TOKEN1_NAME, TOKEN1_VALUE,
4718     TOKEN2_NAME, TOKEN2_VALUE, CREATED_BY, CREATION_DATE,
4719     LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4720   )
4721   VALUES
4722   (
4723     g_interface_type, --INTERFACE_TYPE
4724     'PON_AUC_DATA_INVALID_SHIPO_REF', -- ERROR_MESSAGE_NAME
4725     p_request_id, -- REQUEST_ID
4726     p_batch_id, --BATCH_ID
4727     g_auction_pbs_type, -- ENTITY_TYPE
4728     p_auction_header_id, -- AUCTION_HEADER_ID
4729     LINE_NUMBER, -- LINE_NUMBER
4730     SHIPMENT_NUMBER, -- SHIPMENT_NUMBER
4731     p_expiration_date, -- EXPIRATION_DATE
4732     'ITEMNUM', -- TOKEN1_NAME
4733     DOCUMENT_DISP_LINE_NUMBER, -- TOKEN1_VALUE
4734     'SHIPNUM', -- TOKEN2_NAME
4735     SHIPMENT_NUMBER, -- TOKEN2_VALUE
4736     p_user_id, -- CREATED_BY
4737     sysdate, -- CREATION_DATE
4738     p_user_id, -- LAST_UPDATED_BY
4739     sysdate, -- LAST_UPDATE_DATE
4740     p_login_id -- LAST_UPDATE_LOGIN
4741   )
4742 
4743   SELECT
4744     PAIP.LINE_NUMBER,
4745     PAIP.DOCUMENT_DISP_LINE_NUMBER,
4746     PSA.SHIPMENT_NUMBER,
4747     PSA.SHIP_TO_ORGANIZATION_ID SELECTED_SHIP_TO_ORG_ID,
4748     PAIP.ORG_ID SELECTED_ORG_ID,
4749     PAIP.ITEM_ID SELECTED_ITEM_ID,
4750     PAIP.ITEM_REVISION SELECTED_ITEM_REVISION,
4751     PAIP.LINE_TYPE_ID SELECTED_LINE_TYPE_ID
4752   FROM
4753     PON_AUCTION_SHIPMENTS_ALL PSA,
4754     PON_AUCTION_ITEM_PRICES_ALL PAIP
4755   WHERE
4756     PSA.AUCTION_HEADER_ID = P_AUCTION_HEADER_ID AND
4757     PAIP.AUCTION_HEADER_ID = P_AUCTION_HEADER_ID AND
4758     PSA.LINE_NUMBER = PAIP.LINE_NUMBER;
4759 
4760   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4761     FND_LOG.string(log_level => FND_LOG.level_procedure,
4762       module  =>  g_module_prefix || 'VAL_LINE_REF_DATA',
4763       message  => 'Leaving Procedure');
4764   END IF; --}
4765 
4766 END VAL_LINE_REF_DATA;
4767 
4768 PROCEDURE VAL_OUTSIDE_FLAG_EXISTS (
4769   p_auction_header_id IN NUMBER,
4770   p_is_global_agreement IN BOOLEAN,
4771   p_request_id IN NUMBER,
4772   p_expiration_date IN DATE,
4773   p_user_id IN NUMBER,
4774   p_login_id IN NUMBER,
4775   p_batch_id IN NUMBER
4776 ) IS
4777 
4778 l_outside_flag NUMBER;
4779 BEGIN
4780 
4781   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4782     FND_LOG.string(log_level => FND_LOG.level_procedure,
4783       module  =>  g_module_prefix || 'VAL_OUTSIDE_FLAG_EXISTS',
4784       message  => 'Entering Procedure p_auction_header_id = ' || p_auction_header_id);
4785   END IF; --}
4786 
4787   --VALIDATION FOR OUTSIDE FLAG ONLY
4788   --IN CASE OF GLOBAL AGREEMENTS
4789 
4790   --ONLY ONE ERROR WILL BE SHOWN SO ROWNUM = 1
4791   IF (p_is_global_agreement) THEN
4792 
4793     IF (FND_LOG.level_statement>= FND_LOG.g_current_runtime_level) THEN --{
4794       FND_LOG.string(log_level => FND_LOG.level_statement,
4795         module  =>  g_module_prefix || 'VAL_OUTSIDE_FLAG_EXISTS',
4796         message  => 'This is a global agreement so validation for outside ops');
4797     END IF; --}
4798 
4799     INSERT INTO PON_INTERFACE_ERRORS
4800     (
4801       INTERFACE_TYPE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID, ENTITY_TYPE,
4802       AUCTION_HEADER_ID, EXPIRATION_DATE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY,
4803       LAST_UPDATE_DATE, LAST_UPDATE_LOGIN
4804     )
4805     SELECT
4806       g_interface_type, -- INTERFACE_TYPE
4807       'PON_AUC_GLOBAL_OP_LINE', -- ERROR_MESSAGE_NAME
4808       p_request_id, -- REQUEST_ID
4809       p_batch_id, -- BATCH_ID
4810       g_auction_item_type, -- ENTITY_TYPE
4811       p_auction_header_id, -- AUCTION_HEADER_ID
4812       p_expiration_date, -- EXPIRATION_DATE
4813       p_user_id, -- CREATED_BY
4814       sysdate, -- CREATION_DATE
4815       p_user_id, -- LAST_UPDATED_BY
4816       sysdate, -- LAST_UPDATE_DATE
4817       p_login_id -- LAST_UPDATE_LOGIN
4818     FROM
4819       PO_LINE_TYPES_B PLTB,
4820       PON_AUCTION_ITEM_PRICES_ALL PAIP
4821     WHERE
4822       PAIP.AUCTION_HEADER_ID=p_auction_header_id AND
4823       PLTB.LINE_TYPE_ID= PAIP.LINE_TYPE_ID AND
4824       PLTB.OUTSIDE_OPERATION_FLAG='Y' AND
4825       ROWNUM=1;
4826   END IF;
4827 
4828   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
4829     FND_LOG.string(log_level => FND_LOG.level_procedure,
4830       module  =>  g_module_prefix || 'VAL_OUTSIDE_FLAG_EXISTS',
4831       message  => 'Leaving Procedure');
4832   END IF; --}
4833 END VAL_OUTSIDE_FLAG_EXISTS;
4834 
4835 PROCEDURE validate_complexwork_lines(
4836   p_auction_header_id     IN NUMBER,
4837   p_request_id            IN NUMBER,
4838   p_expiration_date       IN DATE,
4839   p_user_id               IN NUMBER,
4840   p_login_id              IN NUMBER,
4841   p_batch_id              IN NUMBER,
4842   p_fnd_currency_precision IN NUMBER
4843                         )
4844 IS
4845 l_contract_type              PON_AUCTION_HEADERS_ALL.contract_type%TYPE;
4846 l_progress_payment_type      PON_AUCTION_HEADERS_ALL.progress_payment_type%TYPE;
4847 l_recoupment_negotiable_flag PON_AUCTION_HEADERS_ALL.recoupment_negotiable_flag%TYPE;
4848 l_advance_negotiable_flag    PON_AUCTION_HEADERS_ALL.advance_negotiable_flag%TYPE;
4849 
4850 CURSOR l_proj_cursor IS
4851   SELECT line_number, document_disp_line_number,
4852          project_id, project_task_id, project_expenditure_type,
4853 		 project_exp_organization_id, project_expenditure_item_date
4854   FROM PON_AUCTION_ITEM_PRICES_ALL
4855   WHERE auction_header_id=p_auction_header_id
4856   AND project_id IS NOT NULL
4857   AND project_task_id IS NOT NULL
4858   AND project_expenditure_type IS NOT NULL
4859   AND project_exp_organization_id IS NOT NULL
4860   AND project_expenditure_item_date IS NOT NULL;
4861 
4862 BEGIN
4863 
4864 SELECT pah.contract_type,
4865        pah.progress_payment_type,
4866 	   pah.recoupment_negotiable_flag,
4867 	   pah.advance_negotiable_flag
4868 INTO   l_contract_type,
4869        l_progress_payment_type,
4870        l_recoupment_negotiable_flag,
4871        l_advance_negotiable_flag
4872 FROM  pon_auction_headers_all pah
4873 WHERE auction_header_id = p_auction_header_id;
4874 
4875 IF l_progress_payment_type <> 'NONE' AND l_contract_type = 'CONTRACT' THEN
4876   INSERT ALL
4877   WHEN NOT ((order_type_lookup_code = 'FIXED PRICE' AND purchase_basis = 'SERVICES') OR
4878    (order_type_lookup_code = 'QUANTITY' AND purchase_basis = 'GOODS'))
4879    OR po_outside_operation_flag = 'Y' THEN
4880    INTO pon_interface_errors
4881    (
4882     interface_type,               error_message_name,                                         batch_id,               -- 1
4883     entity_type,                  auction_header_id,                                          line_number,            -- 2
4884     token1_name,                  token1_value,                                               expiration_date,        -- 3
4885     created_by,                   creation_date,                                              last_updated_by,        -- 4
4886     last_update_date,             last_update_login,                                           request_id              -- 5
4887    )
4888   VALUES
4889    (
4890     g_interface_type,             'PON_LINE_TYPE_INVALID_L',                                  p_batch_id,                      -- 2
4891     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
4892     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,             -- 4
4893     p_user_id,                    SYSDATE,                                                    p_user_id,                      -- 5
4894     SYSDATE,                      p_login_id,                                                 p_request_id                    -- 6
4895    )
4896   SELECT
4897        paip.AUCTION_HEADER_ID,
4898        paip.DOCUMENT_DISP_LINE_NUMBER,
4899        paip.PURCHASE_BASIS,
4900        paip.ORDER_TYPE_LOOKUP_CODE,
4901        paip.line_number s_line_number,
4902        plt.outside_operation_flag po_outside_operation_flag
4903   FROM PON_AUCTION_ITEM_PRICES_ALL paip,
4904        PO_LINE_TYPES plt
4905   WHERE paip.auction_header_id = p_auction_header_id
4906   AND   paip.line_type_id = plt.line_type_id (+)
4907   AND   paip.group_type NOT IN ('GROUP','LOT_LINE');
4908 
4909 ELSIF l_contract_type = 'STANDARD' THEN
4910 
4911   INSERT ALL
4912   WHEN retainage_rate_percent IS NOT NULL AND (retainage_rate_percent < 0 OR retainage_rate_percent > 100) THEN
4913    INTO pon_interface_errors
4914    (
4915     interface_type,               error_message_name,                                         batch_id,               -- 2
4916     entity_type,            auction_header_id,                                          line_number,            -- 3
4917     token1_name,                  token1_value,                                               expiration_date,        -- 4
4918     created_by,                   creation_date,                                              last_updated_by,        -- 5
4919     last_update_date,             last_update_login,                                           request_id              -- 6
4920    )
4921   VALUES
4922    (
4923     g_interface_type,             'PON_RTNG_RATE_WRONG_L',                                      p_batch_id,                      -- 2
4924     g_auction_item_type,            auction_header_id,                                           s_line_number,     -- 3
4925     'LINENUM',                    document_disp_line_number,                                    p_expiration_date,             -- 4
4926     p_user_id,                     SYSDATE,                                                     p_user_id,                      -- 5
4927     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
4928    )
4929 
4930   WHEN max_retainage_amount IS NOT NULL AND max_retainage_amount < 0 THEN
4931    INTO pon_interface_errors
4932    (
4933     interface_type,               error_message_name,                                         batch_id,               -- 2
4934     entity_type,            auction_header_id,                                          line_number,            -- 3
4935     token1_name,                  token1_value,                                               expiration_date,        -- 4
4936     created_by,                   creation_date,                                              last_updated_by,        -- 5
4937     last_update_date,             last_update_login,                                           request_id              -- 6
4938     )
4939   VALUES
4940    (
4941     g_interface_type,             'PON_MAX_RTNG_WRONG_L',                                       p_batch_id,                      -- 2
4942     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
4943     'LINENUM',                    document_disp_line_number,                                    p_expiration_date,             -- 4
4944     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
4945     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
4946    )
4947 
4948   WHEN advance_amount IS NOT NULL AND advance_amount < 0 THEN
4949    INTO pon_interface_errors
4950    (
4951     interface_type,               error_message_name,                                         batch_id,               -- 2
4952     entity_type,            auction_header_id,                                          line_number,            -- 3
4953     token1_name,                  token1_value,                                               expiration_date,        -- 4
4954     created_by,                   creation_date,                                              last_updated_by,        -- 5
4955     last_update_date,             last_update_login,                                           request_id              -- 6
4956    )
4957   VALUES
4958    (
4959     g_interface_type,             'PON_ADV_AMT_WRONG_L',                                        p_batch_id,                      -- 2
4960     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
4961     'LINENUM',                    document_disp_line_number,                                    p_expiration_date,             -- 4
4962     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
4963     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
4964    )
4965 
4966   WHEN progress_pymt_rate_percent IS NOT NULL AND (progress_pymt_rate_percent < 0 OR progress_pymt_rate_percent > 100) then
4967    INTO pon_interface_errors
4968    (
4969     interface_type,               error_message_name,                                         batch_id,               -- 2
4970     entity_type,            auction_header_id,                                          line_number,            -- 3
4971     token1_name,                  token1_value,                                               expiration_date,        -- 4
4972     created_by,                   creation_date,                                              last_updated_by,        -- 5
4973     last_update_date,             last_update_login,                                           request_id              -- 6
4974    )
4975   VALUES
4976    (
4977     g_interface_type,             'PON_PROG_PYMT_RATE_WRONG_L',                                 p_batch_id,                      -- 2
4978     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
4979     'LINENUM',                    document_disp_line_number,                                    p_expiration_date,             -- 4
4980     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
4981     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
4982    )
4983   WHEN recoupment_rate_percent IS NOT NULL AND (recoupment_rate_percent < 0 OR recoupment_rate_percent > 100) THEN
4984    INTO pon_interface_errors
4985    (
4986     interface_type,             error_message_name,                                         batch_id,               -- 2
4987     entity_type,            auction_header_id,                                          line_number,            -- 3
4988     token1_name,                  token1_value,                                               expiration_date,        -- 4
4989     created_by,                   creation_date,                                              last_updated_by,        -- 5
4990     last_update_date,             last_update_login,                                           request_id              -- 6
4991    )
4992   VALUES
4993    (
4994     g_interface_type,               'PON_RECOUP_RATE_WRONG_L',                                    p_batch_id,                      -- 2
4995     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
4996     'LINENUM',                    document_disp_line_number,                                    p_expiration_date,             -- 4
4997     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
4998     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
4999    )
5000 
5001   WHEN progress_pymt_rate_percent IS NOT NULL AND
5002        PON_BID_VALIDATIONS_PKG.validate_currency_precision(progress_pymt_rate_percent, 2) = 'F' THEN
5003    INTO pon_interface_errors
5004    (
5005     interface_type,             error_message_name,                                         batch_id,               -- 2
5006     entity_type,            auction_header_id,                                          line_number,            -- 3
5007     token1_name,                  token1_value,                                               expiration_date,        -- 4
5008     created_by,                   creation_date,                                              last_updated_by,        -- 5
5009     last_update_date,             last_update_login,                                           request_id,            -- 6
5010     token2_name,                  token2_value
5011    )
5012   VALUES
5013    (
5014     g_interface_type,               'PON_INVALID_RATE_PRECISION_L',                                    p_batch_id,                      -- 2
5015     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5016     'ATTRIBUTENAME',              fnd_message.get_string('PON','PON_PROGRESS_PYMT_RATE'),     p_expiration_date,                    -- 4
5017     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5018     SYSDATE,                      p_login_id,                                                   p_request_id,                  -- 6
5019     'LINENUM',                    document_disp_line_number
5020    )
5021 
5022   WHEN recoupment_rate_percent IS NOT NULL AND
5023        PON_BID_VALIDATIONS_PKG.validate_currency_precision(recoupment_rate_percent, 2) = 'F' THEN
5024    INTO pon_interface_errors
5025    (
5026     interface_type,             error_message_name,                                         batch_id,               -- 2
5027     entity_type,            auction_header_id,                                          line_number,            -- 3
5028     token1_name,                  token1_value,                                               expiration_date,        -- 4
5029     created_by,                   creation_date,                                              last_updated_by,        -- 5
5030     last_update_date,             last_update_login,                                           request_id,            -- 6
5031     token2_name,                  token2_value
5032    )
5033   VALUES
5034    (
5035     g_interface_type,               'PON_INVALID_RATE_PRECISION_L',                                    p_batch_id,                      -- 2
5036     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5037     'ATTRIBUTENAME',              fnd_message.get_string('PON','PON_RECOUPMENT_RATE'),     p_expiration_date,                    -- 4
5038     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5039     SYSDATE,                      p_login_id,                                                   p_request_id,                  -- 6
5040     'LINENUM',                    document_disp_line_number
5041    )
5042 
5043   WHEN retainage_rate_percent IS NOT NULL AND
5044        PON_BID_VALIDATIONS_PKG.validate_currency_precision(retainage_rate_percent, 2) = 'F' THEN
5045    INTO pon_interface_errors
5046    (
5047     interface_type,             error_message_name,                                         batch_id,               -- 2
5048     entity_type,            auction_header_id,                                          line_number,            -- 3
5049     token1_name,                  token1_value,                                               expiration_date,        -- 4
5050     created_by,                   creation_date,                                              last_updated_by,        -- 5
5051     last_update_date,             last_update_login,                                           request_id,            -- 6
5052     token2_name,                  token2_value
5053    )
5054   VALUES
5055    (
5056     g_interface_type,               'PON_INVALID_RATE_PRECISION_L',                                    p_batch_id,                      -- 2
5057     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5058     'ATTRIBUTENAME',              fnd_message.get_string('PON','PON_RETAINAGE_RATE'),     p_expiration_date,                    -- 4
5059     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5060     SYSDATE,                      p_login_id,                                                   p_request_id,                  -- 6
5061     'LINENUM',                    document_disp_line_number
5062    )
5063 
5064   WHEN advance_amount IS NOT NULL AND
5065        PON_BID_VALIDATIONS_PKG.validate_currency_precision(advance_amount, p_fnd_currency_precision) = 'F' THEN
5066    INTO pon_interface_errors
5067    (
5068     interface_type,             error_message_name,                                         batch_id,               -- 2
5069     entity_type,            auction_header_id,                                          line_number,            -- 3
5070     token1_name,                  token1_value,                                               expiration_date,        -- 4
5071     created_by,                   creation_date,                                              last_updated_by,        -- 5
5072     last_update_date,             last_update_login,                                           request_id,            -- 6
5073     token2_name,                  token2_value
5074    )
5075   VALUES
5076    (
5077     g_interface_type,               'PON_LINEAMT_INVALID_PRECISION',                                    p_batch_id,                      -- 2
5078     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5079     'ATTRIBUTENAME',              fnd_message.get_string('PON','PON_ADVANCE_AMOUNT_FLAG'),     p_expiration_date,                    -- 4
5080     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5081     SYSDATE,                      p_login_id,                                                   p_request_id,                  -- 6
5082     'LINENUM',                    document_disp_line_number
5083    )
5084 
5085   WHEN max_retainage_amount IS NOT NULL AND
5086        PON_BID_VALIDATIONS_PKG.validate_currency_precision(max_retainage_amount, p_fnd_currency_precision) = 'F' THEN
5087    INTO pon_interface_errors
5088    (
5089     interface_type,             error_message_name,                                         batch_id,               -- 2
5090     entity_type,            auction_header_id,                                          line_number,            -- 3
5091     token1_name,                  token1_value,                                               expiration_date,        -- 4
5092     created_by,                   creation_date,                                              last_updated_by,        -- 5
5093     last_update_date,             last_update_login,                                           request_id,            -- 6
5094     token2_name,                  token2_value
5095    )
5096   VALUES
5097    (
5098     g_interface_type,               'PON_LINEAMT_INVALID_PRECISION',                                    p_batch_id,                      -- 2
5099     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5100     'ATTRIBUTENAME',              fnd_message.get_string('PON','PON_MAX_RETAINAGE_AMOUNT'),     p_expiration_date,                    -- 4
5101     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5102     SYSDATE,                      p_login_id,                                                   p_request_id,                  -- 6
5103     'LINENUM',                    document_disp_line_number
5104    )
5105 
5106   WHEN l_progress_payment_type = 'FINANCE' AND progress_pymt_rate_percent IS NULL THEN
5107    INTO pon_interface_errors
5108    (
5109     interface_type,               error_message_name,                                         batch_id,               -- 2
5110     entity_type,            auction_header_id,                                          line_number,            -- 3
5111     token1_name,                  token1_value,                                               expiration_date,        -- 4
5112     created_by,                   creation_date,                                              last_updated_by,        -- 5
5113     last_update_date,             last_update_login,                                           request_id              -- 6
5114    )
5115   VALUES
5116    (
5117     g_interface_type,             'PON_PROG_PYMT_NEEDED_L',                                 p_batch_id,                      -- 2
5118     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5119     'LINENUM',                 document_disp_line_number,                                p_expiration_date,                    -- 4
5120     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5121     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5122    )
5123 
5124   WHEN (l_progress_payment_type <> 'NONE' AND
5125       (po_outside_operation_flag = 'Y' OR
5126         NOT ((order_type_lookup_code = 'FIXED PRICE' AND purchase_basis = 'SERVICES') OR
5127              (order_type_lookup_code = 'QUANTITY' AND purchase_basis = 'GOODS'))
5128       )) THEN
5129    INTO pon_interface_errors
5130    (
5131     interface_type,               error_message_name,                                         batch_id,               -- 2
5132     entity_type,            auction_header_id,                                          line_number,            -- 3
5133     token1_name,                  token1_value,                                               expiration_date,        -- 4
5134     created_by,                   creation_date,                                              last_updated_by,        -- 5
5135     last_update_date,             last_update_login,                                           request_id              -- 6
5136    )
5137   VALUES
5138    (
5139     g_interface_type,             'PON_LINE_TYPE_INVALID_L',                                    p_batch_id,                      -- 2
5140     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5141     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,             -- 4
5142     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5143     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5144    )
5145 
5146   WHEN progress_pymt_rate_percent IS NOT NULL AND
5147        recoupment_rate_percent IS NULL AND
5148        l_recoupment_negotiable_flag = 'N' THEN
5149    INTO pon_interface_errors
5150    (
5151     interface_type,               error_message_name,                                         batch_id,               -- 2
5152     entity_type,                  auction_header_id,                                          line_number,            -- 3
5153     token1_name,                  token1_value,                                               expiration_date,        -- 4
5154     created_by,                   creation_date,                                              last_updated_by,        -- 5
5155     last_update_date,             last_update_login,                                           request_id              -- 6
5156    )
5157   VALUES
5158    (
5159     g_interface_type,             'PON_RECUP_NEEDED_WITH_PPRATE_L',                             p_batch_id,                      -- 2
5160     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5161     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5162     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5163     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5164    )
5165 
5166   WHEN ((advance_amount IS NOT NULL or l_advance_negotiable_flag = 'Y') AND
5167         (recoupment_rate_percent IS NULL AND l_recoupment_negotiable_flag = 'N')) THEN
5168    INTO pon_interface_errors
5169    (
5170     interface_type,               error_message_name,                                         batch_id,               -- 2
5171     entity_type,                  auction_header_id,                                          line_number,            -- 3
5172     token1_name,                  token1_value,                                               expiration_date,        -- 4
5173     created_by,                   creation_date,                                              last_updated_by,        -- 5
5174     last_update_date,             last_update_login,                                           request_id              -- 6
5175    )
5176   VALUES
5177    (
5178     g_interface_type,             'PON_RECUP_NEEDED_WITH_ADVAMT_L',                             p_batch_id,                      -- 2
5179     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5180     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5181     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5182     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5183    )
5184 
5185   WHEN target_price IS NOT NULL AND advance_amount IS NOT NULL
5186      AND (advance_amount > nvl(s_quantity,1) * target_price) THEN
5187    INTO pon_interface_errors
5188    (
5189     interface_type,               error_message_name,                                         batch_id,               -- 2
5190     entity_type,                  auction_header_id,                                          line_number,            -- 3
5191     token1_name,                  token1_value,                                               expiration_date,        -- 4
5192     created_by,                   creation_date,                                              last_updated_by,        -- 5
5193     last_update_date,             last_update_login,                                           request_id              -- 6
5194    )
5195   VALUES
5196    (
5197     g_interface_type,             'PON_ADV_AMT_MORE_L',                             p_batch_id,                      -- 2
5198     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5199     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5200     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5201     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5202    )
5203 
5204   WHEN l_progress_payment_type = 'ACTUAL' AND recoupment_rate_percent IS NOT NULL
5205      AND target_price IS NOT NULL
5206      AND advance_amount IS NOT NULL
5207      AND (recoupment_rate_percent < (advance_amount * 100)/(nvl(s_quantity,1) * target_price)) THEN
5208    INTO pon_interface_errors
5209    (
5210     interface_type,               error_message_name,                                         batch_id,               -- 2
5211     entity_type,                  auction_header_id,                                          line_number,            -- 3
5212     token1_name,                  token1_value,                                               expiration_date,        -- 4
5213     created_by,                   creation_date,                                              last_updated_by,        -- 5
5214     last_update_date,             last_update_login,                                           request_id              -- 6
5215    )
5216   VALUES
5217    (
5218     g_interface_type,             'PON_RECOUP_LESS_THAN_ADV_L',                             p_batch_id,                      -- 2
5219     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5220     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5221     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5222     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5223    )
5224 
5225   WHEN l_progress_payment_type = 'FINANCE' AND recoupment_rate_percent IS NOT NULL
5226      AND target_price IS NOT NULL AND progress_pymt_rate_percent IS NOT NULL
5227      AND recoupment_rate_percent < (((((progress_pymt_rate_percent/100) * (SELECT nvl(sum(nvl(p_aps.target_price,0)*nvl(p_aps.quantity,nvl(s_quantity,1))),0)
5228 			                                                                   FROM PON_AUC_PAYMENTS_SHIPMENTS p_aps
5229 																			   WHERE p_aps.auction_header_id=p_auction_header_id
5230 																			   AND p_aps.line_number=s_line_number ))
5231 			                          + NVL(advance_amount,0)) * 100)/((nvl(s_quantity, 1) * target_price)))  THEN
5232    INTO pon_interface_errors
5233    (
5234     interface_type,               error_message_name,                                         batch_id,               -- 2
5235     entity_type,                  auction_header_id,                                          line_number,            -- 3
5236     token1_name,                  token1_value,                                               expiration_date,        -- 4
5237     created_by,                   creation_date,                                              last_updated_by,        -- 5
5238     last_update_date,             last_update_login,                                           request_id              -- 6
5239    )
5240   VALUES
5241    (
5242     g_interface_type,             'PON_RECOUP_LESS_THAN_PYMT_L',                             p_batch_id,                      -- 2
5243     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5244     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5245     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5246     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5247    )
5248 
5249   WHEN (pai_project_id IS NOT NULL OR pai_project_task_id IS NOT NULL OR pai_project_exp_org_id IS NOT NULL
5250         OR pai_project_exp_item_date IS NOT NULL OR pai_project_exp_type IS NOT NULL)
5251   AND (pai_project_id IS NULL OR pai_project_task_id IS NULL OR pai_project_exp_org_id IS NULL
5252         OR pai_project_exp_item_date IS NULL OR pai_project_exp_type IS NULL) THEN
5253    INTO pon_interface_errors
5254    (
5255     interface_type,               error_message_name,                                         batch_id,               -- 2
5256     entity_type,            auction_header_id,                                          line_number,            -- 3
5257     token1_name,                  token1_value,                                               expiration_date,        -- 4
5258     created_by,                   creation_date,                                              last_updated_by,        -- 5
5259     last_update_date,             last_update_login,                                           request_id              -- 6
5260    )
5261   VALUES
5262    (
5263     g_interface_type,             'PON_PROJ_INFO_INCOMPLETE_L',                                    p_batch_id,                      -- 2
5264     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5265     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5266     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5267     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5268    )
5269   SELECT
5270        paip.AUCTION_HEADER_ID,
5271        paip.LINE_NUMBER s_line_number,
5272        paip.DOCUMENT_DISP_LINE_NUMBER,
5273        paip.ADVANCE_AMOUNT,
5274        paip.RECOUPMENT_RATE_PERCENT,
5275        paip.PROGRESS_PYMT_RATE_PERCENT,
5276        paip.RETAINAGE_RATE_PERCENT,
5277        paip.MAX_RETAINAGE_AMOUNT,
5278        paip.TARGET_PRICE,
5279        paip.QUANTITY s_quantity,
5280        paip.PROJECT_ID pai_project_id,
5281        paip.PROJECT_TASK_ID pai_project_task_id,
5282        paip.PROJECT_AWARD_ID pai_project_award_id,
5283        paip.PROJECT_EXPENDITURE_TYPE pai_project_exp_type,
5284        paip.PROJECT_EXP_ORGANIZATION_ID pai_project_exp_org_id,
5285        paip.PROJECT_EXPENDITURE_ITEM_DATE pai_project_exp_item_date,
5286        paip.PURCHASE_BASIS,
5287        paip.ORDER_TYPE_LOOKUP_CODE,
5288        paip.LINE_ORIGINATION_CODE,
5289        paip.has_payments_flag,
5290 	   plt.outside_operation_flag po_outside_operation_flag
5291   FROM PON_AUCTION_ITEM_PRICES_ALL paip,
5292        PO_LINE_TYPES plt
5293   WHERE paip.auction_header_id = p_auction_header_id
5294   AND   paip.line_type_id = plt.line_type_id (+)
5295   AND   paip.group_type NOT IN ('GROUP','LOT_LINE');
5296 
5297 
5298 --bug 4933437- split the above sql into 3 because of shared mem high bug
5299 -- the query below will be execute only if work owner populated
5300 
5301 INSERT ALL
5302   WHEN work_approver_user_id IS NOT NULL
5303   AND NOT EXISTS (SELECT 1
5304                     FROM PER_WORKFORCE_CURRENT_X  peo,
5305                          FND_USER fu
5306                    WHERE fu.user_id = work_approver_user_id
5307                      AND fu.employee_id = peo.person_id
5308     			     AND SYSDATE >= nvl(fu.start_date, SYSDATE)
5309 				     AND SYSDATE <= nvl(fu.end_date, SYSDATE) ) THEN
5310    INTO pon_interface_errors
5311    (
5312     interface_type,               error_message_name,                                         batch_id,               -- 2
5313     entity_type,                  auction_header_id,                                          line_number,            -- 3
5314     token1_name,                  token1_value,                                               expiration_date,        -- 4
5315     created_by,                   creation_date,                                              last_updated_by,        -- 5
5316     last_update_date,             last_update_login,                                           request_id              -- 6
5317    )
5318   VALUES
5319    (
5320     g_interface_type,             'PON_LIN_OWNER_INVALID_L',                             p_batch_id,                      -- 2
5321     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5322     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5323     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5324     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5325    )
5326   SELECT
5327        paip.AUCTION_HEADER_ID,
5328        paip.LINE_NUMBER s_line_number,
5329        paip.DOCUMENT_DISP_LINE_NUMBER,
5330        paip.WORK_APPROVER_USER_ID
5331   FROM PON_AUCTION_ITEM_PRICES_ALL paip
5332   WHERE paip.auction_header_id = p_auction_header_id
5333   AND   paip.WORK_APPROVER_USER_ID IS NOT NULL;
5334 
5335 
5336 -- the queries below will be excuted only if all the project info has been supplied by user
5337 -- hence even if it takes more memory because of project views, this query will be rarely executed
5338  INSERT ALL
5339   WHEN pai_project_id IS NOT NULL
5340   AND NOT EXISTS(SELECT 1
5341                  FROM pa_projects_expend_v pro
5342                  WHERE pro.project_id = pai_project_id) THEN
5343    INTO pon_interface_errors
5344    (
5345     interface_type,               error_message_name,                                         batch_id,               -- 2
5346     entity_type,            auction_header_id,                                          line_number,            -- 3
5347     token1_name,                  token1_value,                                               expiration_date,        -- 4
5348     created_by,                   creation_date,                                              last_updated_by,        -- 5
5349     last_update_date,             last_update_login,                                           request_id              -- 6
5350    )
5351   VALUES
5352    (
5353     g_interface_type,             'PON_PROJ_NUM_INVALID_L',                                     p_batch_id,                      -- 2
5354     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5355     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5356     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5357     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5358    )
5359 
5360   WHEN pai_project_id IS NOT NULL AND pai_project_task_id IS NOT NULL
5361   AND NOT EXISTS(SELECT 1
5362                  FROM pa_tasks_expend_v tas
5363                  WHERE tas.project_id = pai_project_id
5364                  AND tas.task_id = pai_project_task_id) THEN
5365    INTO pon_interface_errors
5366    (
5367     interface_type,               error_message_name,                                         batch_id,               -- 2
5368     entity_type,            auction_header_id,                                          line_number,            -- 3
5369     token1_name,                  token1_value,                                               expiration_date,        -- 4
5370     created_by,                   creation_date,                                              last_updated_by,        -- 5
5371     last_update_date,             last_update_login,                                           request_id              -- 6
5372    )
5373   VALUES
5374    (
5375     g_interface_type,             'PON_PROJ_TASK_INVALID_L',                                    p_batch_id,                      -- 2
5376     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5377     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5378     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5379     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5380    )
5381 
5382   WHEN pai_project_id IS NOT NULL
5383   AND pai_project_task_id IS NOT NULL
5384   AND pai_project_award_id IS NOT NULL
5385   AND NOT EXISTS (SELECT 1
5386                     FROM GMS_AWARDS_BASIC_V award
5387                    WHERE award.project_id = pai_project_id
5388                      AND award.task_id = pai_project_task_id
5389                      AND award.award_id  = pai_project_award_id) THEN
5390    INTO pon_interface_errors
5391    (
5392     interface_type,               error_message_name,                                         batch_id,               -- 2
5393     entity_type,            auction_header_id,                                          line_number,            -- 3
5394     token1_name,                  token1_value,                                               expiration_date,        -- 4
5395     created_by,                   creation_date,                                              last_updated_by,        -- 5
5396     last_update_date,             last_update_login,                                           request_id              -- 6
5397    )
5398   VALUES
5399    (
5400     g_interface_type,             'PON_PROJ_AWARD_INVALID_L',                                   p_batch_id,                      -- 2
5401     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5402     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5403     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5404     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5405    )
5406 
5407   WHEN pai_project_exp_org_id IS NOT NULL
5408   AND NOT EXISTS (SELECT 1
5409                     FROM PA_ORGANIZATIONS_EXPEND_V porg
5410                    WHERE porg.organization_id = pai_project_exp_org_id) THEN
5411 
5412    INTO pon_interface_errors
5413    (
5414     interface_type,               error_message_name,                                         batch_id,               -- 2
5415     entity_type,            auction_header_id,                                          line_number,            -- 3
5416     token1_name,                  token1_value,                                               expiration_date,        -- 4
5417     created_by,                   creation_date,                                              last_updated_by,        -- 5
5418     last_update_date,             last_update_login,                                           request_id              -- 6
5419    )
5420   VALUES
5421    (
5422     g_interface_type,             'PON_PROJ_EXPORG_INVALID_L',                                  p_batch_id,                      -- 2
5423     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5424     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5425     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5426     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5427    )
5428 
5429 WHEN pai_project_exp_type IS NOT NULL
5430 AND NOT EXISTS (SELECT 1
5431                 FROM pa_expenditure_types_expend_v exptype
5432                 WHERE system_linkage_function = 'VI'
5433                 AND exptype.expenditure_type = pai_project_exp_type
5434                 AND  trunc(sysdate) BETWEEN nvl(exptype.expnd_typ_start_date_active, trunc(sysdate))
5435                                     AND  nvl(exptype.expnd_typ_end_date_Active, trunc(sysdate))
5436                 AND trunc(sysdate) BETWEEN nvl(exptype.sys_link_start_date_active, trunc(sysdate))
5437                                     AND  nvl(exptype.sys_link_end_date_Active, trunc(sysdate))) THEN
5438    INTO pon_interface_errors
5439    (
5440     interface_type,               error_message_name,                                         batch_id,               -- 2
5441     entity_type,            auction_header_id,                                          line_number,            -- 3
5442     token1_name,                  token1_value,                                               expiration_date,        -- 4
5443     created_by,                   creation_date,                                              last_updated_by,        -- 5
5444     last_update_date,             last_update_login,                                           request_id              -- 6
5445    )
5446   VALUES
5447    (
5448     g_interface_type,             'PON_PROJ_EXPTYPE_INVALID_L',                                  p_batch_id,                      -- 2
5449     g_auction_item_type,            auction_header_id,                                          s_line_number,     -- 3
5450     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5451     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5452     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5453    )
5454 
5455   WHEN pai_project_id IS NOT NULL
5456   AND pai_project_award_id IS NULL
5457   AND IS_PROJECT_SPONSORED(pai_project_id) = 'Y' THEN
5458    INTO pon_interface_errors
5459    (
5460     interface_type,               error_message_name,                                         batch_id,               -- 2
5461     entity_type,                  auction_header_id,                                          line_number,            -- 3
5462     token1_name,                  token1_value,                                               expiration_date,        -- 4
5463     created_by,                   creation_date,                                              last_updated_by,        -- 5
5464     last_update_date,             last_update_login,                                           request_id              -- 6
5465    )
5466   VALUES
5467    (
5468     g_interface_type,             'PON_PROJ_AWARD_NULL_L',                                     p_batch_id,                      -- 2
5469     g_auction_item_type,          auction_header_id,                                          s_line_number,     -- 3
5470     'LINENUM',                    document_disp_line_number,                                  p_expiration_date,                    -- 4
5471     p_user_id,                     SYSDATE,                                                    p_user_id,                      -- 5
5472     SYSDATE,                      p_login_id,                                                   p_request_id                     -- 6
5473    )
5474 
5475   SELECT
5476        paip.AUCTION_HEADER_ID,
5477        paip.LINE_NUMBER s_line_number,
5478        paip.DOCUMENT_DISP_LINE_NUMBER,
5479        paip.PROJECT_ID pai_project_id,
5480        paip.PROJECT_TASK_ID pai_project_task_id,
5481        paip.PROJECT_AWARD_ID pai_project_award_id,
5482        paip.PROJECT_EXPENDITURE_TYPE pai_project_exp_type,
5483        paip.PROJECT_EXP_ORGANIZATION_ID pai_project_exp_org_id,
5484        paip.PROJECT_EXPENDITURE_ITEM_DATE pai_project_exp_item_date
5485   FROM PON_AUCTION_ITEM_PRICES_ALL paip
5486   WHERE paip.auction_header_id = p_auction_header_id
5487   AND   paip.PROJECT_ID IS NOT NULL
5488   AND   paip.PROJECT_TASK_ID IS NOT NULL
5489   AND   paip.PROJECT_EXPENDITURE_TYPE IS NOT NULL
5490   AND   paip.PROJECT_EXP_ORGANIZATION_ID IS NOT NULL
5491   AND   paip.PROJECT_EXPENDITURE_ITEM_DATE IS NOT NULL;
5492 
5493 
5494   --Validate project fields with PATC
5495     FOR l_proj_record IN l_proj_cursor LOOP
5496         VALIDATE_PROJECTS_DETAILS (
5497             p_project_id                => l_proj_record.project_id,
5498             p_task_id                   => l_proj_record.project_task_id,
5499             p_expenditure_date          => l_proj_record.project_expenditure_item_date,
5500             p_expenditure_type          => l_proj_record.project_expenditure_type,
5501             p_expenditure_org           => l_proj_record.project_exp_organization_id,
5502             p_person_id                 => null,
5503             p_auction_header_id         => p_auction_header_id,
5504             p_line_number               => l_proj_record.line_number,
5505             p_document_disp_line_number => l_proj_record.document_disp_line_number,
5506             p_payment_id                => null,
5507             p_interface_line_id         => null,
5508             p_payment_display_number    => null,
5509             p_batch_id                  => p_batch_id,
5510             p_table_name                => null,
5511             p_interface_type            => g_interface_type,
5512             p_entity_type               => g_auction_item_type,
5513             p_called_from               => 'LINES');
5514     END LOOP;
5515 
5516    BEGIN
5517 
5518      INSERT INTO PON_INTERFACE_ERRORS
5519      (
5520       interface_type,
5521       error_message_name,
5522       batch_id,
5523       entity_type,
5524       auction_header_id,
5525       line_number,
5526       token1_name,
5527       token1_value,
5528       token2_name,
5529       token2_value,
5530       expiration_date,
5531       created_by,
5532       creation_date,
5533       last_updated_by,
5534       last_update_date,
5535       last_update_login,
5536       request_id
5537      )
5538       SELECT
5539         g_interface_type, --INTERFACE_TYPE
5540         'PON_PYMT_NUM_NOT_UNQ', -- ERROR_MESSAGE_NAME
5541         p_batch_id, --BATCH_ID
5542         g_auction_item_type, -- ENTITY_TYPE
5543         paps.auction_header_id, -- AUCTION_HEADER_ID
5544         paps.line_number, -- LINE_NUMBER
5545         'PAYITEMNUM', --Token1
5546         paps.payment_display_number, --token 1 value
5547         'LINENUM', --Token2
5548         pai.document_disp_line_number, --token 2 value
5549         p_expiration_date, -- EXPIRATION_DATE
5550         p_user_id, -- CREATED_BY
5551         sysdate, -- CREATION_DATE
5552         p_user_id, -- LAST_UPDATED_BY
5553         sysdate, -- LAST_UPDATE_DATE
5554         p_login_id, -- LAST_UPDATE_LOGIN
5555         p_request_id --REQUEST_ID
5556       FROM
5557         PON_AUC_PAYMENTS_SHIPMENTS paps, PON_AUCTION_ITEM_PRICES_ALL pai
5558       WHERE paps.auction_header_id=pai.auction_header_id
5559  	  AND paps.line_number = pai.line_number
5560 	  AND paps.auction_header_id = p_auction_header_id
5561 	  GROUP BY paps.auction_header_id, paps.line_number,
5562                paps.payment_display_number, pai.document_disp_line_number
5563 	  HAVING count(*) > 1;
5564 
5565   EXCEPTION
5566   WHEN OTHERS THEN
5567     IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.g_current_runtime_level) THEN
5568       FND_LOG.string (log_level => FND_LOG.level_exception,
5569         module  => g_module_prefix || 'VALIDATE_COMPLEXWORK_LINES',
5570         message => 'Exception occured in duplicate payitem check of validate_complexwork_lines'
5571             || ' Error Number :' || SQLCODE || ' Exception Message :' || SUBSTR(SQLERRM, 1, 200));
5572     END IF;
5573     Raise;
5574   END;
5575 
5576 END IF; -- End of if l_contract_type = 'STANDARD'
5577 END validate_complexwork_lines;
5578 
5579 PROCEDURE validate_payments (
5580   p_auction_header_id     IN NUMBER,
5581   p_request_id            IN NUMBER,
5582   p_expiration_date       IN DATE,
5583   p_user_id               IN NUMBER,
5584   p_login_id              IN NUMBER,
5585   p_batch_id              IN NUMBER,
5586   p_price_precision       IN NUMBER
5587 ) IS
5588 l_module CONSTANT VARCHAR2(32) := 'VALIDATE_PAYMENTS';
5589 l_progress              VARCHAR2(200);
5590 
5591 CURSOR l_proj_cursor IS
5592   SELECT paps.payment_display_number, paps.payment_id,
5593          paps.project_id, paps.project_task_id, paps.project_expenditure_type,
5594 		 paps.project_exp_organization_id, paps.project_expenditure_item_date,
5595 		 paip.line_number, paip.document_disp_line_number
5596   FROM   PON_AUC_PAYMENTS_SHIPMENTS paps,
5597          PON_AUCTION_ITEM_PRICES_ALL paip
5598   WHERE paps.auction_header_id=p_auction_header_id
5599   AND paps.project_id IS NOT NULL
5600   AND paps.project_task_id IS NOT NULL
5601   AND paps.project_expenditure_type IS NOT NULL
5602   AND paps.project_exp_organization_id IS NOT NULL
5603   AND paps.project_expenditure_item_date IS NOT NULL
5604   AND paip.auction_header_id = paps.auction_header_id
5605   AND paip.line_number = paps.line_number;
5606 
5607 BEGIN
5608 
5609 
5610 
5611   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
5612     FND_LOG.string(log_level => FND_LOG.level_procedure,
5613       module  =>  g_module_prefix || 'VALIDATE_PAYMENTS',
5614       message  => 'Entering PON_NEGOTIATION_PUBLISH_PVT.VALIDATE_PAYMENTS'
5615                   || ', p_auction_header_id = ' || p_auction_header_id
5616                   || ', p_request_id = ' || p_request_id
5617                   || ', p_expiration_date = ' || p_expiration_date
5618                   || ', p_user_id = ' || p_user_id
5619                   || ', p_login_id = ' || p_login_id
5620                   || ', p_batch_id = ' || p_batch_id
5621                   || ', p_price_precision = ' || p_price_precision);
5622   END IF; --}
5623 
5624 INSERT ALL
5625 WHEN payment_display_number < 1 OR payment_display_number<> ROUND(payment_display_number) THEN
5626  INTO pon_interface_errors
5627  (
5628   column_name,                  entity_attr_name,             error_message_name,            -- 1
5629   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5630   token1_name,                  token1_value,                 token2_name,                   -- 3
5631   token2_value,                 interface_type,               table_name,                    -- 4
5632   batch_id,                     interface_line_id,            entity_type,                   -- 5
5633   auction_header_id,            line_number,                  payment_id,                    -- 6
5634   expiration_date,              created_by,                   creation_date,                 -- 7
5635   last_updated_by,              last_update_date,             last_update_login              -- 8
5636  )
5637 VALUES
5638  (
5639   'PON_AUCTS_PAYITEM_NUMBER',   NULL,                        'PON_PYMT_NUM_WRONG',           -- 1
5640   'NUM',                        payment_display_number,       NULL,                          -- 2
5641   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5642    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5643   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5644   auction_header_id,            s_line_number,    NULL,                          -- 6
5645   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5646   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5647  )
5648 WHEN payment_type_code = 'RATE' AND quantity < 0 THEN
5649  INTO pon_interface_errors
5650  (
5651   column_name,                  entity_attr_name,             error_message_name,            -- 1
5652   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5653   token1_name,                  token1_value,                 token2_name,                   -- 3
5654   token2_value,                 interface_type,               table_name,                    -- 4
5655   batch_id,                     interface_line_id,            entity_type,                   -- 5
5656   auction_header_id,            line_number,                  payment_id,                    -- 6
5657   expiration_date,              created_by,                   creation_date,                 -- 7
5658   last_updated_by,              last_update_date,             last_update_login              -- 8
5659  )
5660 VALUES
5661  (
5662   'PON_AUCTS_QUANTITY',         NULL,                        'PON_PYMT_QTY_WRONG',           -- 1
5663   'NUM',                        quantity,                     NULL,                          -- 2
5664   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5665    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5666   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5667   auction_header_id,            s_line_number,    NULL,                          -- 6
5668   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5669   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5670  )
5671 WHEN target_price IS NOT NULL AND target_price < 0 THEN
5672  INTO pon_interface_errors
5673  (
5674   column_name,                  entity_attr_name,             error_message_name,            -- 1
5675   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5676   token1_name,                  token1_value,                 token2_name,                   -- 3
5677   token2_value,                 interface_type,               table_name,                    -- 4
5678   batch_id,                     interface_line_id,            entity_type,                   -- 5
5679   auction_header_id,            line_number,                  payment_id,                    -- 6
5680   expiration_date,              created_by,                   creation_date,                 -- 7
5681   last_updated_by,              last_update_date,             last_update_login              -- 8
5682  )
5683 VALUES
5684  (
5685   'PON_AUCTS_TARGET_PRICE',     NULL,                        'PON_PYMT_TPRICE_WRONG',        -- 1
5686   'NUM',                        target_price,                 NULL,                          -- 2
5687   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5688    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5689   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5690   auction_header_id,            s_line_number,    NULL,                          -- 6
5691   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5692   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5693  )
5694 WHEN target_price IS NOT NULL
5695 AND PON_BID_VALIDATIONS_PKG.validate_price_precision(target_price, p_price_precision) = 'F' THEN
5696  INTO pon_interface_errors
5697  (
5698   column_name,                  entity_attr_name,             error_message_name,            -- 1
5699   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5700   token1_name,                  token1_value,                 token2_name,                   -- 3
5701   token2_value,                 interface_type,               table_name,                    -- 4
5702   batch_id,                     interface_line_id,            entity_type,                   -- 5
5703   auction_header_id,            line_number,                  payment_id,                    -- 6
5704   expiration_date,              created_by,                   creation_date,                 -- 7
5705   last_updated_by,              last_update_date,             last_update_login              -- 8
5706  )
5707 VALUES
5708  (
5709   'PON_AUCTS_TARGET_PRICE',     NULL,                        'PON_TARGETPRICE_INVALID_PREC_P',        -- 1
5710   'NUM',                        target_price,                 NULL,                          -- 2
5711   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5712    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5713   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5714   auction_header_id,            s_line_number,    NULL,                          -- 6
5715   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5716   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5717  )
5718 WHEN payment_display_number IS NULL THEN
5719  INTO pon_interface_errors
5720  (
5721   column_name,                  entity_attr_name,             error_message_name,            -- 1
5722   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5723   token1_name,                  token1_value,                 token2_name,                   -- 3
5724   token2_value,                 interface_type,               table_name,                    -- 4
5725   batch_id,                     interface_line_id,            entity_type,                   -- 5
5726   auction_header_id,            line_number,                  payment_id,                    -- 6
5727   expiration_date,              created_by,                   creation_date,                 -- 7
5728   last_updated_by,              last_update_date,             last_update_login              -- 8
5729  )
5730 VALUES
5731  (
5732   'PON_AUCTS_PAYITEM_NUMBER',   NULL,                        'PON_PYMT_NUM_MISSING',         -- 1
5733   'NUM',                        payment_display_number,       NULL,                          -- 2
5734   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5735    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5736   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5737   auction_header_id,            s_line_number,    NULL,                          -- 6
5738   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5739   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5740  )
5741 WHEN payment_type_code IS NULL THEN
5742  INTO pon_interface_errors
5743  (
5744   column_name,                  entity_attr_name,             error_message_name,            -- 1
5745   error_value_datatype,         error_value,                  error_value_date,              -- 2
5746   token1_name,                  token1_value,                 token2_name,                   -- 3
5747   token2_value,                 interface_type,               table_name,                    -- 4
5748   batch_id,                     interface_line_id,            entity_type,                   -- 5
5749   auction_header_id,            line_number,                  payment_id,                    -- 6
5750   expiration_date,              created_by,                   creation_date,                 -- 7
5751   last_updated_by,              last_update_date,             last_update_login              -- 8
5752  )
5753 VALUES
5754  (
5755   'PON_AUCTS_PAYITEM_TYPE',     NULL,                        'PON_PYMT_TYPE_NULL',           -- 1
5756   'TXT',                        payment_type_code,            NULL,                          -- 2
5757   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5758    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5759   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5760   auction_header_id,            s_line_number,    NULL,                          -- 6
5761   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5762   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5763  )
5764 WHEN payment_description IS NULL THEN
5765  INTO pon_interface_errors
5766  (
5767   column_name,                  entity_attr_name,             error_message_name,            -- 1
5768   error_value_datatype,         error_value,                  error_value_date,              -- 2
5769   token1_name,                  token1_value,                 token2_name,                   -- 3
5770   token2_value,                 interface_type,               table_name,                    -- 4
5771   batch_id,                     interface_line_id,            entity_type,                   -- 5
5772   auction_header_id,            line_number,                  payment_id,                    -- 6
5773   expiration_date,              created_by,                   creation_date,                 -- 7
5774   last_updated_by,              last_update_date,             last_update_login              -- 8
5775  )
5776 VALUES
5777  (
5778   'PON_AUCTS_PAYMENT_DESC',     NULL,                        'PON_PYMT_DESC_NULL',           -- 1
5779   'TXT',                        payment_description,          NULL,                          -- 2
5780   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5781    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5782   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5783   auction_header_id,            s_line_number,    NULL,                          -- 6
5784   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5785   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5786  )
5787 WHEN payment_type_code = 'RATE' AND quantity IS NULL THEN
5788  INTO pon_interface_errors
5789  (
5790   column_name,                  entity_attr_name,             error_message_name,            -- 1
5791   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5792   token1_name,                  token1_value,                 token2_name,                   -- 3
5793   token2_value,                 interface_type,               table_name,                    -- 4
5794   batch_id,                     interface_line_id,            entity_type,                   -- 5
5795   auction_header_id,            line_number,                  payment_id,                    -- 6
5796   expiration_date,              created_by,                   creation_date,                 -- 7
5797   last_updated_by,              last_update_date,             last_update_login              -- 8
5798  )
5799 VALUES
5800  (
5801   'PON_AUCTS_QUANTITY',         NULL,                        'PON_PYMT_QTY_NULL',            -- 1
5802   'NUM',                        NULL,                         NULL,                          -- 2
5803   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5804    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5805   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5806   auction_header_id,            s_line_number,    NULL,                          -- 6
5807   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5808   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5809  )
5810 WHEN payment_type_code = 'RATE' AND uom_code IS NULL THEN
5811  INTO pon_interface_errors
5812  (
5813   column_name,                  entity_attr_name,             error_message_name,            -- 1
5814   error_value_datatype,         error_value,                  error_value_date,              -- 2
5815   token1_name,                  token1_value,                 token2_name,                   -- 3
5816   token2_value,                 interface_type,               table_name,                    -- 4
5817   batch_id,                     interface_line_id,            entity_type,                   -- 5
5818   auction_header_id,            line_number,                  payment_id,                    -- 6
5819   expiration_date,              created_by,                   creation_date,                 -- 7
5820   last_updated_by,              last_update_date,             last_update_login              -- 8
5821  )
5822 VALUES
5823  (
5824   NULL,                         NULL,                        'PON_PYMT_UOM_NULL',            -- 1
5825   'TXT',                        NULL,                         NULL,                          -- 2
5826   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5827    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5828   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5829   auction_header_id,            s_line_number,    NULL,                          -- 6
5830   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5831   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5832  )
5833 WHEN nvl(supplier_enterable_pymt_flag,'N') = 'N' AND ship_to_location_id IS NULL THEN
5834  INTO pon_interface_errors
5835  (
5836   column_name,                  entity_attr_name,             error_message_name,            -- 1
5837   error_value_datatype,         error_value,                  error_value_date,              -- 2
5838   token1_name,                  token1_value,                 token2_name,                   -- 3
5839   token2_value,                 interface_type,               table_name,                    -- 4
5840   batch_id,                     interface_line_id,            entity_type,                   -- 5
5841   auction_header_id,            line_number,                  payment_id,                    -- 6
5842   expiration_date,              created_by,                   creation_date,                 -- 7
5843   last_updated_by,              last_update_date,             last_update_login              -- 8
5844  )
5845 VALUES
5846  (
5847   NULL,                         NULL,                        'PON_PYMT_SHIPTO_NULL',            -- 1
5848   'TXT',                        NULL,                         NULL,                          -- 2
5849   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5850    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5851   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5852   auction_header_id,            s_line_number,    NULL,                          -- 6
5853   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5854   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5855  )
5856 WHEN need_by_date IS NOT NULL AND need_by_date <= pah_close_bidding_date THEN
5857  INTO pon_interface_errors
5858  (
5859   column_name,                  entity_attr_name,             error_message_name,            -- 1
5860   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5861   token1_name,                  token1_value,                 token2_name,                   -- 3
5862   token2_value,                 interface_type,               table_name,                    -- 4
5863   batch_id,                     interface_line_id,            entity_type,                   -- 5
5864   auction_header_id,            line_number,                  payment_id,                    -- 6
5865   expiration_date,              created_by,                   creation_date,                 -- 7
5866   last_updated_by,              last_update_date,             last_update_login              -- 8
5867  )
5868 VALUES
5869  (
5870   'PON_AUCTS_NEEDBY',           NULL,                        'PON_PYMT_NDATE_LESS_CDATE',    -- 1
5871   'TIM',                        NULL,                        need_by_date,                   -- 2
5872   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5873    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5874   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5875   auction_header_id,            s_line_number,    NULL,                          -- 6
5876   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5877   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5878  )
5879   WHEN work_approver_user_id IS NOT NULL
5880   AND NOT EXISTS (SELECT 1
5881                     FROM  PER_WORKFORCE_CURRENT_X peo,
5882                          FND_USER fu
5883                    WHERE fu.user_id = work_approver_user_id
5884                      AND fu.employee_id = peo.person_id
5885     			     AND SYSDATE >= nvl(fu.start_date, SYSDATE)
5886 				     AND SYSDATE <= nvl(fu.end_date, SYSDATE) ) THEN
5887  INTO pon_interface_errors
5888  (
5889   column_name,                  entity_attr_name,             error_message_name,            -- 1
5890   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5891   token1_name,                  token1_value,                 token2_name,                   -- 3
5892   token2_value,                 interface_type,               table_name,                    -- 4
5893   batch_id,                     interface_line_id,            entity_type,                   -- 5
5894   auction_header_id,            line_number,                  payment_id,                    -- 6
5895   expiration_date,              created_by,                   creation_date,                 -- 7
5896   last_updated_by,              last_update_date,             last_update_login              -- 8
5897  )
5898 VALUES
5899  (
5900   NULL,                         NULL,                        'PON_PYMT_OWNER_INVALID',    -- 1
5901   'TIM',                        work_approver_user_id,        NULL,                   -- 2
5902   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5903    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5904   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5905   auction_header_id,            s_line_number,    NULL,                          -- 6
5906   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5907   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5908  )
5909   WHEN (s_project_id IS NOT NULL OR s_project_task_id IS NOT NULL OR s_project_exp_org_id IS NOT NULL
5910         OR s_project_exp_item_date IS NOT NULL OR s_project_exp_type IS NOT NULL)
5911   AND (s_project_id IS NULL OR s_project_task_id IS NULL OR s_project_exp_org_id IS NULL
5912         OR s_project_exp_item_date IS NULL OR s_project_exp_type IS NULL) THEN
5913  INTO pon_interface_errors
5914  (
5915   column_name,                  entity_attr_name,             error_message_name,            -- 1
5916   error_value_datatype,         error_value,                  error_value_date,              -- 2
5917   token1_name,                  token1_value,                 token2_name,                   -- 3
5918   token2_value,                 interface_type,               table_name,                    -- 4
5919   batch_id,                     interface_line_id,            entity_type,                   -- 5
5920   auction_header_id,            line_number,                  payment_id,                    -- 6
5921   expiration_date,              created_by,                   creation_date,                 -- 7
5922   last_updated_by,              last_update_date,             last_update_login              -- 8
5923  )
5924 VALUES
5925  (
5926   NULL,                         NULL,                        'PON_PROJ_INFO_INCOMPLETE_P',    -- 1
5927   'TXT',                        s_project_exp_type,          NULL,                   -- 2
5928   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5929    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5930   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5931   auction_header_id,            s_line_number,    NULL,                          -- 6
5932   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5933   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5934  )
5935 SELECT
5936   ppi.project_id s_project_id,
5937   ppi.project_task_id s_project_task_id,
5938   ppi.project_expenditure_type s_project_exp_type,
5939   ppi.project_exp_organization_id s_project_exp_org_id,
5940   ppi.project_expenditure_item_date s_project_exp_item_date,
5941   ppi.project_award_id s_project_award_id,
5942   ppi.payment_display_number,
5943   ppi.payment_type_code,
5944   ppi.uom_code,
5945   ppi.auction_header_id auction_header_id,
5946   pai.document_disp_line_number,
5947   ppi.work_approver_user_id,
5948   ppi.ship_to_location_id,
5949   ppi.target_price,
5950   ppi.quantity,
5951   ppi.payment_description,
5952   ppi.need_by_date,
5953   pah.close_bidding_date pah_close_bidding_date,
5954   pah.supplier_enterable_pymt_flag,
5955   pai.line_number s_line_number
5956  FROM PON_AUC_PAYMENTS_SHIPMENTS ppi,
5957       PON_AUCTION_ITEM_PRICES_ALL pai,
5958       PON_AUCTION_HEADERS_ALL pah
5959  WHERE ppi.auction_header_id = pai.auction_header_id
5960  AND   ppi.line_number = pai.line_number
5961  AND   pah.auction_header_id = ppi.auction_header_id
5962  AND   ppi.auction_header_id = p_auction_header_id;
5963 
5964 
5965 -- Validate projects fields separately because of bug 4933437
5966 INSERT ALL
5967   WHEN s_project_id IS NOT NULL
5968   AND NOT EXISTS(SELECT 1
5969                  FROM pa_projects_expend_v pro
5970                  WHERE pro.project_id = s_project_id) THEN
5971  INTO pon_interface_errors
5972  (
5973   column_name,                  entity_attr_name,             error_message_name,            -- 1
5974   error_value_datatype,         error_value_number,           error_value_date,              -- 2
5975   token1_name,                  token1_value,                 token2_name,                   -- 3
5976   token2_value,                 interface_type,               table_name,                    -- 4
5977   batch_id,                     interface_line_id,            entity_type,                   -- 5
5978   auction_header_id,            line_number,                  payment_id,                    -- 6
5979   expiration_date,              created_by,                   creation_date,                 -- 7
5980   last_updated_by,              last_update_date,             last_update_login              -- 8
5981  )
5982 VALUES
5983  (
5984   NULL,                         NULL,                        'PON_PROJ_NUM_INVALID_P',    -- 1
5985   'TIM',                        NULL,                         NULL,                   -- 2
5986   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
5987    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
5988   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
5989   auction_header_id,            s_line_number,    NULL,                          -- 6
5990   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
5991   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
5992  )
5993   WHEN s_project_id IS NOT NULL AND s_project_task_id IS NOT NULL
5994   AND NOT EXISTS(SELECT 1
5995                  FROM pa_tasks_expend_v tas
5996                  WHERE tas.project_id = s_project_id
5997                  AND tas.task_id = s_project_task_id) THEN
5998  INTO pon_interface_errors
5999  (
6000   column_name,                  entity_attr_name,             error_message_name,            -- 1
6001   error_value_datatype,         error_value_number,           error_value_date,              -- 2
6002   token1_name,                  token1_value,                 token2_name,                   -- 3
6003   token2_value,                 interface_type,               table_name,                    -- 4
6004   batch_id,                     interface_line_id,            entity_type,                   -- 5
6005   auction_header_id,            line_number,                  payment_id,                    -- 6
6006   expiration_date,              created_by,                   creation_date,                 -- 7
6007   last_updated_by,              last_update_date,             last_update_login              -- 8
6008  )
6009 VALUES
6010  (
6011   NULL,                         NULL,                        'PON_PROJ_TASK_INVALID_P',    -- 1
6012   'TIM',                        NULL,                         NULL,                   -- 2
6013   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
6014    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
6015   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
6016   auction_header_id,            s_line_number,    NULL,                          -- 6
6017   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
6018   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
6019  )
6020   WHEN s_project_id IS NOT NULL
6021   AND s_project_task_id IS NOT NULL
6022   AND s_project_award_id IS NOT NULL
6023   AND NOT EXISTS (SELECT 1
6024                     FROM GMS_AWARDS_BASIC_V award
6025                    WHERE award.project_id = s_project_id
6026                      AND award.task_id = s_project_task_id
6027                      AND award.award_id  = s_project_award_id) THEN
6028  INTO pon_interface_errors
6029  (
6030   column_name,                  entity_attr_name,             error_message_name,            -- 1
6031   error_value_datatype,         error_value_number,           error_value_date,              -- 2
6032   token1_name,                  token1_value,                 token2_name,                   -- 3
6033   token2_value,                 interface_type,               table_name,                    -- 4
6034   batch_id,                     interface_line_id,            entity_type,                   -- 5
6035   auction_header_id,            line_number,                  payment_id,                    -- 6
6036   expiration_date,              created_by,                   creation_date,                 -- 7
6037   last_updated_by,              last_update_date,             last_update_login              -- 8
6038  )
6039 VALUES
6040  (
6041   NULL,                         NULL,                        'PON_PROJ_AWARD_INVALID_P',    -- 1
6042   'TIM',                        NULL,                         NULL,                   -- 2
6043   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
6044    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
6045   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
6046   auction_header_id,            s_line_number,    NULL,                          -- 6
6047   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
6048   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
6049  )
6050   WHEN s_project_id IS NOT NULL
6051   AND s_project_award_id IS NULL
6052   AND IS_PROJECT_SPONSORED(s_project_id) = 'Y' THEN
6053  INTO pon_interface_errors
6054  (
6055   column_name,                  entity_attr_name,             error_message_name,            -- 1
6056   error_value_datatype,         error_value_number,           error_value_date,              -- 2
6057   token1_name,                  token1_value,                 token2_name,                   -- 3
6058   token2_value,                 interface_type,               table_name,                    -- 4
6059   batch_id,                     interface_line_id,            entity_type,                   -- 5
6060   auction_header_id,            line_number,                  payment_id,                    -- 6
6061   expiration_date,              created_by,                   creation_date,                 -- 7
6062   last_updated_by,              last_update_date,             last_update_login              -- 8
6063  )
6064 VALUES
6065  (
6066   NULL,                         NULL,                        'PON_PROJ_AWARD_NULL_P',    -- 1
6067   'TIM',                        NULL,                         NULL,                   -- 2
6068   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
6069    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
6070   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
6071   auction_header_id,            s_line_number,    NULL,                          -- 6
6072   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
6073   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
6074  )
6075   WHEN s_project_exp_org_id IS NOT NULL
6076   AND NOT EXISTS (SELECT 1
6077                     FROM PA_ORGANIZATIONS_EXPEND_V porg
6078                    WHERE porg.organization_id = s_project_exp_org_id) THEN
6079  INTO pon_interface_errors
6080  (
6081   column_name,                  entity_attr_name,             error_message_name,            -- 1
6082   error_value_datatype,         error_value_number,           error_value_date,              -- 2
6083   token1_name,                  token1_value,                 token2_name,                   -- 3
6084   token2_value,                 interface_type,               table_name,                    -- 4
6085   batch_id,                     interface_line_id,            entity_type,                   -- 5
6086   auction_header_id,            line_number,                  payment_id,                    -- 6
6087   expiration_date,              created_by,                   creation_date,                 -- 7
6088   last_updated_by,              last_update_date,             last_update_login              -- 8
6089  )
6090 VALUES
6091  (
6092   NULL,                         NULL,                        'PON_PROJ_EXPORG_INVALID_P',    -- 1
6093   'TIM',                        NULL,                         NULL,                   -- 2
6094   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
6095    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
6096   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
6097   auction_header_id,            s_line_number,    NULL,                          -- 6
6098   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
6099   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
6100  )
6101 WHEN s_project_exp_type IS NOT NULL
6102 AND NOT EXISTS (SELECT 1
6103                 FROM pa_expenditure_types_expend_v exptype
6104                 WHERE system_linkage_function = 'VI'
6105                 AND exptype.expenditure_type = s_project_exp_type
6106                 AND  trunc(sysdate) BETWEEN nvl(exptype.expnd_typ_start_date_active, trunc(sysdate))
6107                                     AND  nvl(exptype.expnd_typ_end_date_Active, trunc(sysdate))
6108                 AND trunc(sysdate) BETWEEN nvl(exptype.sys_link_start_date_active, trunc(sysdate))
6109                                     AND  nvl(exptype.sys_link_end_date_Active, trunc(sysdate))) THEN
6110  INTO pon_interface_errors
6111  (
6112   column_name,                  entity_attr_name,             error_message_name,            -- 1
6113   error_value_datatype,         error_value,                  error_value_date,              -- 2
6114   token1_name,                  token1_value,                 token2_name,                   -- 3
6115   token2_value,                 interface_type,               table_name,                    -- 4
6116   batch_id,                     interface_line_id,            entity_type,                   -- 5
6117   auction_header_id,            line_number,                  payment_id,                    -- 6
6118   expiration_date,              created_by,                   creation_date,                 -- 7
6119   last_updated_by,              last_update_date,             last_update_login              -- 8
6120  )
6121 VALUES
6122  (
6123   NULL,                         NULL,                        'PON_PROJ_EXPTYPE_INVALID_P',    -- 1
6124   'TXT',                        s_project_exp_type,          NULL,                   -- 2
6125   'LINENUM',                    document_disp_line_number,    'PAYITEMNUM',                  -- 3
6126    payment_display_number,      g_interface_type,             'PON_AUC_PAYMENTS_INTERFACE',  -- 4
6127   p_batch_id,                   NULL,            g_rfq_pymts_type,              -- 5
6128   auction_header_id,            s_line_number,    NULL,                          -- 6
6129   p_expiration_date,                   p_user_id,                     SYSDATE,                       -- 7
6130   p_user_id,                     SYSDATE,                      p_login_id                      -- 8
6131  )
6132 SELECT
6133   ppi.project_id s_project_id,
6134   ppi.project_task_id s_project_task_id,
6135   ppi.project_expenditure_type s_project_exp_type,
6136   ppi.project_exp_organization_id s_project_exp_org_id,
6137   ppi.project_expenditure_item_date s_project_exp_item_date,
6138   ppi.project_award_id s_project_award_id,
6139   ppi.payment_display_number,
6140   ppi.auction_header_id auction_header_id,
6141   pai.document_disp_line_number,
6142   ppi.work_approver_user_id,
6143   pai.line_number s_line_number
6144  FROM PON_AUC_PAYMENTS_SHIPMENTS ppi,
6145       PON_AUCTION_ITEM_PRICES_ALL pai,
6146       PON_AUCTION_HEADERS_ALL pah
6147  WHERE ppi.auction_header_id = pai.auction_header_id
6148  AND   ppi.line_number = pai.line_number
6149  AND   ppi.auction_header_id = p_auction_header_id
6150  AND   pah.auction_header_id = pai.auction_header_id
6151  AND   ppi.project_id  IS NOT NULL
6152  AND   ppi.project_task_id  IS NOT NULL
6153  AND   ppi.project_expenditure_type IS NOT NULL
6154  AND   ppi.project_exp_organization_id IS NOT NULL
6155  AND   ppi.project_expenditure_item_date IS NOT NULL;
6156 
6157   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
6158     FND_LOG.string(log_level => FND_LOG.level_procedure,
6159       module  =>  g_module_prefix || 'VALIDATE_PAYMENTS',
6160       message  => 'Leaving PON_NEGOTIATION_PUBLISH_PVT.VALIDATE_PAYMENTS'
6161                   || ', p_auction_header_id = ' || p_auction_header_id);
6162   END IF; --}
6163   --Validate project fields with PATC
6164     FOR l_proj_record IN l_proj_cursor LOOP
6165         VALIDATE_PROJECTS_DETAILS (
6166             p_project_id                => l_proj_record.project_id,
6167             p_task_id                   => l_proj_record.project_task_id,
6168             p_expenditure_date          => l_proj_record.project_expenditure_item_date,
6169             p_expenditure_type          => l_proj_record.project_expenditure_type,
6170             p_expenditure_org           => l_proj_record.project_exp_organization_id,
6171             p_person_id                 => null,
6172             p_auction_header_id         => p_auction_header_id,
6173             p_line_number               => l_proj_record.line_number,
6174             p_document_disp_line_number => l_proj_record.document_disp_line_number,
6175             p_payment_id                => l_proj_record.payment_id,
6176             p_interface_line_id         => null,
6177             p_payment_display_number    => l_proj_record.payment_display_number,
6178             p_batch_id                  => p_batch_id,
6179             p_table_name                => null,
6180             p_interface_type            => g_interface_type,
6181             p_entity_type               => g_rfq_pymts_type,
6182             p_called_from               => 'PAYMENTS');
6183     END LOOP;
6184 
6185 
6186 EXCEPTION
6187     WHEN OTHERS THEN
6188 
6189     IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.g_current_runtime_level) THEN
6190       FND_LOG.string (log_level => FND_LOG.level_exception,
6191         module  => g_module_prefix || 'VALIDATE_PAYMENTS',
6192         message => 'Exception occured validate_payments'
6193             || ' Error Number :' || SQLCODE || ' Exception Message :' || SUBSTR(SQLERRM, 1, 200));
6194     END IF;
6195 
6196 END validate_payments;
6197 
6198 
6199 -- End Validation procedures
6200 
6201 PROCEDURE LOAD_DOCTYPE_NAME_DATA
6202 IS
6203 
6204 l_doctype_id PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6205 l_doctype_group_name PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6206 BEGIN
6207 
6208   SELECT
6209     doctype_id,
6210     doctype_group_name
6211   BULK COLLECT INTO
6212     l_doctype_id,
6213     l_doctype_group_name
6214   FROM
6215     pon_auc_doctypes;
6216 
6217   IF (l_doctype_id.COUNT > 0) THEN --{
6218 
6219     FOR x in 1..l_doctype_id.COUNT LOOP
6220 
6221       g_document_type_names (l_doctype_id (x)) := l_doctype_group_name (x);
6222     END LOOP;
6223   END IF; --}
6224 END LOAD_DOCTYPE_NAME_DATA;
6225 
6226 /*======================================================================
6227  *  PROCEDURE : LOAD_BIZRULE_DATA
6228  *  PARAMETERS:
6229  *              p_doctype_id - The doctype id of the negotiation
6230  *
6231  *  COMMENT   : This procedure will load the document rules corresponding
6232  *              to this doctype_id
6233  *  EXCEPTION : None
6234  *======================================================================*/
6235 PROCEDURE LOAD_BIZRULE_DATA (
6236   p_doctype_id  NUMBER
6237 ) IS
6238 
6239 l_bizrule_name PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6240 l_doctype_rule_required PON_NEG_COPY_DATATYPES_GRP.VARCHAR1_TYPE;
6241 l_doctype_rule_validity PON_NEG_COPY_DATATYPES_GRP.VARCHAR1_TYPE;
6242 BEGIN
6243 
6244   SELECT
6245     BIZRULE.NAME,
6246     DOCTYPE_RULE.REQUIRED_FLAG,
6247     DOCTYPE_RULE.VALIDITY_FLAG
6248   BULK COLLECT INTO
6249     l_bizrule_name,
6250     l_doctype_rule_required,
6251     l_doctype_rule_validity
6252   FROM
6253     PON_AUC_BIZRULES BIZRULE,
6254     PON_AUC_DOCTYPE_RULES DOCTYPE_RULE
6255   WHERE
6256     BIZRULE.BIZRULE_ID = DOCTYPE_RULE.BIZRULE_ID AND
6257     DOCTYPE_RULE.DOCTYPE_ID = p_doctype_id;
6258 
6259   IF (l_bizrule_name.COUNT <> 0) THEN --{
6260 
6261     FOR x IN 1..l_bizrule_name.COUNT LOOP
6262 
6263        g_document_type_required_rule (l_bizrule_name(x)) := l_doctype_rule_required (x);
6264        g_document_type_validity_rule (l_bizrule_name(x)) := l_doctype_rule_validity (x);
6265     END LOOP;
6266   END IF; --}
6267 END LOAD_BIZRULE_DATA;
6268 
6269 --Start Helper Methods
6270 
6271 FUNCTION IS_GLOBAL_AGREEMENT (
6272   p_global_agreement_flag IN VARCHAR2
6273 ) RETURN BOOLEAN IS
6274 BEGIN
6275 
6276   IF (p_global_agreement_flag = 'Y') THEN --{
6277 
6278     RETURN TRUE;
6279   END IF; --}
6280 
6281   RETURN FALSE;
6282 END IS_GLOBAL_AGREEMENT;
6283 
6284 --These methods belong to PONNEGHS.pls, keeping them here
6285 --temporarily
6286 PROCEDURE HAS_TEMP_LABOR_LINES (
6287   p_auction_header_id IN NUMBER,
6288   x_return_value OUT NOCOPY VARCHAR2
6289 ) IS
6290 
6291 l_line_number NUMBER;
6292 BEGIN
6293 
6294   SELECT
6295     LINE_NUMBER
6296   INTO
6297     l_line_number
6298   FROM
6299     PON_AUCTION_ITEM_PRICES_ALL
6300   WHERE
6301     AUCTION_HEADER_ID = p_auction_header_id AND
6302     PURCHASE_BASIS = 'TEMP LABOR' AND
6303     ROWNUM = 1;
6304 
6305   x_return_value := 'Y';
6306 EXCEPTION WHEN NO_DATA_FOUND THEN --{
6307 x_return_value := 'N';
6308 
6309 END HAS_TEMP_LABOR_LINES;
6310 
6311 PROCEDURE SET_ITEM_HAS_CHILDREN_FLAGS (
6312   p_auction_header_id IN NUMBER,
6313   p_close_bidding_date IN DATE
6314 ) IS
6315 BEGIN
6316   --HAS_ATTRIBUTES_FLAG, HAS_SHIPMENTS_FLAG, HAS_PRICE_ELEMENTS_FLAG,
6317   --HAS_BUYER_PFS_FLAG, HAS_PRICE_DIFFERENTIALS_FLAG,HAS_QUANTITY_TIERS
6318   UPDATE
6319     PON_AUCTION_ITEM_PRICES_ALL PAIP
6320   SET
6321     HAS_ATTRIBUTES_FLAG = NVL(
6322                  (SELECT 'Y'
6323                  FROM PON_AUCTION_ATTRIBUTES
6324                  WHERE AUCTION_HEADER_ID = p_auction_header_id
6325                  AND LINE_NUMBER = PAIP.LINE_NUMBER
6326                   AND ROWNUM = 1), 'N'),
6327     HAS_SHIPMENTS_FLAG = NVL (
6328                  (SELECT 'Y'
6329                  FROM PON_AUCTION_SHIPMENTS_ALL
6330                  WHERE AUCTION_HEADER_ID = p_auction_header_id
6331                   AND shipment_type = 'PRICE BREAK'
6332                   AND LINE_NUMBER = PAIP.LINE_NUMBER
6333                   AND ROWNUM = 1),'N'),
6334     HAS_PRICE_ELEMENTS_FLAG = NVL (
6335                  (SELECT 'Y'
6336                  FROM PON_PRICE_ELEMENTS
6337                  WHERE AUCTION_HEADER_ID = p_auction_header_id
6338                   AND LINE_NUMBER = PAIP.LINE_NUMBER
6339                   AND PF_TYPE = 'SUPPLIER'
6340                   AND ROWNUM = 1), 'N'),
6341     HAS_BUYER_PFS_FLAG = NVL (
6342                  (SELECT 'Y'
6343                  FROM PON_PRICE_ELEMENTS
6344                  WHERE AUCTION_HEADER_ID = p_auction_header_id
6345                   AND LINE_NUMBER = PAIP.LINE_NUMBER
6346                   AND ROWNUM = 1
6347                   AND PF_TYPE = 'BUYER'),'N'),
6348     HAS_PRICE_DIFFERENTIALS_FLAG = NVL (
6349                  (SELECT 'Y'
6350                  FROM PON_PRICE_DIFFERENTIALS
6351                  WHERE AUCTION_HEADER_ID = p_auction_header_id
6352                   AND LINE_NUMBER = PAIP.LINE_NUMBER
6353                   AND SHIPMENT_NUMBER = -1
6354                   AND ROWNUM = 1),'N'),
6355     HAS_QUANTITY_TIERS = NVL (
6356                  (SELECT 'Y'
6357                  FROM PON_AUCTION_SHIPMENTS_ALL
6358                  WHERE AUCTION_HEADER_ID = p_auction_header_id
6359                   AND shipment_type = 'QUANTITY BASED'
6360                   AND LINE_NUMBER = PAIP.LINE_NUMBER
6361                   AND ROWNUM = 1),'N'),
6362     CLOSE_BIDDING_DATE = p_close_bidding_date,
6363     LAST_UPDATE_DATE = SYSDATE,
6364     LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID(),
6365     LAST_UPDATED_BY = FND_GLOBAL.USER_ID()
6366   WHERE
6367     AUCTION_HEADER_ID = p_auction_header_id;
6368 END SET_ITEM_HAS_CHILDREN_FLAGS;
6369 
6370 --These methods belong to PONNEGHS.pls, keeping them here
6371 --temporarily
6372 
6373 PROCEDURE GET_LOT_GRP_MAX_DISP_LINE_NUM (
6374   p_auction_header_id IN NUMBER,
6375   p_parent_line_number IN NUMBER,
6376   x_max_disp_line_number OUT NOCOPY NUMBER
6377 ) IS
6378 BEGIN
6379 
6380   SELECT MAX (DISP_LINE_NUMBER)
6381   INTO x_max_disp_line_number
6382   FROM PON_AUCTION_ITEM_PRICES_ALL
6383   WHERE AUCTION_HEADER_ID = p_auction_header_id
6384   AND PARENT_LINE_NUMBER = p_parent_line_number;
6385 
6386   IF (x_max_disp_line_number IS NULL) THEN
6387     SELECT DISP_LINE_NUMBER
6388     INTO x_max_disp_line_number
6389     FROM PON_AUCTION_ITEM_PRICES_ALL
6390     WHERE AUCTION_HEADER_ID = p_auction_header_id
6391     AND LINE_NUMBER = p_parent_line_number;
6392   END IF;
6393 
6394 END GET_LOT_GRP_MAX_DISP_LINE_NUM;
6395 
6396 -- End Validation procedures
6397 
6398 PROCEDURE VALIDATE_LINES (
6399   x_result OUT NOCOPY VARCHAR2, --1
6400   x_error_code OUT NOCOPY VARCHAR2, --2
6401   x_error_message OUT NOCOPY VARCHAR2, --3
6402   p_auction_header_id IN NUMBER, --4
6403   p_doctype_id IN NUMBER, --5
6404   p_auction_currency_precision IN NUMBER, --6
6405   p_fnd_currency_precision IN NUMBER, --7
6406   p_close_bidding_date IN DATE, --8
6407   p_contract_type IN VARCHAR2, --9
6408   p_global_agreement_flag IN VARCHAR2, --10
6409   p_allow_other_bid_currency IN VARCHAR2, --11
6410   p_bid_ranking IN VARCHAR2,  --12
6411   p_po_start_date IN DATE, --13
6412   p_po_end_date IN DATE, --14
6413   p_trading_partner_id IN NUMBER, --15
6414   p_full_quantity_bid_code IN VARCHAR2, --16
6415   p_invitees_count IN NUMBER, --17
6416   p_bid_list_type IN VARCHAR2, --18
6417   p_request_id IN NUMBER, -- 19
6418   p_for_approval IN VARCHAR2, -- 20
6419   p_user_id IN NUMBER, --21
6420   p_line_attribute_enabled_flag IN VARCHAR2, --22
6421   p_pf_type_allowed IN VARCHAR2, --23
6422   p_progress_payment_type IN VARCHAR2, --24
6423   p_large_neg_enabled_flag IN VARCHAR2, --25
6424   p_price_tiers_indicator IN VARCHAR2, --26
6425   x_batch_id OUT NOCOPY NUMBER --27
6426 )IS
6427 
6428 l_is_global_agreement BOOLEAN;
6429 
6430 l_expiration_date DATE;
6431 l_user_id NUMBER;
6432 l_login_id NUMBER;
6433 l_batch_id NUMBER;
6434 
6435 l_module_name VARCHAR2(30);
6436 
6437 BEGIN
6438 
6439   l_module_name := 'validate_lines';
6440 
6441   x_result := FND_API.G_RET_STS_SUCCESS;
6442 
6443   IF (FND_LOG.level_procedure>= FND_LOG.g_current_runtime_level) THEN --{
6444     FND_LOG.string(log_level => FND_LOG.level_procedure,
6445       module  =>  g_module_prefix || l_module_name,
6446       message  => 'Entering procedure:'
6447                   || 'p_auction_header_id = ' || p_auction_header_id
6448                   || ', p_doctype_id = ' || p_doctype_id
6449                   || ', p_auction_currency_precision = ' || p_auction_currency_precision
6450                   || ', p_fnd_currency_precision = ' || p_fnd_currency_precision
6451                   || ', p_close_bidding_date = ' || p_close_bidding_date
6452                   || ', p_contract_type = ' || p_contract_type
6453                   || ', p_global_agreement_flag = ' || p_global_agreement_flag
6454                   || ', p_allow_other_bid_currency = ' || p_allow_other_bid_currency
6455                   || ', p_bid_ranking = ' || p_bid_ranking
6456                   || ', p_po_end_date = ' || p_po_end_date
6457                   || ', p_po_start_date = ' || p_po_start_date
6458                   || ', p_trading_partner_id = ' || p_trading_partner_id
6459                   || ', p_full_quantity_bid_code = ' || p_full_quantity_bid_code
6460                   || ', p_invitees_count = ' || p_invitees_count
6461                   || ', p_bid_list_type = ' || p_bid_list_type
6462                   || ', p_request_id = ' || p_request_id
6463                   || ', p_for_approval = ' || p_for_approval
6464                   || ', p_user_id = ' || p_user_id
6465                   || ', p_line_attribute_enabled_flag = ' || p_line_attribute_enabled_flag
6466                   || ', p_pf_type_allowed = ' || p_pf_type_allowed
6467                   || ', p_price_tiers_indicator = ' || p_price_tiers_indicator);
6468   END IF; --}
6469 
6470   -- Load the document related data.
6471   LOAD_DOCTYPE_NAME_DATA ();
6472   LOAD_BIZRULE_DATA (p_doctype_id);
6473 
6474   -- Errors will expire after seven days of creation
6475   l_expiration_date := SYSDATE + 7;
6476 
6477   l_user_id := p_user_id;
6478   l_login_id := FND_GLOBAL.LOGIN_ID;
6479 
6480   l_is_global_agreement := IS_GLOBAL_AGREEMENT (p_global_agreement_flag);
6481 
6482   SELECT PON_ITEM_PRICES_INTERFACE_S.NEXTVAL
6483   INTO l_batch_id
6484   FROM DUAL;
6485 
6486   x_batch_id := l_batch_id;
6487 
6488   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6489     FND_LOG.string(log_level => FND_LOG.level_statement,
6490       module  =>  g_module_prefix || l_module_name,
6491       message  => 'Validating Lines: Validations that do not require join with po line types');
6492   END IF; --}
6493 
6494   -- Validations that are done in this procedure do not require a join with
6495   -- po_line_types_b
6496   val_item_prices_all (
6497     p_auction_header_id, p_request_id, l_expiration_date, l_user_id,
6498     l_login_id, l_batch_id, p_auction_currency_precision,
6499     p_fnd_currency_precision, p_close_bidding_date, p_contract_type,
6500     p_global_agreement_flag, p_bid_ranking, p_doctype_id,
6501     p_invitees_count, p_bid_list_type);
6502 
6503   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6504     FND_LOG.string(log_level => FND_LOG.level_statement,
6505       module  =>  g_module_prefix || l_module_name,
6506       message  => 'Validating Lines: Validations that require join with po line types');
6507   END IF; --}
6508 
6509   -- Validations that are done in this procedure require a join with
6510   -- po_line_types_b
6511   val_item_prices_po_lines (
6512     p_auction_header_id, p_request_id, l_expiration_date, l_user_id,
6513     l_login_id, l_batch_id, p_doctype_id, p_contract_type, p_global_agreement_flag,
6514     p_auction_currency_precision, p_fnd_currency_precision);
6515 
6516   /*
6517    * ATTRIBUTE VALIDATIONS
6518    */
6519   -- Attribute validations only if the p_line_attribute_enabled_flag is set to Y
6520   IF (NVL (p_line_attribute_enabled_flag, 'Y') = 'Y') THEN
6521 
6522     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6523       FND_LOG.string(log_level => FND_LOG.level_statement,
6524         module  =>  g_module_prefix || l_module_name,
6525         message  => 'Validation attributes');
6526     END IF; --}
6527     val_attributes (
6528       p_auction_header_id, p_request_id, l_expiration_date, l_user_id,
6529       l_login_id, l_batch_id, p_full_quantity_bid_code, p_bid_ranking);
6530 
6531     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6532       FND_LOG.string(log_level => FND_LOG.level_statement,
6533         module  =>  g_module_prefix || l_module_name,
6534         message  => 'Validation attributes for uniqueness withing a line');
6535     END IF; --}
6536     val_attr_name_unique(
6537       p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6538       l_batch_id);
6539 
6540     -- Score validations only if the p_line_mas_enabled_flag is set to Y and if it is multi attribute scoring
6541     -- We are not checking for NVL (p_line_mas_enabled_flag, 'Y') = 'Y' because bid ranking can be set to
6542     -- MAS only if the condition is true
6543     IF (p_bid_ranking = 'MULTI_ATTRIBUTE_SCORING') THEN
6544 
6545       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6546         FND_LOG.string(log_level => FND_LOG.level_statement,
6547           module  =>  g_module_prefix || l_module_name,
6548           message  => 'Validation attribute scores');
6549       END IF; --}
6550       val_attr_scores(
6551         p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6552         l_batch_id);
6553 
6554     END IF;
6555   END IF;
6556 
6557   /*
6558    * SHIPMENTS VALIDATIONS
6559    */
6560   -- Shipment validation only if it is not an RFI and it is a BLANKET OR A CONTRACT
6561   -- and if price tiers indicator is price breaks, if price tiers indicator is price breaks then
6562   -- we can assume that negotiation is not an RFI and is either a BLANKET or a CONTRACT
6563   IF (p_price_tiers_indicator = 'PRICE_BREAKS') THEN
6564 
6565     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6566       FND_LOG.string(log_level => FND_LOG.level_statement,
6567         module  =>  g_module_prefix || l_module_name,
6568         message  => 'Validating price breaks');
6569     END IF; --}
6570     val_price_breaks (
6571       p_auction_header_id, p_close_bidding_date, p_request_id, l_expiration_date, l_user_id,
6572       l_login_id, l_batch_id, p_auction_currency_precision, p_po_start_date, p_po_end_date);
6573 
6574   END IF;
6575 
6576   /*
6577    * QUANTITY BASED PRICE TIERS VALIDATIONS
6578    */
6579   -- Shipment validation only if it is not an RFI
6580   -- and if price tiers indicator is Quantity based price tiers
6581   IF (p_price_tiers_indicator = 'QUANTITY_BASED') THEN
6582 
6583     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6584       FND_LOG.string(log_level => FND_LOG.level_statement,
6585         module  =>  g_module_prefix || l_module_name,
6586         message  => 'Validating quantity based price tiers');
6587     END IF; --}
6588     val_qty_based_price_tiers  (
6589       p_auction_header_id, p_close_bidding_date, p_request_id, l_expiration_date, l_user_id,
6590       l_login_id, l_batch_id,p_auction_currency_precision);
6591 
6592   END IF;
6593 
6594   /*
6595    * PRICE DIFFERENTIALS VALIDATIONS
6596    */
6597   -- Price differential validation only if this is an RFI or this is a global agreement
6598   IF (g_document_type_names (p_doctype_id) = PON_CONTERMS_UTL_PVT.SRC_REQUEST_FOR_INFORMATION OR
6599       l_is_global_agreement) THEN
6600 
6601     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6602       FND_LOG.string(log_level => FND_LOG.level_statement,
6603         module  =>  g_module_prefix || l_module_name,
6604         message  => 'Validating for unique price differentials');
6605     END IF; --}
6606     val_pd_unique(
6607       p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6608       l_batch_id);
6609 
6610     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6611       FND_LOG.string(log_level => FND_LOG.level_statement,
6612         module  =>  g_module_prefix || l_module_name,
6613         message  => 'Validating price differentials');
6614     END IF; --}
6615     val_price_differentials(
6616       p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6617       l_batch_id);
6618 
6619   END IF;
6620 
6621   /*
6622    * COST FACTOR VALIDATIONS
6623    */
6624   IF (p_pf_type_allowed <> 'NONE') THEN
6625 
6626     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6627       FND_LOG.string(log_level => FND_LOG.level_statement,
6628         module  =>  g_module_prefix || l_module_name,
6629         message  => 'Validating price elements');
6630     END IF; --}
6631     val_price_elements (p_auction_header_id, p_request_id, l_expiration_date, l_user_id,
6632       l_login_id, l_batch_id, p_auction_currency_precision, p_fnd_currency_precision,
6633       p_trading_partner_id);
6634 
6635     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6636       FND_LOG.string(log_level => FND_LOG.level_statement,
6637         module  =>  g_module_prefix || l_module_name,
6638         message  => 'Validation for unique price elements');
6639     END IF; --}
6640     val_pe_unique (
6641       p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6642       l_batch_id);
6643 
6644   END IF;
6645 
6646   -- Validate party exclusions only if this is not a large negotiation
6647   IF (nvl (p_large_neg_enabled_flag, 'N') <> 'Y') THEN
6648 
6649     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6650       FND_LOG.string(log_level => FND_LOG.level_statement,
6651         module  =>  g_module_prefix || l_module_name,
6652         message  => 'Validating party exclusions:');
6653     END IF; --}
6654     val_party_exclusions (
6655       p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id, l_batch_id);
6656 
6657   END IF;
6658 
6659   -- The reference data validation should happen only in case of publication
6660   -- and concurrent flow
6661   IF ('N' = p_for_approval AND p_request_id IS NOT NULL) THEN
6662     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6663       FND_LOG.string(log_level => FND_LOG.level_statement,
6664         module  =>  g_module_prefix || l_module_name,
6665         message  => 'Validating reference data');
6666     END IF; --}
6667     val_line_ref_data (
6668       p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6669       l_batch_id);
6670   END IF;
6671 
6672   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6673     FND_LOG.string(log_level => FND_LOG.level_statement,
6674       module  =>  g_module_prefix || l_module_name,
6675       message  => 'Validation for multi currency aution with amount based lines');
6676   END IF; --}
6677   val_line_amount_multi_curr (
6678     p_auction_header_id, p_allow_other_bid_currency, p_request_id, l_expiration_date,
6679     l_user_id, l_login_id, l_batch_id);
6680 
6681   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6682     FND_LOG.string(log_level => FND_LOG.level_statement,
6683       module  =>  g_module_prefix || l_module_name,
6684       message  => 'Validating if outside operation lines are included in a global agreement');
6685   END IF; --}
6686   val_outside_flag_exists (
6687     p_auction_header_id, l_is_global_agreement, p_request_id, l_expiration_date, l_user_id,
6688     l_login_id, l_batch_id);
6689 
6690   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6691     FND_LOG.string(log_level => FND_LOG.level_statement,
6692       module  =>  g_module_prefix || l_module_name,
6693       message  => 'Validating Complex work fields');
6694   END IF; --}
6695   validate_complexwork_lines (
6696     p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id,
6697     l_batch_id, p_fnd_currency_precision);
6698 
6699   IF p_progress_payment_type <> 'NONE' AND p_contract_type = 'STANDARD' THEN
6700     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6701       FND_LOG.string(log_level => FND_LOG.level_statement,
6702         module  =>  g_module_prefix || 'VALIDATE_LINES',
6703         message  => 'Validating payments:');
6704     END IF; --}
6705     VALIDATE_PAYMENTS (p_auction_header_id, p_request_id, l_expiration_date, l_user_id, l_login_id, l_batch_id, p_auction_currency_precision);
6706   END IF;
6707 
6708 EXCEPTION
6709   WHEN OTHERS THEN
6710     x_result := FND_API.G_RET_STS_UNEXP_ERROR;
6711     x_error_code := SQLCODE;
6712     x_error_message := SUBSTR(SQLERRM, 1, 100);
6713 
6714     IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.g_current_runtime_level) THEN
6715       FND_LOG.string (log_level => FND_LOG.level_exception,
6716         module  => g_module_prefix || l_module_name,
6717         message => 'Unexpected exception occured error_code = ' || x_error_code ||
6718           ', error_message = ' || x_error_message);
6719     END IF;
6720 
6721 END VALIDATE_LINES;
6722 
6723 PROCEDURE LOG_INTERFACE_ERROR (
6724   p_interface_type IN VARCHAR2,
6725   p_error_message_name IN VARCHAR2,
6726   p_token1_name IN VARCHAR2,
6727   p_token1_value IN VARCHAR2,
6728   p_token2_name IN VARCHAR2,
6729   p_token2_value IN VARCHAR2,
6730   p_request_id IN NUMBER,
6731   p_auction_header_id IN NUMBER,
6732   p_expiration_date IN DATE,
6733   p_user_id IN NUMBER
6734 ) IS
6735 BEGIN
6736 
6737   INSERT INTO PON_INTERFACE_ERRORS
6738   (
6739     INTERFACE_TYPE,
6740     ERROR_MESSAGE_NAME,
6741     TOKEN1_NAME,
6742     TOKEN1_VALUE,
6743     TOKEN2_NAME,
6744     TOKEN2_VALUE,
6745     REQUEST_ID,
6746     AUCTION_HEADER_ID,
6747     EXPIRATION_DATE,
6748     CREATED_BY,
6749     CREATION_DATE,
6750     LAST_UPDATED_BY,
6751     LAST_UPDATE_DATE,
6752     LAST_UPDATE_LOGIN
6753   )
6754   VALUES
6755   (
6756     p_interface_type, --INTERFACE_TYPE
6757     p_error_message_name, --ERROR_MESSAGE_NAME
6758     p_token1_name, -- TOKEN1_NAME
6759     p_token1_value, --TOKEN1_VALUE
6760     p_token2_name, --TOKEN2_NAME
6761     p_token2_value, -- TOKEN2_VALUE
6762     p_request_id, -- REQUEST_ID
6763     p_auction_header_id, -- AUCTION_HEADER_ID
6764     p_expiration_date, -- EXPIRATION_DATE
6765     p_user_id, -- CREATED_BY
6766     sysdate, -- CREATION_DATE
6767     p_user_id, -- LAST_UPDATED_BY
6768     sysdate, -- LAST_UPDATE_DATE
6769     FND_GLOBAL.LOGIN_ID -- LAST_UPDATE_LOGIN
6770   );
6771 END LOG_INTERFACE_ERROR;
6772 
6773 FUNCTION CHECK_ACTION_ERRORS_PRESENT (
6774   p_batch_id IN NUMBER
6775 ) RETURN BOOLEAN IS
6776 
6777 l_batch_id NUMBER;
6778 BEGIN
6779 
6780   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
6781     FND_LOG.string(log_level => FND_LOG.level_statement,
6782       module  =>  g_module_prefix || 'CHECK_ACTION_ERRORS_PRESENT',
6783       message  => 'Checking if any errors are present for batch id = ' || p_batch_id);
6784   END IF; --}
6785 
6786   SELECT
6787     BATCH_ID
6788   INTO
6789     l_batch_id
6790   FROM
6791     PON_INTERFACE_ERRORS
6792   WHERE
6793     BATCH_ID = p_batch_id AND
6794     ROWNUM =1;
6795 
6796   RETURN TRUE;
6797 
6798 EXCEPTION WHEN NO_DATA_FOUND THEN
6799   RETURN FALSE;
6800 
6801 END CHECK_ACTION_ERRORS_PRESENT;
6802 
6803 PROCEDURE RETRIEVE_ERRORS_AND_ROLLBACK (
6804   p_batch_id IN NUMBER
6805 ) IS
6806 l_interface_type                           PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6807 l_column_name                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6808 l_table_name                               PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6809 l_interface_line_id                        PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6810 l_error_message_name                       PON_NEG_COPY_DATATYPES_GRP.VARCHAR2000_TYPE;
6811 l_error_value                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR100_TYPE;
6812 l_created_by                               PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6813 l_creation_date                            PON_NEG_COPY_DATATYPES_GRP.SIMPLE_DATE_TYPE;
6814 l_last_updated_by                          PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6815 l_last_update_date                         PON_NEG_COPY_DATATYPES_GRP.SIMPLE_DATE_TYPE;
6816 l_last_update_login                        PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6817 l_request_id                               PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6818 l_entity_type                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6819 l_entity_attr_name                         PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6820 l_error_value_date                         PON_NEG_COPY_DATATYPES_GRP.SIMPLE_DATE_TYPE;
6821 l_error_value_number                       PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6822 l_error_value_datatype                     PON_NEG_COPY_DATATYPES_GRP.VARCHAR20_TYPE;
6823 l_auction_header_id                        PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6824 l_bid_number                               PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6825 l_line_number                              PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6826 l_attribute_name                           PON_NEG_COPY_DATATYPES_GRP.VARCHAR300_TYPE;
6827 l_price_element_type_id                    PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6828 l_shipment_number                          PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6829 l_price_differential_number                PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6830 l_expiration_date                          PON_NEG_COPY_DATATYPES_GRP.SIMPLE_DATE_TYPE;
6831 l_token1_name                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6832 l_token1_value                             PON_NEG_COPY_DATATYPES_GRP.VARCHAR300_TYPE;
6833 l_token2_name                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6834 l_token2_value                             PON_NEG_COPY_DATATYPES_GRP.VARCHAR300_TYPE;
6835 l_token3_name                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6836 l_token3_value                             PON_NEG_COPY_DATATYPES_GRP.VARCHAR300_TYPE;
6837 l_token4_name                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6838 l_token4_value                             PON_NEG_COPY_DATATYPES_GRP.VARCHAR300_TYPE;
6839 l_token5_name                              PON_NEG_COPY_DATATYPES_GRP.VARCHAR50_TYPE;
6840 l_token5_value                             PON_NEG_COPY_DATATYPES_GRP.VARCHAR300_TYPE;
6841 l_payment_id                               PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6842 l_bid_payment_id                           PON_NEG_COPY_DATATYPES_GRP.NUMBER_TYPE;
6843 BEGIN
6844 
6845   SELECT
6846     INTERFACE_TYPE,
6847     COLUMN_NAME,
6848     TABLE_NAME,
6849     INTERFACE_LINE_ID,
6850     ERROR_MESSAGE_NAME,
6851     ERROR_VALUE,
6852     CREATED_BY,
6853     CREATION_DATE,
6854     LAST_UPDATED_BY,
6855     LAST_UPDATE_DATE,
6856     LAST_UPDATE_LOGIN,
6857     REQUEST_ID,
6858     ENTITY_TYPE,
6859     ENTITY_ATTR_NAME,
6860     ERROR_VALUE_DATE,
6861     ERROR_VALUE_NUMBER,
6862     ERROR_VALUE_DATATYPE,
6863     AUCTION_HEADER_ID,
6864     BID_NUMBER,
6865     LINE_NUMBER,
6866     ATTRIBUTE_NAME,
6867     PRICE_ELEMENT_TYPE_ID,
6868     SHIPMENT_NUMBER,
6869     PRICE_DIFFERENTIAL_NUMBER,
6870     EXPIRATION_DATE,
6871     TOKEN1_NAME,
6872     TOKEN1_VALUE,
6873     TOKEN2_NAME,
6874     TOKEN2_VALUE,
6875     TOKEN3_NAME,
6876     TOKEN3_VALUE,
6877     TOKEN4_NAME,
6878     TOKEN4_VALUE,
6879     TOKEN5_NAME,
6880     TOKEN5_VALUE,
6881     PAYMENT_ID,
6882     BID_PAYMENT_ID
6883   BULK COLLECT INTO
6884     l_interface_type,
6885     l_column_name,
6886     l_table_name,
6887     l_interface_line_id,
6888     l_error_message_name,
6889     l_error_value,
6890     l_created_by,
6891     l_creation_date,
6892     l_last_updated_by,
6893     l_last_update_date,
6894     l_last_update_login,
6895     l_request_id,
6896     l_entity_type,
6897     l_entity_attr_name,
6898     l_error_value_date,
6899     l_error_value_number,
6900     l_error_value_datatype,
6901     l_auction_header_id,
6902     l_bid_number,
6903     l_line_number,
6904     l_attribute_name,
6905     l_price_element_type_id,
6906     l_shipment_number,
6907     l_price_differential_number,
6908     l_expiration_date,
6909     l_token1_name,
6910     l_token1_value,
6911     l_token2_name,
6912     l_token2_value,
6913     l_token3_name,
6914     l_token3_value,
6915     l_token4_name,
6916     l_token4_value,
6917     l_token5_name,
6918     l_token5_value,
6919     l_payment_id,
6920     l_bid_payment_id
6921   FROM
6922     PON_INTERFACE_ERRORS
6923   WHERE
6924     BATCH_ID = p_batch_id;
6925 
6926   ROLLBACK;
6927 
6928   FORALL x IN 1..l_interface_type.COUNT
6929   INSERT INTO PON_INTERFACE_ERRORS
6930   (
6931     INTERFACE_TYPE,
6932     COLUMN_NAME,
6933     TABLE_NAME,
6934     BATCH_ID,
6935     INTERFACE_LINE_ID,
6936     ERROR_MESSAGE_NAME,
6937     ERROR_VALUE,
6938     CREATED_BY,
6939     CREATION_DATE,
6940     LAST_UPDATED_BY,
6941     LAST_UPDATE_DATE,
6942     LAST_UPDATE_LOGIN,
6943     REQUEST_ID,
6944     ENTITY_TYPE,
6945     ENTITY_ATTR_NAME,
6946     ERROR_VALUE_DATE,
6947     ERROR_VALUE_NUMBER,
6948     ERROR_VALUE_DATATYPE,
6949     AUCTION_HEADER_ID,
6950     BID_NUMBER,
6951     LINE_NUMBER,
6952     ATTRIBUTE_NAME,
6953     PRICE_ELEMENT_TYPE_ID,
6954     SHIPMENT_NUMBER,
6955     PRICE_DIFFERENTIAL_NUMBER,
6956     EXPIRATION_DATE,
6957     TOKEN1_NAME,
6958     TOKEN1_VALUE,
6959     TOKEN2_NAME,
6960     TOKEN2_VALUE,
6961     TOKEN3_NAME,
6962     TOKEN3_VALUE,
6963     TOKEN4_NAME,
6964     TOKEN4_VALUE,
6965     TOKEN5_NAME,
6966     TOKEN5_VALUE,
6967     PAYMENT_ID,
6968     BID_PAYMENT_ID
6969   )
6970   VALUES
6971   (
6972     l_interface_type (x),
6973     l_column_name (x),
6974     l_table_name (x),
6975     p_batch_id,
6976     l_interface_line_id (x),
6977     l_error_message_name (x),
6978     l_error_value (x),
6979     l_created_by (x),
6980     l_creation_date (x),
6981     l_last_updated_by (x),
6982     l_last_update_date (x),
6983     l_last_update_login (x),
6984     l_request_id (x),
6985     l_entity_type (x),
6986     l_entity_attr_name (x),
6987     l_error_value_date (x),
6988     l_error_value_number (x),
6989     l_error_value_datatype (x),
6990     l_auction_header_id (x),
6991     l_bid_number (x),
6992     l_line_number (x),
6993     l_attribute_name (x),
6994     l_price_element_type_id (x),
6995     l_shipment_number (x),
6996     l_price_differential_number (x),
6997     l_expiration_date (x),
6998     l_token1_name (x),
6999     l_token1_value (x),
7000     l_token2_name (x),
7001     l_token2_value (x),
7002     l_token3_name (x),
7003     l_token3_value (x),
7004     l_token4_name (x),
7005     l_token4_value (x),
7006     l_token5_name (x),
7007     l_token5_value (x),
7008     l_payment_id (x),
7009     l_bid_payment_id (x)
7010   );
7011 
7012 END RETRIEVE_ERRORS_AND_ROLLBACK;
7013 
7014 PROCEDURE update_line_flag_seq_closedate (
7015   x_result OUT NOCOPY VARCHAR,
7016   x_error_code OUT NOCOPY VARCHAR,
7017   x_error_message OUT NOCOPY VARCHAR,
7018   p_user_id IN NUMBER,
7019   p_login_id IN NUMBER,
7020   p_auction_header_id IN NUMBER,
7021   p_close_bidding_date IN DATE,
7022   p_stag_closing_enabled_flag IN VARCHAR,
7023   p_curr_from_line_number IN NUMBER,
7024   p_curr_to_line_number IN NUMBER
7025 ) IS
7026 
7027 l_module_name VARCHAR2 (30);
7028 BEGIN
7029 
7030   l_module_name := 'update_line_flag_seq_closedate';
7031   x_result := FND_API.g_ret_sts_success;
7032 
7033   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7034     FND_LOG.string (log_level => FND_LOG.level_procedure,
7035       module => g_module_prefix || l_module_name,
7036       message => 'Entered procedure = ' || l_module_name);
7037   END IF;
7038 
7039   UPDATE pon_auction_item_prices_all paip
7040   SET
7041   -- the max sub line sequence number is set to the greatest
7042     -- max_sub_line_sequence_number between this round and the
7043     -- previous round
7044     max_sub_line_sequence_number = GREATEST (
7045       (
7046        SELECT
7047          NVL (MAX (sub_line_sequence_number),0)
7048        FROM
7049          pon_auction_item_prices_all
7050        WHERE
7051          auction_header_id=p_auction_header_id AND
7052          parent_line_number = paip.line_number AND
7053          group_type IN ('LOT_LINE', 'GROUP_LINE')
7054       ), NVL(max_sub_line_sequence_number,0))
7055   WHERE
7056     auction_header_id = p_auction_header_id AND
7057     line_number >= p_curr_from_line_number AND
7058     line_number <= p_curr_to_line_number AND
7059     group_type IN ('LOT', 'GROUP');
7060 
7061   UPDATE pon_auction_item_prices_all paip
7062   SET
7063     close_bidding_date = decode(p_stag_closing_enabled_flag, 'Y', close_bidding_date, p_close_bidding_date),
7064 
7065     -- If the line has any attributes this flag will be Y else N
7066     has_attributes_flag = NVL(
7067                  (SELECT 'Y'
7068                  FROM PON_AUCTION_ATTRIBUTES
7069                  WHERE AUCTION_HEADER_ID = p_auction_header_id
7070                  AND LINE_NUMBER = PAIP.LINE_NUMBER
7071                   AND ROWNUM = 1), 'N'),
7072 
7073     -- If the line has any shipments this flag will be Y else N
7074     has_shipments_flag = NVL (
7075                  (SELECT 'Y'
7076                   FROM pon_auction_shipments_all
7077                   WHERE auction_header_id = p_auction_header_id
7078                   AND line_number = paip.line_number
7079                   AND shipment_type = 'PRICE BREAK'
7080                   AND rownum = 1),'N'),
7081 
7082     -- If the line has any supplier price factors this flag will be Y else N
7083     has_price_elements_flag = NVL (
7084                  (SELECT 'Y'
7085                  FROM pon_price_elements
7086                  WHERE auction_header_id = p_auction_header_id
7087                   AND line_number = paip.line_number
7088                   AND pf_type = 'SUPPLIER'
7089                   AND rownum = 1), 'N'),
7090 
7091     -- If the line has any buyer price factors this flag will be Y else N
7092     has_buyer_pfs_flag = NVL (
7093                  (SELECT 'Y'
7094                  FROM pon_price_elements
7095                  WHERE auction_header_id = p_auction_header_id
7096                   AND line_number = paip.line_number
7097                   AND pf_type = 'BUYER'
7098                   AND rownum = 1),'N'),
7099 
7100     -- If the line has any price differentials this flag will be Y else N
7101     has_price_differentials_flag = NVL (
7102                  (SELECT 'Y'
7103                   FROM pon_price_differentials
7104                   WHERE auction_header_id = p_auction_header_id
7105                   AND line_number = paip.line_number
7106                   AND shipment_number = -1
7107                   AND rownum = 1),'N'),
7108 
7109      --complex work - If the line has any payments this flag will be Y else N
7110     has_Payments_flag = NVL(
7111                  (SELECT 'Y'
7112                  FROM PON_AUC_PAYMENTS_SHIPMENTS
7113                  WHERE AUCTION_HEADER_ID = p_auction_header_id
7114                  AND LINE_NUMBER = PAIP.LINE_NUMBER
7115                   AND ROWNUM = 1), 'N'),
7116 
7117      --Quantity tiers project - If the line has any quantity based price tiers this flag will be Y else N
7118     has_quantity_tiers = NVL (
7119                  (SELECT 'Y'
7120                  FROM PON_AUCTION_SHIPMENTS_ALL
7121                  WHERE AUCTION_HEADER_ID = p_auction_header_id
7122                   AND shipment_type = 'QUANTITY BASED'
7123                   AND LINE_NUMBER = PAIP.LINE_NUMBER
7124                   AND ROWNUM = 1),'N'),
7125      -- Is quantity scored flag is set to Y in case quantity there is a line
7126      -- attribute for quantity (sequence_number = QUANTITY_SEQ_NUMBER
7127     is_quantity_scored = NVL (
7128                  (SELECT 'Y'
7129                  FROM PON_AUCTION_ATTRIBUTES
7130                  WHERE AUCTION_HEADER_ID = p_auction_header_id
7131                  AND LINE_NUMBER = PAIP.LINE_NUMBER
7132                  AND SEQUENCE_NUMBER = -20
7133                  AND ROWNUM = 1), 'N'),
7134 
7135      -- Is quantity need by date scored flag is set to Y in case there is a line
7136      -- attribute for need by date (sequence_number = NEED_BY_DATE_SEQ_NUMBER
7137     is_need_by_date_scored = NVL (
7138                  (SELECT 'Y'
7139                  FROM PON_AUCTION_ATTRIBUTES
7140                  WHERE AUCTION_HEADER_ID = p_auction_header_id
7141                  AND LINE_NUMBER = PAIP.LINE_NUMBER
7142                  AND SEQUENCE_NUMBER = -10
7143                  AND ROWNUM = 1), 'N'),
7144     -- standard who columns
7145     last_update_date = sysdate,
7146     last_update_login = p_login_id,
7147     last_updated_by = p_user_id
7148   WHERE
7149     auction_header_id = p_auction_header_id AND
7150     line_number >= p_curr_from_line_number AND
7151     line_number <= p_curr_to_line_number;
7152 
7153   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7154     FND_LOG.string (log_level => FND_LOG.level_procedure,
7155       module => g_module_prefix || l_module_name,
7156       message => 'Leaving procedure = ' || l_module_name);
7157   END IF;
7158 
7159 EXCEPTION
7160   WHEN OTHERS THEN
7161     x_result := FND_API.G_RET_STS_UNEXP_ERROR;
7162     x_error_code := SQLCODE;
7163     x_error_message := SUBSTR(SQLERRM, 1, 100);
7164 
7165     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
7166       FND_LOG.string (log_level => FND_LOG.level_exception,
7167         module => g_module_prefix || l_module_name,
7168         message => 'Unexpected exception occured error_code = ' || x_error_code || ', error_message = ' || x_error_message);
7169     END IF;
7170 
7171 END update_line_flag_seq_closedate;
7172 
7173 PROCEDURE process_price_factors (p_auction_header_id IN NUMBER,
7174                                 p_user_id           IN NUMBER,
7175                                 p_login_id          IN NUMBER,
7176                                 p_from_line_number IN NUMBER,
7177                                 p_to_line_number IN NUMBER) IS
7178 
7179 l_module_name VARCHAR2(30);
7180 BEGIN
7181 
7182   l_module_name := 'process_price_factors';
7183   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7184     FND_LOG.string (log_level => FND_LOG.level_procedure,
7185       module => g_module_prefix || l_module_name,
7186       message => 'Entering procedure = ' || l_module_name);
7187   END IF;
7188 
7189   MERGE INTO pon_price_elements ppe
7190   USING
7191   (
7192     SELECT
7193       auction_header_id,
7194       line_number,
7195       order_type_lookup_code,
7196       unit_target_price,
7197       unit_display_target_flag
7198     FROM
7199       pon_auction_item_prices_all
7200     WHERE
7201       auction_header_id = p_auction_header_id AND
7202       (has_price_elements_flag = 'Y' OR has_buyer_pfs_flag = 'Y') AND
7203       line_number >= p_from_line_number AND
7204       line_number <= p_to_line_number
7205   )paip
7206 
7207   ON
7208   (
7209     paip.auction_header_id = ppe.auction_header_id AND
7210     paip.line_number = ppe.line_number AND
7211     ppe.price_element_type_id = -10
7212   )
7213 
7214   WHEN MATCHED THEN UPDATE
7215   SET
7216     pricing_basis = decode(paip.order_type_lookup_code, 'FIXED PRICE', 'FIXED_AMOUNT', 'PER_UNIT'),
7217     value = paip.unit_target_price,
7218     display_target_flag = unit_display_target_flag,
7219     last_update_date = sysdate,
7220     last_updated_by = p_user_id
7221 
7222   WHEN NOT MATCHED THEN INSERT
7223   (
7224     auction_header_id,
7225     line_number,
7226     list_id,
7227     price_element_type_id,
7228     pricing_basis,
7229     value,
7230     display_target_flag,
7231     sequence_number,
7232     creation_date,
7233     created_by,
7234     last_update_date,
7235     last_updated_by,
7236     pf_type,
7237     display_to_suppliers_flag
7238   )
7239   VALUES
7240   (
7241     paip.auction_header_id,
7242     paip.line_number,
7243     -1,
7244     -10,
7245     decode(paip.order_type_lookup_code, 'FIXED PRICE', 'FIXED_AMOUNT', 'PER_UNIT'),
7246     paip.unit_target_price,
7247     paip.unit_display_target_flag,
7248     -10,
7249     sysdate,
7250     p_user_id,
7251     sysdate,
7252     p_user_id,
7253     'SUPPLIER',
7254     'Y'
7255   );
7256 
7257   -- Populate the pon_pf_supplier_formula table
7258 
7259   MERGE INTO pon_pf_supplier_formula ppsf
7260   USING
7261   (
7262     SELECT
7263       paip.auction_header_id,
7264       paip.line_number,
7265       pbp.trading_partner_id,
7266       pbp.vendor_site_id,
7267       pbp.requested_supplier_id,
7268       sum(decode(ppe.pricing_basis, 'PER_UNIT', ppsv.value, 0)) unit_price,
7269       sum(decode(ppe.pricing_basis, 'FIXED_AMOUNT', ppsv.value, 0)) fixed_amount,
7270       1 + sum(decode(ppe.pricing_basis, 'PERCENTAGE', ppsv.value/100, 0)) percentage
7271     from
7272       pon_auction_item_prices_all paip,
7273       pon_bidding_parties pbp,
7274       pon_pf_supplier_values ppsv,
7275       pon_price_elements ppe
7276     where
7277       paip.auction_header_id = p_auction_header_id and
7278       pbp.auction_header_id = paip.auction_header_id and
7279       pbp.auction_header_id = ppsv.auction_header_id and
7280       paip.line_number >= p_from_line_number and
7281       paip.line_number <= p_to_line_number and
7282       pbp.sequence = ppsv.supplier_seq_number and
7283       paip.line_number = ppsv.line_number and
7284       ppsv.auction_header_id = ppe.auction_header_id and
7285       ppsv.line_number = ppe.line_number and
7286       ppsv.pf_seq_number = ppe.sequence_number
7287     group by
7288       paip.auction_header_id,
7289       paip.line_number,
7290       pbp.trading_partner_id,
7291       pbp.vendor_site_id,
7292       pbp.requested_supplier_id
7293   ) pfsdata
7294   ON
7295   (
7296     pfsdata.auction_header_id = ppsf.auction_header_id and
7297     pfsdata.line_number = ppsf.line_number and
7298     (pfsdata.trading_partner_id = ppsf.trading_partner_id
7299       OR pfsdata.requested_supplier_id = ppsf.requested_supplier_id) and
7300     pfsdata.vendor_site_id = ppsf.vendor_site_id
7301   )
7302   WHEN MATCHED THEN UPDATE
7303   SET
7304     unit_price = pfsdata.unit_price,
7305     fixed_amount = pfsdata.fixed_amount,
7306     percentage = pfsdata.percentage,
7307     last_update_date = sysdate,
7308     last_updated_by = p_user_id,
7309     last_update_login = p_login_id
7310   WHEN NOT MATCHED THEN INSERT
7311   (
7312     auction_header_id,
7313     line_number,
7314     trading_partner_id,
7315     vendor_site_id,
7316     requested_supplier_id,
7317     unit_price,
7318     fixed_amount,
7319     percentage,
7320     creation_date,
7321     created_by,
7322     last_update_date,
7323     last_updated_by,
7324     last_update_login
7325   )
7326   VALUES
7327   (
7328     pfsdata.auction_header_id,
7329     pfsdata.line_number,
7330     pfsdata.trading_partner_id,
7331     pfsdata.vendor_site_id,
7332     pfsdata.requested_supplier_id,
7333     pfsdata.unit_price,
7334     pfsdata.fixed_amount,
7335     pfsdata.percentage,
7336     sysdate,
7337     p_user_id,
7338     sysdate,
7339     p_user_id,
7340     p_login_id
7341   );
7342 
7343 END PROCESS_PRICE_FACTORS;
7344 
7345 --Complex work
7346 -- This procedure processes a batch of payments
7347 PROCEDURE Process_Payments_batch (
7348   x_result OUT NOCOPY VARCHAR,
7349   x_error_code OUT NOCOPY VARCHAR,
7350   x_error_message OUT NOCOPY VARCHAR,
7351   p_auction_header_id IN NUMBER,
7352   p_user_id IN NUMBER,
7353   p_login_id IN NUMBER,
7354   p_curr_from_line_number IN NUMBER,
7355   p_curr_to_line_number IN NUMBER
7356 ) IS
7357 
7358 l_module_name VARCHAR2 (30);
7359 
7360 BEGIN
7361 
7362   l_module_name := 'process_payments_batch';
7363   x_result := FND_API.g_ret_sts_success;
7364 
7365   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7366     FND_LOG.string (log_level => FND_LOG.level_procedure,
7367       module => g_module_prefix || l_module_name,
7368       message => 'Entered procedure = ' || l_module_name);
7369   END IF;
7370 
7371   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7372     FND_LOG.string (log_level => FND_LOG.level_procedure,
7373       module => g_module_prefix || l_module_name,
7374       message => 'Update Payments Fields = ' || l_module_name);
7375   END IF;
7376 
7377   UPDATE pon_auc_payments_shipments pay
7378   SET
7379     SHIP_TO_LOCATION_ID = null,
7380     WORK_APPROVER_USER_ID = null,
7381     NOTE_TO_BIDDERS = null,
7382     PROJECT_ID = null,
7383     PROJECT_TASK_ID = null,
7384     PROJECT_AWARD_ID = null,
7385     PROJECT_EXPENDITURE_TYPE = null,
7386     PROJECT_EXP_ORGANIZATION_ID = null,
7387     PROJECT_EXPENDITURE_ITEM_DATE = null,
7388     -- standard who columns
7389     last_update_date = sysdate,
7390     last_update_login = p_login_id,
7391     last_updated_by = p_user_id
7392   WHERE
7393     auction_header_id = p_auction_header_id  AND
7394     line_number >= p_curr_from_line_number AND
7395     line_number <= p_curr_to_line_number;
7396 
7397    IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7398     FND_LOG.string (log_level => FND_LOG.level_procedure,
7399       module => g_module_prefix || l_module_name,
7400       message => 'Before call Delete_Payment_Attachments = ' || l_module_name);
7401    END IF;
7402 
7403 
7404    PON_NEGOTIATION_HELPER_PVT.Delete_Payment_Attachments(
7405       p_auction_header_id => p_auction_header_id,
7406       p_curr_from_line_number => p_curr_from_line_number,
7407       p_curr_to_line_number => p_curr_to_line_number);
7408 
7409   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7410     FND_LOG.string (log_level => FND_LOG.level_procedure,
7411       module => g_module_prefix || l_module_name,
7412       message => 'After Call Delete_Payment_Attachments = ' || l_module_name);
7413    END IF;
7414 
7415   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7416     FND_LOG.string (log_level => FND_LOG.level_procedure,
7417       module => g_module_prefix || l_module_name,
7418       message => 'Leaving procedure = ' || l_module_name);
7419   END IF;
7420 
7421 EXCEPTION
7422   WHEN OTHERS THEN
7423     x_result := FND_API.G_RET_STS_UNEXP_ERROR;
7424     x_error_code := SQLCODE;
7425     x_error_message := SUBSTR(SQLERRM, 1, 100);
7426 
7427     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
7428       FND_LOG.string (log_level => FND_LOG.level_exception,
7429         module => g_module_prefix || l_module_name,
7430         message => 'Unexpected exception occured error_code = ' || x_error_code || ', error_message = ' || x_error_message);
7431     END IF;
7432 
7433 END Process_Payments_batch;
7434 
7435 --Complex work
7436 -- This procedure processes a batch of payments
7437 PROCEDURE Process_Payments_auto (
7438   x_result OUT NOCOPY VARCHAR,
7439   x_error_code OUT NOCOPY VARCHAR,
7440   x_error_message OUT NOCOPY VARCHAR,
7441   p_auction_header_id IN NUMBER,
7442   p_user_id IN NUMBER,
7443   p_login_id IN NUMBER,
7444   p_curr_from_line_number IN NUMBER,
7445   p_curr_to_line_number IN NUMBER
7446 ) IS
7447   PRAGMA AUTONOMOUS_TRANSACTION;
7448 
7449 l_module_name VARCHAR2 (30);
7450 
7451 BEGIN
7452 
7453   l_module_name := 'process_payments_auto';
7454   x_result := FND_API.g_ret_sts_success;
7455 
7456   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7457     FND_LOG.string (log_level => FND_LOG.level_procedure,
7458       module => g_module_prefix || l_module_name,
7459       message => 'Entered procedure = ' || l_module_name);
7460   END IF;
7461 
7462     Process_Payments_batch (
7463      x_result => x_result ,
7464      x_error_code => x_error_code ,
7465      x_error_message => x_error_message ,
7466      p_auction_header_id => p_auction_header_id ,
7467      p_user_id => p_user_id ,
7468      p_login_id => p_login_id ,
7469      p_curr_from_line_number => p_curr_from_line_number ,
7470      p_curr_to_line_number => p_curr_to_line_number);
7471 
7472      IF (x_result <> FND_API.g_ret_sts_success) THEN
7473       ROLLBACK;
7474       return;
7475     END IF;
7476 
7477     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7478       FND_LOG.string(log_level => FND_LOG.level_statement,
7479         module  =>  g_module_prefix || l_module_name,
7480         message  => 'Commiting data for lines between ' || p_curr_from_line_number || ' and ' || p_curr_to_line_number);
7481     END IF; --}
7482 
7483     COMMIT;
7484 
7485   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7486     FND_LOG.string (log_level => FND_LOG.level_procedure,
7487       module => g_module_prefix || l_module_name,
7488       message => 'Leaving procedure = ' || l_module_name);
7489   END IF;
7490 
7491 EXCEPTION
7492   WHEN OTHERS THEN
7493     x_result := FND_API.G_RET_STS_UNEXP_ERROR;
7494     x_error_code := SQLCODE;
7495     x_error_message := SUBSTR(SQLERRM, 1, 100);
7496     Rollback;
7497 
7498     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
7499       FND_LOG.string (log_level => FND_LOG.level_exception,
7500         module => g_module_prefix || l_module_name,
7501         message => 'Unexpected exception occured error_code = ' || x_error_code || ', error_message = ' || x_error_message);
7502     END IF;
7503 
7504 END Process_Payments_auto;
7505 
7506 --Complex work
7507 -- This procedure nullifies the attributes that should not be populated
7508 --if a supplier is allowed to enter payments and also deletes the attachments to
7509 -- those payments for a batch of lines
7510 PROCEDURE Process_Payments (
7511   x_result OUT NOCOPY VARCHAR,
7512   x_error_code OUT NOCOPY VARCHAR,
7513   x_error_message OUT NOCOPY VARCHAR,
7514   p_auction_header_id IN NUMBER,
7515   p_user_id IN NUMBER,
7516   p_login_id IN NUMBER
7517 ) IS
7518 
7519 
7520 l_module_name VARCHAR2 (30);
7521 l_max_line_number NUMBER;
7522 l_batch_start NUMBER;
7523 l_batch_end NUMBER;
7524 l_batch_size NUMBER;
7525 
7526 BEGIN
7527 
7528   l_module_name := 'process_payments';
7529   x_result := FND_API.g_ret_sts_success;
7530 
7531   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7532     FND_LOG.string (log_level => FND_LOG.level_procedure,
7533       module => g_module_prefix || l_module_name,
7534       message => 'Entered procedure = ' || l_module_name);
7535   END IF;
7536 
7537   l_batch_size := PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
7538 
7539    SELECT NVL (MAX (line_number), 0)
7540    INTO l_max_line_number
7541    FROM pon_auction_item_prices_all
7542    WHERE auction_header_id = p_auction_header_id;
7543 
7544   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7545     FND_LOG.string (log_level => FND_LOG.level_procedure,
7546       module => g_module_prefix || l_module_name,
7547       message => 'Update Payments Fields = ' || l_module_name);
7548   END IF;
7549 
7550   -- Define the initial batch range (line numbers are indexed from 1)
7551   l_batch_start := 1;
7552 
7553   --determine the max line number for this batch
7554   IF (l_max_line_number <= l_batch_size) THEN
7555     l_batch_end := l_max_line_number;
7556        IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7557       FND_LOG.string(log_level => FND_LOG.level_statement,
7558         module  =>  g_module_prefix || l_module_name,
7559         message  => 'before call to  Process_Payments_batch  l_curr_to_line_number = ' || l_batch_end ||
7560                     ' p_auction_header_id = ' || p_auction_header_id ||
7561                     ', p_user_id = ' || p_user_id ||
7562                     ', p_login_id = ' || p_login_id ||
7563                     ', p_curr_from_line_number = ' || l_batch_start ||
7564                     ', p_curr_to_line_number = ' || l_batch_end);
7565     END IF; --}
7566 
7567    Process_Payments_batch (
7568      x_result => x_result ,
7569      x_error_code => x_error_code ,
7570      x_error_message => x_error_message ,
7571      p_auction_header_id => p_auction_header_id ,
7572      p_user_id => p_user_id ,
7573      p_login_id => p_login_id ,
7574      p_curr_from_line_number => l_batch_start ,
7575      p_curr_to_line_number => l_batch_end);
7576 
7577 
7578    IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7579     FND_LOG.string (log_level => FND_LOG.level_procedure,
7580       module => g_module_prefix || l_module_name,
7581       message => 'After Call Process_Payments_batch = ' || l_module_name);
7582     END IF;
7583 
7584 
7585   ELSE
7586     l_batch_end := l_batch_size;
7587 
7588   -- loop for each batch
7589   WHILE (l_batch_start <= l_max_line_number) LOOP --{
7590 
7591     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7592       FND_LOG.string(log_level => FND_LOG.level_statement,
7593         module  =>  g_module_prefix || l_module_name,
7594         message  => 'before call to  Process_Payments_auto  l_curr_to_line_number = ' || l_batch_end ||
7595                     ' p_auction_header_id = ' || p_auction_header_id ||
7596                     ', p_user_id = ' || p_user_id ||
7597                     ', p_login_id = ' || p_login_id ||
7598                     ', p_curr_from_line_number = ' || l_batch_start ||
7599                     ', p_curr_to_line_number = ' || l_batch_end);
7600     END IF; --}
7601 
7602    Process_Payments_auto (
7603      x_result => x_result ,
7604      x_error_code => x_error_code ,
7605      x_error_message => x_error_message ,
7606      p_auction_header_id => p_auction_header_id ,
7607      p_user_id => p_user_id ,
7608      p_login_id => p_login_id ,
7609      p_curr_from_line_number => l_batch_start ,
7610      p_curr_to_line_number => l_batch_end);
7611 
7612 
7613    IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7614     FND_LOG.string (log_level => FND_LOG.level_procedure,
7615       module => g_module_prefix || l_module_name,
7616       message => 'After Call Process_Payments_auto = ' || l_module_name);
7617     END IF;
7618 
7619    IF (x_result <> FND_API.g_ret_sts_success) THEN
7620       return;
7621     END IF;
7622 
7623     -- Find the new batch range
7624     l_batch_start := l_batch_end + 1;
7625     IF (l_batch_end + l_batch_size > l_max_line_number) THEN
7626       l_batch_end := l_max_line_number;
7627     ELSE
7628       l_batch_end := l_batch_end + l_batch_size;
7629     END IF;
7630 
7631     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7632       FND_LOG.string(log_level => FND_LOG.level_statement,
7633         module  =>  g_module_prefix || l_module_name,
7634         message  => 'Calculated new l_curr_from_line_number = ' || l_batch_start);
7635     END IF; --}
7636 
7637   END LOOP; --}
7638 
7639  END IF;--}
7640   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7641     FND_LOG.string (log_level => FND_LOG.level_procedure,
7642       module => g_module_prefix || l_module_name,
7643       message => 'Leaving procedure = ' || l_module_name);
7644   END IF;
7645 
7646 EXCEPTION
7647   WHEN OTHERS THEN
7648     x_result := FND_API.G_RET_STS_UNEXP_ERROR;
7649     x_error_code := SQLCODE;
7650     x_error_message := SUBSTR(SQLERRM, 1, 100);
7651 
7652     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
7653       FND_LOG.string (log_level => FND_LOG.level_exception,
7654         module => g_module_prefix || l_module_name,
7655         message => 'Unexpected exception occured error_code = ' || x_error_code || ', error_message = ' || x_error_message);
7656     END IF;
7657 
7658 END Process_Payments;
7659 
7660 PROCEDURE update_header_before_publish (
7661   x_result OUT NOCOPY VARCHAR,
7662   x_error_code OUT NOCOPY VARCHAR,
7663   x_error_message OUT NOCOPY VARCHAR,
7664   p_auction_header_id IN NUMBER
7665 ) IS
7666 
7667 l_line_number NUMBER;
7668 l_attributes_exist VARCHAR2(30);
7669 l_has_price_elements VARCHAR2(30);
7670 l_has_pe_for_all_items VARCHAR2(30);
7671 l_module_name VARCHAR2(30);
7672 
7673 BEGIN
7674   l_module_name := 'update_header_before_publish';
7675   x_result := FND_API.G_RET_STS_SUCCESS;
7676 
7677 --MAX_DOCUMENT_LINE_NUMBER and MAX_INTERNAL_LINE_NUMBER on the header
7678 --HAS_ATTRIBUTES_FLAG, HAS_PRICE_ELEMENTS_FLAG, HAS_PE_FOR_ALL_ITEMS
7679   BEGIN
7680     SELECT 'YES'
7681     INTO l_attributes_exist
7682     FROM PON_AUCTION_ATTRIBUTES
7683     WHERE AUCTION_HEADER_ID = p_auction_header_id
7684     AND ROWNUM = 1;
7685 
7686     EXCEPTION WHEN NO_DATA_FOUND THEN --{
7687       l_attributes_exist := 'NONE';
7688   END;
7689 
7690   IF (l_attributes_exist = 'YES') THEN --{
7691     BEGIN
7692       SELECT 'BOTH'
7693       INTO l_attributes_exist
7694       FROM PON_AUCTION_ATTRIBUTES
7695       WHERE AUCTION_HEADER_ID = p_auction_header_id
7696       AND MANDATORY_FLAG = 'Y'
7697       AND ROWNUM = 1;
7698 
7699       EXCEPTION WHEN NO_DATA_FOUND THEN --{
7700         l_attributes_exist := 'OPTIONAL';
7701     END;
7702   END IF; --}
7703 
7704   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7705     FND_LOG.string(log_level => FND_LOG.level_statement,
7706       module  =>  g_module_prefix || l_module_name,
7707       message  => 'Done getting the flag l_attributes_exist = ' || l_attributes_exist);
7708   END IF; --}
7709 
7710   BEGIN
7711 
7712     SELECT 'Y'
7713     INTO l_has_price_elements
7714     FROM PON_PRICE_ELEMENTS
7715     WHERE AUCTION_HEADER_ID = p_auction_header_id
7716     AND ROWNUM = 1;
7717 
7718     EXCEPTION WHEN NO_DATA_FOUND THEN --{
7719       l_has_price_elements := 'N';
7720   END;
7721 
7722   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7723     FND_LOG.string(log_level => FND_LOG.level_statement,
7724       module  =>  g_module_prefix || l_module_name,
7725       message  => 'Done getting the flag l_has_price_elements = ' || l_has_price_elements);
7726   END IF; --}
7727 
7728   IF (l_has_price_elements = 'Y') THEN --{
7729 
7730     BEGIN
7731       SELECT 'N'
7732       INTO l_has_pe_for_all_items
7733       FROM PON_AUCTION_ITEM_PRICES_ALL PAIP
7734       WHERE PAIP.AUCTION_HEADER_ID = P_AUCTION_HEADER_ID AND
7735       HAS_PRICE_ELEMENTS_FLAG = 'N' AND
7736       HAS_BUYER_PFS_FLAG = 'N' AND
7737       ROWNUM = 1;
7738 
7739       EXCEPTION WHEN NO_DATA_FOUND THEN --{
7740         l_has_pe_for_all_items := 'Y';
7741     END;
7742   ELSE
7743 
7744     l_has_pe_for_all_items := 'N';
7745   END IF; --}
7746 
7747   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7748     FND_LOG.string(log_level => FND_LOG.level_statement,
7749       module  =>  g_module_prefix || l_module_name,
7750       message  => 'Done getting the flag l_has_pe_for_all_items = ' || l_has_pe_for_all_items);
7751   END IF; --}
7752 
7753 
7754   UPDATE
7755     PON_AUCTION_HEADERS_ALL PAHA
7756   SET
7757     ATTRIBUTES_EXIST = l_attributes_exist,
7758     HAS_PRICE_ELEMENTS = l_has_price_elements,
7759     HAS_PE_FOR_ALL_ITEMS = l_has_pe_for_all_items,
7760     MAX_INTERNAL_LINE_NUM = GREATEST (NVL (PAHA.MAX_INTERNAL_LINE_NUM,0),
7761                                          (SELECT
7762                                             MAX(PAIP.LINE_NUMBER)
7763                                           FROM
7764                                             PON_AUCTION_ITEM_PRICES_ALL PAIP
7765                                           WHERE
7766                                             PAIP.AUCTION_HEADER_ID = p_auction_header_id)),
7767     MAX_DOCUMENT_LINE_NUM = GREATEST (NVL (PAHA.MAX_DOCUMENT_LINE_NUM,0),
7768                                          (SELECT
7769                                             MAX(PAIP.SUB_LINE_SEQUENCE_NUMBER)
7770                                           FROM
7771                                             PON_AUCTION_ITEM_PRICES_ALL PAIP
7772                                           WHERE
7773                                             PAIP.GROUP_TYPE IN ('LOT', 'GROUP', 'LINE')
7774                                             AND PAIP.AUCTION_HEADER_ID = p_auction_header_id))
7775   WHERE
7776     PAHA.AUCTION_HEADER_ID = p_auction_header_id;
7777 
7778 EXCEPTION
7779   WHEN OTHERS THEN
7780     x_result := FND_API.G_RET_STS_UNEXP_ERROR;
7781     x_error_code := SQLCODE;
7782     x_error_message := SUBSTR(SQLERRM, 1, 100);
7783 
7784     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
7785       FND_LOG.string (log_level => FND_LOG.level_exception,
7786         module => g_module_prefix || l_module_name,
7787         message => 'Unexpected exception occured error_code = ' ||
7788               x_error_code || ', error_message = ' || x_error_message);
7789     END IF;
7790 
7791 END update_header_before_publish;
7792 
7793 PROCEDURE update_lines_before_publish (
7794   x_result OUT NOCOPY VARCHAR,
7795   x_error_code OUT NOCOPY VARCHAR,
7796   x_error_message OUT NOCOPY VARCHAR,
7797   p_auction_header_id IN NUMBER,
7798   p_close_bidding_date IN DATE,
7799   p_user_id IN NUMBER,
7800   p_login_id IN NUMBER
7801 ) IS
7802 
7803 l_large_neg_enabled_flag VARCHAR2(2);
7804 l_complete_flag VARCHAR2(2);
7805 l_stag_closing_enabled_flag VARCHAR2(1);
7806 
7807 l_max_line_number NUMBER;
7808 l_batch_start NUMBER;
7809 l_batch_end NUMBER;
7810 l_supplier_payments PON_AUCTION_HEADERS_ALL.SUPPLIER_ENTERABLE_PYMT_FLAG%TYPE;
7811 
7812 l_batch_size NUMBER;
7813 l_module_name VARCHAR2(30);
7814 BEGIN
7815 
7816   l_batch_size := PON_LARGE_AUCTION_UTIL_PKG.BATCH_SIZE;
7817   l_module_name := 'update_lines_before_publish';
7818   x_result := FND_API.g_ret_sts_success;
7819 
7820   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7821     FND_LOG.string(log_level => FND_LOG.level_statement,
7822       module  =>  g_module_prefix || l_module_name,
7823       message  => 'Batch size is = ' || l_batch_size);
7824   END IF; --}
7825 
7826   SELECT large_neg_enabled_flag, complete_flag, supplier_enterable_pymt_flag,
7827        nvl2(staggered_closing_interval,'Y','N')
7828   INTO l_large_neg_enabled_flag, l_complete_flag, l_supplier_payments,
7829        l_stag_closing_enabled_flag
7830   FROM pon_auction_headers_all
7831   WHERE auction_header_id = p_auction_header_id;
7832 
7833   SELECT NVL (MAX (line_number), 0)
7834   INTO l_max_line_number
7835   FROM pon_auction_item_prices_all
7836   WHERE auction_header_id = p_auction_header_id;
7837 
7838   -- clean up from any previous failures
7839 
7840   -- delete data from pon_pf_supplier_values before
7841   -- calling the pon_lrg_draft_to_ord_pf_copy procedure to populate it again
7842   -- Only for large auctions
7843 
7844   IF (l_large_neg_enabled_flag = 'Y') THEN
7845     DELETE FROM
7846       pon_pf_supplier_values
7847     WHERE
7848       auction_header_id = p_auction_header_id;
7849   END IF;
7850 
7851   -- clean up the pon_price_elements table of any line type price elements:
7852   -- why we need a clean up?
7853   -- a. After a failure the user might have deleted all price elements from a line, in which case this row should not be present
7854   -- b. After a failure the user might have deleted the line (the price element row will not have a parent ...) and created another
7855   --    (we reuse the line numbers)
7856 
7857   DELETE FROM
7858     pon_price_elements
7859   WHERE
7860     auction_header_id = p_auction_header_id and
7861     price_element_type_id = -10;
7862 
7863   -- clean up the pon_pf_supplier_formula table of any rows for this auction:
7864   -- why we need a clean up?
7865   -- a. After a failure the user might have deleted all price elements from a line
7866 
7867   DELETE FROM
7868     pon_pf_supplier_formula
7869   WHERE
7870     auction_header_id = p_auction_header_id;
7871 
7872   COMMIT;
7873 
7874   -- calling update_line_flag_seq_closedate process_price_factors, pon_lrg_draft_to_ord_pf_copy
7875   -- in batches
7876 
7877   -- Define the initial batch range (line numbers are indexed from 1)
7878   l_batch_start := 1;
7879 
7880   --determine the max line number for this batch
7881   IF (l_max_line_number <= l_batch_size) THEN
7882     l_batch_end := l_max_line_number;
7883   ELSE
7884     l_batch_end := l_batch_size;
7885   END IF;
7886 
7887   -- loop for each batch
7888   WHILE (l_batch_start <= l_max_line_number) LOOP --{
7889 
7890     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7891       FND_LOG.string(log_level => FND_LOG.level_statement,
7892         module  =>  g_module_prefix || l_module_name,
7893         message  => 'Calculated new l_curr_to_line_number = ' || l_batch_end ||
7894                     ' Calling process_price_factors, pon_lrg_draft_to_ord_pf_copy '||
7895                     ' and update_line_flag_seq_closedate with' ||
7896                     ' p_auction_header_id = ' || p_auction_header_id ||
7897                     ', p_user_id = ' || p_user_id ||
7898                     ', p_login_id = ' || p_login_id ||
7899                     ', p_curr_from_line_number = ' || l_batch_start ||
7900                     ', p_curr_to_line_number = ' || l_batch_end);
7901     END IF; --}
7902 
7903     -- set the flags, sequences and close data on the lines
7904 
7905     update_line_flag_seq_closedate (
7906       x_result => x_result,
7907       x_error_code => x_error_code,
7908       x_error_message => x_error_message,
7909       p_user_id => p_user_id,
7910       p_login_id => p_login_id,
7911       p_auction_header_id => p_auction_header_id,
7912       p_close_bidding_date => p_close_bidding_date,
7913       p_stag_closing_enabled_flag => l_stag_closing_enabled_flag,
7914       p_curr_from_line_number => l_batch_start,
7915       p_curr_to_line_number => l_batch_end);
7916 
7917     IF (x_result <> FND_API.g_ret_sts_success) THEN
7918       return;
7919     END IF;
7920 
7921     -- in case of a large auction call this procedure
7922 
7923     IF ('Y' = l_large_neg_enabled_flag) THEN
7924       PON_NEGOTIATION_COPY_GRP.pon_lrg_draft_to_ord_pf_copy (
7925         p_source_auction_hdr_id => p_auction_header_id,
7926         p_destination_auction_hdr_id => p_auction_header_id,
7927         p_user_id => p_user_id,
7928         p_from_line_number => l_batch_start,
7929         p_to_line_number => l_batch_end);
7930     END IF;
7931 
7932     -- populate the pon_price_elements table and the pon_pf_supplier_formula table (MERGE)
7933 
7934     process_price_factors (
7935       p_auction_header_id => p_auction_header_id,
7936       p_user_id => p_user_id,
7937       p_login_id => p_login_id,
7938       p_from_line_number => l_batch_start,
7939       p_to_line_number => l_batch_end);
7940 
7941     IF (x_result <> FND_API.g_ret_sts_success) THEN
7942       return;
7943     END IF;
7944 
7945     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7946       FND_LOG.string(log_level => FND_LOG.level_statement,
7947         module  =>  g_module_prefix || l_module_name,
7948         message  => 'Commiting data for lines between ' || l_batch_start || ' and ' || l_batch_end);
7949     END IF; --}
7950 
7951     COMMIT;
7952 
7953     -- Find the new batch range
7954     l_batch_start := l_batch_end + 1;
7955     IF (l_batch_end + l_batch_size > l_max_line_number) THEN
7956       l_batch_end := l_max_line_number;
7957     ELSE
7958       l_batch_end := l_batch_end + l_batch_size;
7959     END IF;
7960 
7961     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
7962       FND_LOG.string(log_level => FND_LOG.level_statement,
7963         module  =>  g_module_prefix || l_module_name,
7964         message  => 'Calculated new l_curr_from_line_number = ' || l_batch_start);
7965     END IF; --}
7966 
7967   END LOOP; --}
7968 
7969 EXCEPTION
7970   WHEN OTHERS THEN
7971     x_result := FND_API.g_ret_sts_unexp_error;
7972     x_error_code := SQLCODE;
7973     x_error_message := SUBSTR(SQLERRM, 1, 100);
7974 
7975     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
7976       FND_LOG.string (log_level => FND_LOG.level_exception,
7977         module => g_module_prefix || l_module_name,
7978         message => 'Unexpected exception occured error_code = ' || x_error_code || ', error_message = ' || x_error_message);
7979     END IF;
7980 END update_lines_before_publish;
7981 
7982 PROCEDURE update_before_publish (
7983   x_result OUT NOCOPY VARCHAR2,
7984   x_error_code OUT NOCOPY VARCHAR2,
7985   x_error_message OUT NOCOPY VARCHAR2,
7986   p_auction_header_id IN NUMBER,
7987   p_close_bidding_date IN DATE,
7988   p_user_id IN NUMBER,
7989   p_login_id IN NUMBER
7990 ) IS
7991 
7992 l_module_name VARCHAR2 (30);
7993 BEGIN
7994 
7995   l_module_name := 'update_before_publish';
7996   x_result := FND_API.g_ret_sts_success;
7997 
7998   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
7999     FND_LOG.string (log_level => FND_LOG.level_procedure,
8000       module => g_module_prefix || l_module_name,
8001       message => 'Entered procedure = ' || l_module_name);
8002   END IF;
8003 
8004   -- set the auction_status to draft and the complete flag to Y
8005 
8006   UPDATE
8007     pon_auction_headers_all
8008   SET
8009     auction_status = 'DRAFT',
8010     last_updated_by = p_user_id,
8011     last_update_date = sysdate
8012   WHERE
8013     auction_header_id = p_auction_header_id;
8014 
8015   -- update the lines
8016   update_lines_before_publish (
8017     x_result,
8018     x_error_code,
8019     x_error_message,
8020     p_auction_header_id,
8021     p_close_bidding_date,
8022     p_user_id,
8023     p_login_id);
8024 
8025   IF (x_result <> FND_API.g_ret_sts_success) THEN
8026     return;
8027   END IF;
8028 
8029   -- update the header
8030   update_header_before_publish (
8031     x_result,
8032     x_error_code,
8033     x_error_message,
8034     p_auction_header_id);
8035 
8036   IF (x_result <> FND_API.g_ret_sts_success) THEN
8037     return;
8038   END IF;
8039 
8040   -- set the auction_status to active and the complete flag to Y
8041 
8042   UPDATE
8043     pon_auction_headers_all
8044   SET
8045     auction_status = 'ACTIVE',
8046     last_updated_by = p_user_id,
8047     last_update_date = sysdate
8048   WHERE
8049     auction_header_id = p_auction_header_id;
8050 
8051   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8052     FND_LOG.string (log_level => FND_LOG.level_procedure,
8053       module => g_module_prefix || l_module_name,
8054       message => 'Leaving procedure = ' || l_module_name);
8055   END IF;
8056 
8057 EXCEPTION
8058   WHEN OTHERS THEN
8059     x_result := FND_API.g_ret_sts_unexp_error;
8060     x_error_code := SQLCODE;
8061     x_error_message := SUBSTR(SQLERRM, 1, 100);
8062 
8063     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
8064       FND_LOG.string (log_level => FND_LOG.level_exception,
8065         module => g_module_prefix || l_module_name,
8066         message => 'Unexpected exception occured error_code = ' || x_error_code || ', error_message = ' || x_error_message);
8067     END IF;
8068 END update_before_publish;
8069 
8070 PROCEDURE report_concurrent_failure (
8071   x_result OUT NOCOPY VARCHAR2,
8072   x_error_code OUT NOCOPY VARCHAR2,
8073   x_error_message OUT NOCOPY VARCHAR2,
8074   p_request_id IN NUMBER,
8075   p_user_name IN VARCHAR2,
8076   p_auction_header_id IN NUMBER,
8077   p_program_type_code IN VARCHAR2
8078 ) IS
8079 
8080 l_module_name VARCHAR2 (30);
8081 BEGIN
8082 
8083   l_module_name := 'report_concurrent_failure';
8084   x_result := FND_API.g_ret_sts_success;
8085 
8086   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8087     FND_LOG.string (log_level => FND_LOG.level_procedure,
8088       module => g_module_prefix || l_module_name,
8089       message => 'Entered procedure = ' || l_module_name);
8090   END IF;
8091 
8092   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8093     FND_LOG.string(log_level => FND_LOG.level_statement,
8094       module  =>  g_module_prefix || 'report_concurrent_failure',
8095       message  => 'Calling the notification genration procedure to inform failure'
8096                   || ', p_request_id = ' || p_request_id
8097                   || ', p_messagetype = ' || 'E'
8098                   || ', p_RecepientUsername = ' || p_user_name
8099                   || ', p_recepientType = ' || 'BUYER'
8100                   || ', p_auction_header_id = ' || p_auction_header_id
8101                   || ', p_ProgramTypeCode = ' || p_program_type_code
8102                   || ', p_DestinationPageCode = ' || 'PON_CONCURRENT_ERRORS'
8103                   || ', p_bid_number = NULL');
8104   END IF; --}
8105 
8106   PON_WF_UTL_PKG.ReportConcProgramStatus (
8107     p_request_id => p_request_id,
8108     p_messagetype => 'E',
8109     p_RecepientUsername => p_user_name,
8110     p_recepientType =>'BUYER',
8111     p_auction_header_id => p_auction_header_id,
8112     p_ProgramTypeCode => p_program_type_code,
8113     p_DestinationPageCode => 'PON_CONCURRENT_ERRORS',
8114     p_bid_number => NULL);
8115 
8116   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8117     FND_LOG.string (log_level => FND_LOG.level_procedure,
8118       module => g_module_prefix || l_module_name,
8119       message => 'Leaving procedure = ' || l_module_name);
8120   END IF;
8121 
8122 EXCEPTION
8123   WHEN OTHERS THEN
8124     x_result := FND_API.g_ret_sts_unexp_error;
8125     x_error_code := SQLCODE;
8126     x_error_message := SUBSTR(SQLERRM, 1, 100);
8127 
8128     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
8129       FND_LOG.string (log_level => FND_LOG.level_exception,
8130         module => g_module_prefix || l_module_name,
8131         message => 'Unexpected exception occured error_code = ' ||
8132                   x_error_code || ', error_message = ' || x_error_message);
8133     END IF;
8134 
8135 END report_concurrent_failure;
8136 
8137 PROCEDURE report_concurrent_success (
8138   x_result OUT NOCOPY VARCHAR2,
8139   x_error_code OUT NOCOPY VARCHAR2,
8140   x_error_message OUT NOCOPY VARCHAR2,
8141   p_request_id IN NUMBER,
8142   p_user_name IN VARCHAR2,
8143   p_auction_header_id IN NUMBER,
8144   p_program_type_code IN VARCHAR2
8145 ) IS
8146 
8147 l_module_name VARCHAR2 (30);
8148 l_destination_page_code VARCHAR2(30);
8149 BEGIN
8150 
8151   l_module_name := 'report_concurrent_success';
8152   x_result := FND_API.g_ret_sts_success;
8153 
8154   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8155     FND_LOG.string (log_level => FND_LOG.level_procedure,
8156       module => g_module_prefix || l_module_name,
8157       message => 'Entered procedure = ' || l_module_name);
8158   END IF;
8159 
8160   -- The destination code in case of succesful approval submission
8161   -- will be the manage drafts page.
8162   IF (p_program_type_code = g_program_type_neg_approve) THEN
8163     l_destination_page_code := 'PON_MANAGE_DRAFT_NEG';
8164   ELSE
8165     l_destination_page_code := 'PON_NEG_SUMMARY';
8166   END IF;
8167 
8168   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8169     FND_LOG.string(log_level => FND_LOG.level_statement,
8170       module  =>  g_module_prefix || l_module_name,
8171       message  => 'Calling the notification genration procedure to inform success'
8172                   || ', p_request_id = ' || p_request_id
8173                   || ', p_messagetype = ' || 'S'
8174                   || ', p_RecepientUsername = ' || p_user_name
8175                   || ', p_recepientType = ' || 'BUYER'
8176                   || ', p_auction_header_id = ' || p_auction_header_id
8177                   || ', p_ProgramTypeCode = ' || p_program_type_code
8178                   || ', p_DestinationPageCode = ' || l_destination_page_code
8179                   || ', p_bid_number = NULL');
8180   END IF; --}
8181 
8182   PON_WF_UTL_PKG.ReportConcProgramStatus (
8183     p_request_id => p_request_id,
8184     p_messagetype => 'S',
8185     p_RecepientUsername => p_user_name,
8186     p_recepientType =>'BUYER',
8187     p_auction_header_id => p_auction_header_id,
8188     p_ProgramTypeCode => p_program_type_code,
8189     p_DestinationPageCode => l_destination_page_code,
8190     p_bid_number => NULL);
8191 
8192   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8193     FND_LOG.string (log_level => FND_LOG.level_procedure,
8194       module => g_module_prefix || l_module_name,
8195       message => 'Leaving procedure = ' || l_module_name);
8196   END IF;
8197 
8198 EXCEPTION
8199   WHEN OTHERS THEN
8200     x_result := FND_API.g_ret_sts_unexp_error;
8201     x_error_code := SQLCODE;
8202     x_error_message := SUBSTR(SQLERRM, 1, 100);
8203 
8204     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
8205       FND_LOG.string (log_level => FND_LOG.level_exception,
8206         module => g_module_prefix || l_module_name,
8207         message => 'Unexpected exception occured error_code = ' ||
8208                   x_error_code || ', error_message = ' || x_error_message);
8209     END IF;
8210 
8211 END report_concurrent_success;
8212 
8213 PROCEDURE handle_fatal_exception (
8214   x_result OUT NOCOPY VARCHAR2,
8215   x_error_code OUT NOCOPY VARCHAR2,
8216   x_error_message OUT NOCOPY VARCHAR2,
8217   p_request_id IN NUMBER,
8218   p_user_name IN VARCHAR2,
8219   p_user_id IN NUMBER,
8220   p_auction_header_id IN NUMBER,
8221   p_program_type_code IN VARCHAR2,
8222   p_log_message IN VARCHAR2,
8223   p_document_number IN VARCHAR2
8224 ) IS
8225 
8226 l_module_name VARCHAR2 (30);
8227 l_error_message_name VARCHAR2(30);
8228 BEGIN
8229 
8230   l_module_name := 'handle_fatal_exception';
8231   x_result := FND_API.g_ret_sts_success;
8232 
8233   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8234     FND_LOG.string (log_level => FND_LOG.level_procedure,
8235       module => g_module_prefix || l_module_name,
8236       message => 'Entered procedure = ' || l_module_name);
8237   END IF;
8238 
8239   -- Rollback any changes
8240   ROLLBACK;
8241 
8242   -- Log the error message
8243   IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
8244     FND_LOG.string (log_level => FND_LOG.level_exception,
8245       module => g_module_prefix || l_module_name,
8246       message => 'Fatal Error Message = ' || p_log_message);
8247   END IF;
8248 
8249   -- send a failure notification
8250   report_concurrent_failure (
8251     x_result => x_result,
8252     x_error_code => x_error_code,
8253     x_error_message => x_error_message,
8254     p_request_id => p_request_id,
8255     p_user_name => p_user_name,
8256     p_auction_header_id => p_auction_header_id,
8257     p_program_type_code => p_program_type_code);
8258 
8259   if (p_program_type_code = g_program_type_neg_publish) THEN
8260     l_error_message_name := 'PON_NEG_PUBLISH_FATAL_ERROR';
8261 
8262   ELSE
8263     l_error_message_name := 'PON_NEG_APPROVE_FATAL_ERROR';
8264   END IF;
8265 
8266   -- insert an error row into the pon_interface_errors table
8267   LOG_INTERFACE_ERROR (
8268     p_interface_type => g_interface_type,
8269     p_error_message_name => l_error_message_name,
8270     p_token1_name => 'DOC_NUM',
8271     p_token1_value => p_document_number,
8272     p_token2_name => 'REQUEST_ID',
8273     p_token2_value => p_request_id,
8274     p_request_id => p_request_id,
8275     p_auction_header_id => p_auction_header_id,
8276     p_expiration_date => SYSDATE + 7,
8277     p_user_id => p_user_id);
8278 
8279   -- commit
8280   COMMIT;
8281 
8282   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN
8283     FND_LOG.string (log_level => FND_LOG.level_procedure,
8284       module => g_module_prefix || l_module_name,
8285       message => 'Leaving procedure = ' || l_module_name);
8286   END IF;
8287 
8288 EXCEPTION
8289   WHEN OTHERS THEN
8290     x_result := FND_API.g_ret_sts_unexp_error;
8291     x_error_code := SQLCODE;
8292     x_error_message := SUBSTR(SQLERRM, 1, 100);
8293 
8294     IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN
8295       FND_LOG.string (log_level => FND_LOG.level_exception,
8296         module => g_module_prefix || l_module_name,
8297         message => 'Unexpected exception occured error_code = ' ||
8298                   x_error_code || ', error_message = ' || x_error_message);
8299     END IF;
8300 
8301 END handle_fatal_exception;
8302 PROCEDURE pon_publish_super_large_neg (
8303   ERRBUF OUT NOCOPY VARCHAR2,
8304   RETCODE OUT NOCOPY VARCHAR2,
8305   ARGUMENT1 IN NUMBER,   -- P_AUCTION_HEADER_ID
8306   ARGUMENT2 IN VARCHAR2, -- P_FOR_APPROVAL
8307   ARGUMENT3 IN VARCHAR2, -- P_NOTE_TO_APPROVERS
8308   ARGUMENT4 IN VARCHAR2, -- P_ENCRYPTED_AUCTION_HEADER_ID
8309   ARGUMENT5 IN VARCHAR2, -- P_USER_NAME
8310   ARGUMENT6 IN NUMBER,    -- P_USER_ID
8311   ARGUMENT7 IN VARCHAR2, --P_CLIENT_TIMEZONE
8312   ARGUMENT8 IN VARCHAR2, --P_SERVER_TIMEZONE
8313   ARGUMENT9 IN VARCHAR2, --P_DATE_FORMAT_MASk
8314   ARGUMENT10 IN VARCHAR2, --P_USER_PARTY_ID
8315   ARGUMENT11 IN VARCHAR2, --P_COMPANY_PARTY_ID
8316   ARGUMENT12 IN VARCHAR2 --P_CURR_LANGUAGE
8317 ) IS
8318 
8319 l_is_amendment BOOLEAN;
8320 l_is_new_round BOOLEAN;
8321 l_login_id NUMBER;
8322 
8323 l_draft_locked PON_AUCTION_HEADERS_ALL.DRAFT_LOCKED%TYPE;
8324 l_draft_locked_by_contact_id PON_AUCTION_HEADERS_ALL.DRAFT_LOCKED_BY_CONTACT_ID%TYPE;
8325 l_doctype_id PON_AUCTION_HEADERS_ALL.DOCTYPE_ID%TYPE;
8326 l_auction_currency_precision PON_AUCTION_HEADERS_ALL.NUMBER_PRICE_DECIMALS%TYPE;
8327 l_close_bidding_date PON_AUCTION_HEADERS_ALL.cLOSE_BIDDING_DATE%TYPE;
8328 l_contract_type PON_AUCTION_HEADERS_ALL.CONTRACT_TYPE%TYPE;
8329 l_global_agreement_flag PON_AUCTION_HEADERS_ALL.GLOBAL_AGREEMENT_FLAG%TYPE;
8330 l_allow_other_bid_currency PON_AUCTION_HEADERS_ALL.ALLOW_OTHER_BID_CURRENCY_FLAG%TYPE;
8331 l_bid_ranking PON_AUCTION_HEADERS_ALL.BID_RANKING%TYPE;
8332 l_po_start_date PON_AUCTION_HEADERS_ALL.PO_START_DATE%TYPE;
8333 l_po_end_date PON_AUCTION_HEADERS_ALL.PO_END_DATE%TYPE;
8334 l_trading_partner_id PON_AUCTION_HEADERS_ALL.TRADING_PARTNER_ID%TYPE;
8335 l_full_quantity_bid_code PON_AUCTION_HEADERS_ALL.FULL_QUANTITY_BID_CODE%TYPE;
8336 l_bid_list_type PON_AUCTION_HEADERS_ALL.BID_LIST_TYPE%TYPE;
8337 l_document_number PON_AUCTION_HEADERS_ALL.DOCUMENT_NUMBER%TYPE;
8338 l_amendment_number PON_AUCTION_HEADERS_ALL.AMENDMENT_NUMBER%TYPE;
8339 l_auction_round_number PON_AUCTION_HEADERS_ALL.AUCTION_ROUND_NUMBER%TYPE;
8340 l_auction_header_id_prev_round PON_AUCTION_HEADERS_ALL.AUCTION_HEADER_ID_PREV_ROUND%TYPE;
8341 l_auction_header_id_prev_amend PON_AUCTION_HEADERS_ALL.AUCTION_HEADER_ID_PREV_AMEND%TYPE;
8342 l_auction_origination_code PON_AUCTION_HEADERS_ALL.AUCTION_ORIGINATION_CODE%TYPE;
8343 l_auction_title PON_AUCTION_HEADERS_ALL.AUCTION_TITLE%TYPE;
8344 l_trading_partner_contact_id PON_AUCTION_HEADERS_ALL.TRADING_PARTNER_CONTACT_ID%TYPE;
8345 l_large_neg_enabled_flag PON_AUCTION_HEADERS_ALL.LARGE_NEG_ENABLED_FLAG%TYPE;
8346 l_auction_header_id_orig_amend PON_AUCTION_HEADERS_ALL.AUCTION_HEADER_ID_ORIG_AMEND%TYPE;
8347 l_open_auction_now_flag PON_AUCTION_HEADERS_ALL.OPEN_AUCTION_NOW_FLAG%TYPE;
8348 l_publish_auction_now_flag PON_AUCTION_HEADERS_ALL.PUBLISH_AUCTION_NOW_FLAG%TYPE;
8349 l_open_bidding_date PON_AUCTION_HEADERS_ALL.OPEN_BIDDING_DATE%TYPE;
8350 l_view_by_date PON_AUCTION_HEADERS_ALL.VIEW_BY_DATE%TYPE;
8351 l_auto_extend_flag PON_AUCTION_HEADERS_ALL.AUTO_EXTEND_FLAG%TYPE;
8352 l_auto_extend_number PON_AUCTION_HEADERS_ALL.AUTO_EXTEND_NUMBER%TYPE;
8353 l_bid_visibility_code PON_AUCTION_HEADERS_ALL.BID_VISIBILITY_CODE%TYPE;
8354 l_price_driven_auction_flag PON_AUCTION_HEADERS_ALL.PRICE_DRIVEN_AUCTION_FLAG%TYPE;
8355 l_min_bid_decrement PON_AUCTION_HEADERS_ALL.MIN_BID_DECREMENT%TYPE;
8356 l_line_attribute_enabled_flag PON_AUCTION_HEADERS_ALL.LINE_ATTRIBUTE_ENABLED_FLAG%TYPE;
8357 l_pf_type_allowed PON_AUCTION_HEADERS_ALL.PF_TYPE_ALLOWED%TYPE;
8358 l_progress_payment_type PON_AUCTION_HEADERS_ALL.PROGRESS_PAYMENT_TYPE%TYPE;
8359 l_trading_partner_contact_name PON_AUCTION_HEADERS_ALL.TRADING_PARTNER_CONTACT_NAME%TYPE;
8360 l_award_by_date PON_AUCTION_HEADERS_ALL.AWARD_BY_DATE%TYPE;
8361 l_reminder_date PON_AUCTION_HEADERS_ALL.REMINDER_DATE%TYPE;
8362 l_number_of_lines PON_AUCTION_HEADERS_ALL.NUMBER_OF_LINES%TYPE;
8363 l_event_id PON_AUCTION_HEADERS_ALL.EVENT_ID%TYPE;
8364 l_trading_partner_name PON_AUCTION_HEADERS_ALL.TRADING_PARTNER_NAME%TYPE;
8365 l_note_to_bidders PON_AUCTION_HEADERS_ALL.NOTE_TO_BIDDERS%TYPE;
8366 l_price_tiers_indicator PON_AUCTION_HEADERS_ALL.PRICE_TIERS_INDICATOR%TYPE;
8367 
8368 p_auction_header_id NUMBER;
8369 p_for_approval BOOLEAN;
8370 p_note_to_approvers VARCHAR2(2000);
8371 p_encrypted_auction_header_id VARCHAR2(2000);
8372 p_user_name VARCHAR2(2000);
8373 p_user_id NUMBER;
8374 p_client_timezone VARCHAR2(2000);
8375 p_server_timezone VARCHAR2(2000);
8376 p_date_format_mask VARCHAR2(2000);
8377 p_user_party_id NUMBER;
8378 p_company_party_id NUMBER;
8379 p_curr_language VARCHAR2(200);
8380 
8381 l_batch_id NUMBER;
8382 l_fnd_currency_precision NUMBER;
8383 l_invitees_count NUMBER;
8384 l_errors_present BOOLEAN;
8385 l_request_id NUMBER;
8386 l_redirect_func VARCHAR2(30);
8387 l_prev_document_number NUMBER;
8388 l_error_code VARCHAR2(100);
8389 l_error_msg VARCHAR2(100);
8390 l_return_msg VARCHAR2(200);
8391 l_return_value NUMBER;
8392 l_return_status VARCHAR2(200);
8393 l_msg_count NUMBER;
8394 l_result VARCHAR2(2);
8395 l_programTypeCode VARCHAR2(30);
8396 l_transaction_type VARCHAR2(30);
8397 
8398 l_module_name VARCHAR2 (30);
8399 BEGIN
8400 
8401   -- STORE THE ARGUMENTS INTO LOCAL VARIABLES
8402   l_module_name := 'pon_publish_super_large_neg';
8403 
8404   p_auction_header_id := ARGUMENT1;
8405   IF ('Y' = ARGUMENT2) THEN --{
8406     p_for_approval := TRUE;
8407     l_programTypeCode := g_program_type_neg_approve;
8408   ELSE
8409     p_for_approval := FALSE;
8410     l_programTypeCode := g_program_type_neg_publish;
8411   END IF; --}
8412 
8413   p_note_to_approvers := ARGUMENT3;
8414   p_encrypted_auction_header_id := ARGUMENT4;
8415   p_user_name := ARGUMENT5;
8416   p_user_id := ARGUMENT6;
8417   p_client_timezone := ARGUMENT7;
8418   p_server_timezone := ARGUMENT8;
8419   p_date_format_mask := ARGUMENT9;
8420   p_user_party_id := ARGUMENT10;
8421   p_company_party_id := ARGUMENT11;
8422   p_curr_language := ARGUMENT12;
8423 
8424   l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
8425   l_login_id := FND_GLOBAL.LOGIN_ID;
8426 
8427   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN --{
8428     FND_LOG.string(log_level => FND_LOG.level_procedure,
8429       module => g_module_prefix || l_module_name,
8430       message  => 'Entered procedure: p_auction_header_id = ' || p_auction_header_id
8431                   || ', p_for_approval = ' || BOOLEAN_TO_STRING (p_for_approval)
8432                   || ', p_note_to_approvers = ' || p_note_to_approvers
8433                   || ', p_encrypted_auction_header_id = ' || p_encrypted_auction_header_id
8434                   || ', p_user_name = ' || p_user_name
8435                   || ', p_user_id = ' || p_user_id
8436                   || ', p_client_timezone = ' || p_client_timezone
8437                   || ', p_server_timezone = ' || p_server_timezone
8438                   || ', p_date_format_mask = ' || p_date_format_mask
8439                   || ', p_user_party_id = ' || p_user_party_id
8440                   || ', p_company_party_id = ' || p_company_party_id
8441                   || ', p_curr_language = ' || p_curr_language);
8442   END IF; --}
8443 
8444   IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8445     FND_LOG.string(log_level => FND_LOG.level_statement,
8446       module => g_module_prefix || l_module_name,
8447       message  => 'Collection auction information');
8448   END IF; --}
8449 
8450   BEGIN -- { Start of try block
8451 
8452     --COLLECT THE NEGOTIATION INFO
8453     SELECT
8454       DRAFT_LOCKED,
8455       DRAFT_LOCKED_BY_CONTACT_ID,
8456       DOCTYPE_ID,
8457       NUMBER_PRICE_DECIMALS,
8458       CLOSE_BIDDING_DATE,
8459       CONTRACT_TYPE,
8460       GLOBAL_AGREEMENT_FLAG,
8461       ALLOW_OTHER_BID_CURRENCY_FLAG,
8462       BID_RANKING,
8463       PO_START_DATE,
8464       PO_END_DATE,
8465       TRADING_PARTNER_ID,
8466       FULL_QUANTITY_BID_CODE,
8467       BID_LIST_TYPE,
8468       AMENDMENT_NUMBER,
8469       AUCTION_ROUND_NUMBER,
8470       DOCUMENT_NUMBER,
8471       AUCTION_HEADER_ID_PREV_ROUND,
8472       AUCTION_HEADER_ID_PREV_AMEND,
8473       AUCTION_ORIGINATION_CODE,
8474       AUCTION_TITLE,
8475       TRADING_PARTNER_CONTACT_ID,
8476       LARGE_NEG_ENABLED_FLAG,
8477       AUCTION_HEADER_ID_ORIG_AMEND,
8478       OPEN_AUCTION_NOW_FLAG,
8479       PUBLISH_AUCTION_NOW_FLAG,
8480       OPEN_BIDDING_DATE,
8481       VIEW_BY_DATE,
8482       AUTO_EXTEND_FLAG,
8483       AUTO_EXTEND_NUMBER,
8484       BID_VISIBILITY_CODE,
8485       PRICE_DRIVEN_AUCTION_FLAG,
8486       MIN_BID_DECREMENT,
8487       LINE_ATTRIBUTE_ENABLED_FLAG, --19
8488       PF_TYPE_ALLOWED,
8489       PROGRESS_PAYMENT_TYPE,
8490       TRADING_PARTNER_CONTACT_NAME,
8491       AWARD_BY_DATE,
8492       REMINDER_DATE,
8493       NUMBER_OF_LINES,
8494       EVENT_ID,
8495       TRADING_PARTNER_NAME,
8496       NOTE_TO_BIDDERS,
8497       PRICE_TIERS_INDICATOR
8498     INTO
8499       l_draft_locked,
8500       l_draft_locked_by_contact_id,
8501       l_doctype_id,
8502       l_auction_currency_precision,
8503       l_close_bidding_date,
8504       l_contract_type,
8505       l_global_agreement_flag,
8506       l_allow_other_bid_currency,
8507       l_bid_ranking,
8508       l_po_start_date,
8509       l_po_end_date,
8510       l_trading_partner_id,
8511       l_full_quantity_bid_code,
8512       l_bid_list_type,
8513       l_amendment_number,
8514       l_auction_round_number,
8515       l_document_number,
8516       l_auction_header_id_prev_round,
8517       l_auction_header_id_prev_amend,
8518       l_auction_origination_code,
8519       l_auction_title,
8520       l_trading_partner_contact_id,
8521       l_large_neg_enabled_flag,
8522       l_auction_header_id_orig_amend,
8523       l_open_auction_now_flag,
8524       l_publish_auction_now_flag,
8525       l_open_bidding_date,
8526       l_view_by_date,
8527       l_auto_extend_flag,
8528       l_auto_extend_number,
8529       l_bid_visibility_code,
8530       l_price_driven_auction_flag,
8531       l_min_bid_decrement,
8532       l_line_attribute_enabled_flag,
8533       l_pf_type_allowed,
8534       l_progress_payment_type,
8535       l_trading_partner_contact_name,
8536       l_award_by_date,
8537       l_reminder_date,
8538       l_number_of_lines,
8539       l_event_id,
8540       l_trading_partner_name,
8541       l_note_to_bidders,
8542       l_price_tiers_indicator
8543     FROM
8544       pon_auction_headers_all
8545     WHERE
8546       auction_header_id = p_auction_header_id;
8547 
8548     SELECT COUNT(auction_header_id)
8549     INTO l_invitees_count
8550     FROM pon_bidding_parties
8551     WHERE auction_header_id = p_auction_header_id;
8552 
8553     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8554       FND_LOG.string(log_level => FND_LOG.level_statement,
8555         module => g_module_prefix || l_module_name,
8556         message  => 'Auction information collected: ' ||
8557                     'l_draft_locked = ' || l_draft_locked ||
8558                     ', l_draft_locked_by_contact_id = ' || l_draft_locked_by_contact_id ||
8559                     ', l_doctype_id = ' || l_doctype_id ||
8560                     ', l_auction_currency_precision = ' || l_auction_currency_precision ||
8561                     ', l_close_bidding_date = ' || l_close_bidding_date ||
8562                     ', l_contract_type = ' || l_contract_type ||
8563                     ', l_global_agreement_flag = ' || l_global_agreement_flag ||
8564                     ', l_allow_other_bid_currency = ' || l_allow_other_bid_currency ||
8565                     ', l_bid_ranking = ' || l_bid_ranking ||
8566                     ', l_po_start_date = ' || l_po_start_date ||
8567                     ', l_po_end_date = ' || l_po_end_date ||
8568                     ', l_trading_partner_id, = ' || l_trading_partner_id ||
8569                     ', l_full_quantity_bid_code, = ' || l_full_quantity_bid_code ||
8570                     ', l_bid_list_type, = ' || l_bid_list_type ||
8571                     ', l_amendment_number, = ' || l_amendment_number ||
8572                     ', l_auction_round_number, = ' || l_auction_round_number ||
8573                     ', l_document_number, = ' || l_document_number ||
8574                     ', l_auction_header_id_prev_round, = ' || l_auction_header_id_prev_round ||
8575                     ', l_auction_header_id_prev_amend, = ' || l_auction_header_id_prev_amend ||
8576                     ', l_auction_origination_code, = ' || l_auction_origination_code ||
8577                     ', l_auction_title, = ' || l_auction_title ||
8578                     ', l_trading_partner_contact_id, = ' || l_trading_partner_contact_id ||
8579                     ', l_large_neg_enabled_flag, = ' || l_large_neg_enabled_flag ||
8580                     ', l_auction_header_id_orig_amend, = ' || l_auction_header_id_orig_amend ||
8581                     ', l_open_auction_now_flag, = ' || l_open_auction_now_flag ||
8582                     ', l_publish_auction_now_flag, = ' || l_publish_auction_now_flag ||
8583                     ', l_open_bidding_date, = ' || l_open_bidding_date ||
8584                     ', l_view_by_date = ' || l_view_by_date ||
8585                     ', l_auto_extend_flag = ' || l_auto_extend_flag ||
8586                     ', l_auto_extend_number = ' || l_auto_extend_number ||
8587                     ', l_progress_payment_type, = ' || l_progress_payment_type ||
8588                     ', l_bid_visibility_code = ' || l_bid_visibility_code ||
8589                     ', l_price_tiers_indicator = ' || l_price_tiers_indicator);
8590     END IF; --}
8591 
8592     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8593       FND_LOG.string(log_level => FND_LOG.level_statement,
8594         module => g_module_prefix || l_module_name,
8595         message  => 'Checking for lock on the negotiation');
8596     END IF; --}
8597 
8598     --CHECK FOR DRAFT LOCK ON THE NEGOTIATION
8599 
8600     IF (NOT ('Y' = l_draft_locked AND l_draft_locked_by_contact_id = p_user_party_id)) THEN --{
8601 
8602       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8603         FND_LOG.string(log_level => FND_LOG.level_statement,
8604         module => g_module_prefix || l_module_name,
8605           message  => 'The person who initiated the concurrent program no longer has the lock on the negotiation');
8606       END IF; --}
8607 
8608       RETCODE := 2;
8609       ERRBUF := 'PON_NO_DRAFT_LOCK';
8610 
8611       --Log this error in the PON_INTERFACE_ERRORS TABLE
8612 
8613       LOG_INTERFACE_ERROR (
8614         p_interface_type => g_interface_type,
8615         p_error_message_name => 'PON_NO_DRAFT_LOCK',
8616         p_token1_name => null,
8617         p_token1_value => null,
8618         p_token2_name => null,
8619         p_token2_value => null,
8620         p_request_id => l_request_id,
8621         p_auction_header_id => p_auction_header_id,
8622         p_expiration_date => SYSDATE + 7,
8623         p_user_id => p_user_id);
8624 
8625       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8626         FND_LOG.string(log_level => FND_LOG.level_statement,
8627           module => g_module_prefix || l_module_name,
8628           message  => 'Setting return code to 2 and returning after logging PON_NO_DRAFT_LOCK error');
8629       END IF; --}
8630 
8631       report_concurrent_failure (
8632         x_result => l_result,
8633         x_error_code => l_error_code,
8634         x_error_message => l_error_msg,
8635         p_request_id => l_request_id,
8636         p_user_name => p_user_name,
8637         p_auction_header_id => p_auction_header_id,
8638         p_program_type_code => l_programTypeCode);
8639 
8640       --Issue a commit so that the error is pushed to the database and return
8641 
8642       COMMIT;
8643       RETURN;
8644     END IF; --}
8645 
8646     --INITIALIZE THE l_is_new_round and l_is_amendment variables
8647     l_is_new_round := false;
8648     l_is_amendment := false;
8649 
8650     -- Amendment always takes the first preference.
8651     -- During new round creation we clear out the previous amendment details
8652     -- But during amendment creation we retain the previous round details
8653     IF (l_amendment_number > 0) THEN --{
8654 
8655       l_is_amendment := true;
8656       l_prev_document_number := l_auction_header_id_prev_amend;
8657     ELSIF (l_auction_round_number > 1) THEN --{
8658 
8659       l_is_new_round := true;
8660       l_prev_document_number := l_auction_header_id_prev_round;
8661     END IF; --}
8662 
8663     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8664       FND_LOG.string(log_level => FND_LOG.level_statement,
8665         module => g_module_prefix || l_module_name,
8666         message  => 'New round/amendment variables initialized' ||
8667                     ', l_is_new_round = ' || BOOLEAN_TO_STRING (l_is_new_round)||
8668                     ', l_is_amendment = ' || BOOLEAN_TO_STRING (l_is_amendment)||
8669                     ', l_prev_document_number = ' || l_prev_document_number);
8670     END IF; --}
8671 
8672     --Call to PON_NEG_UPDATE_PKG.CAN_EDIT_DRAFT_AMEND
8673     --If the negotiation that the buyer is amending becomes closed or cancelled,
8674 
8675     IF (l_is_amendment) THEN
8676 
8677       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8678         FND_LOG.string(log_level => FND_LOG.level_statement,
8679           module => g_module_prefix || l_module_name,
8680           message  => 'This is an amendment, checking if the amendment can be published or not');
8681       END IF; --}
8682 
8683       PON_NEG_UPDATE_PKG.CAN_EDIT_DRAFT_AMEND (
8684         p_auction_header_id_prev_doc => l_auction_header_id_prev_amend,
8685         x_error_code => l_error_code);
8686 
8687       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8688         FND_LOG.string(log_level => FND_LOG.level_statement,
8689           module => g_module_prefix || l_module_name,
8690           message  => 'The return code from call to PON_NEG_UPDATE_PKG.CAN_EDIT_DRAFT_AMEND = ' || l_error_code);
8691       END IF; --}
8692 
8693       IF (l_error_code <> 'SUCCESS') THEN
8694 
8695         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8696           FND_LOG.string(log_level => FND_LOG.level_statement,
8697             module => g_module_prefix || l_module_name,
8698             message  => 'The return code is not success so logging error and exiting');
8699         END IF; --}
8700 
8701         RETCODE := 2;
8702         ERRBUF := 'PON_EDIT_DRAFT_AMEND_ERROR';
8703 
8704         LOG_INTERFACE_ERROR (
8705           p_interface_type => g_interface_type,
8706           p_error_message_name => 'PON_EDIT_DRAFT_AMEND_ERROR',
8707           p_token1_name => null,
8708           p_token1_value => null,
8709           p_token2_name => null,
8710           p_token2_value => null,
8711           p_request_id => l_request_id,
8712           p_auction_header_id => p_auction_header_id,
8713           p_expiration_date => SYSDATE + 7,
8714           p_user_id => p_user_id);
8715 
8716         report_concurrent_failure (
8717           x_result => l_result,
8718           x_error_code => l_error_code,
8719           x_error_message => l_error_msg,
8720           p_request_id => l_request_id,
8721           p_user_name => p_user_name,
8722           p_auction_header_id => p_auction_header_id,
8723           p_program_type_code => l_programTypeCode);
8724 
8725         COMMIT;
8726         RETURN;
8727       END IF;
8728     END IF;
8729 
8730     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8731       FND_LOG.string(log_level => FND_LOG.level_statement,
8732         module => g_module_prefix || l_module_name,
8733         message  => 'Calling validate lines procedure');
8734     END IF; --}
8735 
8736     -- The validate lines procedure is the same as the one that is
8737     -- called during the online publish flow
8738 
8739     VALIDATE_LINES (
8740       l_result, --1
8741       l_error_code, --2
8742       l_error_msg, --3
8743       p_auction_header_id, --4
8744       l_doctype_id, --5
8745       l_auction_currency_precision , --6
8746       l_fnd_currency_precision , --7
8747       l_close_bidding_date , --8
8748       l_contract_type , --9
8749       l_global_agreement_flag , --10
8750       l_allow_other_bid_currency , --11
8751       l_bid_ranking , --12
8752       l_po_start_date , --13
8753       l_po_end_date , --14
8754       l_trading_partner_id , --15
8755       l_full_quantity_bid_code , --16
8756       l_invitees_count , --17
8757       l_bid_list_type , --18
8758       l_request_id, --19
8759       ARGUMENT2, --20
8760       p_user_id, --21
8761       l_line_attribute_enabled_flag, --22
8762       l_pf_type_allowed, --23
8763       l_progress_payment_type, --24
8764       l_large_neg_enabled_flag, --25
8765       l_price_tiers_indicator, --26
8766       l_batch_id  --27
8767     );
8768 
8769     IF (l_result <> FND_API.G_RET_STS_SUCCESS) THEN -- {
8770 
8771       handle_fatal_exception (
8772         x_result => l_result,
8773         x_error_code => l_error_code,
8774         x_error_message => l_error_msg,
8775         p_request_id => l_request_id,
8776         p_user_name => p_user_name,
8777         p_user_id => p_user_id,
8778         p_auction_header_id => p_auction_header_id,
8779         p_program_type_code => l_programTypeCode,
8780         p_log_message => l_error_msg,
8781         p_document_number => l_document_number);
8782       RETCODE := 2;
8783       RETURN;
8784     END IF; --}
8785 
8786     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8787       FND_LOG.string(log_level => FND_LOG.level_statement,
8788         module => g_module_prefix || l_module_name,
8789         message  => 'Calling CHECK_ACTION_ERRORS_PRESENT with l_batch_id = ' || l_batch_id);
8790     END IF; --}
8791 
8792     -- Check if there are any errors logged by the VALIDATE_LINES procedure
8793     l_errors_present := CHECK_ACTION_ERRORS_PRESENT (l_batch_id);
8794 
8795     IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8796       FND_LOG.string(log_level => FND_LOG.level_statement,
8797         module => g_module_prefix || l_module_name,
8798         message  => 'Return value from CHECK_ACTION_ERRORS_PRESENT = ' || BOOLEAN_TO_STRING (l_errors_present));
8799     END IF; --}
8800 
8801     IF (l_errors_present) THEN --{
8802 
8803       -- If errors are present then the concurrent program status should be set to ERROR
8804       RETCODE := 2;
8805 
8806       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8807         FND_LOG.string(log_level => FND_LOG.level_statement,
8808           module => g_module_prefix || l_module_name,
8809           message  => 'Errors were found while validating, exiting with return code = ' || RETCODE);
8810       END IF; --}
8811 
8812       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8813         FND_LOG.string(log_level => FND_LOG.level_statement,
8814           module => g_module_prefix || l_module_name,
8815           message  => 'Rolling back the transaction and saving the errors');
8816       END IF; --}
8817 
8818       --Pull errors to table of records, perform rollback and then push them back
8819       RETRIEVE_ERRORS_AND_ROLLBACK (l_batch_id);
8820 
8821       -- Send notification about failure
8822       report_concurrent_failure (
8823         x_result => l_result,
8824         x_error_code => l_error_code,
8825         x_error_message => l_error_msg,
8826         p_request_id => l_request_id,
8827         p_user_name => p_user_name,
8828         p_auction_header_id => p_auction_header_id,
8829         p_program_type_code => l_programTypeCode);
8830 
8831     --No errors go ahead
8832     ELSE
8833 
8834       --Initialize the redirect function used for initiating the approval workflow
8835       IF (l_is_new_round OR l_is_amendment) THEN --{
8836 
8837         l_redirect_func := 'PONCRT_VWCHNG_SUBMIT';
8838       ELSE
8839 
8840         l_redirect_func := 'PON_NEG_CRT_REVIEW';
8841       END IF; --}
8842 
8843       IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8844         FND_LOG.string(log_level => FND_LOG.level_statement,
8845           module => g_module_prefix || l_module_name,
8846           message  => 'l_redirect_func = ' || l_redirect_func);
8847       END IF; --}
8848 
8849       -- No errors but this is for approval flow, so simply release the lock
8850       -- on the draft and initiate the approval workflow
8851 
8852       IF (p_for_approval) THEN --{
8853 
8854         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8855           FND_LOG.string(log_level => FND_LOG.level_statement,
8856             module => g_module_prefix || l_module_name,
8857             message  => 'This is for approval');
8858         END IF; --}
8859 
8860         UPDATE PON_AUCTION_HEADERS_ALL
8861         SET
8862           DRAFT_LOCKED = 'N',
8863           DRAFT_LOCKED_BY = NULL,
8864           DRAFT_LOCKED_BY_CONTACT_ID = NULL,
8865           DRAFT_LOCKED_DATE = NULL,
8866           DRAFT_UNLOCKED_BY = p_company_party_id,
8867           DRAFT_UNLOCKED_BY_CONTACT_ID = p_user_party_id,
8868           DRAFT_UNLOCKED_DATE = SYSDATE,
8869           LAST_UPDATE_DATE = SYSDATE,
8870           LAST_UPDATED_BY = p_user_id
8871         WHERE
8872           AUCTION_HEADER_ID = p_auction_header_id;
8873 
8874         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8875           FND_LOG.string(log_level => FND_LOG.level_statement,
8876             module => g_module_prefix || l_module_name,
8877             message  => 'Initiating the approval workflow'
8878                         || ', p_encrypted_auction_header_id = ' || p_encrypted_auction_header_id
8879                         || ', P_AUCTION_HEADER_ID = ' || p_auction_header_id
8880                         || ', P_NOTE_TO_APPROVERS = ' || p_note_to_approvers
8881                         || ', P_SUBMIT_USER_NAME = ' || p_user_name
8882                         || ', P_REDIRECT_FUNC = ' || l_redirect_func);
8883         END IF; --}
8884 
8885         -- Call the submit_for_approval api to initiate the
8886         -- workflow
8887         PON_AUCTION_APPROVAL_PKG.submit_for_approval (
8888           p_auction_header_id_encrypted => p_encrypted_auction_header_id,
8889           p_auction_header_id => p_auction_header_id,
8890           p_note_to_approvers => p_note_to_approvers,
8891           p_submit_user_name => p_user_name,
8892           p_redirect_func => l_redirect_func);
8893 
8894         -- Send a success notification to the user that auction
8895         -- is successfully submitted for approval
8896         report_concurrent_success (
8897           x_result => l_result,
8898           x_error_code => l_error_code,
8899           x_error_message => l_error_msg,
8900           p_request_id => l_request_id,
8901           p_user_name => p_user_name,
8902           p_auction_header_id => p_auction_header_id,
8903           p_program_type_code => l_programTypeCode);
8904 
8905       -- OK this is the publish flow, need to call all before publish method
8906       -- contracts methods, etc and make the auction active
8907 
8908       ELSE
8909 
8910         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8911           FND_LOG.string(log_level => FND_LOG.level_statement,
8912             module => g_module_prefix || l_module_name,
8913             message  => 'This is for publish');
8914         END IF; --}
8915 
8916         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8917           FND_LOG.string(log_level => FND_LOG.level_statement,
8918             module => g_module_prefix || l_module_name,
8919             message  => 'Calling update lines before publish');
8920         END IF; --}
8921 
8922         -- The close bidding date and other flags on the lines.
8923         -- The updates on lines happens in batches with commit
8924         -- being issued after every batch
8925         update_lines_before_publish (
8926           x_result => l_result,
8927           x_error_code => l_error_code,
8928           x_error_message => l_error_msg,
8929           p_auction_header_id => p_auction_header_id,
8930           p_close_bidding_date => l_close_bidding_date,
8931           p_user_id => p_user_id,
8932           p_login_id => l_login_id);
8933 
8934         IF (l_result <> FND_API.G_RET_STS_SUCCESS) THEN -- {
8935 
8936           handle_fatal_exception (
8937             x_result => l_result,
8938             x_error_code => l_error_code,
8939             x_error_message => l_error_msg,
8940             p_request_id => l_request_id,
8941             p_user_name => p_user_name,
8942             p_user_id => p_user_id,
8943             p_auction_header_id => p_auction_header_id,
8944             p_program_type_code => l_programTypeCode,
8945             p_log_message => l_error_msg,
8946             p_document_number => l_document_number);
8947           RETCODE := 2;
8948           RETURN;
8949         END IF; --}
8950 
8951         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8952           FND_LOG.string(log_level => FND_LOG.level_statement,
8953             module => g_module_prefix || l_module_name,
8954             message  => 'Calling update header before publish');
8955         END IF; --}
8956 
8957         -- The max sequence number fields and other flags on the
8958         -- header
8959         update_header_before_publish (
8960           x_result => l_result,
8961           x_error_code => l_error_code,
8962           x_error_message => l_error_msg,
8963           p_auction_header_id => p_auction_header_id);
8964 
8965         IF (l_result <> FND_API.G_RET_STS_SUCCESS) THEN -- {
8966 
8967           handle_fatal_exception (
8968             x_result => l_result,
8969             x_error_code => l_error_code,
8970             x_error_message => l_error_msg,
8971             p_request_id => l_request_id,
8972             p_user_name => p_user_name,
8973             p_user_id => p_user_id,
8974             p_auction_header_id => p_auction_header_id,
8975             p_program_type_code => l_programTypeCode,
8976             p_log_message => l_error_msg,
8977             p_document_number => l_document_number);
8978           RETCODE := 2;
8979           RETURN;
8980         END IF; --}
8981 
8982         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8983           FND_LOG.string(log_level => FND_LOG.level_statement,
8984             module => g_module_prefix || l_module_name,
8985             message  => 'Checking if this is a new round or amendment');
8986         END IF; --}
8987 
8988         -- In case of an amendment or a multi round need to call the
8989         -- PON_NEG_UPDATE_PKG.UPDATE_TO_NEW_DOCUMENT method.
8990         IF (l_is_amendment OR l_is_new_round) THEN --{
8991 
8992           IF (l_is_amendment) THEN
8993             l_transaction_type := 'CREATE_AMENDMENT';
8994           ELSE
8995             l_transaction_type := 'CREATE_NEW_ROUND';
8996           END IF;
8997 
8998           IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
8999             FND_LOG.string(log_level => FND_LOG.level_statement,
9000               module => g_module_prefix || l_module_name,
9001               message  => 'Calling update_to_new_document');
9002           END IF; --}
9003 
9004           PON_NEG_UPDATE_PKG.update_to_new_document (
9005             p_auction_header_id_curr_doc => p_auction_header_id,
9006             p_doc_number_curr_doc => l_document_number,
9007             p_auction_header_id_prev_doc => l_prev_document_number,
9008             p_auction_origination_code => l_auction_origination_code,
9009             p_is_new => 'N',
9010             p_is_publish => 'Y',
9011             p_transaction_type => l_transaction_type,
9012             p_user_id => p_user_id,
9013             x_error_code => l_error_code,
9014             x_error_msg => l_error_msg);
9015 
9016           IF (nvl (l_error_code, g_invalid_string) <> 'SUCCESS') THEN
9017 
9018             --EXCEPTION: EXIT FROM CONCURRENT PROGRAM
9019             IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN --{
9020               FND_LOG.string(log_level => FND_LOG.level_exception,
9021                 module => g_module_prefix || l_module_name,
9022                 message  => 'Exception in update_to_new_document call = ' || l_error_msg);
9023             END IF; --}
9024 
9025             -- Rollback till the previous commit
9026             ROLLBACK;
9027 
9028             -- log an error into the interface_error table
9029             LOG_INTERFACE_ERROR (
9030               p_interface_type => g_interface_type,
9031               p_error_message_name => 'PON_UNEXPECTED_ERROR',
9032               p_token1_name => null,
9033               p_token1_value => null,
9034               p_token2_name => null,
9035               p_token2_value => null,
9036               p_request_id => l_request_id,
9037               p_auction_header_id => p_auction_header_id,
9038               p_expiration_date => SYSDATE + 7,
9039               p_user_id => p_user_id);
9040 
9041             -- send out a failure notification
9042             report_concurrent_failure (
9043               x_result => l_result,
9044               x_error_code => l_error_code,
9045               x_error_message => l_error_msg,
9046               p_request_id => l_request_id,
9047               p_user_name => p_user_name,
9048               p_auction_header_id => p_auction_header_id,
9049               p_program_type_code => l_programTypeCode);
9050 
9051             -- commit, so the notification and error are inserted.
9052             COMMIT;
9053 
9054             -- set the concurrent program status to error and simply return.
9055             RETCODE := 2;
9056 
9057             RETURN;
9058           END IF;
9059         END IF; --}
9060 
9061         IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN --{
9062           FND_LOG.string(log_level => FND_LOG.level_statement,
9063             module => g_module_prefix || l_module_name,
9064             message  => 'Inserting row into pon discussions');
9065         END IF; --}
9066 
9067         -- Contracts related methods
9068         --PON_CONTERMS_UTL_PVT.resolveDeliverables
9069         --PON_CONTERMS_UTL_PVT.cancelDeliverables
9070         --PON_CONTERMS_UTL_PVT.updateDelivOnAmendment
9071 
9072         IF (NVL(FND_PROFILE.VALUE ('POC_ENABLED'),'N') = 'Y') THEN --{
9073 
9074           PON_CONTERMS_UTL_PVT.resolvedeliverables (
9075             p_auction_header_id => p_auction_header_id,
9076             x_msg_data => l_return_msg,
9077             x_msg_count => l_msg_count,
9078             x_return_status => l_return_status);
9079 
9080           IF (l_is_new_round) THEN --{
9081 
9082             PON_CONTERMS_UTL_PVT.canceldeliverables (
9083              p_auction_header_id => l_auction_header_id_prev_round,
9084              p_doc_type_id => l_doctype_id,
9085              x_msg_data => l_return_msg,
9086              x_msg_count => l_msg_count,
9087              x_return_status => l_return_status);
9088           END IF; --}
9089 
9090           IF (l_is_amendment) THEN --{
9091 
9092             PON_CONTERMS_UTL_PVT.updatedelivonamendment (
9093               p_auction_header_id_orig => l_auction_header_id_orig_amend,
9094               p_auction_header_id_prev => l_auction_header_id_prev_amend,
9095               p_doc_type_id => l_doctype_id,
9096               p_close_bidding_date => l_close_bidding_date,
9097               x_result => l_return_status,
9098               x_error_code => l_error_code,
9099               x_error_message => l_error_msg);
9100           END IF; --}
9101         END IF; --}
9102 
9103         -- AuctionHeadersALLEOImpl.setAutoExtendFields
9104         IF (l_auto_extend_flag = null OR l_auto_extend_flag = 'N' OR l_bid_visibility_code = 'SEALED_AUCTION') THEN
9105           UPDATE PON_AUCTION_HEADERS_ALL
9106           SET
9107             AUTO_EXTEND_TYPE_FLAG = 'FROM_AUCTION_CLOSE_DATE',
9108             AUTO_EXTEND_DURATION = NULL,
9109             AUTO_EXTEND_NUMBER = NULL,
9110             AUTO_EXTEND_ALL_LINES_FLAG = 'Y',
9111             AUTO_EXTEND_FLAG = 'N',
9112             LAST_UPDATE_DATE = SYSDATE,
9113             LAST_UPDATED_BY = p_user_id
9114           WHERE
9115             AUCTION_HEADER_ID = p_auction_header_id;
9116 
9117         ELSIF (l_auto_extend_flag = 'Y' AND l_auto_extend_number = NULL) THEN
9118           UPDATE PON_AUCTION_HEADERS_ALL
9119           SET
9120             AUTO_EXTEND_NUMBER = g_unlimited_int,
9121             LAST_UPDATE_DATE = SYSDATE,
9122             LAST_UPDATED_BY = p_user_id
9123           WHERE
9124             AUCTION_HEADER_ID = p_auction_header_id;
9125 
9126         END IF;
9127 
9128         -- AuctionHeadersALLEOImpl.setDecrementFields
9129         IF ('MULTI_ATTRIBUTE_SCORING' = l_bid_ranking) THEN
9130           UPDATE pon_auction_headers_all
9131           SET
9132             min_bid_change_type = null,
9133             price_driven_auction_flag = 'N',
9134             min_bid_decrement = NULL,
9135             last_update_date = sysdate,
9136             last_updated_by = p_user_id
9137           WHERE
9138             auction_header_id = p_auction_header_id;
9139 
9140         ELSIF ( NVL (l_price_driven_auction_flag, g_invalid_string) <> 'Y') THEN
9141 
9142           UPDATE PON_AUCTION_HEADERS_ALL
9143           SET
9144             MIN_BID_CHANGE_TYPE = NULL,
9145             MIN_BID_DECREMENT = NULL,
9146             LAST_UPDATE_DATE = SYSDATE,
9147             LAST_UPDATED_BY = p_user_id
9148           WHERE
9149             AUCTION_HEADER_ID = p_auction_header_id;
9150         ELSIF (l_min_bid_decrement = null OR l_min_bid_decrement = '') THEN
9151 
9152           UPDATE PON_AUCTION_HEADERS_ALL
9153           SET
9154             MIN_BID_CHANGE_TYPE = NULL,
9155             LAST_UPDATE_DATE = SYSDATE,
9156             LAST_UPDATED_BY = p_user_id
9157           WHERE
9158             AUCTION_HEADER_ID = p_auction_header_id;
9159         END IF;
9160 
9161         --UPDATE THE OPEN_BIDDING_DATE AND VIEW_BY_DATE COLUMNS
9162         IF (l_open_auction_now_flag = 'Y') THEN
9163           l_open_bidding_date := SYSDATE;
9164         END IF;
9165 
9166         IF (l_publish_auction_now_flag = 'Y') THEN
9167           l_view_by_date := SYSDATE;
9168         END IF;
9169 
9170         PON_AUCTION_PKG.start_auction (
9171           p_auction_header_id_encrypted => p_encrypted_auction_header_id, --1
9172           p_auction_header_id => p_auction_header_id, --2
9173           p_trading_partner_contact_name => l_trading_partner_contact_name, --3
9174           p_trading_partner_contact_id => l_trading_partner_contact_id, --4
9175           p_trading_partner_name => l_trading_partner_name, --5
9176           p_trading_partner_id => l_trading_partner_id, --6
9177           p_open_bidding_date => l_open_bidding_date, --7
9178           p_close_bidding_date => l_close_bidding_date, --8
9179           p_award_by_date => l_award_by_date, --9
9180           p_reminder_date => l_reminder_date, --10
9181           p_bid_list_type => l_bid_list_type, --11
9182           p_note_to_bidders => l_note_to_bidders, --12
9183           p_number_of_items => l_number_of_lines, --13
9184           p_auction_title => l_auction_title, --14
9185           p_event_id => l_event_id); --15
9186 
9187         -- Make the auction active
9188         UPDATE PON_AUCTION_HEADERS_ALL
9189         SET
9190           AUCTION_STATUS = 'ACTIVE',
9191           REQUEST_ID = NULL,
9192           REQUESTED_BY = NULL,
9193           REQUEST_DATE = NULL,
9194           OPEN_BIDDING_DATE = l_open_bidding_date,
9195           VIEW_BY_DATE = l_view_by_date,
9196           LAST_UPDATE_DATE = SYSDATE,
9197           LAST_UPDATED_BY = p_user_id
9198         WHERE
9199           AUCTION_HEADER_ID = p_auction_header_id;
9200 
9201         -- Submit the concurrent program to generate the pdf
9202         l_return_value := FND_REQUEST.SUBMIT_REQUEST (
9203           APPLICATION => 'PON',
9204           PROGRAM => 'PON_GENERATE_PDF',
9205           DESCRIPTION => null,
9206           START_TIME => null,
9207           SUB_REQUEST => false,
9208           ARGUMENT1 => p_auction_header_id,
9209           ARGUMENT2 => p_client_timezone,
9210           ARGUMENT3 => p_server_timezone,
9211           ARGUMENT4 => p_date_format_mask);
9212 
9213         -- Send notification to user about success of the concurrent
9214         -- program.
9215         report_concurrent_success (
9216           x_result => l_result,
9217           x_error_code => l_error_code,
9218           x_error_message => l_error_msg,
9219           p_request_id => l_request_id,
9220           p_user_name => p_user_name,
9221           p_auction_header_id => p_auction_header_id,
9222           p_program_type_code => l_programTypeCode);
9223 
9224       END IF; --}
9225 
9226       RETCODE := 0;
9227     END IF; --}
9228 
9229   EXCEPTION WHEN OTHERS THEN --} End of Try block and start of catch block{
9230 
9231       -- In case of an exception then
9232       -- rollback any changes done and send out a failure notification
9233       ROLLBACK;
9234 
9235       IF (FND_LOG.level_exception >= FND_LOG.g_current_runtime_level) THEN --{
9236         FND_LOG.string(log_level => FND_LOG.level_exception,
9237           module  =>  g_module_prefix || l_module_name,
9238           message  => substrb(SQLERRM, 1, 500));
9239       END IF; --}
9240 
9241       -- Set the concurrent program status to error
9242       RETCODE := 2;
9243 
9244       -- Insert a row into the interface error table
9245       LOG_INTERFACE_ERROR (
9246         p_interface_type => g_interface_type,
9247         p_error_message_name => 'PON_UNEXPECTED_ERROR',
9248         p_token1_name => null,
9249         p_token1_value => null,
9250         p_token2_name => null,
9251         p_token2_value => null,
9252         p_request_id => l_request_id,
9253         p_auction_header_id => p_auction_header_id,
9254         p_expiration_date => SYSDATE + 7,
9255         p_user_id => p_user_id);
9256 
9257       --Send the failure notification
9258       report_concurrent_failure (
9259         x_result => l_result,
9260         x_error_code => l_error_code,
9261         x_error_message => l_error_msg,
9262         p_request_id => l_request_id,
9263         p_user_name => p_user_name,
9264         p_auction_header_id => p_auction_header_id,
9265         p_program_type_code => l_programTypeCode);
9266   END; --}
9267 
9268   COMMIT;
9269 
9270   IF (FND_LOG.level_procedure >= FND_LOG.g_current_runtime_level) THEN --{
9271     FND_LOG.string(log_level => FND_LOG.level_procedure,
9272       module  =>  g_module_prefix || l_module_name,
9273       message  => 'Leaving concurrent program');
9274   END IF; --}
9275 
9276 END PON_PUBLISH_SUPER_LARGE_NEG;
9277 
9278 
9279 END PON_NEGOTIATION_PUBLISH_PVT;