DBA Data[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;