DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_LINES_SV7

Source


1 PACKAGE BODY PO_LINES_SV7 AS
2 /* $Header: POXPIVLB.pls 120.1.12000000.2 2007/07/18 12:25:58 puppulur ship $ */
3 
4 -- Read the profile option that enables/disables the debug log
5 g_po_pdoi_write_to_file VARCHAR2(1) := NVL(FND_PROFILE.VALUE('PO_PDOI_WRITE_TO_FILE'),'N');
6 
7 /*================================================================
8 
9   PROCEDURE NAME:       validate_item_related_info()
10 
11 ==================================================================*/
12 PROCEDURE validate_item_related_info(X_interface_header_id     IN NUMBER,
13                                      X_interface_line_id       IN NUMBER,
14                                      X_item_id                 IN NUMBER,
15 				     X_item_description	       IN VARCHAR2,
16                                      X_unit_of_measure         IN VARCHAR2,
17                                      X_item_revision           IN VARCHAR2,
18                                      X_category_id             IN NUMBER,
19                                      X_def_inv_org_id          IN NUMBER,
20                                      X_outside_operation_flag  IN VARCHAR2,
21 				     X_create_or_update_item_flag IN VARCHAR2,
22                                      X_header_processable_flag IN OUT NOCOPY VARCHAR2,
23                                      X_global_agreement_flag   IN VARCHAR2,  -- FPI GA
24                                      X_type_lookup_code        IN  VARCHAR2) -- Bug 3362369
25 IS
26    X_progress        varchar2(3) := NULL;
27    X_valid           BOOLEAN;
28    X_allow_item_desc_update_flag
29 		 mtl_system_items.allow_item_desc_update_flag%TYPE;
30    X_msi_item_description   mtl_system_items.description%TYPE;
31    l_bom_item_type          mtl_system_items.bom_item_type%TYPE;
32 
33 BEGIN
34    X_progress := '010';
35    IF (X_item_id is NOT NULL) THEN
36       X_progress := '020';
37 
38       Begin
39         select bom_item_type
40         into l_bom_item_type
41         from mtl_system_items
42         where inventory_item_id = X_item_id
43         and organization_id = X_def_inv_org_id;
44       Exception
45         When others then
46           l_bom_item_type := null;
47       End;
48 
49       -- Bug 3362369 : ATO models are not purchasable
50       IF X_type_lookup_code = 'STANDARD' and
51          l_bom_item_type in (1,2) THEN
52           po_interface_errors_sv1.handle_interface_errors(
53                                          'PO_DOCS_OPEN_INTERFACE',
54                                          'FATAL',
55                                           null,
56                                           X_interface_header_id,
57                                           X_interface_line_id,
58                                          'PO_ATO_ITEM_NA',
59                                          'PO_LINES_INTERFACE',
60                                          'ITEM_ID',
61                                           null,
62                                           null,null,null,null,null,
63                                           null,
64                                           null,null,null,null,null,
65                                           X_header_processable_flag);
66       END IF;
67 
68       IF X_global_agreement_flag = 'Y' and X_outside_operation_flag = 'Y' THEN
69           po_interface_errors_sv1.handle_interface_errors(
70                                          'PO_DOCS_OPEN_INTERFACE',
71                                          'FATAL',
72                                           null,
73                                           X_interface_header_id,
74                                           X_interface_line_id,
75                                          'PO_PDOI_GA_ITEM_NA',
76                                          'PO_LINES_INTERFACE',
77                                          'ITEM_ID',
78                                           null,
79                                           null,null,null,null,null,
80                                           null,
81                                           null,null,null,null,null,
82                                           X_header_processable_flag);
83       END IF;
84 
85       x_valid := po_items_sv1.val_item_id(X_item_id,
86                                           X_def_inv_org_id,
87                                           X_outside_operation_flag);
88 
89       IF (x_valid = FALSE) THEN
90          IF (X_outside_operation_flag = 'N') THEN
91             X_progress := '030';
92             po_interface_errors_sv1.handle_interface_errors(
93                                          'PO_DOCS_OPEN_INTERFACE',
94                                          'FATAL',
95                                           null,
96                                           X_interface_header_id,
97                                           X_interface_line_id,
98                                          'PO_PDOI_INVALID_ITEM_ID',
99                                          'PO_LINES_INTERFACE',
100                                          'ITEM_ID',
101                                          'VALUE',
102                                           null,null,null,null,null,
103                                           X_item_id,
104                                           null,null,null,null,null,
105                                           X_header_processable_flag);
106 
107          ELSIF (X_outside_operation_flag = 'Y') THEN
108             X_progress := '040';
109             po_interface_errors_sv1.handle_interface_errors(
110                                          'PO_DOCS_OPEN_INTERFACE',
111                                          'FATAL',
112                                           null,
113                                           X_interface_header_id,
114                                           X_interface_line_id,
115                                          'PO_PDOI_INVALID_OP_ITEM_ID',
116                                          'PO_LINES_INTERFACE',
117                                          'ITEM_ID',
118                                          'VALUE',
119                                           null,null,null,null,null,
120                                           X_item_id,
121                                           null,null,null,null,null,
122                                           X_header_processable_flag);
123          END IF;
124       ELSE  /* x_valid = TRUE  Bug 3109243*/
125 
126       /*** also need to find out if item_description is different from
127       what is setup for the item. Would not allow item_description update
128       if item attribute allow_item_desc_update_flag is N
129        ****/
130       X_progress := '090';
131 
132       /** Bug 5366732 If foreign language is used then item_desc comparision was always
133 Failing because derived value of X_item_description was coming from
134 mtl_system_items_tl to keep consistency changing below SQL to fetch item desc
135 from mtl_system_items_tl **/
136 
137 
138       SELECT    msi.allow_item_desc_update_flag,
139                mtl.description
140         INTO    X_allow_item_desc_update_flag,
141                 X_msi_item_description
142        FROM     mtl_system_items msi, mtl_system_items_tl mtl
143        WHERE    mtl.inventory_item_id = msi.inventory_item_id
144               and mtl.organization_id = msi.organization_id
145               and mtl.language = USERENV('LANG')
146               and mtl.inventory_item_id = X_item_id
147               and msi.organization_id = X_def_inv_org_id;
148 /* Bug 5366732 End */
149 
150 
151       X_progress :=  '100';
152       IF (X_allow_item_desc_update_flag = 'N') AND
153          (X_item_description <> X_msi_item_description) AND
154          (X_create_or_update_item_flag = 'N')
155       THEN
156                 /*** error because descriptions do not match and item attribute
157                 does not allow item description update  and update item runtime
158                 parameter is not set.
159                 ***/
160 
161           X_progress :=  '110';
162           po_interface_errors_sv1.handle_interface_errors(
163                                          'PO_DOCS_OPEN_INTERFACE',
164                                          'FATAL',
165                                           null,
166                                           X_interface_header_id,
167                                           X_interface_line_id,
168                                          'PO_PDOI_DIFF_ITEM_DESC',
169                                          'PO_LINES_INTERFACE',
170                                          'ITEM_DESCRIPTION',
171                                           null, null, null, null, null, null,
172                                           null, null, null, null, null, null,
173                                           X_header_processable_flag);
174       END IF;
175 
176       END IF; -- x_valid
177 
178       X_progress := '050';
179       IF (X_unit_of_measure is not null) THEN
180          X_progress := '060';
181          x_valid := po_unit_of_measures_sv1.val_item_unit_of_measure(
182                                                        X_unit_of_measure,
183                                                        X_item_id,
184                                                        X_def_inv_org_id);
185          IF (x_valid = FALSE) THEN
186             po_interface_errors_sv1.handle_interface_errors(
187                                             'PO_DOCS_OPEN_INTERFACE',
188                                             'FATAL',
189                                              null,
190                                              X_interface_header_id,
191                                              X_interface_line_id,
192                                             'PO_PDOI_ITEM_RELATED_INFO',
193                                             'PO_LINES_INTERFACE',
194                                             'UNIT_OF_MEASURE',
195                                             'COLUMN_NAME',
196                                             'VALUE',
197                                             'ITEM',
198                                              null, null, null,
199                                             'UNIT_OF_MEASURE',
200                                              X_unit_of_measure,
201                                              X_item_id,
202                                              null, null, null,
203                                              X_header_processable_flag);
204         END IF;
205       END IF;
206 
207       X_progress := '070';
208       IF (X_item_revision is not null) THEN
209          x_valid := mtl_item_revisions_sv1.val_item_revision(
210                                                        X_item_revision,
211                                                        X_item_id,
212                                                        X_def_inv_org_id);
213          IF (x_valid = FALSE) THEN
214             po_interface_errors_sv1.handle_interface_errors(
215                                             'PO_DOCS_OPEN_INTERFACE',
216                                             'FATAL',
217                                              null,
218                                              X_interface_header_id,
219                                              X_interface_line_id,
220                                             'PO_PDOI_ITEM_RELATED_INFO',
221                                             'PO_LINES_INTERFACE',
222                                             'ITEM_REVISION',
223                                             'COLUMN_NAME',
224                                             'VALUE',
225                                             'ITEM',
226                                              null, null, null,
227                                             'ITEM_REVISION',
228                                              X_item_revision,
229                                              X_item_id,
230                                              null, null, null,
231                                              X_header_processable_flag);
232          END IF;
233       END IF;
234 
235       X_progress := '080';
236       IF (X_category_id is not null) THEN
237          x_valid := po_categories_sv1.val_item_category_id(
238                                                         X_category_id,
239                                                         X_item_id,
240                                                         X_def_inv_org_id);
241          IF (x_valid = FALSE) THEN
242             po_interface_errors_sv1.handle_interface_errors(
243                                            'PO_DOCS_OPEN_INTERFACE',
244                                            'FATAL',
245                                             null,
246                                             X_interface_header_id,
247                                             X_interface_line_id,
248                                            'PO_PDOI_ITEM_RELATED_INFO',
249                                            'PO_LINES_INTERFACE',
250                                            'CATEGORY_ID',
251                                            'COLUMN_NAME',
252                                            'VALUE',
253                                            'ITEM',
254                                             null,null,null,
255                                            'CATEGORY_ID',
256                                             X_category_id,
257                                             X_item_id,
258                                             null,null,null,
259                                             X_header_processable_flag);
260          END IF;
261       END IF;
262 
263    ELSE /* if x_item_id is null */
264       X_progress := '120';
265       IF (X_unit_of_measure is not null) THEN
266          x_valid := po_unit_of_measures_sv1.val_unit_of_measure(
267                                                X_unit_of_measure,
268                                                NULL);
269          IF (x_valid = FALSE) THEN
270             po_interface_errors_sv1.handle_interface_errors(
271                                          'PO_DOCS_OPEN_INTERFACE',
272                                          'FATAL',
273                                           null,
274                                           X_interface_header_id,
275                                           X_interface_line_id,
276                                          'PO_PDOI_INVALID_UOM_CODE',
277                                          'PO_LINES_INTERFACE',
278                                          'UNIT_OF_MEASURE',
279                                          'VALUE',
280                                           null, null, null, null, null,
281                                           X_unit_of_measure,
282                                           null, null, null, null, null,
283                                           X_header_processable_flag);
284          END IF;
285       END IF;
286 
287       X_progress := '110';
288       IF (X_item_revision is not null) THEN
289          po_interface_errors_sv1.handle_interface_errors(
290                                            'PO_DOCS_OPEN_INTERFACE',
291                                            'FATAL',
292                                             null,
293                                             X_interface_header_id,
294                                             X_interface_line_id,
295                                            'PO_PDOI_COLUMN_NULL',
296                                            'PO_LINES_INTERFACE',
297                                            'ITEM_REVISION',
298                                            'COLUMN_NAME',
299                                            'VALUE',
300                                             null,null,null,null,
301                                            'ITEM_REVISION',
302                                             X_item_revision,
303                                             null,null,null,null,
304                                             X_header_processable_flag);
305       END IF;
306 
307       X_progress := '120';
308       IF (X_category_id is not null) THEN
309          x_valid := po_categories_sv1.val_category_id(X_category_id);
310 
311          IF (x_valid = FALSE) THEN
312             po_interface_errors_sv1.handle_interface_errors(
313                                            'PO_DOCS_OPEN_INTERFACE',
314                                            'FATAL',
315                                             null,
316                                             X_interface_header_id,
317                                             X_interface_line_id,
318                                            'PO_PDOI_INVALID_CATEGORY_ID',
319                                            'PO_LINES_INTERFACE',
320                                            'CATEGORY_ID',
321                                            'VALUE',
322                                             null,null,null,null,null,
323                                             X_category_id,
324                                             null,null,null,null,null,
325                                             X_header_processable_flag);
326          END IF;
327       END IF;
328    END IF;  /* item_id */
329 
330 EXCEPTION
331    WHEN others THEN
332         po_message_s.sql_error('validate_item_related_info',
333                                 X_progress, sqlcode);
334         raise;
335 END validate_item_related_info;
336 
337 /*================================================================
338 
339   PROCEDURE NAME:       validate_item_with_line_type()
340 
341 ==================================================================*/
342 PROCEDURE validate_item_with_line_type(
343                                    X_interface_header_id     IN NUMBER,
344                                    X_interface_line_id       IN NUMBER,
345                                    X_line_type_id            IN NUMBER,
346                                    X_category_id             IN NUMBER,
347                                    X_unit_of_measure         IN VARCHAR2,
348                                    X_unit_price              IN NUMBER,
349                                    X_item_id                 IN NUMBER,
350 				   X_item_description	     IN VARCHAR2,
351                                    X_item_revision           IN VARCHAR2,
352                                    X_def_inv_org_id          IN NUMBER,
353 				   X_create_or_update_item_flag IN VARCHAR2,
354                                    X_header_processable_flag IN OUT NOCOPY VARCHAR2,
355                                    X_global_agreement_flag   IN VARCHAR2,  -- FPI GA
356                                    X_type_lookup_code        IN  VARCHAR2) -- Bug 3362369
357 IS
358    X_progress                     varchar2(3) := null;
359    X_vs_order_type_lookup_code    varchar2(25) := NULL;
360    X_vs_category_id               number := NULL;
361    X_vs_unit_meas_lookup_code     varchar2(25) := NULL;
362    X_vs_unit_price                number := NULL;
363    X_vs_outside_operation_flag    varchar2(1) := NULL;
364    X_vs_receiving_flag            varchar2(1) := NULL;
365    X_vs_receive_close_tolerance   number := null;    -- Bug: 1189629
366 BEGIN
367    X_progress := '010';
368   -- Bug: 1189629 Added receive close tolerance to the list of parameters
369    po_line_types_sv.get_line_type_def(X_line_type_id,
370                                       X_vs_order_type_lookup_code,
371                                       X_vs_category_id,
372                                       X_vs_unit_meas_lookup_code,
373                                       X_vs_unit_price,
374                                       X_vs_outside_operation_flag,
375                                       X_vs_receiving_flag,
376                                       X_vs_receive_close_tolerance);
377 
378    X_progress := '020';
379    IF (X_vs_order_type_lookup_code = 'AMOUNT') THEN
380 
381       X_progress := '023';
382       IF (X_item_id IS NOT NULL) THEN
383 	  /** cannot specify item for amount based line type ***/
384          po_interface_errors_sv1.handle_interface_errors(
385                                            'PO_DOCS_OPEN_INTERFACE',
386                                            'FATAL',
387                                             null,
388                                             X_interface_header_id,
389                                             X_interface_line_id,
390                                            'PO_PDOI_COLUMN_NULL',
391                                            'PO_LINES_INTERFACE',
392                                            'ITEM_ID',
393                                            'COLUMN_NAME',
394                                            'VALUE',
395                                             null,null,null,null,
396                                            'ITEM_ID',
397                                             X_item_id,
398                                             null,null,null,null,
399                                             X_header_processable_flag);
400 
401       END IF;
402 
403       X_progress := '025';
404       IF (X_unit_of_measure <> X_vs_unit_meas_lookup_code) THEN
405          po_interface_errors_sv1.handle_interface_errors(
406                                            'PO_DOCS_OPEN_INTERFACE',
407                                            'FATAL',
408                                             null,
409                                             X_interface_header_id,
410                                             X_interface_line_id,
411                                            'PO_PDOI_INVALID_LINE_TYPE_INFO',
412                                            'PO_LINES_INTERFACE',
413                                            'UNIT_OF_MEASURE',
414                                            'COLUMN_NAME',
415                                            'VALUE',
416                                            'LINE_TYPE',
417                                             null,null,null,
418                                            'UNIT_OF_MEASURE',
419                                             X_unit_of_measure,
420                                             X_vs_unit_meas_lookup_code,
421                                             null,null,null,
422                                             X_header_processable_flag);
423       END IF;
424 
425       X_progress := '030';
426       IF (X_unit_price <> X_vs_unit_price) THEN
427          po_interface_errors_sv1.handle_interface_errors(
428                                            'PO_DOCS_OPEN_INTERFACE',
429                                            'FATAL',
430                                             null,
431                                             X_interface_header_id,
432                                             X_interface_line_id,
433                                            'PO_PDOI_INVALID_LINE_TYPE_INFO',
434                                            'PO_LINES_INTERFACE',
435                                            'UNIT_PRICE',
436                                            'COLUMN_NAME',
437                                            'VALUE',
438                                            'LINE_TYPE',
439                                             null,null,null,
440                                            'UNIT_PRICE',
441                                             X_unit_price,
442                                             X_vs_unit_price,
443                                             null,null,null,
444                                             X_header_processable_flag);
445       END IF;
446 
447    ELSIF (X_vs_order_type_lookup_code = 'QUANTITY') AND
448          (X_vs_outside_operation_flag = 'Y') THEN
449       /*  item_id must be not null,
450           item must be an outside processing item and puurchasable item.
451           all the item related fields must match what is setup for
452           the item
453        */
454 
455       X_progress := '040';
456       IF (X_item_id is NULL) THEN
457          po_interface_errors_sv1.handle_interface_errors(
458                                            'PO_DOCS_OPEN_INTERFACE',
459                                            'FATAL',
460                                             null,
461                                             x_interface_header_id,
462                                             x_interface_line_id,
463                                            'PO_PDOI_ITEM_NOT_NULL',
464                                            'PO_LINES_INTERFACE',
465                                            'ITEM_ID',
466                                             null,null,null,null,null,null,
467                                             null,null,null,null,null,null,
468                                             x_header_processable_flag);
469       END IF;
470     END IF;
471 
472     /* FPI GA start*/
473     /* For a global agreement OSP lines are not allowed */
474 
475     IF nvl(X_vs_outside_operation_flag,'N') = 'Y' AND
476        nvl(X_global_agreement_flag,'N') = 'Y' THEN
477         po_interface_errors_sv1.handle_interface_errors(
478                                            'PO_DOCS_OPEN_INTERFACE',
479                                            'FATAL',
480                                             null,
481                                             x_interface_header_id,
482                                             x_interface_line_id,
483                                            'PO_PDOI_GA_OSP_NA',
484                                            'PO_LINES_INTERFACE',
485                                            null,
486                                             null,null,null,null,null,null,
487                                             null,null,null,null,null,null,
488                                             x_header_processable_flag);
489 
490     END IF;
491    /* FPI GA end */
492 
493       /*** Next is to perform all the common validations regardless of the
494       line type ***/
495 
496     X_progress := '050';
497 
498     --<SERVICES FPJ>
499     --Do not perform the item related validations for the new services
500     --line types.
501 
502     IF (X_vs_order_type_lookup_code NOT IN ('FIXED PRICE', 'RATE')) THEN --<SERVICES FPJ>
503       po_lines_sv7.validate_item_related_info(
504                                      X_interface_header_id,
505                                      X_interface_line_id,
506                                      X_item_id,
507 				     X_item_description,
508                                      X_unit_of_measure,
509                                      X_item_revision,
510                                      X_category_id,
511                                      X_def_inv_org_id,
512                                      X_vs_outside_operation_flag,
513 				     X_create_or_update_item_flag,
514                                      X_header_processable_flag,
515                                      X_global_agreement_flag, -- FPI GA
516                                      X_type_lookup_code);   -- Bug 3362369
517     END IF; --<SERVICES FPJ>
518 
519 EXCEPTION
520    WHEN others THEN
521         po_message_s.sql_error('validate_item_with_line_type',
522                                 X_progress, sqlcode);
523         raise;
524 END validate_item_with_line_type;
525 
526 /*================================================================
527 
528   PROCEDURE NAME: 	validate_po_lines()
529 
530 ==================================================================*/
531  PROCEDURE validate_po_lines(x_interface_header_id            IN NUMBER,
532                              x_interface_line_id              IN NUMBER,
533                              x_current_po_header_id           IN NUMBER,
534                              x_po_line_id                     IN NUMBER,
535                              x_last_update_date               IN DATE,
536                              x_last_updated_by                IN NUMBER,
537                              x_po_header_id                   IN NUMBER,
538                              x_line_type_id                   IN NUMBER,
539                              x_line_num                       IN NUMBER,
540                              x_last_update_login              IN NUMBER,
541                              x_creation_date                  IN DATE,
542                              x_created_by                     IN NUMBER,
543                              x_item_id                        IN NUMBER,
544                              x_item_revision                  IN VARCHAR2,
545                              x_category_id                    IN NUMBER,
546                              x_item_description               IN VARCHAR2,
547                              x_unit_meas_lookup_code          IN VARCHAR2,
548                              x_quantity_committed             IN NUMBER,
549                              x_committed_amount               IN NUMBER,
550                              x_allow_price_override_flag      IN VARCHAR2,
551                              x_not_to_exceed_price            IN NUMBER,
552                              x_list_price_per_unit            IN NUMBER,
553                              X_base_unit_price                IN NUMBER,	-- <FPJ Advanced Price>
554                              x_unit_price                     IN NUMBER,
555                              x_quantity                       IN NUMBER,
556                              x_un_number_id                   IN NUMBER,
557                              x_hazard_class_id                IN NUMBER,
558                              x_note_to_vendor                 IN VARCHAR2,
559                              x_from_header_id                 IN NUMBER,
560                              x_from_line_id                   IN NUMBER,
561                              x_min_order_quantity             IN NUMBER,
562                              x_max_order_quantity             IN NUMBER,
563                              x_qty_rcv_tolerance              IN NUMBER,
564                              x_over_tolerance_error_flag      IN VARCHAR2,
565                              x_market_price                   IN NUMBER,
566                              x_unordered_flag                 IN VARCHAR2,
567                              x_closed_flag                    IN VARCHAR2,
568                              x_cancel_flag                    IN VARCHAR2,
569                              x_cancelled_by                   IN NUMBER,
570                              x_cancel_date                    IN DATE,
571                              x_cancel_reason                  IN VARCHAR2,
572                              x_vendor_product_num             IN VARCHAR2,
573                              x_contract_num                   IN VARCHAR2,
574                              x_taxable_flag                   IN VARCHAR2,
575                              x_tax_name                       IN VARCHAR2,
576 			     x_tax_code_id		      IN NUMBER,
577                              x_type_1099                      IN VARCHAR2,
578                              x_capital_expense_flag           IN VARCHAR2,
579                              x_negotiated_by_preparer_flag    IN VARCHAR2,
580                              x_attribute_category             IN VARCHAR2,
581                              x_attribute1                     IN VARCHAR2,
582                              x_attribute2                     IN VARCHAR2,
583                              x_attribute3                     IN VARCHAR2,
584                              x_attribute4                     IN VARCHAR2,
585                              x_attribute5                     IN VARCHAR2,
586                              x_attribute6                     IN VARCHAR2,
587                              x_attribute7                     IN VARCHAR2,
588                              x_attribute8                     IN VARCHAR2,
589                              x_attribute9                     IN VARCHAR2,
590                              x_attribute10                    IN VARCHAR2,
591                              x_attribute11                    IN VARCHAR2,
592                              x_attribute12                    IN VARCHAR2,
593                              x_attribute13                    IN VARCHAR2,
594                              x_attribute14                    IN VARCHAR2,
595                              x_attribute15                    IN VARCHAR2,
596                              x_min_release_amount             IN NUMBER,
597                              x_price_type_lookup_code         IN VARCHAR2,
598                              x_closed_code                    IN VARCHAR2,
599                              x_price_break_lookup_code        IN VARCHAR2,
600                              x_ussgl_transaction_code         IN VARCHAR2,
601                              x_government_context             IN VARCHAR2,
602                              x_request_id                     IN NUMBER,
603                              x_program_application_id         IN NUMBER,
604                              x_program_id                     IN NUMBER,
605                              x_program_update_date            IN DATE,
606                              x_closed_date                    IN DATE,
607                              x_closed_reason                  IN VARCHAR2,
608                              x_closed_by                      IN NUMBER,
609                              x_transaction_reason_code        IN VARCHAR2,
610                              x_org_id                         IN NUMBER,
611                              x_line_reference_num             IN VARCHAR2,
612                              x_terms_id                       IN NUMBER,
613                              x_qty_rcv_exception_code         IN VARCHAR2,
614                              x_lead_time_unit                 IN VARCHAR2,
615                              x_freight_carrier                IN VARCHAR2,
616                              x_fob                            IN VARCHAR2,
617                              x_freight_terms                  IN VARCHAR2,
618                              x_release_num                    IN NUMBER,
619                              x_po_release_id                  IN NUMBER,
620                              x_source_shipment_id             IN NUMBER,
621                              x_inspection_required_flag       IN VARCHAR2,
622                              x_receipt_required_flag          IN VARCHAR2,
623                              x_receipt_days_exception_code    IN VARCHAR2,
624                              x_need_by_date                   IN DATE,
625                              x_promised_date                  IN DATE,
626                              x_lead_time                      IN NUMBER,
627                              x_invoice_close_tolerance        IN NUMBER,
628                              x_receive_close_tolerance        IN NUMBER,
629                              x_firm_flag                      IN VARCHAR2,
630                              x_days_early_receipt_allowed     IN NUMBER,
631                              x_days_late_receipt_allowed      IN NUMBER,
632                              x_enforce_ship_to_loc_code       IN VARCHAR2,
633                              x_allow_sub_receipts_flag        IN VARCHAR2,
634                              x_receiving_routing              IN VARCHAR2,
635                              x_receiving_routing_id           IN NUMBER,
636                              x_header_processable_flag        IN OUT NOCOPY VARCHAR2,
637                              x_def_inv_org_id                 IN NUMBER,
638                              x_uom_code                       IN VARCHAR2,
639                              x_hd_type_lookup_code            IN VARCHAR2,
640 			     x_create_or_update_item_flag     IN VARCHAR2,
641                              X_global_agreement_flag          IN VARCHAR2,  -- FPI GA
642                              p_shipment_num                   IN NUMBER,     /* <TIMEPHASED FPI> */
643                              p_contract_id                    IN NUMBER, -- <GC FPJ>
644                              --<SERVICES FPJ START>
645                              p_job_id                         IN NUMBER,
646                              p_effective_date                 IN DATE,
647                              p_expiration_date                IN DATE,
648                              p_amount                         IN NUMBER,
649                              p_order_type_lookup_code         IN VARCHAR2,
650                              p_purchase_basis                 IN VARCHAR2,
651                              p_service_uom_class              IN VARCHAR2
652                              --<SERVICES FPJ END>
653                              -- <bug 3325447 start>
654                              , p_contractor_first_name        IN VARCHAR2
655                              , p_contractor_last_name         IN VARCHAR2
656                              -- <bug 3325447 end>
657                              , p_job_business_group_id        IN NUMBER  --<BUG 3296145>
658 )
659  IS
660 
661   x_progress                 VARCHAR2(3) := null;
662   x_valid                    BOOLEAN;
663   x_res_terms_id             varchar2(25) := null;
664   x_count		     number;
665 
666   /* Bug 2137906. added the below two variables */
667   x_chart_of_accounts_id     number;
668   x_temp_val                 BOOLEAN;
669 
670   /* <TIMEPHASED FPI START> */
671   l_header_start_date        date := null;
672   l_header_end_date          date := null;
673   l_exp_date                 date := null;
674   l_errormsg                 varchar2(80) := null;
675   l_rate_type                PO_HEADERS_ALL.RATE_TYPE%TYPE;
676   /* <TIMEPHASED FPI END> */
677 
678   l_valid_business_group_id  VARCHAR2(1) := 'Y'; --<BUG 3296145>
679 
680  BEGIN
681 
682    x_progress := '010';
683    IF (x_current_po_header_id <> x_po_header_id) THEN
684       /* since the relationship between po_header and po_line
685          is mater-detail relationship, so we need to make sure
686          that they have the same po_header_id */
687 
688       po_interface_errors_sv1.handle_interface_errors(
689                                  'PO_DOCS_OPEN_INTERFACE',
690                                  'FATAL',
691                                   null,
692                                   X_interface_header_id,
693                                   X_interface_line_id,
694                                  'PO_PDOI_SPECIF_DIFF_IN_LINES',
695                                  'PO_LINES_INTERFACE',
696                                  'PO_HEADER_ID',
697                                  'COLUMN_NAME',
698                                  'PO_HEADER_ID',
699                                  'VALUE',
700                                   null,null,null,
701                                  'PO_HEADER_ID',
702                                   X_po_header_id,
703                                   X_current_po_header_id,
704                                   null,null,null,
705                                   x_header_processable_flag);
706    END IF;
707 
708    x_progress := '012';
709    IF (x_hd_type_lookup_code = 'STANDARD') THEN
710 
711       IF (x_over_tolerance_error_flag is not null) THEN
712            x_valid :=po_headers_sv6.val_lookup_code(
713                                                   x_over_tolerance_error_flag,
714                                                   'RECEIVING CONTROL LEVEL');
715             IF (x_valid = FALSE) THEN
716             po_interface_errors_sv1.handle_interface_errors(
717                                'PO_DOCS_OPEN_INTERFACE',
718                                 'FATAL',
719                                 null,
720                                 x_interface_header_id,
721                                 x_interface_line_id,
722                                'PO_PDOI_INVALID_OVER_TOL_ERROR',
723                                'PO_LINES_INTERFACE',
724                                'OVER_TOLERANCE_ERROR_FLAG',
725                                null,
726                                null,
727                                 null,null,null,null,
728                                null,
729                                null,
730                                 null,null,null,null,
731                                 x_header_processable_flag);
732             END IF;
733       END IF;
734 
735     END IF;
736 
737    x_progress := '015';
738    IF (x_hd_type_lookup_code = 'QUOTATION') THEN
739       /* check to see if these fields are null , if are not,
740          make a error mark in interface_errors_handle */
741 
742       x_progress := '017';
743       IF (x_closed_code is not null) THEN
744          po_interface_errors_sv1.handle_interface_errors(
745                                            'PO_DOCS_OPEN_INTERFACE',
746                                            'FATAL',
747                                             null,
748                                             x_interface_header_id,
749                                             x_interface_line_id,
750                                            'PO_PDOI_COLUMN_NULL',
751                                            'PO_LINES_INTERFACE',
752                                            'CLOSED_CODE',
753                                            'COLUMN_NAME',
754                                            'VALUE',
755                                             null,null,null,null,
756                                            'CLOSED_CODE',
757                                             x_closed_code,
758                                             null,null,null,null,
759                                             x_header_processable_flag);
760       END IF;
761 
762 
763       IF (x_committed_amount is not null) THEN
764          po_interface_errors_sv1.handle_interface_errors(
765                                            'PO_DOCS_OPEN_INTERFACE',
766                                            'FATAL',
767                                             null,
768                                             x_interface_header_id,
769                                             x_interface_line_id,
770                                            'PO_PDOI_COLUMN_NULL',
771                                            'PO_LINES_INTERFACE',
772                                            'COMMITTED_AMOUNT',
773                                            'COLUMN_NAME',
774                                            'VALUE',
775                                             null,null,null,null,
776                                            'COMMITTED_AMOUNT',
777                                             x_committed_amount,
778                                             null,null,null,null,
779                                             x_header_processable_flag);
780       END IF;
781 
782       x_progress := '020';
783       IF (x_market_price is not null) AND
784 	 (x_create_or_update_item_flag <> 'Y')
785 		/*** allow market price to have NOT NULL values because
786 		     Item Open Interface is to be called ***/
787       THEN
788          po_interface_errors_sv1.handle_interface_errors(
789                                            'PO_DOCS_OPEN_INTERFACE',
790                                            'FATAL',
791                                             null,
792                                             x_interface_header_id,
793                                             x_interface_line_id,
794                                            'PO_PDOI_COLUMN_NULL',
795                                            'PO_LINES_INTERFACE',
796                                            'MARKET_PRICE',
797                                            'COLUMN_NAME',
798                                            'VALUE',
799                                             null,null,null,null,
800                                            'MARKET_PRICE',
801                                             x_market_price,
802                                             null,null,null,null,
803                                             x_header_processable_flag);
804       END IF;
805 
806       x_progress := '030';
807       IF (x_allow_price_override_flag is not null) THEN
808          po_interface_errors_sv1.handle_interface_errors(
809                                            'PO_DOCS_OPEN_INTERFACE',
810                                            'FATAL',
811                                             null,
812                                             x_interface_header_id,
813                                             x_interface_line_id,
814                                            'PO_PDOI_COLUMN_NULL',
815                                            'PO_LINES_INTERFACE',
816                                            'ALLOW_PRICE_OVERRIDE_FLAG',
817                                            'COLUMN_NAME',
818                                            'VALUE',
819                                             null,null,null,null,
820                                            'ALLOW_PRICE_OVERRIDE_FLAG',
821                                             x_allow_price_override_flag,
822                                             null,null,null,null,
823                                             x_header_processable_flag);
824       END IF;
825 
826       x_progress := '040';
827       IF (x_not_to_exceed_price is not null) THEN
828          po_interface_errors_sv1.handle_interface_errors(
829                                            'PO_DOCS_OPEN_INTERFACE',
830                                            'FATAL',
831                                             null,
832                                             x_interface_header_id,
833                                             x_interface_line_id,
834                                            'PO_PDOI_COLUMN_NULL',
835                                            'PO_LINES_INTERFACE',
836                                            'NOT_TO_EXCEED_PRICE',
837                                            'COLUMN_NAME',
838                                            'VALUE',
839                                             null,null,null,null,
840                                            'NOT_TO_EXCEED_PRICE',
841                                             x_not_to_exceed_price,
842                                             null,null,null,null,
843                                             x_header_processable_flag);
844       END IF;
845 
846       x_progress := '050';
847       IF (x_negotiated_by_preparer_flag is not null) THEN
848          po_interface_errors_sv1.handle_interface_errors(
849                                            'PO_DOCS_OPEN_INTERFACE',
850                                            'FATAL',
851                                             null,
852                                             x_interface_header_id,
853                                             x_interface_line_id,
854                                            'PO_PDOI_COLUMN_NULL',
855                                            'PO_LINES_INTERFACE',
856                                            'NEGOTIATED_BY_PREPARER_FLAG',
857                                            'COLUMN_NAME',
858                                            'VALUE',
859                                             null,null,null,null,
860                                            'NEGOTIATED_BY_PREPARER_FLAG',
861                                             x_negotiated_by_preparer_flag,
862                                             null,null,null,null,
863                                             x_header_processable_flag);
864       END IF;
865 
866       x_progress := '060';
867       IF (x_capital_expense_flag is not null) THEN
868          po_interface_errors_sv1.handle_interface_errors(
869                                            'PO_DOCS_OPEN_INTERFACE',
870                                            'FATAL',
871                                             null,
872                                             x_interface_header_id,
873                                             x_interface_line_id,
874                                            'PO_PDOI_COLUMN_NULL',
875                                            'PO_LINES_INTERFACE',
876                                            'CAPITAL_EXPENSE_FLAG',
877                                            'COLUMN_NAME',
878                                            'VALUE',
879                                             null,null,null,null,
880                                            'CAPITAL_EXPENSE_FLAG',
881                                             x_capital_expense_flag,
882                                             null,null,null,null,
883                                             x_header_processable_flag);
884       END IF;
885 
886       x_progress := '070';
887       IF (x_min_release_amount is not null) THEN
888          po_interface_errors_sv1.handle_interface_errors(
889                                            'PO_DOCS_OPEN_INTERFACE',
890                                            'FATAL',
891                                             null,
892                                             x_interface_header_id,
893                                             x_interface_line_id,
894                                            'PO_PDOI_COLUMN_NULL',
895                                            'PO_LINES_INTERFACE',
896                                            'MIN_AMOUNT_RELEASE',
897                                            'COLUMN_NAME',
898                                            'VALUE',
899                                             null,null,null,null,
900                                            'MIN_AMOUNT_RELEASE',
901                                             x_min_release_amount,
902                                             null,null,null,null,
903                                             x_header_processable_flag);
904       END IF;
905 
906       x_progress := '500';
907       IF (x_min_order_quantity < 0) AND (x_min_order_quantity is not null)
908       THEN
909          po_interface_errors_sv1.handle_interface_errors(
910                                            'PO_DOCS_OPEN_INTERFACE',
911                                            'FATAL',
912                                             null,
913                                             x_interface_header_id,
914                                             x_interface_line_id,
915                                            'PO_PDOI_LT_ZERO',
916                                            'PO_LINES_INTERFACE',
917                                            'MIN_ORDER_QUANTITY',
918                                            'COLUMN_NAME',
919                                            'VALUE',
920                                             null,null,null,null,
921                                            'MIN_ORDER_QUANTITY',
922                                             x_min_order_quantity,
923                                             null,null,null,null,
924                                             x_header_processable_flag);
925       END IF;
926 
927       x_progress := '510';
928       IF (x_max_order_quantity < 0) AND (x_max_order_quantity is not null)
929       THEN
930          po_interface_errors_sv1.handle_interface_errors(
931                                            'PO_DOCS_OPEN_INTERFACE',
932                                            'FATAL',
933                                             null,
934                                             x_interface_header_id,
935                                             x_interface_line_id,
936                                            'PO_PDOI_LT_ZERO',
937                                            'PO_LINES_INTERFACE',
938                                            'MAX_ORDER_QUANTITY',
939                                            'COLUMN_NAME',
940                                            'VALUE',
941                                             null,null,null,null,
942                                            'MAX_ORDER_QUANTITY',
943                                             x_max_order_quantity,
944                                             null,null,null,null,
945                                             x_header_processable_flag);
946       END IF;
947 
948       x_progress := '520';
949       IF (x_min_order_quantity is not null) AND
950          (x_max_order_quantity is not null) THEN
951          x_valid := po_core_sv1.val_max_and_min_qty(x_min_order_quantity,
952                                                     x_max_order_quantity);
953          IF (x_valid = FALSE) THEN
954             po_interface_errors_sv1.handle_interface_errors(
955                                               'PO_DOCS_OPEN_INTERFACE',
956                                               'FATAL',
957                                                null,
958                                                x_interface_header_id,
959                                                x_interface_line_id,
960                                               'PO_PDOI_QT_MIN_GT_MAX',
961                                               'PO_LINES_INTERFACE',
962                                               'MIN_ORDER_QUANTITY',
963                                               'MIN',
964                                               'MAX',
965                                                null,null,null,null,
966                                                x_min_order_quantity,
967                                                x_max_order_quantity,
968                                                null,null,null,null,
969                                                x_header_processable_flag);
970          END IF;
971       END IF;
972 
973 
974       x_progress := '540';
975       IF (x_over_tolerance_error_flag is not null) THEN
976           x_valid :=po_headers_sv6.val_lookup_code(
977                                                   x_over_tolerance_error_flag,
978                                                   'RECEIVING CONTROL LEVEL');
979             IF (x_valid = FALSE) THEN
980 
981             po_interface_errors_sv1.handle_interface_errors(
982                                'PO_DOCS_OPEN_INTERFACE',
983                                 'FATAL',
984                                 null,
985                                 x_interface_header_id,
986                                 x_interface_line_id,
987                                'PO_PDOI_INVALID_OVER_TOL_ERROR',
988                                'PO_LINES_INTERFACE',
989                                'OVER_TOLERANCE_ERROR_FLAG',
990                                null,
991                                null,
992                                 null,null,null,null,
993                                null,
994                                 null,
995                                 null,null,null,null,
996                                 x_header_processable_flag);
997          END IF;
998       END IF;
999    END IF; --quote
1000 
1001    IF (x_hd_type_lookup_code = 'BLANKET') THEN
1002       x_progress := '080';
1003       /* check to see if these fields are null , if are not,
1004          make a error mark in interface_errors_handle */
1005 
1006       IF (x_qty_rcv_tolerance is not null) AND
1007 	 (x_create_or_update_item_flag <> 'Y')
1008       THEN
1009          po_interface_errors_sv1.handle_interface_errors(
1010                                            'PO_DOCS_OPEN_INTERFACE',
1011                                            'FATAL',
1012                                             null,
1013                                             x_interface_header_id,
1014                                             x_interface_line_id,
1015                                            'PO_PDOI_COLUMN_NULL',
1016                                            'PO_LINES_INTERFACE',
1017                                            'QTY_RCV_TOLERANCE',
1018                                            'COLUMN_NAME',
1019                                            'VALUE',
1020                                             null,null,null,null,
1021                                            'QTY_RCV_TOLERANCE',
1022                                             x_qty_rcv_tolerance,
1023                                             null,null,null,null,
1024                                             x_header_processable_flag);
1025       END IF;
1026 
1027       x_progress := '090';
1028       IF (x_over_tolerance_error_flag is not null) THEN
1029          po_interface_errors_sv1.handle_interface_errors(
1030                                            'PO_DOCS_OPEN_INTERFACE',
1031                                            'FATAL',
1032                                             null,
1033                                             x_interface_header_id,
1034                                             x_interface_line_id,
1035                                            'PO_PDOI_COLUMN_NULL',
1036                                            'PO_LINES_INTERFACE',
1037                                            'OVER_TOLERANCE_ERROR_FLAG',
1038                                            'COLUMN_NAME',
1039                                            'VALUE',
1040                                             null,null,null,null,
1041                                            'OVER_TOLERANCE_ERROR_FLAG',
1042                                             x_over_tolerance_error_flag,
1043                                             null,null,null,null,
1044                                             x_header_processable_flag);
1045       END IF;
1046 
1047       x_progress := '100';
1048       IF (x_qty_rcv_exception_code is not null) AND
1049 	 (X_create_or_update_item_flag <> 'Y')
1050       THEN
1051          po_interface_errors_sv1.handle_interface_errors(
1052                                            'PO_DOCS_OPEN_INTERFACE',
1053                                            'FATAL',
1054                                             null,
1055                                             x_interface_header_id,
1056                                             x_interface_line_id,
1057                                            'PO_PDOI_COLUMN_NULL',
1058                                            'PO_LINES_INTERFACE',
1059                                            'QTY_RCV_EXCEPTION_CODE',
1060                                            'COLUMN_NAME',
1061                                            'VALUE',
1062                                             null,null,null,null,
1063                                            'QTY_RCV_EXCEPTION_CODE',
1064                                             x_qty_rcv_exception_code,
1065                                             null,null,null,null,
1066                                             x_header_processable_flag);
1067       END IF;
1068        -- BUG 588911
1069        -- Remove the check to see if lead time unit is NULL
1070    /*
1071       x_progress := '110';
1072       IF (x_lead_time_unit is not null) THEN
1073          po_interface_errors_sv1.handle_interface_errors(
1074                                            'PO_DOCS_OPEN_INTERFACE',
1075                                            'FATAL',
1076                                             null,
1077                                             x_interface_header_id,
1078                                             x_interface_line_id,
1079                                            'PO_PDOI_COLUMN_NULL',
1080                                            'PO_LINES_INTERFACE',
1081                                            'LEAD_TIME_UNIT',
1082                                            'COLUMN_NAME',
1083                                            'VALUE',
1084                                             null,null,null,null,
1085                                            'LEAD_TIME_UNIT',
1086                                             x_lead_time_unit,
1087                                             null,null,null,null,
1088                                             x_header_processable_flag);
1089       END IF;
1090    */
1091       x_progress := '120';
1092       IF (x_freight_carrier is not null) THEN
1093          po_interface_errors_sv1.handle_interface_errors(
1094                                            'PO_DOCS_OPEN_INTERFACE',
1095                                            'FATAL',
1096                                             null,
1097                                             x_interface_header_id,
1098                                             x_interface_line_id,
1099                                            'PO_PDOI_COLUMN_NULL',
1100                                            'PO_LINES_INTERFACE',
1101                                            'FREIGHT_CARRIER',
1102                                            'COLUMN_NAME',
1103                                            'VALUE',
1104                                             null,null,null,null,
1105                                            'FREIGHT_CARRIER',
1106                                             x_freight_carrier,
1107                                             null,null,null,null,
1108                                             x_header_processable_flag);
1109       END IF;
1110 
1111       x_progress := '130';
1112       IF (x_fob is not null) THEN
1113          po_interface_errors_sv1.handle_interface_errors(
1114                                            'PO_DOCS_OPEN_INTERFACE',
1115                                            'FATAL',
1116                                             null,
1117                                             x_interface_header_id,
1118                                             x_interface_line_id,
1119                                            'PO_PDOI_COLUMN_NULL',
1120                                            'PO_LINES_INTERFACE',
1121                                            'FOB',
1122                                            'COLUMN_NAME',
1123                                            'VALUE',
1124                                             null,null,null,null,
1125                                            'FOB',
1126                                             x_fob,
1127                                             null,null,null,null,
1128                                             x_header_processable_flag);
1129       END IF;
1130 
1131       x_progress := '140';
1132       IF (x_freight_terms is not null) THEN
1133          po_interface_errors_sv1.handle_interface_errors(
1134                                            'PO_DOCS_OPEN_INTERFACE',
1135                                            'FATAL',
1136                                             null,
1137                                             x_interface_header_id,
1138                                             x_interface_line_id,
1139                                            'PO_PDOI_COLUMN_NULL',
1140                                            'PO_LINES_INTERFACE',
1141                                            'FREIGHT_TERMS',
1142                                            'COLUMN_NAME',
1143                                            'VALUE',
1144                                             null,null,null,null,
1145                                            'FREIGHT_TERMS',
1146                                             x_freight_terms,
1147                                             null,null,null,null,
1148                                             x_header_processable_flag);
1149       END IF;
1150 
1151       X_progress := '150';
1152       IF (x_receipt_required_flag is not null) AND
1153 	 (x_create_or_update_item_flag <> 'Y' )
1154       THEN
1155          po_interface_errors_sv1.handle_interface_errors(
1156                                            'PO_DOCS_OPEN_INTERFACE',
1157                                            'FATAL',
1158                                             null,
1159                                             x_interface_header_id,
1160                                             x_interface_line_id,
1161                                            'PO_PDOI_COLUMN_NULL',
1162                                            'PO_LINES_INTERFACE',
1163                                            'RECEIPT_REQUIRED_FLAG',
1164                                            'COLUMN_NAME',
1165                                            'VALUE',
1166                                             null,null,null,null,
1167                                            'RECEIPT_REQUIRED_FLAG',
1168                                             x_receipt_required_flag,
1169                                             null,null,null,null,
1170                                             x_header_processable_flag);
1171      END IF;
1172 
1173      X_progress := '155';
1174      IF (x_inspection_required_flag is not null) AND
1175         (x_create_or_update_item_flag <> 'Y')
1176      THEN
1177          po_interface_errors_sv1.handle_interface_errors(
1178                                            'PO_DOCS_OPEN_INTERFACE',
1179                                            'FATAL',
1180                                             null,
1181                                             x_interface_header_id,
1182                                             x_interface_line_id,
1183                                            'PO_PDOI_COLUMN_NULL',
1184                                            'PO_LINES_INTERFACE',
1185                                            'INSPECTION_REQUIRED_FLAG',
1186                                            'COLUMN_NAME',
1187                                            'VALUE',
1188                                             null,null,null,null,
1189                                            'INSPECTION_REQUIRED_FLAG',
1190                                             x_inspection_required_flag,
1191                                             null,null,null,null,
1192                                             x_header_processable_flag);
1193      END IF;
1194 
1195      IF (x_min_release_amount < 0) AND (x_min_release_amount is not null)
1196          THEN
1197             po_interface_errors_sv1.handle_interface_errors(
1198                                         'PO_DOCS_OPEN_INTERFACE',
1199                                         'FATAL',
1200                                          null,
1201                                          x_interface_header_id,
1202                                          x_interface_line_id,
1203                                         'PO_PDOI_LT_ZERO',
1204                                         'PO_LINES_INTERFACE',
1205                                         'MIN_RELEASE_AMOUNT',
1206                                         'COLUMN_NAME',
1207                                         'VALUE',
1208                                          null,null,null,null,
1209                                         'MIN_RELEASE_AMOUNT',
1210                                          x_min_release_amount,
1211                                          null,null,null,null,
1212                                          x_header_processable_flag);
1213      END IF;
1214 
1215      /* <TIMEPHASED FPI START> */
1216      X_progress := '156';
1217      if (p_shipment_num is not null) then
1218         po_interface_errors_sv1.handle_interface_errors(
1219                                            'PO_DOCS_OPEN_INTERFACE',
1220                                            'FATAL',
1221                                             null,
1222                                             x_interface_header_id,
1223                                             x_interface_line_id,
1224                                            'PO_PDOI_CREATE_SUBMISSION',
1225                                            'PO_LINES_INTERFACE',
1226                                            'SHIPMENT_NUM',
1227                                            'COLUMN_NAME',
1228                                             null,null,null,null,null,
1229                                            'SHIPMENT_NUM',
1230                                             null,null,null,null,null,
1231                                             x_header_processable_flag);
1232      end if;
1233 
1234      X_progress := '157';
1235      /* Get the header and line values from the database */
1236      BEGIN
1237         select poh.effective_date, poh.expiration_date, pol.expiration_date
1238         into   l_header_start_date, l_header_end_date, l_exp_date
1239         from   po_headers_interface poh,
1240                po_lines_interface pol
1241         where  poh.interface_header_id = x_interface_header_id
1242         and    pol.interface_line_id = x_interface_line_id
1243         and    poh.interface_header_id = pol.interface_header_id;
1244      EXCEPTION
1245         when others then
1246            null;
1247      END;
1248 
1249      PO_DEBUG.put_line ('Before calling validate_effective_dates()');
1250 
1251      /*
1252         Validating the expiration date. Since this is a line, there is no
1253         pricebreak effective dates. Hence, null is being passed.
1254      */
1255      po_shipments_sv8.validate_effective_dates(
1256         l_header_start_date,
1257         l_header_end_date,
1258         null,
1259         null,
1260         l_exp_date,
1261         l_errormsg);
1262 
1263      PO_DEBUG.put_line ('After calling validate_effective_dates()');
1264 
1265      if (l_errormsg is not null) then
1266         po_interface_errors_sv1.handle_interface_errors(
1267                                           'PO_DOCS_OPEN_INTERFACE',
1268                                           'FATAL',
1269                                            null,
1270                                            x_interface_header_id,
1271                                            x_interface_line_id,
1272                                            l_errormsg,
1273                                           'PO_LINES_INTERFACE',
1274                                           'EXPIRATION_DATE',
1275                                           'COLUMN_NAME',
1276                                            null,null,null,null,null,
1277                                           'EXPIRATION_DATE',
1278                                            null,null,null,null,null,
1279                                            x_header_processable_flag);
1280      end if;
1281      /* <TIMEPHASED FPI END> */
1282 
1283    END IF;  --if blanket
1284 
1285 
1286    --<SERVICES FPJ START>
1287    PO_DEBUG.put_line ('Start validating services line types');
1288 
1289    -- Bug 3652094:
1290    -- Services enabled check is extended to all new line types
1291    IF (p_order_type_lookup_code IN ('FIXED PRICE', 'RATE')) THEN
1292 
1293         IF (PO_SETUP_S1.get_services_enabled_flag = 'N') THEN
1294 
1295     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1296                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1297                X_Error_type              => 'FATAL',
1298                X_Batch_id                => NULL,
1299                X_Interface_Header_Id     => x_interface_header_id,
1300                X_Interface_Line_id       => x_interface_line_id,
1301                X_Error_message_name      => 'PO_SVC_NOT_ENABLED',
1302                X_Table_name              => 'PO_LINES_INTERFACE',
1303                X_Column_name             => NULL,
1304                X_TokenName1              => NULL,
1305                X_TokenName2              => NULL,
1306                X_TokenName3              => NULL,
1307                X_TokenName4              => NULL,
1308                X_TokenName5              => NULL,
1309                X_TokenName6              => NULL,
1310                X_TokenValue1             => NULL,
1311                X_TokenValue2             => NULL,
1312                X_TokenValue3             => NULL,
1313                X_TokenValue4             => NULL,
1314                X_TokenValue5             => NULL,
1315                X_TokenValue6             => NULL,
1316                X_header_processable_flag => x_header_processable_flag);
1317          END IF;
1318 
1319    END IF;
1320 
1321    IF (p_purchase_basis = 'TEMP LABOR') THEN
1322 
1323          IF (x_hd_type_lookup_code = 'BLANKET'
1324              AND NVL(x_global_agreement_flag, 'N') = 'N') THEN
1325             --New error: line type not supported for blanket
1326     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1327                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1328                X_Error_type              => 'FATAL',
1329                X_Batch_id                => NULL,
1330                X_Interface_Header_Id     => x_interface_header_id,
1331                X_Interface_Line_id       => x_interface_line_id,
1332                X_Error_message_name      => 'PO_PDOI_SVC_NO_LOCAL_BLANKET',
1333                X_Table_name              => 'PO_LINES_INTERFACE',
1334                X_Column_name             => NULL,
1335                X_TokenName1              => NULL,
1336                X_TokenName2              => NULL,
1337                X_TokenName3              => NULL,
1338                X_TokenName4              => NULL,
1339                X_TokenName5              => NULL,
1340                X_TokenName6              => NULL,
1341                X_TokenValue1             => NULL,
1342                X_TokenValue2             => NULL,
1343                X_TokenValue3             => NULL,
1344                X_TokenValue4             => NULL,
1345                X_TokenValue5             => NULL,
1346                X_TokenValue6             => NULL,
1347                X_header_processable_flag => x_header_processable_flag);
1348          END IF;
1349 
1350          --<BUG 3296145 START>
1351          --check that business_group_id is valid.
1352 
1353          IF (p_job_business_group_id IS NOT NULL) THEN
1354 
1355            IF (g_po_pdoi_write_to_file = 'Y') THEN
1356              PO_DEBUG.put_line('**Start validating job_business_group_id: '||
1357                                 p_job_business_group_id);
1358            END IF;
1359 
1360            IF nvl(HR_GENERAL.get_xbg_profile,'N') = 'N' THEN
1361 
1362              IF (g_po_pdoi_write_to_file = 'Y') THEN
1363                PO_DEBUG.put_line('Validate against FSP');
1364              END IF;
1365 
1366              SELECT COUNT(FSP.business_group_id)
1367              INTO   x_count
1368              FROM   FINANCIALS_SYSTEM_PARAMETERS FSP
1369              WHERE  FSP.business_group_id = p_job_business_group_id;
1370 
1371              IF x_count < 1 THEN
1372 
1373                IF (g_po_pdoi_write_to_file = 'Y') THEN
1374                  PO_DEBUG.put_line('ERROR: xbg profile is N but ' ||
1375                                    'job_business_group_id not in FSP');
1376                END IF;
1377 
1378                l_valid_business_group_id := 'N';
1379 
1380                PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1381                       X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1382                       X_Error_type              => 'FATAL',
1383                       X_Batch_id                => NULL,
1384                       X_Interface_Header_Id     => X_interface_header_id,
1385                       X_Interface_Line_id       => X_interface_line_id,
1386                       X_Error_message_name      => 'PO_PDOI_SVC_CANNOT_CROSS_BG',
1387                       X_Table_name              => 'PO_LINES_INTERFACE',
1388                       X_Column_name             => 'JOB_BUSINESS_GROUP_ID',
1389                       X_TokenName1              => 'JOB_BG_ID',
1390                       X_TokenName2              => NULL,
1391                       X_TokenName3              => NULL,
1392                       X_TokenName4              => NULL,
1393                       X_TokenName5              => NULL,
1394                       X_TokenName6              => NULL,
1395                       X_TokenValue1             => p_job_business_group_id,
1396                       X_TokenValue2             => NULL,
1397                       X_TokenValue3             => NULL,
1398                       X_TokenValue4             => NULL,
1399                       X_TokenValue5             => NULL,
1400                       X_TokenValue6             => NULL,
1401                       X_header_processable_flag => x_header_processable_flag);
1402              END IF;
1403 
1404            ELSE --nvl(HR_GENERAL.get_xbg_profile,'N') = 'N'
1405 
1406              IF (g_po_pdoi_write_to_file = 'Y') THEN
1407                PO_DEBUG.put_line('Validate against PBG');
1408              END IF;
1409 
1410              SELECT COUNT(PBG.business_group_id)
1411              INTO   x_count
1412              FROM   PER_BUSINESS_GROUPS_PERF PBG
1413              WHERE  PBG.business_group_id = p_job_business_group_id
1414                     AND TRUNC(sysdate) BETWEEN NVL(TRUNC(PBG.date_from), TRUNC(sysdate))
1415                                        AND NVL(TRUNC(PBG.date_to), TRUNC(sysdate));
1416 
1417              IF (x_count < 1) THEN
1418 
1419                IF (g_po_pdoi_write_to_file = 'Y') THEN
1420                  PO_DEBUG.put_line('ERROR: xbg profile is Y and ' ||
1421                                    'job_business_group_id not in PBG');
1422                END IF;
1423 
1424                l_valid_business_group_id := 'N';
1425 
1426                PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1427                       X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1428                       X_Error_type              => 'FATAL',
1429                       X_Batch_id                => NULL,
1430                       X_Interface_Header_Id     => X_interface_header_id,
1431                       X_Interface_Line_id       => X_interface_line_id,
1432                       X_Error_message_name      => 'PO_PDOI_SVC_INVALID_BG',
1433                       X_Table_name              => 'PO_LINES_INTERFACE',
1434                       X_Column_name             => 'JOB_BUSINESS_GROUP_ID',
1435                       X_TokenName1              => 'JOB_BG_ID',
1436                       X_TokenName2              => NULL,
1437                       X_TokenName3              => NULL,
1438                       X_TokenName4              => NULL,
1439                       X_TokenName5              => NULL,
1440                       X_TokenName6              => NULL,
1441                       X_TokenValue1             => p_job_business_group_id,
1442                       X_TokenValue2             => NULL,
1443                       X_TokenValue3             => NULL,
1444                       X_TokenValue4             => NULL,
1445                       X_TokenValue5             => NULL,
1446                       X_TokenValue6             => NULL,
1447                       X_header_processable_flag => x_header_processable_flag);
1448              END IF;
1449 
1450            END IF; --nvl(HR_GENERAL.get_xbg_profile,'N') = 'N'
1451 
1452            IF (g_po_pdoi_write_to_file = 'Y') THEN
1453              PO_DEBUG.put_line('**Done validating job_business_group_id');
1454            END IF;
1455 
1456          END IF; --IF (p_job_business_group_id IS NOT NULL)
1457          --<BUG 3296145 END>
1458 
1459          --Job is mandatory for Temp Labor Lines.
1460          IF (p_job_id IS NULL) THEN
1461 
1462     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1463                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1464                X_Error_type              => 'FATAL',
1465                X_Batch_id                => NULL,
1466                X_Interface_Header_Id     => x_interface_header_id,
1467                X_Interface_Line_id       => x_interface_line_id,
1468                X_Error_message_name      => 'PO_PDOI_SVC_MUST_JOB',
1469                X_Table_name              => 'PO_LINES_INTERFACE',
1470                X_Column_name             => 'JOB_ID',
1471                X_TokenName1              => NULL,
1472                X_TokenName2              => NULL,
1473                X_TokenName3              => NULL,
1474                X_TokenName4              => NULL,
1475                X_TokenName5              => NULL,
1476                X_TokenName6              => NULL,
1477                X_TokenValue1             => NULL,
1478                X_TokenValue2             => NULL,
1479                X_TokenValue3             => NULL,
1480                X_TokenValue4             => NULL,
1481                X_TokenValue5             => NULL,
1482                X_TokenValue6             => NULL,
1483                X_header_processable_flag => x_header_processable_flag);
1484 
1485          ELSE --p_job_id is not null
1486 
1487            --<BUG 3296145 START>
1488   	   --check that job_id is valid within the relevant business group.
1489 
1490   	   IF l_valid_business_group_id = 'Y' THEN
1491 
1492   	     IF (g_po_pdoi_write_to_file = 'Y') THEN
1493    	       PO_DEBUG.put_line('**Start validating job_id: '||p_job_id ||
1494                                  ' against job_business_group_id: '||
1495                                  p_job_business_group_id);
1496              END IF;
1497 
1498    	     IF nvl(HR_GENERAL.get_xbg_profile,'N') = 'N'
1499    	        OR p_job_business_group_id IS NULL THEN
1500 
1501    	       IF (g_po_pdoi_write_to_file = 'Y') THEN
1502    	         PO_DEBUG.put_line('Validate against FSP since xbg_profile=N '||
1503    	                           'or job_business_group_id is null');
1504    	       END IF;
1505 
1506    	       SELECT COUNT(PJ.job_id)
1507    	       INTO   x_count
1508    	       FROM   PER_JOBS_VL PJ,
1509    	              FINANCIALS_SYSTEM_PARAMETERS FSP
1510    	       WHERE  PJ.job_id = p_job_id
1511    	              AND PJ.business_group_id = FSP.business_group_id
1512    	              AND FSP.business_group_id = NVL(p_job_business_group_id,
1513    	                                              FSP.business_group_id)
1514    	              AND TRUNC(sysdate) BETWEEN NVL(TRUNC(PJ.date_from), TRUNC(sysdate))
1515    	                                 AND NVL(TRUNC(PJ.date_to), TRUNC(sysdate));
1516    	     ELSE --if HR: xbg profile = 'Y' and x_job_business_group_id not null
1517 
1518    	        IF (g_po_pdoi_write_to_file = 'Y') THEN
1519    	          PO_DEBUG.put_line('Validate against PBG since xbg_profile=Y '||
1520    	                           'and job_business_group_id not null');
1521                 END IF;
1522 
1523    	        SELECT COUNT(PJ.job_id)
1524    	        INTO   x_count
1525    	        FROM   PER_JOBS_VL PJ,
1526    	               PER_BUSINESS_GROUPS_PERF PBG
1527    	        WHERE  PJ.job_id = p_job_id
1528    	               AND PJ.business_group_id = p_job_business_group_id
1529                        AND PJ.business_group_id = PBG.business_group_id
1530                        AND TRUNC(sysdate) BETWEEN NVL(TRUNC(PJ.date_from), TRUNC(sysdate))
1531                                           AND NVL(TRUNC(PJ.date_to), TRUNC(sysdate))
1532                        AND TRUNC(sysdate) BETWEEN NVL(TRUNC(PBG.date_from), TRUNC(sysdate))
1533                                           AND NVL(TRUNC(PBG.date_to), TRUNC(sysdate));
1534 
1535             END IF; --IF nvl(HR_GENERAL.get_xbg_profile,'N')...
1536 
1537             IF (x_count < 1) THEN
1538 
1539               IF (g_po_pdoi_write_to_file = 'Y') THEN
1540                 PO_DEBUG.put_line('ERROR: job_id/business_group_id combination '||
1541                                   'is invalid');
1542               END IF;
1543 
1544               PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1545                   X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1546                   X_Error_type              => 'FATAL',
1547                   X_Batch_id                => NULL,
1548                   X_Interface_Header_Id     => X_interface_header_id,
1549                   X_Interface_Line_id       => X_interface_line_id,
1550                   X_Error_message_name      => 'PO_PDOI_SVC_INVALID_JOB',
1551                   X_Table_name              => 'PO_LINES_INTERFACE',
1552                   X_Column_name             => 'JOB_ID',
1553                   X_TokenName1              => 'JOB_ID',
1554                   X_TokenName2              => 'JOB_BG_ID',
1555                   X_TokenName3              => NULL,
1556                   X_TokenName4              => NULL,
1557                   X_TokenName5              => NULL,
1558                   X_TokenName6              => NULL,
1559                   X_TokenValue1             => p_job_id,
1560                   X_TokenValue2             => p_job_business_group_id,
1561                   X_TokenValue3             => NULL,
1562                   X_TokenValue4             => NULL,
1563                   X_TokenValue5             => NULL,
1564                   X_TokenValue6             => NULL,
1565                   X_header_processable_flag => x_header_processable_flag);
1566               END IF;
1567 
1568               IF (g_po_pdoi_write_to_file = 'Y') THEN
1569                 PO_DEBUG.put_line('**Done validating job_id/business_group_id');
1570               END IF;
1571 
1572             END IF; --IF l_valid_business_group_id = 'Y'
1573             --<BUG 3296145 END>
1574 
1575             IF x_category_id IS NOT NULL THEN
1576 
1577                  --job should be Valid for the Purchasing category
1578                  SELECT COUNT(*)
1579                  INTO   x_count
1580                  FROM   PO_JOB_ASSOCIATIONS_B PJA,
1581                         PER_JOBS_VL PJ
1582                  WHERE  PJA.job_id = p_job_id
1583                         AND PJA.category_id = x_category_id
1584                         AND PJA.job_id = PJ.job_id
1585                         AND NVL(TRUNC(PJA.inactive_date), TRUNC(sysdate)) >= TRUNC(sysdate)
1586                         AND NVL(TRUNC(PJ.date_from), TRUNC(sysdate)) <= TRUNC(sysdate)
1587                         AND NVL(TRUNC(PJ.date_to), TRUNC(sysdate)) >= TRUNC(sysdate);
1588 
1589                 IF (x_count < 1) THEN
1590         	   PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1591                       X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1592                       X_Error_type              => 'FATAL',
1593                       X_Batch_id                => NULL,
1594                       X_Interface_Header_Id     => X_interface_header_id,
1595                       X_Interface_Line_id       => X_interface_line_id,
1596                       X_Error_message_name      => 'PO_PDOI_SVC_INVALID_JOB_CAT',
1597                       X_Table_name              => 'PO_LINES_INTERFACE',
1598                       X_Column_name             => 'JOB_ID',
1599                       X_TokenName1              => NULL,
1600                       X_TokenName2              => NULL,
1601                       X_TokenName3              => NULL,
1602                       X_TokenName4              => NULL,
1603                       X_TokenName5              => NULL,
1604                       X_TokenName6              => NULL,
1605                       X_TokenValue1             => NULL,
1606                       X_TokenValue2             => NULL,
1607                       X_TokenValue3             => NULL,
1608                       X_TokenValue4             => NULL,
1609                       X_TokenValue5             => NULL,
1610                       X_TokenValue6             => NULL,
1611                       X_header_processable_flag => x_header_processable_flag);
1612 
1613                 END IF;
1614             END IF;
1615          END IF; --if p_job_id is null
1616 
1617         -- Bug 3308164 : capital expense flag is not applicable to
1618         -- temp labor lines
1619         IF (x_capital_expense_flag = 'Y') THEN
1620     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1621                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1622                X_Error_type              => 'FATAL',
1623                X_Batch_id                => NULL,
1624                X_Interface_Header_Id     => x_interface_header_id,
1625                X_Interface_Line_id       => x_interface_line_id,
1626                X_Error_message_name      => 'PO_SVC_NO_CAP_EXPENSE',
1627                X_Table_name              => 'PO_LINES_INTERFACE',
1628                X_Column_name             => 'CAPITAL_EXPENSE_FLAG',
1629                X_TokenName1              => 'COLUMN_NAME',
1630                X_TokenName2              => 'VALUE',
1631                X_TokenName3              => NULL,
1632                X_TokenName4              => NULL,
1633                X_TokenName5              => NULL,
1634                X_TokenName6              => NULL,
1635                X_TokenValue1             => NULL,
1636                X_TokenValue2             => NULL,
1637                X_TokenValue3             => NULL,
1638                X_TokenValue4             => NULL,
1639                X_TokenValue5             => NULL,
1640                X_TokenValue6             => NULL,
1641                X_header_processable_flag => x_header_processable_flag);
1642         END IF;
1643 
1644          /* Bug 3323281 Start */
1645          -- UN NUmber and Hazard Class not applicable for TEMP LABOR lines
1646 
1647          If (x_un_number_id is not NULL) then
1648              PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1649                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1650                X_Error_type              => 'FATAL',
1651                X_Batch_id                => NULL,
1652                X_Interface_Header_Id     => x_interface_header_id,
1653                X_Interface_Line_id       => x_interface_line_id,
1654                X_Error_message_name      => 'PO__PDOI_SVC_NO_UNNUMBER',
1655                X_Table_name              => 'PO_LINES_INTERFACE',
1656                X_Column_name             => 'UN_NUMBER',
1657                X_TokenName1              => 'COLUMN_NAME',
1658                X_TokenName2              => 'VALUE',
1659                X_TokenName3              => NULL,
1660                X_TokenName4              => NULL,
1661                X_TokenName5              => NULL,
1662                X_TokenName6              => NULL,
1663                X_TokenValue1             => NULL,
1664                X_TokenValue2             => NULL,
1665                X_TokenValue3             => NULL,
1666                X_TokenValue4             => NULL,
1667                X_TokenValue5             => NULL,
1668                X_TokenValue6             => NULL,
1669                X_header_processable_flag => x_header_processable_flag);
1670           End if;
1671 
1672           If (x_hazard_class_id is not NULL) then
1673                PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1674                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1675                X_Error_type              => 'FATAL',
1676                X_Batch_id                => NULL,
1677                X_Interface_Header_Id     => x_interface_header_id,
1678                X_Interface_Line_id       => x_interface_line_id,
1679                X_Error_message_name      => 'PO_PDOI_SVC_NO_HAZARD_CLASS',
1680                X_Table_name              => 'PO_LINES_INTERFACE',
1681                X_Column_name             => 'HAZARD_CLASS',
1682                X_TokenName1              => 'COLUMN_NAME',
1683                X_TokenName2              => 'VALUE',
1684                X_TokenName3              => NULL,
1685                X_TokenName4              => NULL,
1686                X_TokenName5              => NULL,
1687                X_TokenName6              => NULL,
1688                X_TokenValue1             => NULL,
1689                X_TokenValue2             => NULL,
1690                X_TokenValue3             => NULL,
1691                X_TokenValue4             => NULL,
1692                X_TokenValue5             => NULL,
1693                X_TokenValue6             => NULL,
1694                X_header_processable_flag => x_header_processable_flag);
1695            End if;
1696 
1697            /* Bug 3323281  End   */
1698 
1699          -- Bug 3320741 START
1700          --------------------------------------------------------------------
1701          -- Check: Do not allow Need-By Date if purchase basis is Temp Labor.
1702          --------------------------------------------------------------------
1703          IF (x_need_by_date IS NOT NULL) THEN
1704              PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1705                 X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1706                 X_Error_type              => 'FATAL',
1707                 X_Batch_id                => NULL,
1708                 X_Interface_Header_Id     => x_interface_header_id,
1709                 X_Interface_Line_id       => x_interface_line_id,
1710                 X_Error_message_name      => 'PO_SVC_NO_NEED_PROMISE_DATE',
1711                 X_Table_name              => 'PO_LINES_INTERFACE',
1712                 X_Column_name             => 'NEED_BY_DATE',
1713                 X_TokenName1              => NULL,
1714                 X_TokenName2              => NULL,
1715                 X_TokenName3              => NULL,
1716                 X_TokenName4              => NULL,
1717                 X_TokenName5              => NULL,
1718                 X_TokenName6              => NULL,
1719                 X_TokenValue1             => NULL,
1720                 X_TokenValue2             => NULL,
1721                 X_TokenValue3             => NULL,
1722                 X_TokenValue4             => NULL,
1723                 X_TokenValue5             => NULL,
1724                 X_TokenValue6             => NULL,
1725                 X_header_processable_flag => x_header_processable_flag);
1726          END IF;
1727 
1728          --------------------------------------------------------------------
1729          -- Check: Do not allow Promised Date if purchase basis is Temp Labor.
1730          --------------------------------------------------------------------
1731          IF (x_promised_date IS NOT NULL) THEN
1732              PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1733                 X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1734                 X_Error_type              => 'FATAL',
1735                 X_Batch_id                => NULL,
1736                 X_Interface_Header_Id     => x_interface_header_id,
1737                 X_Interface_Line_id       => x_interface_line_id,
1738                 X_Error_message_name      => 'PO_SVC_NO_NEED_PROMISE_DATE',
1739                 X_Table_name              => 'PO_LINES_INTERFACE',
1740                 X_Column_name             => 'PROMISED_DATE',
1741                 X_TokenName1              => NULL,
1742                 X_TokenName2              => NULL,
1743                 X_TokenName3              => NULL,
1744                 X_TokenName4              => NULL,
1745                 X_TokenName5              => NULL,
1746                 X_TokenName6              => NULL,
1747                 X_TokenValue1             => NULL,
1748                 X_TokenValue2             => NULL,
1749                 X_TokenValue3             => NULL,
1750                 X_TokenValue4             => NULL,
1751                 X_TokenValue5             => NULL,
1752                 X_TokenValue6             => NULL,
1753                 X_header_processable_flag => x_header_processable_flag);
1754          END IF;
1755          -- Bug 3320741 END
1756 
1757          IF (x_hd_type_lookup_code = 'STANDARD') THEN
1758 
1759             --Effective date is required for Standard PO with purchase basis
1760             --'TEMP LABOR'
1761 
1762             IF (p_effective_date IS NULL) THEN
1763       	       PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1764                   X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1765                   X_Error_type              => 'FATAL',
1766                   X_Batch_id                => NULL,
1767                   X_Interface_Header_Id     => X_interface_header_id,
1768                   X_Interface_Line_id       => X_interface_line_id,
1769                   X_Error_message_name      => 'PO_PDOI_SVC_MUST_START_DATE',
1770                   X_Table_name              => 'PO_LINES_INTERFACE',
1771                   X_Column_name             => 'EFFECTIVE_DATE',
1772                   X_TokenName1              => NULL,
1773                   X_TokenName2              => NULL,
1774                   X_TokenName3              => NULL,
1775                   X_TokenName4              => NULL,
1776                   X_TokenName5              => NULL,
1777                   X_TokenName6              => NULL,
1778                   X_TokenValue1             => NULL,
1779                   X_TokenValue2             => NULL,
1780                   X_TokenValue3             => NULL,
1781                   X_TokenValue4             => NULL,
1782                   X_TokenValue5             => NULL,
1783                   X_TokenValue6             => NULL,
1784                   X_header_processable_flag => x_header_processable_flag);
1785             End If;
1786 
1787             -- Expiration date if provided should be later than the effective date
1788             IF ((p_expiration_date IS NOT NULL)
1789                  AND (p_expiration_date < p_effective_date)) THEN
1790      	       PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1791                   X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1792                   X_Error_type              => 'FATAL',
1793                   X_Batch_id                => NULL,
1794                   X_Interface_Header_Id     => X_interface_header_id,
1795                   X_Interface_Line_id       => X_interface_line_id,
1796                   X_Error_message_name      => 'PO_SVC_END_GE_START',
1797                   X_Table_name              => 'PO_LINES_INTERFACE',
1798                   X_Column_name             => 'EXPIRATION_DATE',
1799                   X_TokenName1              => NULL,
1800                   X_TokenName2              => NULL,
1801                   X_TokenName3              => NULL,
1802                   X_TokenName4              => NULL,
1803                   X_TokenName5              => NULL,
1804                   X_TokenName6              => NULL,
1805                   X_TokenValue1             => NULL,
1806                   X_TokenValue2             => NULL,
1807                   X_TokenValue3             => NULL,
1808                   X_TokenValue4             => NULL,
1809                   X_TokenValue5             => NULL,
1810                   X_TokenValue6             => NULL,
1811                   X_header_processable_flag => x_header_processable_flag);
1812             END IF;
1813 
1814          END IF; --IF (x_hd_type_lookup_code = 'STANDARD')
1815 
1816     ELSE  --p_purchase_basis is not 'TEMP LABOR'
1817 
1818         -- For non TEMP LABOR Purchase basis, job should not be provided.
1819         IF (p_job_id IS NOT NULL) THEN
1820     	   PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1821               X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1822               X_Error_type              => 'FATAL',
1823               X_Batch_id                => NULL,
1824               X_Interface_Header_Id     => X_interface_header_id,
1825               X_Interface_Line_id       => X_interface_line_id,
1826               X_Error_message_name      => 'PO_PDOI_SVC_NO_JOB',
1827               X_Table_name              => 'PO_LINES_INTERFACE',
1828               X_Column_name             => 'JOB_ID',
1829               X_TokenName1              => NULL,
1830               X_TokenName2              => NULL,
1831               X_TokenName3              => NULL,
1832               X_TokenName4              => NULL,
1833               X_TokenName5              => NULL,
1834               X_TokenName6              => NULL,
1835               X_TokenValue1             => NULL,
1836               X_TokenValue2             => NULL,
1837               X_TokenValue3             => NULL,
1838               X_TokenValue4             => NULL,
1839               X_TokenValue5             => NULL,
1840               X_TokenValue6             => NULL,
1841               X_header_processable_flag => x_header_processable_flag);
1842         END IF;
1843 
1844         IF (x_hd_type_lookup_code = 'STANDARD') THEN
1845             IF (p_effective_date IS NOT NULL
1846                 OR p_expiration_date IS NOT NULL) THEN
1847         	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1848                        X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1849                        X_Error_type              => 'FATAL',
1850                        X_Batch_id                => NULL,
1851              	       X_Interface_Header_Id     => X_interface_header_id,
1852                        X_Interface_Line_id       => X_interface_line_id,
1853                        X_Error_message_name      => 'PO_SVC_NO_START_END_DATE',
1854                        X_Table_name              => 'PO_LINES_INTERFACE',
1855                        X_Column_name             => 'EFFECTIVE_DATE',
1856                        X_TokenName1              => NULL,
1857                        X_TokenName2              => NULL,
1858                        X_TokenName3              => NULL,
1859                        X_TokenName4              => NULL,
1860                        X_TokenName5              => NULL,
1861                        X_TokenName6              => NULL,
1862                        X_TokenValue1             => NULL,
1863                        X_TokenValue2             => NULL,
1864                        X_TokenValue3             => NULL,
1865                        X_TokenValue4             => NULL,
1866                        X_TokenValue5             => NULL,
1867                        X_TokenValue6             => NULL,
1868                        X_header_processable_flag => x_header_processable_flag);
1869             END IF;
1870         END IF; --IF (x_hd_type_lookup_code = 'STANDARD')
1871 
1872         -- <bug 3325447 start>
1873         -- For non TEMP LABOR Purchase basis, contractor first name or
1874         -- contractor last name should not be provided.
1875         IF (p_contractor_first_name IS NOT NULL) OR
1876             (p_contractor_last_name IS NOT NULL) THEN
1877     	   PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1878               X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1879               X_Error_type              => 'FATAL',
1880               X_Batch_id                => NULL,
1881               X_Interface_Header_Id     => X_interface_header_id,
1882               X_Interface_Line_id       => X_interface_line_id,
1883               X_Error_message_name      => 'PO_PDOI_SVC_NO_NAME',
1884               X_Table_name              => 'PO_LINES_INTERFACE',
1885               X_Column_name             => 'CONTRACTOR_FIRST/LAST_NAME',
1886               X_TokenName1              => NULL,
1887               X_TokenName2              => NULL,
1888               X_TokenName3              => NULL,
1889               X_TokenName4              => NULL,
1890               X_TokenName5              => NULL,
1891               X_TokenName6              => NULL,
1892               X_TokenValue1             => NULL,
1893               X_TokenValue2             => NULL,
1894               X_TokenValue3             => NULL,
1895               X_TokenValue4             => NULL,
1896               X_TokenValue5             => NULL,
1897               X_TokenValue6             => NULL,
1898               X_header_processable_flag => x_header_processable_flag);
1899         END IF;
1900         -- <bug 3325447 end>
1901 
1902    END IF;  -- End of Purchase basis TEMP LABOR
1903 
1904 
1905    IF (p_order_type_lookup_code IN ('FIXED PRICE', 'RATE')) THEN
1906 
1907          IF (x_item_id IS NOT NULL) THEN
1908     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1909                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1910                X_Error_type              => 'FATAL',
1911                X_Batch_id                => NULL,
1912                X_Interface_Header_Id     => X_interface_header_id,
1913                X_Interface_Line_id       => X_interface_line_id,
1914                X_Error_message_name      => 'PO_PDOI_SVC_NO_ITEM',
1915                X_Table_name              => 'PO_LINES_INTERFACE',
1916                X_Column_name             => 'ITEM_ID',
1917                X_TokenName1              => NULL,
1918                X_TokenName2              => NULL,
1919                X_TokenName3              => NULL,
1920                X_TokenName4              => NULL,
1921                X_TokenName5              => NULL,
1922                X_TokenName6              => NULL,
1923                X_TokenValue1             => NULL,
1924                X_TokenValue2             => NULL,
1925                X_TokenValue3             => NULL,
1926                X_TokenValue4             => NULL,
1927                X_TokenValue5             => NULL,
1928                X_TokenValue6             => NULL,
1929                X_header_processable_flag => x_header_processable_flag);
1930 
1931          END IF;
1932 
1933          IF (X_item_revision is not null) THEN
1934             PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1935                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1936                X_Error_type              => 'FATAL',
1937                X_Batch_id                => NULL,
1938                X_Interface_Header_Id     => X_interface_header_id,
1939                X_Interface_Line_id       => X_interface_line_id,
1940                X_Error_message_name      => 'PO_PDOI_COLUMN_NULL',
1941                X_Table_name              => 'PO_LINES_INTERFACE',
1942                X_Column_name             => 'ITEM_REVISION',
1943                X_TokenName1              => 'COLUMN_NAME',
1944                X_TokenName2              => 'VALUE',
1945                X_TokenName3              => NULL,
1946                X_TokenName4              => NULL,
1947                X_TokenName5              => NULL,
1948                X_TokenName6              => NULL,
1949                X_TokenValue1             => 'ITEM_REVISION',
1950                X_TokenValue2             => X_item_revision,
1951                X_TokenValue3             => NULL,
1952                X_TokenValue4             => NULL,
1953                X_TokenValue5             => NULL,
1954                X_TokenValue6             => NULL,
1955                X_header_processable_flag => x_header_processable_flag);
1956          END IF;
1957 
1958          IF (x_quantity IS NOT NULL) THEN
1959     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1960                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1961                X_Error_type              => 'FATAL',
1962                X_Batch_id                => NULL,
1963                X_Interface_Header_Id     => X_interface_header_id,
1964                X_Interface_Line_id       => X_interface_line_id,
1965                X_Error_message_name      => 'PO_SVC_NO_QTY',
1966                X_Table_name              => 'PO_LINES_INTERFACE',
1967                X_Column_name             => 'QUANTITY',
1968                X_TokenName1              => NULL,
1969                X_TokenName2              => NULL,
1970                X_TokenName3              => NULL,
1971                X_TokenName4              => NULL,
1972                X_TokenName5              => NULL,
1973                X_TokenName6              => NULL,
1974                X_TokenValue1             => NULL,
1975                X_TokenValue2             => NULL,
1976                X_TokenValue3             => NULL,
1977                X_TokenValue4             => NULL,
1978                X_TokenValue5             => NULL,
1979                X_TokenValue6             => NULL,
1980                X_header_processable_flag => x_header_processable_flag);
1981          END IF;
1982 
1983         IF ((p_amount IS NULL)
1984             AND (x_hd_type_lookup_code = 'STANDARD')) THEN
1985       	       PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
1986                   X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
1987                   X_Error_type              => 'FATAL',
1988                   X_Batch_id                => NULL,
1989                   X_Interface_Header_Id     => X_interface_header_id,
1990                   X_Interface_Line_id       => X_interface_line_id,
1991                   X_Error_message_name      => 'PO_PDOI_SVC_MUST_AMT',
1992                   X_Table_name              => 'PO_LINES_INTERFACE',
1993                   X_Column_name             => 'AMOUNT',
1994                   X_TokenName1              => NULL,
1995                   X_TokenName2              => NULL,
1996                   X_TokenName3              => NULL,
1997                   X_TokenName4              => NULL,
1998                   X_TokenName5              => NULL,
1999                   X_TokenName6              => NULL,
2000                   X_TokenValue1             => NULL,
2001                   X_TokenValue2             => NULL,
2002                   X_TokenValue3             => NULL,
2003                   X_TokenValue4             => NULL,
2004                   X_TokenValue5             => NULL,
2005                   X_TokenValue6             => NULL,
2006                   X_header_processable_flag => x_header_processable_flag);
2007         END IF;
2008 
2009         IF (p_order_type_lookup_code = 'FIXED PRICE') THEN
2010 
2011             -- <BUG 3248161 START> For 'Fixed Price/Services' line types,
2012             -- need to ensure that Oracle AP is on a sufficient family pack
2013             -- to handle the "amount"-based matching.
2014             --
2015             IF ( p_purchase_basis = 'SERVICES' ) THEN   -- Fixed Price/Services
2016 
2017                 IF ( PO_SERVICES_PVT.get_ap_compatibility_flag = 'N' ) THEN
2018 
2019                     PO_INTERFACE_ERRORS_SV1.handle_interface_errors
2020                     (   X_interface_type          => 'PO_DOCS_OPEN_INTERFACE'
2021                     ,   X_Error_type              => 'FATAL'
2022                     ,   X_Batch_id                => NULL
2023                     ,   X_Interface_Header_Id     => X_interface_header_id
2024                     ,   X_Interface_Line_id       => X_interface_line_id
2025                     ,   X_Error_message_name      => 'PO_SVC_AP_NOT_COMPATIBLE'
2026                     ,   X_Table_name              => 'PO_LINES_INTERFACE'
2027                     ,   X_Column_name             => NULL
2028                     ,   X_TokenName1              => NULL
2029                     ,   X_TokenName2              => NULL
2030                     ,   X_TokenName3              => NULL
2031                     ,   X_TokenName4              => NULL
2032                     ,   X_TokenName5              => NULL
2033                     ,   X_TokenName6              => NULL
2034                     ,   X_TokenValue1             => NULL
2035                     ,   X_TokenValue2             => NULL
2036                     ,   X_TokenValue3             => NULL
2037                     ,   X_TokenValue4             => NULL
2038                     ,   X_TokenValue5             => NULL
2039                     ,   X_TokenValue6             => NULL
2040                     ,   X_header_processable_flag => x_header_processable_flag
2041                     );
2042                 END IF;
2043 
2044             END IF;                                     -- Fixed Price/Services
2045             --
2046             -- <BUG 3248161 END>
2047 
2048             IF (x_unit_price IS NOT NULL) THEN
2049      	      PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2050                  X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
2051                  X_Error_type              => 'FATAL',
2052                  X_Batch_id                => NULL,
2053                  X_Interface_Header_Id     => X_interface_header_id,
2054                  X_Interface_Line_id       => X_interface_line_id,
2055                  X_Error_message_name      => 'PO_PDOI_SVC_NO_PRICE',
2056                  X_Table_name              => 'PO_LINES_INTERFACE',
2057                  X_Column_name             => 'UNIT_PRICE',
2058                  X_TokenName1              => NULL,
2059                  X_TokenName2              => NULL,
2060                  X_TokenName3              => NULL,
2061                  X_TokenName4              => NULL,
2062                  X_TokenName5              => NULL,
2063                  X_TokenName6              => NULL,
2064                  X_TokenValue1             => NULL,
2065                  X_TokenValue2             => NULL,
2066                  X_TokenValue3             => NULL,
2067                  X_TokenValue4             => NULL,
2068                  X_TokenValue5             => NULL,
2069                  X_TokenValue6             => NULL,
2070                  X_header_processable_flag => x_header_processable_flag);
2071            END IF;
2072 
2073            IF (x_unit_meas_lookup_code IS NOT NULL) THEN
2074 
2075       	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2076                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
2077                X_Error_type              => 'FATAL',
2078                X_Batch_id                => NULL,
2079                X_Interface_Header_Id     => X_interface_header_id,
2080                X_Interface_Line_id       => X_interface_line_id,
2081                X_Error_message_name      => 'PO_PDOI_SVC_NO_UOM',
2082                X_Table_name              => 'PO_LINES_INTERFACE',
2083                X_Column_name             => 'UOM_CODE',
2084                X_TokenName1              => NULL,
2085                X_TokenName2              => NULL,
2086                X_TokenName3              => NULL,
2087                X_TokenName4              => NULL,
2088                X_TokenName5              => NULL,
2089                X_TokenName6              => NULL,
2090                X_TokenValue1             => NULL,
2091                X_TokenValue2             => NULL,
2092                X_TokenValue3             => NULL,
2093                X_TokenValue4             => NULL,
2094                X_TokenValue5             => NULL,
2095                X_TokenValue6             => NULL,
2096                X_header_processable_flag => x_header_processable_flag);
2097            END IF;
2098 
2099         ELSE --p_order_type_lookup_code is 'RATE'
2100 
2101            /* Bug 3307438 START-- For Rate Based Temp Labor Line, the Currency rate_type
2102            cannot be USER   */
2103 
2104            Begin
2105             select rate_type
2106               into l_rate_type
2107             from po_headers_all
2108             where po_header_id = X_po_header_id;
2109 
2110             Exception
2111 
2112             When others then
2113                  l_rate_type := Null;
2114             End;
2115 
2116             if (l_rate_type = 'User') then
2117                 PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2118                      X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
2119                      X_Error_type              => 'FATAL',
2120                      X_Batch_id                => NULL,
2121                      X_Interface_Header_Id     => X_interface_header_id,
2122                      X_Interface_Line_id       => X_interface_line_id,
2123                      X_Error_message_name      => 'PO_PDOI_SVC_RATE_TYPE_NO_USR',
2124                      X_Table_name              => 'PO_LINES_INTERFACE',
2125                      X_Column_name             => 'Line Type',
2126                      X_TokenName1              => NULL,
2127                      X_TokenName2              => NULL,
2128                      X_TokenName3              => NULL,
2129                      X_TokenName4              => NULL,
2130                      X_TokenName5              => NULL,
2131                      X_TokenName6              => NULL,
2132                      X_TokenValue1             => NULL,
2133                      X_TokenValue2             => NULL,
2134                      X_TokenValue3             => NULL,
2135                      X_TokenValue4             => NULL,
2136                      X_TokenValue5             => NULL,
2137                      X_TokenValue6             => NULL,
2138                      X_header_processable_flag => x_header_processable_flag);
2139             end if;
2140 
2141            /* Bug 3307438  End   */
2142 
2143            IF (x_hd_type_lookup_code = 'BLANKET') THEN
2144                IF (p_amount IS NOT NULL) THEN
2145          	  PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2146                      X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
2147                      X_Error_type              => 'FATAL',
2148                      X_Batch_id                => NULL,
2149                      X_Interface_Header_Id     => X_interface_header_id,
2150                      X_Interface_Line_id       => X_interface_line_id,
2151                      X_Error_message_name      => 'PO_PDOI_SVC_BLKT_NO_AMT',
2152                      X_Table_name              => 'PO_LINES_INTERFACE',
2153           	     X_Column_name             => 'AMOUNT',
2154           	     X_TokenName1              => NULL,
2155           	     X_TokenName2              => NULL,
2156           	     X_TokenName3              => NULL,
2157            	     X_TokenName4              => NULL,
2158              	     X_TokenName5              => NULL,
2159             	     X_TokenName6              => NULL,
2160                	     X_TokenValue1             => NULL,
2161               	     X_TokenValue2             => NULL,
2162            	     X_TokenValue3             => NULL,
2163           	     X_TokenValue4             => NULL,
2164            	     X_TokenValue5             => NULL,
2165           	     X_TokenValue6             => NULL,
2166           	     X_header_processable_flag => x_header_processable_flag);
2167                END IF;
2168            END IF;
2169 
2170            IF (x_unit_meas_lookup_code IS NOT NULL) THEN
2171               --Validate UOM against the UOM class specified in profile
2172               SELECT  count(*)
2173               INTO    x_count
2174               FROM    MTL_UNITS_OF_MEASURE_VL
2175               WHERE   uom_class = p_service_uom_class
2176                       AND unit_of_measure = x_unit_meas_lookup_code
2177                       AND sysdate < NVL(disable_date, sysdate + 1);
2178 
2179               IF x_count < 1 THEN
2180       	         PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2181                     X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
2182                     X_Error_type              => 'FATAL',
2183                     X_Batch_id                => NULL,
2184                     X_Interface_Header_Id     => X_interface_header_id,
2185                     X_Interface_Line_id       => X_interface_line_id,
2186                     X_Error_message_name      => 'PO_PDOI_SVC_INVALID_UOM',
2187                     X_Table_name              => 'PO_LINES_INTERFACE',
2188                     X_Column_name             => 'UOM_CODE',
2189                     X_TokenName1              => NULL,
2190                     X_TokenName2              => NULL,
2191                     X_TokenName3              => NULL,
2192                     X_TokenName4              => NULL,
2193                     X_TokenName5              => NULL,
2194                     X_TokenName6              => NULL,
2195                     X_TokenValue1             => NULL,
2196                     X_TokenValue2             => NULL,
2197                     X_TokenValue3             => NULL,
2198                     X_TokenValue4             => NULL,
2199                     X_TokenValue5             => NULL,
2200                     X_TokenValue6             => NULL,
2201                     X_header_processable_flag => x_header_processable_flag);
2202               END IF;
2203            END IF; --IF (x_unit_meas_lookup_code IS NOT NULL)
2204 
2205        END IF;  --if p_order_type_lookup_code = 'FIXED PRICE'
2206 
2207    ELSE --p_order_type_lookup_code NOT IN ('FIXED PRICE', 'RATE')
2208 
2209        IF (p_amount IS NOT NULL) THEN
2210     	   PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2211                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
2212                X_Error_type              => 'FATAL',
2213                X_Batch_id                => NULL,
2214                X_Interface_Header_Id     => X_interface_header_id,
2215                X_Interface_Line_id       => X_interface_line_id,
2216                X_Error_message_name      => 'PO_SVC_NO_AMT',
2217                X_Table_name              => 'PO_LINES_INTERFACE',
2218                X_Column_name             => 'AMOUNT',
2219                X_TokenName1              => NULL,
2220                X_TokenName2              => NULL,
2221                X_TokenName3              => NULL,
2222                X_TokenName4              => NULL,
2223                X_TokenName5              => NULL,
2224                X_TokenName6              => NULL,
2225                X_TokenValue1             => NULL,
2226                X_TokenValue2             => NULL,
2227                X_TokenValue3             => NULL,
2228                X_TokenValue4             => NULL,
2229                X_TokenValue5             => NULL,
2230                X_TokenValue6             => NULL,
2231                X_header_processable_flag => x_header_processable_flag);
2232        END IF;
2233 
2234    END IF;  --   For Order_type_lookup in FIXED PRICE , RATE
2235 
2236    --<SERVICES FPJ END>
2237 
2238 
2239 --for all lookup types
2240       x_progress := '160';
2241       /* make sure that these fields are being populated */
2242       IF (x_line_num is null) THEN
2243          po_interface_errors_sv1.handle_interface_errors(
2244                                            'PO_DOCS_OPEN_INTERFACE',
2245                                            'FATAL',
2246                                             null,
2247                                             x_interface_header_id,
2248                                             x_interface_line_id,
2249                                            'PO_PDOI_COLUMN_NOT_NULL',
2250                                            'PO_LINES_INTERFACE',
2251                                            'LINE_NUM',
2252                                            'COLUMN_NAME',
2253                                             null,null,null,null,null,
2254                                             'LINE_NUM',
2255                                             null,null,null,null,null,
2256                                             x_header_processable_flag);
2257       END IF;
2258 
2259       X_progress := '163';
2260       IF (X_po_header_id IS NULL) THEN
2261          po_interface_errors_sv1.handle_interface_errors(
2262                                            'PO_DOCS_OPEN_INTERFACE',
2263                                            'FATAL',
2264                                             null,
2265                                             x_interface_header_id,
2266                                             x_interface_line_id,
2267                                            'PO_PDOI_COLUMN_NOT_NULL',
2268                                            'PO_LINES_INTERFACE',
2269                                            'PO_LINE_ID',
2270                                            'COLUMN_NAME',
2271                                             null,null,null,null,null,
2272                                             'PO_LINE_ID',
2273                                             null,null,null,null,null,
2274                                             x_header_processable_flag);
2275       END IF;
2276 
2277 
2278       X_progress := '165';
2279       IF (X_po_line_id IS NULL) THEN
2280          po_interface_errors_sv1.handle_interface_errors(
2281                                            'PO_DOCS_OPEN_INTERFACE',
2282                                            'FATAL',
2283                                             null,
2284                                             x_interface_header_id,
2285                                             x_interface_line_id,
2286                                            'PO_PDOI_COLUMN_NOT_NULL',
2287                                            'PO_LINES_INTERFACE',
2288                                            'PO_HEADER_ID',
2289                                            'COLUMN_NAME',
2290                                             null,null,null,null,null,
2291                                             'PO_HEADER_ID',
2292                                             null,null,null,null,null,
2293                                             x_header_processable_flag);
2294       END IF;
2295 
2296       x_progress := '170';
2297       IF (x_line_type_id is null) THEN
2298          po_interface_errors_sv1.handle_interface_errors(
2299                                            'PO_DOCS_OPEN_INTERFACE',
2300                                            'FATAL',
2301                                             null,
2302                                             x_interface_header_id,
2303                                             x_interface_line_id,
2304                                            'PO_PDOI_COLUMN_NOT_NULL',
2305                                            'PO_LINES_INTERFACE',
2306                                            'LINE_TYPE_ID',
2307                                            'COLUMN_NAME',
2308                                             null,null,null,null,null,
2309                                            'LINE_TYPE_ID',
2310                                             null,null,null,null,null,
2311                                             x_header_processable_flag);
2312       END IF;
2313 
2314       x_progress := '180';
2315       IF (x_category_id is null) THEN
2316          po_interface_errors_sv1.handle_interface_errors(
2317                                            'PO_DOCS_OPEN_INTERFACE',
2318                                            'FATAL',
2319                                             null,
2320                                             x_interface_header_id,
2321                                             x_interface_line_id,
2322                                            'PO_PDOI_COLUMN_NOT_NULL',
2323                                            'PO_LINES_INTERFACE',
2324                                            'CATEGORY_ID',
2325                                            'COLUMN_NAME',
2326                                             null,null,null,null,null,
2327                                            'CATEGORY_ID',
2328                                             null,null,null,null,null,
2329                                             x_header_processable_flag);
2330       END IF;
2331 
2332       x_progress := '190';
2333       IF (x_item_description is null) THEN
2334          po_interface_errors_sv1.handle_interface_errors(
2335                                            'PO_DOCS_OPEN_INTERFACE',
2336                                            'FATAL',
2337                                             null,
2338                                             x_interface_header_id,
2339                                             x_interface_line_id,
2340                                            'PO_PDOI_COLUMN_NOT_NULL',
2341                                            'PO_LINES_INTERFACE',
2342                                            'ITEM_DESCRIPTION',
2343                                            'COLUMN_NAME',
2344                                             null,null,null,null,null,
2345                                            'ITEM_DESCRIPTION',
2346                                             null,null,null,null,null,
2347                                             x_header_processable_flag);
2348       END IF;
2349 
2350       x_progress := '195';
2351       IF ((x_unit_meas_lookup_code IS NULL)
2352          AND (p_order_type_lookup_code <> 'FIXED PRICE')) THEN --<SERVICES FPJ>
2353          po_interface_errors_sv1.handle_interface_errors(
2354                                            'PO_DOCS_OPEN_INTERFACE',
2355                                            'FATAL',
2356                                             null,
2357                                             x_interface_header_id,
2358                                             x_interface_line_id,
2359                                            'PO_PDOI_COLUMN_NOT_NULL',
2360                                            'PO_LINES_INTERFACE',
2361                                            'UNIT_OF_MEASURE',
2362                                            'COLUMN_NAME',
2363                                             null,null,null,null,null,
2364                                            'UNIT_OF_MEASURE',
2365                                             null,null,null,null,null,
2366                                             x_header_processable_flag);
2367       END IF;
2368 
2369       x_progress := '200';
2370       IF ((x_unit_price IS NULL)
2371          AND (p_order_type_lookup_code <> 'FIXED PRICE')) THEN --<SERVICES FPJ>
2372          po_interface_errors_sv1.handle_interface_errors(
2373                                            'PO_DOCS_OPEN_INTERFACE',
2374                                            'FATAL',
2375                                             null,
2376                                             x_interface_header_id,
2377                                             x_interface_line_id,
2378                                            'PO_PDOI_COLUMN_NOT_NULL',
2379                                            'PO_LINES_INTERFACE',
2380                                            'UNIT_PRICE',
2381                                            'COLUMN_NAME',
2382                                             null,null,null,null,null,
2383                                            'UNIT_PRICE',
2384                                             null,null,null,null,null,
2385                                             x_header_processable_flag);
2386       END IF;
2387 --bug 1341322
2388       x_progress := '205';
2389       IF ((x_unit_price < 0)
2390          AND (p_order_type_lookup_code <> 'FIXED PRICE')) THEN --<SERVICES FPJ>
2391          po_interface_errors_sv1.handle_interface_errors(
2392                                            'PO_DOCS_OPEN_INTERFACE',
2393                                            'FATAL',
2394                                             null,
2395                                             x_interface_header_id,
2396                                             x_interface_line_id,
2397                                            'PO_PDOI_LT_ZERO',
2398                                            'PO_LINES_INTERFACE',
2399                                            'UNIT_PRICE',
2400                                            'COLUMN_NAME',
2401                                            'VALUE',null,null,null,null,
2402                                            'UNIT_PRICE',
2403                                             x_unit_price,null,null,null,null,
2404                                             x_header_processable_flag);
2405       END IF;
2406       x_progress := '210';
2407       IF (x_release_num is not null) THEN
2408          po_interface_errors_sv1.handle_interface_errors(
2409                                            'PO_DOCS_OPEN_INTERFACE',
2410                                            'FATAL',
2411                                             null,
2412                                             x_interface_header_id,
2413                                             x_interface_line_id,
2414                                            'PO_PDOI_COLUMN_NULL',
2415                                            'PO_LINES_INTERFACE',
2416                                            'RELEASE_NUM',
2417                                            'COLUMN_NAME',
2418                                            'VALUE',
2419                                             null,null,null,null,
2420                                            'RELEASE_NUM',
2421                                             x_release_num,
2422                                             null,null,null,null,
2423                                             x_header_processable_flag);
2424       END IF;
2425 
2426       x_progress := '220';
2427       IF (x_po_release_id is not null) THEN
2428          po_interface_errors_sv1.handle_interface_errors(
2429                                            'PO_DOCS_OPEN_INTERFACE',
2430                                            'FATAL',
2431                                             null,
2432                                             x_interface_header_id,
2433                                             x_interface_line_id,
2434                                            'PO_PDOI_COLUMN_NULL',
2435                                            'PO_LINES_INTERFACE',
2436                                            'PO_RELEASE_ID',
2437                                            'COLUMN_NAME',
2438                                            'VALUE',
2439                                             null,null,null,null,
2440                                            'PO_RELEASE_ID',
2441                                             x_po_release_id,
2442                                             null,null,null,null,
2443                                             x_header_processable_flag);
2444       END IF;
2445 
2446       x_progress := '230';
2447       IF (x_source_shipment_id is not null) THEN
2448          po_interface_errors_sv1.handle_interface_errors(
2449                                            'PO_DOCS_OPEN_INTERFACE',
2450                                            'FATAL',
2451                                             null,
2452                                             x_interface_header_id,
2453                                             x_interface_line_id,
2454                                            'PO_PDOI_COLUMN_NULL',
2455                                            'PO_LINES_INTERFACE',
2456                                            'SOURCE_SHIPMENT_ID',
2457                                            'COLUMN_NAME',
2458                                            'VALUE',
2459                                             null,null,null,null,
2460                                            'SOURCE_SHIPMENT_ID',
2461                                             x_source_shipment_id,
2462                                             null,null,null,null,
2463                                             x_header_processable_flag);
2464       END IF;
2465 
2466       x_progress := '240';
2467       IF (x_contract_num is not null) THEN
2468          po_interface_errors_sv1.handle_interface_errors(
2469                                            'PO_DOCS_OPEN_INTERFACE',
2470                                            'FATAL',
2471                                             null,
2472                                             x_interface_header_id,
2473                                             x_interface_line_id,
2474                                            'PO_PDOI_COLUMN_NULL',
2475                                            'PO_LINES_INTERFACE',
2476                                            'CONTRACT_NUM',
2477                                            'COLUMN_NAME',
2478                                            'VALUE',
2479                                             null,null,null,null,
2480                                            'CONTRACT_NUM',
2481                                             x_contract_num,
2482                                             null,null,null,null,
2483                                             x_header_processable_flag);
2484       END IF;
2485 
2486       -- <GC FPJ START>
2487       -- PDOI does not support importing contract reference info
2488 
2489       x_progress := '245';
2490       IF (p_contract_id IS NOT NULL) THEN
2491          PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
2492                                            'PO_DOCS_OPEN_INTERFACE',
2493                                            'FATAL',
2494                                             null,
2495                                             x_interface_header_id,
2496                                             x_interface_line_id,
2497                                            'PO_PDOI_COLUMN_NULL',
2498                                            'PO_LINES_INTERFACE',
2499                                            'CONTRACT_ID',
2500                                            'COLUMN_NAME',
2501                                            'VALUE',
2502                                             null,null,null,null,
2503                                            'CONTRACT_ID',
2504                                             p_contract_id,
2505                                             null,null,null,null,
2506                                             x_header_processable_flag);
2507       END IF;
2508 
2509       -- <GC FPJ END>
2510 
2511       x_progress := '250';
2512       IF (x_type_1099 is not null) THEN
2513          po_interface_errors_sv1.handle_interface_errors(
2514                                            'PO_DOCS_OPEN_INTERFACE',
2515                                             'FATAL',
2516                                             null,
2517                                             x_interface_header_id,
2518                                             x_interface_line_id,
2519                                            'PO_PDOI_COLUMN_NULL',
2520                                            'PO_LINES_INTERFACE',
2521                                            'TYPE_1099',
2522                                            'COLUMN_NAME',
2523                                            'VALUE',
2524                                             null,null,null,null,
2525                                            'TYPE_1099',
2526                                             x_type_1099,
2527                                             null,null,null,null,
2528                                             x_header_processable_flag);
2529       END IF;
2530 
2531       x_progress := '270';
2532 --frkhan not for standards
2533       IF (x_hd_type_lookup_code in ('QUOTATION', 'BLANKET')) THEN
2534 
2535          IF (x_receipt_days_exception_code is not null) AND
2536          (x_create_or_update_item_flag <> 'Y')
2537          THEN
2538             po_interface_errors_sv1.handle_interface_errors(
2539                                            'PO_DOCS_OPEN_INTERFACE',
2540                                            'FATAL',
2541                                             null,
2542                                             x_interface_header_id,
2543                                             x_interface_line_id,
2544                                            'PO_PDOI_COLUMN_NULL',
2545                                            'PO_LINES_INTERFACE',
2546                                            'RECEIPT_DAYS_EXCEPTION_CODE',
2547                                            'COLUMN_NAME',
2548                                            'VALUE',
2549                                             null,null,null,null,
2550                                            'RECEIPT_DAYS_EXCEPTION_CODE',
2551                                             x_receipt_days_exception_code,
2552                                             null,null,null,null,
2553                                             x_header_processable_flag);
2554          END IF;
2555 
2556          x_progress := '280';
2557       	 IF (x_need_by_date is not null) THEN -- Bug 3320741
2558 
2559             po_interface_errors_sv1.handle_interface_errors(
2560                                            'PO_DOCS_OPEN_INTERFACE',
2561                                            'FATAL',
2562                                             null,
2563                                             x_interface_header_id,
2564                                             x_interface_line_id,
2565                                            'PO_PDOI_COLUMN_NULL',
2566                                            'PO_LINES_INTERFACE',
2567                                            'NEED_BY_DATE',
2568                                            'COLUMN_NAME',
2569                                            'VALUE',
2570                                             null,null,null,null,
2571                                            'NEED_BY_DATE',
2572                                             x_need_by_date,
2573                                             null,null,null,null,
2574                                             x_header_processable_flag);
2575          END IF;
2576 
2577          x_progress := '290';
2578          IF (x_promised_date is not null) THEN -- Bug 3320741
2579 
2580             po_interface_errors_sv1.handle_interface_errors(
2581                                            'PO_DOCS_OPEN_INTERFACE',
2582                                            'FATAL',
2583                                             null,
2584                                             x_interface_header_id,
2585                                             x_interface_line_id,
2586                                            'PO_PDOI_COLUMN_NULL',
2587                                            'PO_LINES_INTERFACE',
2588                                            'PROMISED_DATE',
2589                                            'COLUMN_NAME',
2590                                            'VALUE',
2591                                             null,null,null,null,
2592                                            'PROMISED_DATE',
2593                                             x_promised_date,
2594                                             null,null,null,null,
2595                                             x_header_processable_flag);
2596          END IF;
2597 
2598          x_progress := '360';
2599          IF (x_invoice_close_tolerance is not null) AND
2600             (x_create_or_update_item_flag <> 'Y')
2601          THEN
2602             po_interface_errors_sv1.handle_interface_errors(
2603                                            'PO_DOCS_OPEN_INTERFACE',
2604                                            'FATAL',
2605                                             null,
2606                                             x_interface_header_id,
2607                                             x_interface_line_id,
2608                                            'PO_PDOI_COLUMN_NULL',
2609                                            'PO_LINES_INTERFACE',
2610                                            'INVOICE_CLOSE_TOLERANCE',
2611                                            'COLUMN_NAME',
2612                                            'VALUE',
2613                                             null,null,null,null,
2614                                            'INVOICE_CLOSE_TOLERANCE',
2615                                             x_invoice_close_tolerance,
2616                                             null,null,null,null,
2617                                             x_header_processable_flag);
2618          END IF;
2619 
2620          x_progress := '370';
2621          IF (x_receive_close_tolerance is not null)  AND
2622          (x_create_or_update_item_flag <> 'Y')
2623          THEN
2624             po_interface_errors_sv1.handle_interface_errors(
2625                                            'PO_DOCS_OPEN_INTERFACE',
2626                                            'FATAL',
2627                                             null,
2628                                             x_interface_header_id,
2629                                             x_interface_line_id,
2630                                            'PO_PDOI_COLUMN_NULL',
2631                                            'PO_LINES_INTERFACE',
2632                                            'RECEIVE_CLOSE_TOLERANCE',
2633                                            'COLUMN_NAME',
2634                                            'VALUE',
2635                                             null,null,null,null,
2636                                            'RECEIVE_CLOSE_TOLERANCE',
2637                                             x_receive_close_tolerance,
2638                                             null,null,null,null,
2639                                             x_header_processable_flag);
2640          END IF;
2641 
2642          x_progress := '390';
2643          IF (x_days_early_receipt_allowed is not null) AND
2644 	    (x_create_or_update_item_flag <> 'Y')
2645          THEN
2646             po_interface_errors_sv1.handle_interface_errors(
2647                                            'PO_DOCS_OPEN_INTERFACE',
2648                                            'FATAL',
2649                                             null,
2650                                             x_interface_header_id,
2651                                             x_interface_line_id,
2652                                            'PO_PDOI_COLUMN_NULL',
2653                                            'PO_LINES_INTERFACE',
2654                                            'DAYS_EARLY_RECEIPT_ALLOWED',
2655                                            'COLUMN_NAME',
2656                                            'VALUE',
2657                                             null,null,null,null,
2658                                            'DAYS_EARLY_RECEIPT_ALLOWED',
2659                                             x_days_early_receipt_allowed,
2660                                             null,null,null,null,
2661                                             x_header_processable_flag);
2662          END IF;
2663 
2664          x_progress := '400';
2665          IF (x_days_late_receipt_allowed is not null) AND
2666 	    (x_create_or_update_item_flag <> 'Y')
2667          THEN
2668             po_interface_errors_sv1.handle_interface_errors(
2669                                            'PO_DOCS_OPEN_INTERFACE',
2670                                            'FATAL',
2671                                             null,
2672                                             x_interface_header_id,
2673                                             x_interface_line_id,
2674                                            'PO_PDOI_COLUMN_NULL',
2675                                            'PO_LINES_INTERFACE',
2676                                            'DAYS_LATE_RECEIPT_ALLOWED',
2677                                            'COLUMN_NAME',
2678                                            'VALUE',
2679                                             null,null,null,null,
2680                                            'DAYS_LATE_RECEIPT_ALLOWED',
2681                                             x_days_late_receipt_allowed,
2682                                             null,null,null,null,
2683                                             x_header_processable_flag);
2684          END IF;
2685 
2686          x_progress := '410';
2687          IF (x_enforce_ship_to_loc_code is not null) AND
2688             (x_create_or_update_item_flag <> 'Y')
2689          THEN
2690             po_interface_errors_sv1.handle_interface_errors(
2691                                            'PO_DOCS_OPEN_INTERFACE',
2692                                            'FATAL',
2693                                             null,
2694                                             x_interface_header_id,
2695                                             x_interface_line_id,
2696                                            'PO_PDOI_COLUMN_NULL',
2697                                            'PO_LINES_INTERFACE',
2698                                            'ENFORCE_SHIP_TO_LOCATION_CODE',
2699                                            'COLUMN_NAME',
2700                                            'VALUE',
2701                                             null,null,null,null,
2702                                            'ENFORCE_SHIP_TO_LOCATION_CODE',
2703                                             x_enforce_ship_to_loc_code,
2704                                             null,null,null,null,
2705                                             x_header_processable_flag);
2706          END IF;
2707 
2708          x_progress := '420';
2709          IF (x_allow_sub_receipts_flag is not null) AND
2710             (x_create_or_update_item_flag <> 'Y')
2711          THEN
2712             po_interface_errors_sv1.handle_interface_errors(
2713                                            'PO_DOCS_OPEN_INTERFACE',
2714                                            'FATAL',
2715                                             null,
2716                                             x_interface_header_id,
2717                                             x_interface_line_id,
2718                                            'PO_PDOI_COLUMN_NULL',
2719                                            'PO_LINES_INTERFACE',
2720                                            'ALLOW_SUBSTITUTE_RECEIPTS_FLAG',
2721                                            'COLUMN_NAME',
2722                                            'VALUE',
2723                                             null,null,null,null,
2724                                            'ALLOW_SUBSTITUTE_RECEIPTS_FLAG',
2725                                             x_allow_sub_receipts_flag,
2726                                             null,null,null,null,
2727                                             x_header_processable_flag);
2728          END IF;
2729 
2730          x_progress := '430';
2731          IF (x_receiving_routing is not null) AND
2732             (x_create_or_update_item_flag <> 'Y')
2733          THEN
2734             po_interface_errors_sv1.handle_interface_errors(
2735                                            'PO_DOCS_OPEN_INTERFACE',
2736                                            'FATAL',
2737                                             null,
2738                                             x_interface_header_id,
2739                                             x_interface_line_id,
2740                                            'PO_PDOI_COLUMN_NULL',
2741                                            'PO_LINES_INTERFACE',
2742                                            'RECEIVING_ROUTING',
2743                                            'COLUMN_NAME',
2744                                            'VALUE',
2745                                             null,null,null,null,
2746                                            'RECEIVING_ROUTING',
2747                                             x_receiving_routing,
2748                                             null,null,null,null,
2749                                             x_header_processable_flag);
2750          END IF;
2751 
2752       END IF; --lookup in blanket, quote
2753        -- BUG 588911
2754        -- Remove the check to see if lead time is NULL
2755 /*
2756       x_progress := '300';
2757       IF (x_lead_time is not null) THEN
2758          po_interface_errors_sv1.handle_interface_errors(
2759                                            'PO_DOCS_OPEN_INTERFACE',
2760                                            'FATAL',
2761                                             null,
2762                                             x_interface_header_id,
2763                                             x_interface_line_id,
2764                                            'PO_PDOI_COLUMN_NULL',
2765                                            'PO_LINES_INTERFACE',
2766                                            'LEAD_TIME',
2767                                            'COLUMN_NAME',
2768                                            'VALUE',
2769                                             null,null,null,null,
2770                                            'LEAD_TIME',
2771                                             x_lead_time,
2772                                             null,null,null,null,
2773                                             x_header_processable_flag);
2774       END IF;
2775 */
2776       x_progress := '310';
2777 
2778       x_progress := '330';
2779       IF (x_closed_reason is not null) THEN
2780          po_interface_errors_sv1.handle_interface_errors(
2781                                            'PO_DOCS_OPEN_INTERFACE',
2782                                            'FATAL',
2783                                             null,
2784                                             x_interface_header_id,
2785                                             x_interface_line_id,
2786                                            'PO_PDOI_COLUMN_NULL',
2787                                            'PO_LINES_INTERFACE',
2788                                            'CLOSED_REASON',
2789                                            'COLUMN_NAME',
2790                                            'VALUE',
2791                                             null,null,null,null,
2792                                            'CLOSED_REASON',
2793                                             x_closed_reason,
2794                                             null,null,null,null,
2795                                             x_header_processable_flag);
2796       END IF;
2797 
2798       x_progress := '340';
2799       IF (x_closed_date is not null) THEN
2800          po_interface_errors_sv1.handle_interface_errors(
2801                                            'PO_DOCS_OPEN_INTERFACE',
2802                                            'FATAL',
2803                                             null,
2804                                             x_interface_header_id,
2805                                             x_interface_line_id,
2806                                            'PO_PDOI_COLUMN_NULL',
2807                                            'PO_LINES_INTERFACE',
2808                                            'CLOSED_DATE',
2809                                            'COLUMN_NAME',
2810                                            'VALUE',
2811                                             null,null,null,null,
2812                                            'CLOSED_DATE',
2813                                             x_closed_date,
2814                                             null,null,null,null,
2815                                             x_header_processable_flag);
2816       END IF;
2817 
2818       x_progress := '350';
2819       IF (x_closed_by is not null) THEN
2820          po_interface_errors_sv1.handle_interface_errors(
2821                                            'PO_DOCS_OPEN_INTERFACE',
2822                                            'FATAL',
2823                                             null,
2824                                             x_interface_header_id,
2825                                             x_interface_line_id,
2826                                            'PO_PDOI_COLUMN_NULL',
2827                                            'PO_LINES_INTERFACE',
2828                                            'CLOSED_BY',
2829                                            'COLUMN_NAME',
2830                                            'VALUE',
2831                                             null,null,null,null,
2832                                            'CLOSED_BY',
2833                                             x_closed_by,
2834                                             null,null,null,null,
2835                                             x_header_processable_flag);
2836       END IF;
2837 
2838 
2839       x_progress := '380';
2840       IF (x_firm_flag is not null) THEN
2841          po_interface_errors_sv1.handle_interface_errors(
2842                                            'PO_DOCS_OPEN_INTERFACE',
2843                                            'FATAL',
2844                                             null,
2845                                             x_interface_header_id,
2846                                             x_interface_line_id,
2847                                            'PO_PDOI_COLUMN_NULL',
2848                                            'PO_LINES_INTERFACE',
2849                                            'FIRM_FLAG',
2850                                            'COLUMN_NAME',
2851                                            'VALUE',
2852                                             null,null,null,null,
2853                                            'FIRM_FLAG',
2854                                             x_firm_flag,
2855                                             null,null,null,null,
2856                                             x_header_processable_flag);
2857       END IF;
2858 
2859       X_progress := '445';
2860       /* validate item related attibutes with line_type */
2861       IF (X_line_type_id is not NULL) THEN
2862           po_lines_sv7.validate_item_with_line_type(
2863                                    X_interface_header_id,
2864                                    X_interface_line_id,
2865                                    X_line_type_id,
2866                                    X_category_id,
2867                                    X_unit_meas_lookup_code,
2868                                    X_unit_price,
2869                                    X_item_id,
2870 				   X_item_description,
2871                                    X_item_revision,
2872                                    X_def_inv_org_id,
2873 				   X_create_or_update_item_flag,
2874                                    X_header_processable_flag,
2875                                    X_global_agreement_flag,  -- FPI GA
2876                                    x_hd_type_lookup_code);   -- Bug 3362369
2877 
2878       END IF;
2879 
2880       x_progress := '450';
2881       IF ((x_quantity < 0) AND (x_quantity is not null)
2882          AND (p_order_type_lookup_code NOT IN ('RATE', 'FIXED PRICE'))) THEN --<SERVICES FPJ>
2883          po_interface_errors_sv1.handle_interface_errors(
2884                                            'PO_DOCS_OPEN_INTERFACE',
2885                                            'FATAL',
2886                                             null,
2887                                             x_interface_header_id,
2888                                             x_interface_line_id,
2889                                            'PO_PDOI_LT_ZERO',
2890                                            'PO_LINES_INTERFACE',
2891                                            'QUANTITY',
2892                                            'COLUMN_NAME',
2893                                            'VALUE',
2894                                             null,null,null,null,
2895                                            'QUANTITY',
2896                                             x_quantity,
2897                                             null,null,null,null,
2898                                             x_header_processable_flag);
2899       END IF;
2900 
2901    /* check to see if the line num is unique */
2902    x_progress := '460';
2903    IF (x_line_num is not null) AND (x_po_header_id is not null) THEN
2904       x_valid := po_lines_sv1.val_line_num_uniqueness(x_line_num,
2905                                                       null,
2906                                                       x_po_header_id);
2907       IF (x_valid = FALSE) THEN
2908          po_interface_errors_sv1.handle_interface_errors(
2909                                            'PO_DOCS_OPEN_INTERFACE',
2910                                            'FATAL',
2911                                             null,
2912                                             x_interface_header_id,
2913                                             x_interface_line_id,
2914                                            'PO_PDOI_LINE_NUM_UNIQUE',
2915                                            'PO_LINES_INTERFACE',
2916                                            'LINE_NUM',
2917                                            'VALUE',
2918                                             null,null,null,null,null,
2919                                             x_line_num,
2920                                             null,null,null,null,null,
2921                                             x_header_processable_flag);
2922       END IF;
2923 
2924       x_progress := '470';
2925       IF (x_line_num <= 0) THEN
2926          po_interface_errors_sv1.handle_interface_errors(
2927                                            'PO_DOCS_OPEN_INTERFACE',
2928                                            'FATAL',
2929                                             null,
2930                                             x_interface_header_id,
2931                                             x_interface_line_id,
2932                                            'PO_PDOI_LT_ZERO',
2933                                            'PO_LINES_INTERFACE',
2934                                            'LINE_NUM',
2935                                            'COLUMN_NAME',
2936                                            'VALUE',
2937                                             null,null,null,null,
2938                                            'LINE_NUM',
2939                                             x_line_num,
2940                                             null,null,null,null,
2941                                             x_header_processable_flag);
2942       END IF;
2943    END IF; /* x_line_num is not null */
2944 
2945    x_progress := '480';
2946    IF (x_po_line_id is not null) AND (x_po_header_id is not null) THEN
2947       x_valid := po_lines_sv1.val_line_id_uniqueness(x_po_line_id,
2948                                                      null,
2949                                                      x_po_header_id);
2950       IF (x_valid = FALSE) THEN
2951          po_interface_errors_sv1.handle_interface_errors(
2952                                            'PO_DOCS_OPEN_INTERFACE',
2953                                            'FATAL',
2954                                             null,
2955                                             x_interface_header_id,
2956                                             x_interface_line_id,
2957                                            'PO_PDOI_LINE_ID_UNIQUE',
2958                                            'PO_LINES_INTERFACE',
2959                                            'PO_LINE_ID',
2960                                            'VALUE',
2961                                             null,null,null,null,null,
2962                                             x_po_line_id,
2963                                             null,null,null,null,null,
2964                                             x_header_processable_flag);
2965       END IF;
2966    END IF;
2967 
2968    x_progress := '490';
2969    IF (x_line_type_id is not null) THEN
2970       x_valid := po_line_types_sv1.val_line_type_id(x_line_type_id);
2971       IF (x_valid = FALSE) THEN
2972          po_interface_errors_sv1.handle_interface_errors(
2973                                            'PO_DOCS_OPEN_INTERFACE',
2974                                            'FATAL',
2975                                             null,
2976                                             x_interface_header_id,
2977                                             x_interface_line_id,
2978                                            'PO_PDOI_INVALID_LINE_TYPE_ID',
2979                                            'PO_LINES_INTERFACE',
2980                                            'LINE_TYPE_ID',
2981                                            'VALUE',
2982                                             null,null,null,null,null,
2983                                             x_line_type_id,
2984                                             null,null,null,null,null,
2985                                             x_header_processable_flag);
2986       END IF;
2987    END IF;
2988 
2989 --frkhan add standard
2990    IF (x_hd_type_lookup_code in ('BLANKET','STANDARD')) THEN
2991       x_progress := '550';
2992       IF (x_committed_amount < 0) AND (x_committed_amount is not null) THEN
2993          po_interface_errors_sv1.handle_interface_errors(
2994                                            'PO_DOCS_OPEN_INTERFACE',
2995                                            'FATAL',
2996                                             null,
2997                                             x_interface_header_id,
2998                                             x_interface_line_id,
2999                                            'PO_PDOI_LT_ZERO',
3000                                            'PO_LINES_INTERFACE',
3001                                            'COMMITTED_AMOUNT',
3002                                            'COLUMN_NAME',
3003                                            'VALUE',
3004                                             null,null,null,null,
3005                                           'COMMITTED_AMOUNT',
3006                                             x_committed_amount,
3007                                             null,null,null,null,
3008                                             x_header_processable_flag);
3009       END IF;
3010 
3011       x_progress := '560';
3012       IF (x_market_price < 0) AND (x_market_price is not null) THEN
3013          po_interface_errors_sv1.handle_interface_errors(
3014                                            'PO_DOCS_OPEN_INTERFACE',
3015                                            'FATAL',
3016                                             null,
3017                                             x_interface_header_id,
3018                                             x_interface_line_id,
3019                                            'PO_PDOI_LT_ZERO',
3020                                            'PO_LINES_INTERFACE',
3021                                            'MARKET_PRICE',
3022                                            'COLUMN_NAME',
3023                                            'VALUE',
3024                                             null,null,null,null,
3025                                            'MARKET_PRICE',
3026                                             x_market_price,
3027                                             null,null,null,null,
3028                                             x_header_processable_flag);
3029       END IF;
3030 
3031       x_progress := '570';
3032       IF (x_negotiated_by_preparer_flag is not null) THEN
3033          x_valid := po_core_sv1.val_flag_value(
3034                                            x_negotiated_by_preparer_flag);
3035          IF (x_valid = FALSE) THEN
3036            po_interface_errors_sv1.handle_interface_errors(
3037                                              'PO_DOCS_OPEN_INTERFACE',
3038                                              'FATAL',
3039                                               null,
3040                                               x_interface_header_id,
3041                                               x_interface_line_id,
3042                                              'PO_PDOI_INVALID_FLAG_VALUE',
3043                                              'PO_LINES_INTERFACE',
3044                                              'NEGOTIATED_BY_PREPARER_FLAG',
3045                                              'COLUMN_NAME',
3046                                              'VALUE',
3047                                               null,null,null,null,
3048                                              'NEGOTIATED_BY_PREPARER_FLAG',
3049                                               x_negotiated_by_preparer_flag,
3050                                               null,null,null,null,
3051                                               x_header_processable_flag);
3052         END IF;
3053       END IF;
3054 
3055       x_progress := '580';
3056       IF (x_capital_expense_flag is not null) THEN
3057          x_valid := po_core_sv1.val_flag_value(x_capital_expense_flag);
3058          IF (x_valid = FALSE) THEN
3059             po_interface_errors_sv1.handle_interface_errors(
3060                                      'PO_DOCS_OPEN_INTERFACE',
3061                                      'FATAL',
3062                                       null,
3063                                       x_interface_header_id,
3064                                       x_interface_line_id,
3065                                      'PO_PDOI_INVALID_FLAG_VALUE',
3066                                      'PO_LINES_INTERFACE',
3067                                      'CAPITAL_EXPENSE_FLAG',
3068                                      'COLUMN_NAME',
3069                                      'VALUE',
3070                                       null,null,null,null,
3071                                      'CAPITAL_EXPENSE_FLAG',
3072                                       x_capital_expense_flag,
3073                                       null,null,null,null,
3074                                       x_header_processable_flag);
3075          END IF;
3076       END IF;
3077 
3078       X_progress := '600';
3079       IF (x_allow_price_override_flag = 'N') THEN
3080          IF (x_not_to_exceed_price IS NOT NULL) THEN
3081            po_interface_errors_sv1.handle_interface_errors(
3082                                            'PO_DOCS_OPEN_INTERFACE',
3083                                            'FATAL',
3084                                             null,
3085                                             x_interface_header_id,
3086                                             x_interface_line_id,
3087                                            'PO_PDOI_EXCEED_PRICE_NULL',
3088                                            'PO_LINES_INTERFACE',
3089                                            'NOT_TO_EXCEED_PRICE',
3090                                            'VALUE',
3091                                             null,null,null,null,null,
3092                                             x_not_to_exceed_price,
3093                                             null,null,null,null,null,
3094                                             x_header_processable_flag);
3095          END IF;
3096       END IF;
3097 
3098       X_progress := '610';
3099       IF (x_not_to_exceed_price IS NOT NULL) THEN
3100          IF (x_not_to_exceed_price < x_unit_price) THEN
3101            po_interface_errors_sv1.handle_interface_errors(
3102                                            'PO_DOCS_OPEN_INTERFACE',
3103                                            'FATAL',
3104                                             null,
3105                                             x_interface_header_id,
3106                                             x_interface_line_id,
3107                                            'PO_PDOI_INVALID_PRICE',
3108                                            'PO_LINES_INTERFACE',
3109                                            'NOT_TO_EXCEED_PRICE',
3110                                            'VALUE',
3111                                            'UNIT_PRICE',
3112                                             null,null,null,null,
3113                                             x_not_to_exceed_price,
3114                                             x_unit_price,
3115                                             null,null,null,null,
3116                                             x_header_processable_flag);
3117          END IF;
3118       END IF;
3119    END IF; --blanket,standard
3120 --FRKHAN
3121    IF (x_hd_type_lookup_code = 'STANDARD') THEN
3122 	x_progress := '620';
3123       IF (x_quantity = 0) AND (x_quantity is not null) THEN
3124          po_interface_errors_sv1.handle_interface_errors(
3125                                            'PO_DOCS_OPEN_INTERFACE',
3126                                            'FATAL',
3127                                             null,
3128                                             x_interface_header_id,
3129                                             x_interface_line_id,
3130                                            'PO_PDOI_ZERO_QTY',
3131                                            'PO_LINES_INTERFACE',
3132                                            'QUANTITY',
3133                                             null,null,null,null,null,null,
3134                                             null,null,null,null,null,null,
3135                                             x_header_processable_flag);
3136       END IF;
3137 
3138 /* Bug# 1934962
3139    Removed the validation on need_by_date and promised_date to make
3140    it consistent with the Enter PO form */
3141 
3142 /*
3143 	x_progress := '630';
3144       IF (x_need_by_date < trunc(sysdate)) AND (x_need_by_date is not null) THEN
3145          po_interface_errors_sv1.handle_interface_errors(
3146                                            'PO_DOCS_OPEN_INTERFACE',
3147                                            'FATAL',
3148                                             null,
3149                                             x_interface_header_id,
3150                                             x_interface_line_id,
3151                                            'PO_PDOI_NEED_BY_DATE',
3152                                            'PO_LINES_INTERFACE',
3153                                            'NEED_BY_DATE',
3154                                            'NEED_BY_DATE',
3155                                            null,null,null,null,null,
3156                                             x_Need_by_date,
3157                                             null,null,null,null,null,
3158                                             x_header_processable_flag);
3159       END IF;
3160 
3161 	x_progress := '630';
3162       IF (x_promised_date < trunc(sysdate)) AND (x_promised_date is not null) THEN
3163          po_interface_errors_sv1.handle_interface_errors(
3164                                            'PO_DOCS_OPEN_INTERFACE',
3165                                            'FATAL',
3166                                             null,
3167                                             x_interface_header_id,
3168                                             x_interface_line_id,
3169                                            'PO_PDOI_PROMISED_DATE',
3170                                            'PO_LINES_INTERFACE',
3171                                            'PROMISED_DATE',
3172                                            'PROMISED_DATE',
3173                                             null,null,null,null,null,
3174                                             x_promised_date,
3175                                             null,null,null,null,null,
3176                                             x_header_processable_flag);
3177       END IF;
3178 */
3179 
3180    END IF; --standard
3181 
3182    /*** The following are validation rules for both blanket and quote ***/
3183    X_progress := '615';
3184 
3185 --Bug 1881762:Changing the '<>' to 'is not' in the following IF condiditon
3186 
3187    if (NVL(x_taxable_flag, 'NULL') = 'N' and x_tax_name is not null and
3188        x_tax_code_id is not null) then
3189 
3190             po_interface_errors_sv1.handle_interface_errors(
3191                                               'PO_DOCS_OPEN_INTERFACE',
3192                                               'FATAL',
3193                                                null,
3194                                                x_interface_header_id,
3195                                                x_interface_line_id,
3196                                               'PO_PDOI_INVALID_TAXABLE_FLAG',
3197                                               'PO_LINES_INTERFACE',
3198                                               'TAXABLE_FLAG',
3199                                               'VALUE',
3200                                                null,null,null,null,null,
3201                                                x_taxable_flag,
3202                                                null,null,null,null,null,
3203                                                x_header_processable_flag);
3204    end if;
3205 
3206    -- IF (x_tax_name is not null or x_tax_code_id is not null) THEN
3207    -- x_valid := po_ap_tax_codes_sv.val_tax_name(x_tax_name);
3208    -- IF (x_valid = FALSE) THEN
3209 
3210    if (x_tax_name is not null and x_tax_code_id is null) then
3211 
3212 	    -- something went wrong
3213             po_interface_errors_sv1.handle_interface_errors(
3214                                               'PO_DOCS_OPEN_INTERFACE',
3215                                               'FATAL',
3216                                                null,
3217                                                x_interface_header_id,
3218                                                x_interface_line_id,
3219                                               'PO_PDOI_INVALID_TAX_NAME',
3220                                               'PO_LINES_INTERFACE',
3221                                               'TAX_NAME',
3222                                               'VALUE',
3223                                                null,null,null,null,null,
3224                                                x_tax_name,
3225                                                null,null,null,null,null,
3226                                                x_header_processable_flag);
3227 
3228    elsif (x_tax_name is null and x_tax_code_id is not null) then
3229 
3230 	    -- something went wrong
3231             po_interface_errors_sv1.handle_interface_errors(
3232                                               'PO_DOCS_OPEN_INTERFACE',
3233                                               'FATAL',
3234                                                null,
3235                                                x_interface_header_id,
3236                                                x_interface_line_id,
3237                                               'PO_PDOI_INVALID_TAX_CODE_ID',
3238                                               'PO_LINES_INTERFACE',
3239                                               'TAX_CODE_ID',
3240                                               'VALUE',
3241                                                null,null,null,null,null,
3242                                                x_tax_code_id,
3243                                                null,null,null,null,null,
3244                                                x_header_processable_flag);
3245 
3246    elsif (x_tax_name is not null and x_tax_code_id is not null) then
3247 
3248 		-- validate tax id
3249 
3250 		select count(*) into x_count
3251 		from ap_tax_codes
3252 		where tax_id = x_tax_code_id
3253 		and enabled_flag = 'Y';
3254 
3255 		if x_count = 0 then
3256 
3257 			-- invalid tax id
3258 
3259             		po_interface_errors_sv1.handle_interface_errors(
3260                                               'PO_DOCS_OPEN_INTERFACE',
3261                                               'FATAL',
3262                                                null,
3263                                                x_interface_header_id,
3264                                                x_interface_line_id,
3265                                               'PO_PDOI_INVALID_TAX_CODE_ID',
3266                                               'PO_LINES_INTERFACE',
3267                                               'TAX_NAME',
3268                                               'VALUE',
3269                                                null,null,null,null,null,
3270                                                x_tax_name,
3271                                                null,null,null,null,null,
3272                                                x_header_processable_flag);
3273 		end if;
3274 
3275 
3276    end if;
3277 
3278    X_progress := '620';
3279    IF (x_terms_id is not null) THEN
3280       po_terms_sv.val_ap_terms(x_terms_id, x_res_terms_id);
3281       IF (x_res_terms_id is null) THEN
3282          po_interface_errors_sv1.handle_interface_errors(
3283                                               'PO_DOCS_OPEN_INTERFACE',
3284                                               'FATAL',
3285                                                null,
3286                                                x_interface_header_id,
3287                                                x_interface_line_id,
3288                                               'PO_PDOI_INVALID_PAY_TERMS',
3289                                               'PO_LINES_INTERFACE',
3290                                               'TERMS_ID',
3291                                               'VALUE',
3292                                                null,null,null,null,null,
3293                                                x_terms_id,
3294                                                null,null,null,null,null,
3295                                                x_header_processable_flag);
3296       END IF;
3297    END IF;
3298 
3299    x_progress := '630';
3300    IF (x_un_number_id is not null) THEN
3301       x_valid := po_un_numbers_sv1.val_un_number_id(x_un_number_id);
3302      IF (x_valid = FALSE) THEN
3303         po_interface_errors_sv1.handle_interface_errors(
3304                                           'PO_DOCS_OPEN_INTERFACE',
3305                                           'FATAL',
3306                                            null,
3307                                            x_interface_header_id,
3308                                            x_interface_line_id,
3309                                           'PO_PDOI_INVALID_UN_NUMBER_ID',
3310                                           'PO_LINES_INTERFACE',
3311                                           'UN_NUMBER_ID',
3312                                           'VALUE',
3313                                            null,null,null,null,null,
3314                                            x_un_number_id,
3315                                            null,null,null,null,null,
3316                                            x_header_processable_flag);
3317      END IF;
3318    END IF;
3319 
3320    x_progress := '640';
3321    IF (x_hazard_class_id is not null) THEN
3322       x_valid := po_hazard_classes_sv1.val_hazard_class_id(
3323                                                        x_hazard_class_id);
3324       IF (x_valid = FALSE) THEN
3325          po_interface_errors_sv1.handle_interface_errors(
3326                                           'PO_DOCS_OPEN_INTERFACE',
3327                                           'FATAL',
3328                                            null,
3329                                            x_interface_header_id,
3330                                            x_interface_line_id,
3331                                           'PO_PDOI_INVALID_HAZ_ID',
3332                                           'PO_LINES_INTERFACE',
3333                                           'HAZARD_CLASS_ID',
3334                                           'VALUE',
3335                                            null,null,null,null,null,
3336                                            x_hazard_class_id,
3337                                            null,null,null,null,null,
3338                                            x_header_processable_flag);
3339       END IF;
3340    END IF;
3341 
3342    x_progress := '650';
3343 
3344 /*
3345    IF (x_taxable_flag is not null) THEN
3346       x_valid := po_core_sv1.val_flag_value(x_taxable_flag);
3347       IF (x_valid = FALSE) THEN
3348          po_interface_errors_sv1.handle_interface_errors(
3349                                            'PO_DOCS_OPEN_INTERFACE',
3350                                            'FATAL',
3351                                             null,
3352                                             x_interface_header_id,
3353                                             x_interface_line_id,
3354                                            'PO_PDOI_INVALID_FLAG_VALUE',
3355                                            'PO_LINES_INTERFACE',
3356                                            'TAXABLE_FLAG',
3357                                            'COLUMN_NAME',
3358                                            'VALUE',
3359                                             null,null,null,null,
3360                                            'TAXABLE_FLAG',
3361                                             x_taxable_flag,
3362                                             null,null,null,null,
3363                                             x_header_processable_flag);
3364       END IF;
3365    END IF;
3366 */
3367    x_progress := '660';
3368    IF (x_price_type_lookup_code is not null) THEN
3369       x_valid :=po_headers_sv6.val_lookup_code(x_price_type_lookup_code,
3370                                                'PRICE TYPE');
3371       IF (x_valid = FALSE) THEN
3372          po_interface_errors_sv1.handle_interface_errors(
3373                                            'PO_DOCS_OPEN_INTERFACE',
3374                                            'FATAL',
3375                                             null,
3376                                             x_interface_header_id,
3377                                             x_interface_line_id,
3378                                            'PO_PDOI_INVALID_PRICE_TYPE',
3379                                            'PO_LINES_INTERFACE',
3380                                            'PRICE_TYPE_LOOKUP_CODE',
3381                                            'VALUE',
3382                                             null,null,null,null,null,
3383                                             x_price_type_lookup_code,
3384                                             null,null,null,null,null,
3385                                             x_header_processable_flag);
3386       END IF;
3387    END IF;
3388 
3389    x_progress := '670';
3390    IF (x_price_break_lookup_code is not null) THEN
3391       x_valid :=po_headers_sv6.val_lookup_code(x_price_break_lookup_code,
3392                                                'PRICE BREAK TYPE');
3393       IF (x_valid = FALSE) THEN
3394          po_interface_errors_sv1.handle_interface_errors(
3395                                            'PO_DOCS_OPEN_INTERFACE',
3396                                            'FATAL',
3397                                             null,
3398                                             x_interface_header_id,
3399                                             x_interface_line_id,
3400                                            'PO_PDOI_INVALID_PRICE_BREAK',
3401                                            'PO_LINES_INTERFACE',
3402                                            'PRICE_BREAK_LOOKUP_CODE',
3403                                            'VALUE',
3404                                             null,null,null,null,null,
3405                                             x_price_break_lookup_code,
3406                                             null,null,null,null,null,
3407                                             x_header_processable_flag);
3408       END IF;
3409 
3410     /* FPI GA start*/
3411     /* For a global agreement cumulative price break lines are not allowed */
3412       IF x_price_break_lookup_code = 'CUMULATIVE' THEN
3413          IF nvl(X_global_agreement_flag,'N') = 'Y' THEN
3414            po_interface_errors_sv1.handle_interface_errors(
3415                                            'PO_DOCS_OPEN_INTERFACE',
3416                                            'FATAL',
3417                                             null,
3418                                             x_interface_header_id,
3419                                             x_interface_line_id,
3420                                            'PO_PDOI_GA_PRICE_BREAK_NA',
3421                                            'PO_LINES_INTERFACE',
3422                                            null,
3423                                            null,
3424                                             null,null,null,null,null,
3425                                             x_price_break_lookup_code,
3426                                             null,null,null,null,null,
3427                                             x_header_processable_flag);
3428          --<SERVICES FPJ START>
3429          ELSIF (p_order_type_lookup_code = 'FIXED PRICE'
3430                 AND p_purchase_basis = 'SERVICES') THEN
3431 
3432             --You cannot have cumulative price breaks on
3433             --FIXED PRICE/SERVICES line types.
3434     	    PO_INTERFACE_ERRORS_SV1.handle_interface_errors(
3435                X_interface_type          => 'PO_DOCS_OPEN_INTERFACE',
3436                X_Error_type              => 'FATAL',
3437                X_Batch_id                => NULL,
3438                X_Interface_Header_Id     => x_interface_header_id,
3439                X_Interface_Line_id       => x_interface_line_id,
3440                X_Error_message_name      => 'PO_PDOI_SVC_NO_CUMULATIVE_PB',
3441                X_Table_name              => 'PO_LINES_INTERFACE',
3442                X_Column_name             => 'PRICE_BREAK_LOOKUP_CODE',
3443                X_TokenName1              => NULL,
3444                X_TokenName2              => NULL,
3445                X_TokenName3              => NULL,
3446                X_TokenName4              => NULL,
3447                X_TokenName5              => NULL,
3448                X_TokenName6              => NULL,
3449                X_TokenValue1             => NULL,
3450                X_TokenValue2             => NULL,
3451                X_TokenValue3             => NULL,
3452                X_TokenValue4             => NULL,
3453                X_TokenValue5             => NULL,
3454                X_TokenValue6             => NULL,
3455                X_header_processable_flag => x_header_processable_flag);
3456          END IF; --IF nvl(X_global_agreement_flag,'N') = 'Y'
3457          --<SERVICES FPJ END>
3458 
3459       END IF; --IF x_price_break_lookup_code = 'CUMULATIVE'
3460      /* FPI GA end */
3461 
3462    END IF;
3463 
3464 EXCEPTION
3465    WHEN others THEN
3466         po_message_s.sql_error('validate_po_lines', x_progress, sqlcode);
3467         raise;
3468 END validate_po_lines;
3469 
3470 END PO_LINES_SV7;