[Home] [Help]
PACKAGE BODY: APPS.PO_LINE_LOCATIONS_SV7
Source
1 PACKAGE BODY PO_LINE_LOCATIONS_SV7 AS
2 /* $Header: POXPISVB.pls 120.1.12000000.1 2007/01/16 23:04:46 appldev ship $ */
3
4 /*================================================================
5
6 PROCEDURE NAME: validate_po_line_coordination()
7
8 ==================================================================*/
9 PROCEDURE validate_po_line_coordination(
10 X_interface_header_id IN NUMBER,
11 X_interface_line_id IN NUMBER,
12 X_item_id IN NUMBER,
13 X_item_description IN VARCHAR2,
14 X_item_revision IN VARCHAR2,
15 X_po_line_id IN NUMBER,
16 X_po_header_id IN NUMBER,
17 X_unit_of_measure IN VARCHAR2,
18 X_line_type_id IN NUMBER,
19 X_category_id IN NUMBER,
20 X_type_lookup_code IN VARCHAR2,
21 X_header_processable_flag IN OUT NOCOPY VARCHAR2,
22 p_line_num IN NUMBER,
23 p_job_id IN NUMBER --<FPJ SERVICES>
24 )
25 IS
26 X_progress varchar2(3) := NULL;
27 X_count binary_integer;
28 X_order_type varchar2(25) := NULL;
29 l_line_num po_lines_interface.line_num%TYPE := NULL;
30
31 BEGIN
32 X_progress := '010';
33 /* if the create_po_line_loc_flag is Y and the order_type
34 lookup_code is AMOUNT and type_lookup_code is BLANKET
35 , then it should be an error, since we can not create
36 price break for amount-based lines
37 */
38
39 BEGIN
40 SELECT order_type_lookup_code
41 INTO X_order_type
42 FROM po_line_types
43 WHERE line_type_id = X_line_type_id;
44 EXCEPTION
45 WHEN no_data_found THEN
46 X_order_type := NULL;
47 END;
48
49 X_progress := '020';
50
51 --<SERVICES FPJ>
52 --Price breaks not allowed for FIXED PRICE line types as well
53 IF (X_type_lookup_code = 'BLANKET') AND
54 (X_order_type IN ('AMOUNT', 'FIXED PRICE')) --<SERVICES FPJ>
55 THEN
56 po_interface_errors_sv1.handle_interface_errors(
57 'PO_DOCS_OPEN_INTERFACE',
58 'FATAL',
59 null,
60 x_interface_header_id,
61 x_interface_line_id,
62 'PO_PDOI_PRICE_BRK_AMT_BASED_LN',
63 'PO_LINES_INTERFACE',
64 null,
65 null,null,null,null,null,null,
66 null,null,null,null,null,null,
67 x_header_processable_flag);
68 END IF;
69
70 /* check to see if we can find the match in po_lines table
71 based on the information that we had . Note we do not match
72 unit_of_measure ... because for quotes we can specify UOM different from
73 what is specified in po_lines, as long as it is a valid UOM.
74 */
75 --<SERVICES FPJ>
76 --Search po_lines table based on job_id
77 X_progress := '030';
78 IF (X_item_id is NOT NULL) THEN
79
80 SELECT count(*)
81 INTO X_count
82 FROM po_lines
83 WHERE po_header_id = X_po_header_id
84 AND po_line_id = X_po_line_id
85 AND item_id = X_item_id
86 AND (item_revision = X_item_revision
87 OR
88 (item_revision is NULL AND X_item_revision is NULL)
89 )
90 AND line_type_id = X_line_type_id
91 AND category_id = X_category_id;
92
93 IF X_count = 0 THEN
94 po_interface_errors_sv1.handle_interface_errors(
95 'PO_DOCS_OPEN_INTERFACE',
96 'FATAL',
97 null,
98 x_interface_header_id,
99 x_interface_line_id,
100 'PO_PDOI_INVALID_LOCATION_REC',
101 'PO_LINES_INTERFACE',
102 null,
103 null,null,null,null,null,null,
104 null,null,null,null,null,null,
105 x_header_processable_flag);
106 END IF;
107
108 /*
109 Bug 2845962
110 Check that X_item_description is not null
111 */
112 ELSIF (X_item_description is NOT NULL) THEN /* item_id is null */
113 X_progress := '040';
114
115 SELECT count(*)
116 INTO X_count
117 FROM po_lines
118 WHERE po_header_id = X_po_header_id
119 AND po_line_id = X_po_line_id
120 AND item_description = X_item_description
121 AND line_type_id = X_line_type_id
122 AND category_id = X_category_id;
123
124 IF (X_count = 0) THEN
125 po_interface_errors_sv1.handle_interface_errors(
126 'PO_DOCS_OPEN_INTERFACE',
127 'FATAL',
128 null,
129 x_interface_header_id,
130 x_interface_line_id,
131 'PO_PDOI_INVALID_LOCATION_REC',
132 'PO_LINES_INTERFACE',
133 null,
134 null,null,null,null,null,null,
135 null,null,null,null,null,null,
136 x_header_processable_flag);
137 END IF;
138
139 --<SERVICES FPJ START>
140 ELSIF (p_job_id IS NOT NULL) THEN
141
142 SELECT count(*)
143 INTO X_count
144 FROM PO_LINES
145 WHERE po_header_id = X_po_header_id
146 AND po_line_id = X_po_line_id
147 AND job_id = p_job_id
148 AND line_type_id = X_line_type_id
149 AND category_id = X_category_id;
150
151 IF X_count = 0 THEN
152 PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
153 X_interface_type => 'PO_DOCS_OPEN_INTERFACE',
154 X_Error_type => 'FATAL',
155 X_Batch_id => NULL,
156 X_Interface_Header_Id => x_interface_header_id,
157 X_Interface_Line_id => x_interface_line_id,
158 X_Error_message_name => 'PO_PDOI_INVALID_LOCATION_REC',
159 X_Table_name => 'PO_LINES_INTERFACE',
160 X_Column_name => 'NULL',
161 X_TokenName1 => NULL,
162 X_TokenName2 => NULL,
163 X_TokenName3 => NULL,
164 X_TokenName4 => NULL,
165 X_TokenName5 => NULL,
166 X_TokenName6 => NULL,
167 X_TokenValue1 => NULL,
168 X_TokenValue2 => NULL,
169 X_TokenValue3 => NULL,
170 X_TokenValue4 => NULL,
171 X_TokenValue5 => NULL,
172 X_TokenValue6 => NULL,
173 X_header_processable_flag => x_header_processable_flag);
174 END IF;
175 --<SERVICES FPJ END>
176
177 /*
178 Bug 2845962 START
179 When matching a shipment to a line, either line number, item ID or
180 item description needs to be available. If all of them are null,
181 an error message will be given.
182 */
183 ELSE
184 X_progress := '050';
185
186 SELECT count(*)
187 INTO X_count
188 FROM po_lines
189 WHERE po_header_id = X_po_header_id
190 AND po_line_id = X_po_line_id
191 AND line_num = p_line_num;
192
193 IF (X_count = 0) THEN
194 po_interface_errors_sv1.handle_interface_errors(
195 'PO_DOCS_OPEN_INTERFACE',
196 'FATAL',
197 null,
198 x_interface_header_id,
199 x_interface_line_id,
200 'PO_PDOI_INVALID_LOCATION_REC',
201 'PO_LINES_INTERFACE',
202 null,
203 null,null,null,null,null,null,
204 null,null,null,null,null,null,
205 x_header_processable_flag);
206 END IF;
207 END IF;
208 /* Bug 2845962 END */
209
210 EXCEPTION
211 WHEN others THEN
212 po_message_s.sql_error('validate_po_line_coordination',
213 x_progress, sqlcode);
214 raise;
215 END validate_po_line_coordination;
216
217 /*================================================================
218
219 PROCEDURE NAME: validate_po_line_locations()
220
221 ==================================================================*/
222 PROCEDURE validate_po_line_locations(
223 x_interface_header_id IN NUMBER,
224 x_interface_line_id IN NUMBER,
225 x_line_location_id IN NUMBER,
226 x_last_update_date IN DATE,
227 x_last_updated_by IN NUMBER,
228 x_po_header_id IN NUMBER,
229 x_po_line_id IN NUMBER,
230 x_last_update_login IN NUMBER,
231 x_creation_date IN DATE,
232 x_created_by IN NUMBER,
233 x_quantity IN NUMBER,
234 x_quantity_received IN NUMBER,
235 x_quantity_accepted IN NUMBER,
236 x_quantity_rejected IN NUMBER,
237 x_quantity_billed IN NUMBER,
238 x_quantity_cancelled IN NUMBER,
239 x_unit_meas_lookup_code IN VARCHAR2,
240 x_po_release_id IN NUMBER,
241 x_ship_to_location_id IN NUMBER,
242 x_ship_via_lookup_code IN VARCHAR2,
243 x_need_by_date IN DATE,
244 x_promised_date IN DATE,
245 x_last_accept_date IN DATE,
246 x_price_override IN NUMBER,
247 x_encumbered_flag IN VARCHAR2,
248 x_encumbered_date IN DATE,
249 x_fob_lookup_code IN VARCHAR2,
250 x_freight_terms_lookup_code IN VARCHAR2,
251 x_taxable_flag IN VARCHAR2,
252 x_tax_name IN VARCHAR2,
253 x_estimated_tax_amount IN NUMBER,
254 x_from_header_id IN NUMBER,
255 x_from_line_id IN NUMBER,
256 x_from_line_location_id IN NUMBER,
257 x_start_date IN DATE,
258 x_end_date IN DATE,
259 x_lead_time IN NUMBER,
260 x_lead_time_unit IN VARCHAR2,
261 x_price_discount IN NUMBER,
262 x_terms_id IN NUMBER,
263 x_approved_flag IN VARCHAR2,
264 x_approved_date IN DATE,
265 x_closed_flag IN VARCHAR2,
266 x_cancel_flag IN VARCHAR2,
267 x_cancelled_by IN NUMBER,
268 x_cancel_date IN DATE,
269 x_cancel_reason IN VARCHAR2,
270 x_firm_status_lookup_code IN VARCHAR2,
271 x_firm_date IN DATE,
272 x_attribute_category IN VARCHAR2,
273 x_attribute1 IN VARCHAR2,
274 x_attribute2 IN VARCHAR2,
275 x_attribute3 IN VARCHAR2,
276 x_attribute4 IN VARCHAR2,
277 x_attribute5 IN VARCHAR2,
278 x_attribute6 IN VARCHAR2,
279 x_attribute7 IN VARCHAR2,
280 x_attribute8 IN VARCHAR2,
281 x_attribute9 IN VARCHAR2,
282 x_attribute10 IN VARCHAR2,
283 x_unit_of_measure_class IN VARCHAR2,
284 x_attribute11 IN VARCHAR2,
285 x_attribute12 IN VARCHAR2,
286 x_attribute13 IN VARCHAR2,
287 x_attribute14 IN VARCHAR2,
288 x_attribute15 IN VARCHAR2,
289 x_inspection_required_flag IN VARCHAR2,
290 x_receipt_required_flag IN VARCHAR2,
291 x_qty_rcv_tolerance IN NUMBER,
292 x_qty_rcv_exception_code IN VARCHAR2,
293 x_enforce_ship_to_loc_code IN VARCHAR2,
294 x_allow_sub_receipts_flag IN VARCHAR2,
295 x_days_early_receipt_allowed IN NUMBER,
296 x_days_late_receipt_allowed IN NUMBER,
297 x_receipt_days_exception_code IN VARCHAR2,
298 x_invoice_close_tolerance IN NUMBER,
299 x_receive_close_tolerance IN NUMBER,
300 x_ship_to_organization_id IN NUMBER,
301 x_shipment_num IN NUMBER,
302 x_source_shipment_id IN NUMBER,
303 x_shipment_type IN VARCHAR2,
304 x_closed_code IN VARCHAR2,
305 x_request_id IN NUMBER,
306 x_program_application_id IN NUMBER,
307 x_program_id IN NUMBER,
308 x_program_update_date IN DATE,
309 x_ussgl_transaction_code IN VARCHAR2,
310 x_government_context IN VARCHAR2,
311 x_receiving_routing_id IN NUMBER,
312 x_accrue_on_receipt_flag IN VARCHAR2,
313 x_closed_reason IN VARCHAR2,
314 x_closed_date IN DATE,
315 x_closed_by IN NUMBER,
316 x_org_id IN NUMBER,
317 x_def_inv_org_id IN NUMBER,
318 x_header_processable_flag IN OUT NOCOPY VARCHAR2,
319 x_hd_type_lookup_code IN VARCHAR2,
320 X_item_id IN NUMBER,
321 X_item_revision IN VARCHAR2,
322 p_item_category_id IN NUMBER, --< Shared Proc FPJ >
323 x_transaction_flow_header_id OUT NOCOPY NUMBER, --< Shared Proc FPJ >
324 p_order_type_lookup_code IN VARCHAR2, --<SERVICES FPJ>
325 p_purchase_basis IN VARCHAR2, --<SERVICES FPJ>
326 p_job_id IN NUMBER
327 )
328 IS
329
330 x_progress VARCHAR2(3) := null;
331 x_valid BOOLEAN;
332 x_res_terms_id number := null;
333 -- Bug: 1710995 Define the codes according to the definition in the po_lookup_codes table.
334 x_res_fob po_lookup_codes.lookup_code%TYPE := null;
335 x_res_freight po_lookup_codes.lookup_code%TYPE := null;
336 x_res_carrier varchar2(25) := null;
337 X_temp_count binary_integer;
338 l_header_start_date date := null; /* <TIMEPHASED FPI> */
339 l_header_end_date date := null; /* <TIMEPHASED FPI> */
340 l_exp_date date := null; /* <TIMEPHASED FPI> */
341 l_errormsg varchar2(80) := null; /* <TIMEPHASED FPI> */
342 l_pb_lookup_code po_lines_all.price_break_lookup_code%TYPE := null; /* <TIMEPHASED FPI> */
343 l_is_ship_to_org_valid BOOLEAN; --< Shared Proc FPJ >
344 l_in_current_sob BOOLEAN; --< Shared Proc FPJ >
345 l_check_txn_flow BOOLEAN; --< Shared Proc FPJ >
346 l_return_status VARCHAR2(1); --< Shared Proc FPJ >
347 l_line_price PO_LINES_ALL.unit_price%TYPE; -- Bug 3348047
348
349 BEGIN
350
351 /*** first need to make sure all the required columns are populated ***/
352 X_progress := '010';
353 IF (x_shipment_type IS NULL) THEN
354 po_interface_errors_sv1.handle_interface_errors(
355 'PO_DOCS_OPEN_INTERFACE',
356 'FATAL',
357 null,
358 x_interface_header_id,
359 x_interface_line_id,
360 'PO_PDOI_COLUMN_NOT_NULL',
361 'PO_LINES_INTERFACE',
362 'SHIPMENT_TYPE',
363 'COLUMN_NAME',
364 null,null,null,null,null,
365 'SHIPMENT_TYPE',
366 null,null,null,null,null,
367 x_header_processable_flag);
368 END IF;
369
370 X_progress := '020';
371 IF (X_shipment_num IS NULL) THEN
372 po_interface_errors_sv1.handle_interface_errors(
373 'PO_DOCS_OPEN_INTERFACE',
374 'FATAL',
375 null,
376 x_interface_header_id,
377 x_interface_line_id,
378 'PO_PDOI_COLUMN_NOT_NULL',
379 'PO_LINES_INTERFACE',
380 'SHIPMENT_NUM',
381 'COLUMN_NAME',
382 null,null,null,null,null,
383 'SHIPMENT_NUM',
384 null,null,null,null,null,
385 x_header_processable_flag);
386
387
388 END IF;
389
390 X_progress := '030';
391 IF (X_line_location_id IS NULL) THEN
392 po_interface_errors_sv1.handle_interface_errors(
393 'PO_DOCS_OPEN_INTERFACE',
394 'FATAL',
395 null,
396 x_interface_header_id,
397 x_interface_line_id,
398 'PO_PDOI_COLUMN_NOT_NULL',
399 'PO_LINES_INTERFACE',
400 'PO_LINE_LOCATION_ID',
401 'COLUMN_NAME',
402 null,null,null,null,null,
403 'PO_LINE_LOCATION_ID',
404 null,null,null,null,null,
405 x_header_processable_flag);
406
407 END IF;
408
409
410 X_progress := '040';
411 IF (X_po_line_id IS NULL) THEN
412 po_interface_errors_sv1.handle_interface_errors(
413 'PO_DOCS_OPEN_INTERFACE',
414 'FATAL',
415 null,
416 x_interface_header_id,
417 x_interface_line_id,
418 'PO_PDOI_COLUMN_NOT_NULL',
419 'PO_LINES_INTERFACE',
420 'PO_LINE_ID',
421 'COLUMN_NAME',
422 null,null,null,null,null,
423 'PO_LINE_ID',
424 null,null,null,null,null,
425 x_header_processable_flag);
426
427 END IF;
428
429
430 X_progress := '050';
431 IF (X_po_header_id IS NULL) THEN
432 po_interface_errors_sv1.handle_interface_errors(
433 'PO_DOCS_OPEN_INTERFACE',
434 'FATAL',
435 null,
436 x_interface_header_id,
437 x_interface_line_id,
438 'PO_PDOI_COLUMN_NOT_NULL',
439 'PO_LINES_INTERFACE',
440 'PO_HEADER_ID',
441 'COLUMN_NAME',
442 null,null,null,null,null,
443 'PO_HEADER_ID',
444 null,null,null,null,null,
445 x_header_processable_flag);
446 END IF;
447
448
449 X_progress := '060';
450
451 --<SERVICES FPJ START>
452 --Allow only 1 shipment for Temp Labor line types.
453
454 IF (x_hd_type_lookup_code = 'STANDARD'
455 AND p_purchase_basis = 'TEMP LABOR') THEN
456
457 --check if there is already a shipment
458 SELECT COUNT(*)
459 INTO x_temp_count
460 FROM PO_LINE_LOCATIONS
461 WHERE po_line_id = x_po_line_id;
462
463 IF x_temp_count >= 1 THEN
464 PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
465 X_interface_type => 'PO_DOCS_OPEN_INTERFACE',
466 X_Error_type => 'FATAL',
467 X_Batch_id => NULL,
468 X_Interface_Header_Id => x_interface_header_id,
469 X_Interface_Line_id => x_interface_line_id,
470 X_Error_message_name => 'PO_PDOI_SVC_NO_MULTI_SHIP',
471 X_Table_name => 'PO_LINES_INTERFACE',
472 X_Column_name => 'NULL',
473 X_TokenName1 => NULL,
474 X_TokenName2 => NULL,
475 X_TokenName3 => NULL,
476 X_TokenName4 => NULL,
477 X_TokenName5 => NULL,
478 X_TokenName6 => NULL,
479 X_TokenValue1 => NULL,
480 X_TokenValue2 => NULL,
481 X_TokenValue3 => NULL,
482 X_TokenValue4 => NULL,
483 X_TokenValue5 => NULL,
484 X_TokenValue6 => NULL,
485 X_header_processable_flag => x_header_processable_flag);
486 END IF;
487 END IF;
488
489 X_progress := '065';
490
491 IF (p_order_type_lookup_code in ('RATE', 'FIXED PRICE')) THEN
492
493 IF (x_quantity IS NOT NULL) THEN
494 PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
495 X_interface_type => 'PO_DOCS_OPEN_INTERFACE',
496 X_Error_type => 'FATAL',
497 X_Batch_id => NULL,
498 X_Interface_Header_Id => x_interface_header_id,
499 X_Interface_Line_id => x_interface_line_id,
500 X_Error_message_name => 'PO_PDOI_SVC_PB_NO_QTY',
501 X_Table_name => 'PO_LINES_INTERFACE',
502 X_Column_name => 'QUANTITY',
503 X_TokenName1 => NULL,
504 X_TokenName2 => NULL,
505 X_TokenName3 => NULL,
506 X_TokenName4 => NULL,
507 X_TokenName5 => NULL,
508 X_TokenName6 => NULL,
509 X_TokenValue1 => NULL,
510 X_TokenValue2 => NULL,
511 X_TokenValue3 => NULL,
512 X_TokenValue4 => NULL,
513 X_TokenValue5 => NULL,
514 X_TokenValue6 => NULL,
515 X_header_processable_flag => x_header_processable_flag);
516 END IF;
517
518 ELSE
519 --<SERVICES FPJ END>
520
521 if (x_hd_type_lookup_code <> 'BLANKET') then /* <TIMEPHASED FPI> */
522 IF (X_quantity IS NULL) THEN
523 po_interface_errors_sv1.handle_interface_errors(
524 'PO_DOCS_OPEN_INTERFACE',
525 'FATAL',
526 null,
527 x_interface_header_id,
528 x_interface_line_id,
529 'PO_PDOI_COLUMN_NOT_NULL',
530 'PO_LINES_INTERFACE',
531 'QUANTITY',
532 'COLUMN_NAME',
533 null,null,null,null,null,
534 'QUANTITY',
535 null,null,null,null,null,
536 x_header_processable_flag);
537 END IF;
538 end if; /* <TIMEPHASED FPI> */
539 END IF; --p_order_type_lookup_code in ('RATE', 'FIXED PRICE')
540
541 X_progress := '070';
542
543 /* <TIMEPHASED FPI> */
544 /* Added x_price_discount as part of the condition */
545
546 IF (p_order_type_lookup_code <> 'FIXED PRICE') THEN --<SERVICES FPJ>
547 IF (X_price_override IS NULL AND x_price_discount IS NULL) THEN /* <TIMEPHASED FPI> */
548 po_interface_errors_sv1.handle_interface_errors(
549 'PO_DOCS_OPEN_INTERFACE',
550 'FATAL',
551 null,
552 x_interface_header_id,
553 x_interface_line_id,
554 'PO_PDOI_COLUMN_NOT_NULL',
555 'PO_LINES_INTERFACE',
556 'PRICE_OVERRIDE',
557 'COLUMN_NAME',
558 null,null,null,null,null,
559 'PRICE_OVERRIDE',
560 null,null,null,null,null,
561 x_header_processable_flag);
562 END IF;
563 END IF; --<SERVICES FPJ>
564
565
566 /* <TIMEPHASED FPI START> */
567 if (x_hd_type_lookup_code = 'BLANKET') then
568
569 /* Get the header and line values from the database */
570 BEGIN
571 select poh.start_date, poh.end_date, pol.expiration_date
572 into l_header_start_date, l_header_end_date, l_exp_date
573 from po_headers poh,
574 po_lines pol
575 where poh.po_header_id = x_po_header_id
576 and pol.po_line_id = x_po_line_id;
577 EXCEPTION
578 when others then
579 null;
580 END;
581
582 /* Pricebreak effective dates validations */
583 po_shipments_sv8.validate_effective_dates(
584 l_header_start_date,
585 l_header_end_date,
586 x_start_date,
587 x_end_date,
588 l_exp_date,
589 l_errormsg);
590 if (l_errormsg is not null) then
591 po_interface_errors_sv1.handle_interface_errors(
592 'PO_DOCS_OPEN_INTERFACE',
593 'FATAL',
594 null,
595 x_interface_header_id,
596 x_interface_line_id,
597 l_errormsg,
598 'PO_LINES_INTERFACE',
599 'null',
600 'null',
601 null,null,null,null,null,
602 'null',
603 null,null,null,null,null,
604 x_header_processable_flag);
605 end if;
606
607 /* Pricebreak attributes validations */
608 po_shipments_sv8.validate_pricebreak_attributes(
609 x_start_date,
610 x_end_date,
611 x_quantity,
612 x_ship_to_organization_id,
613 x_ship_to_location_id,
614 l_errormsg);
615 if (l_errormsg is not null) then
616 po_interface_errors_sv1.handle_interface_errors(
617 'PO_DOCS_OPEN_INTERFACE',
618 'FATAL',
619 null,
620 x_interface_header_id,
621 x_interface_line_id,
622 l_errormsg,
623 'PO_LINES_INTERFACE',
624 'null',
625 'null',
626 null,null,null,null,null,
627 'null',
628 null,null,null,null,null,
629 x_header_processable_flag);
630 end if;
631
632 /* Validations for cummulative pricing. If effective dates are present,
633 this record will not be entered */
634 if (x_start_date is not null OR x_end_date is not null) then
635 BEGIN
636 select price_break_lookup_code
637 into l_pb_lookup_code
638 from po_lines
639 where po_header_id = x_po_header_id
640 and po_line_id = x_po_line_id;
641 EXCEPTION
642 when others then
643 null;
644 END;
645 if (l_pb_lookup_code = 'CUMULATIVE') then
646 po_interface_errors_sv1.handle_interface_errors(
647 'PO_DOCS_OPEN_INTERFACE',
648 'FATAL',
649 null,
650 x_interface_header_id,
651 x_interface_line_id,
652 'PO_PDOI_CUMULATIVE_FAILED',
653 'PO_LINES_INTERFACE',
654 'null',
655 'null',
656 null,null,null,null,null,
657 'null',
658 null,null,null,null,null,
659 x_header_processable_flag);
660 end if;
661
662 end if;
663
664 end if;
665 /* <TIMEPHASED FPI END> */
666
667 X_progress := '080';
668 /*** validate ship_to_organization ***/
669 IF (X_item_id is not NULL) AND (x_ship_to_organization_id is not NULL)
670 THEN
671 IF (X_item_revision is not NULL) THEN
672 /* only allow those org_id when item_id and item_revision
673 is defined in mtl_item_revisions table */
674
675 X_progress := '090';
676 SELECT count(*)
677 INTO X_temp_count
678 FROM mtl_item_revisions
679 WHERE inventory_item_id = X_item_id
680 AND organization_id = x_ship_to_organization_id
681 AND revision = X_item_revision;
682
683 IF (X_temp_count = 0) THEN
684 X_progress := '100';
685 po_interface_errors_sv1.handle_interface_errors(
686 'PO_DOCS_OPEN_INTERFACE',
687 'FATAL',
688 null,
689 x_interface_header_id,
690 x_interface_line_id,
691 'PO_PDOI_INVALID_SHIP_TO_ORG_ID',
692 'PO_LINES_INTERFACE',
693 'SHIP_TO_ORGANIZATION_ID',
694 'VALUE',
695 null,null,null,null,null,
696 x_ship_to_organization_id,
697 null,null,null,null,null,
698 x_header_processable_flag);
699 END IF;
700 ELSIF (X_item_revision is NULL) THEN
701 /* only allow those orgs in which the item_id is
702 defined in mtl_system_items table */
703
704 X_progress := '110';
705 SELECT count(*)
706 INTO X_temp_count
707 FROM mtl_system_items
708 WHERE inventory_item_id = X_item_id
709 AND organization_id = x_ship_to_organization_id;
710
711 IF (X_temp_count = 0) THEN
712 X_progress := '120';
713 po_interface_errors_sv1.handle_interface_errors(
714 'PO_DOCS_OPEN_INTERFACE',
715 'FATAL',
716 null,
717 x_interface_header_id,
718 x_interface_line_id,
719 'PO_PDOI_INVALID_SHIP_TO_ORG_ID',
720 'PO_LINES_INTERFACE',
721 'SHIP_TO_ORGANIZATION_ID',
722 'VALUE',
723 null,null,null,null,null,
724 x_ship_to_organization_id,
725 null,null,null,null,null,
726 x_header_processable_flag);
727 END IF;
728 END IF;
729 ELSIF (X_item_id is NULL) AND
730 (x_ship_to_organization_id is not null) THEN
731
732 X_progress := '130';
733 X_valid := hr_organizations_sv1.val_inv_organization_id(
734 x_ship_to_organization_id);
735 IF (x_valid = FALSE) THEN
736 X_progress := '140';
737 po_interface_errors_sv1.handle_interface_errors(
738 'PO_DOCS_OPEN_INTERFACE',
739 'FATAL',
740 null,
741 x_interface_header_id,
742 x_interface_line_id,
743 'PO_PDOI_INVALID_SHIP_TO_ORG_ID',
744 'PO_LINES_INTERFACE',
745 'SHIP_TO_ORGANIZATION_ID',
746 'VALUE',
747 null,null,null,null,null,
748 x_ship_to_organization_id,
749 null,null,null,null,null,
750 x_header_processable_flag);
751 END IF;
752 END IF;
753
754 --< Shared Proc FPJ Start >
755 IF (x_hd_type_lookup_code = 'STANDARD') AND
756 (x_ship_to_organization_id IS NOT NULL)
757 THEN
758 x_progress := '145';
759
760 -- Validate ship-to Org, which gets txn flow header if one exists
761 PO_SHARED_PROC_PVT.validate_ship_to_org
762 (p_init_msg_list => FND_API.g_false,
763 x_return_status => l_return_status,
764 p_ship_to_org_id => x_ship_to_organization_id,
765 p_item_category_id => p_item_category_id,
766 p_item_id => x_item_id, -- Bug 3433867
767 x_is_valid => l_is_ship_to_org_valid,
768 x_in_current_sob => l_in_current_sob,
769 x_check_txn_flow => l_check_txn_flow,
770 x_transaction_flow_header_id => x_transaction_flow_header_id);
771
772 IF (l_return_status = FND_API.g_ret_sts_unexp_error) THEN
773 x_progress := '147';
774 RAISE FND_API.g_exc_unexpected_error;
775 END IF;
776
777 IF (l_return_status <> FND_API.g_ret_sts_success) OR
778 (NOT l_is_ship_to_org_valid)
779 THEN
780 -- The ship-to org is not valid
781 PO_INTERFACE_ERRORS_SV1.handle_interface_errors
782 (x_interface_type => 'PO_DOCS_OPEN_INTERFACE',
783 x_error_type => 'FATAL',
784 x_batch_id => NULL,
785 x_interface_header_id => x_interface_header_id,
786 x_interface_line_id => x_interface_line_id,
787 x_error_message_name => 'PO_PDOI_INVALID_SHIP_TO_ORG_ID',
788 x_table_name => 'PO_LINES_INTERFACE',
789 x_column_name => 'SHIP_TO_ORGANIZATION_ID',
790 x_tokenname1 => 'VALUE',
791 x_tokenname2 => NULL,
792 x_tokenname3 => NULL,
793 x_tokenname4 => NULL,
794 x_tokenname5 => NULL,
795 x_tokenname6 => NULL,
796 x_tokenvalue1 => x_ship_to_organization_id,
797 x_tokenvalue2 => NULL,
798 x_tokenvalue3 => NULL,
799 x_tokenvalue4 => NULL,
800 x_tokenvalue5 => NULL,
801 x_tokenvalue6 => NULL,
802 x_header_processable_flag => x_header_processable_flag,
803 x_interface_dist_id => NULL);
804 END IF;
805
806 END IF; --<if STANDARD and x_ship_to_org...>
807 --< Shared Proc FPJ End >
808
809 --< Services FPJ Start >
810 IF (x_ship_to_organization_id IS NOT NULL) AND (p_job_id IS NOT NULL) THEN
811
812 x_progress := '148';
813
814 -- Validate ship-to Org with respect to job on PO line
815 PO_SERVICES_PVT.validate_ship_to_org
816 (x_return_status => l_return_status,
817 p_job_id => p_job_id,
818 p_ship_to_org_id => x_ship_to_organization_id,
819 x_is_valid => l_is_ship_to_org_valid);
820
821 IF (l_return_status = FND_API.g_ret_sts_unexp_error) THEN
822 x_progress := '149';
823 RAISE FND_API.g_exc_unexpected_error;
824 END IF;
825
826 IF (l_return_status <> FND_API.g_ret_sts_success) OR
827 (NOT l_is_ship_to_org_valid)
828 THEN
829 -- The ship-to org is not valid
830 PO_INTERFACE_ERRORS_SV1.handle_interface_errors
831 (x_interface_type => 'PO_DOCS_OPEN_INTERFACE',
832 x_error_type => 'FATAL',
833 x_batch_id => NULL,
834 x_interface_header_id => x_interface_header_id,
835 x_interface_line_id => x_interface_line_id,
836 x_error_message_name => 'PO_PDOI_INVALID_SHIP_TO_ORG_ID',
837 x_table_name => 'PO_LINES_INTERFACE',
838 x_column_name => 'SHIP_TO_ORGANIZATION_ID',
839 x_tokenname1 => 'VALUE',
840 x_tokenname2 => NULL,
841 x_tokenname3 => NULL,
842 x_tokenname4 => NULL,
843 x_tokenname5 => NULL,
844 x_tokenname6 => NULL,
845 x_tokenvalue1 => x_ship_to_organization_id,
846 x_tokenvalue2 => NULL,
847 x_tokenvalue3 => NULL,
848 x_tokenvalue4 => NULL,
849 x_tokenvalue5 => NULL,
850 x_tokenvalue6 => NULL,
851 x_header_processable_flag => x_header_processable_flag,
852 x_interface_dist_id => NULL);
853 END IF;
854
855 END IF; --<if x_ship_to_org and job not null>
856 --< Services FPJ End >
857
858 X_progress := '150';
859 IF (X_ship_to_location_id IS NOT NULL)
860 THEN
861 /* allow those which location_id does not have inv org
862 or ship_to_org_id matches the org specified in po_locations_val_v
863 */
864
865 X_progress := '160';
866 SELECT count(*)
867 INTO X_temp_count
868 FROM po_locations_val_v
869 WHERE location_id = X_ship_to_location_id
870 AND ship_to_site_flag = 'Y'
871 AND (inventory_organization_id IS NULL
872 OR
873 inventory_organization_id = X_ship_to_organization_id
874 OR
875 X_ship_to_organization_id IS NULL
876 );
877
878 IF (X_temp_count <> 1 ) THEN
879 X_progress := '170';
880 po_interface_errors_sv1.handle_interface_errors(
881 'PO_DOCS_OPEN_INTERFACE',
882 'FATAL',
883 null,
884 x_interface_header_id,
885 x_interface_line_id,
886 'PO_PDOI_INVALID_SHIP_TO_LOC_ID',
887 'PO_LINES_INTERFACE',
888 'SHIP_TO_LOCATION_ID',
889 'VALUE',
890 null,null,null,null,null,
891 x_ship_to_location_id,
892 null,null,null,null,null,
893 x_header_processable_flag);
894 END IF;
895 END IF;
896
897 IF (x_terms_id is not null) THEN
898 x_progress := '180';
899 po_terms_sv.val_ap_terms(x_terms_id, x_res_terms_id);
900 IF (x_res_terms_id is null) THEN
901 x_progress := '190';
902 po_interface_errors_sv1.handle_interface_errors(
903 'PO_DOCS_OPEN_INTERFACE',
904 'FATAL',
905 null,
906 x_interface_header_id,
907 x_interface_line_id,
908 'PO_PDOI_INVALID_PAY_TERMS',
909 'PO_LINES_INTERFACE',
910 'TERMS_ID',
911 'VALUE',
912 null,null,null,null,null,
913 x_terms_id,
914 null,null,null,null,null,
915 x_header_processable_flag);
916 END IF;
917 END IF;
918
919 x_progress := '200';
920 IF (x_hd_type_lookup_code = 'QUOTATION') THEN
921 x_progress := '210';
922 IF (x_qty_rcv_tolerance < 0)
923 THEN
924 po_interface_errors_sv1.handle_interface_errors(
925 'PO_DOCS_OPEN_INTERFACE',
926 'FATAL',
927 null,
928 x_interface_header_id,
929 x_interface_line_id,
930 'PO_PDOI_LT_ZERO',
931 'PO_LINES_INTERFACE',
932 'QTY_RCV_TOLERANCE',
933 'COLUMN_NAME',
934 'VALUE',
935 null,null,null,null,
936 'QTY_RCV_TOLERANCE',
937 x_qty_rcv_tolerance,
938 null,null,null,null,
939 x_header_processable_flag);
940 END IF;
941
942 IF (x_qty_rcv_exception_code is not null) THEN
943 x_progress := '220';
944 x_valid :=po_headers_sv6.val_lookup_code(
945 x_qty_rcv_exception_code,
946 'RECEIVING CONTROL LEVEL');
947 IF (x_valid = FALSE) THEN
948 po_interface_errors_sv1.handle_interface_errors(
949 'PO_DOCS_OPEN_INTERFACE',
950 'FATAL',
951 null,
952 x_interface_header_id,
953 x_interface_line_id,
954 'PO_PDOI_INVALID_RCV_EXCEP_CD',
955 'PO_LINES_INTERFACE',
956 'QTY_RCV_EXCEPTION_CODE',
957 'VALUE',
958 null,null,null,null,null,
959 x_qty_rcv_exception_code,
960 null,null,null,null,null,
961 x_header_processable_flag);
962 END IF;
963 END IF;
964
965 x_progress := '230';
966 IF (x_ship_via_lookup_code is not null) AND
967 (x_def_inv_org_id is not null)
968 THEN
969 po_vendors_sv.val_freight_carrier(x_ship_via_lookup_code,
970 x_def_inv_org_id, x_res_carrier);
971 IF (x_res_carrier is null) THEN
972 x_progress := '240';
973 po_interface_errors_sv1.handle_interface_errors(
974 'PO_DOCS_OPEN_INTERFACE',
975 'FATAL',
976 null,
977 x_interface_header_id,
978 x_interface_line_id,
979 'PO_PDOI_INVALID_FREIGHT_CARR',
980 'PO_LINES_INTERFACE',
981 'SHIP_VIA_LOOKUP_CODE',
982 'VALUE',
983 null,null,null,null,null,
984 x_ship_via_lookup_code,
985 null,null,null,null,null,
986 x_header_processable_flag);
987 END IF;
988 END IF;
989
990 IF (x_fob_lookup_code is not null) THEN
991 x_progress := '240';
992 po_vendors_sv.val_fob(x_fob_lookup_code, x_res_fob);
993 IF (x_res_fob is null) THEN
994 po_interface_errors_sv1.handle_interface_errors(
995 'PO_DOCS_OPEN_INTERFACE',
996 'FATAL',
997 null,
998 x_interface_header_id,
999 x_interface_line_id,
1000 'PO_PDOI_INVALID_FOB',
1001 'PO_LINES_INTERFACE',
1002 'FOB_LOOKUP_CODE',
1003 'VALUE',
1004 null,null,null,null,null,
1005 x_fob_lookup_code,
1006 null,null,null,null,null,
1007 x_header_processable_flag);
1008 END IF;
1009 END IF;
1010
1011 x_progress := '250';
1012 IF (x_freight_terms_lookup_code is not null) THEN
1013 x_progress := '260';
1014 po_vendors_sv.val_freight_terms(x_freight_terms_lookup_code,
1015 x_res_freight);
1016 IF (x_res_freight is null) THEN
1017 po_interface_errors_sv1.handle_interface_errors(
1018 'PO_DOCS_OPEN_INTERFACE',
1019 'FATAL',
1020 null,
1021 x_interface_header_id,
1022 x_interface_line_id,
1023 'PO_PDOI_INVALID_FREIGHT_TERMS',
1024 'PO_LINES_INTERFACE',
1025 'FREIGHT_TERMS_LOOKUP_CODE',
1026 'VALUE',
1027 null,null,null,null,null,
1028 x_freight_terms_lookup_code,
1029 null,null,null,null,null,
1030 x_header_processable_flag);
1031 END IF;
1032 END IF;
1033 END IF; /* document_type = 'QUOTATION' */
1034
1035 x_progress := '270';
1036 IF (x_price_override < 0) THEN
1037 po_interface_errors_sv1.handle_interface_errors(
1038 'PO_DOCS_OPEN_INTERFACE',
1039 'FATAL',
1040 null,
1041 x_interface_header_id,
1042 x_interface_line_id,
1043 'PO_PDOI_LT_ZERO',
1044 'PO_LINES_INTERFACE',
1045 'PRICE_OVERRIDE',
1046 'COLUMN_NAME',
1047 'VALUE',
1048 null,null,null,null,
1049 'PRICE_OVERRIDE',
1050 x_price_override,
1051 null,null,null,null,
1052 x_header_processable_flag);
1053 END IF;
1054
1055 x_progress := '280';
1056 IF (x_lead_time_unit is not null) THEN
1057 x_progress := '290';
1058 x_valid := po_unit_of_measures_sv1.val_unit_of_measure(x_lead_time_unit,
1059 NULL);
1060 IF (x_valid = FALSE) THEN
1061 po_interface_errors_sv1.handle_interface_errors(
1062 'PO_DOCS_OPEN_INTERFACE',
1063 'FATAL',
1064 null,
1065 x_interface_header_id,
1066 x_interface_line_id,
1067 'PO_PDOI_INVALID_LEAD_TIME',
1068 'PO_LINES_INTERFACE',
1069 'LEAD_TIME_UNIT',
1070 'VALUE',
1071 null,null,null,null,null,
1072 x_lead_time_unit,
1073 null,null,null,null,null,
1074 x_header_processable_flag);
1075 END IF;
1076 END IF;
1077
1078 x_progress := '300';
1079 IF (x_price_discount is not null) THEN
1080 x_progress := '310';
1081 x_valid := po_core_sv1.val_discount(x_price_discount);
1082 IF (x_valid = FALSE) THEN
1083 po_interface_errors_sv1.handle_interface_errors(
1084 'PO_DOCS_OPEN_INTERFACE',
1085 'FATAL',
1086 null,
1087 x_interface_header_id,
1088 x_interface_line_id,
1089 'PO_PDOI_INVALID_DISCOUNT',
1090 'PO_LINES_INTERFACE',
1091 'PRICE_DISCOUNT',
1092 'VALUE',
1093 null,null,null,null,null,
1094 x_price_discount,
1095 null,null,null,null,null,
1096 x_header_processable_flag);
1097 END IF;
1098 END IF;
1099
1100 x_progress := '320';
1101 IF (x_start_date is not null) AND (x_end_date is not null) THEN
1102 x_progress := '330';
1103 x_valid := po_core_sv1.val_start_and_end_date(x_start_date, x_end_date);
1104 IF (x_valid = FALSE) THEN
1105 po_interface_errors_sv1.handle_interface_errors(
1106 'PO_DOCS_OPEN_INTERFACE',
1107 'FATAL',
1108 null,
1109 x_interface_header_id,
1110 x_interface_line_id,
1111 'PO_PDOI_INVALID_START_DATE',
1112 'PO_LINES_INTERFACE',
1113 'START_DATE',
1114 'VALUE',
1115 null,null,null,null,null,
1116 fnd_date.date_to_chardate(x_start_date),
1117 null,null,null,null,null,
1118 x_header_processable_flag);
1119 END IF;
1120 END IF;
1121
1122 X_progress := '340';
1123 IF (x_po_header_id IS NOT null) AND
1124 (x_start_date IS NOT NULL)
1125 THEN
1126 x_progress := '350';
1127 /** validate start_date is greater than effective date
1128 of the header ***/
1129 x_valid := po_core_sv1.val_effective_date(x_start_date,
1130 x_po_header_id);
1131 IF (x_valid = FALSE) THEN
1132 po_interface_errors_sv1.handle_interface_errors(
1133 'PO_DOCS_OPEN_INTERFACE',
1134 'FATAL',
1135 null,
1136 x_interface_header_id,
1137 x_interface_line_id,
1138 'PO_PDOI_EFF_DATE_GT_HEADER',
1139 'PO_LINES_INTERFACE',
1140 'EFFECTIVE_DATE',
1141 'VALUE',
1142 null,null,null,null,null,
1143 fnd_date.date_to_chardate(x_start_date),
1144 null,null,null,null,null,
1145 x_header_processable_flag);
1146 END IF;
1147 END IF;
1148
1149 IF (X_po_header_id IS NOT NULL) AND (X_end_date IS NOT NULL) THEN
1150 x_progress := '360';
1151 x_valid := po_core_sv1.val_effective_date(x_end_date,
1152 x_po_header_id);
1153 IF (x_valid = FALSE) THEN
1154 po_interface_errors_sv1.handle_interface_errors(
1155 'PO_DOCS_OPEN_INTERFACE',
1156 'FATAL',
1157 null,
1158 x_interface_header_id,
1159 x_interface_line_id,
1160 'PO_PDOI_EFF_DATE_GT_HEADER',
1161 'PO_LINES_INTERFACE',
1162 'EXPIRATION_DATE',
1163 'VALUE',
1164 null,null,null,null,null,
1165 fnd_date.date_to_chardate(x_end_date),
1166 null,null,null,null,null,
1167 x_header_processable_flag);
1168 END IF;
1169 END IF; /* if x_end_date is not null */
1170
1171 x_progress := '370';
1172 IF (X_hd_type_lookup_code is not null) AND
1173 (X_shipment_type is not null) THEN
1174
1175 X_progress := '380';
1176 X_valid := po_line_locations_sv1.val_shipment_type(X_shipment_type,
1177 X_hd_type_lookup_code);
1178 IF (X_valid = FALSE) THEN
1179 X_progress := '390';
1180 po_interface_errors_sv1.handle_interface_errors(
1181 'PO_DOCS_OPEN_INTERFACE',
1182 'FATAL',
1183 null,
1184 x_interface_header_id,
1185 x_interface_line_id,
1186 'PO_PDOI_INVALID_SHIPMENT_TYPE',
1187 'PO_LINES_INTERFACE',
1188 'SHIPMENT_TYPE',
1189 'TYPE',
1190 'VALUE',
1191 null,null,null,null,
1192 x_shipment_type,
1193 x_hd_type_lookup_code,
1194 null,null,null,null,
1195 x_header_processable_flag);
1196 END IF;
1197 END IF;
1198
1199 X_progress := '400';
1200 IF (x_shipment_num is not null) AND (x_po_header_id is not null) AND
1201 (x_po_line_id is not null) AND (x_shipment_type is not null) THEN
1202
1203 X_progress := '410';
1204 x_valid := po_line_locations_sv1.val_shipment_num(x_shipment_num,
1205 x_shipment_type,
1206 x_po_header_id,
1207 x_po_line_id,
1208 null);
1209 IF (x_valid = FALSE) THEN
1210 po_interface_errors_sv1.handle_interface_errors(
1211 'PO_DOCS_OPEN_INTERFACE',
1212 'FATAL',
1213 null,
1214 x_interface_header_id,
1215 x_interface_line_id,
1216 'PO_PDOI_SHIPMENT_NUM_UNIQUE',
1217 'PO_LINES_INTERFACE',
1218 'SHIPMENT_NUM',
1219 'VALUE',
1220 null,null,null,null,null,
1221 x_shipment_num,
1222 null,null,null,null,null,
1223 x_header_processable_flag);
1224 END IF;
1225
1226 X_progress := '420';
1227 IF (x_shipment_num <= 0) THEN
1228 X_progress := '430';
1229 po_interface_errors_sv1.handle_interface_errors(
1230 'PO_DOCS_OPEN_INTERFACE',
1231 'FATAL',
1232 null,
1233 x_interface_header_id,
1234 x_interface_line_id,
1235 'PO_PDOI_LT_ZERO',
1236 'PO_LINES_INTERFACE',
1237 'SHIPMENT_NUM',
1238 'COLUMN_NAME',
1239 'VALUE',
1240 null,null,null,null,
1241 'SHIPMENT_NUM',
1242 x_shipment_num,
1243 null,null,null,null,
1244 x_header_processable_flag);
1245 END IF;
1246 END IF;
1247
1248 X_progress := '420';
1249 /*** validate uniqueness of po_line_location_id ***/
1250 X_valid := po_line_locations_sv7.val_line_location_id_unique(
1251 X_line_location_id);
1252
1253 IF (X_valid = FALSE) THEN
1254 po_interface_errors_sv1.handle_interface_errors(
1255 'PO_DOCS_OPEN_INTERFACE',
1256 'FATAL',
1257 null,
1258 x_interface_header_id,
1259 x_interface_line_id,
1260 'PO_PDOI_LINE_LOC_ID_UNIQUE',
1261 'PO_LINES_INTERFACE',
1262 'LINE_LOCATION_ID',
1263 'VALUE',
1264 null,null,null,null,null,
1265 x_line_location_id,
1266 null,null,null,null,null,
1267 x_header_processable_flag);
1268 END IF;
1269
1270 --VRANKAIY -> validation for std PO
1271 IF (x_shipment_type = 'STANDARD') THEN
1272
1273 x_progress := '430';
1274 IF (x_enforce_ship_to_loc_code is not null) THEN
1275 x_progress := '440';
1276
1277 IF (x_enforce_ship_to_loc_code <> 'NONE' AND
1278 x_enforce_ship_to_loc_code <> 'REJECT' AND
1279 x_enforce_ship_to_loc_code <> 'WARNING' ) THEN
1280 po_interface_errors_sv1.handle_interface_errors(
1281 'PO_DOCS_OPEN_INTERFACE',
1282 'FATAL',
1283 null,
1284 x_interface_header_id,
1285 x_interface_line_id,
1286 'PO_PDOI_INVALID_EN_SH_LOC_CODE',
1287 'PO_LINES_INTERFACE',
1288 'ENFORCE_SHIP_TO_LOCATION_CODE',
1289 'VALUE',
1290 null,null,null,null,null,
1291 x_enforce_ship_to_loc_code,
1292 null,null,null,null,null,
1293 x_header_processable_flag);
1294 END IF;
1295 END IF;
1296
1297 x_progress := '450';
1298 IF (x_allow_sub_receipts_flag is not null) THEN
1299 x_progress := '460';
1300 IF (x_allow_sub_receipts_flag <> 'Y' AND
1301 x_allow_sub_receipts_flag <> 'N' ) THEN
1302 po_interface_errors_sv1.handle_interface_errors(
1303 'PO_DOCS_OPEN_INTERFACE',
1304 'FATAL',
1305 null,
1306 x_interface_header_id,
1307 x_interface_line_id,
1308 'PO_PDOI_ALLOW_SUB_REC_FLAG',
1309 'PO_LINES_INTERFACE',
1310 'ALLOW_SUBSTITUE_RECEIPTS_FLAG',
1311 'VALUE',
1312 null,null,null,null,null,
1313 x_allow_sub_receipts_flag,
1314 null,null,null,null,null,
1315 x_header_processable_flag);
1316 END IF;
1317 END IF;
1318
1319 x_progress := '470';
1320 IF (x_days_early_receipt_allowed is not null) THEN
1321 x_progress := '480';
1322 IF (x_days_early_receipt_allowed < 0 ) THEN
1323 po_interface_errors_sv1.handle_interface_errors(
1324 'PO_DOCS_OPEN_INTERFACE',
1325 'FATAL',
1326 null,
1327 x_interface_header_id,
1328 x_interface_line_id,
1329 'PO_PDOI_DAYS_EARLY_REC_ALLOWED',
1330 'PO_LINES_INTERFACE',
1331 'DAYS_EARLY_RECEIPT_ALLOWED',
1332 'VALUE',
1333 null,null,null,null,null,
1334 x_days_early_receipt_allowed,
1335 null,null,null,null,null,
1336 x_header_processable_flag);
1337 END IF;
1338 END IF;
1339
1340 x_progress := '490';
1341 IF (x_receipt_days_exception_code is not null) THEN
1342 x_progress := '500';
1343
1344 IF (x_receipt_days_exception_code <> 'NONE' AND
1345 x_receipt_days_exception_code <> 'REJECT' AND
1346 x_receipt_days_exception_code <> 'WARNING' ) THEN
1347 po_interface_errors_sv1.handle_interface_errors(
1348 'PO_DOCS_OPEN_INTERFACE',
1349 'FATAL',
1350 null,
1351 x_interface_header_id,
1352 x_interface_line_id,
1353 'PO_PDOI_INV_REC_DAYS_EX_CODE',
1354 'PO_LINES_INTERFACE',
1355 'RECEIPT_DAYS_EXCEPTION_CODE',
1356 'VALUE',
1357 null,null,null,null,null,
1358 x_receipt_days_exception_code,
1359 null,null,null,null,null,
1360 x_header_processable_flag);
1361 END IF;
1362 END IF;
1363
1364 x_progress := '510';
1365 IF (x_invoice_close_tolerance is not null) THEN
1366 x_progress := '520';
1367 IF (x_invoice_close_tolerance >= 0 and
1368 x_invoice_close_tolerance <= 100) THEN
1369 x_valid := TRUE;
1370 ELSE
1371 x_valid := FALSE;
1372 END IF;
1373
1374 IF (x_valid = FALSE) THEN
1375 po_interface_errors_sv1.handle_interface_errors(
1376 'PO_DOCS_OPEN_INTERFACE',
1377 'FATAL',
1378 null,
1379 x_interface_header_id,
1380 x_interface_line_id,
1381 'PO_PDOI_INV_CLOSE_TOLERANCE',
1382 'PO_LINES_INTERFACE',
1383 'INVOICE_CLOSE_TOLERANCE',
1384 --PBWC Message Change Impact:
1385 --Removing a token.
1386 null,null,null,null,null,null,
1387 null,null,null,null,null,null,
1388 x_header_processable_flag);
1389 END IF;
1390 END IF;
1391
1392 x_progress := '530';
1393 IF (x_receive_close_tolerance is not null) THEN
1394 x_progress := '540';
1395 IF (x_receive_close_tolerance >= 0 and
1396 x_receive_close_tolerance <= 100) THEN
1397 x_valid := TRUE;
1398 ELSE
1399 x_valid := FALSE;
1400 END IF;
1401
1402 IF (x_valid = FALSE) THEN
1403 po_interface_errors_sv1.handle_interface_errors(
1404 'PO_DOCS_OPEN_INTERFACE',
1405 'FATAL',
1406 null,
1407 x_interface_header_id,
1408 x_interface_line_id,
1409 'PO_PDOI_RCT_CLOSE_TOLERANCE',
1410 'PO_LINES_INTERFACE',
1411 'RECEIPT_CLOSE_TOLERANCE',
1412 'VALUE',
1413 null,null,null,null,null,
1414 x_receive_close_tolerance,
1415 null,null,null,null,null,
1416 x_header_processable_flag);
1417 END IF;
1418 END IF;
1419
1420 x_progress := '550';
1421 IF (x_receiving_routing_id is not null) THEN
1422 x_progress := '560';
1423 select count(*) into X_temp_count
1424 from rcv_routing_headers
1425 where routing_header_id = x_receiving_routing_id;
1426
1427 IF (X_temp_count = 0) THEN
1428 po_interface_errors_sv1.handle_interface_errors(
1429 'PO_DOCS_OPEN_INTERFACE',
1430 'FATAL',
1431 null,
1432 x_interface_header_id,
1433 x_interface_line_id,
1434 'PO_PDOI_INVALID_ROUTING_ID',
1435 'PO_LINES_INTERFACE',
1436 'RECEIVING_ROUTING_ID',
1437 'VALUE',
1438 null,null,null,null,null,
1439 x_receiving_routing_id,
1440 null,null,null,null,null,
1441 x_header_processable_flag);
1442 END IF;
1443 END IF;
1444
1445 x_progress := '570';
1446 IF (x_accrue_on_receipt_flag is not null) THEN
1447 x_progress := '580';
1448 IF (x_accrue_on_receipt_flag <> 'Y' AND
1449 x_accrue_on_receipt_flag <> 'N' ) THEN
1450 po_interface_errors_sv1.handle_interface_errors(
1451 'PO_DOCS_OPEN_INTERFACE',
1452 'FATAL',
1453 null,
1454 x_interface_header_id,
1455 x_interface_line_id,
1456 'PO_PDOI_ACCRUE_ON_RCT',
1457 'PO_LINES_INTERFACE',
1458 'ACCRUE_ON_RECEIPT_FLAG',
1459 'VALUE',
1460 null,null,null,null,null,
1461 x_accrue_on_receipt_flag,
1462 null,null,null,null,null,
1463 x_header_processable_flag);
1464 END IF;
1465 END IF;
1466
1467 x_progress := '590';
1468 IF (x_firm_status_lookup_code is not null) THEN
1469 x_progress := '600';
1470 IF (x_firm_status_lookup_code <> 'Y' AND
1471 x_firm_status_lookup_code <> 'N' ) THEN
1472 po_interface_errors_sv1.handle_interface_errors(
1473 'PO_DOCS_OPEN_INTERFACE',
1474 'FATAL',
1475 null,
1476 x_interface_header_id,
1477 x_interface_line_id,
1478 'PO_PDOI_INVALID_FIRM_FLAG',
1479 'PO_LINES_INTERFACE',
1480 'FIRM_FLAG',
1481 'VALUE',
1482 null,null,null,null,null,
1483 x_firm_status_lookup_code,
1484 null,null,null,null,null,
1485 x_header_processable_flag);
1486 END IF;
1487 END IF;
1488
1489 -- Bug 3348047 START
1490 ---------------------------------------------------------------------------
1491 -- Check: The price on a Standard PO shipment must be equal to the price
1492 -- on the corresponding line.
1493 ---------------------------------------------------------------------------
1494 IF (x_price_override is not null) THEN
1495
1496 BEGIN
1497 SELECT unit_price
1498 INTO l_line_price
1499 FROM po_lines
1500 WHERE po_header_id = x_po_header_id
1501 AND po_line_id = x_po_line_id;
1502
1503 IF (x_price_override <> NVL(l_line_price,-1)) THEN
1504 PO_INTERFACE_ERRORS_SV1.handle_interface_errors
1505 (x_interface_type => 'PO_DOCS_OPEN_INTERFACE',
1506 x_error_type => 'FATAL',
1507 x_batch_id => NULL,
1508 x_interface_header_id => x_interface_header_id,
1509 x_interface_line_id => x_interface_line_id,
1510 x_error_message_name => 'PO_PDOI_SHIP_PRICE_NE_LINE',
1511 x_table_name => 'PO_LINES_INTERFACE',
1512 x_column_name => 'UNIT_PRICE',
1513 x_tokenname1 => 'SHIP_PRICE',
1514 x_tokenname2 => 'LINE_PRICE',
1515 x_tokenname3 => NULL,
1516 x_tokenname4 => NULL,
1517 x_tokenname5 => NULL,
1518 x_tokenname6 => NULL,
1519 x_tokenvalue1 => x_price_override,
1520 x_tokenvalue2 => l_line_price,
1521 x_tokenvalue3 => NULL,
1522 x_tokenvalue4 => NULL,
1523 x_tokenvalue5 => NULL,
1524 x_tokenvalue6 => NULL,
1525 x_header_processable_flag => x_header_processable_flag,
1526 x_interface_dist_id => NULL);
1527 END IF;
1528
1529 EXCEPTION
1530 WHEN NO_DATA_FOUND THEN
1531 null;
1532 END;
1533
1534 END IF; -- x_price_override
1535 -- Bug 3348047 END
1536
1537 END IF; -- x_shipment_type = 'STANDARD'
1538
1539 EXCEPTION
1540 WHEN others THEN
1541 po_message_s.sql_error('validate_po_line_locations',
1542 x_progress, sqlcode);
1543 raise;
1544 END validate_po_line_locations;
1545
1546
1547 /*================================================================
1548
1549 FUNCTION NAME: val_line_location_id_unique()
1550
1551 ==================================================================*/
1552 FUNCTION val_line_location_id_unique(X_line_location_id IN NUMBER)
1553 RETURN BOOLEAN IS
1554
1555 X_temp NUMBER;
1556 X_progress VARCHAR2(3) := NULL;
1557 BEGIN
1558 X_progress := '010';
1559 SELECT COUNT(*)
1560 INTO X_temp
1561 FROM po_line_locations
1562 WHERE line_location_id = X_line_location_id;
1563
1564 X_progress := '020';
1565 IF (X_temp = 0) THEN
1566 RETURN TRUE;
1567 ELSE
1568 RETURN FALSE;
1569 END IF;
1570
1571 EXCEPTION
1572 WHEN others THEN
1573 po_message_s.sql_error('val_line_location_id_unqiue',
1574 x_progress, sqlcode);
1575 raise;
1576 END val_line_location_id_unique;
1577
1578 END PO_LINE_LOCATIONS_SV7;