首先看一下oracle 脚本

 

/* # $Header: HTMomse12.sql 12.0.4                                  20121015    Support $

#+======================================================================================+
#| Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA |
#| Oracle Support Services. All rights reserved |
#+======================================================================================+

#========================================================================================
# PURPOSE: This script will collect information related to a sales order
# transaction and it's Workflow processes. This script should be
# run whenever there are problems related to a sales order
# transaction, including processes like Pick Release, Shipping,
# Invoice interface.
#
# FILE NAME: HTMomse12.sql
# FILE VERSION: 12.0.4
# PRODUCT: Oracle Order Management
# PRODUCT VERSIONS: 12.0 (and above)
# PLATFORM: Generic
# PARAMETERS: Order_Number, Header_Id (opt), Line_Id (opt)
#========================================================================================

# USAGE: sqlplus apps/apps @HTMomse12.sql
#
# This script requires a header_id to be passed in as a parameter ONLY if there are
# multiple header_id's for the order requested. If there is only one header_id returned
# after inputting the order number, simply hit enter and this header_id will be assumed.
#
# Entering a line_id is only required when you wish to have output for one order line.
# Otherwise, hit enter without entering a line_id and all lines will be output in the
# script.
#
# The script writes to an output file named HTMomse12_<ordernumber>.html on DB Server
# under 'utl_file_dir', this file may be viewed in any HTML browser.
#
*/

set term off;
/*
#=========================================================================================
# CHANGE HISTORY:
This script is based on HTMomse11i version 7.5.1, for the complete
change history please see HTMomse11i (Note 133464.1)

From HTMomse11i:
31-MAR-00 Created rnmercer
12-DEC-00 Major modifications to the look of the report including rnmercer
abreviated column names for flags, etc. A legend cross
referencing the abreviations is included in the output.
Got rid of the need to input the org_id. It is set via
derived data from the header_id.
17-MAY-01 Fix the line number to display all 5 numbers rnmercer
line.shipment.option.component.service
05-DEC-01 Changed format of output filename as part of the iTar
automated scripting initiative. rodavid
13-JUN-02 Modified to change version numbering to match Repository rodavid
02-APR-04 Modified to create HTML output file and included basic
14-APR-04 verifications to help the Analysis rijames
14-APR-04 include table ONT_WF_SKIP_LOG on header and lines rijames
01-NOV-07 Changed output function from DBMS_OUTOUT for UTL_FILE, rijames Ver. 7.5
due to size limitations on DBMS_OUTPUT function.
Output file will now be located on DB Server under 'utl_file_dir'.
Script will printout the filename and location.
Added some columns as requested by Support.

For HTMomse12:
09-JAN-08 Created as copy of HTMomse11i 7.5.1 rijames
11-JAN-08 Modified set environment using rodavid script rijames
Exclude IC tables (for OPM) as now OPM information is
contained on OM/WSH base tables.
14-JAN-08 Corrected conditions for sections to use UPPER() when rijames
answer is provided on lower case.
04-FEB-08 Move INVentory and OM Interface Flags after the Release rijames Ver 12.0.2
status field.
Correction on decode of the Hold Entity Code, label for
code 'W' is changed to 'Warehouse' (from 'Workflow').
06-FEB-08 Add outer join to MTL_SALES_ORDERS to print when Order rijames
Type definition has been deleted.
Move Parameters summary to top of output.
Modify to handle Orders with no lines, only Header
information will be printed.
07-FEB-08 Add Hostname on printout for ouput location. rijames
05-MAR-08 Add OPM fields on ORDER_LINES and most MTL queries, rijames
MTL_TRANSACTION_LOT_NUMBERS table included on MTL queries.
06-SEP-11 Correct Header on RA_INTERFACE_TABLE field rijames Ver 12.0.3
RAI.INTERFACE_LINE_ATTRIBUTE6 Line_ID_6 (was Line_ID_5)
06-SEP-11 Add transaction date and transaction interface id to rijames
MTL_TRANSACTIONS_INTERFACE.
06-SEP-11 Add transaction date to MTL_MATERIAL_TRANSACTIONS_TEMP. rijames
06-SEP-11 Add transaction date to MTL_MATERIAL_TRANSACTIONS. rijames
06-SEP-11 Add transaction date to MTL_UNIT_TRANSACTIONS. rijames
16-SEP-11 Add table MTL_SERIAL_NUMBERS. rijames
22-SEP-11 Add option to All or only first 10 records from tables rijames
MTL_UNIT_TRANSACTIONS (MUT), WSH_SERIAL_NUMBERS (WSN)
and MTL_SERIAL_NUMBERS
26-SEP-11 Add multiple Close and Reopen of Output file, so in case rijames
of SQL failure only a few tables are not printed.
29-SEP-11 Add additional fields to ORGANIZATIONS listing. rijames
17-OCT-11 Add 'SERIAL NUMBER Details' on Parameters Listing rijames
17-OCT-11 Modify title for column Transaction_Interface_Id for rijames
table MTL_TRANSACTIONS_INTERFACE
17-OCT-11 Modify title color for column INV_INTERFACED_FLAG for rijames
table WSH_DELIVERY_DETAILS, also the title bar will be
printed every 35 rows instead of every 50.
16-NOV-11 Split printout for ORGANIZATIONS and ACCOUNTING PERIODS rijames
10-FEB-12 Correct print sequence on Order Lines (Ordered Item) rijames
10-FEB-12 Print Column Headers for Order Lines every 35 lines rijames
10-FEB-12 Modify query for ACCOUNTING PERIODS to include Period rijames
for lines not Shipped yet.
14-MAR-12 Modify 'Serial Num. Details' title on Parameters Listing rijames
14-MAR-12 Add new close/open after ACCOUNTING PERIODS table rijames
04-MAY-12 Correct printout for 'UNPICKED LINES' table. rijames
11-OCT-12 Include WMS Rules tables. rijames
11-OCT-12 Include link to table WMS Rules on Tables Index. rijames
11-OCT-12 Change version to 12.0.4 rijames
15-OCT-12 Include line number and Internal Result code on lines rijames
Workflow table
15-OCT-12 Include Internal Result code on header Workflow table rijames
15-OCT-12 Correct OE_LINES FULFIL_QTY field printed rijames
15-MAR-13 Set WMS Information to Default to 'N' as the file rijames
created is too extense.
14-OCT-13 Sorting for Workflow lines corrected rijames
14-OCT-13 Change Version numbering to include date .yymmdd rijames
24-MAR-14 Change SQL to obtain utl_file_dir value rijames
24-MAR-14 Add field Source_line_set_id to Delivery Details query rijames
10-JUN-14 Correct WSH_DELIVERY_DETAILS (DET) table Headers rijames
10-JUN-14 Correct WSH_DELIVERY_DETAILS (CONTAINERS) columns order rijames
10-JUN-14 Add field Source Line Set Id to WSH_DELIVERY_DETAILS rijames
#
#========================================================================================

References
----------
For documentation and white papers on the Order Management product suite go to Metalink,
http://metalink.us.oracle.com, click on Top Tech Docs button -> E-Business Suite: ERP ->
Distribution/Supply Chain -> OM Suite: Order Management.
*/

variable v_order_num varchar2(100);
variable v_error number;
variable v_line_tot number;
variable v_line_cnt number;
variable sales_ord_id number;
variable v_op_unit number;
variable v_head_cnt number;
variable v_header_id number;
variable v_head_only varchar2(1);

variable r_line_t varchar2(100);
variable r_res_q number;
variable r_wdd number;
variable r_flag varchar2(100);
variable r_pro_na varchar2(100);
variable r_act_na varchar2(100);
variable r_result varchar2(100);
variable r_act_s varchar2(100);
variable r_error number;
variable is_opm varchar2(2);

variable all_or_top10 varchar2(100);


set arraysize 4;
set pagesize 58;
set term on;
set linesize 145;
set underline =;
set verify off;
set serveroutput on size 1000000;
set feedback off;

-- OE_ORDER_HEADERS
column HEADER_ID format 99999999;
column ORGANIZATION_NAME format A30;
column TYPE_ID format 99999999;
column TYPE_NAME format A15;
column ORD_DATE_TYPE format a15;
column ORD_NUM format 999999999;
column VERS format 9999;
column ORD_TYPE_ID format 999999999;
column FLOW_CODE format a22;
column CUST_NAME format A20;
column CUST_ID format 999999999;
column SHIP_TO_ID format 999999999;
column SHIP_TO format A12;
column SOLD_TO_ID format 999999999;
column PO_NUMBER format A09;
column DATE_ORD format A15;
column PL_ID format 99999;
column PRICE_LIST_NAME format A15;
column PL_NAME format A15;
column SHIP_PART format A09;
column ORGANIZATION format 9999999;
column WH_ID format 99999;
column DEMAND_CLASS format A12;
column OP format A05;
column CN format A05;
column BK format A05;
column DRP_SHP format A07;
column CYCLE_ID format 99999999;
column ORD_SRC_ID format 99999999;
column TRANS_TYPE format A12;
column CATEGORY format A08;
column SP format A05;
column CAT format A06;

-- WF_NOTIFICATIONS
column TO_USER format a22;
column ORIG_RECIP format a10;
column RECIP_ROLE format a10;
column MAIL_STAT format a9;
column MESSAGE_NAME format a25;
column SUBJECT format a45;

-- OE_TRANSACTION_TYPES_ALL
column ORDER_TYPE_NAME format A25;
column TYPE_NAME format A15;
column CONSTANTOE format A15;
column SHIP_PRIORITY format A13;
column SYS_REQD format A08;

-- OE_ORDER_LINES_ALL

column LINE_ID format 99999999;
column LINE format A08;
column LINE_NUM format A08;
column LINE_CTG format A09;
column CONFIG_HDR_ID format B99999999;
column SSCHED format B9999;
column PRT_LINE_ID format B99999999;
column ATO_LINE_ID format B99999999;
column LNK_LINE_ID format B99999999;
column SHP_LINE_ID format B99999999;
column SRC_LINE_ID format B99999999;
column SRV_LINE_ID format B99999999;
column ITEM_ID format 99999999;
column ITEM format A17;
column ORD_Q format 999999.99;
column ORG_Q format 999999.99;
column REQ_Q format 999999.99;
column PRICE format $999999999.99;
column SHP_Q format 999999.99;
column Q_INC format 999999.99;
column SHN_Q format 999999.99;
column SHP_Q format 999999.99;
column FUL_Q format 999999.99
column RES_Q format 999999.99;
column INC_Q format 999999.99;
column CAN_Q format 999999.99;
column LN_SET_TY format A11;
column SH_SET_TY format A11;
column AR_SET_TY format A11;
column REQUEST_D format A15;
column SCHEDUL_D format A15;
column SOURCE_TYPE format A11;
column DEM_CLASS format A10;
column LINE_DETAIL_ID format 9999999999;
--column OPEN_FL format A07;
--column CANC_FL format A07;
--column BOOKED format A07;
column SH format A05;
column VD format A05;
column FF format A05;
column SUBINV format A10;
column SSC format A05;
column SI format A05;
column II format A05;
column INVC_INT_STAT format A14;
column SHIPPABLE format A08;
column TRANSACTABLE format A08;
column RESERVABLE format A08;
column RELEASED format A08;
column FOR_REVENUE format A08;
column DELIVERY format 9999999999;

column SET_TYPE format A15;
column SET_NAME format A10;
column STATUS format A06;
column SCH_SHP_DT format A10;
column SCH_ARV_DT format A10;
column CARRIER format A15;
column SHIP_METHOD format A15;

column wf_act_code format a11;
column wf_result format a9;
column hist_comments format a45;
column hist_type format a12;
-- column PRICE format $9999999999.99;


-- WORKFLOW TABLES
column ITEM_KEY format A08;
column FLOW_PROCESS format A22;
column RESULT_CODE format A15;
column RESULT format A15;
column ASSIGNED_USER format A10;
column ERROR_NAME format A19;
column PROCESS_NAME format A25;
column ACTIVITY_NAME format A25;
column ERROR_ACTIVITY_NAME format A31;
column ACT_STATUS format A10;
column HEAD_ID format A08;
column LIN_ID format A08;
column NOTIF_ID format 99999999;
column ERROR_NAME format A14;
column ERR_RETRY_ROLE format A14;
column ERR_RETRY_USER format A14;
column BEGIN_DATE format A18;
column END_DATE format A18;

column ORD_TYPE_NAME format A20;
column CONSTANTOE format A12;
column DEMAND_ID format 9999999999;
column PARDEM_ID format 9999999999;
column DS_HEADER_ID format 99999999;
column DS_LINE format A08;
column RSV_QTY format 9999999.99;
column SAT_QTY format 9999999.99;
column PND_QTY format 9999999.99;
column REQUIRD_D format A15;
column TY format 99999;
column UP format 99999.99;
column MRP format 99999.99;
column ATP format 99999.99;
column PICKING_HEADER_ID format 9999999999;
column PICK_SLIP format 9999999999;
column BATCH_ID format 99999999;
column STATUS_CODE format A11;
column BATCH_NAME format A30;
column PICKING_LINE_ID format 9999999999;

column CONFIRMED format A09;
column RA_INTERFACE format A12;
column IN_INTERFACE format A15;
column PICK_LN_DTL_ID format 9999999999;
column SUBINVENTORY format A12;
column REV format A05;
column LOT_NUMBER format A15;
column SERIAL_NUMBER format A20;
column LOCATION_ID format 9999999999;
column ORG format A05;
column ATO format A05;
column OPT format A05;
column CFG format A05;
column SHIP_MC format A07;
column SHIP_SET format 99999999;
column ITEM_TYPE format A09;
column LINE_TYPE format A09;
column ENTER format A10;
column CANCEL_ORD format A10;
column CANCEL_LIN format A10;
column CTG format A05;
column INCL format A05;
column CONF format A05;
column WIP_RSV format 9999999;
column WIP_COM format 9999999;
column COMP_CODE format A10;
column SRC_TYP format 9999999;
column DEM_TYP format 9999999;
column WIP_ID format B99999999;
column JOB_NAME format A15;
column JOB_STAT format A12;
column UOM format A5;
column REL_FL format A06;
column SHIP_FL format A07;
column FOR_REV format A07;
column AUTOSCH format A06;
column DEP_NAME format a10;
column ORG_ID format 99999;
column WSH_ID format 9999999;
column SOURCE_CD format a12;
column STAT_CODE format A11;
column CLOSED_DT format A09;
column FREIGHT format A09;
column PLN_DEP_DT format A10;
column ACT_DEP_DT format A10;
column PLN_DEP_ID format 9999999999;
column ACT_DEP_ID format 9999999999;
column LOAD_ORD_FLG format A12;
column DEL_SEL format A07;
column DEP_SEL format A07;
column REL_STAT format A08;
column LIN_STAT format A08;
column WIP_ENT_ID format 9999999999;
column CONFIRM_D format A09;
column INVC_STAT format A10;
column INVC_INTF format A10;
column SHIP_STAT format A10;
column SHIP_INTF format A10;
column LOT format A10;
column REV format A05;
column SERIAL_NUM format A10;
column LOC_ID format 99999999;
column RESV_FL format A07;
column TRAN_FL format A07;
column SCHED_STAT format A10;
column INVOICE_TRIGGER format A15;
column SOURCING_STATUS format A15;
column INVOICING_STATUS format A16;
column CANCELLED_FLAG format A14;
column OPEN_FLAG format A09;
column CONSOLIDATION_STATUS_CODE format A25;
column CONSOLIDATION_PREF_FLAG format A23;
column PURCHASE_ORDER_NUM format A18;

column DEL_ID format 9999999;
column DEL_NAME format A10;

-- PO_REQUISITION_INTERFACE_ALL
column AUTH_STATUS format A11;
column DEST_TYPE format A10;
column SRC_CODE format A11;
column SRC_TYPE_CODE format A13;

-- PO_REQUISITION_HEADERS_ALL
column REQ_NUMBER format A10;
column SUMMARY format A07;
column XFR_OE_FLAG format A11;
column REQ_TYPE format A11;
column ENABLED format A07;

column ITEM_DESC format A40;
column CANC format A05;
column ENC_FL format A06;
column RFQ format A05;
column SRC_TYPE format a09;
column SRC_ORG format 9999999;

-- PO_HEADERS
column PO_NUM format A06;

-- MTL_SUPPLY
column SUP_TYPE format a08;
-- MTL_RESERVATIONS
column SHIP_READY format A12;
column SS_TYPE_ID format A11;
-- WSH_TRIPS
column TRIP_ID format 9999999;
column TRIP_NAME format A10;
column PLND format A05;
column VEH_NUM format A10;
column CARR_ID format 9999999;
column DET_Q format 99999;
column DS_TYPE format 9999999;
column ROUTE_ID format 99999999;
column VEH_ORG_ID format 9999999999;

-- WSH_TRIP_STOPS
column STOP_ID format 99999999;
column SEQ_NUM format 9999999;
column STOP_LOC_ID format 99999999999;
column PLN_DEP_DATE format A15;
column PLN_ARV_DATE format A15;
column ACT_DEP_DATE format A15;
column ACT_ARV_DATE format A15;
column PEND_INTERF format A11;


-- WSH_DELIVERY_LEGS
column LEG_ID format 9999999;
column LOAD_TENDER_STAT format A15;

-- WSH_NEW_DELIVERIES DEL
column DEL_NAME format A12;
column BOOKING_NUM format A12;
column WAYBILL format A12;
column ACCEPTED format A15;
column PICKUP_DT format A15;
column DROPOFF_DT format A15;

-- WSH_DELIVERY_ASSIGNMENTS ASG
column ACTIVE format A06;

-- WSH_DELIVERY_DETAILS
column REL_STATUS format A17;
column STA format 99999;
column STB format 99999;
column HOLD_CODE format A09;
column SMC format A05;
column SUB format A09;
column CUR_SUB format A09;
column ORG_SUB format A09;
column REV format A05;
column LOT format A05;
column SERIAL format A10;
column LOC_ID format 99999999;
column SHIP_METH format A10;
column OMI format A05;
column INI format A05;
column MVT_STATUS format A10;
column INV_INT format A07;
column CONT_NAME format A15;
column CONT_TYPE format A10;
column UNIT_NUM format A08;
column CONTAINER format A09;
column REQ_DATE format A15;
column MVT_STAT format A08;
column DEL_DET_ID format 9999999999;
column RELEASE_STAT format A15;
column REQ_Q format 999999.99;
column DLV_Q format 999999.99;
column SRQ_Q format 999999.99;
column BO_Q format 999999.99;
--column CAN_QTY format 9999999;
column SHIP_TO_ID format 999999999;
column LINE_REQ_QTY format 999999999999;
column TYPE format A05;
column MO_LINE_ID format 9999999999;
column DELIV_ID format 999999999;
column SH_FROM_ID format 999999999;
column SH_TO_ID format 99999999;

--WSH_PICK_SLIP_V
column LINE_STAT format A11;
column FROM_SUB format A09;
column TO_SUB format A09;
column DETL_DATE format A15;

column LINE_STATUS format A11;

--MTL_TXN_REQUEST_LINES_V
column REQ_NUM format A10;
column MV_LINE_STAT format A14;
column MO_NUMBER format A09;
column MOVE_TYPE_NAME format A14;
column TRNS_SRC_TYPE format A13;
column TRNS_TYPE_NAME format A30;
column TRNS_ACTION format A15;
column LOT_NUM format A10;

--MTL_MATERIAL_TRANSACTIONS_TEMP
column ERROR_EXPL format A10;
-- RA_CUSTOMER_TRX
-- RA_CUSTOMER_TRX_LINES
column ORD_LINE_NUM format 999999999999;
column TRX_NUMBER format A10;
column CONTEXT format A12;
column Order_Num_1 format A11;
column Order_Type_2 format A12;
column Delivery_3 format A10;
column WayBill_4 format A09;
column Line_ID_5 format A09;
column Pick_Line_Id_7 format A14;
column Bill_Lading_8 format A13;
column Warehouse_10 format A12;
column SOURCE format A30;
column TAX_FL format A06;

column QTY_ORD format 9999999.99;
column QTY format 9999999.99;
column ORD_LINE_NUM format A12;
column HEAD_CAT format A8;
column CURR format A4;
column TAX_EX_FL format A09;
column TERR_SEG1 format A09;
column TERR_SEG2 format A09;
column TERR_SEG3 format A09;

column MESSAGE_TEXT format A145;
column INVALID_VALUE format A30;

column STATUS format a8;

column ERR_TYPE_KEY format a14;
column ASGND_USER format a10;
column ERR_PROCESS_NAME format a18;
column ERR_ACTIVITY_NAME format a22;

column hold_name format a22;
column hold_type format a12;
column WF_ACTIVITY format a15;
column ENTITY format a8;
column ENTITY2 format a8;
column HOLD_UNTIL format a18;
column RELEASE_REASON format a14;
column H_REL format a5;
column S_REL format a5;

column AF format A5;
column LIST_TYPE_CODE format a14;
column UA format A5;
column UF format A5;
column AP format A5;
column ARITH_OP format a8;
column TAX_CODE format a12;
column INF format A5;
column EF format A5;
column CHG_TY_CD format a9;
column AC format A5;
column PI format A5;
column CD format A5;
column LIST_LN_NO format a10;
column LK format 99999;
column PP format 99999;
column MOD_LVL format a7;
column PERC format 9999;

column STATUS format a6;

column msg_Source format a14;

column error format a30;
column ITEM_DESC format a25;
column PRICE format $999999999.99

column REQ_NUM_IK format A9;

column ACCEPT_REQD format A10;
column CLS_STAT format A08;
column CONF_ORD format A08;
column CURR_CODE format A05;
column ENABLED format A07;
column FROZEN format A06;
column SUMM format A05;
column TYPE format A10;
column ITEM_KEY format A09;
column SHIP_TO format 9999999;

column PO_LINE format 9999;
column FIRM format A05;
column ITEM_DESC format A40;

column PO_NUM_IK format A9;
column ERROR_N format A7;

column SRC_DOC format a9;
column SHP_LINE_STATUS format a15;
column RCV_Q format 99999;
column TRANS_TYPE format A10;
column INSPECT_STAT format A13;
column INTF_SRC format A11;
column SRC_DOC_CODE format A12;
column QTY format 9999;

column PROC_MODE format a10;
column DEST_TYPE format a9;
column INSP_STAT format a13;
column INSP_SRC format a8;
column PROC_STAT format a9;
column RCPT_SRC format a8;
column TRNS_STAT format a9;
column TRNS_TYPE format a9;

column error_wie format a100;

column status format a9;
column firm format 9999;
column WIP_SUP_TYPE format a13;
column JOB_NAME format a8;
column TRANS_TYPE format a19;

column SRC_CODE format a8;
column PHS format 99999;
column STAT_TY format 9999999;
column STAT format 9999;
column LOAD format 9999;

column status format a9;
column firm format 9999;
column WIP_SUP_TYPE format a13;
column JOB_NAME format a8;
column TRANS_TYPE format a19;

column SRC_CODE format a8;
column PHS format 99999;
column STAT_TY format 9999999;
column STAT format 9999;
column LOAD format 9999;

column STOP_DESCRIPTION format A58;

column GRS_WT format 999999;
column FL_PER format 999.99;
column VOL format 9999;
column VOL_UOM format a07;
column CF format A05;
column WT_UOM format a06;
column FOB_CODE format a11;
column FRT_TERMS format a9;

column LCK format 99999;
column PROCESS format 9999999;
column ERROR_CODE format A30;
column ERROR_EXPL format A60;

column FRT_NAME format a30;
column FRT_TYPE format a15;
column FRT_LEVEL format a15;
column QTY format 9999;

column PRM_Q format 99999;
column DLV_Q format 99999;
column DTL_Q format 99999;

column LCK format A05;
column PROCESS format A07;
column ERROR_CODE format A11;
column ERROR_EXPL format A30;

column TRANS_TYPE format A11;

column QTY format 9999;
column LINE_NUM format 99999999;
column BATCH_SOURCE format a20;
column SO_LIN format a06;
column AR_ID format 99999;
column IR_ID format 99999;
column WH_ID_10 format a08;
column PA_ID_11 format a08;
column C_RATE format 999999;
column TR format 9999;
column EF format A05;
column INTF_LINE_ID format 99999999999;
column CRD_Q format 99999;
column PRICE format $9999999.99;

column PO_NUMBER format A09;
column COMP_FL format a07;
column EXTD_AMT format $999,999.99;
column REV_AMT format $999,999.99;
column TF format A05;
column SOURCE format A11;
column INV_Q format 99999;
column SHIP_VIA format A12;

Set heading on

WHENEVER SQLERROR EXIT FAILURE ROLLBACK;


prompt
accept order_number_selected prompt 'Please enter Sales Order number: '
prompt

begin

:v_error := 0;
:v_order_num := '&order_number_selected';

select count(*)
into :v_head_cnt
from oe_order_headers_all
where
order_number = :v_order_num;

if :v_head_cnt = 0 then
RAISE no_data_found;
end if;

if :v_head_cnt = 1 then
select header_id
into :v_header_id
from oe_order_headers_all
where order_number = :v_order_num;
end if;


exception
when no_data_found then
dbms_output.put_line('ERROR - Invalid order number entered');
dbms_output.put_line('ACTION - Script execution must be aborted');
dbms_output.put_line('ACTION - Please hit CTL-C to exit');
:v_error := 1;
raise;
when others then
dbms_output.put_line('ERROR - Unable to retrieve order due to error: '||SQLERRM);
dbms_output.put_line('ACTION - Script execution must be aborted');
dbms_output.put_line('ACTION - Please hit CTL-C to exit');
:v_error := 1;
raise;

end;
/


-- spool &out_file;


/* Display list of header_ids matching the order number entered */
select
ORD.HEADER_ID HEADER_ID,
TYP.NAME ORDER_TYPE_NAME,
ORD.ORDER_CATEGORY_CODE CATEGORY,
ORD.ORG_ID ORG_ID,
(select name
from hr_operating_units
where organization_id = nvl(ORD.ORG_ID,-99)) ORGANIZATION_NAME
from
OE_ORDER_HEADERS_ALL ORD,
OE_TRANSACTION_TYPES_TL TYP,
FND_LANGUAGES FLA
where
ORD.ORDER_NUMBER = :v_order_num
and TYP.LANGUAGE = FLA.LANGUAGE_CODE
and FLA.INSTALLED_FLAG = 'B'
and ORD.ORDER_TYPE_ID = TYP.TRANSACTION_TYPE_ID
and :v_error = 0;


prompt
accept header_id_selected prompt 'Please enter HEADER_ID from list above (optional): '
prompt

/* Set client info context based on the org_id from sales order */
begin
select org_id
into :v_op_unit
from oe_order_headers_all ord
where
ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id);

mo_global.set_policy_context(p_access_mode => 'S', p_org_id => :v_op_unit); -- by rodavid

exception
when no_data_found then
dbms_output.put_line('ERROR - Invalid order number entered');
dbms_output.put_line('ACTION - Script execution must be aborted');
dbms_output.put_line('ACTION - Please hit CTL-C to exit');
:v_error := 1;
raise;
when others then
dbms_output.put_line('ERROR - Unable to retrieve order due to error: '||SQLERRM);
dbms_output.put_line('ACTION - Script execution must be aborted');
dbms_output.put_line('ACTION - Please hit CTL-C to exit');
:v_error := 1;
raise;
end;
/

begin
select count(*)
into :v_line_tot
from oe_order_lines_all
where header_id = nvl('&header_id_selected',:v_header_id);

if :v_line_tot = 0 then
dbms_output.put_line('WARNING - Order selected does not have any lines');
dbms_output.put_line('WARNING - Please hit CTL-C to abort');
dbms_output.put_line('WARNING - If you chose to continue only Header information will be printed,');
dbms_output.put_line('WARNING - all additional entries will be ignored.');
:v_head_only := 'Y';
else
:v_head_only := 'N';
end if;
end;
/


/* Display all line_ids associated with this order number */
select
substr(LIN.LINE_ID,1,15) LINE_ID,
substr(to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)),1,10) LINE_NUM,
ITM.SEGMENT1 ITEM,
substr(LIN.LINE_CATEGORY_CODE,1,10) lin_cat,
nvl(LIN.ORDERED_QUANTITY,0) Order_QTY,
LIN.ORDER_QUANTITY_UOM uom,
substr(LIN.FLOW_STATUS_CODE,1,20) Line_status,
nvl(LIN.SHIPPED_QUANTITY,0) shipped,
nvl(LIN.FULFILLED_QUANTITY,0) fulfilled,
nvl(LIN.INVOICED_QUANTITY,0) invoiced,
nvl(LIN.CANCELLED_QUANTITY,0) cancelled
from
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM
where
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and LIN.OPTION_NUMBER IS NULL
and LIN.ITEM_TYPE_CODE <> 'INCLUDED'
order by
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
NVL(LIN.SERVICE_REFERENCE_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

/* Display any header or line sets associated with this order */
PROMPT
PROMPT OE_SETS (SET)

select ST1.SET_ID SET_ID,
ST1.SET_NAME SET_NAME,
ST1.SET_TYPE SET_TYPE,
ST1.HEADER_ID HEADER_ID,
ST1.INVENTORY_ITEM_ID ITEM_ID,
ST1.ORDERED_QUANTITY_UOM UOM,
ST1.LINE_TYPE_ID LINE_TYPE_ID,
nvl(LST.SYSTEM_REQUIRED_FLAG,'N') SYS_REQD,
ST1.SET_STATUS STATUS,
to_char(ST1.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS') SCH_SHP_DT,
to_char(ST1.SCHEDULE_ARRIVAL_DATE,'DD-MON-RR_HH24:MI:SS') SCH_ARV_DT,
ST1.SHIP_FROM_ORG_ID SHIP_FROM,
ST1.SHIP_TO_ORG_ID SHIP_TO_ID,
ST1.SHIPMENT_PRIORITY_CODE SHIP_PRIORITY,
ST1.FREIGHT_CARRIER_CODE CARRIER,
ST1.SHIPPING_METHOD_CODE SHIP_METHOD,
ST1.SHIP_TOLERANCE_ABOVE STA,
ST1.SHIP_TOLERANCE_BELOW STB
from OE_SETS ST1,
OE_LINE_SETS LST
where ST1.SET_ID = LST.SET_ID(+)
and ST1.HEADER_ID = nvl('&header_id_selected',:v_header_id);

prompt
accept line_id_selected prompt 'Please enter LINE_ID from list above(leave blank for all lines): '

begin
if :v_line_tot > 0 then -- check for line_id
begin
select count(*)
into :v_line_cnt
from oe_order_lines_all
where header_id = nvl('&header_id_selected',:v_header_id)
and nvl('&line_id_selected',0) in (0,line_id);

if :v_line_cnt = 0 then
RAISE no_data_found;
end if;

exception
when no_data_found then
dbms_output.put_line('ERROR - Invalid line_id entered');
dbms_output.put_line('ACTION - Please hit CTL-C to exit');
dbms_output.put_line('.');
:v_error := 1;
raise;
when others then
dbms_output.put_line('ERROR - Unable to retrieve order line due to error: '||SQLERRM);
dbms_output.put_line('ACTION - Please hit CTL-C to exit');
dbms_output.put_line('.');
:v_error := 1;
raise;
end;
end if;
end;
/

WHENEVER SQLERROR CONTINUE;

prompt
accept do_analysis prompt 'Do you want validation performed on this order (Default=Y): '
prompt

prompt
accept prt_wf prompt 'Do you want WorkFlow information printed? (Default=Y): '
accept prt_price prompt 'Do you want Pricing information printed? (Default=Y): '
accept prt_po prompt 'Do you want Purchasing information printed? (Default=Y): '
accept prt_rec prompt 'Do you want Receiving information printed? (Default=Y): '
accept prt_wip prompt 'Do you want Work In Progress information printed? (Default=Y): '
accept prt_inv prompt 'Do you want Inventory information printed? (Default=Y): '
accept prt_ar prompt 'Do you want Receivables information printed? (Default=Y): '
prompt
prompt Listing of tables for WMS could be extense, *** Note Default is No ***
accept prt_wms prompt 'Do you want WMS information printed? (Default=N): '
prompt
prompt Listing of tables MTL_UNIT_TRANSACTIONS (MUT), WSH_SERIAL_NUMBERS (WSN)
prompt and MTL_SERIAL_NUMBERS could be extense.
accept det_cnt prompt 'Do you want complete listing (Y-All records N-only the first 10 records)? (Default=Y): '
prompt

set heading off

def version_code='12.0.4.140610'
def c1='_'
def pref='HTMomse12'
def suff='.html'
def out_file='&pref&c1&order_number_selected&suff'

-- Printout the filename and location
column DUMMY new_value out_dir noprint
column DUMMY2 new_value host_nam noprint
select substr(value,1,instr(value||',',',')-1) DUMMY
from v$parameter where name = 'utl_file_dir';

select substr(machine,1,20) DUMMY2
from v$session where upper(program) like '%SMON%';

Prompt Output file created on Database Server: "&host_nam"
Prompt Complete path and filename: "&out_dir/&out_file"


set define '!'
-- Tables
def std='<table width=100% border=1 cellpadding=1 cellspacing=1>'
def et=</Table>
-- headers
def sh='<TR bgcolor="#cccc99"><td><font face="arial" color="#336699"> <b><i>'
def dh='</i></b></font></td><td><font face="arial" color="#336699"> <b><i>'
def dhr='</i></b></font></td><td><font face="arial" color="#ff0000"> <b><i>'
def eh='</i></b></font></td></tr>'
-- def sh='<TR bgcolor="#cccc99"><td><b><i>'
-- def dh='</i></b></td><td><b><i>'
-- def eh='</i></b></td></tr>'
-- lines
def sld='<tr bgcolor="#f7f7e7"><td><font face="arial" size="-1">'
def d='</font></td><td><font face="arial" size="-1">'
def el='</font></td></tr>'
-- def sld='<tr bgcolor="#f7f7e7"><td>'
-- def d='</td><td>'
-- def el='</td></tr>'
-- otros
def f=<br> -- eol
def b=<b> -- bold
def eb=</b> -- end bold
def sp=' ' -- space
set null ' '
set define '&'


-- Start of printout
DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is -- to print fields
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

function n2(v varchar2,v2 varchar2) return varchar2 is -- to print parameters
begin
if v is null then
return v2;
else
return v;
end if;
end n2;

begin
-- Creation of output file
-- SQL fails when parameter is loo long
-- select substr(value,1,instr(value||',',',')-1) into dirname
-- from v$parameter where name = 'utl_file_dir';

select substr(value,1,decode(instr(value,','),0,length(value),instr(value,',')-1)) into dirname
from v$parameter where name = 'utl_file_dir';

-- handle := UTL_FILE.FOPEN(dirname,dirname||'/&out_file','W',32000);
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','W',32000);

/* HTML header information */

UTL_FILE.PUT_LINE(handle,'<html>');
UTL_FILE.PUT_LINE(handle,'<head>');
UTL_FILE.PUT_LINE(handle,'<title> &out_file </title>');
UTL_FILE.PUT_LINE(handle,'</head>');
UTL_FILE.PUT_LINE(handle,'<body background=#ffffff>');
UTL_FILE.PUT_LINE(handle,'<font face="arial" color="#336699"> <b><i>');

-- DataBase name, creation date
-- User and time script execution
UTL_FILE.PUT_LINE(handle,'&std &sh DATABASE IDENTIFICATION &dh SCRIPT EXECUTION (Ver. &version_code) &eh');
select '&sld &b DB Name: &eb '||name||' - &b Release: &eb '||substr(release_name,1,10)||' &d'||
'&b Script run at Date/Time: &eb'||to_char(sysdate,'DD-MON-RR_HH24:MI:SS')||'&el'||
'&sld &b Creation Date: &eb'||to_char(created,'DD-MON-RR_HH24:MI:SS')||'&d'
into text
from V$DATABASE, fnd_product_groups;

UTL_FILE.PUT_LINE(handle,text);
select '&b USER is: '||username into text from user_users;
UTL_FILE.PUT_LINE(handle,text);
UTL_FILE.PUT_LINE(handle,'&eb &el &et &f &f');


UTL_FILE.PUT_LINE(handle,'&std &sh The test will be run with the following parameters &dh Sections being printed: &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld &b Order Number = &eb &order_number_selected &d WorkFlow = '||n2('&prt_wf','Y')||' &d Pricing = '||n2('&prt_price','Y')||' &el');
UTL_FILE.PUT_LINE(handle,'&sld &b Header Id = &eb &header_id_selected &d Purchasing = '||n2('&prt_po','Y')||' &d Receiving = '||n2('&prt_rec','Y')||' &el');
if :v_head_only = 'Y' then
UTL_FILE.PUT_LINE(handle,'&sld &b Line Id = &eb '||n2('','Header Only')||' &d Work in Progress = '||n2('&prt_wip','Y')||' &d Inventory = '||n2('&prt_inv','Y')||' &el');
else
UTL_FILE.PUT_LINE(handle,'&sld &b Line Id = &eb '||n2('&line_id_selected','All Lines')||' &d Work in Progress = '||n2('&prt_wip','Y')||' &d Inventory = '||n2('&prt_inv','Y')||' &el');
end if;
UTL_FILE.PUT_LINE(handle,'&sld &b Validation = &eb '||n2('&do_analysis','Y')||' &d Receivables = '||n2('&prt_ar','Y')||' &d Serial Num. Details = '||n2('&det_cnt','Y')||' &el');
UTL_FILE.PUT_LINE(handle,'&sld &sp &d WMS info = '||n2('&prt_wms','N')||' &d &sp &el');
UTL_FILE.PUT_LINE(handle,'&et &f &f');


-- Index for Major tables direct access
UTL_FILE.PUT_LINE(handle,'&std &sh INDEX FOR MAJOR TABLES DIRECT ACCESS &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#OE_SETS">OE_SETS (SET)</a> &d <a HREF="#WSH_TRIPS">WSH_TRIPS (TRP)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#OE_ORDER_HEADERS">OE_ORDER_HEADERS (ORD)</a> &d <a HREF="#WSH_TRIP_STOPS">WSH_TRIP_STOPS (STP)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#OE_ORDER_LINES">OE_ORDER_LINES (LIN)</a> &d <a HREF="#WSH_NEW_DELIVERIES">WSH_NEW_DELIVERIES (DEL)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_RESERVATIONS">MTL_RESERVATIONS (RES)</a> &d <a HREF="#WSH_DELIVERY_DETAILS">WSH_DELIVERY_DETAILS (DET)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_TRANSACTIONS_INTERFACE">MTL_TRANSACTIONS_INTERFACE (MTI)</a> &d');
UTL_FILE.PUT_LINE(handle,'<a HREF="#WMS_RULES">WMS_RULES</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_MATERIAL_TRANSACTIONS_TEMP">MTL_MATERIAL_TRANSACTIONS_TEMP (TMP) - UNPICKED LINES</a> &d');
UTL_FILE.PUT_LINE(handle,'<a HREF="#RA_INTERFACE_LINES">RA_INTERFACE_LINES (RAI)</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_MATERIAL_TRANSACTIONS">MTL_MATERIAL_TRANSACTIONS (TRN) - PICKED LINES</a> &d');
UTL_FILE.PUT_LINE(handle,'<a HREF="#RA_CUSTOMER_TRX">RA_CUSTOMER_TRX (RAH) - INVOICE HEADERS</a> &el');
UTL_FILE.PUT_LINE(handle,'&sld <a HREF="#MTL_TXN_REQUEST_LINES_V">MTL_TXN_REQUEST_LINES_V (MOV)</a> &d ');
UTL_FILE.PUT_LINE(handle,'<a HREF="#RA_CUSTOMER_TRX_LINES">RA_CUSTOMER_TRX_LINES (RAL)</a> &el');

UTL_FILE.PUT_LINE(handle,'&et &f &f');

-- Parameters, initial listings from screen

UTL_FILE.PUT_LINE(handle,'&std &sh HEADER_ID &dh ORDER_TYPE_NAME &dh CATEGORY &dh ORG_ID &dh ORGANIZATION_NAME &el');

Declare
cursor l_orders is
select
ORD.HEADER_ID Hea_I,
TYP.NAME OT_NAME,
ORD.ORDER_CATEGORY_CODE CAT_co,
ORD.ORG_ID ORG_I
from
OE_ORDER_HEADERS_ALL ORD,
OE_TRANSACTION_TYPES_TL TYP,
FND_LANGUAGES FLA
where
ORD.ORDER_NUMBER = :v_order_num
and TYP.LANGUAGE = FLA.LANGUAGE_CODE
and FLA.INSTALLED_FLAG = 'B'
and ORD.ORDER_TYPE_ID = TYP.TRANSACTION_TYPE_ID
and :v_error = 0;

or_name varchar2(100);

begin
for lo in l_orders
loop

-- Organization Name
select name
into or_name
from hr_operating_units
where organization_id = nvl(lo.ORG_I,-99);

-- Print line to Output file

utl_file.put_line(handle,'&sld'||n(lo.hea_i)||'&d'||n(lo.ot_name)||'&d');
utl_file.put_line(handle,n(lo.Cat_co)||'&d'||n(lo.org_i)||'&d'||n(or_name)||'&el');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f &b LINE_IDs ASSOCIATED WITH THIS ORDER NUMBER &f');

UTL_FILE.PUT_LINE(handle,'&std &sh LINE NUMBER &dh LINE_ID &dh ITEM &dh ORDER QTY &dh UOM &dh LINE STATUS &dh SHIP QTY &dh ');
UTL_FILE.PUT_LINE(handle,'FULFILL QTY &dh INVOICE QTY &dh CANCEL QTY &dh OPEN &dh SHIP &dh CANC &dh SI &dh SHIP FROM &dh ');
UTL_FILE.PUT_LINE(handle,'LINE TYPE &dh LINE CATEG &dh INVOICED &dh ARRIVAL SET_ID &dh SHIP SET_ID &dh LINE SET_ID &eh');

Declare
cursor l_lines_ord is
select
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE_NUM,
LIN.LINE_ID LINE_ID,
ITM.SEGMENT1 ITEM,
nvl(LIN.ORDERED_QUANTITY,0) ORD_QTY,
LIN.ORDER_QUANTITY_UOM Orduom,
substr(LIN.FLOW_STATUS_CODE,1,22) Line_st,
nvl(LIN.SHIPPED_QUANTITY,0) shpq,
nvl(LIN.FULFILLED_QUANTITY,0) fulq,
nvl(LIN.INVOICED_QUANTITY,0) invq,
nvl(LIN.CANCELLED_QUANTITY,0) canq,
nvl(LIN.OPEN_FLAG,'N') openf,
nvl(LIN.SHIPPABLE_FLAG,'N') shipf,
nvl(LIN.CANCELLED_FLAG,'N') canf,
nvl(LIN.SHIPPING_INTERFACED_FLAG,'N') SI,
LIN.SHIP_FROM_ORG_ID shipfrom,
LIN.LINE_TYPE_ID LINE_TYPE_ID,
LIN.LINE_CATEGORY_CODE lin_cat,
nvl(LIN.INVOICE_INTERFACE_STATUS_CODE,'N') INV_INT_STAT,
LIN.ARRIVAL_SET_ID ARRIV_SET_ID,
LIN.SHIP_SET_ID SHIP_SET_ID,
LIN.LINE_SET_ID LINE_SET_ID
from
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM
where
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and LIN.OPTION_NUMBER IS NULL
and LIN.ITEM_TYPE_CODE <> 'INCLUDED'
order by
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
NVL(LIN.SERVICE_REFERENCE_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for ll in l_lines_ord
loop
utl_file.put_line(handle,'&sld'||n(ll.LINE_NUM)||'&d'||n(ll.LINE_ID)||'&d'||n(ll.ITEM)||'&d');
utl_file.put_line(handle,n(ll.ORD_QTY)||'&d'||n(ll.Orduom)||'&d');
utl_file.put_line(handle,n(ll.Line_st)||'&d'||n(ll.shpq)||'&d');
utl_file.put_line(handle,n(ll.fulq)||'&d'||n(ll.invq)||'&d');
utl_file.put_line(handle,n(ll.canq)||'&d'||n(ll.openf)||'&d');
utl_file.put_line(handle,n(ll.shipf)||'&d'||n(ll.canf)||'&d');
utl_file.put_line(handle,n(ll.SI)||'&d'||n(ll.shipfrom)||'&d');
utl_file.put_line(handle,n(ll.LINE_TYPE_ID)||'&d'||n(ll.LIN_CAT)||'&d');
utl_file.put_line(handle,n(ll.INV_INT_STAT)||'&d'||n(ll.ARRIV_SET_ID)||'&d');
utl_file.put_line(handle,n(ll.SHIP_SET_ID)||'&d'||n(ll.LINE_SET_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


/* Display any header or line sets associated with this order */

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="OE_SETS"> OE_SETS (SET) </a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh SET_ID &dh SET_NAME &dh SET_TYPE &dh HEADER_ID &dh LINE_ID &dh ITEM_ID &dh UOM &dh LINE_TYPE_ID &dh SYS_REQD &dh ');
UTL_FILE.PUT_LINE(handle,'STATUS &dh SCH_SHP_DT &dh SCH_ARV_DT &dh SHIP_FROM &dh SHIP_TO_ID &dh SHIP_PRIORITY &dh CARRIER &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_METHOD &dh STA &dh STB &eh');

Declare
cursor l_oe_sets is
select ST1.SET_ID SET_ID,
ST1.SET_NAME SET_NAME,
ST1.SET_TYPE SET_TYPE,
ST1.HEADER_ID HEADER_ID,
LST.LINE_ID LINE_ID,
ST1.INVENTORY_ITEM_ID ITEM_ID,
ST1.ORDERED_QUANTITY_UOM UOM,
ST1.LINE_TYPE_ID LINE_TYPE_ID,
nvl(LST.SYSTEM_REQUIRED_FLAG,'N') SYS_REQD,
ST1.SET_STATUS STATUS,
to_char(ST1.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS') SCH_SHP_DT,
to_char(ST1.SCHEDULE_ARRIVAL_DATE,'DD-MON-RR_HH24:MI:SS') SCH_ARV_DT,
ST1.SHIP_FROM_ORG_ID SHIP_FROM,
ST1.SHIP_TO_ORG_ID SHIP_TO_ID,
ST1.SHIPMENT_PRIORITY_CODE SHIP_PRIORITY,
ST1.FREIGHT_CARRIER_CODE CARRIER,
ST1.SHIPPING_METHOD_CODE SHIP_METHOD,
ST1.SHIP_TOLERANCE_ABOVE STA,
ST1.SHIP_TOLERANCE_BELOW STB
from OE_SETS ST1,
OE_LINE_SETS LST
where ST1.SET_ID = LST.SET_ID(+)
and ST1.HEADER_ID = nvl('&header_id_selected',:v_header_id);

begin
for ll in l_oe_sets
loop
utl_file.put_line(handle,'&sld'||n(ll.SET_ID)||'&d'||n(ll.SET_NAME)||'&d');
utl_file.put_line(handle,n(ll.SET_TYPE)||'&d'||n(ll.HEADER_ID)||'&d');
utl_file.put_line(handle,n(ll.LINE_ID)||'&d'||n(ll.ITEM_ID)||'&d');
utl_file.put_line(handle,n(ll.UOM)||'&d'||n(ll.LINE_TYPE_ID)||'&d');
utl_file.put_line(handle,n(ll.SYS_REQD)||'&d'||n(ll.STATUS)||'&d');
utl_file.put_line(handle,n(ll.SCH_SHP_DT)||'&d'||n(ll.SCH_ARV_DT)||'&d');
utl_file.put_line(handle,n(ll.SHIP_FROM)||'&d'||n(ll.SHIP_TO_ID)||'&d');
utl_file.put_line(handle,n(ll.SHIP_PRIORITY)||'&d'||n(ll.CARRIER)||'&d');
utl_file.put_line(handle,n(ll.SHIP_METHOD)||'&d'||n(ll.STA)||'&d');
utl_file.put_line(handle,n(ll.STB)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et &f &f');

UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="OE_ORDER_HEADERS"> OE_ORDER_HEADERS (ORD) </a> <a HREF="#OOH">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh HEADER_ID &dh ORD_NUM &dh TYPE_ID &dh TYPE_NAME &dh FLOW_PROCESS &dh FLOW_CODE &dh BK &dh OP &dh CN &dh SP &dh ');
UTL_FILE.PUT_LINE(handle,'CUST_ID &dh CUST_NAME &dh SHIP_ID &dh SHIP_TO &dh BILL_ID &dh ORD_DATE &dh WH_ID &dh ORG &dh ');
UTL_FILE.PUT_LINE(handle,'CAT &dh PL_ID &dh PL_NAME &dh PO_NUMBER &dh STA &dh STB &dh OPERATING_UNIT &eh');

declare
cursor header1 is
select distinct ORD.HEADER_ID head_id,
ORD.ORDER_NUMBER ord_no,
ORD.ORDER_TYPE_ID ord_t,
TYP.NAME ord_tna,
ORD.SOLD_TO_ORG_ID cus_id,
substr(CUS.CUSTOMER_NAME,1,20) cus_na,
ORD.SHIP_TO_ORG_ID ship_t,
substr(SHP.NAME,1,12) ship_tn,
ORD.INVOICE_TO_ORG_ID bill_t,
to_char(ORD.ORDERED_DATE,'DD-MON-RR_HH24:MI:SS') ord_d,
nvl(ORD.BOOKED_FLAG,'N') book_g,
nvl(ORD.OPEN_FLAG,'N') open_f,
nvl(ORD.CANCELLED_FLAG,'N') can_f,
nvl(ORD.PARTIAL_SHIPMENTS_ALLOWED,'Y') spa,
ORD.SHIP_FROM_ORG_ID or_id,
PAR.ORGANIZATION_CODE or_co,
ORD.FLOW_STATUS_CODE fl_co,
ORD.ORDER_CATEGORY_CODE cat_co,
ORD.PRICE_LIST_ID pr_id,
PRC.NAME pr_na,
ORD.CUST_PO_NUMBER po_no,
ORD.SHIP_TOLERANCE_ABOVE shta,
ORD.SHIP_TOLERANCE_BELOW shtb,
HR.NAME oper_unit
from
OE_ORDER_HEADERS ORD,
MTL_PARAMETERS PAR,
OE_TRANSACTION_TYPES_V TYP,
AR_CUSTOMERS CUS,
OE_SHIP_TO_ORGS_V SHP,
QP_LIST_HEADERS_V PRC,
HR_OPERATING_UNITS HR
where
ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ORD.SHIP_FROM_ORG_ID = PAR.ORGANIZATION_ID(+)
and ORD.ORDER_TYPE_ID = TYP.TRANSACTION_TYPE_ID(+)
and ORD.SHIP_TO_ORG_ID = SHP.SITE_USE_ID(+)
and ORD.SOLD_TO_ORG_ID = CUS.CUSTOMER_ID(+)
and ORD.PRICE_LIST_ID = PRC.LIST_HEADER_ID(+)
and ORD.ORG_ID = HR.ORGANIZATION_ID(+);

r_ord_t varchar2(100);
r_open_l number;
r_canc_l number;
r_canopen_l number;

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

begin
dbms_output.enable(1000000);
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..60
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;

msg(10).descrip := ' 10. Order_Header has associated lines with OPEN and CANCELLED flags set to Y.';
msg(15).descrip := ' 15. Order_Header status is BOOKED but "Book" activity has not been completed.';

msg(20).descrip := ' 20. Order_Header status is CLOSED but "Close" activity has not been completed.';
msg(21).descrip := ' 21. Order_Header status is CLOSED but exist open lines associated to this header.';
msg(22).descrip := ' 22. All associated lines has been closed but Order_Header is not ready to CLOSE.';

msg(50).descrip := ' 50. No WorkFlow Process associated to this line.';
msg(51).descrip := ' 51. Incorrect WorkFlow Process associated to this Order Header.';
msg(52).descrip := ' 52. Incorrect WorkFlow Activity associated to this Order Header.';
msg(53).descrip := ' 53. Incorrect WorkFlow Activity Result for this Order Header.';
msg(54).descrip := ' 54. Incorrect WorkFlow Activity Status for this Order Header.';
end if;

for h in header1
loop
:r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
--
-- Gather general information
--
begin
-- get Order_Header Flow name
select WFA1.DISPLAY_NAME
into r_ord_t
FROM WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1
where WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = h.head_id
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID(+)
and WFP.PROCESS_NAME = 'ROOT'
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select nvl(max(VERSION),-1)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME);

-- Select current activity
select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
LKP.MEANING
into :r_pro_na, :r_act_na, :r_result, :r_act_s
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = h.head_id
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and Execution_time = (Select Max(execution_time) from WF_ITEM_ACTIVITY_STATUSES
where ITEM_TYPE = 'OEOH'
and item_key = h.head_id);
exception
when no_data_found then
:r_flag := :r_flag || '50 ';
msg(50).flag := '1';
end;

-- Check if order has open lines and count also cancelled lines
begin
select sum(decode(open_flag,'Y',1,0)),sum(decode(cancelled_flag,'Y',1,0)),sum(decode(cancelled_flag,'Y',decode(open_flag,'Y',1,0),0))
into r_open_l, r_canc_l, r_canopen_l
from oe_order_lines_all
where header_id = h.head_id
group by header_id;
exception
when no_data_found then
r_open_l := 0;
r_canc_l := 0;
r_canopen_l := 0;
end;
---
-- Basic Verifications
--

-- Open lines have cancelled flag showing as open
if r_canopen_l > 0 then
:r_flag := :r_flag || '10 ';
msg(10).flag := '1';
end if;

-- All lines closed but Order Header status is not CLOSED and WF is NOT waiting to close.
if r_open_l = 0 -- no open lines
and h.fl_co <> 'CLOSED' then
if :r_pro_na = 'Close - Order' -- check current status
and :r_act_s = 'Deferred' then
null; -- OK just waiting for month end
else
:r_flag := :r_flag || '22 ';
msg(22).flag := '1';
end if;
end if;

---
-- Verifications for Order Header on ENTERED status
---
If h.fl_co = 'ENTERED' then
-- verify current WF status
if :r_pro_na <> 'Book - Order, Manual' then
:r_flag := :r_flag || '51 ';
msg(51).flag := '1';
elsif :r_act_na <> 'Book - Eligible' then
:r_flag := :r_flag || '52 ';
msg(52).flag := '1';
elsif :r_result is not null then
:r_flag := :r_flag || '53 ';
msg(53).flag := '1';
elsif :r_act_s <> 'Notified' then
:r_flag := :r_flag || '54 ';
msg(54).flag := '1';
end if;
end if; -- ENTERED

---
-- Verifications for Order Header on BOOKED status
---
If h.fl_co = 'BOOKED' then
-- Check is Book activity has been completed
begin
select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
LKP.MEANING
into :r_pro_na, :r_act_na, :r_result, :r_act_s
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = h.head_id
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFA1.DISPLAY_NAME = 'Book';
exception
when no_data_found then
:r_flag := :r_flag || '15 ';
msg(15).flag := '1';
end;

if :r_act_na = 'Book' then
if :r_result = 'Complete'
and :r_act_s = 'Complete' then
null; -- status is OK
else
:r_flag := :r_flag || '15 ';
msg(15).flag := '1';
end if;
end if;
end if; -- BOOKED

---
-- Verifications for Order Header on CLOSED status
---
If h.fl_co = 'CLOSED' then
-- verify current WF status
if :r_pro_na <> r_ord_t then
:r_flag := :r_flag || '51 ';
msg(51).flag := '1';
elsif :r_act_na <> 'End' then
:r_flag := :r_flag || '52 ';
msg(52).flag := '1';
elsif :r_result <> 'Null' then
:r_flag := :r_flag || '53 ';
msg(53).flag := '1';
elsif :r_act_s <> 'Complete' then
:r_flag := :r_flag || '54 ';
msg(54).flag := '1';
end if;

-- Get status for CLOSE activity
begin
select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
LKP.MEANING
into :r_pro_na, :r_act_na, :r_result, :r_act_s
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = h.head_id
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFA1.DISPLAY_NAME = 'Close';
exception
when no_data_found then
:r_flag := :r_flag || '20 ';
msg(20).flag := '1';
end;
-- verify CLOSE activity completed
if :r_act_na = 'Close' then
if :r_result = 'Complete'
and :r_act_s = 'Complete' then
null; -- status is OK
else
:r_flag := :r_flag || '20 ';
msg(20).flag := '1';
end if;
end if;

-- check for open lines
if r_open_l > 0 then
:r_flag := :r_flag || '21 ';
msg(21).flag := '1';
end if;
end if; -- CLOSED

end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#OHERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,n(h.head_id)||'&d'||n(h.ord_no)||'&d');
utl_file.put_line(handle,n(h.ord_t)||'&d'||n(h.ord_tna)||'&d');
utl_file.put_line(handle,n(r_ord_t)||'&d'||n(h.fl_co)||'&d');
utl_file.put_line(handle,n(h.book_g)||'&d'||n(h.open_f)||'&d');
utl_file.put_line(handle,n(h.can_f)||'&d'||n(h.spa)||'&d');
utl_file.put_line(handle,n(h.cus_id)||'&d'||n(h.cus_na)||'&d');
utl_file.put_line(handle,n(h.ship_t)||'&d'||n(h.ship_tn)||'&d');
utl_file.put_line(handle,n(h.bill_t)||'&d'||n(h.ord_d)||'&d');
utl_file.put_line(handle,n(h.or_id)||'&d'||n(h.or_co)||'&d');
utl_file.put_line(handle,n(h.cat_co)||'&d'||n(h.pr_id)||'&d');
utl_file.put_line(handle,n(h.pr_na)||'&d'||n(h.po_no)||'&d');
utl_file.put_line(handle,n(h.shta)||'&d'||n(h.shtb)||'&d');
utl_file.put_line(handle,n(h.oper_unit)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="OHERR">Warning List:</a> &eb &f');
for i in 1..60
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;
end;


UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.FCLOSE(handle);
end;
/


DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
If :v_head_only = 'N' then

-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

if UPPER(nvl('&prt_wf','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER STATUS &f');

UTL_FILE.PUT_LINE(handle,'&std');
UTL_FILE.PUT_LINE(handle,'&sh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh INT_PROCESS_NAME &dh INT_ACTIVITY_NAME &dh INT_RESULT_CODE &dh BEGIN_DATE &dh END_DATE &dh ERROR_NAME &eh');


Declare
cursor l_wf_order is
select WFA.DISPLAY_NAME Process,
WFA1.DISPLAY_NAME Activity,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) Result,
LKP.MEANING Act_status,
WFS.NOTIFICATION_ID Notif,
WFP.PROCESS_NAME I_process,
WFP.ACTIVITY_NAME I_activity,
WFS.ACTIVITY_RESULT_CODE I_Act_Res_code,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') Begin_d,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') End_d,
WFS.ERROR_NAME error_name
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = nvl('&header_id_selected',to_char(:v_header_id))
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
order by WFS.ITEM_KEY,
WFS.BEGIN_DATE,
EXECUTION_TIME;

begin
for ll in l_wf_order
loop
utl_file.put_line(handle,'&sld'||n(ll.Process)||'&d'||n(ll.Activity)||'&d');
utl_file.put_line(handle,n(ll.Result)||'&d'||n(ll.Act_status)||'&d');
utl_file.put_line(handle,n(ll.Notif)||'&d'||n(ll.I_process)||'&d');
utl_file.put_line(handle,n(ll.I_activity)||'&d'||n(ll.I_Act_Res_code)||'&d');
utl_file.put_line(handle,n(ll.Begin_d)||'&d');
utl_file.put_line(handle,n(ll.End_d)||'&d'||n(ll.Error_name)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER NOTIFICATION INFORMATION (WFN)&f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');


Declare
cursor l_wf_ord_noti is
select WFN.NOTIFICATION_ID NOTIF_ID,
WFN.TO_USER TO_USER,
WFN.ORIGINAL_RECIPIENT ORIG_RECIP,
WFN.RECIPIENT_ROLE RECIP_ROLE,
WFN.MAIL_STATUS MAIL_STAT,
WFN.MESSAGE_NAME MESSAGE_NAME,
WFN.STATUS STATUS,
WFN.SUBJECT SUBJECT
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_NOTIFICATIONS WFN
where WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = nvl('&header_id_selected',to_char(:v_header_id))
and WFS.NOTIFICATION_ID is not null
and WFN.NOTIFICATION_ID = WFS.NOTIFICATION_ID
order by WFS.ITEM_KEY,
WFS.BEGIN_DATE,
EXECUTION_TIME;

begin
for ll in l_wf_ord_noti
loop
utl_file.put_line(handle,'&sld'||n(ll.NOTIF_ID)||'&d'||n(ll.TO_USER)||'&d');
utl_file.put_line(handle,n(ll.ORIG_RECIP)||'&d'||n(ll.RECIP_ROLE)||'&d');
utl_file.put_line(handle,n(ll.MAIL_STAT)||'&d'||n(ll.MESSAGE_NAME)||'&d');
utl_file.put_line(handle,n(ll.STATUS)||'&d'||n(ll.SUBJECT)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


/*
UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER SKIP INFORMATION (WFSKIP)&f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');

Declare
r_exist number;

begin
select count(*)
into r_exist
from all_tables
where table_name = 'ONT_WF_SKIP_LOG';
if r_exist = 0 then
utl_file.put_line(handle,'&et Table ONT_WF_SKIP_LOG is not present on this instance: &f');
end if;
end;

Declare
cursor l_wf_ord_skip is
select WFS.HEADER_ID HEADER_ID,
WFA.DISPLAY_NAME DISPLAY_NAME,
to_char(WFS.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CRE_DATE,
WFS.USER_ID USER_ID,
WFS.RESPONSIBILITY_ID RESPONSIBILITY_ID,
WFS.APPLICATION_ID APPLICATION_ID
from ONT_WF_SKIP_LOG WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA
where WFS.LINE_ID is null
and WFS.HEADER_ID = nvl('&header_id_selected',to_char(:v_header_id))
and WFS.ACTIVITY_ID = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
order by WFS.HEADER_ID,
WFS.CREATION_DATE;

begin
for ll in l_wf_ord_skip
loop
utl_file.put_line(handle,'&sld'||n(ll.HEADER_ID)||'&d'||n(ll.DISPLAY_NAME)||'&d');
utl_file.put_line(handle,n(ll.CRE_DATE)||'&d'||n(ll.USER_ID)||'&d');
utl_file.put_line(handle,n(ll.RESPONSIBILITY_ID)||'&d'||n(ll.APPLICATION_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et'); */


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ORDER LEVEL ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PROCESS_NAME &dh ERROR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');


Declare
cursor l_wf_ord_err is
select WFA.DISPLAY_NAME Process,
WFA1.DISPLAY_NAME Activity,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) result,
LKP.MEANING status,
WFS.ERROR_NAME err_name,
WFS.ERROR_MESSAGE err_mess,
WFS.ERROR_STACK err_stack
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'OEOH'
and WFS.item_key = nvl('&header_id_selected',to_char(:v_header_id))
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFS.ACTIVITY_STATUS = 'ERROR'
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for ll in l_wf_ord_err
loop
utl_file.put_line(handle,'&sld'||n(ll.Process)||'&d'||n(ll.Activity)||'&d');
utl_file.put_line(handle,n(ll.result)||'&d'||n(ll.status)||'&d');
utl_file.put_line(handle,n(ll.err_name)||'&d'||n(ll.err_mess)||'&d');
utl_file.put_line(handle,n(ll.err_stack)||'&el');
end loop;
end;


UTL_FILE.PUT_LINE(handle,'&et');


-- break on ERR_TYPE_KEY skip 2;

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ACTIVITY STATUS FOR ORDER ERROR PROCESS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ERR_TYPE_KEY &dh ERR_PROCESS_NAME &dh ERR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ASGND_USER &dh BEGIN_DATE &dh END_DATE &eh');


Declare
cursor l_wf_ord_erp is
select WFS.ITEM_TYPE || '-' || WFS.ITEM_KEY ERR_TYPE_KEY,
WFA.DISPLAY_NAME ERR_PROCESS_NAME,
WFA1.DISPLAY_NAME ERR_ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.NOTIFICATION_ID NOTIF_ID,
WFS.ASSIGNED_USER ASGND_USER,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP,
WF_ITEMS WFI
where
WFS.ITEM_TYPE = WFI.ITEM_TYPE
and WFS.item_key = WFI.ITEM_KEY
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFI.PARENT_ITEM_TYPE = 'OEOH'
and WFI.PARENT_ITEM_KEY = nvl('&header_id_selected',to_char(:v_header_id))
and WFI.ITEM_TYPE in (select WFAE.ERROR_ITEM_TYPE
from WF_ITEM_ACTIVITY_STATUSES WFSE,
WF_PROCESS_ACTIVITIES WFPE,
WF_ACTIVITIES_VL WFAE,
WF_ACTIVITIES_VL WFA1E
where
WFSE.ITEM_TYPE = 'OEOH'
and WFSE.ITEM_KEY = nvl('&header_id_selected',to_char(:v_header_id))
and WFSE.PROCESS_ACTIVITY = WFPE.INSTANCE_ID
and WFPE.PROCESS_ITEM_TYPE = WFAE.ITEM_TYPE
and WFPE.PROCESS_NAME = WFAE.NAME
and WFPE.PROCESS_VERSION = WFAE.VERSION
and WFPE.ACTIVITY_ITEM_TYPE = WFA1E.ITEM_TYPE
and WFPE.ACTIVITY_NAME = WFA1E.NAME
and WFA1E.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2E
where WF2E.ITEM_TYPE = WFPE.ACTIVITY_ITEM_TYPE
and WF2E.NAME = WFPE.ACTIVITY_NAME)
and WFSE.ACTIVITY_STATUS = 'ERROR')
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for ll in l_wf_ord_erp
loop
utl_file.put_line(handle,'&sld'||n(ll.ERR_TYPE_KEY)||'&d'||n(ll.ERR_PROCESS_NAME)||'&d');
utl_file.put_line(handle,n(ll.ERR_ACTIVITY_NAME)||'&d'||n(ll.RESULT)||'&d');
utl_file.put_line(handle,n(ll.ACT_STATUS)||'&d'||n(ll.NOTIF_ID)||'&d');
utl_file.put_line(handle,n(ll.ASGND_USER)||'&d'||n(ll.BEGIN_DATE)||'&d');
utl_file.put_line(handle,n(ll.END_DATE)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_wf

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/

DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
If :v_head_only = 'N' then

-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

UTL_FILE.PUT_LINE(handle,'&f &f GENERIC HOLDS (ORDER AND/OR LINES) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh HOLD_ID &dh HOLD_NAME &dh HOLD_TYPE &dh WF_ITEM &dh WF_ACTIVITY &dh ORD_HOLD_ID &dh HLD_SRC_ID &dh HLD_REL_ID &dh ');
UTL_FILE.PUT_LINE(handle,'HEADER_ID &dh H_REL &dh S_REL &dh RELEASE_REASON &dh ENTITY &dh ENTITY_ID &dh ENTITY2 &dh ENTITY_ID2 &dh HOLD_UNTIL &eh');

Declare
cursor l_ord_hld is
SELECT
HDF.HOLD_ID ,
HDF.NAME ,
HDF.TYPE_CODE ,
HDF.ITEM_TYPE ,
HDF.ACTIVITY_NAME ,
HLD.ORDER_HOLD_ID ,
HLD.HOLD_SOURCE_ID ,
HLD.HOLD_RELEASE_ID ,
HLD.HEADER_ID ,
HLD.RELEASED_FLAG Rel_Flag1,
HSR.RELEASED_FLAG Rel_Flag2,
HRL.RELEASE_REASON_CODE Rel_code,
decode(HSR.HOLD_ENTITY_CODE,
'B','Bill To',
'C','Customer',
'I','Item',
'O','Order',
'S','Ship To',
'W','Warehouse',
HSR.HOLD_ENTITY_CODE) entity,
HSR.HOLD_ENTITY_ID entity_id,
decode(HSR.HOLD_ENTITY_CODE2,
'B','Bill To',
'C','Customer',
'I','Item',
'O','Order',
'S','Ship To',
'W','Warehouse',
HSR.HOLD_ENTITY_CODE2) entity2,
HSR.HOLD_ENTITY_ID2 entity_id2,
to_char(HSR.HOLD_UNTIL_DATE,'DD-MON-RR_HH24:MI:SS') Hold_until
from OE_ORDER_HOLDS_ALL HLD,
OE_HOLD_SOURCES_ALL HSR,
OE_HOLD_DEFINITIONS HDF,
OE_HOLD_RELEASES HRL
where HLD.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and HLD.HOLD_SOURCE_ID = HSR.HOLD_SOURCE_ID
and HSR.HOLD_ID = HDF.HOLD_ID
and HLD.HOLD_RELEASE_ID = HRL.HOLD_RELEASE_ID(+)
and HLD.LINE_ID IS NULL;

begin
for ll in l_ord_hld
loop
utl_file.put_line(handle,'&sld'||n(ll.HOLD_ID)||'&d'||n(ll.NAME)||'&d');
utl_file.put_line(handle,n(ll.TYPE_CODE)||'&d'||n(ll.ITEM_TYPE)||'&d');
utl_file.put_line(handle,n(ll.ACTIVITY_NAME)||'&d'||n(ll.ORDER_HOLD_ID)||'&d');
utl_file.put_line(handle,n(ll.HOLD_SOURCE_ID)||'&d'||n(ll.HOLD_RELEASE_ID)||'&d');
utl_file.put_line(handle,n(ll.HEADER_ID)||'&d'||n(ll.Rel_Flag1)||'&d');
utl_file.put_line(handle,n(ll.Rel_Flag2)||'&d'||n(ll.Rel_code)||'&d');
utl_file.put_line(handle,n(ll.entity)||'&d'||n(ll.entity_id)||'&d');
utl_file.put_line(handle,n(ll.entity2)||'&d'||n(ll.entity_id2)||'&d');
utl_file.put_line(handle,n(ll.Hold_until)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- This section is commented out because it runs slowly without an index
--<do not run> CREATE INDEX OE_PROCESSING_MSGS_777
--<do not run> ON ONT.OE_PROCESSING_MSGS
--<do not run> (header_id, line_id);

-- column ACTIVITY format a15;
-- column msg_Source format a14;
-- column DESCRIPTION format a30;

-- PROMPT
UTL_FILE.PUT_LINE(handle,'&f &f HEADER PROCESSING MESSAGES &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh HEADER_ID &dh MSG_SOURCE &dh ACTIVITY &dh REQUEST_ID &dh DESCRIPTION &dh MESSAGE_TEXT &eh');

declare
cursor h_proc is
select distinct
MSG.header_id HEADER_ID,
decode(MSG.MESSAGE_SOURCE_CODE,
'U','U=On-Line(UI)',
'C','C=Conc Process',
'W','W=Workflow',
MSG.MESSAGE_SOURCE_CODE) MSG_SOURCE,
MSG.PROCESS_ACTIVITY PROCESS_ACTIVITY,
MSG.request_id REQUEST_ID,
MST.message_text MESSAGE_TEXT
from oe_processing_msgs_vl MSG,
oe_processing_msgs_tl MST,
fnd_languages FLA
where MSG.header_id = nvl('&header_id_selected',:v_header_id)
and msg.transaction_id = mst.transaction_id
and MST.LANGUAGE = FLA.LANGUAGE_CODE
and FLA.INSTALLED_FLAG = 'B'
and decode(MSG.LINE_ID,9.99E+125,NULL,MSG.LINE_ID) is NULL;

r_activity varchar2(100);
r_descrip varchar2(100);

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..10
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;

msg(1).descrip := ' 1. Cannot find Activity name associated to HEADER PROCESSING MESSAGES.';
msg(2).descrip := ' 2. Cannot find Request Description.';
end if;

for hp in h_proc
loop
:r_flag := '';
:r_error := 0;
r_activity := '';
r_descrip := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
-- Get Activity name
begin
select WFA1.DISPLAY_NAME
into r_activity
from WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA1
where WFP.INSTANCE_ID = hp.PROCESS_ACTIVITY
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME);
exception
when no_data_found then
:r_flag := :r_flag || '1 ';
msg(1).flag := '1';
end;

-- Get Request description
begin
select DESCRIPTION
into r_descrip
FROM FND_CONCURRENT_REQUESTS FCR
where FCR.REQUEST_ID = hp.REQUEST_ID;
exception
when no_data_found then
:r_flag := :r_flag || '2 ';
msg(2).flag := '1';
end;

end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#HPMERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,n(hp.HEADER_ID)||'&d'||n(hp.MSG_SOURCE)||'&d');
utl_file.put_line(handle,n(r_activity)||'&d'||n(hp.REQUEST_ID)||'&d');
utl_file.put_line(handle,n(r_descrip)||'&d'||n(hp.MESSAGE_TEXT)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="HPMERR">Warning List:</a> &eb &f');
for i in 1..10
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/

-- <do not run> DROP INDEX OE_PROCESSING_MSGS_777

DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
If :v_head_only = 'N' then

-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed


if UPPER(nvl('&prt_price','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f HEADER PRICE ADJUSTMENTS (ADJ) <a HREF="#ADJC">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh APPLIED &dh PRC_ADJ_ID &dh LST_HD_ID &dh LST_LN_ID &dh LIST_LN_NO &dh MOD_LVL &dh ');
UTL_FILE.PUT_LINE(handle,'LIST_TYPE_CODE &dh CHG_TY_CD &dh ARITH_OP &dh OP_PER_QTY &dh ADJ_AMT_PQ &dh OPERAND &dh ');
UTL_FILE.PUT_LINE(handle,'ADJ_AMT &dh CD &dh AF &dh PI &dh AC &dh IF &dh EF &dh UA &dh UF &dh AP &dh LK &dh ');
UTL_FILE.PUT_LINE(handle,'PERC &dh COST_ID &dh TAX_CODE &dh PP &eh');

declare
cursor h_prc_adj is
select
ADJ.PRICE_ADJUSTMENT_ID PRC_ADJ_ID,
nvl(ADJ.APPLIED_FLAG,'N') APPLIED_FLAG,
ADJ.LIST_HEADER_ID LST_HD_ID,
ADJ.LIST_LINE_ID LST_LN_ID,
ADJ.LIST_LINE_NO LIST_LN_NO,
ADJ.MODIFIER_LEVEL_CODE MOD_LVL,
ADJ.LIST_LINE_TYPE_CODE LIST_TYPE_CODE,
ADJ.CHARGE_TYPE_CODE CHG_TY_CD,
ADJ.ARITHMETIC_OPERATOR ARITH_OP,
ADJ.OPERAND_PER_PQTY OP_PER_QTY,
ADJ.ADJUSTED_AMOUNT_PER_PQTY ADJ_AMT_PQ,
ADJ.OPERAND OPERAND,
ADJ.ADJUSTED_AMOUNT ADJ_AMT,
ADJ.CREDIT_OR_CHARGE_FLAG CD,
ADJ.AUTOMATIC_FLAG AF,
ADJ.PRINT_ON_INVOICE_FLAG PI,
ADJ.ACCRUAL_FLAG AC,
ADJ.INVOICED_FLAG INF,
ADJ.ESTIMATED_FLAG EF,
ADJ.UPDATE_ALLOWED UA,
ADJ.UPDATED_FLAG UF,
ADJ.APPLIED_FLAG AP,
ADJ.LOCK_CONTROL LK,
ADJ.PERCENT PERC,
ADJ.COST_ID COST_ID,
ADJ.TAX_CODE TAX_CODE,
ADJ.PRICING_PHASE_ID PP
from OE_PRICE_ADJUSTMENTS ADJ
where ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ADJ.LINE_ID IS NULL
-- and ADJ.APPLIED_FLAG = 'Y'
order by ADJ.APPLIED_FLAG,LIST_TYPE_CODE;

begin
for hh in h_prc_adj
loop
utl_file.put_line(handle,'&sld'||n(hh.APPLIED_FLAG)||'&d'||n(hh.PRC_ADJ_ID)||'&d'||n(hh.LST_HD_ID)||'&d');
utl_file.put_line(handle,n(hh.LST_LN_ID)||'&d'||n(hh.LIST_LN_NO)||'&d'||n(hh.MOD_LVL)||'&d');
utl_file.put_line(handle,n(hh.LIST_TYPE_CODE)||'&d'||n(hh.CHG_TY_CD)||'&d'||n(hh.ARITH_OP)||'&d');
utl_file.put_line(handle,n(hh.OP_PER_QTY)||'&d'||n(hh.ADJ_AMT_PQ)||'&d'||n(hh.OPERAND)||'&d');
utl_file.put_line(handle,n(hh.ADJ_AMT)||'&d'||n(hh.CD)||'&d'||n(hh.AF)||'&d');
utl_file.put_line(handle,n(hh.PI)||'&d'||n(hh.AC)||'&d'||n(hh.INF)||'&d');
utl_file.put_line(handle,n(hh.EF)||'&d'||n(hh.UA)||'&d'||n(hh.UF)||'&d');
utl_file.put_line(handle,n(hh.AP)||'&d'||n(hh.LK)||'&d'||n(hh.PERC)||'&d');
utl_file.put_line(handle,n(hh.COST_ID)||'&d'||n(hh.TAX_CODE)||'&d'||n(hh.PP)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_price


UTL_FILE.PUT_LINE(handle,'&f &f MTL_SALES_ORDERS (MSO) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DS_HEADER_ID &dh HEADER_ID &dh ORDER_NUMBER &dh ORDER_TYPE_NAME &dh CONSTANTOE &eh');

declare
cursor mtl_sal is
select
MSO.SALES_ORDER_ID ,
ORD.HEADER_ID ,
ORD.ORDER_NUMBER ,
TYP.NAME ,
MSO.SEGMENT3
from
MTL_SALES_ORDERS MSO,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_VL TYP
where
ORD.ORDER_TYPE_ID = TYP.TRANSACTION_TYPE_ID
and TO_CHAR(ORD.ORDER_NUMBER) = MSO.SEGMENT1
and TYP.NAME(+) = MSO.SEGMENT2
-- klr
and MSO.SEGMENT1 = '&order_number_selected'
and ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id)
order by
ORD.HEADER_ID;

begin
for ms in mtl_sal
loop
utl_file.put_line(handle,'&sld'||n(ms.SALES_ORDER_ID)||'&d'||n(ms.HEADER_ID)||'&d');
utl_file.put_line(handle,n(ms.ORDER_NUMBER)||'&d'||n(ms.NAME)||'&d');
utl_file.put_line(handle,n(ms.SEGMENT3)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

begin
select distinct(MSO.SALES_ORDER_ID)
into :sales_ord_id
from MTL_SALES_ORDERS MSO,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_TL TYP,
FND_LANGUAGES FLA
where ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ORD.ORDER_TYPE_ID = TYP.TRANSACTION_TYPE_ID
and TYP.LANGUAGE = FLA.LANGUAGE_CODE
and FLA.INSTALLED_FLAG = 'B'
-- klr
and MSO.SEGMENT1 = '&order_number_selected'
and TYP.NAME = MSO.SEGMENT2;
end;

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/


DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);
c_lines number;

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
c_lines := 0;
If :v_head_only = 'N' then

-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="OE_ORDER_LINES">OE_ORDER_LINES (LIN)</a> <a HREF="#OOL">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh LINE &dh LINE_ID &dh DELIVERY DETAIL &dh ITEM ID &dh ITEM &dh ');
UTL_FILE.PUT_LINE(handle,'FLOW PROCESS &dh FLOW CODE &dh OP &dh BK &dh SH &dh CN &dh VD &dh SI &dh FF &dh ATO &dh ');
UTL_FILE.PUT_LINE(handle,'SMC &dh ORDER QTY &dh UOM &dh SELL PRICE &dh LIST PRICE &dh ');
UTL_FILE.PUT_LINE(handle,'CALC PRICE &dh RESERV QTY &dh SHIPNG QTY &dh SHIPPD QTY &dh FULFIL QTY &dh CANCEL QTY &dh ');
UTL_FILE.PUT_LINE(handle,'INVOIC QTY &dh SCHD ST_CD &dh WH_ID &dh ORG &dh CREATE DATE &dh ');
UTL_FILE.PUT_LINE(handle,'REQUEST DATE &dh SCHED DATE &dh ACTUAL SHIP_DATE &dh LINE TYPE &dh LINE CATEG &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM TYPE &dh ORDERED ITEM_ID &dh ORDERED ITEM &dh SOURCE TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'PRICE LIST_ID &dh DEMAND CLASS &dh CFG &dh WH_ID &dh PRT LN_ID &dh ATO LN_ID &dh LINK LN_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SPLIT BY &dh SPLIT LN_ID &dh CONFIG HD_ID &dh INVOIC INT_STAT &dh STA &dh STB &dh SHIP SET_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP SET_TY &dh LINE SET_ID &dh LINE SET_TY &dh ARRIV SET_ID &dh ARRIV SET_TY &dh OTHER SETS &dh ');
UTL_FILE.PUT_LINE(handle,'DISCRETE ORDER_QTY &dh DISCR UOM &dh DISCRETE SHPNG_QTY &dh DISCRETE SHPNG_UOM &dh ');
UTL_FILE.PUT_LINE(handle,'DISCRETE SHIPPD_QTY &dh DISCRETE FULFLL_QTY &dh DISCRETE CANCEL_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'LAST UPD_DATE &dh');
UTL_FILE.PUT_LINE(handle,'TRACK QTY_IND &dh PRIMARY UOM_COD &dh DUAL_UOM CONTROL &dh SECONDARY DEFAULT_IND &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY UOM_COD &dh CHILD LOT_FLAG &dh PARENT_CHILD GEN_FLAG &dh LOT DIVIS_FLAG &dh ');
UTL_FILE.PUT_LINE(handle,'GRADE CNTRL_FLAG &dh ONT_PRICING QTY_SOURCE &dh DUAL_UOM DEV_HGH &dh DUAL_UOM DEV_LOW &dh ');
UTL_FILE.PUT_LINE(handle,'LOT CONTROL &dh LOCATION CTRL_CODE &dh STATUS CONTROL &dh SRC_DOC LINE_ID &eh ');

declare
cursor line1 is
select
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) line_n,
LIN.LINE_ID Line_i,
LIN.INVENTORY_ITEM_ID Item_i,
lpad(' ',length(LIN.SORT_ORDER)/4,rpad('.',80,'....!'))||ITM.SEGMENT1 Item_na,
substr(LIN.FLOW_STATUS_CODE,1,22) Line_st,
nvl(LIN.ORDERED_QUANTITY,0) Ordq,
LIN.ORDER_QUANTITY_UOM Orduom,
nvl(LIN.ORDERED_QUANTITY2,0) Ordq2,
LIN.ORDERED_QUANTITY_UOM2 Orduom2,
LIN.UNIT_SELLING_PRICE sell,
LIN.UNIT_LIST_PRICE lisl,
nvl(LIN.SHIPPED_QUANTITY,0) shpq,
nvl(LIN.SHIPPED_QUANTITY2,0) shpq2,
nvl(LIN.SHIPPING_QUANTITY,0) SHN_Q,
nvl(LIN.SHIPPING_QUANTITY2,0) SHN_Q2,
nvl(LIN.SHIPPING_QUANTITY_UOM2,0) SHN_QUOM2,
nvl(FULFILLED_QUANTITY,0) fulq,
nvl(FULFILLED_QUANTITY2,0) fulq2,
nvl(LIN.CANCELLED_QUANTITY,0) canq,
nvl(LIN.CANCELLED_QUANTITY2,0) canq2,
nvl(LIN.INVOICED_QUANTITY,0) invq,
substr(LIN.SCHEDULE_STATUS_CODE,1,5) schc,
nvl(LIN.OPEN_FLAG,'N') openf,
nvl(LIN.BOOKED_FLAG,'N') bookf,
nvl(LIN.SHIPPABLE_FLAG,'N') shipf,
nvl(LIN.CANCELLED_FLAG,'N') canf,
nvl(LIN.VISIBLE_DEMAND_FLAG,'N') vdem,
nvl(LIN.FULFILLED_FLAG, 'N') fulf,
nvl(LIN.SHIPPING_INTERFACED_FLAG,'N') SI,
decode(nvl(LIN.ATO_LINE_ID,0),0,'N','Y') ato_i,
nvl(LIN.SHIP_MODEL_COMPLETE_FLAG,'N') smcf,
LIN.SHIP_FROM_ORG_ID shipfrom,
-- PAR.ORGANIZATION_CODE org_i,
to_char(LIN.REQUEST_DATE,'DD-MON-RR_HH24:MI:SS') reqd,
to_char(LIN.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS') schd,
-- TYP.NAME lin_ty,
LIN.LINE_TYPE_ID LINE_TYPE_ID,
LIN.LINE_CATEGORY_CODE lin_cat,
LIN.ITEM_TYPE_CODE itm_tc,
LIN.ORDERED_ITEM_ID ord_it,
LIN.ORDERED_ITEM ord_it_name,
LIN.SOURCE_TYPE_CODE Src_tc,
LIN.PRICE_LIST_ID prlst,
LIN.DEMAND_CLASS_CODE demc,
nvl(LIN.OPTION_FLAG,'N') CFG,
LIN.SHIP_FROM_ORG_ID WH_ID,
LIN.TOP_MODEL_LINE_ID PRT_LN_ID,
LIN.ATO_LINE_ID ATO_LN_ID,
LIN.LINK_TO_LINE_ID LNK_LN_ID,
LIN.SPLIT_BY SPL_BY,
LIN.SPLIT_FROM_LINE_ID SPL_LN_ID,
LIN.CONFIG_HEADER_ID CFG_HD_ID,
nvl(LIN.INVOICE_INTERFACE_STATUS_CODE,'N') INVC_INT_STAT,
LIN.SHIP_TOLERANCE_ABOVE STA,
LIN.SHIP_TOLERANCE_BELOW STB,
LIN.SHIP_SET_ID SH_SET_ID,
ST2.SET_TYPE SH_SET_TY,
LIN.LINE_SET_ID LN_SET_ID,
ST3.SET_TYPE LN_SET_TY,
LIN.ARRIVAL_SET_ID AR_SET_ID,
ST1.SET_TYPE AR_SET_TY,
LIN.CALCULATE_PRICE_FLAG CAL_PR,
to_char(LIN.ACTUAL_SHIPMENT_DATE,'DD-MON-RR_HH24:MI:SS') act_shp,
to_char(LIN.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') cre_date,
LIN.ordered_quantity2 ord_qty2,
LIN.ordered_quantity_uom2 ord_uom2,
to_char(LIN.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') upd_date,
ITM.TRACKING_QUANTITY_IND trck_qty_ind,
ITM.PRIMARY_UOM_CODE PRM_UOM,
ITM.DUAL_UOM_CONTROL DUAL_UOM,
ITM.SECONDARY_DEFAULT_IND SEC_DEF_IND,
ITM.SECONDARY_UOM_CODE SEC_UOM,
ITM.CHILD_LOT_FLAG CHLD_LOT,
ITM.PARENT_CHILD_GENERATION_FLAG PAR_CHLD,
ITM.LOT_DIVISIBLE_FLAG LOT_DIV,
ITM.GRADE_CONTROL_FLAG GRAD_CTRL,
Decode(ITM.ONT_PRICING_QTY_SOURCE,
'P','Primary', 'Secondary') ONT_PR_QTY,
ITM.dual_uom_deviation_high DUAL_UOM_DEV_H,
ITM.dual_uom_deviation_low DUAL_UOM_DEV_L,
ITM.lot_control_code lot_ctl,
ITM.location_control_code loct_ctl,
ITM.lot_status_enabled status_ctl,
LIN.source_document_line_id sdli
from
OE_ORDER_LINES LIN,
-- OE_TRANSACTION_TYPES TYP,
MTL_SYSTEM_ITEMS ITM,
-- MTL_PARAMETERS PAR,
OE_SETS ST1,
OE_SETS ST2,
OE_SETS ST3
where
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
-- and LIN.LINE_TYPE_ID = TYP.TRANSACTION_TYPE_ID
-- and LIN.SHIP_FROM_ORG_ID = PAR.ORGANIZATION_ID(+)
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
-- and LIN.OPTION_NUMBER IS NULL
-- and LIN.ITEM_TYPE_CODE <> 'INCLUDED'
and LIN.ARRIVAL_SET_ID = ST1.SET_ID(+)
and LIN.SHIP_SET_ID = ST2.SET_ID(+)
and LIN.LINE_SET_ID = ST3.SET_ID(+)
order by
nvl(LIN.line_number,0), nvl(LIN.shipment_number,0), nvl(LIN.option_number,0),
nvl(LIN.component_number,0), nvl(LIN.service_number,0);
-- NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
-- NVL(LIN.SORT_ORDER, '0000'),
-- NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
-- NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
-- NVL(LIN.SERVICE_REFERENCE_LINE_ID, LIN.LINE_ID),
-- LIN.LINE_ID;



cursor setl(lin number) is
select os.set_id, os.set_type
from oe_sets os, oe_line_sets ols
where os.set_id = ols.set_id
and line_id = lin;

r_del_det varchar2(100);
r_pro_nab varchar2(100);
r_act_nab varchar2(100);
r_resultb varchar2(100);
r_act_sb varchar2(100);
r_sets varchar2(100);
r_omint varchar2(100);
r_invint varchar2(100);
org_i varchar2(100);
lin_ty varchar2(100);

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;


begin
:r_error := 0;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..70
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. Ordered Quantity is less than Shipped Quantity.';
msg(2).descrip := ' 2. Ordered Quantity is less than Fulfilled Quantity.';
msg(3).descrip := ' 3. Ordered Quantity is less than Invoiced Quantity.';
msg(4).descrip := ' 4. Interface to WSH set to "N" but exist Delivery Details associated to this Order_line.';
msg(5).descrip := ' 5. Associated Delivery Details has NOT been interface but Shipped, Fulfilled or Invoiced QTY are updated.';

msg(10).descrip := ' 10. Order_Line shows as OPEN but CANCELLED flag is set to Y.';

msg(11).descrip := ' 11. Order_Line status ENTERED but Shipped Qty is greater than zero.';
msg(12).descrip := ' 12. Order_Line status ENTERED but Fulfilled Qty is greater than zero.';

msg(15).descrip := ' 15. Order_Line status BOOKED but "Book" activity has not been completed.';
msg(16).descrip := ' 16. Order_Line status BOOKED but Shipped Qty is greater than zero.';
msg(17).descrip := ' 17. Order_Line status BOOKED but Fulfilled Qty is greater than zero.';

msg(20).descrip := ' 20. Order_Line status AWAITING SHIPPING but Item is set to Non-Shippable.';
msg(21).descrip := ' 21. Order_Line status AWAITING SHIPPING but Shipped Qty is greater than zero.';
msg(22).descrip := ' 22. Order_Line status AWAITING SHIPPING but Fulfilled Qty is greater than zero.';
msg(23).descrip := ' 23. No Delivery Details associated to this Order_line, Interface to WSH is set to "Y".';
msg(24).descrip := ' 24. Associated Delivery Details have invalid RELEASED status.';
msg(25).descrip := ' 25. Associated Delivery Details have invalid INTERFACE status (Not Shipped but Interfaced to OM or INV).';

msg(40).descrip := ' 40. Line status is CLOSED but associated Delivery Details still not interface to OM.';
msg(41).descrip := ' 41. Line status is CLOSED but associated Delivery Details still not interface to INVentory.';

msg(45).descrip := ' 45. Line status is CANCELLED but associated Delivery Details has been interfaced to OM.';
msg(46).descrip := ' 46. Line status is CANCELLED but associated Delivery Details has been interfaced to INVentory.';

msg(50).descrip := ' 50. No WorkFlow Process associated to this line.';
msg(51).descrip := ' 51. Incorrect WorkFlow Process associated to this line.';
msg(52).descrip := ' 52. Incorrect WorkFlow Activity associated to this line.';
msg(53).descrip := ' 53. Incorrect WorkFlow Activity Result for this line.';
msg(54).descrip := ' 54. Incorrect WorkFlow Activity Status for this line.';
msg(55).descrip := ' 55. Order Line status is BOOKED, WorkFlow Activities shows additional activities for this line.';

msg(60).descrip := ' 60. Organization_id is Null for this line.';
msg(61).descrip := ' 61. Transaction Type is Null for this line.';
end if;

for i in line1
loop
:r_flag := '';
r_del_det := '';
r_sets := '';

-- get Order_line WF name
begin
:r_line_t := '';
select WFA.DISPLAY_NAME
into :r_line_t
FROM WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA
WHERE WFS.ITEM_TYPE = 'OEOL'
-- klr
and WFS.ITEM_KEY = to_char(I.LINE_I)
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_NAME = 'ROOT'
and WFP.ACTIVITY_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA.NAME
and nvl(WFA.VERSION,-1) = (select nvl(max(VERSION),-1)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME);
exception
when no_data_found then
:r_flag := :r_flag || '50 ';
msg(50).flag := '1';
end;

-- get organization code
begin
select ORGANIZATION_CODE
into org_i
from MTL_PARAMETERS
where i.shipfrom = ORGANIZATION_ID(+);
exception
when no_data_found then
org_i := null;
:r_flag := :r_flag || '60 ';
msg(60).flag := '1';
end;

-- get Transaction Type name
begin
select NAME
into lin_ty
from OE_TRANSACTION_TYPES
where i.LINE_TYPE_ID = TRANSACTION_TYPE_ID;
exception
when others then
lin_ty := null;
:r_flag := :r_flag || '61 ';
msg(61).flag := '1';
end;

-- Check if exist associated Delivery Detail id regardles of line status and SI flag.
begin
select Delivery_detail_id
into r_del_det
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE'
and rownum = 1;
exception
when no_data_found then
null; -- conditions will be evaluated later
end;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
-- Reservations
select sum(nvl(RESERVATION_QUANTITY,0))
into :r_res_q
from MTL_RESERVATIONS RES
where RES.DEMAND_SOURCE_HEADER_ID = :sales_ord_id
and RES.DEMAND_SOURCE_TYPE_ID in (2,8,9,21,22)
and RES.DEMAND_SOURCE_LINE_ID = i.LINE_I;

-- current WF status
begin
:r_pro_na := '';
:r_act_na := '';
:r_result := '';
:r_act_s := '';

select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
LKP.MEANING
into :r_pro_na, :r_act_na, :r_result, :r_act_s
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where WFS.ITEM_TYPE = 'OEOL'
and WFS.item_key = i.line_i
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION) from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and Execution_time = (Select Max(execution_time) from WF_ITEM_ACTIVITY_STATUSES
where item_type = 'OEOL' and Item_key = i.line_i);
exception
when no_data_found then
if msg(50).flag = '1' then
null; -- problem already discovered
else
:r_flag := :r_flag || '50 ';
msg(50).flag := '1';
end if;
end;

-- Get associated sets
for sl in setl(i.line_i)
loop
r_sets := r_sets || to_char(sl.set_id)||'-'||sl.set_type || ' ';
end loop;
---
-- Basic Verification
--
-- Ordered Qty less than Shipped (with Tolerance)
If i.Ordq*(100+nvl(i.sta,0))/100 < i.shpq then
:r_flag := :r_flag || '1 ';
msg(1).flag := '1';
end if;

-- Ordered Qty less than Fulfilled (with Tolerance)
If i.Ordq*(100+nvl(i.sta,0))/100 < i.fulq then
:r_flag := :r_flag || '2 ';
msg(2).flag := '1';
end if;

-- Ordered Qty less than Invoiced (with Tolerance)
If i.Ordq*(100+nvl(i.sta,0))/100 < i.invq then
:r_flag := :r_flag || '3 ';
msg(3).flag := '1';
end if;

If i.si = 'N' then -- Non interfaced to WSH
select count(*) -- count total wdd for this line
into :r_wdd
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE';
If :r_wdd > 0 then
:r_flag := :r_flag || '4 ';
msg(4).flag := '1';
end if;
end if;

-- If line is Shippable
-- Check if shipped, fulfilled or invoiced quantities has been updated and associated Del.Details still not Interfaced to OM
if i.shipf = 'Y' then -- Shippable line
if i.shpq > 0
or i.fulq > 0
or i.invq > 0 then
select count(*) -- count if any associated Delivery Detail has been OM interfaced
into r_omint
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE'
and OE_INTERFACED_FLAG = 'Y';
if r_omint = 0 then
:r_flag := :r_flag || '5 ';
msg(5).flag := '1';
end if;
end if;
end if;

-- line open but Cancelled flag is Y
if i.openf = 'Y'
and i.canf = 'Y' then
:r_flag := :r_flag || '10 ';
msg(10).flag := '1';
end if;

---
-- Verifications for Order_Lines on ENTERED status
---
If i.line_st = 'ENTERED' then

if i.shpq > 0 then -- Quantity Shipped
:r_flag := :r_flag || '11 ';
msg(11).flag := '1';
end if;
if i.fulq > 0 then -- Quantity Fulfilled
:r_flag := :r_flag || '12 ';
msg(12).flag := '1';
end if;

-- verify current WF status
if :r_pro_na <> 'Enter - Line' then
:r_flag := :r_flag || '51 ';
msg(51).flag := '1';
elsif :r_act_na <> 'Wait for Booking' then
:r_flag := :r_flag || '52 ';
msg(52).flag := '1';
elsif :r_result is not null then
:r_flag := :r_flag || '53 ';
msg(53).flag := '1';
elsif :r_act_s <> 'Notified' then
:r_flag := :r_flag || '54 ';
msg(54).flag := '1';
end if;
end if; -- ENTERED

---
-- Verifications for Order_Lines on BOOKED status
---
If i.line_st = 'BOOKED' then
-- Check is Book activity has been completed
begin
select WFA.DISPLAY_NAME, WFA1.DISPLAY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE),
LKP.MEANING
into r_pro_nab, r_act_nab, r_resultb, r_act_sb
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where WFS.ITEM_TYPE = 'OEOL'
and WFS.item_key = i.line_i
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION) from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFA1.DISPLAY_NAME = 'Wait for Booking';
exception
when no_data_found then
:r_flag := :r_flag || '15 ';
msg(15).flag := '1';
end;

if r_act_nab = 'Wait for Booking' then
if r_resultb = 'Null'
and r_act_sb = 'Complete' then
null; -- status is OK
else
:r_flag := :r_flag || '15 ';
msg(15).flag := '1';
end if;
end if;

if i.shpq > 0 then -- Quantity Shipped
:r_flag := :r_flag || '16 ';
msg(16).flag := '1';
end if;
if i.fulq > 0 then -- Quantity Fulfilled
:r_flag := :r_flag || '17 ';
msg(17).flag := '1';
end if;

-- Check if there are other activities after Booking.
if :r_act_na = 'Wait for Booking' then
null; -- OK last activity is Booking
else
:r_flag := :r_flag || '55 ';
msg(55).flag := '1';
end if;

end if; -- BOOKED

---
-- Verifications for Order_Lines on AWAITING SHIPPING status
---
If i.line_st = 'AWAITING_SHIPPING' then
if i.shipf = 'N' then -- No shippable line
:r_flag := :r_flag || '20 ';
msg(20).flag := '1';
end if;
if i.shpq > 0 then -- Quantity Shipped
:r_flag := :r_flag || '21 ';
msg(21).flag := '1';
end if;
if i.fulq > 0 then -- Quantity Fulfilled
:r_flag := :r_flag || '22 ';
msg(22).flag := '1';
end if;
select count(*) -- count total wdd for this line
into :r_wdd
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE';
If :r_wdd = 0 and i.si = 'Y' then
:r_flag := :r_flag || '23 ';
msg(23).flag := '1';
else
select count(*) -- Invalid Release flag status
into :r_wdd
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE'
and RELEASED_STATUS not in ('Y','R','S','B','P','C','N','D','X');
If :r_wdd > 0 then
:r_flag := :r_flag || '24 ';
msg(24).flag := '1';
end if;
select count(*) -- count Released status 'R' but OM or INV interfaced
into :r_wdd
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE'
and RELEASED_STATUS <> 'C'
and (nvl(INV_INTERFACED_FLAG,'N') not in ( 'N','X')
or nvl(OE_INTERFACED_FLAG,'N') <> 'N');
If :r_wdd > 0 then
:r_flag := :r_flag || '25 ';
msg(25).flag := '1';
end if;
end if; -- no wdd

-- verify current WF status
if :r_pro_na <> 'Ship - Line, Manual' then
:r_flag := :r_flag || '51 ';
msg(51).flag := '1';
elsif :r_act_na <> 'Ship' then
:r_flag := :r_flag || '52 ';
msg(52).flag := '1';
elsif :r_result is not null then
:r_flag := :r_flag || '53 ';
msg(53).flag := '1';
elsif :r_act_s <> 'Notified' then
:r_flag := :r_flag || '54 ';
msg(54).flag := '1';
end if;

end if; -- AWAITING SHIPPING

---
-- Verifications for Order_Lines on SHIPPED status
---
If i.line_st = 'SHIPPED' then
null; -- nothing yet
-- :r_flag := :r_flag || '';
-- msg(30).flag := '1';
end if; -- SHIPPED

---
-- Verifications for Order_Lines on FULFILLED status
---
If i.line_st = 'FULFILLED' then
null; -- nothing yet
-- :r_flag := :r_flag || '';
-- msg(40).flag := '1';
end if; -- FULFILLED

---
-- Verifications for Order_Lines on INVOICED status
---
If i.line_st = 'INVOICED' then
null; -- nothing yet
-- :r_flag := :r_flag || '';
-- msg(40).flag := '1';
end if; -- INVOICED

---
-- Verifications for Order_Lines on CLOSED status
---
If i.line_st = 'CLOSED' then
-- If line is Shippable check if associated Del.Details still not Interfaced to OM or INV
if i.shipf = 'Y' then
-- count if any associated Delivery Detail has NOT been OM or INV interfaced
begin
select sum(decode(nvl(OE_INTERFACED_FLAG,'N'),'N',1,0)), sum(decode(nvl(INV_INTERFACED_FLAG,'N'),'N',1,0))
into r_omint, r_invint
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and SOURCE_CODE = 'OE'
and released_status <> 'D'
group by SOURCE_LINE_ID;
exception
when no_data_found then
r_omint := 0;
r_invint := 0;
end;
if r_omint > 0 then
:r_flag := :r_flag || '40 ';
msg(40).flag := '1';
end if;
if r_invint > 0 then
:r_flag := :r_flag || '41 ';
msg(41).flag := '1';
end if;
end if;
end if; -- CLOSED

---
-- Verifications for Order_Lines on CANCELLED status
---
If i.line_st = 'CANCELLED' then
-- If line is Shippable check if associated Del.Details open Pending Interfaced to OM or INV
if i.shipf = 'Y' then
-- count if any associated Delivery Detail has been interfaced to OM or INV
begin
select sum(decode(nvl(OE_INTERFACED_FLAG,'N'),'Y',1,0)), sum(decode(nvl(INV_INTERFACED_FLAG,'N'),'Y',1,0))
into r_omint, r_invint
from WSH_Delivery_Details
where SOURCE_LINE_ID = I.LINE_I
and source_code = 'OE'
and RELEASED_STATUS <> 'D'
group by SOURCE_LINE_ID;
exception
when no_data_found then
r_omint := 0;
r_invint := 0;
end;
if r_omint > 0 then
:r_flag := :r_flag || '45 ';
msg(45).flag := '1';
end if;
if r_invint > 0 then
:r_flag := :r_flag || '46 ';
msg(46).flag := '1';
end if;
end if;
end if; -- CANCELLED
end if; -- do_analysis


-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#OLERR">'||n(:r_flag)||'</a> &eb &d'||n(i.line_n)||'&d');
utl_file.put_line(handle,'<a NAME="OOE'||i.Line_i||'">'||n(i.Line_i)||'</a>'||'&d'||'<a HREF="#WDD'||r_del_det||'">'||n(r_del_det)||'</a>');
utl_file.put_line(handle,'&d'||n(i.Item_i)||'&d'||n(i.Item_na)||'&d');
utl_file.put_line(handle,'<a HREF="#WF'||i.Line_i||'">'||n(:r_line_t)||'</a>'||'&d');
utl_file.put_line(handle,n(i.Line_st)||'&d'||n(i.openf)||'&d');
utl_file.put_line(handle,n(i.bookf)||'&d'||n(i.shipf)||'&d');
utl_file.put_line(handle,n(i.canf)||'&d'||n(i.vdem)||'&d');
utl_file.put_line(handle,n(i.si)||'&d'||n(i.fulf)||'&d');
utl_file.put_line(handle,n(i.ato_i)||'&d'||n(i.smcf)||'&d');
utl_file.put_line(handle,n(i.Ordq)||'&d'||n(i.Orduom)||'&d');
utl_file.put_line(handle,n(i.sell)||'&d');
utl_file.put_line(handle,n(i.lisl)||'&d'||n(i.cal_pr)||'&d');
utl_file.put_line(handle,n(:r_res_q)||'&d'||n(i.shn_q)||'&d');
utl_file.put_line(handle,n(i.shpq)||'&d'||n(i.fulq)||'&d');
utl_file.put_line(handle,n(i.canq)||'&d');
utl_file.put_line(handle,n(i.invq)||'&d'||n(i.schc)||'&d');
utl_file.put_line(handle,n(i.shipfrom)||'&d'||n(org_i)||'&d');
utl_file.put_line(handle,n(i.cre_date)||'&d');
utl_file.put_line(handle,n(i.reqd)||'&d'||n(i.schd)||'&d');
utl_file.put_line(handle,n(i.act_shp)||'&d');
utl_file.put_line(handle,n(lin_ty)||'&d'||n(i.lin_cat)||'&d');
utl_file.put_line(handle,n(i.itm_tc)||'&d'||n(i.ord_it)||'&d');
utl_file.put_line(handle,n(i.ord_it_name)||'&d'||n(i.Src_tc)||'&d');
utl_file.put_line(handle,n(i.prlst)||'&d'||n(i.demc)||'&d');
utl_file.put_line(handle,n(i.CFG)||'&d'||n(i.WH_ID)||'&d');
utl_file.put_line(handle,n(i.PRT_LN_ID)||'&d'||n(i.ATO_LN_ID)||'&d');
utl_file.put_line(handle,n(i.LNK_LN_ID)||'&d'||n(i.SPL_BY)||'&d');
utl_file.put_line(handle,n(i.SPL_LN_ID)||'&d');
utl_file.put_line(handle,n(i.CFG_HD_ID)||'&d'||n(i.INVC_INT_STAT)||'&d');
utl_file.put_line(handle,n(i.STA)||'&d');
utl_file.put_line(handle,n(i.STB)||'&d'||n(i.SH_SET_ID)||'&d');
utl_file.put_line(handle,n(i.SH_SET_TY)||'&d'||n(i.LN_SET_ID)||'&d');
utl_file.put_line(handle,n(i.LN_SET_TY)||'&d'||n(i.AR_SET_ID)||'&d');
utl_file.put_line(handle,n(i.AR_SET_TY)||'&d'||n(r_sets)||'&d');
utl_file.put_line(handle,n(i.Ordq2)||'&d'||n(i.Orduom2)||'&d');
utl_file.put_line(handle,n(i.shn_q2)||'&d'||n(i.shn_quom2)||'&d');
utl_file.put_line(handle,n(i.shpq2)||'&d'||n(i.fulq2)||'&d');
utl_file.put_line(handle,n(i.canq2)||'&d');
utl_file.put_line(handle,n(i.upd_date)||'&d');
utl_file.put_line(handle,n(i.trck_qty_ind)||'&d'||n(i.PRM_UOM)||'&d');
utl_file.put_line(handle,n(i.DUAL_UOM)||'&d'||n(i.SEC_DEF_IND)||'&d');
utl_file.put_line(handle,n(i.SEC_UOM)||'&d'||n(i.CHLD_LOT)||'&d');
utl_file.put_line(handle,n(i.PAR_CHLD)||'&d'||n(i.LOT_DIV)||'&d');
utl_file.put_line(handle,n(i.GRAD_CTRL)||'&d'||n(i.ONT_PR_QTY)||'&d');
utl_file.put_line(handle,n(i.DUAL_UOM_DEV_H)||'&d'||n(i.DUAL_UOM_DEV_L)||'&d');
utl_file.put_line(handle,n(i.LOT_CTL)||'&d'||n(i.LOCT_CTL)||'&d');
utl_file.put_line(handle,n(i.STATUS_CTL)||'&d'||n(i.sdli)||'&el');
if :r_flag is not null then
:r_error := 1;
end if;
end loop;

utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="OLERR">Warning List:</a> &eb &f');
for i in 1..70
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- v_head_only

UTL_FILE.FCLOSE(handle);
end;
/
--AQUI

DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
If :v_head_only = 'N' then

-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed


UTL_FILE.PUT_LINE(handle,'&f &f OE_ORDER_LINES_HISTORY (HIL) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh LINE_ID &dh LINE &dh ORD_Q &dh LCN_Q &dh SHN_Q &dh SHP_Q &dh FUL_Q &dh CAN_Q &dh INC_Q &dh UOM &dh SSC &dh OP &dh');
UTL_FILE.PUT_LINE(handle,'BK &dh SH &dh CN &dh VD &dh SI &dh FF &dh WF_ACT_CODE &dh WF_RESULT &dh HIST_TYPE &dh HIST_CREAT_DATE &dh FLOW_CODE &dh');
UTL_FILE.PUT_LINE(handle,'PRICE &dh REASON_CODE &dh HIST_COMMENTS &eh');

Declare
cursor l_lin_his is
select
HIL.LINE_ID Line_id,
to_char(HIL.line_number) ||
decode(HIL.shipment_number, null, null, '.' || to_char(HIL.shipment_number))||
decode(HIL.option_number, null, null, '.' || to_char(HIL.option_number)) ||
decode(HIL.component_number, null, null,
decode(HIL.option_number, null, '.',null)||
'.'||to_char(HIL.component_number))||
decode(HIL.service_number,null,null,
decode(HIL.component_number, null, '.' , null) ||
decode(HIL.option_number, null, '.', null ) ||
'.'|| to_char(HIL.service_number)) line_no,
nvl(HIL.ORDERED_QUANTITY,0) Ord_q,
nvl(HIL.LATEST_CANCELLED_QUANTITY,0) lCan_q,
nvl(HIL.SHIPPING_QUANTITY,0) SHI_q,
nvl(HIL.SHIPPED_QUANTITY,0) SHP_q,
nvl(HIL.FULFILLED_QUANTITY,0) Ful_q,
nvl(HIL.CANCELLED_QUANTITY,0) Can_q,
nvl(HIL.INVOICED_QUANTITY,0) INV_q,
HIL.ORDER_QUANTITY_UOM Ord_q_uom,
substr(HIL.SCHEDULE_STATUS_CODE,1,5) Sch_code,
nvl(HIL.OPEN_FLAG,'N') OP_f,
nvl(HIL.BOOKED_FLAG,'N') BK_f,
nvl(HIL.SHIPPABLE_FLAG,'N') SH_f,
nvl(HIL.CANCELLED_FLAG,'N') CN_f,
nvl(HIL.VISIBLE_DEMAND_FLAG,'N') VD_f,
nvl(HIL.SHIPPING_INTERFACED_FLAG,'N') SI_f,
nvl(HIL.FULFILLED_FLAG,'N') FL_f,
HIL.WF_ACTIVITY_CODE Act_code,
HIL.WF_RESULT_CODE Res_code,
HIL.HIST_TYPE_CODE Typ_code,
to_char(HIL.HIST_CREATION_DATE, 'DD-MON-RR_HH24:MI:SS') Hist_cre_date,
HIL.FLOW_STATUS_CODE Sta_code,
HIL.UNIT_SELLING_PRICE Sell_p,
HIL.REASON_CODE Reason,
HIL.HIST_COMMENTS comments
from
OE_ORDER_LINES_HISTORY HIL
where
HIL.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,HIL.LINE_ID,
HIL.TOP_MODEL_LINE_ID,
HIL.ATO_LINE_ID,
HIL.LINK_TO_LINE_ID,
HIL.SERVICE_REFERENCE_LINE_ID)
order by
NVL(HIL.ATO_LINE_ID, HIL.LINE_ID),
NVL(HIL.SORT_ORDER, '0000'),
NVL(HIL.LINK_TO_LINE_ID, HIL.LINE_ID),
NVL(HIL.SOURCE_DOCUMENT_LINE_ID, HIL.LINE_ID),
NVL(HIL.SERVICE_REFERENCE_LINE_ID, HIL.LINE_ID),
HIL.LINE_ID;

begin
for ll in l_lin_his
loop
utl_file.put_line(handle,'&sld'||n(ll.Line_id)||'&d'||n(ll.line_no)||'&d');
utl_file.put_line(handle,n(ll.Ord_q)||'&d'||n(ll.lcan_q)||'&d');
utl_file.put_line(handle,n(ll.SHI_q)||'&d'||n(ll.SHP_q)||'&d');
utl_file.put_line(handle,n(ll.Ful_q)||'&d'||n(ll.CAN_q)||'&d');
utl_file.put_line(handle,n(ll.INV_q)||'&d'||n(ll.ord_q_uom)||'&d');
utl_file.put_line(handle,n(ll.Sch_code)||'&d'||n(ll.OP_f)||'&d');
utl_file.put_line(handle,n(ll.BK_f)||'&d'||n(ll.SH_f)||'&d');
utl_file.put_line(handle,n(ll.CN_f)||'&d'||n(ll.VD_f)||'&d');
utl_file.put_line(handle,n(ll.SI_f)||'&d'||n(ll.FL_f)||'&d');
utl_file.put_line(handle,n(ll.Act_code)||'&d'||n(ll.Res_code)||'&d');
utl_file.put_line(handle,n(ll.Typ_code)||'&d'||n(ll.Hist_cre_date)||'&d');
utl_file.put_line(handle,n(ll.Sta_code)||'&d'||n(ll.Sell_p)||'&d');
utl_file.put_line(handle,n(ll.Reason)||'&d'||n(ll.comments)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


if UPPER(nvl('&prt_wf','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW LINE STATUS &f');

-- break on WFS.ITEM_KEY skip 2;

declare
cursor WF_LINE is
select WFS.ITEM_KEY ITEM_KEY,
WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT_CODE,
LKP.MEANING MEANING,
WFS.NOTIFICATION_ID NOTIFICATION_ID,
WFP.PROCESS_NAME INT_Process_name,
WFP.ACTIVITY_NAME INT_Activity_name,
WFS.ACTIVITY_RESULT_CODE INT_Act_Res_code,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') B_Date,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') E_Date,
WFS.ERROR_NAME Err_name,
WFS.BEGIN_DATE BEGIN_DATE2,
WFS.EXECUTION_TIME EXECUTION_TIME2
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'OEOL'
and WFS.item_key in
(select to_char(line_id) from OE_ORDER_LINES LIN
where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
UNION ALL
select WFS.ITEM_KEY ITEM_KEY,
WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT_CODE,
LKP.MEANING MEANING,
WFS.NOTIFICATION_ID NOTIFICATION_ID,
WFP.PROCESS_NAME INT_Process_name,
WFP.ACTIVITY_NAME INT_Activity_name,
WFS.ACTIVITY_RESULT_CODE INT_Act_Res_code,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') B_Date,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') E_Date,
WFS.ERROR_NAME Err_name,
WFS.BEGIN_DATE BEGIN_DATE2,
WFS.EXECUTION_TIME EXECUTION_TIME2
from WF_ITEM_ACTIVITY_STATUSES_H WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'OEOL'
and WFS.item_key in
(select to_char(line_id) from OE_ORDER_LINES LIN
where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
order by 1, 13, 14;

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;
current_key number;
line_no varchar2(10);


begin
current_key := '';
:r_error := 0;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..60
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;

end if; -- do_analysis


-- cycle for table information
for wf in wf_LINE
loop
:r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null; -- nothing yet
end if; -- do_analysis

-- Print line to Output file
if wf.item_key <> nvl(current_key,0) then -- check if item key changed to place a division
if current_key is not null then -- first pass don't need to close table
utl_file.put_line(handle,'&et &f');
end if;
utl_file.put_line(handle,'&std &sh <a NAME="WF'||wf.ITEM_KEY||'">WARNING</a> &dh');
utl_file.put_line(handle,'LIN_NUM &dh');
utl_file.put_line(handle,'LIN_ID &dh');
utl_file.put_line(handle,'PROCESS_NAME &dh');
utl_file.put_line(handle,'ACTIVITY_NAME &dh');
utl_file.put_line(handle,'RESULT &dh');
utl_file.put_line(handle,'ACT_STATUS &dh');
utl_file.put_line(handle,'NOTIF_ID &dh');
utl_file.put_line(handle,'INT_PROCESS_NAME &dh');
utl_file.put_line(handle,'INT_ACTIVITY_NAME &dh');
utl_file.put_line(handle,'INT_RESULT_CODE &dh');
utl_file.put_line(handle,'BEGIN_DATE &dh');
utl_file.put_line(handle,'END_DATE &dh');
utl_file.put_line(handle,'ERROR_NAME &eh');
current_key := wf.item_key;

select to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number))
into line_no
from OE_ORDER_LINES LIN
where LIN.Line_id = current_key;

end if;
utl_file.put_line(handle,'&sld &b <a HREF="#WFLERR">'||n(:r_flag)||'</a> &eb &d'||n(line_no)||'&d');
utl_file.put_line(handle,n(wf.ITEM_KEY)||'&d');
utl_file.put_line(handle,n(wf.Process_name)||'&d'||n(wf.activity_name)||'&d');
utl_file.put_line(handle,n(wf.Result_code)||'&d'||n(wf.Meaning)||'&d');
utl_file.put_line(handle,n(wf.Notification_id)||'&d'||n(wf.INT_Process_name)||'&d');
utl_file.put_line(handle,n(wf.INT_activity_name)||'&d'||n(wf.INT_Act_Res_code)||'&d');
utl_file.put_line(handle,n(wf.B_date)||'&d');
utl_file.put_line(handle,n(wf.E_date)||'&d'||n(wf.Err_name)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;

utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="WFLERR">Warning List:</a> &eb &f');
for i in 1..60
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');


/*
UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW LINE SKIP INFORMATION (WFSKIPL)&f');

UTL_FILE.PUT_LINE(handle,'&std &sh LINE_ID &dh HEADER_ID &dh DISPLAY_NAME &dh CREATION_DATE &dh USER_ID &dh RESPONSIBILITY_ID &dh APPLICATION_ID &eh');

declare
r_exist number;

begin

select count(*)
into r_exist
from all_tables
where table_name = 'ONT_WF_SKIP_LOG';
if r_exist = 0 then
utl_file.put_line(handle,'&et Table ONT_WF_SKIP_LOG is not present on this instance: &f');
end if;

end;

select '&sld', WFS.LINE_ID,
WFS.HEADER_ID,
WFA.DISPLAY_NAME,
to_char(WFS.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') cre_date,
WFS.USER_ID,
WFS.RESPONSIBILITY_ID,
WFS.APPLICATION_ID,'&el'
from ONT_WF_SKIP_LOG WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA
where WFS.HEADER_ID = nvl('&header_id_selected',to_char(:v_header_id))
and WFS.ACTIVITY_ID = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and NVL('&line_id_selected',0) in (0,WFS.LINE_ID)
order by WFS.HEADER_ID,
WFS.LINE_ID,
WFS.CREATION_DATE;

UTL_FILE.PUT_LINE(handle,'&et'); */


UTL_FILE.PUT_LINE(handle,'&f &f &b WORKFLOW LINE STATUS ERRORS &f');

-- break on LIN_ID skip 2;

UTL_FILE.PUT_LINE(handle,'&std &sh LIN_ID &dh PROCESS_NAME &dh ERROR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERR_RETRY_ROLE &dh ERR_RETRY_USER &dh ');
UTL_FILE.PUT_LINE(handle,'ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor l_wf_err is
select
WFS.ITEM_KEY LIN_ID,
WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ERROR_ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.ERROR_NAME ERROR_NAME,
WFS.ERROR_MESSAGE ERROR_MESSAGE,
WFS.ERROR_STACK ERROR_STACK
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_ITEMS WFI,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'OEOL'
and WFS.item_key in
(select to_char(line_id) from OE_ORDER_LINES LIN
where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFS.ERROR_NAME is not NULL
and WFI.PARENT_ITEM_TYPE='OEOL'
and WFI.PARENT_ITEM_KEY in
(select to_char(line_id) from OE_ORDER_LINES LIN
where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for ll in l_wf_err
loop
utl_file.put_line(handle,'&sld'||n(ll.LIN_ID)||'&d'||n(ll.PROCESS_NAME)||'&d');
utl_file.put_line(handle,n(ll.ERROR_ACTIVITY_NAME)||'&d'||n(ll.RESULT)||'&d');
utl_file.put_line(handle,n(ll.ACT_STATUS)||'&d'||n(ll.ERROR_NAME)||'&d');
utl_file.put_line(handle,n(ll.ERROR_MESSAGE)||'&d'||n(ll.ERROR_STACK)||'&el');
end loop;
end;


UTL_FILE.PUT_LINE(handle,'&et');

-- break on ERR_TYPE_KEY skip 2;


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW ACTIVITY STATUS FOR LINE ERROR PROCESS &f');

UTL_FILE.PUT_LINE(handle,'&std &sh ERR_TYPE_KEY &dh ERR_PROCESS_NAME &dh ERR_ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ASGND_USER &dh BEGIN_DATE &dh END_DATE &eh');

Declare
cursor l_wf_proc_err is
select
WFS.ITEM_TYPE || '-' || WFS.ITEM_KEY ERR_TYPE_KEY,
WFA.DISPLAY_NAME ERR_PROCESS_NAME,
WFA1.DISPLAY_NAME ERR_ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.NOTIFICATION_ID NOTIF_ID,
WFS.ASSIGNED_USER ASGND_USER,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP,
WF_ITEMS WFI
where
WFS.ITEM_TYPE = WFI.ITEM_TYPE
and WFS.item_key = WFI.ITEM_KEY
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFI.PARENT_ITEM_TYPE = 'OEOL'
and WFI.PARENT_ITEM_KEY in
(select to_char(line_id) from OE_ORDER_LINES LIN
where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
and WFI.ITEM_TYPE in (select WFAE.ERROR_ITEM_TYPE
from WF_ITEM_ACTIVITY_STATUSES WFSE,
WF_PROCESS_ACTIVITIES WFPE,
WF_ACTIVITIES_VL WFAE,
WF_ACTIVITIES_VL WFA1E
where
WFSE.ITEM_TYPE = 'OEOL'
and WFSE.ITEM_KEY in
(select to_char(line_id) from OE_ORDER_LINES LIN
where LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
and WFSE.PROCESS_ACTIVITY = WFPE.INSTANCE_ID
and WFPE.PROCESS_ITEM_TYPE = WFAE.ITEM_TYPE
and WFPE.PROCESS_NAME = WFAE.NAME
and WFPE.PROCESS_VERSION = WFAE.VERSION
and WFPE.ACTIVITY_ITEM_TYPE = WFA1E.ITEM_TYPE
and WFPE.ACTIVITY_NAME = WFA1E.NAME
and WFA1E.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2E
where WF2E.ITEM_TYPE = WFPE.ACTIVITY_ITEM_TYPE
and WF2E.NAME = WFPE.ACTIVITY_NAME)
and WFSE.ACTIVITY_STATUS = 'ERROR')
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for ll in l_wf_proc_err
loop
utl_file.put_line(handle,'&sld'||n(ll.ERR_TYPE_KEY)||'&d'||n(ll.ERR_PROCESS_NAME)||'&d');
utl_file.put_line(handle,n(ll.ERR_ACTIVITY_NAME)||'&d'||n(ll.RESULT)||'&d');
utl_file.put_line(handle,n(ll.ACT_STATUS)||'&d'||n(ll.NOTIF_ID)||'&d');
utl_file.put_line(handle,n(ll.ASGND_USER)||'&d'||n(ll.BEGIN_DATE)||'&d');
utl_file.put_line(handle,n(ll.END_DATE)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_wf


UTL_FILE.PUT_LINE(handle,'&f &f LINE SPECIFIC HOLDS (LINES ONLY)');
UTL_FILE.PUT_LINE(handle,'&std &sh LINE &dh HOLD_ID &dh HOLD_NAME &dh HOLD_TYPE &dh WF_ITEM &dh WF_ACTIVITY &dh ORD_HOLD_ID &dh HLD_SRC_ID &dh ');
UTL_FILE.PUT_LINE(handle,'HLD_REL_ID &dh HEADER_ID &dh LINE_ID &dh H_REL &dh S_REL &dh RELEASE_REASON &dh ENTITY &dh ENTITY_ID &dh ENTITY2 &dh ');
UTL_FILE.PUT_LINE(handle,'ENTITY_ID2 &dh HOLD_UNTIL &eh');


Declare
cursor l_holds is
SELECT
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
HDF.HOLD_ID HOLD_ID,
HDF.NAME HOLD_NAME,
HDF.TYPE_CODE HOLD_TYPE,
HDF.ITEM_TYPE WF_ITEM,
HDF.ACTIVITY_NAME WF_ACTIVITY,
HLD.ORDER_HOLD_ID ORD_HOLD_ID,
HLD.HOLD_SOURCE_ID HLD_SRC_ID,
HLD.HOLD_RELEASE_ID HLD_REL_ID,
HLD.HEADER_ID HEADER_ID,
HLD.LINE_ID LINE_ID,
HLD.RELEASED_FLAG H_REL,
HSR.RELEASED_FLAG S_REL,
HRL.RELEASE_REASON_CODE RELEASE_REASON,
decode(HSR.HOLD_ENTITY_CODE,
'B','Bill To',
'C','Customer',
'I','Item',
'O','Order',
'S','Ship To',
'W','Warehouse',
HSR.HOLD_ENTITY_CODE) ENTITY,
HSR.HOLD_ENTITY_ID ENTITY_ID,
decode(HSR.HOLD_ENTITY_CODE2,
'B','Bill To',
'C','Customer',
'I','Item',
'O','Order',
'S','Ship To',
'W','Warehouse',
HSR.HOLD_ENTITY_CODE2) ENTITY2,
HSR.HOLD_ENTITY_ID2 ENTITY_ID2,
to_char(HSR.HOLD_UNTIL_DATE,'DD-MON-RR_HH24:MI:SS') HOLD_UNTIL
from OE_ORDER_HOLDS_ALL HLD,
OE_HOLD_SOURCES_ALL HSR,
OE_HOLD_DEFINITIONS HDF,
OE_HOLD_RELEASES HRL,
OE_ORDER_LINES_ALL LIN
where HLD.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and HLD.LINE_ID IS NOT NULL
and HLD.LINE_ID = LIN.LINE_ID
and NVL('&line_id_selected',0)in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and HLD.HOLD_SOURCE_ID = HSR.HOLD_SOURCE_ID
and HSR.HOLD_ID = HDF.HOLD_ID
and HLD.HOLD_RELEASE_ID = HRL.HOLD_RELEASE_ID(+);

begin
for ll in l_holds
loop
utl_file.put_line(handle,'&sld'||n(ll.LINE)||'&d'||n(ll.HOLD_ID)||'&d');
utl_file.put_line(handle,n(ll.HOLD_NAME)||'&d'||n(ll.HOLD_TYPE)||'&d');
utl_file.put_line(handle,n(ll.WF_ITEM)||'&d'||n(ll.WF_ACTIVITY)||'&d');
utl_file.put_line(handle,n(ll.ORD_HOLD_ID)||'&d'||n(ll.HLD_SRC_ID)||'&d');
utl_file.put_line(handle,n(ll.HLD_REL_ID)||'&d'||n(ll.HEADER_ID)||'&d');
utl_file.put_line(handle,n(ll.LINE_ID)||'&d'||n(ll.H_REL)||'&d');
utl_file.put_line(handle,n(ll.S_REL)||'&d'||n(ll.RELEASE_REASON)||'&d');
utl_file.put_line(handle,n(ll.ENTITY)||'&d'||n(ll.ENTITY_ID)||'&d');
utl_file.put_line(handle,n(ll.ENTITY2)||'&d'||n(ll.ENTITY_ID2)||'&d');
utl_file.put_line(handle,n(ll.HOLD_UNTIL)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


-- This is commented out because it runs slowly without an index
--<do not run> CREATE INDEX OE_PROCESSING_MSGS_777
--<do not run> ON ONT.OE_PROCESSING_MSGS
--<do not run> (header_id, line_id);


UTL_FILE.PUT_LINE(handle,'&f &f LINE PROCESSING MESSAGES &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh LINE &dh HEADER_ID &dh LINE_ID &dh MSG_SOURCE &dh ACTIVITY &dh REQUEST_ID &dh DESCRIPTION &dh MESSAGE_TEXT &eh');

declare
cursor l_proc is
select distinct
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
MSG.header_id HEADER_ID,
MSG.line_id LINE_ID,
decode(MSG.MESSAGE_SOURCE_CODE,
'U','U=On-Line(UI)',
'C','C=Conc Process',
'W','W=Workflow',
MSG.MESSAGE_SOURCE_CODE) MSG_SOURCE,
MSG.PROCESS_ACTIVITY PROCESS_ACTIVITY,
MSG.request_id REQUEST_ID,
MST.message_text MESSAGE_TEXT
from oe_processing_msgs_vl MSG,
oe_processing_msgs_tl MST,
oe_order_lines_all LIN,
fnd_languages FLA
where MSG.header_id = nvl('&header_id_selected',:v_header_id)
and MSG.HEADER_ID = LIN.HEADER_ID
and msg.transaction_id = mst.transaction_id
and MST.LANGUAGE = FLA.LANGUAGE_CODE
and FLA.INSTALLED_FLAG = 'B'
and MSG.LINE_ID = LIN.LINE_ID
and MSG.LINE_ID is not NULL
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);
r_activity varchar2(100);
r_descrip varchar2(100);

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;


begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..10
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;

msg(1).descrip := ' 1. Cannot find Activity name associated to LINE PROCESSING MESSAGES.';
msg(2).descrip := ' 2. Cannot find Request Description.';
end if;

for lp in l_proc
loop
:r_flag := '';
:r_error := 0;
r_activity := '';
r_descrip := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
-- Get Activity name
begin
select WFA1.DISPLAY_NAME
into r_activity
from WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA1
where WFP.INSTANCE_ID = lp.PROCESS_ACTIVITY
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION = (select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME);
exception
when no_data_found then
:r_flag := :r_flag || '1 ';
msg(1).flag := '1';
end;

-- Get Request description
begin
select DESCRIPTION
into r_descrip
FROM FND_CONCURRENT_REQUESTS FCR
where FCR.REQUEST_ID = lp.REQUEST_ID;
exception
when no_data_found then
:r_flag := :r_flag || '2 ';
msg(2).flag := '1';
end;

end if; -- do_analysis

-- Print line to Output file

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#LPMERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,n(lp.LINE)||'&d'||n(lp.HEADER_ID)||'&d');
utl_file.put_line(handle,n(lp.LINE_ID)||'&d'||n(lp.MSG_SOURCE)||'&d');
utl_file.put_line(handle,n(r_activity)||'&d'||n(lp.REQUEST_ID)||'&d');
utl_file.put_line(handle,n(r_descrip)||'&d'||n(lp.MESSAGE_TEXT)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;

utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="LPMERR">Warning List:</a> &eb &f');
for i in 1..10
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');


--<do not run> DROP INDEX OE_PROCESSING_MSGS_777

if UPPER(nvl('&prt_price','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="APPLIED LINE PRICE ADJUSTMENTS">APPLIED LINE PRICE ADJUSTMENTS (ADJ)</a> <a HREF="#ALA">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PRC_ADJ_ID &dh LINE &dh LST_HD_ID &dh LST_LN_ID &dh LIST_LN_NO &dh MOD_LVL &dh LIST_TYPE_CODE &dh CHG_TY_CD &dh');
UTL_FILE.PUT_LINE(handle,'ARITH_OP &dh OP_PER_QTY &dh ADJ_AMT_PQ &dh OPERAND &dh ADJ_AMT &dh CD &dh AF &dh PI &dh AC &dh IF &dh EF &dh UA &dh UF &dh');
UTL_FILE.PUT_LINE(handle,'AP &dh LK &dh PERC &dh COST_ID &dh TAX_CODE &dh PP &eh');


Declare
cursor l_prc_adj is
select
ADJ.PRICE_ADJUSTMENT_ID PRC_ADJ_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
ADJ.LIST_HEADER_ID LST_HD_ID,
ADJ.LIST_LINE_ID LST_LN_ID,
ADJ.LIST_LINE_NO LIST_LN_NO,
ADJ.MODIFIER_LEVEL_CODE MOD_LVL,
ADJ.LIST_LINE_TYPE_CODE LIST_TYPE_CODE,
ADJ.CHARGE_TYPE_CODE CHG_TY_CD,
ADJ.ARITHMETIC_OPERATOR ARITH_OP,
ADJ.OPERAND_PER_PQTY OP_PER_QTY,
ADJ.ADJUSTED_AMOUNT_PER_PQTY ADJ_AMT_PQ,
ADJ.OPERAND OPERAND,
ADJ.ADJUSTED_AMOUNT ADJ_AMT,
ADJ.CREDIT_OR_CHARGE_FLAG CD,
ADJ.AUTOMATIC_FLAG AF,
ADJ.PRINT_ON_INVOICE_FLAG PI,
ADJ.ACCRUAL_FLAG AC,
ADJ.INVOICED_FLAG INF,
ADJ.ESTIMATED_FLAG EF,
ADJ.UPDATE_ALLOWED UA,
ADJ.UPDATED_FLAG UF,
ADJ.APPLIED_FLAG AP,
ADJ.LOCK_CONTROL LK,
ADJ.PERCENT PERC,
ADJ.COST_ID COST_ID,
ADJ.TAX_CODE TAX_CODE,
ADJ.PRICING_PHASE_ID PP
from OE_PRICE_ADJUSTMENTS ADJ,
OE_ORDER_LINES_ALL LIN
where ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ADJ.LINE_ID IS NOT NULL
and ADJ.LINE_ID = LIN.LINE_ID
and NVL('&line_id_selected',0)in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and ADJ.APPLIED_FLAG = 'Y'
order by LINE,
LIST_LINE_TYPE_CODE;

begin
for ll in l_prc_adj
loop
utl_file.put_line(handle,'&sld'||n(ll.PRC_ADJ_ID)||'&d'||n(ll.LINE)||'&d');
utl_file.put_line(handle,n(ll.LST_HD_ID)||'&d'||n(ll.LST_LN_ID)||'&d');
utl_file.put_line(handle,n(ll.LIST_LN_NO)||'&d'||n(ll.MOD_LVL)||'&d');
utl_file.put_line(handle,n(ll.LIST_TYPE_CODE)||'&d'||n(ll.CHG_TY_CD)||'&d');
utl_file.put_line(handle,n(ll.ARITH_OP)||'&d'||n(ll.OP_PER_QTY)||'&d');
utl_file.put_line(handle,n(ll.ADJ_AMT_PQ)||'&d'||n(ll.OPERAND)||'&d');
utl_file.put_line(handle,n(ll.ADJ_AMT)||'&d'||n(ll.CD)||'&d');
utl_file.put_line(handle,n(ll.AF)||'&d'||n(ll.PI)||'&d');
utl_file.put_line(handle,n(ll.AC)||'&d'||n(ll.INF)||'&d');
utl_file.put_line(handle,n(ll.EF)||'&d'||n(ll.UA)||'&d');
utl_file.put_line(handle,n(ll.UF)||'&d'||n(ll.AP)||'&d');
utl_file.put_line(handle,n(ll.LK)||'&d'||n(ll.PERC)||'&d');
utl_file.put_line(handle,n(ll.COST_ID)||'&d'||n(ll.TAX_CODE)||'&d');
utl_file.put_line(handle,n(ll.PP)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="UN-APPLIED LINE PRICE ADJUSTMENTS">UN-APPLIED LINE PRICE ADJUSTMENTS (ADJ)</a> <a HREF="#ALA">Column Definitions</a> &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PRC_ADJ_ID &dh LINE &dh LST_HD_ID &dh LST_LN_ID &dh LIST_LN_NO &dh MOD_LVL &dh LIST_TYPE_CODE &dh CHG_TY_CD &dh');
UTL_FILE.PUT_LINE(handle,'ARITH_OP &dh OP_PER_QTY &dh ADJ_AMT_PQ &dh OPERAND &dh ADJ_AMT &dh CD &dh AF &dh PI &dh AC &dh IF &dh EF &dh UA &dh UF &dh');
UTL_FILE.PUT_LINE(handle,'AP &dh LK &dh PERC &dh COST_ID &dh TAX_CODE &dh PP &eh');


Declare
cursor l_prc_adj_un is
select
ADJ.PRICE_ADJUSTMENT_ID PRC_ADJ_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
ADJ.LIST_HEADER_ID LST_HD_ID,
ADJ.LIST_LINE_ID LST_LN_ID,
ADJ.LIST_LINE_NO LIST_LN_NO,
ADJ.MODIFIER_LEVEL_CODE MOD_LVL,
ADJ.LIST_LINE_TYPE_CODE LIST_TYPE_CODE,
ADJ.CHARGE_TYPE_CODE CHG_TY_CD,
ADJ.ARITHMETIC_OPERATOR ARITH_OP,
ADJ.OPERAND_PER_PQTY OP_PER_QTY,
ADJ.ADJUSTED_AMOUNT_PER_PQTY ADJ_AMT_PQ,
ADJ.OPERAND OPERAND,
ADJ.ADJUSTED_AMOUNT ADJ_AMT,
ADJ.CREDIT_OR_CHARGE_FLAG CD,
ADJ.AUTOMATIC_FLAG AF,
ADJ.PRINT_ON_INVOICE_FLAG PI,
ADJ.ACCRUAL_FLAG AC,
ADJ.INVOICED_FLAG INF,
ADJ.ESTIMATED_FLAG EF,
ADJ.UPDATE_ALLOWED UA,
ADJ.UPDATED_FLAG UF,
ADJ.APPLIED_FLAG AP,
ADJ.LOCK_CONTROL LK,
ADJ.PERCENT PERC,
ADJ.COST_ID COST_ID,
ADJ.TAX_CODE TAX_CODE,
ADJ.PRICING_PHASE_ID PP
from OE_PRICE_ADJUSTMENTS ADJ,
OE_ORDER_LINES_ALL LIN
where ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ADJ.LINE_ID IS NOT NULL
and ADJ.LINE_ID = LIN.LINE_ID
and NVL('&line_id_selected',0)in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and nvl(ADJ.APPLIED_FLAG,'N') = 'N'
order by LINE,
LIST_LINE_TYPE_CODE;

begin
for ll in l_prc_adj_un
loop
utl_file.put_line(handle,'&sld'||n(ll.PRC_ADJ_ID)||'&d'||n(ll.LINE)||'&d');
utl_file.put_line(handle,n(ll.LST_HD_ID)||'&d'||n(ll.LST_LN_ID)||'&d');
utl_file.put_line(handle,n(ll.LIST_LN_NO)||'&d'||n(ll.MOD_LVL)||'&d');
utl_file.put_line(handle,n(ll.LIST_TYPE_CODE)||'&d'||n(ll.CHG_TY_CD)||'&d');
utl_file.put_line(handle,n(ll.ARITH_OP)||'&d'||n(ll.OP_PER_QTY)||'&d');
utl_file.put_line(handle,n(ll.ADJ_AMT_PQ)||'&d'||n(ll.OPERAND)||'&d');
utl_file.put_line(handle,n(ll.ADJ_AMT)||'&d'||n(ll.CD)||'&d');
utl_file.put_line(handle,n(ll.AF)||'&d'||n(ll.PI)||'&d');
utl_file.put_line(handle,n(ll.AC)||'&d'||n(ll.INF)||'&d');
utl_file.put_line(handle,n(ll.EF)||'&d'||n(ll.UA)||'&d');
utl_file.put_line(handle,n(ll.UF)||'&d'||n(ll.AP)||'&d');
utl_file.put_line(handle,n(ll.LK)||'&d'||n(ll.PERC)||'&d');
utl_file.put_line(handle,n(ll.COST_ID)||'&d'||n(ll.TAX_CODE)||'&d');
utl_file.put_line(handle,n(ll.PP)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_price

if UPPER(nvl('&prt_po','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f OE_DROP_SHIP_SOURCES (SRC) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DROP_SHIP_ID &dh HEADER_ID &dh LINE_ID &dh LINE &dh ORG_ID &dh DEST_ID &dh DEST_ORG &dh REQ_HEADER_ID &dh ');
UTL_FILE.PUT_LINE(handle,'REQ_LINE_ID &dh PO_HEAD_ID &dh PO_LINE_ID &dh LINE_LOC_ID &dh PO_RELEASE_ID &eh');

Declare
cursor l_drop_ship is
select
SRC.DROP_SHIP_SOURCE_ID DROP_SHIP_ID,
SRC.HEADER_ID HEADER_ID,
SRC.LINE_ID LINE_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
SRC.ORG_ID ORG_ID,
SRC.DESTINATION_ORGANIZATION_ID DEST_ID,
PAR.ORGANIZATION_CODE DEST_ORG,
SRC.REQUISITION_HEADER_ID REQ_HEADER_ID,
SRC.REQUISITION_LINE_ID REQ_LINE_ID,
SRC.PO_HEADER_ID PO_HEAD_ID,
SRC.PO_LINE_ID PO_LINE_ID,
SRC.LINE_LOCATION_ID LINE_LOC_ID,
SRC.PO_RELEASE_ID PO_RELEASE_ID
FROM OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN,
MTL_PARAMETERS PAR
WHERE
SRC.LINE_ID = LIN.LINE_ID
and SRC.DESTINATION_ORGANIZATION_ID = PAR.ORGANIZATION_ID(+)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for ll in l_drop_ship
loop
utl_file.put_line(handle,'&sld'||n(ll.DROP_SHIP_ID)||'&d'||n(ll.HEADER_ID)||'&d');
utl_file.put_line(handle,n(ll.LINE_ID)||'&d'||n(ll.LINE)||'&d');
utl_file.put_line(handle,n(ll.ORG_ID)||'&d'||n(ll.DEST_ID)||'&d');
utl_file.put_line(handle,n(ll.DEST_ORG)||'&d'||n(ll.REQ_HEADER_ID)||'&d');
utl_file.put_line(handle,n(ll.REQ_LINE_ID)||'&d'||n(ll.PO_HEAD_ID)||'&d');
utl_file.put_line(handle,n(ll.PO_LINE_ID)||'&d'||n(ll.LINE_LOC_ID)||'&d');
utl_file.put_line(handle,n(ll.PO_RELEASE_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_po

end if; -- :v_head_only

UTL_FILE.FCLOSE(handle);
end;
/


DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
If :v_head_only = 'N' then

-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

if UPPER(nvl('&prt_po','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f PO_REQUISITIONS_INTERFACE_ALL (RQI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DROP_SHIP_ID &dh LINE &dh AUTH_STATUS &dh DELIV_LOC &dh PREPARER &dh DEST_ORG_ID &dh DEST_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'SRC_CODE &dh SRC_TYPE_CODE &dh ITEM_ID &dh NEED_BY &dh QTY &dh PRICE &el');


Declare
cursor po_req_int is
Select
RQI.INTERFACE_SOURCE_LINE_ID DROP_SHIP_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RQI.AUTHORIZATION_STATUS AUTH_STATUS,
RQI.DELIVER_TO_LOCATION_ID DELIV_LOC,
RQI.PREPARER_ID PREPARER,
RQI.DESTINATION_ORGANIZATION_ID DEST_ORG_ID,
RQI.DESTINATION_TYPE_CODE DEST_TYPE,
RQI.INTERFACE_SOURCE_CODE SRC_CODE,
RQI.SOURCE_TYPE_CODE SRC_TYPE_CODE,
RQI.ITEM_ID ITEM_ID,
to_char(RQI.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY,
RQI.QUANTITY QTY,
RQI.UNIT_PRICE PRICE
from PO_REQUISITIONS_INTERFACE_ALL RQI,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where SRC.LINE_ID = LIN.LINE_ID
and SRC.DROP_SHIP_SOURCE_ID = RQI.INTERFACE_SOURCE_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for po in po_req_int
loop
utl_file.put_line(handle,'&sld'||n(po.DROP_SHIP_ID)||'&d'||n(po.LINE)||'&d');
utl_file.put_line(handle,n(po.AUTH_STATUS)||'&d'||n(po.DELIV_LOC)||'&d');
utl_file.put_line(handle,n(po.PREPARER)||'&d'||n(po.DEST_ORG_ID)||'&d');
utl_file.put_line(handle,n(po.DEST_TYPE)||'&d'||n(po.SRC_CODE)||'&d');
utl_file.put_line(handle,n(po.SRC_TYPE_CODE)||'&d'||n(po.ITEM_ID)||'&d');
utl_file.put_line(handle,n(po.NEED_BY)||'&d'||n(po.QTY)||'&d');
utl_file.put_line(handle,n(po.PRICE)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_INTERFACE_ERRORS_ALL (POE) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_TRANS_ID &dh LINE &dh COLUMN_NAME &dh ERROR &dh INTF_TYPE &dh REQUEST_ID &dh TABLE_NAME &eh');


Declare
cursor po_int_err is
select
POE.INTERFACE_TRANSACTION_ID INTF_TRANS_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
POE.COLUMN_NAME COLUMN_NAME,
POE.ERROR_MESSAGE ERRORM,
POE.INTERFACE_TYPE INTF_TYPE,
POE.REQUEST_ID REQUEST_ID,
POE.TABLE_NAME TABLE_NAME
from
PO_INTERFACE_ERRORS POE,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN,
PO_REQUISITIONS_INTERFACE_ALL RQI
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.DROP_SHIP_SOURCE_ID = RQI.INTERFACE_SOURCE_LINE_ID
and RQI.TRANSACTION_ID = POE.INTERFACE_TRANSACTION_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for po in po_int_err
loop
utl_file.put_line(handle,'&sld'||n(po.INTF_TRANS_ID)||'&d'||n(po.LINE)||'&d');
utl_file.put_line(handle,n(po.COLUMN_NAME)||'&d'||n(po.ERRORM)||'&d');
utl_file.put_line(handle,n(po.INTF_TYPE)||'&d'||n(po.REQUEST_ID)||'&d');
utl_file.put_line(handle,n(po.TABLE_NAME)||'&el');
end loop;
end;


UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_REQUISITION_HEADERS_ALL (RQH) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh REQ_HEADER_ID &dh REQ_NUMBER &dh DROP_SHIP_ID &dh AUTH_STATUS &dh ENABLED &dh SRC_CODE &dh SUMMARY &dh ');
UTL_FILE.PUT_LINE(handle,'XFR_OE_FLAG &dh REQ_TYPE &dh ITEM_TYPE &dh ITEM_KEY &eh');

Declare
cursor po_req_hdr is
select distinct
RQH.REQUISITION_HEADER_ID REQ_HEADER_ID ,
RQH.SEGMENT1 REQ_NUMBER,
RQH.INTERFACE_SOURCE_LINE_ID DROP_SHIP_ID,
RQH.AUTHORIZATION_STATUS AUTH_STATUS,
RQH.ENABLED_FLAG ENABLED,
RQH.INTERFACE_SOURCE_CODE SRC_CODE,
RQH.SUMMARY_FLAG SUMMARY,
RQH.TRANSFERRED_TO_OE_FLAG XFR_OE_FLAG,
RQH.TYPE_LOOKUP_CODE REQ_TYPE,
RQH.WF_ITEM_TYPE ITEM_TYPE,
RQH.WF_ITEM_KEY ITEM_KEY
from
PO_REQUISITION_HEADERS_ALL RQH,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_HEADER_ID = RQH.REQUISITION_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select distinct /* INTERNAL REQ */
RQH.REQUISITION_HEADER_ID REQ_HEADER_ID ,
RQH.SEGMENT1 REQ_NUMBER,
RQH.INTERFACE_SOURCE_LINE_ID DROP_SHIP_ID,
RQH.AUTHORIZATION_STATUS AUTH_STATUS,
RQH.ENABLED_FLAG ENABLED,
RQH.INTERFACE_SOURCE_CODE SRC_CODE,
RQH.SUMMARY_FLAG SUMMARY,
RQH.TRANSFERRED_TO_OE_FLAG XFR_OE_FLAG,
RQH.TYPE_LOOKUP_CODE REQ_TYPE,
RQH.WF_ITEM_TYPE ITEM_TYPE,
RQH.WF_ITEM_KEY ITEM_KEY
from
PO_REQUISITION_HEADERS_ALL RQH,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_ID = RQH.REQUISITION_HEADER_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10 --INTERNAL REQUISITION
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select distinct /* ATO BUY ITEM */
RQH.REQUISITION_HEADER_ID REQ_HEADER_ID ,
RQH.SEGMENT1 REQ_NUMBER,
RQH.INTERFACE_SOURCE_LINE_ID DROP_SHIP_ID,
RQH.AUTHORIZATION_STATUS AUTH_STATUS,
RQH.ENABLED_FLAG ENABLED,
RQH.INTERFACE_SOURCE_CODE SRC_CODE,
RQH.SUMMARY_FLAG SUMMARY,
RQH.TRANSFERRED_TO_OE_FLAG XFR_OE_FLAG,
RQH.TYPE_LOOKUP_CODE REQ_TYPE,
RQH.WF_ITEM_TYPE ITEM_TYPE,
RQH.WF_ITEM_KEY ITEM_KEY
from
PO_REQUISITION_HEADERS_ALL RQH,
MTL_RESERVATIONS RES
where
:sales_ord_id = RES.DEMAND_SOURCE_HEADER_ID
and RES.DEMAND_SOURCE_TYPE_ID = 2 -- SO
and RES.SUPPLY_SOURCE_TYPE_ID = 17 -- Req
and RES.SUPPLY_SOURCE_HEADER_ID = RQH.REQUISITION_HEADER_ID;

begin
for po in po_req_hdr
loop
utl_file.put_line(handle,'&sld'||n(po.REQ_HEADER_ID)||'&d'||n(po.REQ_NUMBER)||'&d');
utl_file.put_line(handle,n(po.DROP_SHIP_ID)||'&d'||n(po.AUTH_STATUS)||'&d');
utl_file.put_line(handle,n(po.ENABLED)||'&d'||n(po.SRC_CODE)||'&d');
utl_file.put_line(handle,n(po.SUMMARY)||'&d'||n(po.XFR_OE_FLAG)||'&d');
utl_file.put_line(handle,n(po.REQ_TYPE)||'&d'||n(po.ITEM_TYPE)||'&d');
utl_file.put_line(handle,n(po.ITEM_KEY)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f PO_REQUISITION_LINES_ALL (RQL) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh REQ_HEAD_ID &dh REQ_LINE_ID &dh DOC_TYPE &dh REQ_LINE &dh LINE &dh ITEM_ID &dh ITEM_DESC &dh UOM &dh PRICE &dh ');
UTL_FILE.PUT_LINE(handle,'QTY &dh QTY_CNC &dh QTY_DLV &dh CANC &dh SRC_TYPE &dh SRC_ORG &dh DEST_TYPE &dh DEST_ORG &dh ENC_FL &dh LINE_TYPE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'NEED_BY &dh RFQ &dh BUYER_ID &eh');


Declare
cursor po_req_lin is
select /* DROP SHIPMENT */
RQL.REQUISITION_HEADER_ID REQ_HEAD_ID,
RQL.REQUISITION_LINE_ID REQ_LINE_ID,
'DROP SHIP' DOC_TYPE,
RQL.LINE_NUM REQ_LINE,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RQL.ITEM_ID ITEM_ID,
RQL.ITEM_DESCRIPTION ITEM_DESC,
RQL.UNIT_MEAS_LOOKUP_CODE UOM,
RQL.UNIT_PRICE PRICE,
RQL.QUANTITY QTY,
RQL.QUANTITY_CANCELLED QTY_CNC,
RQL.QUANTITY_DELIVERED QTY_DLV,
RQL.CANCEL_FLAG CANC,
RQL.SOURCE_TYPE_CODE SRC_TYPE,
RQL.SOURCE_ORGANIZATION_ID SRC_ORG,
RQL.DESTINATION_CONTEXT DEST_TYPE,
RQL.DESTINATION_ORGANIZATION_ID DEST_ORG,
RQL.ENCUMBERED_FLAG ENC_FL,
RQL.LINE_TYPE_ID LINE_TYPE_ID,
to_char(RQL.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY,
RQL.ON_RFQ_FLAG RFQ ,
RQL.SUGGESTED_BUYER_ID BUYER_ID
from
PO_REQUISITION_LINES_ALL RQL,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and RQL.REQUISITION_LINE_ID = SRC.REQUISITION_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* INTERNAL SALES ORDER */
RQL.REQUISITION_HEADER_ID REQ_HEAD_ID,
RQL.REQUISITION_LINE_ID REQ_LINE_ID,
'INTERNAL SO' DOC_TYPE,
RQL.LINE_NUM REQ_LINE,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RQL.ITEM_ID ITEM_ID,
RQL.ITEM_DESCRIPTION ITEM_DESC,
RQL.UNIT_MEAS_LOOKUP_CODE UOM,
RQL.UNIT_PRICE PRICE,
RQL.QUANTITY QTY,
RQL.QUANTITY_CANCELLED QTY_CNC,
RQL.QUANTITY_DELIVERED QTY_DLV,
RQL.CANCEL_FLAG CANC,
RQL.SOURCE_TYPE_CODE SRC_TYPE,
RQL.SOURCE_ORGANIZATION_ID SRC_ORG,
RQL.DESTINATION_CONTEXT DEST_TYPE,
RQL.DESTINATION_ORGANIZATION_ID DEST_ORG,
RQL.ENCUMBERED_FLAG ENC_FL ,
RQL.LINE_TYPE_ID LINE_TYPE_ID,
to_char(RQL.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY,
RQL.ON_RFQ_FLAG RFQ ,
RQL.SUGGESTED_BUYER_ID BUYER_ID
from
PO_REQUISITION_LINES_ALL RQL,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_LINE_ID = RQL.REQUISITION_LINE_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10 --INTERNAL REQUISITION
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for po in po_req_lin
loop
utl_file.put_line(handle,'&sld'||n(po.REQ_HEAD_ID)||'&d'||n(po.REQ_LINE_ID)||'&d');
utl_file.put_line(handle,n(po.DOC_TYPE)||'&d'||n(po.REQ_LINE)||'&d');
utl_file.put_line(handle,n(po.LINE)||'&d'||n(po.ITEM_ID)||'&d');
utl_file.put_line(handle,n(po.ITEM_DESC)||'&d'||n(po.UOM)||'&d');
utl_file.put_line(handle,n(po.PRICE)||'&d'||n(po.QTY)||'&d');
utl_file.put_line(handle,n(po.QTY_CNC)||'&d'||n(po.QTY_DLV)||'&d');
utl_file.put_line(handle,n(po.CANC)||'&d'||n(po.SRC_TYPE)||'&d');
utl_file.put_line(handle,n(po.SRC_ORG)||'&d'||n(po.DEST_TYPE)||'&d');
utl_file.put_line(handle,n(po.DEST_ORG)||'&d'||n(po.ENC_FL)||'&d');
utl_file.put_line(handle,n(po.LINE_TYPE_ID)||'&d'||n(po.NEED_BY)||'&d');
utl_file.put_line(handle,n(po.RFQ)||'&d'||n(po.BUYER_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW REQUISITION APPROVAL STATUS &f');

-- break on REQ_NUM_IK skip 2;

UTL_FILE.PUT_LINE(handle,'&std &sh REQ_NUM_IK &dh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh _BEGIN_DATE_ &dh ');
UTL_FILE.PUT_LINE(handle,'_END_DATE_ &dh ERROR &eh');

Declare
cursor po_req_apprv is
select WFS.item_key REQ_NUM_IK,
WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.NOTIFICATION_ID NOTIF_ID,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE,
WFS.ERROR_NAME ERROR_apprv
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'REQAPPRV'
and WFS.item_key in (select wf_item_key /*DROP SHIPMENTS*/
from
PO_REQUISITION_HEADERS REQ,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_HEADER_ID = REQ.REQUISITION_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select wf_item_key /* INTERNAL SALES ORDERSS */
from
PO_REQUISITION_HEADERS REQ,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_ID = REQ.REQUISITION_HEADER_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for po in po_req_apprv
loop
utl_file.put_line(handle,'&sld'||n(po.REQ_NUM_IK)||'&d'||n(po.PROCESS_NAME)||'&d');
utl_file.put_line(handle,n(po.ACTIVITY_NAME)||'&d'||n(po.RESULT)||'&d');
utl_file.put_line(handle,n(po.ACT_STATUS)||'&d'||n(po.NOTIF_ID)||'&d');
utl_file.put_line(handle,n(po.BEGIN_DATE)||'&d'||n(po.END_DATE)||'&d');
utl_file.put_line(handle,n(po.ERROR_APPRV)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW REQUISITION APPROVAL NOTIFICATIONS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');


Declare
cursor po_req_apprv_not is
select WFN.NOTIFICATION_ID NOTIF_ID,
WFN.TO_USER TO_USER,
WFN.ORIGINAL_RECIPIENT ORIG_RECIP,
WFN.RECIPIENT_ROLE RECIP_ROLE,
WFN.MAIL_STATUS MAIL_STAT,
WFN.MESSAGE_NAME MESSAGE_NAME,
WFN.STATUS STATUS,
WFN.SUBJECT SUBJECT
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_NOTIFICATIONS WFN
where
WFS.ITEM_TYPE = 'REQAPPRV'
and WFS.item_key in (select wf_item_key /* DROP SHIPMENTS */
from
PO_REQUISITION_HEADERS REQ,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_HEADER_ID = REQ.REQUISITION_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select wf_item_key /* INTERNAL SALES ORDERSS */
from
PO_REQUISITION_HEADERS REQ,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_ID = REQ.REQUISITION_HEADER_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and WFS.NOTIFICATION_ID is not null
and WFN.NOTIFICATION_ID = WFS.NOTIFICATION_ID
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for po in po_req_apprv_Not
loop
utl_file.put_line(handle,'&sld'||n(po.NOTIF_ID)||'&d'||n(po.To_USER)||'&d');
utl_file.put_line(handle,n(po.ORIG_RECIP)||'&d'||n(po.RECIP_ROLE)||'&d');
utl_file.put_line(handle,n(po.MAIL_STAT)||'&d'||n(po.MESSAGE_NAME)||'&d');
utl_file.put_line(handle,n(po.STATUS)||'&d'||n(po.SUBJECT)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW REQUISITION APPROVAL ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor po_req_apprv_err is
select WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.ERROR_NAME ERROR_NAME,
WFS.ERROR_MESSAGE ERROR_MESSAGE,
WFS.ERROR_STACK ERROR_STACK
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'REQAPPRV'
and WFS.item_key in (select wf_item_key /* DROP SHIPMENTS */
from
PO_REQUISITION_HEADERS REQ,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_HEADER_ID = REQ.REQUISITION_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select wf_item_key /* INTERNAL SALES ORDERSS */
from
PO_REQUISITION_HEADERS REQ,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_ID = REQ.REQUISITION_HEADER_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFS.ERROR_NAME is not NULL
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for po in po_req_apprv_err
loop
utl_file.put_line(handle,'&sld'||n(po.PROCESS_NAME)||'&d'||n(po.ACTIVITY_NAME)||'&d');
utl_file.put_line(handle,n(po.RESULT)||'&d'||n(po.ACT_STATUS)||'&d');
utl_file.put_line(handle,n(po.ERROR_NAME)||'&d'||n(po.ERROR_MESSAGE)||'&d');
utl_file.put_line(handle,n(po.ERROR_STACK)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_HEADERS_INTERFACE (PHI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_HEAD_ID &dh BATCH_ID &dh INTF_SRC_CODE &dh PROCESS_CODE &dh ACTION &dh PO_HEADER_ID &dh REL_NUM &dh');
UTL_FILE.PUT_LINE(handle,'PO_RELEASE_ID &dh VENDOR_NAME &dh APPRV_STAT &dh FIRM &dh FROZEN &dh CLOSE_CODE &dh CLOSE_DATE &dh APPRV_REQD &dh');
UTL_FILE.PUT_LINE(handle,'REF_NUM &dh VEND_NUM &dh WF_GROUP_ID &eh');

Declare
cursor po_hdr_int is
select
PHI.INTERFACE_HEADER_ID INTF_HEAD_ID,
PHI.BATCH_ID BATCH_ID,
PHI.INTERFACE_SOURCE_CODE INTF_SRC_CODE,
PHI.PROCESS_CODE PROCESS_CODE,
PHI.ACTION ACTION,
PHI.PO_HEADER_ID PO_HEADER_ID,
PHI.RELEASE_NUM REL_NUM,
PHI.PO_RELEASE_ID PO_RELEASE_ID,
PHI.VENDOR_NAME VENDOR_NAME,
PHI.APPROVAL_STATUS APPRV_STAT,
PHI.FIRM_FLAG FIRM,
PHI.FROZEN_FLAG FROZEN,
PHI.CLOSED_CODE CLOSE_CODE,
to_char(PHI.CLOSED_DATE,'DD-MON-RR_HH24:MI:SS') CLOSE_DATE,
PHI.APPROVAL_REQUIRED_FLAG APPRV_REQD,
PHI.REFERENCE_NUM REF_NUM,
PHI.VENDOR_NUM VEND_NUM,
PHI.WF_GROUP_ID WF_GROUP_ID
from
PO_HEADERS_INTERFACE PHI,
PO_LINES_INTERFACE PLI,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_LINE_ID = PLI.REQUISITION_LINE_ID
and PHI.INTERFACE_HEADER_ID = PLI.INTERFACE_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for po in po_hdr_int
loop
utl_file.put_line(handle,'&sld'||n(po.INTF_HEAD_ID)||'&d'||n(po.BATCH_ID)||'&d');
utl_file.put_line(handle,n(po.INTF_SRC_CODE)||'&d'||n(po.PROCESS_CODE)||'&d');
utl_file.put_line(handle,n(po.ACTION)||'&d'||n(po.PO_HEADER_ID)||'&d');
utl_file.put_line(handle,n(po.REL_NUM)||'&d'||n(po.PO_RELEASE_ID)||'&d');
utl_file.put_line(handle,n(po.VENDOR_NAME)||'&d'||n(po.APPRV_STAT)||'&d');
utl_file.put_line(handle,n(po.FIRM)||'&d'||n(po.FROZEN)||'&d');
utl_file.put_line(handle,n(po.CLOSE_CODE)||'&d'||n(po.CLOSE_DATE)||'&d');
utl_file.put_line(handle,n(po.APPRV_REQD)||'&d'||n(po.REF_NUM)||'&d');
utl_file.put_line(handle,n(po.VEND_NUM)||'&d'||n(po.WF_GROUP_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f PO_LINES_INTERFACE (PLI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_LINE_ID &dh INTF_HEAD_ID &dh ACTION &dh PO_LINE &dh LINE &dh PO_LINE_ID &dh SHIP_NUM &dh SHIP_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'REQ_LINE_ID &dh PO_HEADER_ID &dh LINE_TYPE &dh ITEM &dh UOM &dh QUANTITY &dh PRICE &dh FIRM &dh SHIP_ORG_CODE &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_ORG_ID &dh SHIP_TO_LOC &dh SHIP_TO_LOC_ID &dh NEED_BY &dh PROMISE &dh WAREH_ID &eh');

Declare
cursor po_lin_int is
select
PLI.INTERFACE_LINE_ID INTF_LINE_ID,
PLI.INTERFACE_HEADER_ID INTF_HEAD_ID,
PLI.ACTION ACTION,
PLI.LINE_NUM PO_LINE,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
PLI.PO_LINE_ID PO_LINE_ID,
PLI.SHIPMENT_NUM SHIP_NUM,
PLI.SHIPMENT_TYPE SHIP_TYPE,
PLI.REQUISITION_LINE_ID REQ_LINE_ID,
PLI.PO_HEADER_ID PO_HEADER_ID,
PLI.LINE_TYPE LINE_TYPE,
PLI.ITEM ITEM,
PLI.UNIT_OF_MEASURE UOM,
PLI.QUANTITY QUANTITY,
PLI.UNIT_PRICE PRICE,
PLI.FIRM_FLAG FIRM,
PLI.SHIP_TO_ORGANIZATION_CODE SHIP_ORG_CODE,
PLI.SHIP_TO_ORGANIZATION_ID SHIP_ORG_ID,
PLI.SHIP_TO_LOCATION SHIP_TO_LOC,
PLI.SHIP_TO_LOCATION_ID SHIP_TO_LOC_ID,
to_char(PLI.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY,
to_char(PLI.PROMISED_DATE,'DD-MON-RR_HH24:MI:SS') PROMISE,
PLI.ORGANIZATION_ID WAREH_ID
from PO_LINES_INTERFACE PLI,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_LINE_ID = PLI.REQUISITION_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for po in po_lin_int
loop
utl_file.put_line(handle,'&sld'||n(po.INTF_LINE_ID)||'&d'||n(po.INTF_HEAD_ID)||'&d');
utl_file.put_line(handle,n(po.ACTION)||'&d'||n(po.PO_LINE)||'&d');
utl_file.put_line(handle,n(po.LINE)||'&d'||n(po.PO_LINE_ID)||'&d');
utl_file.put_line(handle,n(po.SHIP_NUM)||'&d'||n(po.SHIP_TYPE)||'&d');
utl_file.put_line(handle,n(po.REQ_LINE_ID)||'&d'||n(po.PO_HEADER_ID)||'&d');
utl_file.put_line(handle,n(po.LINE_TYPE)||'&d'||n(po.ITEM)||'&d');
utl_file.put_line(handle,n(po.UOM)||'&d'||n(po.QUANTITY)||'&d');
utl_file.put_line(handle,n(po.PRICE)||'&d'||n(po.FIRM)||'&d');
utl_file.put_line(handle,n(po.SHIP_ORG_CODE)||'&d'||n(po.SHIP_ORG_ID)||'&d');
utl_file.put_line(handle,n(po.SHIP_TO_LOC)||'&d'||n(po.SHIP_TO_LOC_ID)||'&d');
utl_file.put_line(handle,n(po.NEED_BY)||'&d'||n(po.PROMISE)||'&d');
utl_file.put_line(handle,n(po.WAREH_ID)||'&el');
end loop;
end;
UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f PO_INTERFACE_ERRORS_ALL (POE) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INF_TRANS_ID &dh COLUMN_NAME &dh ERROR &dh INF_TYPE &dh REQUEST_ID &dh TABLE_NAME &eh');

Declare
cursor po_int_err is
select
POE.INTERFACE_TRANSACTION_ID INF_TRANS_ID,
POE.COLUMN_NAME COLUMN_NAME,
POE.ERROR_MESSAGE ERROR_M,
POE.INTERFACE_TYPE INF_TYPE,
POE.REQUEST_ID REQUEST_ID,
POE.TABLE_NAME TABLE_N
from
PO_INTERFACE_ERRORS POE,
PO_HEADERS_INTERFACE PHI,
PO_LINES_INTERFACE PLI,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.REQUISITION_LINE_ID = PLI.REQUISITION_LINE_ID
and PHI.INTERFACE_HEADER_ID = PLI.INTERFACE_HEADER_ID
and (POE.INTERFACE_TRANSACTION_ID = PLI.INTERFACE_LINE_ID
or POE.INTERFACE_TRANSACTION_ID = PHI.INTERFACE_HEADER_ID)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for po in po_int_err
loop
utl_file.put_line(handle,'&sld'||n(po.INF_TRANS_ID)||'&d'||n(po.COLUMN_NAME)||'&d');
utl_file.put_line(handle,n(po.ERROR_M)||'&d'||n(po.INF_TYPE)||'&d');
utl_file.put_line(handle,n(po.REQUEST_ID)||'&d'||n(po.TABLE_N)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f PO_HEADERS_ALL (POH) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PO_HEADER_ID &dh PO_NUM &dh ACCEPT_REQD &dh BILL_TO &dh SHIP_TO &dh CLS_STAT &dh CONF_ORD &dh CURR &dh ');
UTL_FILE.PUT_LINE(handle,'ENABLED &dh FROZEN &dh SUMM &dh TYPE &dh VEND_CNCACT &dh VEND_ID &dh VEND_SITE &dh ITEM_TYPE &dh ITEM_KEY &eh');


Declare
cursor po_hdr is
select
POH.PO_HEADER_ID PO_HEADER_ID,
POH.SEGMENT1 PO_NUM,
POH.ACCEPTANCE_REQUIRED_FLAG ACCEPT_REQD,
POH.BILL_TO_LOCATION_ID BILL_TO,
POH.SHIP_TO_LOCATION_ID SHIP_TO,
POH.CLOSED_CODE CLS_STAT,
POH.CONFIRMING_ORDER_FLAG CONF_ORD,
POH.CURRENCY_CODE CURR,
POH.ENABLED_FLAG ENABLED,
POH.FROZEN_FLAG FROZEN,
POH.SUMMARY_FLAG SUMM,
POH.TYPE_LOOKUP_CODE TYPE,
POH.VENDOR_CONTACT_ID VEND_CONT,
POH.VENDOR_ID VEND_ID,
POH.VENDOR_SITE_ID VEND_SITE,
POH.WF_ITEM_TYPE ITEM_TYPE,
POH.WF_ITEM_KEY ITEM_KEY
from
PO_HEADERS POH,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_HEADER_ID = POH.PO_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select distinct /* ATO BUY ITEM */
POH.PO_HEADER_ID PO_HEADER_ID,
POH.SEGMENT1 PO_NUM,
POH.ACCEPTANCE_REQUIRED_FLAG ACCEPT_REQD,
POH.BILL_TO_LOCATION_ID BILL_TO,
POH.SHIP_TO_LOCATION_ID SHIP_TO,
POH.CLOSED_CODE CLS_STAT,
POH.CONFIRMING_ORDER_FLAG CONF_ORD,
POH.CURRENCY_CODE CURR,
POH.ENABLED_FLAG ENABLED,
POH.FROZEN_FLAG FROZEN,
POH.SUMMARY_FLAG SUMM,
POH.TYPE_LOOKUP_CODE TYPE,
POH.VENDOR_CONTACT_ID VEND_CONT,
POH.VENDOR_ID VEND_ID,
POH.VENDOR_SITE_ID VEND_SITE,
POH.WF_ITEM_TYPE ITEM_TYPE,
POH.WF_ITEM_KEY ITEM_KEY
from
PO_HEADERS POH,
MTL_RESERVATIONS RES
where
:sales_ord_id = RES.DEMAND_SOURCE_HEADER_ID
and RES.DEMAND_SOURCE_TYPE_ID = 2 -- SO
and RES.SUPPLY_SOURCE_TYPE_ID in (1,13) -- PO or INV
and RES.SUPPLY_SOURCE_HEADER_ID = POH.PO_HEADER_ID;

begin
for po in po_hdr
loop
utl_file.put_line(handle,'&sld'||n(po.PO_HEADER_ID)||'&d'||n(po.PO_NUM)||'&d');
utl_file.put_line(handle,n(po.ACCEPT_REQD)||'&d'||n(po.BILL_TO)||'&d');
utl_file.put_line(handle,n(po.SHIP_TO)||'&d'||n(po.CLS_STAT)||'&d');
utl_file.put_line(handle,n(po.CONF_ORD)||'&d'||n(po.CURR)||'&d');
utl_file.put_line(handle,n(po.ENABLED)||'&d'||n(po.FROZEN)||'&d');
utl_file.put_line(handle,n(po.SUMM)||'&d'||n(po.TYPE)||'&d');
utl_file.put_line(handle,n(po.VEND_CONT)||'&d'||n(po.VEND_ID)||'&d');
utl_file.put_line(handle,n(po.VEND_SITE)||'&d'||n(po.ITEM_TYPE)||'&d');
utl_file.put_line(handle,n(po.ITEM_KEY)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f PO_LINES (POL) &f');


UTL_FILE.PUT_LINE(handle,'&std &sh PO_HEADER_ID &dh PO_LINE_ID &dh PO_LINE &dh LINE &dh CATEGORY_ID &dh CLS_STAT &dh FIRM &dh ITEM_DESC &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM_ID &dh LINE_TYPE_ID &dh QTY &dh PRICE &eh');

Declare
cursor po_lines is
select
POL.PO_HEADER_ID PO_HEADER_ID,
POL.PO_LINE_ID PO_LINE_ID,
POL.LINE_NUM PO_LINE,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
POL.CATEGORY_ID CATEGORY_ID,
POL.CLOSED_CODE CLS_STAT,
POL.FIRM_STATUS_LOOKUP_CODE FIRM,
POL.ITEM_DESCRIPTION ITEM_DESC,
POL.ITEM_ID ITEM_ID,
POL.LINE_TYPE_ID LINE_TYPE_ID,
POL.QUANTITY QTY,
POL.UNIT_PRICE PRICE
from
PO_LINES POL,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_LINE_ID = POL.PO_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID;

begin
for po in po_lines
loop
utl_file.put_line(handle,'&sld'||n(po.PO_HEADER_ID)||'&d'||n(po.PO_LINE_ID)||'&d');
utl_file.put_line(handle,n(po.PO_LINE)||'&d'||n(po.LINE)||'&d');
utl_file.put_line(handle,n(po.CATEGORY_ID)||'&d'||n(po.CLS_STAT)||'&d');
utl_file.put_line(handle,n(po.FIRM)||'&d'||n(po.ITEM_DESC)||'&d');
utl_file.put_line(handle,n(po.ITEM_ID)||'&d'||n(po.LINE_TYPE_ID)||'&d');
utl_file.put_line(handle,n(po.QTY)||'&d'||n(po.PRICE)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW PURCHASE ORDER APPROVAL STATUS &f');

UTL_FILE.PUT_LINE(handle,'&std &sh PO_NUM_IK &dh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh NOTIF_ID &dh ');
UTL_FILE.PUT_LINE(handle,'BEGIN_DATE &dh END_DATE &dh ERROR &eh');

Declare
cursor po_wf_po_apr is
select WFS.item_key PO_NUM_IK,
WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.NOTIFICATION_ID NOTIF_ID,
to_char(WFS.BEGIN_DATE,'DD-MON-RR_HH24:MI:SS') BEGIN_DATE,
to_char(WFS.END_DATE,'DD-MON-RR_HH24:MI:SS') END_DATE,
WFS.ERROR_NAME ERROR_N
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'POAPPRV'
and WFS.item_key in (select wf_item_key
from
PO_HEADERS POH,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_HEADER_ID = POH.PO_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for po in po_wf_po_apr
loop
utl_file.put_line(handle,'&sld'||n(po.PO_NUM_IK)||'&d'||n(po.PROCESS_NAME)||'&d');
utl_file.put_line(handle,n(po.ACTIVITY_NAME)||'&d'||n(po.RESULT)||'&d');
utl_file.put_line(handle,n(po.ACT_STATUS)||'&d'||n(po.NOTIF_ID)||'&d');
utl_file.put_line(handle,n(po.BEGIN_DATE)||'&d'||n(po.END_DATE)||'&d');
utl_file.put_line(handle,n(po.ERROR_N)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW PURCHASE APPROVAL NOTIFICATIONS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh NOTIF_ID &dh TO_USER &dh ORIG_RECIP &dh RECIP_ROLE &dh MAIL_STAT &dh MESSAGE_NAME &dh STATUS &dh SUBJECT &eh');

Declare
cursor po_wf_not is
select WFN.NOTIFICATION_ID NOTIF_ID,
WFN.TO_USER TO_USER,
WFN.ORIGINAL_RECIPIENT ORIG_RECIP,
WFN.RECIPIENT_ROLE RECIP_ROLE,
WFN.MAIL_STATUS MAIL_STAT,
WFN.MESSAGE_NAME MESSAGE_NAME,
WFN.STATUS STATUS,
WFN.SUBJECT SUBJECT
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_NOTIFICATIONS WFN
where
WFS.ITEM_TYPE = 'POAPPRV'
and WFS.item_key in (select wf_item_key
from
PO_HEADERS POH,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_HEADER_ID = POH.PO_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and WFS.NOTIFICATION_ID is not null
and WFN.NOTIFICATION_ID = WFS.NOTIFICATION_ID
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for po in po_wf_not
loop
utl_file.put_line(handle,'&sld'||n(po.NOTIF_ID)||'&d'||n(po.TO_USER)||'&d');
utl_file.put_line(handle,n(po.ORIG_RECIP)||'&d'||n(po.RECIP_ROLE)||'&d');
utl_file.put_line(handle,n(po.MAIL_STAT)||'&d'||n(po.MESSAGE_NAME)||'&d');
utl_file.put_line(handle,n(po.STATUS)||'&d'||n(po.SUBJECT)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f WORKFLOW PURCHASE APPROVAL ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh PROCESS_NAME &dh ACTIVITY_NAME &dh RESULT &dh ACT_STATUS &dh ERROR_NAME &dh ERROR_MESSAGE &dh ERROR_STACK &eh');

Declare
cursor po_hdr_int is
select WFA.DISPLAY_NAME PROCESS_NAME,
WFA1.DISPLAY_NAME ACTIVITY_NAME,
WF_CORE.ACTIVITY_RESULT(WFA1.RESULT_TYPE,WFS.ACTIVITY_RESULT_CODE) RESULT,
LKP.MEANING ACT_STATUS,
WFS.ERROR_NAME ERROR_NAME,
WFS.ERROR_MESSAGE ERROR_MESSAGE,
WFS.ERROR_STACK ERROR_STACK
from WF_ITEM_ACTIVITY_STATUSES WFS,
WF_PROCESS_ACTIVITIES WFP,
WF_ACTIVITIES_VL WFA,
WF_ACTIVITIES_VL WFA1,
WF_LOOKUPS LKP
where
WFS.ITEM_TYPE = 'POAPPRV'
and WFS.item_key in (select wf_item_key
from
PO_HEADERS POH,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_HEADER_ID = POH.PO_HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and WFS.PROCESS_ACTIVITY = WFP.INSTANCE_ID
and WFP.PROCESS_ITEM_TYPE = WFA.ITEM_TYPE
and WFP.PROCESS_NAME = WFA.NAME
and WFP.PROCESS_VERSION = WFA.VERSION
and WFP.ACTIVITY_ITEM_TYPE = WFA1.ITEM_TYPE
and WFP.ACTIVITY_NAME = WFA1.NAME
and WFA1.VERSION =
(select max(VERSION)
from WF_ACTIVITIES WF2
where WF2.ITEM_TYPE = WFP.ACTIVITY_ITEM_TYPE
and WF2.NAME = WFP.ACTIVITY_NAME)
and LKP.LOOKUP_TYPE = 'WFENG_STATUS'
and LKP.LOOKUP_CODE = WFS.ACTIVITY_STATUS
and WFS.ERROR_NAME is not NULL
order by WFS.ITEM_KEY, WFS.BEGIN_DATE, EXECUTION_TIME;

begin
for po in po_hdr_int
loop
utl_file.put_line(handle,'&sld'||n(po.PROCESS_NAME)||'&d'||n(po.ACTIVITY_NAME)||'&d');
utl_file.put_line(handle,n(po.RESULT)||'&d'||n(po.ACT_STATUS)||'&d');
utl_file.put_line(handle,n(po.ERROR_NAME)||'&d'||n(po.ERROR_MESSAGE)||'&d');
utl_file.put_line(handle,n(po.ERROR_STACK)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_po

if UPPER(nvl('&prt_rec','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f RCV_SHIPMENT_LINES (SHL) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh SHP_LN_ID &dh SHP_HD_ID &dh SHP_LINE_STATUS &dh RCV_Q &dh SHP_Q &dh DEST_TYPE &dh OE_HD_ID &dh OE_LN_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM_ID &dh TO_ORG &dh SRC_DOC &dh REQUEST_ID &eh');

Declare
cursor rcv_shp_lin is
select /* DROP SHIPMENTS */
SHL.SHIPMENT_LINE_ID SHP_LN_ID,
SHL.SHIPMENT_HEADER_ID SHP_HD_ID,
SHL.SHIPMENT_LINE_STATUS_CODE SHP_LINE_STATUS,
SHL.QUANTITY_RECEIVED RCV_Q,
SHL.QUANTITY_SHIPPED SHP_Q,
SHL.DESTINATION_TYPE_CODE DEST_TYPE,
SHL.OE_ORDER_HEADER_ID OE_HD_ID,
SHL.OE_ORDER_LINE_ID OE_LN_ID,
SHL.ITEM_ID ITEM_ID,
SHL.SHIP_TO_LOCATION_ID TO_ORG,
SHL.SOURCE_DOCUMENT_CODE SRC_DOC,
SHL.REQUEST_ID REQUEST_ID
from
RCV_SHIPMENT_LINES SHL,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_LINE_ID = SHL.PO_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* RETURNS */
SHL.SHIPMENT_LINE_ID SHP_LN_ID,
SHL.SHIPMENT_HEADER_ID SHP_HD_ID,
SHL.SHIPMENT_LINE_STATUS_CODE SHP_LINE_STATUS,
SHL.QUANTITY_RECEIVED RCV_Q,
SHL.QUANTITY_SHIPPED SHP_Q,
SHL.DESTINATION_TYPE_CODE DEST_TYPE,
SHL.OE_ORDER_HEADER_ID OE_HD_ID,
SHL.OE_ORDER_LINE_ID OE_LN_ID,
SHL.ITEM_ID ITEM_ID,
SHL.SHIP_TO_LOCATION_ID TO_ORG,
SHL.SOURCE_DOCUMENT_CODE SRC_DOC,
SHL.REQUEST_ID REQUEST_ID
from
RCV_SHIPMENT_LINES SHL,
OE_ORDER_LINES LIN
where
SHL.OE_ORDER_LINE_ID = LIN.LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* INTERNAL SALES ORDER */
SHL.SHIPMENT_LINE_ID SHP_LN_ID,
SHL.SHIPMENT_HEADER_ID SHP_HD_ID,
SHL.SHIPMENT_LINE_STATUS_CODE SHP_LINE_STATUS,
SHL.QUANTITY_RECEIVED RCV_Q,
SHL.QUANTITY_SHIPPED SHP_Q,
SHL.DESTINATION_TYPE_CODE DEST_TYPE,
SHL.OE_ORDER_HEADER_ID OE_HD_ID,
SHL.OE_ORDER_LINE_ID OE_LN_ID,
SHL.ITEM_ID ITEM_ID,
SHL.SHIP_TO_LOCATION_ID TO_ORG,
SHL.SOURCE_DOCUMENT_CODE SRC_DOC,
SHL.REQUEST_ID REQUEST_ID
from
RCV_SHIPMENT_LINES SHL,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_LINE_ID = SHL.REQUISITION_LINE_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* ATO BUY ITEM */
SHL.SHIPMENT_LINE_ID SHP_LN_ID,
SHL.SHIPMENT_HEADER_ID SHP_HD_ID,
SHL.SHIPMENT_LINE_STATUS_CODE SHP_LINE_STATUS,
SHL.QUANTITY_RECEIVED RCV_Q,
SHL.QUANTITY_SHIPPED SHP_Q,
SHL.DESTINATION_TYPE_CODE DEST_TYPE,
SHL.OE_ORDER_HEADER_ID OE_HD_ID,
SHL.OE_ORDER_LINE_ID OE_LN_ID,
SHL.ITEM_ID ITEM_ID,
SHL.SHIP_TO_LOCATION_ID TO_ORG,
SHL.SOURCE_DOCUMENT_CODE SRC_DOC,
SHL.REQUEST_ID REQUEST_ID
from
RCV_SHIPMENT_LINES SHL,
MTL_RESERVATIONS RES,
PO_HEADERS_ALL POH
where
:sales_ord_id = RES.DEMAND_SOURCE_HEADER_ID
and RES.DEMAND_SOURCE_LINE_ID = NVL('&line_id_selected',RES.DEMAND_SOURCE_LINE_ID)
and RES.DEMAND_SOURCE_TYPE_ID = 2 -- SO
and RES.SUPPLY_SOURCE_TYPE_ID in (1,13) -- PO or INV
and RES.SUPPLY_SOURCE_HEADER_ID = POH.PO_HEADER_ID --
and POH.PO_HEADER_ID = SHL.PO_HEADER_ID;

begin
for rcv in rcv_shp_lin
loop
utl_file.put_line(handle,'&sld'||n(rcv.SHP_LN_ID)||'&d'||n(rcv.SHP_HD_ID)||'&d');
utl_file.put_line(handle,n(rcv.SHP_LINE_STATUS)||'&d'||n(rcv.RCV_Q)||'&d');
utl_file.put_line(handle,n(rcv.SHP_Q)||'&d'||n(rcv.DEST_TYPE)||'&d');
utl_file.put_line(handle,n(rcv.OE_HD_ID)||'&d'||n(rcv.OE_LN_ID)||'&d');
utl_file.put_line(handle,n(rcv.ITEM_ID)||'&d'||n(rcv.TO_ORG)||'&d');
utl_file.put_line(handle,n(rcv.SRC_DOC)||'&d'||n(rcv.REQUEST_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f RCV_TRANSACTIONS (RCV) &f');

UTL_FILE.PUT_LINE(handle,'&std &sh TRANS_ID &dh PRNT_TRANS_ID &dh LINE &dh TRANS_TYPE &dh TRANS_DATE &dh DEST_TYPE &dh INSPECT_STAT &dh ');
UTL_FILE.PUT_LINE(handle,'INTF_SRC &dh INTF_TRANS_ID &dh LOC_ID &dh MVT_STAT &dh ORG_ID &dh OE_HEAD_ID &dh OE_LINE_ID &dh PO_HEAD_ID &dh ');
UTL_FILE.PUT_LINE(handle,'PO_LINE_ID &dh LINE_LOC_ID &dh UNIT_PRICE &dh UOM &dh QTY &dh REQUEST_ID &dh SHIP_HEAD_ID &dh SHIP_LINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SRC_DOC_CODE &dh VEND_ID &dh VEND_SITE_ID &eh');

Declare
cursor rcv_trx is
select /* DROP SHIPMENTS */
RCV.TRANSACTION_ID TRANS_ID,
RCV.PARENT_TRANSACTION_ID PRNT_TRANS_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RCV.TRANSACTION_TYPE TRANS_TYPE,
to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
RCV.DESTINATION_TYPE_CODE DEST_TYPE,
RCV.INSPECTION_STATUS_CODE INSPECT_STAT,
RCV.INTERFACE_SOURCE_CODE INTF_SRC,
RCV.INTERFACE_TRANSACTION_ID INTF_TRANS_ID,
RCV.LOCATION_ID LOC_ID,
RCV.MVT_STAT_STATUS MVT_STAT,
RCV.ORGANIZATION_ID ORG_ID,
RCV.OE_ORDER_HEADER_ID OE_HEAD_ID,
RCV.OE_ORDER_LINE_ID OE_LINE_ID,
RCV.PO_HEADER_ID PO_HEAD_ID,
RCV.PO_LINE_ID PO_LINE_ID,
RCV.PO_LINE_LOCATION_ID LINE_LOC_ID,
RCV.PO_UNIT_PRICE UNIT_PRICE,
RCV.PRIMARY_UNIT_OF_MEASURE UOM,
RCV.QUANTITY QTY,
RCV.REQUEST_ID REQUEST_ID,
RCV.SHIPMENT_HEADER_ID SHIP_HEAD_ID,
RCV.SHIPMENT_LINE_ID SHIP_LINE_ID,
RCV.SOURCE_DOCUMENT_CODE SRC_DOC_CODE,
RCV.VENDOR_ID VEND_ID,
RCV.VENDOR_SITE_ID VEND_SITE_ID
from
RCV_TRANSACTIONS RCV,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_LINE_ID = RCV.PO_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* RETURNS */
RCV.TRANSACTION_ID TRANS_ID,
RCV.PARENT_TRANSACTION_ID PRNT_TRANS_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RCV.TRANSACTION_TYPE TRANS_TYPE,
to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
RCV.DESTINATION_TYPE_CODE DEST_TYPE,
RCV.INSPECTION_STATUS_CODE INSPECT_STAT,
RCV.INTERFACE_SOURCE_CODE INTF_SRC_CODE,
RCV.INTERFACE_TRANSACTION_ID INTF_TRANS_ID,
RCV.LOCATION_ID LOC_ID,
RCV.MVT_STAT_STATUS MVT_STAT,
RCV.ORGANIZATION_ID ORG_ID,
RCV.OE_ORDER_HEADER_ID OE_HEAD_ID,
RCV.OE_ORDER_LINE_ID OE_LINE_ID,
RCV.PO_HEADER_ID PO_HEAD_ID,
RCV.PO_LINE_ID PO_LINE_ID,
RCV.PO_LINE_LOCATION_ID LINE_LOC_ID,
RCV.PO_UNIT_PRICE UNIT_PRICE,
RCV.PRIMARY_UNIT_OF_MEASURE UOM,
RCV.QUANTITY QTY,
RCV.REQUEST_ID REQUEST_ID,
RCV.SHIPMENT_HEADER_ID SHIP_HEAD_ID,
RCV.SHIPMENT_LINE_ID SHIP_LINE_ID,
RCV.SOURCE_DOCUMENT_CODE SRC_DOC_CODE,
RCV.VENDOR_ID VEND_ID,
RCV.VENDOR_SITE_ID VEND_SITE_ID
from
RCV_TRANSACTIONS RCV,
OE_ORDER_LINES LIN
where
RCV.OE_ORDER_LINE_ID = LIN.LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* INTERNAL SALES ORDERS */
RCV.TRANSACTION_ID TRANS_ID,
RCV.PARENT_TRANSACTION_ID PRNT_TRANS_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RCV.TRANSACTION_TYPE TRANS_TYPE,
to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
RCV.DESTINATION_TYPE_CODE DEST_TYPE,
RCV.INSPECTION_STATUS_CODE INSPECT_STAT,
RCV.INTERFACE_SOURCE_CODE INTF_SRC_CODE,
RCV.INTERFACE_TRANSACTION_ID INTF_TRANS_ID,
RCV.LOCATION_ID LOC_ID,
RCV.MVT_STAT_STATUS MVT_STAT,
RCV.ORGANIZATION_ID ORG_ID,
RCV.OE_ORDER_HEADER_ID OE_HEAD_ID,
RCV.OE_ORDER_LINE_ID OE_LINE_ID,
RCV.PO_HEADER_ID PO_HEAD_ID,
RCV.PO_LINE_ID PO_LINE_ID,
RCV.PO_LINE_LOCATION_ID LINE_LOC_ID,
RCV.PO_UNIT_PRICE UNIT_PRICE,
RCV.PRIMARY_UNIT_OF_MEASURE UOM,
RCV.QUANTITY QTY,
RCV.REQUEST_ID REQUEST_ID,
RCV.SHIPMENT_HEADER_ID SHIP_HEAD_ID,
RCV.SHIPMENT_LINE_ID SHIP_LINE_ID,
RCV.SOURCE_DOCUMENT_CODE SRC_DOC_CODE,
RCV.VENDOR_ID VEND_ID,
RCV.VENDOR_SITE_ID VEND_SITE_ID
from
RCV_TRANSACTIONS RCV,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_LINE_ID = RCV.REQUISITION_LINE_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* ATO BUY ITEM */
RCV.TRANSACTION_ID TRANS_ID,
RCV.PARENT_TRANSACTION_ID PRNT_TRANS_ID,
to_char(RES.DEMAND_SOURCE_LINE_ID) LINE,
RCV.TRANSACTION_TYPE TRANS_TYPE,
to_char(RCV.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRANS_DATE,
RCV.DESTINATION_TYPE_CODE DEST_TYPE,
RCV.INSPECTION_STATUS_CODE INSPECT_STAT,
RCV.INTERFACE_SOURCE_CODE INTF_SRC_CODE,
RCV.INTERFACE_TRANSACTION_ID INTF_TRANS_ID,
RCV.LOCATION_ID LOC_ID,
RCV.MVT_STAT_STATUS MVT_STAT,
RCV.ORGANIZATION_ID ORG_ID,
RCV.OE_ORDER_HEADER_ID OE_HEAD_ID,
RCV.OE_ORDER_LINE_ID OE_LINE_ID,
RCV.PO_HEADER_ID PO_HEAD_ID,
RCV.PO_LINE_ID PO_LINE_ID,
RCV.PO_LINE_LOCATION_ID LINE_LOC_ID,
RCV.PO_UNIT_PRICE UNIT_PRICE,
RCV.PRIMARY_UNIT_OF_MEASURE UOM,
RCV.QUANTITY QTY,
RCV.REQUEST_ID REQUEST_ID,
RCV.SHIPMENT_HEADER_ID SHIP_HEAD_ID,
RCV.SHIPMENT_LINE_ID SHIP_LINE_ID,
RCV.SOURCE_DOCUMENT_CODE SRC_DOC_CODE,
RCV.VENDOR_ID VEND_ID,
RCV.VENDOR_SITE_ID VEND_SITE_ID
from
RCV_TRANSACTIONS RCV,
MTL_RESERVATIONS RES,
PO_HEADERS_ALL POH
where
:sales_ord_id = RES.DEMAND_SOURCE_HEADER_ID
and RES.DEMAND_SOURCE_LINE_ID = NVL('&line_id_selected',RES.DEMAND_SOURCE_LINE_ID)
and RES.DEMAND_SOURCE_TYPE_ID = 2 -- SO
and RES.SUPPLY_SOURCE_TYPE_ID in (1,13) -- PO or INV
and RES.SUPPLY_SOURCE_HEADER_ID = POH.PO_HEADER_ID --
and POH.PO_HEADER_ID = RCV.PO_HEADER_ID;

begin
for rcv in rcv_trx
loop
utl_file.put_line(handle,'&sld'||n(rcv.TRANS_ID)||'&d'||n(rcv.PRNT_TRANS_ID)||'&d');
utl_file.put_line(handle,n(rcv.LINE)||'&d'||n(rcv.TRANS_TYPE)||'&d');
utl_file.put_line(handle,n(rcv.TRANS_DATE)||'&d'||n(rcv.DEST_TYPE)||'&d');
utl_file.put_line(handle,n(rcv.INSPECT_STAT)||'&d'||n(rcv.INTF_SRC)||'&d');
utl_file.put_line(handle,n(rcv.INTF_TRANS_ID)||'&d'||n(rcv.LOC_ID)||'&d');
utl_file.put_line(handle,n(rcv.MVT_STAT)||'&d'||n(rcv.ORG_ID)||'&d');
utl_file.put_line(handle,n(rcv.OE_HEAD_ID)||'&d'||n(rcv.OE_LINE_ID)||'&d');
utl_file.put_line(handle,n(rcv.PO_HEAD_ID)||'&d'||n(rcv.PO_LINE_ID)||'&d');
utl_file.put_line(handle,n(rcv.LINE_LOC_ID)||'&d'||n(rcv.UNIT_PRICE)||'&d');
utl_file.put_line(handle,n(rcv.UOM)||'&d'||n(rcv.QTY)||'&d');
utl_file.put_line(handle,n(rcv.REQUEST_ID)||'&d'||n(rcv.SHIP_HEAD_ID)||'&d');
utl_file.put_line(handle,n(rcv.SHIP_LINE_ID)||'&d'||n(rcv.SRC_DOC_CODE)||'&d');
utl_file.put_line(handle,n(rcv.VEND_ID)||'&d'||n(rcv.VEND_SITE_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f RCV_TRANSACTIONS_INTERFACE (RTI) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_TRNS_ID &dh PROC_MODE &dh PROC_STAT &dh TRNS_STAT &dh TRNS_DATE &dh TRNS_TYPE &dh DEST_TYPE &dh INSP_STAT &dh');
UTL_FILE.PUT_LINE(handle,'INSP_SRC &dh OE_HEAD_ID &dh OE_LINE_ID &dh ITEM_ID &dh QTY &dh PRY_Q &dh PO_UNIT_PRC &dh SUB &dh TO_ORG_ID &dh RCPT_SRC &dh');
UTL_FILE.PUT_LINE(handle,'PRNT_TRN_ID &dh SHP_HEAD_ID &dh SHP_LINE_ID &dh SRC_DOC &dh REQUEST_ID &eh');

Declare
cursor rcv_trx_int is
select /* DROP SHIPMENTS */
RTI.INTERFACE_TRANSACTION_ID INTF_TRNS_ID,
RTI.PROCESSING_MODE_CODE PROC_MODE,
RTI.PROCESSING_STATUS_CODE PROC_STAT,
RTI.TRANSACTION_STATUS_CODE TRNS_STAT,
to_char(RTI.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRNS_DATE,
RTI.TRANSACTION_TYPE TRNS_TYPE,
RTI.DESTINATION_TYPE_CODE DEST_TYPE,
RTI.INSPECTION_STATUS_CODE INSP_STAT,
RTI.INTERFACE_SOURCE_CODE INSP_SRC,
RTI.OE_ORDER_HEADER_ID OE_HEAD_ID,
RTI.OE_ORDER_LINE_ID OE_LINE_ID,
RTI.ITEM_ID ITEM_ID,
RTI.QUANTITY QTY,
RTI.PRIMARY_QUANTITY PRY_Q,
RTI.PO_UNIT_PRICE PO_UNIT_PRC,
RTI.SUBINVENTORY SUB,
RTI.TO_ORGANIZATION_ID TO_ORG_ID,
RTI.RECEIPT_SOURCE_CODE RCPT_SRC,
RTI.PARENT_TRANSACTION_ID PRNT_TRN_ID,
RTI.SHIPMENT_HEADER_ID SHP_HEAD_ID,
RTI.SHIPMENT_LINE_ID SHP_LINE_ID,
RTI.SOURCE_DOCUMENT_CODE SRC_DOC,
RTI.PROCESSING_REQUEST_ID REQUEST_ID
from
RCV_TRANSACTIONS_INTERFACE RTI,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_LINE_ID = RTI.PO_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* RETURNS */
RTI.INTERFACE_TRANSACTION_ID INTF_TRNS_ID,
RTI.PROCESSING_MODE_CODE PROC_MODE,
RTI.PROCESSING_STATUS_CODE PROC_STAT,
RTI.TRANSACTION_STATUS_CODE TRNS_STAT,
to_char(RTI.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRNS_DATE,
RTI.TRANSACTION_TYPE TRNS_TYPE,
RTI.DESTINATION_TYPE_CODE DEST_TYPE,
RTI.INSPECTION_STATUS_CODE INSP_STAT,
RTI.INTERFACE_SOURCE_CODE INSP_SRC,
RTI.OE_ORDER_HEADER_ID OE_HEAD_ID,
RTI.OE_ORDER_LINE_ID OE_LINE_ID,
RTI.ITEM_ID ITEM_ID,
RTI.QUANTITY QTY,
RTI.PRIMARY_QUANTITY PRY_Q,
RTI.PO_UNIT_PRICE PO_UNIT_PRC,
RTI.SUBINVENTORY SUB,
RTI.TO_ORGANIZATION_ID TO_ORG_ID,
RTI.RECEIPT_SOURCE_CODE RCPT_SRC,
RTI.PARENT_TRANSACTION_ID PRNT_TRN_ID,
RTI.SHIPMENT_HEADER_ID SHP_HEAD_ID,
RTI.SHIPMENT_LINE_ID SHP_LINE_ID,
RTI.SOURCE_DOCUMENT_CODE SRC_DOC,
RTI.PROCESSING_REQUEST_ID REQUEST_ID
from
RCV_TRANSACTIONS_INTERFACE RTI,
OE_ORDER_LINES LIN
where
RTI.OE_ORDER_LINE_ID = LIN.LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* INTERNAL SALES ORDER */
RTI.INTERFACE_TRANSACTION_ID INTF_TRNS_ID,
RTI.PROCESSING_MODE_CODE PROC_MODE,
RTI.PROCESSING_STATUS_CODE PROC_STAT,
RTI.TRANSACTION_STATUS_CODE TRNS_STAT,
to_char(RTI.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRNS_DATE,
RTI.TRANSACTION_TYPE TRNS_TYPE,
RTI.DESTINATION_TYPE_CODE DEST_TYPE,
RTI.INSPECTION_STATUS_CODE INSP_STAT,
RTI.INTERFACE_SOURCE_CODE INSP_SRC,
RTI.OE_ORDER_HEADER_ID OE_HEAD_ID,
RTI.OE_ORDER_LINE_ID OE_LINE_ID,
RTI.ITEM_ID ITEM_ID,
RTI.QUANTITY QTY,
RTI.PRIMARY_QUANTITY PRY_Q,
RTI.PO_UNIT_PRICE PO_UNIT_PRC,
RTI.SUBINVENTORY SUB,
RTI.TO_ORGANIZATION_ID TO_ORG_ID,
RTI.RECEIPT_SOURCE_CODE RCPT_SRC,
RTI.PARENT_TRANSACTION_ID PRNT_TRN_ID,
RTI.SHIPMENT_HEADER_ID SHP_HEAD_ID,
RTI.SHIPMENT_LINE_ID SHP_LINE_ID,
RTI.SOURCE_DOCUMENT_CODE SRC_DOC,
RTI.PROCESSING_REQUEST_ID REQUEST_ID
from
RCV_TRANSACTIONS_INTERFACE RTI,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_LINE_ID = RTI.REQUISITION_LINE_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for rcv in rcv_trx_int
loop
utl_file.put_line(handle,'&sld'||n(rcv.INTF_TRNS_ID)||'&d'||n(rcv.PROC_MODE)||'&d'||n(rcv.PROC_STAT)||'&d');
utl_file.put_line(handle,n(rcv.TRNS_STAT)||'&d'||n(rcv.TRNS_DATE)||'&d'||n(rcv.TRNS_TYPE)||'&d');
utl_file.put_line(handle,n(rcv.DEST_TYPE)||'&d'||n(rcv.INSP_STAT)||'&d'||n(rcv.INSP_SRC)||'&d');
utl_file.put_line(handle,n(rcv.OE_HEAD_ID)||'&d'||n(rcv.OE_LINE_ID)||'&d'||n(rcv.ITEM_ID)||'&d');
utl_file.put_line(handle,n(rcv.QTY)||'&d'||n(rcv.PRY_Q)||'&d'||n(rcv.PO_UNIT_PRC)||'&d');
utl_file.put_line(handle,n(rcv.SUB)||'&d'||n(rcv.TO_ORG_ID)||'&d'||n(rcv.RCPT_SRC)||'&d');
utl_file.put_line(handle,n(rcv.PRNT_TRN_ID)||'&d'||n(rcv.SHP_HEAD_ID)||'&d'||n(rcv.SHP_LINE_ID)||'&d');
utl_file.put_line(handle,n(rcv.SRC_DOC)||'&d'||n(rcv.REQUEST_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_rec

if UPPER(nvl('&prt_po','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f MTL_SUPPLY (SUP) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh SUP_TYPE &dh REQ_HEAD_ID &dh REQ_LINE_ID &dh PO_HEAD_ID &dh PO_REL_ID &dh PO_LINE_ID &dh PO_LINE_LOC_ID &dh ');
UTL_FILE.PUT_LINE(handle,'PO_DIST_ID &dh SHP_HEAD_ID &dh SHP_LINE_ID &dh RCV_TRANS_ID &dh ITEM_ID &dh QTY &dh RECPT_DT &dh NEED_BY_DT &dh ');
UTL_FILE.PUT_LINE(handle,'DEST_TYPE &dh FROM_ORG &dh FROM_SUB &dh TO_ORG &dh TO_SUB &dh INTRNS_OWN_ORG &eh');

Declare
cursor mtl_supply is
select /* DROP SHIPMENTS */
SUP.SUPPLY_TYPE_CODE SUP_TYPE,
SUP.REQ_HEADER_ID REQ_HEAD_ID,
SUP.REQ_LINE_ID REQ_LINE_ID,
SUP.PO_HEADER_ID PO_HEAD_ID,
SUP.PO_RELEASE_ID PO_REL_ID,
SUP.PO_LINE_ID PO_LINE_ID,
SUP.PO_LINE_LOCATION_ID PO_LINE_LOC_ID,
SUP.PO_DISTRIBUTION_ID PO_DIST_ID,
SUP.SHIPMENT_HEADER_ID SHP_HEAD_ID,
SUP.SHIPMENT_LINE_ID SHP_LINE_ID,
SUP.RCV_TRANSACTION_ID RCV_TRANS_ID,
SUP.ITEM_ID ITEM_ID,
SUP.QUANTITY QTY,
to_char(SUP.RECEIPT_DATE,'DD-MON-RR_HH24:MI:SS') RECPT_DT,
to_char(SUP.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY_DT,
SUP.DESTINATION_TYPE_CODE DEST_TYPE,
SUP.FROM_ORGANIZATION_ID FROM_ORG,
SUP.FROM_SUBINVENTORY FROM_SUB,
SUP.TO_ORGANIZATION_ID TO_ORG,
SUP.TO_SUBINVENTORY TO_SUB,
SUP.INTRANSIT_OWNING_ORG_ID INTRNS_OWN_ORG
from
MTL_SUPPLY SUP,
OE_DROP_SHIP_SOURCES SRC,
OE_ORDER_LINES LIN
where
SRC.LINE_ID = LIN.LINE_ID
and SRC.PO_LINE_ID = SUP.PO_LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
select /* INTERNAL SALES ORDER */
SUP.SUPPLY_TYPE_CODE SUP_TYPE,
--SUP.SUPPLY_SOURCE_ID SUP_SRC,
SUP.REQ_HEADER_ID REQ_HEAD_ID,
SUP.REQ_LINE_ID REQ_LINE_ID,
SUP.PO_HEADER_ID PO_HEAD_ID,
SUP.PO_RELEASE_ID PO_REL_ID,
SUP.PO_LINE_ID PO_LINE_ID,
SUP.PO_LINE_LOCATION_ID PO_LINE_LOC_ID,
SUP.PO_DISTRIBUTION_ID PO_DIST_ID,
SUP.SHIPMENT_HEADER_ID SHP_HEAD_ID,
SUP.SHIPMENT_LINE_ID SHP_LINE_ID,
SUP.RCV_TRANSACTION_ID RCV_TRANS_ID,
SUP.ITEM_ID ITEM_ID,
SUP.QUANTITY QTY,
to_char(SUP.RECEIPT_DATE,'DD-MON-RR_HH24:MI:SS') RECPT_DT,
to_char(SUP.NEED_BY_DATE,'DD-MON-RR_HH24:MI:SS') NEED_BY_DT,
SUP.DESTINATION_TYPE_CODE DEST_TYPE,
SUP.FROM_ORGANIZATION_ID FROM_ORG,
SUP.FROM_SUBINVENTORY FROM_SUB,
SUP.TO_ORGANIZATION_ID TO_ORG,
SUP.TO_SUBINVENTORY TO_SUB,
SUP.INTRANSIT_OWNING_ORG_ID INTRNS_OWN_ORG
from
MTL_SUPPLY SUP,
OE_ORDER_LINES LIN
where
LIN.SOURCE_DOCUMENT_LINE_ID = SUP.REQ_LINE_ID
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for mtl in mtl_supply
loop
utl_file.put_line(handle,'&sld'||n(mtl.SUP_TYPE)||'&d'||n(mtl.REQ_HEAD_ID)||'&d'||n(mtl.REQ_LINE_ID)||'&d');
utl_file.put_line(handle,n(mtl.PO_HEAD_ID)||'&d'||n(mtl.PO_REL_ID)||'&d'||n(mtl.PO_LINE_ID)||'&d');
utl_file.put_line(handle,n(mtl.PO_LINE_LOC_ID)||'&d'||n(mtl.PO_DIST_ID)||'&d'||n(mtl.SHP_HEAD_ID)||'&d');
utl_file.put_line(handle,n(mtl.SHP_LINE_ID)||'&d'||n(mtl.RCV_TRANS_ID)||'&d'||n(mtl.ITEM_ID)||'&d');
utl_file.put_line(handle,n(mtl.QTY)||'&d'||n(mtl.RECPT_DT)||'&d'||n(mtl.NEED_BY_DT)||'&d');
utl_file.put_line(handle,n(mtl.DEST_TYPE)||'&d'||n(mtl.FROM_ORG)||'&d'||n(mtl.FROM_SUB)||'&d');
utl_file.put_line(handle,n(mtl.TO_ORG)||'&d'||n(mtl.TO_SUB)||'&d'||n(mtl.INTRNS_OWN_ORG)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_po

if UPPER(nvl('&prt_inv','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_RESERVATIONS">MTL_RESERVATIONS (RES) </a> <a HREF="#MR">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RESERV_ID &dh SHIP_READY &dh DS_HEAD_ID &dh DS_LINE_ID &dh DS_DELIV &dh LINE &dh ITEM_ID &dh ITEM &dh ');
UTL_FILE.PUT_LINE(handle,'RES_Q &dh DET_Q &dh UOM &dh REQUIRD_D &dh DS_TYPE &dh WH_ID &dh SUBINV &dh LOT &dh REV &dh LOC_ID &dh SERIAL_NUM &dh ');
UTL_FILE.PUT_LINE(handle,'SS_TYPE_ID &dh WIP_ID &dh JOB_NAME &dh JOB_STAT &dh SS_HEADER_ID &dh SS_SOURCE_LINE_DET &dh SS_SOURCE_LINE &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY RES_QTY &dh CALC_SEC RES_QTY &dh SECONDARY UOM &dh SECONDARY DET_QTY &eh');

Declare
cursor mtl_res is
select
RES.RESERVATION_ID RESERV_ID,
decode(RES.SHIP_READY_FLAG,
1,'1=Released',
2,'2=Submitted',
to_char(RES.SHIP_READY_FLAG)) SHIP_READY,
RES.DEMAND_SOURCE_HEADER_ID DS_HEAD_ID,
RES.DEMAND_SOURCE_LINE_ID DS_LINE_ID,
RES.DEMAND_SOURCE_DELIVERY DS_DELIV,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
RES.INVENTORY_ITEM_ID ITEM_ID,
ITM.SEGMENT1 ITEM,
RES.PRIMARY_RESERVATION_QUANTITY RES_Q,
RES.DETAILED_QUANTITY DET_Q,
RES.PRIMARY_UOM_CODE UOM,
To_char(RES.REQUIREMENT_DATE,'DD-MON-RR_HH24:MI:SS') REQUIRD_D,
RES.DEMAND_SOURCE_TYPE_ID DS_TYPE,
RES.ORGANIZATION_ID WH_ID,
RES.SUBINVENTORY_CODE SUBINV,
RES.LOT_NUMBER LOT,
RES.REVISION REV,
RES.LOCATOR_ID LOC_ID,
RES.SERIAL_NUMBER SERIAL_NUM,
decode(RES.SUPPLY_SOURCE_TYPE_ID,
5,'5=WIP DJ',
RES.SUPPLY_SOURCE_TYPE_ID) SS_TYPE_ID,
WIP.WIP_ENTITY_ID WIP_ID,
WIP.WIP_ENTITY_NAME JOB_NAME,
JOB.STATUS_TYPE_DISP JOB_STAT,
RES.SUPPLY_SOURCE_HEADER_ID SS_HEADER_ID,
RES.SUPPLY_SOURCE_LINE_DETAIL SS_SOURCE_LINE_DET,
RES.SUPPLY_SOURCE_LINE_ID SS_SOURCE_LINE,
res.secondary_reservation_quantity sec_res_q,
inv_convert.inv_um_convert(
res.inventory_item_id,
res.lot_number,
res.organization_id,
5,
res.primary_reservation_quantity,
res.primary_uom_code,
res.secondary_uom_code,
null,
null) calc_sec_res_q,
res.secondary_uom_code uom2,
res.secondary_detailed_quantity sec_dtl_q
from
MTL_RESERVATIONS RES,
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM,
WIP_ENTITIES WIP,
WIP_DISCRETE_JOBS_V JOB
where
:sales_ord_id = RES.DEMAND_SOURCE_HEADER_ID
and RES.DEMAND_SOURCE_TYPE_ID in (2,8,9,21,22)
and RES.DEMAND_SOURCE_LINE_ID = LIN.LINE_ID(+)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and RES.ORGANIZATION_ID = ITM.ORGANIZATION_ID(+)
and RES.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and RES.SUPPLY_SOURCE_HEADER_ID = WIP.WIP_ENTITY_ID(+)
and WIP.WIP_ENTITY_ID = JOB.WIP_ENTITY_ID(+)
order by
NVL(LIN.TOP_MODEL_LINE_ID, LIN.LINE_ID),
NVL(LIN.ATO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SORT_ORDER, '0000'),
NVL(LIN.LINK_TO_LINE_ID, LIN.LINE_ID),
NVL(LIN.SOURCE_DOCUMENT_LINE_ID, LIN.LINE_ID),
LIN.LINE_ID,
RES.RESERVATION_ID;

begin
for mtl in mtl_res
loop
utl_file.put_line(handle,'&sld'||n(mtl.RESERV_ID)||'&d'||n(mtl.SHIP_READY)||'&d'||n(mtl.DS_HEAD_ID)||'&d');
utl_file.put_line(handle,n(mtl.DS_LINE_ID)||'&d'||n(mtl.DS_DELIV)||'&d'||n(mtl.LINE)||'&d');
utl_file.put_line(handle,n(mtl.ITEM_ID)||'&d'||n(mtl.ITEM)||'&d'||n(mtl.RES_Q)||'&d');
utl_file.put_line(handle,n(mtl.DET_Q)||'&d'||n(mtl.UOM)||'&d'||n(mtl.REQUIRD_D)||'&d');
utl_file.put_line(handle,n(mtl.DS_TYPE)||'&d'||n(mtl.WH_ID)||'&d'||n(mtl.SUBINV)||'&d');
utl_file.put_line(handle,n(mtl.LOT)||'&d'||n(mtl.REV)||'&d'||n(mtl.LOC_ID)||'&d');
utl_file.put_line(handle,n(mtl.SERIAL_NUM)||'&d'||n(mtl.SS_TYPE_ID)||'&d'||n(mtl.WIP_ID)||'&d');
utl_file.put_line(handle,n(mtl.JOB_NAME)||'&d'||n(mtl.JOB_STAT)||'&d'||n(mtl.SS_HEADER_ID)||'&d');
utl_file.put_line(handle,n(mtl.SS_SOURCE_LINE_DET)||'&d'||n(mtl.SS_SOURCE_LINE)||'&d');
utl_file.put_line(handle,n(mtl.sec_res_q)||'&d'||n(mtl.calc_sec_res_q)||'&d');
utl_file.put_line(handle,n(mtl.uom2)||'&d'||n(mtl.sec_dtl_q)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_inv

if UPPER(nvl('&prt_wip','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f WIP_JOB_SCHEDULE_INTERFACE (WJS) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTERF_ID &dh SRC_LINE_ID &dh LINE &dh REQUEST_ID &dh GROUP_ID &dh SRC_CODE &dh PHS &dh STAT_TY &dh ');
UTL_FILE.PUT_LINE(handle,'STAT &dh ORG &dh LOAD &dh ITEM_ID &dh WIP_SUP_TY &dh START_QTY &eh');

Declare
cursor wip_sch_int is
select
WJS.INTERFACE_ID INTERF_ID,
WJS.SOURCE_LINE_ID SRC_LINE_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
WJS.REQUEST_ID REQUEST_ID,
WJS.GROUP_ID GROUP_ID,
WJS.SOURCE_CODE SRC_CODE,
WJS.PROCESS_PHASE PHS,
WJS.STATUS_TYPE STAT_TY,
WJS.PROCESS_STATUS STAT,
WJS.ORGANIZATION_CODE ORG,
WJS.LOAD_TYPE LOAD,
WJS.PRIMARY_ITEM_ID ITEM_ID,
WJS.WIP_SUPPLY_TYPE WIP_SUP_TY,
WJS.START_QUANTITY START_QTY
from WIP_JOB_SCHEDULE_INTERFACE WJS,
OE_ORDER_LINES_ALL LIN
where WJS.SOURCE_LINE_ID = LIN.LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for wip in wip_sch_int
loop
utl_file.put_line(handle,'&sld'||n(wip.INTERF_ID)||'&d'||n(wip.SRC_LINE_ID)||'&d'||n(wip.LINE)||'&d');
utl_file.put_line(handle,n(wip.REQUEST_ID)||'&d'||n(wip.GROUP_ID)||'&d'||n(wip.SRC_CODE)||'&d');
utl_file.put_line(handle,n(wip.PHS)||'&d'||n(wip.STAT_TY)||'&d'||n(wip.STAT)||'&d');
utl_file.put_line(handle,n(wip.ORG)||'&d'||n(wip.LOAD)||'&d'||n(wip.ITEM_ID)||'&d');
utl_file.put_line(handle,n(wip.WIP_SUP_TY)||'&d'||n(wip.START_QTY)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f WIP_INTERFACE_ERRORS (WIE) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTERF_ID &dh LINE &dh ERROR_TYPE &dh ERROR &eh');

Declare
cursor wip_int_err is
select
WIE.INTERFACE_ID INTERF_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
WIE.ERROR_TYPE ERROR_TYPE,
WIE.ERROR ERROR_WIE
from WIP_INTERFACE_ERRORS WIE,
WIP_JOB_SCHEDULE_INTERFACE WJS,
OE_ORDER_LINES_ALL LIN
where WIE.INTERFACE_ID = WJS.INTERFACE_ID
and WJS.SOURCE_LINE_ID = LIN.LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for wip in wip_int_err
loop
utl_file.put_line(handle,'&sld'||n(wip.INTERF_ID)||'&d'||n(wip.LINE)||'&d');
utl_file.put_line(handle,n(wip.ERROR_TYPE)||'&d'||n(wip.ERROR_WIE)||'&el');
end loop;
end;
UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f WIP_DISCRETE_JOBS (WIP) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WIP_ENT_ID &dh JOB_NAME &dh WH_ID &dh REQUEST_ID &dh LINE_ID &dh LINE &dh STATUS &dh PRY_ITEM_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM &dh FIRM &dh JOB_TY &dh WIP_SUP_TYPE &dh SCH_STRT &dh SCH_CMPL &dh RLS_DATE &dh DUE_DATE &dh COMPL_DT &dh ');
UTL_FILE.PUT_LINE(handle,'CLSD_DT &dh STRT_Q &dh COMP_Q &dh SCRP_Q &dh NET_Q &dh LINE_ID &eh');

Declare
cursor wip_d_jobs is
select
WIP.WIP_ENTITY_ID WIP_ENT_ID,
WIV.WIP_ENTITY_NAME JOB_NAME,
WIP.ORGANIZATION_ID WH_ID,
WIP.REQUEST_ID REQUEST_ID,
WIP.SOURCE_LINE_ID LINE_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
WIV.STATUS_TYPE_DISP STATUS,
WIP.PRIMARY_ITEM_ID PRY_ITEM_ID,
ITM.SEGMENT1 ITEM,
WIP.FIRM_PLANNED_FLAG FIRM,
WIP.JOB_TYPE JOB_TY,
WIV.WIP_SUPPLY_TYPE_DISP WIP_SUP_TYPE,
WIP.SCHEDULED_START_DATE SCH_STRT,
WIP.SCHEDULED_COMPLETION_DATE SCH_CMPL,
WIP.DATE_RELEASED RLS_DATE,
WIP.DUE_DATE DUE_DATE,
WIP.DATE_COMPLETED COMPL_DT,
WIP.DATE_CLOSED CLSD_DT,
WIP.START_QUANTITY STRT_Q,
WIP.QUANTITY_COMPLETED COMP_Q,
WIP.QUANTITY_SCRAPPED SCRP_Q,
WIP.NET_QUANTITY NET_Q,
WIP.LINE_ID WIP_LINE_ID
from WIP_DISCRETE_JOBS WIP,
WIP_DISCRETE_JOBS_V WIV,
MTL_SYSTEM_ITEMS_B ITM,
OE_ORDER_LINES_ALL LIN
where WIP.WIP_ENTITY_ID = WIV.WIP_ENTITY_ID
and WIP.PRIMARY_ITEM_ID = ITM.INVENTORY_ITEM_ID
and WIP.ORGANIZATION_ID = ITM.ORGANIZATION_ID
and WIP.SOURCE_LINE_ID = LIN.LINE_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for wip in wip_d_jobs
loop
utl_file.put_line(handle,'&sld'||n(wip.WIP_ENT_ID)||'&d'||n(wip.JOB_NAME)||'&d');
utl_file.put_line(handle,n(wip.WH_ID)||'&d'||n(wip.REQUEST_ID)||'&d');
utl_file.put_line(handle,n(wip.LINE_ID)||'&d'||n(wip.LINE)||'&d');
utl_file.put_line(handle,n(wip.STATUS)||'&d'||n(wip.PRY_ITEM_ID)||'&d');
utl_file.put_line(handle,n(wip.ITEM)||'&d'||n(wip.FIRM)||'&d');
utl_file.put_line(handle,n(wip.JOB_TY)||'&d'||n(wip.WIP_SUP_TYPE)||'&d');
utl_file.put_line(handle,n(wip.SCH_STRT)||'&d'||n(wip.SCH_CMPL)||'&d');
utl_file.put_line(handle,n(wip.RLS_DATE)||'&d'||n(wip.DUE_DATE)||'&d');
utl_file.put_line(handle,n(wip.COMPL_DT)||'&d'||n(wip.CLSD_DT)||'&d');
utl_file.put_line(handle,n(wip.STRT_Q)||'&d'||n(wip.COMP_Q)||'&d');
utl_file.put_line(handle,n(wip.SCRP_Q)||'&d'||n(wip.NET_Q)||'&d');
utl_file.put_line(handle,n(wip.WIP_LINE_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f DISCRETE JOB TRANSACTIONS (DJT) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh JOB_NAME &dh LINE &dh ITEM_ID &dh ITEM &dh QTY &dh MTL_TRNS_ID &dh TRANS_TYPE &dh OP_SEQ &dh SERIAL &eh');

Declare
cursor wip_job_trx is
select
WIE.wip_entity_name JOB_NAME,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
TRN.inventory_item_id ITEM_ID,
ITM.segment1 ITEM,
TRN.TRANSACTION_QUANTITY QTY,
TRN.TRANSACTION_ID MTL_TRNS_ID,
decode(TRN.TRANSACTION_TYPE_ID,
35, 'WIP Component Issue',
44, 'WIP Assy Completion',
TRN.TRANSACTION_TYPE_ID) TRANS_TYPE,
TRN.OPERATION_SEQ_NUM OP_SEQ,
UNT.serial_number SERIAL
from wip_discrete_jobs WIP,
OE_ORDER_LINES_ALL LIN,
wip_entities WIE,
mtl_material_transactions TRN,
mtl_system_items_b ITM,
mtl_unit_transactions UNT
where WIE.wip_entity_id = WIP.wip_entity_id
and LIN.LINE_ID = WIP.source_line_id
and TRN.transaction_source_id = WIP.wip_entity_id
and TRN.transaction_source_type_id = 5
and TRN.inventory_item_id = ITM.inventory_item_id
and TRN.organization_id = ITM.organization_id
and TRN.transaction_id = UNT.transaction_id(+)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for wip in wip_job_trx
loop
utl_file.put_line(handle,'&sld'||n(wip.JOB_NAME)||'&d'||n(wip.LINE)||'&d');
utl_file.put_line(handle,n(wip.ITEM_ID)||'&d'||n(wip.ITEM)||'&d');
utl_file.put_line(handle,n(wip.QTY)||'&d'||n(wip.MTL_TRNS_ID)||'&d');
utl_file.put_line(handle,n(wip.TRANS_TYPE)||'&d'||n(wip.OP_SEQ)||'&d');
utl_file.put_line(handle,n(wip.SERIAL)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; -- prt_wip

end if; -- :v_head_only

UTL_FILE.FCLOSE(handle);
end;
/


DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

If :v_head_only = 'N' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_TRIPS"> WSH_TRIPS (TRP) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh TRIP_ID &dh NAME &dh PLND &dh STATUS_CODE &dh VEH_NUM &dh CARR_ID &dh SHIP_METH &dh ROUTE_ID &dh VEH_ORG_ID &eh');


Declare
cursor w_trips is
select distinct
TRP.TRIP_ID TRIP_ID,
TRP.NAME NAME,
TRP.PLANNED_FLAG PLND,
TRP.STATUS_CODE STATUS_CODE,
TRP.VEHICLE_NUMBER VEH_NUM,
TRP.CARRIER_ID CARR_ID,
TRP.SHIP_METHOD_CODE SHIP_METH,
TRP.ROUTE_ID ROUTE_ID,
TRP.VEHICLE_ORGANIZATION_ID VEH_ORG_ID
FROM
WSH_TRIPS TRP
where
TRIP_ID in
(select distinct(STP.TRIP_ID)
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG
WHERE
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
order by TRP.TRIP_ID;

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

begin
:r_error := 0;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..30
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. XX.';
end if;

for tt in w_trips
loop
:r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if;

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#WTERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,'<a NAME="T'||tt.TRIP_ID||'">'||n(tt.TRIP_ID)||'</a>'||'&d'||n(tt.NAME)||'&d');
utl_file.put_line(handle,n(tt.PLND)||'&d'||n(tt.STATUS_CODE)||'&d'||n(tt.VEH_NUM)||'&d'||n(tt.CARR_ID)||'&d');
utl_file.put_line(handle,n(tt.SHIP_METH)||'&d'||n(tt.ROUTE_ID)||'&d'||n(tt.VEH_ORG_ID)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="WTERR">Warning List:</a> &eb &f');
for i in 1..30
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_TRIP_STOPS">WSH_TRIP_STOPS (STP) </a> &f ');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh STOP_ID &dh STOP_DESCRIPTION &dh TRIP_ID &dh TRIP_NAME &dh STOP_LOC_ID &dh STATUS &dh LOCK_ST_ID &dh ');
UTL_FILE.PUT_LINE(handle,'PEND_INTERF &dh PLN_DEP_DATE &dh ACT_DEP_DATE &eh');

Declare cursor w_trip_stops is
select distinct
STP.STOP_ID STOP_ID,
STP1.STOP_DESCRIPTION STOP_DESCRIPTION,
STP.TRIP_ID TRIP_ID,
TRP.NAME TRIP_NAME,
STP.STOP_LOCATION_ID STOP_LOC_ID,
STP.STATUS_CODE STATUS,
STP.LOCK_STOP_ID LOCK_ST_ID,
STP.PENDING_INTERFACE_FLAG PEND_INTERF,
to_char(STP.PLANNED_DEPARTURE_DATE,'DD-MON-RR_HH24:MI:SS') PLN_DEP_DATE,
to_char(STP.ACTUAL_DEPARTURE_DATE,'DD-MON-RR_HH24:MI:SS') ACT_DEP_DATE
FROM
WSH_TRIP_STOPS STP,
WSH_SRS_TRIP_STOPS_V STP1,
WSH_TRIPS TRP
where
STP.TRIP_ID = TRP.TRIP_ID(+) AND
STP1.STOP_ID = STP.STOP_ID AND
STP.STOP_ID in
(
(select distinct(LEG.PICK_UP_STOP_ID)
from
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_DELIVERY_ASSIGNMENTS ASG
where
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
UNION
(select distinct(LEG.DROP_OFF_STOP_ID)
from
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_DELIVERY_ASSIGNMENTS ASG
where
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
)
);

type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..30
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. XX.';
end if;

for ts in w_trip_stops
loop
:r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if;

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#WTSERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,'<a NAME="TS'||ts.STOP_ID||'">'||n(ts.STOP_ID)||'</a>'||'&d'||n(ts.STOP_DESCRIPTION)||'&d');
utl_file.put_line(handle,'<a HREF="#T'||ts.TRIP_ID||'">'||n(ts.TRIP_ID)||'</a>'||'&d');
utl_file.put_line(handle,n(ts.TRIP_NAME)||'&d'||'<a NAME="PU'||n(ts.STOP_LOC_ID)||'">'||n(ts.STOP_LOC_ID)||'</a>'||'&d');
utl_file.put_line(handle,n(ts.STATUS)||'&d'||n(ts.LOCK_ST_ID)||'&d');
utl_file.put_line(handle,n(ts.PEND_INTERF)||'&d'||n(ts.PLN_DEP_DATE)||'&d'||n(ts.ACT_DEP_DATE)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="WTSERR">Warning List:</a> &eb &f');
for i in 1..30
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f WSH_DELIVERY_LEGS (LEG) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh LEG_ID &dh SEQ_NUM &dh DELIVERY_ID &dh PICKUP_STOP_ID &dh DROPOFF_STOP_ID &eh');

Declare
cursor w_del_leg is
select distinct
LEG.DELIVERY_LEG_ID LEG_ID,
LEG.SEQUENCE_NUMBER SEQ_NUM,
LEG.DELIVERY_ID DELIVERY_ID,
LEG.PICK_UP_STOP_ID PICKUP_STOP_ID,
LEG.DROP_OFF_STOP_ID DROPOFF_STOP_ID
--LEG.LOAD_TENDER_STATUS LOAD_TENDER_STAT
--ENABLE_TIMESTAMP ,to_char(LEG.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(LEG.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,LEG.REQUEST_ID REQUEST_ID
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG,
WSH_TRIPS TRP
where
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
STP.STOP_ID(+) = LEG.PICK_UP_STOP_ID AND
STP.TRIP_ID = TRP.TRIP_ID AND
LEG.DELIVERY_ID(+) = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by
LEG.DELIVERY_LEG_ID;

begin
for wdl in w_del_leg
loop
utl_file.put_line(handle,'&sld'||n(wdl.LEG_ID)||'&d'||n(wdl.SEQ_NUM)||'&d');
utl_file.put_line(handle,n(wdl.DELIVERY_ID)||'&d'||n(wdl.PICKUP_STOP_ID)||'&d');
utl_file.put_line(handle,n(wdl.DROPOFF_STOP_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_NEW_DELIVERIES"> WSH_NEW_DELIVERIES (DEL) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh DELIVERY_ID &dh DEL_NAME &dh STATUS_CODE &dh WAYBILL &dh PLND &dh PICKUP_DT &dh PICKUP_LOC &dh');
UTL_FILE.PUT_LINE(handle,'DROPOFF_DT &dh DROPOFF_LOC &dh SHIP_METHOD_CODE &dh CONFIRM_DATE &eh');


Declare cursor w_deliveries is
select distinct
DEL.DELIVERY_ID DELIVERY_ID,
DEL.NAME DEL_NAME,
DEL.STATUS_CODE STATUS_CODE,
DEL.WAYBILL WAYBILL,
DEL.PLANNED_FLAG PLND,
to_char(DEL.INITIAL_PICKUP_DATE,'DD-MON-RR_HH24:MI:SS') PICKUP_DT,
DEL.INITIAL_PICKUP_LOCATION_ID PICKUP_LOC,
to_char(DEL.ULTIMATE_DROPOFF_DATE,'DD-MON-RR_HH24:MI:SS') DROPOFF_DT,
DEL.ULTIMATE_DROPOFF_LOCATION_ID DROPOFF_LOC,
DEL.SHIP_METHOD_CODE SHP_METH,
to_char(DEL.CONFIRM_DATE,'DD-MON-RR_HH24:MI:SS') CONF_DATE
--DEL.BOOKING_NUMBER BOOKING_NUM,
--DEL.ACCEPTANCE_FLAG ACCEPTED
--ENABLE_TIMESTAMP ,to_char(DEL.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(DEL.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,DEL.REQUEST_ID REQUEST_ID
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_ASSIGNMENTS ASG
where
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
order by Del.DELIVERY_ID;
type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..30
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. XX.';
end if;

for nd in w_deliveries
loop
:r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#WNDERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,'<a NAME="D'||nd.DELIVERY_ID||'">'||n(nd.DELIVERY_ID)||'</a>'||'&d'||n(nd.DEL_NAME)||'&d');
utl_file.put_line(handle,n(nd.STATUS_CODE)||'&d'||n(nd.WAYBILL)||'&d'||n(nd.PLND)||'&d'||n(nd.PICKUP_DT)||'&d');
utl_file.put_line(handle,'<a HREF="#PU'||nd.PICKUP_LOC||'">'||n(nd.PICKUP_LOC)||'</a>'||'&d');
utl_file.put_line(handle,n(nd.DROPOFF_DT)||'&d'||n(nd.DROPOFF_LOC)||'&d');
utl_file.put_line(handle,n(nd.SHP_METH)||'&d'||n(nd.CONF_DATE)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="WNDERR">Warning List:</a> &eb &f');
for i in 1..30
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');

UTL_FILE.PUT_LINE(handle,'&f &f WSH_DELIVERY_ASSIGNMENTS (ASG) &f ');
UTL_FILE.PUT_LINE(handle,'&std &sh DEL_ASGN_ID &dh DELIVERY_ID &dh DEL_DETAIL_ID &dh PAR_DEL_ID &dh PAR_DETAIL_ID &eh ');


Declare
cursor w_del_asig is
select distinct
ASG.DELIVERY_ASSIGNMENT_ID DEL_ASGN_ID,
ASG.DELIVERY_ID DELIVERY_ID,
ASG.DELIVERY_DETAIL_ID DEL_DETAIL_ID,
ASG.PARENT_DELIVERY_ID PAR_DEL_ID,
ASG.PARENT_DELIVERY_DETAIL_ID PAR_DETAIL_ID
-- ASG.ACTIVE_FLAG ACTIVE
--ENABLE_TIMESTAMP ,to_char(ASG.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(ASG.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,ASG.REQUEST_ID REQUEST_ID
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_DELIVERY_ASSIGNMENTS ASG
where
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for wda in w_del_asig
loop
utl_file.put_line(handle,'&sld'||n(wda.DEL_ASGN_ID)||'&d'||n(wda.DELIVERY_ID)||'&d');
utl_file.put_line(handle,n(wda.DEL_DETAIL_ID)||'&d'||n(wda.PAR_DEL_ID)||'&d');
utl_file.put_line(handle,n(wda.PAR_DETAIL_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="ORGANIZATIONS"> ORGANIZATIONS (ORG) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ORG_ID &dh ORGANIZATION CODE &dh WMS_ENABLED &dh OPM_ENABLED &dh NEGATIVE BAL_ALLOW ');
UTL_FILE.PUT_LINE(handle,'&dh PRIMARY COST_METH &dh COST ORG_ID &dh MASTER ORG_ID &dh DAFAULT COST_GRP &dh PROJECT REF_ENABLED ');
UTL_FILE.PUT_LINE(handle,'&dh COST CUT_DATE &dh EAM ENABLED &dh ENCUMBR REVERSAL &eh ');

Declare cursor l_orgs is
SELECT distinct
mp.organization_id org_id,
mp.organization_code org,
decode(mp.primary_cost_method,
1, 'Standard',
2, 'Average',
5, 'FIFO',
6, 'LIFO') PCM,
decode(mp.wms_enabled_flag,
'Y', 'Yes',
'N', 'No') WMS,
decode(mp.NEGATIVE_INV_RECEIPT_CODE,
1, 'Yes',
2, 'No') neg_bal,
mp.cost_organization_id c_org,
mp.master_organization_id m_org,
mp.default_cost_group_id dcg,
decode(mp.project_reference_enabled,
1, 'Yes',
2, 'No') PRE,
to_char(mp.cost_cutoff_date,'dd-mon-rrrr') ccd,
decode(mp.eam_enabled_flag,
'Y','Yes',
'N','No') EAM,
decode (mp.encumbrance_reversal_flag,
1, 'Yes',
2, 'No') ENC
FROM MTL_PARAMETERS MP,
WSH_DELIVERY_DETAILS DET
where DET.SOURCE_CODE = 'OE'
and MP.ORGANIZATION_ID = DET.ORGANIZATION_ID
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id);


function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin

for orgi in l_orgs
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(orgi.org_id)||' &d ');
utl_file.put_line(handle,n(orgi.org)||' &d '||n(orgi.WMS)||' &d ');
if INV_GMI_RSV_BRANCH.PROCESS_BRANCH(orgi.org_id) then
utl_file.put_line(handle,'Yes ');
:is_opm := 'Y';
else
utl_file.put_line(handle,'No ');
:is_opm := 'N';
end if;
utl_file.put_line(handle,' &d '||n(orgi.neg_bal)||' &d '||n(orgi.PCM)||' &d ');
utl_file.put_line(handle,n(orgi.c_org)||' &d '||n(orgi.m_org)||' &d ');
utl_file.put_line(handle,n(orgi.dcg)||' &d '||n(orgi.PRE)||' &d ');
utl_file.put_line(handle,n(orgi.ccd)||' &d '||n(orgi.EAM)||' &d ');
utl_file.put_line(handle,n(orgi.ENC)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="ACCOUNTING PERIODS"> ACCOUNTING PERIODS (ACC) </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ORG_ID &dh ORGANIZATION CODE &dh PLANNED_DEPART_DT (Shipped Line) &dh ');
UTL_FILE.PUT_LINE(handle,'SCHEDULE_SHIP_DT (Not Shipped Line) &dh ACCOUNT PERIOD_ID &dh PERIOD NAME ');
UTL_FILE.PUT_LINE(handle,'&dh OPEN FLAG &dh PERIOD START_DT &dh PERIOD CLOSE_DT &dh SCHEDULE CLOSE_DT &eh ');

Declare cursor l_orgs is
SELECT distinct
mp.organization_id org_id,
mp.organization_code org,
to_char(STP.PLANNED_DEPARTURE_DATE,'DD-MON-RR_HH24:MI:SS') plan_dep_date,
'' schdate,
oac.acct_period_id acc_per_id,
oac.period_name per_name,
oac.open_flag open_fl,
to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS') per_sd,
to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS') per_cd,
to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
FROM MTL_PARAMETERS MP,
ORG_ACCT_PERIODS OAC,
WSH_DELIVERY_DETAILS DET,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG,
WSH_TRIPS TRP
where ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID
and STP.STOP_ID(+) = LEG.PICK_UP_STOP_ID
and STP.TRIP_ID = TRP.TRIP_ID(+)
and LEG.DELIVERY_ID(+) = ASG.DELIVERY_ID
and DET.SOURCE_CODE = 'OE'
and MP.ORGANIZATION_ID = OAC.ORGANIZATION_ID
and MP.ORGANIZATION_ID = DET.ORGANIZATION_ID
and STP.PLANNED_DEPARTURE_DATE BETWEEN OAC.PERIOD_START_DATE and NVL(OAC.PERIOD_CLOSE_DATE,OAC.SCHEDULE_CLOSE_DATE)
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id)
union
SELECT distinct
mp.organization_id org_id,
mp.organization_code org,
'' plan_dep_date,
to_char(LIN.SCHEDULE_SHIP_DATE,'DD-MON-RR_HH24:MI:SS') schdate,
oac.acct_period_id acc_per_id,
oac.period_name per_name,
oac.open_flag open_fl,
to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS') per_sd,
to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS') per_cd,
to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
FROM MTL_PARAMETERS MP,
ORG_ACCT_PERIODS OAC,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN
where DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and MP.ORGANIZATION_ID = OAC.ORGANIZATION_ID
and MP.ORGANIZATION_ID = DET.ORGANIZATION_ID
and LIN.SCHEDULE_SHIP_DATE BETWEEN OAC.PERIOD_START_DATE and NVL(OAC.PERIOD_CLOSE_DATE,OAC.SCHEDULE_CLOSE_DATE)
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id);


function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin

for orgi in l_orgs
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(orgi.org_id)||' &d ');
utl_file.put_line(handle,n(orgi.org)||' &d '||n(orgi.plan_dep_date)||' &d ');
utl_file.put_line(handle,n(orgi.schdate)||' &d '||n(orgi.acc_per_id)||' &d ');
utl_file.put_line(handle,n(orgi.per_name)||' &d '||n(orgi.open_fl)||' &d ');
utl_file.put_line(handle,n(orgi.per_sd)||' &d '||n(orgi.per_cd)||' &d ');
utl_file.put_line(handle,n(orgi.sch_cd)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_DELIVERY_DETAILS"> WSH_DELIVERY_DETAILS (DET)</a> <a HREF="#WDD">Column Definitions</a> &f');


UTL_FILE.PUT_LINE(handle,'&std '); -- just to start the table, header will be printed later


Declare cursor w_del_details is
select distinct
DET.DELIVERY_DETAIL_ID DEL_DET_ID,
DET.RELEASED_STATUS REL_STATUS_C,
decode(DET.RELEASED_STATUS,
'Y','Y=Staged',
'R','R=Ready to Release',
'S','S=Rel to Warhouse',
'B','B=Backorder',
'P','P=Pending Inv',
'C','C=Shipped',
'N','N=Not Ready',
'D','D=Cancelled',
'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
DET.MOVE_ORDER_LINE_ID MO_LINE_ID,
ASG.DELIVERY_ID DELIV_ID,
TRP.TRIP_ID TRIP_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
DET.SOURCE_LINE_ID LINE_ID,
DET.INVENTORY_ITEM_ID ITEM_ID,
ITM.SEGMENT1 ITEM,
nvl(DET.SRC_REQUESTED_QUANTITY,0) SRQ_Q,
DET.SRC_REQUESTED_QUANTITY_UOM SRQ_U,
nvl(DET.SRC_REQUESTED_QUANTITY2,0) SRQ_Q2,
DET.SRC_REQUESTED_QUANTITY_UOM2 SRQ_U2,
nvl(DET.REQUESTED_QUANTITY,0) REQ_Q,
DET.REQUESTED_QUANTITY_UOM REQ_U,
nvl(DET.REQUESTED_QUANTITY2,0) REQ_Q2,
DET.REQUESTED_QUANTITY_UOM2 REQ_U2,
nvl(DET.SHIPPED_QUANTITY,0) SHP_Q,
nvl(DET.SHIPPED_QUANTITY2,0) SHP_Q2,
nvl(DET.DELIVERED_QUANTITY,0) DLV_Q,
nvl(DET.DELIVERED_QUANTITY2,0) DLV_Q2,
nvl(DET.CANCELLED_QUANTITY,0) CAN_Q,
nvl(DET.CANCELLED_QUANTITY2,0) CAN_Q2,
nvl(DET.INV_INTERFACED_FLAG,'N') INI,
nvl(DET.OE_INTERFACED_FLAG,'N') OMI,
DET.SHIP_TOLERANCE_ABOVE STA,
DET.SHIP_TOLERANCE_BELOW STB,
DET.SHIP_FROM_LOCATION_ID SH_FROM_ID,
DET.SHIP_TO_LOCATION_ID SH_TO_ID,
-- DET.MVT_STAT_STATUS MVT_STATUS,
DET.ORGANIZATION_ID WH_ID,
DET.SUBINVENTORY CUR_SUB,
DET.ATTRIBUTE15 ORG_SUB,
DET.REVISION REV,
DET.LOT_NUMBER LOT,
DET.SERIAL_NUMBER SERIAL,
DET.LOCATOR_ID LOC_ID,
DET.SHIP_METHOD_CODE SHIP_METH,
-- DET.MOVEMENT_ID MVMT_ID,
DET.SPLIT_FROM_DELIVERY_DETAIL_ID SPL_DEL_DET_ID,
DET.PICKABLE_FLAG PICKABLE_FLAG,
nvl(DET.PICKED_QUANTITY,0) PICKED_QUANTITY,
nvl(DET.PICKED_QUANTITY2,0) PICKED_QUANTITY2,
DET.SHIP_SET_ID SHIP_SET_ID,
DET.SHIP_MODEL_COMPLETE_FLAG SHIP_MODEL_COMPLETE_FLAG,
DET.TRANSACTION_TEMP_ID TRX_TEMP_ID,
DET.TOP_MODEL_LINE_ID TOP_MO_LIN,
DET.SOURCE_LINE_SET_ID SRC_LIN_SET,
to_char(DET.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') cre_date,
DET.sublot_number slotno,
DET.CYCLE_COUNT_QUANTITY2 cycle_qty,
DET.QUALITY_CONTROL_QUANTITY QC_qty,
DET.QUALITY_CONTROL_QUANTITY2 QC_qty2,
DET.SCHEDULED_QUANTITY2 sch_qty2,
to_char(DET.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') upd_date,
DET.source_line_set_id SRC_LIN_SET_ID
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
MTL_SYSTEM_ITEMS ITM,
WSH_DELIVERY_ASSIGNMENTS ASG,
WSH_TRIPS TRP
where
DEL.DELIVERY_ID(+) = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
STP.STOP_ID(+) = LEG.PICK_UP_STOP_ID AND
STP.TRIP_ID = TRP.TRIP_ID(+) AND
LEG.DELIVERY_ID(+) = DEL.DELIVERY_ID AND
LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+) AND
LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+) AND
DET.SOURCE_CODE = 'OE' AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
Order by
DET.SOURCE_LINE_ID, DET.DELIVERY_DETAIL_ID;

r_uom_lin varchar2(10);
r_qshp_lin number;
r_sta_lin varchar2(100);
r_mtl_trn varchar2(100);
c_lines number;
type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

Procedure prt_DET_head is
begin
UTL_FILE.PUT_LINE(handle,'&sh WARNING &dh DELIVERY DETAIL_ID &dh RELEASE STATUS &dhr INI &dh OMI &dh MOVE_ORDER LINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'DELIVERY ID &dh TRIP_ID &dh LINE &dh LINE_ID &dh ITEM_ID &dh ITEM &dh SOURCE REQ_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'SOURCE REQ_UOM &dh REQUEST QTY &dh REQUEST UOM &dh PICKED QTY &dh SHIPPED QTY &dh ');
UTL_FILE.PUT_LINE(handle,'DELIVER QTY &dh CANCEL QTY &dh PICK FLAG &dh STA &dh STB &dh SHIP FROM_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP TO_ID &dh WH_ID &dh CURRENT SUBINV &dh ORG SUBINV &dh REV &dh LOT &dh SERIAL &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSAC TEMP_ID &dh LOCATOR ID &dh SHIP METHOD &dh CREATE DATE &dh SPLIT_FROM DEL_DET_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP SET &dh SHIP MOD_CMP &dh TOP_MODEL LINE_ID &dh SOURCE LINE_SET &dh DISCRETE SRC_REQ_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'DISCRETE SRC_REQ_UOM &dh DISCRETE REQ_QTY &dh DISCRETE REQ_UOM &dh DISCRETE PICK_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'DISCRETE SHP_QTY &dh DISCRETE DEL_QTY &dh DISCRETE CANC_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'CYCLE COUNT_QTY &dh QUALITY CTRL_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'QUALITY CTRL_QTY2 &dh DISCRETE SCHD_QTY &dh SUBLOT NUMBER &dh LAST UPDATE_DATE &dh');
UTL_FILE.PUT_LINE(handle,'SRC_LIN SET_ID &eh');
end;

begin
:r_error := 0;
c_lines := 35;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..35
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. Source Requested Quantity is less than Shipped Quantity.';

msg(10).descrip := ' 10. Pickable_Flag on Delivery Detail does Not Match with Mtl_Transactions_Enabled_Flag on Mtl_System_Items.';

msg(20).descrip := ' 20. Delivery Detail have no Order Lines Associated.';
msg(21).descrip := ' 21. Order Line associated to this Delivery Detail have INVALID status.';
msg(24).descrip := ' 24. Delivery Detail have invalid RELEASED status.';
msg(25).descrip := ' 25. Delivery Detail has NOT been Shipped but has been INTERFACED to OM or INV.';
msg(26).descrip := ' 26. Delivery Detail has NOT been Shipped but associated Order Line shows Shipped Quantity.';
msg(27).descrip := ' 27. Delivery Detail has NOT been Shipped but associated Order Line is Not on AWAITING SHIPPING status.';
msg(28).descrip := ' 28. Delivery Detail has been Shipped, NOT OM Interfaced but associated Order Line Shipped Qty has been updated.';
msg(29).descrip := ' 29. Delivery Detail has been Shipped, NOT OM Interfaced but associated Order Line is Not on AWAITING SHIPPING status.';
msg(30).descrip := ' 30. Delivery Detail has been Shipped and OM Interfaced but associated Order Line Shipped Qty has NOT been updated.';
msg(31).descrip := ' 31. Delivery Detail has been Shipped and OM Interfaced but associated Order Line still on AWAITING SHIPPING status.';
msg(32).descrip := ' 32. Delivery Detail has been Shipped and OM interfaced, Shipped Qty on order_line does not match Delivery Detail Shp Qty (maybe a Split line).';
msg(33).descrip := ' 33. Delivery Detail is Cancelled but has been INTERFACED to OM or INV.';
end if;

for dd in w_del_details
loop
:r_flag := '';

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
-- Check Pickable_flag against mtl_system_items.mtl_transactions_enabled_flag
Select nvl(mtl_transactions_enabled_flag,'N')
into r_mtl_trn
from Mtl_System_items
where Inventory_item_Id = dd.ITEM_ID
and Organization_Id = dd.WH_ID;
if dd.PICKABLE_FLAG <> r_mtl_trn then
:r_flag := :r_flag || '10 ';
msg(10).flag := '1';
end if;

begin
select ORDER_QUANTITY_UOM, nvl(SHIPPED_QUANTITY,0), substr(FLOW_STATUS_CODE,1,22)
into r_uom_lin, r_qshp_lin, r_sta_lin
from oe_order_lines_all
where line_id = dd.LINE_ID;
exception
when no_data_found then
:r_flag := :r_flag || '20 ';
msg(20).flag := '1';
end;
---
-- Basic Verification
--
If (dd.SRQ_Q*(100+nvl(dd.STA,0))/100 < dd.SHP_Q) AND (dd.SRQ_U = dd.REQ_U) then
:r_flag := :r_flag || '1 ';
msg(1).flag := '1';
end if;

if dd.REL_STATUS_C not in ('Y','R','S','B','P','C','N','D','X') then -- invalid Released status
:r_flag := :r_flag || '24 ';
msg(24).flag := '1';
end if;

if dd.REL_STATUS_C not in ('C','D') -- not shipped or cancelled
and (dd.INI not in ( 'N','X')
or dd.OMI <> 'N') then -- but interfaced INV or OM
:r_flag := :r_flag || '25 ';
msg(25).flag := '1';
end if;

if dd.REL_STATUS_C not in ('C','D') -- not shipped nor cancelled
and dd.OMI = 'N'
and r_qshp_lin > 0 then -- not OM interfaced but Shipped qty on order line has been updated
:r_flag := :r_flag || '26 ';
msg(26).flag := '1';
end if;

if dd.REL_STATUS_C not in ('C','D') -- not shipped nor cancelled
and dd.OMI = 'N'
and r_sta_lin <> 'AWAITING_SHIPPING' then -- not OM interfaced but order line is not Awaiting Shipping
:r_flag := :r_flag || '27 ';
msg(27).flag := '1';
end if;

-- Verifications for Shipped Delivery Details
if dd.REL_STATUS_C = 'C' then
if dd.OMI = 'N'
and r_qshp_lin > 0 then -- Shipped, not OM interfaced but order lines Qty has been updated
:r_flag := :r_flag || '28 ';
msg(28).flag := '1';
end if;

if dd.OMI = 'N'
and r_sta_lin <> 'AWAITING_SHIPPING' then -- Shipped, not OM interfaced but order line not on Awaiting Shipping
:r_flag := :r_flag || '29 ';
msg(29).flag := '1';
end if;

if dd.OMI = 'Y'
and r_qshp_lin = 0 then -- Shipped and OM interfaced, order_line shipped Qty not updated
:r_flag := :r_flag || '30 ';
msg(30).flag := '1';
end if;

if dd.OMI = 'Y'
and r_sta_lin = 'AWAITING_SHIPPING' then -- Shipped and OM interfaced, order_line status not updated
:r_flag := :r_flag || '31 ';
msg(31).flag := '1';
end if;

if dd.OMI = 'Y'
and r_uom_lin = dd.REQ_U -- same UOM, no conversion
and r_qshp_lin <> dd.SHP_Q then -- Shipped and OM interfaced, Shipped Qty on order_line does not match Delivery Detail Shp Qty
:r_flag := :r_flag || '32 ';
msg(32).flag := '1';
end if;
end if; -- Shipped Del.Detail

-- Verifications for Cancelled Delivery Details
if dd.REL_STATUS_C = 'D' then
if (dd.INI = 'Y'
or dd.OMI = 'Y') then -- Delivery Detail has been cancelled but INV or OM flags are set to Y
:r_flag := :r_flag || '33 ';
msg(33).flag := '1';
end if;
end if; -- Cancelled Del.Detail

end if; -- do_analysis
---
if c_lines >= 35 then
c_lines := 1;
prt_DET_head;
else
c_lines := c_lines + 1;
end if;

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#WDDERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,'<a NAME="WDD'||dd.DEL_DET_ID||'">'||n(dd.DEL_DET_ID)||'</a> &d');
utl_file.put_line(handle,n(dd.REL_STATUS)||'&d');
utl_file.put_line(handle,n(dd.INI)||'&d'||n(dd.OMI)||'&d');
utl_file.put_line(handle,'<a HREF="#MO'||dd.MO_LINE_ID||'">'||n(dd.MO_LINE_ID)||'</a>'||'&d');
utl_file.put_line(handle,'<a HREF="#D'||dd.DELIV_ID||'">'||n(dd.DELIV_ID)||'</a>'||'&d');
utl_file.put_line(handle,'<a HREF="#T'||dd.TRIP_ID||'">'||n(dd.TRIP_ID)||'</a>'||'&d'||n(dd.LINE)||'&d');
utl_file.put_line(handle,'<a HREF="#OOE'||dd.LINE_ID||'">'||n(dd.LINE_ID)||'</a> &d');
utl_file.put_line(handle,n(dd.ITEM_ID)||'&d'||n(dd.ITEM)||'&d');
utl_file.put_line(handle,n(dd.SRQ_Q)||'&d'||n(dd.SRQ_U)||'&d');
utl_file.put_line(handle,n(dd.REQ_Q)||'&d'||n(dd.REQ_U)||'&d');
utl_file.put_line(handle,n(dd.PICKED_QUANTITY)||'&d'||n(dd.SHP_Q)||'&d');
utl_file.put_line(handle,n(dd.DLV_Q)||'&d'||n(dd.CAN_Q)||'&d');
utl_file.put_line(handle,n(dd.PICKABLE_FLAG)||'&d');
utl_file.put_line(handle,n(dd.STA)||'&d');
utl_file.put_line(handle,n(dd.STB)||'&d'||n(dd.SH_FROM_ID)||'&d');
utl_file.put_line(handle,n(dd.SH_TO_ID)||'&d');
utl_file.put_line(handle,n(dd.WH_ID)||'&d'||n(dd.CUR_SUB)||'&d');
utl_file.put_line(handle,n(dd.ORG_SUB)||'&d'||n(dd.REV)||'&d');
utl_file.put_line(handle,n(dd.LOT)||'&d'||n(dd.SERIAL)||'&d');
utl_file.put_line(handle,n(dd.TRX_TEMP_ID)||'&d');
utl_file.put_line(handle,n(dd.LOC_ID)||'&d'||n(dd.SHIP_METH)||'&d');
utl_file.put_line(handle,n(dd.CRE_DATE)||'&d');
utl_file.put_line(handle,n(dd.SPL_DEL_DET_ID)||'&d');
utl_file.put_line(handle,n(dd.SHIP_SET_ID)||'&d'||n(dd.SHIP_MODEL_COMPLETE_FLAG)||'&d');
utl_file.put_line(handle,n(dd.TOP_MO_LIN)||'&d'||n(dd.SRC_LIN_SET)||'&d');
utl_file.put_line(handle,n(dd.SRQ_Q2)||'&d'||n(dd.SRQ_U2)||'&d');
utl_file.put_line(handle,n(dd.REQ_Q2)||'&d'||n(dd.REQ_U2)||'&d');
utl_file.put_line(handle,n(dd.PICKED_QUANTITY2)||'&d'||n(dd.SHP_Q2)||'&d');
utl_file.put_line(handle,n(dd.DLV_Q2)||'&d'||n(dd.CAN_Q2)||'&d');
utl_file.put_line(handle,n(dd.cycle_qty)||'&d');
utl_file.put_line(handle,n(dd.QC_qty)||'&d'||n(dd.QC_qty2)||'&d');
utl_file.put_line(handle,n(dd.sch_qty2)||'&d');
utl_file.put_line(handle,n(dd.slotno)||'&d'||n(dd.upd_date)||'&d');
utl_file.put_line(handle,n(dd.SRC_LIN_SET_ID)||'&el');
if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="WDDERR">Warnings List:</a> &eb &f');
for i in 1..35
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f WSH_DELIVERY_DETAILS (CONTAINERS) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh DEL_DET_ID &dh REL_STATUS &dh DELIV_ID &dh TRIP_ID &dh ITEM_ID &dh ITEM &dh CF &dh CONT_NAME &dh CONT_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'FL_PER &dh GRS_WT &dh NET_WT &dh WT_UOM &dh VOL &dh VOL_UOM &dh SRQ_Q &dh REQ_Q &dh SHP_Q &dh DLV_Q &dh CAN_Q &dh ');
UTL_FILE.PUT_LINE(handle,'INI &dh OMI &dh SH_FROM_ID &dh SH_TO_ID &dh WH_ID &dh SHIP_METH &dh CREATE_D &dh FOB_CODE &dh FRT_TERMS &dh');
UTL_FILE.PUT_LINE(handle,'SPL_DEL_DET_ID &dh LPN_ID &eh');


Declare
cursor w_del_det_c is
select distinct
DET.DELIVERY_DETAIL_ID DEL_DET_ID,
decode(DET.RELEASED_STATUS,
'Y','Y=Staged',
'R','R=Ready to Relese',
'S','S=Rel to Warhouse',
'B','B=Backorder',
'P','P=Pending Inv',
'C','C=Shipped',
'N','N=Not Ready',
'D','D=Cancelled',
'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
ASG.DELIVERY_ID DELIV_ID,
TRP.TRIP_ID TRIP_ID,
DET.INVENTORY_ITEM_ID ITEM_ID,
ITM.SEGMENT1 ITEM,
DET.CONTAINER_FLAG CF,
DET.CONTAINER_NAME CONT_NAME,
DET.CONTAINER_TYPE_CODE CONT_TYPE,
DET.FILL_PERCENT FL_PER,
DET.GROSS_WEIGHT GRS_WT,
DET.NET_WEIGHT NET_WT,
DET.WEIGHT_UOM_CODE WT_UOM,
DET.VOLUME VOL,
DET.VOLUME_UOM_CODE VOL_UOM,
nvl(DET.SRC_REQUESTED_QUANTITY,0) SRQ_Q,
nvl(DET.REQUESTED_QUANTITY,0) REQ_Q,
nvl(DET.SHIPPED_QUANTITY,0) SHP_Q,
nvl(DET.DELIVERED_QUANTITY,0) DLV_Q,
nvl(DET.CANCELLED_QUANTITY,0) CAN_Q,
nvl(DET.INV_INTERFACED_FLAG,'N') INI,
nvl(DET.OE_INTERFACED_FLAG,'N') OMI,
DET.SHIP_FROM_LOCATION_ID SH_FROM_ID,
DET.SHIP_TO_LOCATION_ID SH_TO_ID,
DET.ORGANIZATION_ID WH_ID,
DET.SHIP_METHOD_CODE SHIP_METH,
to_char(DET.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CRE_DT,
DET.FOB_CODE FOB_CODE,
DET.FREIGHT_TERMS_CODE FRT_TERMS,
--DET.MOVEMENT_ID MVMT_ID,
DET.SPLIT_FROM_DELIVERY_DETAIL_ID SPL_DEL_DET_ID,
DET.LPN_ID LPN_ID
--ENABLE_TIMESTAMP ,DET.ORG_ID DEL_ORG_ID
--ENABLE_TIMESTAMP ,to_char(DET.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(DET.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,DET.REQUEST_ID REQUEST_ID
FROM
--OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
--WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
MTL_SYSTEM_ITEMS ITM,
WSH_DELIVERY_ASSIGNMENTS ASG,
WSH_TRIPS TRP
where
--DEL.DELIVERY_ID(+) = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.ORGANIZATION_ID = ITM.ORGANIZATION_ID(+) AND
DET.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+) AND
--DET.SOURCE_LINE_ID = LIN.LINE_ID AND
STP.STOP_ID(+) = LEG.PICK_UP_STOP_ID AND
STP.TRIP_ID = TRP.TRIP_ID(+) AND
LEG.DELIVERY_ID(+) = ASG.DELIVERY_ID AND
--LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+) AND
--LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+) AND
DET.SOURCE_CODE = 'WSH' AND
ASG.DELIVERY_ID IN (select ASG1.DELIVERY_ID
from WSH_DELIVERY_ASSIGNMENTS ASG1,
WSH_DELIVERY_DETAILS DET1,
OE_ORDER_LINES_ALL LIN1
where DET1.SOURCE_LINE_ID = LIN1.LINE_ID AND
DET1.DELIVERY_DETAIL_ID = ASG1.DELIVERY_DETAIL_ID AND
DET1.SOURCE_CODE = 'OE' AND
LIN1.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN1.LINE_ID,
LIN1.TOP_MODEL_LINE_ID,
LIN1.ATO_LINE_ID,
LIN1.LINK_TO_LINE_ID,
LIN1.REFERENCE_LINE_ID,
LIN1.SERVICE_REFERENCE_LINE_ID));

begin
for wddc in w_del_det_c
loop
utl_file.put_line(handle,'&sld'||n(wddc.DEL_DET_ID)||'&d'||n(wddc.REL_STATUS)||'&d');
utl_file.put_line(handle,n(wddc.DELIV_ID)||'&d'||n(wddc.TRIP_ID)||'&d');
utl_file.put_line(handle,n(wddc.ITEM_ID)||'&d'||n(wddc.ITEM)||'&d');
utl_file.put_line(handle,n(wddc.CF)||'&d'||n(wddc.CONT_NAME)||'&d');
utl_file.put_line(handle,n(wddc.CONT_TYPE)||'&d'||n(wddc.FL_PER)||'&d');
utl_file.put_line(handle,n(wddc.GRS_WT)||'&d'||n(wddc.NET_WT)||'&d');
utl_file.put_line(handle,n(wddc.WT_UOM)||'&d'||n(wddc.VOL)||'&d');
utl_file.put_line(handle,n(wddc.VOL_UOM)||'&d'||n(wddc.SRQ_Q)||'&d');
utl_file.put_line(handle,n(wddc.REQ_Q)||'&d'||n(wddc.SHP_Q)||'&d');
utl_file.put_line(handle,n(wddc.DLV_Q)||'&d'||n(wddc.CAN_Q)||'&d');
utl_file.put_line(handle,n(wddc.INI)||'&d'||n(wddc.OMI)||'&d');
utl_file.put_line(handle,n(wddc.SH_FROM_ID)||'&d'||n(wddc.SH_TO_ID)||'&d');
utl_file.put_line(handle,n(wddc.WH_ID)||'&d'||n(wddc.SHIP_METH)||'&d');
utl_file.put_line(handle,n(wddc.CRE_DT)||'&d'||n(wddc.FOB_CODE)||'&d');
utl_file.put_line(handle,n(wddc.FRT_TERMS)||'&d'||n(wddc.SPL_DEL_DET_ID)||'&d');
utl_file.put_line(handle,n(wddc.LPN_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WSH_SERIAL_NUMBERS"> WSH_SERIAL_NUMBERS (WSN)</a> <a HREF="#WSN">Column Definitions</a> &f');

Declare
r_exist number;

begin

select count(*)
into r_exist
from all_tables
where table_name = 'WSH_SERIAL_NUMBERS';
if r_exist = 0 then
utl_file.put_line(handle,'&et Table WSH_SERIAL_NUMBER is not present on this instance (introduced on 11.5.9): &f');
else
UTL_FILE.PUT_LINE(handle,'&std &sh ERR_FLAG &dh DEL_DET_ID &dh REL_STATUS &dh LINE &dh LINE_ID &dh ITEM_ID &dh SRQ_Q &dh SRQ_U &dh REQ_Q &dh');
UTL_FILE.PUT_LINE(handle,'REQ_U &dh PIK_Q &dh SHP_Q &dh DLV_Q &dh CAN_Q &dh INI &dh OMI &dh STA &dh STB &dh WH_ID &dh CUR_SUB &dh');
UTL_FILE.PUT_LINE(handle,'ORG_SUB &dh REV &dh LOT &dh SERIAL &dh LOC_ID &dh SPL_DEL_DET_ID &dh FROM_SERIAL &dh TO_SERIAL &dh SERIAL_QTY &eh');
end if;

end;

Declare cursor w_serial_n is
select distinct
DET.DELIVERY_DETAIL_ID DEL_DET_ID,
DET.RELEASED_STATUS REL_STATUS_C,
decode(DET.RELEASED_STATUS,
'Y','Y=Staged',
'R','R=Ready to Release',
'S','S=Rel to Warhouse',
'B','B=Backorder',
'P','P=Pending Inv',
'C','C=Shipped',
'N','N=Not Ready',
'D','D=Cancelled',
'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
DET.SOURCE_LINE_ID LINE_ID,
DET.INVENTORY_ITEM_ID ITEM_ID,
nvl(DET.SRC_REQUESTED_QUANTITY,0) SRQ_Q,
SRC_REQUESTED_QUANTITY_UOM SRQ_U,
nvl(DET.REQUESTED_QUANTITY,0) REQ_Q,
SRC_REQUESTED_QUANTITY_UOM REQ_U,
nvl(DET.SHIPPED_QUANTITY,0) SHP_Q,
nvl(DET.DELIVERED_QUANTITY,0) DLV_Q,
nvl(DET.CANCELLED_QUANTITY,0) CAN_Q,
nvl(DET.INV_INTERFACED_FLAG,'N') INI,
nvl(DET.OE_INTERFACED_FLAG,'N') OMI,
DET.SHIP_TOLERANCE_ABOVE STA,
DET.SHIP_TOLERANCE_BELOW STB,
DET.ORGANIZATION_ID WH_ID,
DET.SUBINVENTORY CUR_SUB,
DET.ATTRIBUTE15 ORG_SUB,
DET.REVISION REV,
DET.LOT_NUMBER LOT,
DET.SERIAL_NUMBER SERIAL,
DET.LOCATOR_ID LOC_ID,
DET.SPLIT_FROM_DELIVERY_DETAIL_ID SPL_DEL_DET_ID,
DET.PICKED_QUANTITY PICKED_QUANTITY,
substr(wsn.fm_serial_number,1,15) FROM_SERIAL,
substr(wsn.to_serial_number,1,15) TO_SERIAL,
wsn.quantity WSN_QTY,
to_char(wsn.creation_date,'DD-MON-RR_HH24:MI:SS') WSN_CRE_DATE
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_SERIAL_NUMBERS WSN
where DET.DELIVERY_DETAIL_ID = WSN.DELIVERY_DETAIL_ID
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and (UPPER(nvl('&det_cnt','Y')) = 'Y' or rownum <= 10);

r_uom_lin varchar2(10);
r_qshp_lin number;
r_sta_lin varchar2(100);
r_mtl_trn varchar2(100);
type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..1
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. No verifications yet.';
end if;

for dd in w_serial_n
loop
:r_flag := '';

-- if UPPER(nvl('&do_analysis','Y')) = 'Y' then
-- Include verifications here
-- Select nvl(mtl_transactions_enabled_flag,'N')
-- into r_mtl_trn
-- from Mtl_System_items
-- where Inventory_item_Id = dd.ITEM_ID
-- and Organization_Id = dd.WH_ID;
-- if dd.PICKABLE_FLAG <> r_mtl_trn then
-- :r_flag := :r_flag || '1 ';
-- msg(1).flag := '1';
-- end if;


-- end if; -- do_analysis
---

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#WSNERR">'||n(:r_flag)||'</a> &eb &d ');
utl_file.put_line(handle,n(dd.DEL_DET_ID)||' &d ');
utl_file.put_line(handle,n(dd.REL_STATUS)||' &d '||n(dd.LINE)||' &d ');
utl_file.put_line(handle,'<a HREF="#'||dd.LINE_ID||'">'||n(dd.LINE_ID)||'</a> &d ');
utl_file.put_line(handle,n(dd.ITEM_ID)||' &d');
utl_file.put_line(handle,n(dd.SRQ_Q)||'&d'||n(dd.SRQ_U)||' &d ');
utl_file.put_line(handle,n(dd.REQ_Q)||'&d'||n(dd.REQ_U)||' &d ');
utl_file.put_line(handle,n(dd.PICKED_QUANTITY)||' &d');
utl_file.put_line(handle,n(dd.SHP_Q)||'&d'||n(dd.DLV_Q)||' &d');
utl_file.put_line(handle,n(dd.CAN_Q)||'&d'||n(dd.INI)||' &d');
utl_file.put_line(handle,n(dd.OMI)||'&d'||n(dd.STA)||' &d');
utl_file.put_line(handle,n(dd.STB)||'&d');
utl_file.put_line(handle,n(dd.WH_ID)||'&d'||n(dd.CUR_SUB)||' &d');
utl_file.put_line(handle,n(dd.ORG_SUB)||'&d'||n(dd.REV)||' &d');
utl_file.put_line(handle,n(dd.LOT)||'&d'||n(dd.SERIAL)||' &d');
utl_file.put_line(handle,n(dd.LOC_ID)||'&d'||n(dd.SPL_DEL_DET_ID)||' &d');
utl_file.put_line(handle,n(dd.FROM_SERIAL)||'&d'||n(dd.TO_SERIAL)||' &d');
utl_file.put_line(handle,n(dd.WSN_QTY)||'&d'||n(dd.WSN_CRE_DATE)||' &el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="WSNERR">Error List:</a> &eb &f');
for i in 1..1
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');

UTL_FILE.PUT_LINE(handle,'&f &f WSH_FREIGHT_COSTS (CST) &f');
UTL_FILE.PUT_LINE(handle,'&std &sh FRT_CST_ID &dh FRT_NAME &dh FRT_TYPE &dh FRT_LEVEL &dh QTY &dh UNIT_AMT &dh TOT_AMT &dh ENTITY_ID &eh');

Declare
cursor w_fre_cst is
select distinct
wfc.FREIGHT_COST_ID FRT_CST_ID,
wfc.FREIGHT_COST_TYPE FRT_NAME,
lkp.Meaning FRT_TYPE,
'DELIV_DETAIL' FRT_LEVEL,
wfc.QUANTITY QTY,
wfc.UNIT_AMOUNT UNIT_AMT,
wfc.TOTAL_AMOUNT TOT_AMT,
wfc.DELIVERY_DETAIL_ID ENTITY_ID
from wsh_freight_costs_v wfc,
wsh_freight_cost_types wft,
fnd_lookup_values lkp,
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET
WHERE
wfc.freight_cost_type_id = wft.freight_cost_type_id AND
wft.freight_cost_type_code = lkp.lookup_code AND
lkp.lookup_type = 'FREIGHT_COST_TYPE' AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID) AND
WFC.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID
UNION ALL
select distinct
wfc.FREIGHT_COST_ID FRT_CST_ID,
wfc.FREIGHT_COST_TYPE FRT_NAME,
lkp.Meaning FRT_TYPE,
'DELIVERY' FRT_LEVEL,
wfc.QUANTITY QTY,
wfc.UNIT_AMOUNT UNIT_AMT,
wfc.TOTAL_AMOUNT TOT_AMT,
wfc.DELIVERY_ID ENTITY_ID
from wsh_freight_costs_v wfc,
wsh_freight_cost_types wft,
fnd_lookup_values lkp,
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
--WSH_NEW_DELIVERIES DEL,
--WSH_DELIVERY_LEGS LEG,
--WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG
WHERE
wfc.freight_cost_type_id = wft.freight_cost_type_id AND
wft.freight_cost_type_code = lkp.lookup_code AND
lkp.lookup_type = 'FREIGHT_COST_TYPE' AND
--DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
-- LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID) AND
WFC.DELIVERY_ID = ASG.DELIVERY_ID AND
WFC.DELIVERY_DETAIL_ID IS NULL
UNION ALL
select distinct
wfc.FREIGHT_COST_ID FRT_CST_ID,
wfc.FREIGHT_COST_TYPE FRT_NAME,
lkp.Meaning FRT_TYPE,
'LEG' FRT_LEVEL,
wfc.QUANTITY QTY,
wfc.UNIT_AMOUNT UNIT_AMT,
wfc.TOTAL_AMOUNT TOT_AMT,
wfc.DELIVERY_LEG_ID ENTITY_ID
from wsh_freight_costs_v wfc,
wsh_freight_cost_types wft,
fnd_lookup_values lkp,
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
--WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG
WHERE
wfc.freight_cost_type_id = wft.freight_cost_type_id AND
wft.freight_cost_type_code = lkp.lookup_code AND
lkp.lookup_type = 'FREIGHT_COST_TYPE' AND
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID) AND
WFC.DELIVERY_LEG_ID = LEG.DELIVERY_LEG_ID AND
WFC.DELIVERY_DETAIL_ID IS NULL AND
WFC.DELIVERY_ID IS NULL
UNION ALL
select distinct
wfc.FREIGHT_COST_ID FRT_CST_ID,
wfc.FREIGHT_COST_TYPE FRT_NAME,
lkp.Meaning FRT_TYPE,
'STOP' FRT_LEVEL,
wfc.QUANTITY QTY,
wfc.UNIT_AMOUNT UNIT_AMT,
wfc.TOTAL_AMOUNT TOT_AMT,
wfc.STOP_ID ENTITY_ID
from wsh_freight_costs_v wfc,
wsh_freight_cost_types wft,
fnd_lookup_values lkp,
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG
WHERE
wfc.freight_cost_type_id = wft.freight_cost_type_id AND
wft.freight_cost_type_code = lkp.lookup_code AND
lkp.lookup_type = 'FREIGHT_COST_TYPE' AND
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID) AND
WFC.STOP_ID = STP.STOP_ID AND
WFC.DELIVERY_DETAIL_ID IS NULL AND
WFC.DELIVERY_ID IS NULL AND
WFC.DELIVERY_LEG_ID IS NULL
UNION ALL
select distinct
wfc.FREIGHT_COST_ID FRT_CST_ID,
wfc.FREIGHT_COST_TYPE FRT_NAME,
lkp.Meaning FRT_TYPE,
'TRIP' FRT_LEVEL,
wfc.QUANTITY QTY,
wfc.UNIT_AMOUNT UNIT_AMT,
wfc.TOTAL_AMOUNT TOT_AMT,
wfc.TRIP_ID ENTITY_ID
from wsh_freight_costs_v wfc,
wsh_freight_cost_types wft,
fnd_lookup_values lkp,
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_NEW_DELIVERIES DEL,
WSH_DELIVERY_LEGS LEG,
WSH_TRIP_STOPS STP,
WSH_DELIVERY_ASSIGNMENTS ASG
WHERE
wfc.freight_cost_type_id = wft.freight_cost_type_id AND
wft.freight_cost_type_code = lkp.lookup_code AND
lkp.lookup_type = 'FREIGHT_COST_TYPE' AND
DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
DET.SOURCE_LINE_ID = LIN.LINE_ID AND
STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID) AND
WFC.TRIP_ID = STP.TRIP_ID AND
WFC.DELIVERY_DETAIL_ID IS NULL AND
WFC.DELIVERY_ID IS NULL AND
WFC.STOP_ID IS NULL AND
WFC.DELIVERY_LEG_ID IS NULL;

begin
for wfc in w_fre_cst
loop
utl_file.put_line(handle,'&sld'||n(wfc.FRT_CST_ID)||'&d'||n(wfc.FRT_NAME)||'&d');
utl_file.put_line(handle,n(wfc.FRT_TYPE)||'&d'||n(wfc.FRT_LEVEL)||'&d');
utl_file.put_line(handle,n(wfc.QTY)||'&d'||n(wfc.UNIT_AMT)||'&d');
utl_file.put_line(handle,n(wfc.TOT_AMT)||'&d'||n(wfc.ENTITY_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

-- Output for table WSH_EXCEPTIONS being commented by Dev. request to improve performance
--
--UTL_FILE.PUT_LINE(handle,'&f &f WSH_EXCEPTIONS (EXC) &f
--UTL_FILE.PUT_LINE(handle,'NOTE: THESE ARE BASED STRICTLY ON REQUEST_ID, SO MESSAGES MAY NOT APPLY TO THIS SHIPPING TRANSACTION &f
--
--column EXCEPT_NAME format a20;
--column EXC_STATUS format a18;
--column ERROR_MSG format a30;
--
--UTL_FILE.PUT_LINE(handle,'&std &sh EXCEPT_ID &dh EXCEPT_NAME &dh SEV &dh EXC_STATUS &dh TRIP_ID &dh STOP_ID &dh DELIV_ID &dh DEL_DET_ID &dh
--UTL_FILE.PUT_LINE(handle,'ERROR_MSG &dh REQUEST_ID &dh MESSAGE &eh
--
--select distinct '&sld',
-- EXCEPTION_ID EXCEPT_ID,
-- EXCEPTION_NAME EXCEPT_NAME,
-- SEVERITY SEV,
-- STATUS EXC_STATUS,
-- TRIP_ID TRIP_ID,
-- TRIP_STOP_ID STOP_ID,
-- DELIVERY_ID DELIV_ID,
-- DELIVERY_DETAIL_ID DEL_DET_ID,
-- ERROR_MESSAGE ERROR_MSG,
-- REQUEST_ID REQUEST_ID,
-- MESSAGE MESSAGE,'&el'
--FROM WSH_EXCEPTIONS EXC
--where STATUS <> 'NO_ACTION_REQUIRED'
-- and EXC.REQUEST_ID IN (
-- select DET.request_id
-- from OE_ORDER_LINES LIN,
-- WSH_DELIVERY_DETAILS DET
-- WHERE
-- DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
-- NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
-- LIN.TOP_MODEL_LINE_ID,
-- LIN.ATO_LINE_ID,
-- LIN.LINK_TO_LINE_ID,
-- LIN.REFERENCE_LINE_ID,
-- LIN.SERVICE_REFERENCE_LINE_ID)
-- UNION ALL
-- select ASG.REQUEST_ID
-- from OE_ORDER_LINES LIN,
-- WSH_DELIVERY_DETAILS DET,
-- WSH_DELIVERY_ASSIGNMENTS ASG
-- WHERE
-- ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
-- DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
-- NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
-- LIN.TOP_MODEL_LINE_ID,
-- LIN.ATO_LINE_ID,
-- LIN.LINK_TO_LINE_ID,
-- LIN.REFERENCE_LINE_ID,
-- LIN.SERVICE_REFERENCE_LINE_ID)
-- UNION ALL
-- select LEG.REQUEST_ID
-- from OE_ORDER_LINES LIN,
-- WSH_DELIVERY_DETAILS DET,
-- WSH_NEW_DELIVERIES DEL,
-- WSH_DELIVERY_LEGS LEG,
-- WSH_DELIVERY_ASSIGNMENTS ASG
-- WHERE
-- DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
-- ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
-- DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
-- LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
-- NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
-- LIN.TOP_MODEL_LINE_ID,
-- LIN.ATO_LINE_ID,
-- LIN.LINK_TO_LINE_ID,
-- LIN.REFERENCE_LINE_ID,
-- LIN.SERVICE_REFERENCE_LINE_ID)
-- UNION ALL
-- select STP.REQUEST_ID
-- from OE_ORDER_LINES LIN,
-- WSH_DELIVERY_DETAILS DET,
-- WSH_NEW_DELIVERIES DEL, WSH_DELIVERY_LEGS LEG,
-- WSH_TRIP_STOPS STP,
-- WSH_DELIVERY_ASSIGNMENTS ASG
-- WHERE DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
-- ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
-- DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
-- LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
-- LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
-- NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
-- LIN.TOP_MODEL_LINE_ID,
-- LIN.ATO_LINE_ID,
-- LIN.LINK_TO_LINE_ID,
-- LIN.REFERENCE_LINE_ID,
-- LIN.SERVICE_REFERENCE_LINE_ID)
-- UNION ALL
-- select TRP.REQUEST_ID
-- from OE_ORDER_LINES LIN,
-- WSH_DELIVERY_DETAILS DET,
-- WSH_NEW_DELIVERIES DEL,
-- WSH_DELIVERY_LEGS LEG,
-- WSH_TRIP_STOPS STP,
-- WSH_TRIPS TRP,
-- WSH_DELIVERY_ASSIGNMENTS ASG
-- WHERE DEL.DELIVERY_ID = ASG.DELIVERY_ID AND
-- ASG.DELIVERY_DETAIL_ID = DET.DELIVERY_DETAIL_ID AND
-- DET.SOURCE_LINE_ID = LIN.LINE_ID AND
-- STP.STOP_ID = LEG.PICK_UP_STOP_ID AND
-- TRP.TRIP_ID = STP.TRIP_ID AND
-- LEG.DELIVERY_ID = DEL.DELIVERY_ID AND
-- LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id) AND
-- NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
-- LIN.TOP_MODEL_LINE_ID,
-- LIN.ATO_LINE_ID,
-- LIN.LINK_TO_LINE_ID,
-- LIN.REFERENCE_LINE_ID,
-- LIN.SERVICE_REFERENCE_LINE_ID)
--);
--



end if; -- :v_head_only

UTL_FILE.FCLOSE(handle);
end;
/


DECLARE
handle UTL_FILE.FILE_TYPE;
dirname varchar2(1000);
text varchar2(1000);

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
-- Append to output file
handle := UTL_FILE.FOPEN('&out_dir','&out_dir/&out_file','A',32000);
UTL_FILE.PUT_LINE(handle,'&et'); -- in case last one failed

If :v_head_only = 'N' then

if UPPER(nvl('&prt_wms','N')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_RULES"> WMS_RULES </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh CREATE DATE &dh ORG_ID &dh TYPE CODE &dh NAME &dh ');
UTL_FILE.PUT_LINE(handle,'DESCRIPTION &dh QTY_FUNCT PARAM &dh ENABLED FLAG &dh USER FLAG &dh TYPE HRD_ID &dh ');
UTL_FILE.PUT_LINE(handle,'RULE WEIGHT &dh ATTR CATEG &dh MIN_PICK TASK &dh ALLOCAT MODE &dh WMS_ENABLED FLAG &eh ');

Declare cursor wms_r is
Select
WMSR.RULE_ID ruleid,
WMSR.CREATION_DATE credt,
WMSR.ORGANIZATION_ID orgid,
WMSR.TYPE_CODE typc,
WMSR.NAME nam,
WMSR.DESCRIPTION des,
WMSR.QTY_FUNCTION_PARAMETER_ID qty_funct,
WMSR.ENABLED_FLAG enabf,
WMSR.USER_DEFINED_FLAG userf,
WMSR.TYPE_HDR_ID typh,
WMSR.RULE_WEIGHT rulew,
WMSR.ATTRIBUTE_CATEGORY attrcat,
WMSR.MIN_PICK_TASKS_FLAG minpick,
WMSR.ALLOCATION_MODE_ID allom,
WMSR.WMS_ENABLED_FLAG wmsf
FROM WMS_RULES WMSR,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN
where DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and WMSR.ORGANIZATION_ID = DET.ORGANIZATION_ID
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id);


begin

for wms in wms_r
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
utl_file.put_line(handle,n(wms.credt)||' &d ');
utl_file.put_line(handle,n(wms.orgid)||' &d '||n(wms.typc)||' &d ');
utl_file.put_line(handle,n(wms.nam)||' &d '||n(wms.des)||' &d ');
utl_file.put_line(handle,n(wms.qty_funct)||' &d '||n(wms.enabf)||' &d ');
utl_file.put_line(handle,n(wms.userf)||' &d '||n(wms.typh)||' &d ');
utl_file.put_line(handle,n(wms.rulew)||' &d '||n(wms.attrcat)||' &d ');
utl_file.put_line(handle,n(wms.minpick)||' &d '||n(wms.allom)||' &d ');
utl_file.put_line(handle,n(wms.wmsf)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_RULE_CONSISTENCIES"> WMS_RULE_CONSISTENCIES </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh CONSISTENCY ID &dh PARAMETER ID &dh CREATE DATE &dh ATTR CATEG &eh ');

Declare cursor wms_rc is
Select WRC.RULE_ID ruleid,
WRC.CONSISTENCY_ID consid,
WRC.PARAMETER_ID paramid,
WRC.CREATION_DATE credt,
WRC.ATTRIBUTE_CATEGORY attrcat
FROM WMS_RULE_CONSISTENCIES WRC,
WMS_RULES WMSR,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN
WHERE WRC.RULE_ID = WMSR.RULE_ID
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and WMSR.ORGANIZATION_ID = DET.ORGANIZATION_ID
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id)
ORDER BY 1;


begin

for wms in wms_rc
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
utl_file.put_line(handle,n(wms.consid)||' &d '||n(wms.paramid)||' &d ');
utl_file.put_line(handle,n(wms.credt)||' &d '||n(wms.attrcat)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_RESTRICTIONS"> WMS_RESTRICTIONS </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh SEQUENCE NUMBER &dh CREATE DATE &dh PARAMETER ID &dh ');
UTL_FILE.PUT_LINE(handle,'OPERAND CODE &dh OPERAND TYPE &dh OPER_NUMBER CONSTANT &dh OPER_CHAR CONSTANT &dh ');
UTL_FILE.PUT_LINE(handle,'OPER_DATE CONSTANT &dh OPER PARAM_ID &dh OPER EXPRESSION &dh OPER_FLEX VALUE_SET &dh ');
UTL_FILE.PUT_LINE(handle,'LOGICAL OPER_CODE &dh BRACKET OPEN &dh BRACKET CLOSE &dh ATTR CATEG &eh ');

Declare cursor wms_res is
Select WRES.RULE_ID ruleid,
WRES.SEQUENCE_NUMBER seqno,
WRES.CREATION_DATE credt,
WRES.PARAMETER_ID paramid,
WRES.OPERATOR_CODE opcode,
WRES.OPERAND_TYPE_CODE optype,
WRES.OPERAND_CONSTANT_NUMBER opnum,
WRES.OPERAND_CONSTANT_CHARACTER opchar,
WRES.OPERAND_CONSTANT_DATE opdate,
WRES.OPERAND_PARAMETER_ID oppar,
WRES.OPERAND_EXPRESSION opexp,
WRES.OPERAND_FLEX_VALUE_SET_ID opfvs,
WRES.LOGICAL_OPERATOR_CODE logop,
WRES.BRACKET_OPEN braop,
WRES.BRACKET_CLOSE bracl,
WRES.ATTRIBUTE_CATEGORY attrcat
FROM WMS_RESTRICTIONS WRES,
WMS_RULES WMSR,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN
WHERE WRES.RULE_ID = WMSR.RULE_ID
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and WMSR.ORGANIZATION_ID = DET.ORGANIZATION_ID
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id)
ORDER BY 1;


begin

for wms in wms_res
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
utl_file.put_line(handle,n(wms.seqno)||' &d '||n(wms.credt)||' &d ');
utl_file.put_line(handle,n(wms.paramid)||' &d '||n(wms.opcode)||' &d ');
utl_file.put_line(handle,n(wms.optype)||' &d '||n(wms.opnum)||' &d ');
utl_file.put_line(handle,n(wms.opchar)||' &d '||n(wms.opdate)||' &d ');
utl_file.put_line(handle,n(wms.oppar)||' &d '||n(wms.opexp)||' &d ');
utl_file.put_line(handle,n(wms.opfvs)||' &d '||n(wms.logop)||' &d ');
utl_file.put_line(handle,n(wms.braop)||' &d '||n(wms.bracl)||' &d ');
utl_file.put_line(handle,n(wms.attrcat)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_SORT_CRITERIA"> WMS_SORT_CRITERIA </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh RULE ID &dh SEQUENCE NUMBER &dh CREATE DATE &dh PARAMETER ID &dh ');
UTL_FILE.PUT_LINE(handle,'OPERAND CODE &dh ATTR CATEG &eh ');

Declare cursor wms_sc is
Select WSOC.RULE_ID ruleid,
WSOC.SEQUENCE_NUMBER seqno,
WSOC.CREATION_DATE credt,
WSOC.PARAMETER_ID paramid,
WSOC.ORDER_CODE opcode,
WSOC.ATTRIBUTE_CATEGORY attrcat
FROM WMS_SORT_CRITERIA WSOC,
WMS_RULES WMSR,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN
WHERE WSOC.RULE_ID = WMSR.RULE_ID
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and WMSR.ORGANIZATION_ID = DET.ORGANIZATION_ID
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id)
ORDER BY 1;


begin

for wms in wms_sc
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(wms.ruleid)||' &d ');
utl_file.put_line(handle,n(wms.seqno)||' &d '||n(wms.credt)||' &d ');
utl_file.put_line(handle,n(wms.paramid)||' &d '||n(wms.opcode)||' &d ');
utl_file.put_line(handle,n(wms.attrcat)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="WMS_SELECTION_CRITERIA_TXN_V"> WMS_SELECTION_CRITERIA_TXN_V </a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh SEQUENCE NUMBER &dh RULE TYPE_CODE &dh RULE TYPE &dh RETURN TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'RETURN TYPE_ID &dh RETURN TYPE_NAME &dh ENABLED FLAG &dh DATE TYPE_COD &dh ');
UTL_FILE.PUT_LINE(handle,'DATE TYPE_FROM &dh DATE TYPE_TO &dh DATE_TYPE LOOKUP_TYPE &dh EFFECTIVE FROM &dh ');
UTL_FILE.PUT_LINE(handle,'EFFECTIVE TO &dh FROM ORGANIZATION_ID &dh FROM ORGANIZATION_CODE &dh FROM SUBINVENT_NAME &dh ');
UTL_FILE.PUT_LINE(handle,'TO ORGANIZATION_ID &dh TO ORGANIZATION_CODE &dh TO SUBINVENT_NAME &dh CUSTOMER ID &dh ');
UTL_FILE.PUT_LINE(handle,'CUSTOMER NAME &dh FREIGHT CODE &dh FREIGHT CODE_NAME &dh INVENTORY ITEM_ID &dh ITEM &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM TYPE &dh ITEM TYPE_NAME &dh ASSIGNMENT GROUP_ID &dh ABC CLASS_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ABC_GROUP CLASS_NAME &dh CATEGORY SET_ID &dh CATEGORY ID &dh CATEGORY SET_NAME &dh ');
UTL_FILE.PUT_LINE(handle,'ORDER TYPE_ID &dh ORDER TYPE_NAME &dh VENDOR ID &dh VENDOR NAME &dh PROJECT ID &dh ');
UTL_FILE.PUT_LINE(handle,'PROJECT NAME &dh TASK ID &dh TASK NAME &dh USER ID &dh USER NAME &dh TRANSACTION ACTION_ID &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSACTION ACTION_NAME &dh REASON ID &dh REASON NAME &dh TRANSACTION SOURCE_TYPE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSACTION_SOURCE TYPE_NAME &dh TRANSACTION TYPE_ID &dh TRANSACTION TYPE_NAME &dh ');
UTL_FILE.PUT_LINE(handle,'UOM_CODE &dh UNIT_OF MEASURE &dh UOM CLASS &dh UOM_CLASS NAME &dh CREATION DATE &dh ');
UTL_FILE.PUT_LINE(handle,'WMS_ENABLED FLAG &dh LOCATION ID &dh LOCATION NAME &eh ');

Declare cursor wms_sct is
Select WSCT.STG_ASSIGNMENT_ID stgasg,
WSCT.SEQUENCE_NUMBER seqno,
WSCT.RULE_TYPE_CODE rultyco,
WSCT.RULE_TYPE rulty,
WSCT.RETURN_TYPE retty,
WSCT.RETURN_TYPE_ID rettyid,
WSCT.RETURN_TYPE_NAME rettyna,
WSCT.ENABLED_FLAG enaf,
WSCT.DATE_TYPE_CODE dttyco,
WSCT.DATE_TYPE_FROM dttyfr,
WSCT.DATE_TYPE_TO dttyto,
WSCT.DATE_TYPE_LOOKUP_TYPE dttylty,
WSCT.EFFECTIVE_FROM efffr,
WSCT.EFFECTIVE_TO effto,
WSCT.FROM_ORGANIZATION_ID frorgid,
WSCT.FROM_ORGANIZATION_CODE frorgco,
WSCT.FROM_SUBINVENTORY_NAME frsubna,
WSCT.TO_ORGANIZATION_ID toorgid,
WSCT.TO_ORGANIZATION_CODE toorgco,
WSCT.TO_SUBINVENTORY_NAME tosubna,
WSCT.CUSTOMER_ID cusid,
WSCT.CUSTOMER_NAME cusna,
WSCT.FREIGHT_CODE fcod,
WSCT.FREIGHT_CODE_NAME fcna,
WSCT.INVENTORY_ITEM_ID inviid,
WSCT.ITEM it,
WSCT.ITEM_TYPE ityp,
WSCT.ITEM_TYPE_NAME itypna,
WSCT.ASSIGNMENT_GROUP_ID assgid,
WSCT.ABC_CLASS_ID abcid,
WSCT.ABC_GROUP_CLASS_NAME abcna,
WSCT.CATEGORY_SET_ID csid,
WSCT.CATEGORY_ID catid,
WSCT.CATEGORY_SET_NAME csna,
WSCT.ORDER_TYPE_ID otid,
WSCT.ORDER_TYPE_NAME otna,
WSCT.VENDOR_ID vid,
WSCT.VENDOR_NAME vna,
WSCT.PROJECT_ID pid,
WSCT.PROJECT_NAME pna,
WSCT.TASK_ID tid,
WSCT.TASK_NAME tna,
WSCT.USER_ID usid,
WSCT.USER_NAME usna,
WSCT.TRANSACTION_ACTION_ID taid,
WSCT.TRANSACTION_ACTION_NAME tana,
WSCT.REASON_ID resid,
WSCT.REASON_NAME resna,
WSCT.TRANSACTION_SOURCE_TYPE_ID tstid,
WSCT.TRANSACTION_SOURCE_TYPE_NAME tstna,
WSCT.TRANSACTION_TYPE_ID ttid,
WSCT.TRANSACTION_TYPE_NAME ttna,
WSCT.UOM_CODE uomco,
WSCT.UNIT_OF_MEASURE uomna,
WSCT.UOM_CLASS uomcl,
WSCT.UOM_CLASS_NAME uomclna,
WSCT.CREATION_DATE credt,
WSCT.WMS_ENABLED_FLAG wmsef,
WSCT.LOCATION_ID locid,
WSCT.LOCATION_NAME locna
FROM WMS_SELECTION_CRITERIA_TXN_V WSCT,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN
where DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and WSCT.FROM_ORGANIZATION_ID = DET.ORGANIZATION_ID
and DET.SOURCE_HEADER_ID = nvl('&header_id_selected',:v_header_id);


begin

for wms in wms_sct
loop

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
end if; -- do_analysis

-- Print line to Output file
utl_file.put_line(handle,'&sld '||n(wms.stgasg)||' &d ');
utl_file.put_line(handle,n(wms.seqno)||' &d '||n(wms.rultyco)||' &d ');
utl_file.put_line(handle,n(wms.rulty)||' &d '||n(wms.retty)||' &d ');
utl_file.put_line(handle,n(wms.rettyid)||' &d '||n(wms.rettyna)||' &d ');
utl_file.put_line(handle,n(wms.enaf)||' &d '||n(wms.dttyco)||' &d ');
utl_file.put_line(handle,n(wms.dttyfr)||' &d '||n(wms.dttyto)||' &d ');
utl_file.put_line(handle,n(wms.dttylty)||' &d '||n(wms.efffr)||' &d ');
utl_file.put_line(handle,n(wms.effto)||' &d '||n(wms.frorgid)||' &d ');
utl_file.put_line(handle,n(wms.frorgco)||' &d '||n(wms.frsubna)||' &d ');
utl_file.put_line(handle,n(wms.toorgid)||' &d '||n(wms.toorgco)||' &d ');
utl_file.put_line(handle,n(wms.tosubna)||' &d '||n(wms.cusid)||' &d ');
utl_file.put_line(handle,n(wms.cusna)||' &d '||n(wms.fcod)||' &d ');
utl_file.put_line(handle,n(wms.fcna)||' &d '||n(wms.inviid)||' &d ');
utl_file.put_line(handle,n(wms.it)||' &d '||n(wms.ityp)||' &d ');
utl_file.put_line(handle,n(wms.itypna)||' &d '||n(wms.assgid)||' &d ');
utl_file.put_line(handle,n(wms.abcid)||' &d '||n(wms.abcna)||' &d ');
utl_file.put_line(handle,n(wms.csid)||' &d '||n(wms.catid)||' &d ');
utl_file.put_line(handle,n(wms.csna)||' &d '||n(wms.vid)||' &d ');
utl_file.put_line(handle,n(wms.otna)||' &d '||n(wms.pid)||' &d ');
utl_file.put_line(handle,n(wms.vna)||' &d '||n(wms.tid)||' &d ');
utl_file.put_line(handle,n(wms.pna)||' &d '||n(wms.usid)||' &d ');
utl_file.put_line(handle,n(wms.usna)||' &d '||n(wms.taid)||' &d ');
utl_file.put_line(handle,n(wms.tana)||' &d '||n(wms.resid)||' &d ');
utl_file.put_line(handle,n(wms.resna)||' &d '||n(wms.tstid)||' &d ');
utl_file.put_line(handle,n(wms.tstna)||' &d '||n(wms.ttid)||' &d ');
utl_file.put_line(handle,n(wms.ttna)||' &d '||n(wms.uomco)||' &d ');
utl_file.put_line(handle,n(wms.uomna)||' &d '||n(wms.uomcl)||' &d ');
utl_file.put_line(handle,n(wms.uomclna)||' &d '||n(wms.credt)||' &d ');
utl_file.put_line(handle,n(wms.wmsef)||' &d '||n(wms.locid)||' &d ');
utl_file.put_line(handle,n(wms.locna)||' &el ');

end loop;

end;

UTL_FILE.PUT_LINE(handle,'&et ');


end if; --prt_wms



if UPPER(nvl('&prt_inv','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_TRANSACTIONS_INTERFACE"> MTL_TRANSACTIONS_INTERFACE (MTI) </a> <a HREF="#MTI">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh TRX_INT_ID &dh LINE &dh LINE_ID &dh DELIVERY DETAIL_ID &dh ITEM &dh PICKING LINE &dh TRANSACT TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'TRANSACTION DATE &dh PRIM QTY &dh FROM_SUB &dh FROM LOC_ID &dh PROCESS &dh LOCK &dh TRANSACTION MODE &dh LPN_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ERROR CODE &dh ERROR EXPLANATION &dh SECONDARY UOM_CODE &dh SECONDARY TRANS_QTY &DH ');
UTL_FILE.PUT_LINE(handle,'ACCOUNT PERIOD_ID &dh PERRIOD NAME &dh PERIOD OPEN &dh PERIOD START_DT &dh PERIOD CLOSE_DT ');
UTL_FILE.PUT_LINE(handle,'&dh SCHEDULE CLOSE_DT &eh');

Declare
cursor mtl_trx_int is
SELECT
TMP.TRANSACTION_INTERFACE_ID TXN_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
LIN.LINE_ID LINE_ID,
DET.DELIVERY_DETAIL_ID DEL_DETAIL_ID,
ITM.SEGMENT1 ITEM,
TMP.PICKING_LINE_ID PICK_LN_ID,
decode(TMP.TRANSACTION_TYPE_ID,
52,'52-Stage Trans',
33,'33-SO Issue',
15,'15-RMA Receipt',
18,'18-PO Receipt',
TMP.TRANSACTION_TYPE_ID||'-Unknown') TXN_TYPE,
TMP.TRANSACTION_DATE TXN_DATE,
TMP.PRIMARY_QUANTITY PRM_Q,
TMP.SUBINVENTORY_CODE FROM_SUB,
TMP.LOCATOR_ID FROM_LOC_ID,
TMP.PROCESS_FLAG PROCESS,
TMP.LOCK_FLAG LCK,
TMP.TRANSACTION_MODE TRANS_MODE,
TMP.CONTENT_LPN_ID LPN_ID,
TMP.ERROR_CODE ERROR_CODE,
TMP.ERROR_EXPLANATION ERROR_EXPL,
TMP.SECONDARY_UOM_CODE SEC_UOM_CODE,
TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
TMP.ACCT_PERIOD_ID ACCT_PER,
OAC.period_name per_name,
OAC.open_flag open_fl,
to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS') per_sd,
to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS') per_cd,
to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
FROM
MTL_TRANSACTIONS_INTERFACE TMP,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM,
ORG_ACCT_PERIODS OAC
WHERE
TMP.SOURCE_LINE_ID = LIN.LINE_ID
and LIN.LINE_CATEGORY_CODE = 'ORDER'
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and TMP.PICKING_LINE_ID = DET.DELIVERY_DETAIL_ID(+)
and TMP.ACCT_PERIOD_ID = OAC.acct_period_id
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
SELECT
TMP.TRANSACTION_INTERFACE_ID TXN_ID,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
LIN.LINE_ID LINE_ID,
DET.DELIVERY_DETAIL_ID DEL_DETAIL_ID,
ITM.SEGMENT1 ITEM,
TMP.PICKING_LINE_ID PICK_LN_ID,
decode(TMP.TRANSACTION_TYPE_ID,
52,'Stage Trans',
33,'SO Issue',
15,'RMA Receipt',
18,'PO Receipt',
TMP.TRANSACTION_TYPE_ID) TXN_TYPE,
TMP.TRANSACTION_DATE TXN_DATE,
TMP.PRIMARY_QUANTITY PRM_Q,
TMP.SUBINVENTORY_CODE FROM_SUB,
TMP.LOCATOR_ID FROM_LOC_ID,
TMP.PROCESS_FLAG PROCESS,
TMP.LOCK_FLAG LCK,
TMP.TRANSACTION_MODE TRANS_MODE,
TMP.CONTENT_LPN_ID LPN_ID,
TMP.ERROR_CODE ERROR_CODE,
TMP.ERROR_EXPLANATION ERROR_EXPL,
TMP.SECONDARY_UOM_CODE SEC_UOM_CODE,
TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
TMP.ACCT_PERIOD_ID ACCT_PER,
OAC.period_name per_name,
OAC.open_flag open_fl,
to_char(oac.period_start_date,'DD-MON-RR_HH24:MI:SS') per_sd,
to_char(oac.period_close_date,'DD-MON-RR_HH24:MI:SS') per_cd,
to_char(oac.schedule_close_date,'DD-MON-RR_HH24:MI:SS') sch_cd
FROM
MTL_TRANSACTIONS_INTERFACE TMP,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM,
ORG_ACCT_PERIODS OAC
WHERE
TMP.TRX_SOURCE_LINE_ID = LIN.LINE_ID
and LIN.LINE_CATEGORY_CODE = 'RETURN'
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and TMP.PICKING_LINE_ID = DET.DELIVERY_DETAIL_ID(+)
and TMP.ACCT_PERIOD_ID = OAC.acct_period_id
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for mti in mtl_trx_int
loop
utl_file.put_line(handle,'&sld'||n(mti.TXN_ID)||' &d ');
utl_file.put_line(handle,n(mti.LINE)||' &d '||n(mti.LINE_ID)||' &d ');
utl_file.put_line(handle,n(mti.DEL_DETAIL_ID)||' &d'||n(mti.ITEM)||' &d ');
utl_file.put_line(handle,n(mti.PICK_LN_ID)||' &d'||n(mti.TXN_TYPE)||' &d ');
utl_file.put_line(handle,n(mti.TXN_DATE)||' &d ');
utl_file.put_line(handle,n(mti.PRM_Q)||' &d '||n(mti.FROM_SUB)||' &d ');
utl_file.put_line(handle,n(mti.FROM_LOC_ID)||' &d '||n(mti.PROCESS)||' &d ');
utl_file.put_line(handle,n(mti.LCK)||' &d '||n(mti.TRANS_MODE)||' &d ');
utl_file.put_line(handle,n(mti.LPN_ID)||' &d '||n(mti.ERROR_CODE)||' &d ');
utl_file.put_line(handle,n(mti.ERROR_EXPL)||' &d ');
utl_file.put_line(handle,n(mti.SEC_UOM_CODE)||' &d '||n(mti.SEC_TRN_QTY)||' &d ');
utl_file.put_line(handle,n(mti.ACCT_PER)||' &d '||n(mti.PER_NAME)||' &d ');
utl_file.put_line(handle,n(mti.open_fl)||' &d '||n(mti.per_sd)||' &d ');
utl_file.put_line(handle,n(mti.per_cd)||' &d '||n(mti.sch_cd)||' &el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_MATERIAL_TRANSACTIONS_TEMP"> MTL_MATERIAL_TRANSACTIONS_TEMP (TMP) - UNPICKED LINES </a> ');
UTL_FILE.PUT_LINE(handle,'<a HREF="#TMP">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh MTL_TRNS_ID &dh TRANSACTION DATE &dh MOVE_LINE_ID &dh PICK_SLIP &dh LINE &dh LINE_ID &dh ITEM ');
UTL_FILE.PUT_LINE(handle,'&dh PRM_Q &dh FROM_SUB &dh FROM_LOC_ID &dh ');
UTL_FILE.PUT_LINE(handle,'TO_SUB &dh TO_LOC_ID &dh PROCESS &dh LCK &dh TRANS_MODE &dh ERROR_CODE &dh ERROR_EXPL &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY UOM_CODE &dh SECONDARY TRANS_QTY &dh LOT_NUM &dh LOT PRM_QTY &dh LOT SEC_QTY &dh ');
UTL_FILE.PUT_LINE(handle,'LOT_CAL SEC_QTY &eh');


Declare
cursor mtl_trx_tmp is
SELECT distinct
TMP.TRANSACTION_TEMP_ID MTL_TRNS_ID,
TMP.TRANSACTION_DATE MTL_TRNS_DATE,
TMP.MOVE_ORDER_LINE_ID MOVE_LINE_ID,
--'UNPICKED' LINE_STATUS,
TMP.PICK_SLIP_NUMBER PICK_SLIP,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
LIN.LINE_ID LINE_ID,
--DET.DELIVERY_DETAIL_ID DET_DELIVERY_ID,
ITM.SEGMENT1 ITEM,
TMP.PRIMARY_QUANTITY PRM_Q,
TMP.SUBINVENTORY_CODE FROM_SUB,
TMP.LOCATOR_ID FROM_LOC_ID,
TMP.TRANSFER_SUBINVENTORY TO_SUB,
TMP.TRANSFER_TO_LOCATION TO_LOC_ID,
TMP.PROCESS_FLAG PROCESS,
TMP.LOCK_FLAG LCK,
TMP.TRANSACTION_MODE TRANS_MODE,
TMP.ERROR_CODE ERROR_CODE,
TMP.ERROR_EXPLANATION ERROR_EXPL,
TMP.SECONDARY_UOM_CODE SEC_UOM_CODE,
TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
lot.lot_number lot_num,
lot.primary_quantity lot_prm_q,
lot.secondary_quantity lot_sec_q,
inv_convert.inv_um_convert(
tmp.inventory_item_id,
lot.lot_number,
tmp.organization_id,
5,
lot.primary_quantity,
itm.primary_uom_code,
tmp.secondary_uom_code,
null, null) lot_cal_sec_q
FROM
MTL_MATERIAL_TRANSACTIONS_TEMP TMP,
-- WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM,
mtl_transaction_lots_temp lot
WHERE
TMP.DEMAND_SOURCE_LINE = LIN.LINE_ID
and LIN.LINE_CATEGORY_CODE = 'ORDER'
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and lot.transaction_temp_id (+)= tmp.transaction_temp_id
-- and TMP.DEMAND_SOURCE_LINE = DET.SOURCE_LINE_ID(+) - Creates duplicates for lines with multiple Del_details.
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
UNION ALL
SELECT distinct
TMP.TRANSACTION_TEMP_ID MTL_TRNS_ID,
TMP.TRANSACTION_DATE MTL_TRNS_DATE,
TMP.MOVE_ORDER_LINE_ID MOVE_LINE_ID,
--'UNPICKED' LINE_STATUS,
TMP.PICK_SLIP_NUMBER PICK_SLIP,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
LIN.LINE_ID LINE_ID,
-- DET.DELIVERY_DETAIL_ID DET_DELIVERY_ID,
ITM.SEGMENT1 ITEM,
TMP.PRIMARY_QUANTITY PRM_Q,
TMP.SUBINVENTORY_CODE FROM_SUB,
TMP.LOCATOR_ID FROM_LOC_ID,
TMP.TRANSFER_SUBINVENTORY TO_SUB,
TMP.TRANSFER_TO_LOCATION TO_LOC_ID,
TMP.PROCESS_FLAG PROCESS,
TMP.LOCK_FLAG LCK,
TMP.TRANSACTION_MODE TRANS_MODE,
TMP.ERROR_CODE ERROR_CODE,
TMP.ERROR_EXPLANATION ERROR_EXPL,
TMP.SECONDARY_UOM_CODE SEC_UOM_CODE,
TMP.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
' ' lot_num,
0 lot_prm_q,
0 lot_sec_q,
0 lot_cal_sec_q
FROM
MTL_MATERIAL_TRANSACTIONS_TEMP TMP,
-- WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM
WHERE
TMP.TRX_SOURCE_LINE_ID = LIN.LINE_ID
and LIN.LINE_CATEGORY_CODE = 'RETURN'
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
-- and TMP.DEMAND_SOURCE_LINE = DET.SOURCE_LINE_ID(+)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for mtt in mtl_trx_tmp
loop
utl_file.put_line(handle,'&sld'||n(mtt.MTL_TRNS_ID)||'&d'||n(mtt.MTL_TRNS_DATE)||'&d');
utl_file.put_line(handle,n(mtt.MOVE_LINE_ID)||'&d');
utl_file.put_line(handle,n(mtt.PICK_SLIP)||'&d'||n(mtt.LINE)||'&d');
utl_file.put_line(handle,n(mtt.LINE_ID)||'&d'||n(mtt.ITEM)||'&d');
utl_file.put_line(handle,n(mtt.PRM_Q)||'&d'||n(mtt.FROM_SUB)||'&d');
utl_file.put_line(handle,n(mtt.FROM_LOC_ID)||'&d'||n(mtt.TO_SUB)||'&d');
utl_file.put_line(handle,n(mtt.TO_LOC_ID)||'&d'||n(mtt.PROCESS)||'&d');
utl_file.put_line(handle,n(mtt.LCK)||'&d'||n(mtt.TRANS_MODE)||'&d');
utl_file.put_line(handle,n(mtt.ERROR_CODE)||'&d'||n(mtt.ERROR_EXPL)||'&d ');
utl_file.put_line(handle,n(mtt.SEC_UOM_CODE)||'&d'||n(mtt.SEC_TRN_QTY)||'&d');
utl_file.put_line(handle,n(mtt.LOT_NUM)||'&d'||n(mtt.LOT_PRM_Q)||'&d');
utl_file.put_line(handle,n(mtt.LOT_SEC_Q)||'&d'||n(mtt.LOT_CAL_SEC_Q)||'&el');
end loop;
end;
UTL_FILE.PUT_LINE(handle,'&et ');


-- This is commented out because it runs slowly without an index
--<do not run> CREATE INDEX MTL_MATL_TRANS_777
--<do not run> ON INV.MTL_MATERIAL_TRANSACTIONS
--<do not run> (trx_source_line_id);

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_MATERIAL_TRANSACTIONS"> MTL_MATERIAL_TRANSACTIONS (TRN) - PICKED LINES </a>');
UTL_FILE.PUT_LINE(handle,'<a HREF="#TRN">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh WARNING &dh MTL_TRNS_ID &dh TRANSACTION DATE &dh MOVE_LINE_ID &dh TRANS_TYPE &dh ');
UTL_FILE.PUT_LINE(handle,'PICK_SLIP &dh LINE &dh LINE_ID &dh PRM_Q &dh');
UTL_FILE.PUT_LINE(handle,'FROM_SUB &dh FROM_LOC_ID &dh TO_SUB &dh TO_LOC_ID &dh ORG_ID &dh PICKING_LINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY UOM_CODE &dh SECONDARY TRANS_QTY &dh LOT PRM_QTY &dh LOT SEC_QTY &dh LOT_CAL SEC_QTY &eh');


declare
cursor Mtl_trans is
SELECT
TRN.TRANSACTION_ID MTL_TRNS_ID,
TRN.TRANSACTION_DATE MTL_TRNS_DATE,
TRN.MOVE_ORDER_LINE_ID MOVE_LINE_ID,
--to_char(TRN.TRANSACTION_TYPE_ID) || '=' ||
-- (select TYP.TRANSACTION_TYPE_NAME
-- from MTL_TRANSACTION_TYPES TYP
-- where TRN.TRANSACTION_TYPE_ID = TYP.TRANSACTION_TYPE_ID) TRANS_TYPE,
-- See header of this script for mapping other TRANSACTION_TYPE_ID's to their meaning
decode(TRN.TRANSACTION_TYPE_ID,
52,'Stage Trans',
53,'Stage Trans INT',
33,'SO Issue',
34,'SO Issue INT',
15,'RMA Receipt',
18,'PO Receipt',
'Invalid '||to_char(TRN.TRANSACTION_TYPE_ID)) TRANS_TYPE,
TRN.PICK_SLIP_NUMBER PICK_SLIP,
TRN.TRX_SOURCE_LINE_ID TRX_SOURCE_LINE_ID,
TRN.TRX_SOURCE_LINE_ID LINE_ID,
TRN.PRIMARY_QUANTITY PRM_Q,
TRN.SUBINVENTORY_CODE FROM_SUB,
TRN.LOCATOR_ID FROM_LOC_ID,
TRN.TRANSFER_SUBINVENTORY TO_SUB,
TRN.TRANSFER_LOCATOR_ID TO_LOC_ID,
TRN.ORGANIZATION_ID ORG_ID,
TRN.PICKING_LINE_ID PICKING_LINE_ID,
TRN.SECONDARY_UOM_CODE SEC_UOM_CODE,
TRN.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
lot.primary_quantity lot_prm_q,
lot.secondary_transaction_quantity lot_sec_q,
inv_convert.inv_um_convert(
lot.inventory_item_id,
lot.lot_number,
lot.organization_id,
5,
lot.primary_quantity,
itm.primary_uom_code,
trn.secondary_uom_code,
null, null) lot_cal_sec_q
FROM
MTL_MATERIAL_TRANSACTIONS TRN,
MTL_SYSTEM_ITEMS ITM,
mtl_transaction_lot_numbers lot
WHERE
-- klr
(TRN.TRX_SOURCE_LINE_ID,TRN.ORGANIZATION_ID,TRN.INVENTORY_ITEM_ID) IN (SELECT DISTINCT LINE_ID,SHIP_FROM_ORG_ID,INVENTORY_ITEM_ID
FROM OE_ORDER_LINES LIN1
WHERE LIN1.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN1.LINE_ID,
LIN1.TOP_MODEL_LINE_ID,
LIN1.ATO_LINE_ID,
LIN1.LINK_TO_LINE_ID,
LIN1.REFERENCE_LINE_ID,
LIN1.SERVICE_REFERENCE_LINE_ID))
and TRN.ORGANIZATION_ID = ITM.ORGANIZATION_ID
and TRN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID
and lot.transaction_id (+) = trn.transaction_id
UNION ALL
SELECT /* DROP SHIP */
TRN.TRANSACTION_ID MTL_TRNS_ID,
TRN.TRANSACTION_DATE MTL_TRNS_DATE,
TRN.MOVE_ORDER_LINE_ID MOVE_LINE_ID,
decode(TRN.TRANSACTION_TYPE_ID,
52,'Stage Trans',
33,'SO Issue',
15,'RMA Receipt',
18,'PO Receipt',
'Invalid '||to_char(TRN.TRANSACTION_TYPE_ID)) TRANS_TYPE,
TRN.PICK_SLIP_NUMBER PICK_SLIP,
-- to_char(TRN.SOURCE_LINE_ID) LINE,
TRN.TRX_SOURCE_LINE_ID TRX_SOURCE_LINE_ID,
TRN.TRX_SOURCE_LINE_ID LINE_ID,
TRN.PRIMARY_QUANTITY PRM_Q,
TRN.SUBINVENTORY_CODE FROM_SUB,
TRN.LOCATOR_ID FROM_LOC_ID,
TRN.TRANSFER_SUBINVENTORY TO_SUB,
TRN.TRANSFER_LOCATOR_ID TO_LOC_ID,
TRN.ORGANIZATION_ID ORG_ID,
TRN.PICKING_LINE_ID PICKING_LINE_ID,
TRN.SECONDARY_UOM_CODE SEC_UOM_CODE,
TRN.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
0 lot_prm_q, -- Only for OPM
0 lot_sec_q, -- Only for OPM
0 lot_cal_sec_q -- Only for OPM
FROM
MTL_MATERIAL_TRANSACTIONS TRN,
MTL_SYSTEM_ITEMS ITM,
OE_DROP_SHIP_SOURCES DRP,
PO_HEADERS_ALL POH
WHERE
TRN.TRANSACTION_TYPE_ID = 18 -- PO Receipt
and TRN.TRANSACTION_SOURCE_TYPE_ID = 1
and TRN.TRANSACTION_SOURCE_ID = POH.PO_HEADER_ID
and POH.PO_HEADER_ID = DRP.PO_HEADER_ID
and DRP.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and TRN.ORGANIZATION_ID = ITM.ORGANIZATION_ID
and TRN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID
UNION ALL
SELECT /* PO receipt trx for ATO BUY ITEM */
TRN.TRANSACTION_ID MTL_TRNS_ID,
TRN.TRANSACTION_DATE MTL_TRNS_DATE,
TRN.MOVE_ORDER_LINE_ID MOVE_LINE_ID,
decode(TRN.TRANSACTION_TYPE_ID,
52,'Stage Trans',
33,'SO Issue',
15,'RMA Receipt',
18,'PO Receipt',
'Invalid '||to_char(TRN.TRANSACTION_TYPE_ID)) TRANS_TYPE,
TRN.PICK_SLIP_NUMBER PICK_SLIP,
-- to_char(RES.DEMAND_SOURCE_LINE_ID) LINE,
TRN.TRX_SOURCE_LINE_ID TRX_SOURCE_LINE_ID,
TRN.TRX_SOURCE_LINE_ID LINE_ID,
TRN.PRIMARY_QUANTITY PRM_Q,
TRN.SUBINVENTORY_CODE FROM_SUB,
TRN.LOCATOR_ID FROM_LOC_ID,
TRN.TRANSFER_SUBINVENTORY TO_SUB,
TRN.TRANSFER_LOCATOR_ID TO_LOC_ID,
TRN.ORGANIZATION_ID ORG_ID,
TRN.PICKING_LINE_ID PICKING_LINE_ID,
TRN.SECONDARY_UOM_CODE SEC_UOM_CODE,
TRN.SECONDARY_TRANSACTION_QUANTITY SEC_TRN_QTY,
0 lot_prm_q, -- Only for OPM
0 lot_sec_q, -- Only for OPM
0 lot_cal_sec_q -- Only for OPM
FROM
MTL_MATERIAL_TRANSACTIONS TRN,
MTL_SYSTEM_ITEMS ITM,
MTL_RESERVATIONS RES,
PO_HEADERS_ALL POH
WHERE
:sales_ord_id = RES.DEMAND_SOURCE_HEADER_ID
and RES.DEMAND_SOURCE_TYPE_ID = 2 -- SO
and RES.SUPPLY_SOURCE_TYPE_ID in (1,13) -- PO or INV
and RES.SUPPLY_SOURCE_HEADER_ID = POH.PO_HEADER_ID --
and POH.PO_HEADER_ID = TRN.TRANSACTION_SOURCE_ID
and TRN.ORGANIZATION_ID = ITM.ORGANIZATION_ID
and TRN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID
and TRN.TRANSACTION_TYPE_ID = 18 -- PO Receipt
and TRN.TRANSACTION_SOURCE_TYPE_ID = 1;

r_lin_no varchar2(100);
type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..30
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := 'x';

end if;

for mt in Mtl_trans
loop
:r_flag := '';

-- Order_Line number
SELECT to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number))
into r_lin_no
FROM OE_ORDER_LINES LIN
WHERE mt.TRX_SOURCE_LINE_ID = LIN.LINE_ID;

if UPPER(nvl('&do_analysis','Y')) = 'Y' then
null;
---
-- Basic Verification
--
-- If i.Ordq < i.shpq then
-- :r_flag := :r_flag || '1 ';
-- end if;
-- If i.Ordq < i.fulq then
-- :r_flag := :r_flag || '2 ';
-- end if;
---
end if;

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#TRNERR">'||n(:r_flag)||'</a> &eb &d');
utl_file.put_line(handle,n(mt.MTL_TRNS_ID)||'&d'||n(mt.MTL_TRNS_DATE)||'&d');
utl_file.put_line(handle,'<a NAME="MO'||mt.MOVE_LINE_ID||'">'||n(mt.MOVE_LINE_ID)||'</a>'||'&d');
utl_file.put_line(handle,n(mt.TRANS_TYPE)||'&d'||n(mt.PICK_SLIP)||'&d');
utl_file.put_line(handle,n(r_lin_no)||'&d'||n(mt.LINE_ID)||'&d');
utl_file.put_line(handle,n(mt.PRM_Q)||'&d'||n(mt.FROM_SUB)||'&d');
utl_file.put_line(handle,n(mt.FROM_LOC_ID)||'&d'||n(mt.TO_SUB)||'&d');
utl_file.put_line(handle,n(mt.TO_LOC_ID)||'&d'||n(mt.ORG_ID)||'&d');
utl_file.put_line(handle,n(mt.PICKING_LINE_ID)||'&d ');
utl_file.put_line(handle,n(mt.SEC_UOM_CODE)||'&d'||n(mt.SEC_TRN_QTY)||'&d');
utl_file.put_line(handle,n(mt.LOT_PRM_Q)||'&d'||n(mt.LOT_SEC_Q)||'&d');
utl_file.put_line(handle,n(mt.LOT_CAL_SEC_Q)||'&el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="TRNERR">Warning List:</a> &eb &f');
for i in 1..30
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');

--<do not run> DROP INDEX INDEX MTL_MATL_TRANS_777;

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_SERIAL_NUMBERS"> MTL_SERIAL_NUMBERS (MSN)</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh ERR_FLAG &dh DEL_DET_ID &dh REL_STATUS &dh LINE &dh LINE_ID &dh ITEM_ID &dh FROM_SERIAL &dh TO_SERIAL &dh ');
UTL_FILE.PUT_LINE(handle,'QUANTITY &dh SERIAL_NUMBER &dh CURR_STATUS &dh CURR_SUBINV &dh REVISION &dh LOT_NUMBER &dh ');
UTL_FILE.PUT_LINE(handle,'CURR_LOCATION &dh CURR_ORG_ID &dh GROUP_MARK &dh LINE_MARK &dh LOT_MARK &dh ORIGIN_DATE &eh');

Declare
cursor m_serial_n is
select distinct
DET.DELIVERY_DETAIL_ID DEL_DET_ID,
decode(DET.RELEASED_STATUS,
'Y','Y=Staged',
'R','R=Ready to Release',
'S','S=Rel to Warhouse',
'B','B=Backorder',
'P','P=Pending Inv',
'C','C=Shipped',
'N','N=Not Ready',
'D','D=Cancelled',
'X','X=Not Applicable','Unknown: '||DET.RELEASED_STATUS) REL_STATUS,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
DET.SOURCE_LINE_ID LINE_ID,
DET.INVENTORY_ITEM_ID ITEM_ID,
substr(wsn.fm_serial_number,1,15) FROM_SERIAL,
substr(wsn.to_serial_number,1,15) TO_SERIAL,
wsn.quantity WSN_QTY,
to_char(wsn.creation_date,'DD-MON-RR_HH24:MI:SS') WSN_CRE_DATE,
MSN.SERIAL_NUMBER MSN_SN,
MSN.CURRENT_STATUS MSN_CUR_STA,
MSN.REVISION MSN_REV,
MSN.LOT_NUMBER MSN_LOT,
MSN.CURRENT_SUBINVENTORY_CODE MSN_CUR_SUB,
MSN.CURRENT_LOCATOR_ID MSN_CUR_LOC,
MSN.CURRENT_ORGANIZATION_ID MSN_CUR_ORG,
MSN.GROUP_MARK_ID MSN_GRP_MRK,
MSN.LINE_MARK_ID MSN_LIN_MRK,
MSN.LOT_LINE_MARK_ID MSN_LOT_MRK,
MSN.ORIGINATION_DATE MSN_ORI_DATE
FROM
OE_ORDER_LINES LIN,
WSH_DELIVERY_DETAILS DET,
WSH_SERIAL_NUMBERS WSN,
MTL_SERIAL_NUMBERS MSN
where
DET.DELIVERY_DETAIL_ID = WSN.DELIVERY_DETAIL_ID
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and DET.SOURCE_CODE = 'OE'
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and DET.INVENTORY_ITEM_ID = MSN.INVENTORY_ITEM_ID
and MSN.SERIAL_NUMBER between WSN.FM_SERIAL_NUMBER and WSN.TO_SERIAL_NUMBER
and (UPPER(nvl('&det_cnt','Y')) = 'Y' or rownum <= 10)
order by
LINE,MSN.SERIAL_NUMBER;
r_uom_lin varchar2(10);
r_qshp_lin number;
r_sta_lin varchar2(100);
r_mtl_trn varchar2(100);
type per_record_typ is RECORD
(flag varchar2(1),
descrip varchar2(200));
type msg_tab is TABLE of per_record_typ INDEX by binary_integer;
msg msg_tab;

function n(v varchar2) return varchar2 is
begin
if v is null then
return '&sp';
else
return v;
end if;
end n;

begin
:r_error := 0;
if UPPER(nvl('&do_analysis','Y')) = 'Y' then
for i in 1..1
loop
msg(i).flag := '0';
msg(i).descrip := '';
end loop;
msg(1).descrip := ' 1. No verifications yet.';
end if;

for dd in m_serial_n
loop
:r_flag := '';

-- if UPPER(nvl('&do_analysis','Y')) = 'Y' then
-- Include verifications here
-- Select nvl(mtl_transactions_enabled_flag,'N')
-- into r_mtl_trn
-- from Mtl_System_items
-- where Inventory_item_Id = dd.ITEM_ID
-- and Organization_Id = dd.WH_ID;
-- if dd.PICKABLE_FLAG <> r_mtl_trn then
-- :r_flag := :r_flag || '1 ';
-- msg(1).flag := '1';
-- end if;


-- end if; -- do_analysis
---

-- Print line to Output file
utl_file.put_line(handle,'&sld &b <a HREF="#MSNERR">'||n(:r_flag)||'</a> &eb &d ');
utl_file.put_line(handle,n(dd.DEL_DET_ID)||' &d ');
utl_file.put_line(handle,n(dd.REL_STATUS)||' &d '||n(dd.LINE)||' &d ');
utl_file.put_line(handle,'<a HREF="#'||dd.LINE_ID||'">'||n(dd.LINE_ID)||'</a> &d ');
utl_file.put_line(handle,n(dd.ITEM_ID)||' &d ');
utl_file.put_line(handle,n(dd.FROM_SERIAL)||' &d '||n(dd.TO_SERIAL)||' &d ');
utl_file.put_line(handle,n(dd.WSN_QTY)||' &d '||n(dd.MSN_SN)||' &d ');
utl_file.put_line(handle,n(dd.MSN_CUR_STA)||' &d '||n(dd.MSN_CUR_SUB)||' &d ');
utl_file.put_line(handle,n(dd.MSN_REV)||' &d '||n(dd.MSN_LOT)||' &d ');
utl_file.put_line(handle,n(dd.MSN_CUR_LOC)||' &d '||n(dd.MSN_CUR_ORG)||' &d ');
utl_file.put_line(handle,n(dd.MSN_GRP_MRK)||' &d '||n(dd.MSN_LIN_MRK)||' &d ');
utl_file.put_line(handle,n(dd.MSN_LOT_MRK)||' &d '||n(dd.MSN_ORI_DATE)||' &el');

if :r_flag is not null then
:r_error := 1;
end if;
end loop;
utl_file.put_line(handle,'&et');

if :r_error = 1 then
utl_file.put_line(handle,'&f &b <a NAME="MSNERR">Error List:</a> &eb &f');
for i in 1..1
loop
if msg(i).flag = '1' then
utl_file.put_line(handle,msg(i).descrip||'&f');
end if;
end loop;
end if;

end;

UTL_FILE.PUT_LINE(handle,'&et ');

UTL_FILE.PUT_LINE(handle,'&f &f MTL_UNIT_TRANSACTIONS (UNT) <a HREF="#UNT">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh TRANS_ID &dh TRANSACTION DATE &dh STATUS_ID &dh SUBINV &dh LOC_ID &dh SERIAL_NUM ');
UTL_FILE.PUT_LINE(handle,'&dh ITEM_ID &dh WH_ID &dh TRX_DATE &dh ');
UTL_FILE.PUT_LINE(handle,'TRX_SRC_ID &dh TRX_SRC_TYPE_ID &dh RECEIPT_ISSUE_TYPE &dh CUST_ID &dh SHIP_ID &eh');

Declare
cursor mtl_unt_trx is
select
UNT.TRANSACTION_ID TRANS_ID,
UNT.TRANSACTION_DATE MTL_TRNS_DATE,
UNT.STATUS_ID STATUS_ID,
UNT.SUBINVENTORY_CODE SUBINV,
UNT.LOCATOR_ID LOC_ID,
UNT.SERIAL_NUMBER SERIAL_NUM,
UNT.INVENTORY_ITEM_ID ITEM_ID,
UNT.ORGANIZATION_ID WH_ID,
to_char(UNT.TRANSACTION_DATE,'DD-MON-RR_HH24:MI:SS') TRX_DATE,
UNT.TRANSACTION_SOURCE_ID TRX_SRC_ID,
UNT.TRANSACTION_SOURCE_TYPE_ID TRX_SRC_TYPE_ID,
--UNT.TRANSACTION_SOURCE_NAME TRX_SOURCE_NAME
UNT.RECEIPT_ISSUE_TYPE RECEIPT_ISSUE_TYPE,
UNT.CUSTOMER_ID CUST_ID,
UNT.SHIP_ID SHIP_ID
--,UNT.SERIAL_ATTRIBUTE_CATEGORY SERIAL_ATTR_CAT
--,UNT.ORIGINATION_DATE ORIGIN_DATE
from MTL_UNIT_TRANSACTIONS UNT
where UNT.TRANSACTION_ID in (select TRN.TRANSACTION_ID
FROM
MTL_MATERIAL_TRANSACTIONS TRN,
--WSH_DELIVERY_DETAILS DET,
--OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM
WHERE
-- klr
(TRN.TRX_SOURCE_LINE_ID,TRN.ORGANIZATION_ID,TRN.INVENTORY_ITEM_ID) IN (SELECT DISTINCT LINE_ID,SHIP_FROM_ORG_ID,INVENTORY_ITEM_ID
FROM OE_ORDER_LINES LIN1
WHERE LIN1.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN1.LINE_ID,
LIN1.TOP_MODEL_LINE_ID,
LIN1.ATO_LINE_ID,
LIN1.LINK_TO_LINE_ID,
LIN1.REFERENCE_LINE_ID,
LIN1.SERVICE_REFERENCE_LINE_ID))
and TRN.ORGANIZATION_ID = ITM.ORGANIZATION_ID
and TRN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID)
and (UPPER(nvl('&det_cnt','Y')) = 'Y' or rownum <= 10);

begin
for mut in mtl_unt_trx
loop
utl_file.put_line(handle,'&sld'||n(mut.TRANS_ID)||' &d '||n(mut.MTL_TRNS_DATE)||' &d ');
utl_file.put_line(handle,n(mut.STATUS_ID)||' &d ');
utl_file.put_line(handle,n(mut.SUBINV)||' &d '||n(mut.LOC_ID)||' &d ');
utl_file.put_line(handle,n(mut.SERIAL_NUM)||' &d '||n(mut.ITEM_ID)||' &d ');
utl_file.put_line(handle,n(mut.WH_ID)||' &d '||n(mut.TRX_DATE)||' &d ');
utl_file.put_line(handle,n(mut.TRX_SRC_ID)||' &d '||n(mut.TRX_SRC_TYPE_ID)||' &d ');
utl_file.put_line(handle,n(mut.RECEIPT_ISSUE_TYPE)||' &d '||n(mut.CUST_ID)||' &d ');
utl_file.put_line(handle,n(mut.SHIP_ID)||' &el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="MTL_TXN_REQUEST_LINES_V"> MTL_TXN_REQUEST_LINES_V (MOV) - MOVE TRANSACTIONS </a> <a HREF="#MOV">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh MO_LINE_ID &dh MO_NUMBER &dh MV_HDR_ID &dh MV_LINE_NUM &dh MV_LINE_STAT &dh LINE &dh TXN_SLINE_ID &dh ');
UTL_FILE.PUT_LINE(handle,'ITEM &dh QTY &dh PRM_Q &dh DLV_Q &dh DTL_Q &dh MOVE_TYPE_NAME &dh TRNS_SRC_TYPE &dh TRNS_TYPE_NAME &dh WH_ID &dh ');
UTL_FILE.PUT_LINE(handle,'FROM_SUB &dh FROM_LOC_ID &dh TO_SUB &dh TO_LOC_ID &dh LOT_NUM &dh TRNS_HEAD_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SECONDARY QTY &dh SECONDARY DETAIL_Q &dh SECONDARY DELIVER_Q &eh');

Declare
cursor mtl_trx_reql is
select distinct
TRL.LINE_ID MO_LINE_ID,
TRH.REQUEST_NUMBER MO_NUMBER,
TRL.HEADER_ID MV_HDR_ID,
TRL.LINE_NUMBER MV_LINE_NUM,
decode(TRL.LINE_STATUS,
1, '1=Incomplete',
2, '2=Pend Aprvl',
3, '3=Approved',
4, '4=Not Apprvd',
5, '5=Closed',
6, '6=Canceled',
7, '7=Pre Apprvd',
8, '8=Part Aprvd',
9, '9=Cncld Source') MV_LINE_STAT,
to_char(LIN.line_number) ||
decode(LIN.shipment_number, null, null, '.' || to_char(LIN.shipment_number))||
decode(LIN.option_number, null, null, '.' || to_char(LIN.option_number)) ||
decode(LIN.component_number, null, null,
decode(LIN.option_number, null, '.',null)||
'.'||to_char(LIN.component_number))||
decode(LIN.service_number,null,null,
decode(LIN.component_number, null, '.' , null) ||
decode(LIN.option_number, null, '.', null ) ||
'.'|| to_char(LIN.service_number)) LINE,
TRL.TXN_SOURCE_LINE_ID TXN_SLINE_ID,
--DET.DELIVERY_DETAIL_ID DEL_DET_ID,
ITM.SEGMENT1 ITEM,
TRL.QUANTITY QTY,
TRL.PRIMARY_QUANTITY PRM_Q,
TRL.QUANTITY_DELIVERED DLV_Q,
TRL.QUANTITY_DETAILED DTL_Q,
TRL.MOVE_ORDER_TYPE_NAME MOVE_TYPE_NAME,
decode(TRL.TRANSACTION_SOURCE_TYPE_ID,2,'Sales Order',TRL.TRANSACTION_SOURCE_TYPE_ID)
TRNS_SRC_TYPE,
TRL.TRANSACTION_TYPE_NAME TRNS_TYPE_NAME,
TRL.ORGANIZATION_ID WH_ID,
TRL.FROM_SUBINVENTORY_CODE FROM_SUB,
TRL.FROM_LOCATOR_ID FROM_LOC_ID,
TRL.TO_SUBINVENTORY_CODE TO_SUB,
TRL.TO_LOCATOR_ID TO_LOC_ID,
TRL.LOT_NUMBER LOT_NUM,
TRL.TRANSACTION_HEADER_ID TRNS_HEAD_ID,
trl.secondary_quantity sec_q,
trl.secondary_quantity_detailed sec_dtl_q,
trl.secondary_quantity_delivered sec_dlv_q
from MTL_TXN_REQUEST_LINES_V TRL,
MTL_TXN_REQUEST_HEADERS TRH,
WSH_DELIVERY_DETAILS DET,
OE_ORDER_LINES LIN,
MTL_SYSTEM_ITEMS ITM
where TRL.LINE_ID = DET.MOVE_ORDER_LINE_ID
--TRL.TXN_SOURCE_LINE_ID = LIN.LINE_ID
and LIN.SHIP_FROM_ORG_ID = ITM.ORGANIZATION_ID(+)
and LIN.INVENTORY_ITEM_ID = ITM.INVENTORY_ITEM_ID(+)
and DET.SOURCE_LINE_ID = LIN.LINE_ID
and TRL.HEADER_ID = TRH.HEADER_ID
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID);

begin
for mtr in mtl_trx_reql
loop
utl_file.put_line(handle,'&sld'||n(mtr.MO_LINE_ID)||'&d'||n(mtr.MO_NUMBER)||'&d');
utl_file.put_line(handle,n(mtr.MV_HDR_ID)||'&d'||n(mtr.MV_LINE_NUM)||'&d');
utl_file.put_line(handle,n(mtr.MV_LINE_STAT)||'&d'||n(mtr.LINE)||'&d');
utl_file.put_line(handle,n(mtr.TXN_SLINE_ID)||'&d'||n(mtr.ITEM)||'&d');
utl_file.put_line(handle,n(mtr.QTY)||'&d'||n(mtr.PRM_Q)||'&d');
utl_file.put_line(handle,n(mtr.DLV_Q)||'&d'||n(mtr.DTL_Q)||'&d');
utl_file.put_line(handle,n(mtr.MOVE_TYPE_NAME)||'&d'||n(mtr.TRNS_SRC_TYPE)||'&d');
utl_file.put_line(handle,n(mtr.TRNS_TYPE_NAME)||'&d'||n(mtr.WH_ID)||'&d');
utl_file.put_line(handle,n(mtr.FROM_SUB)||'&d'||n(mtr.FROM_LOC_ID)||'&d');
utl_file.put_line(handle,n(mtr.TO_SUB)||'&d'||n(mtr.TO_LOC_ID)||'&d');
utl_file.put_line(handle,n(mtr.LOT_NUM)||'&d'||n(mtr.TRNS_HEAD_ID)||'&d');
utl_file.put_line(handle,n(mtr.SEC_Q)||'&d'||n(mtr.SEC_DTL_Q)||'&d');
utl_file.put_line(handle,n(mtr.SEC_DLV_Q)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; --prt_inv

if UPPER(nvl('&prt_ar','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="RA_INTERFACE_LINES"> RA_INTERFACE_LINES (RAI) - RECEIVABLES INTERFACE LINES </a> <a HREF="#RAI">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTF_LINE_ID &dh BATCH_SOURCE &dh ITEM_ID &dh QTY &dh ORD_Q &dh UOM &dh PRICE &dh SO_LIN &dh AR_ID &dh IR_ID &dh');
UTL_FILE.PUT_LINE(handle,'LINE_TYPE &dh Order_Num_1 &dh Order_Type_2 &dh Delivery_3 &dh WayBill_4 &dh Line_ID_6 &dh Pick_Line_Id_7 &dh Bill_Lading_8 &dh ');
UTL_FILE.PUT_LINE(handle,'WH_ID_10 &dh PA_ID_11 &dh C_RATE &dh C_DATE &dh CURR &dh TR &dh S_TAX_ID &dh VAT_ID &dh EF &dh TERR_ID &eh');

Declare
cursor ra_int_lin is
select distinct
RAI.INTERFACE_LINE_ID INTF_LINE_ID,
RAI.BATCH_SOURCE_NAME BATCH_SOURCE,
RAI.INVENTORY_ITEM_ID ITEM_ID,
RAI.QUANTITY QTY,
RAI.QUANTITY_ORDERED ORD_Q,
RAI.UOM_CODE UOM,
RAI.AMOUNT PRICE,
trim(RAI.SALES_ORDER_LINE) SO_LIN,
RAI.ACCOUNTING_RULE_ID AR_ID,
RAI.INVOICING_RULE_ID IR_ID,
RAI.LINE_TYPE LINE_TYPE,
RAI.INTERFACE_LINE_ATTRIBUTE1 Order_Num_1,
RAI.INTERFACE_LINE_ATTRIBUTE2 Order_Type_2,
RAI.INTERFACE_LINE_ATTRIBUTE3 Delivery_3,
RAI.INTERFACE_LINE_ATTRIBUTE4 WayBill_4,
RAI.INTERFACE_LINE_ATTRIBUTE6 Line_ID_6,
RAI.INTERFACE_LINE_ATTRIBUTE7 Pick_Line_Id_7,
RAI.INTERFACE_LINE_ATTRIBUTE8 Bill_Lading_8,
RAI.INTERFACE_LINE_ATTRIBUTE10 WH_ID_10,
RAI.INTERFACE_LINE_ATTRIBUTE11 PA_ID_11,
RAI.CONVERSION_RATE C_RATE,
to_Char(RAI.CONVERSION_DATE,'DD-MON-RR_HH24:MI:SS') C_DATE,
RAI.CURRENCY_CODE CURR,
RAI.TAX_RATE TR,
RAI.SALES_TAX_ID S_TAX_ID,
RAI.VAT_TAX_ID VAT_ID,
RAI.TAX_EXEMPT_FLAG EF,
RAI.TERRITORY_ID TERR_ID
--ENABLE_TIMESTAMP ,to_char(RAI.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(RAI.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,RAI.REQUEST_ID REQUEST_ID
FROM
RA_INTERFACE_LINES RAI,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and RAI.LINE_TYPE = 'LINE'
and (NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and NVL(RAI.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
RAI.INTERFACE_LINE_ID INTF_LINE_ID,
RAI.BATCH_SOURCE_NAME BATCH_SOURCE,
RAI.INVENTORY_ITEM_ID ITEM_ID,
RAI.QUANTITY QTY,
RAI.QUANTITY_ORDERED ORD_Q,
RAI.UOM_CODE UOM,
RAI.AMOUNT PRICE,
trim(RAI.SALES_ORDER_LINE) SO_LIN,
RAI.ACCOUNTING_RULE_ID AR_ID,
RAI.INVOICING_RULE_ID IR_ID,
RAI.LINE_TYPE LINE_TYPE,
RAI.INTERFACE_LINE_ATTRIBUTE1 Order_Num_1,
RAI.INTERFACE_LINE_ATTRIBUTE2 Order_Type_2,
RAI.INTERFACE_LINE_ATTRIBUTE3 Delivery_3,
RAI.INTERFACE_LINE_ATTRIBUTE4 WayBill_4,
RAI.INTERFACE_LINE_ATTRIBUTE6 Line_ID_6,
RAI.INTERFACE_LINE_ATTRIBUTE7 Pick_Line_Id_7,
RAI.INTERFACE_LINE_ATTRIBUTE8 Bill_Lading_8,
RAI.INTERFACE_LINE_ATTRIBUTE10 WH_ID_10,
RAI.INTERFACE_LINE_ATTRIBUTE11 PA_ID_11,
RAI.CONVERSION_RATE C_RATE,
to_char(RAI.CONVERSION_DATE,'DD-MON-RR_HH24:MI:SS') C_DATE,
RAI.CURRENCY_CODE CURR,
RAI.TAX_RATE TR,
RAI.SALES_TAX_ID S_TAX_ID,
RAI.VAT_TAX_ID VAT_ID,
RAI.TAX_EXEMPT_FLAG EF,
RAI.TERRITORY_ID TERR_ID
--ENABLE_TIMESTAMP ,to_char(RAI.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(RAI.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,RAI.REQUEST_ID REQUEST_ID
FROM
RA_INTERFACE_LINES RAI,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_PRICE_ADJUSTMENTS ADJ,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and RAI.LINE_TYPE = 'FREIGHT'
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and to_number(RAI.INTERFACE_LINE_ATTRIBUTE6) = ADJ.PRICE_ADJUSTMENT_ID
and ADJ.LINE_ID = LIN.LINE_ID
and ADJ.LINE_ID IS NOT NULL
and ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
RAI.INTERFACE_LINE_ID INTF_LINE_ID,
RAI.BATCH_SOURCE_NAME BATCH_SOURCE,
RAI.INVENTORY_ITEM_ID ITEM_ID,
RAI.QUANTITY QTY,
RAI.QUANTITY_ORDERED ORD_Q,
RAI.UOM_CODE UOM,
RAI.AMOUNT PRICE,
trim(RAI.SALES_ORDER_LINE) SO_LIN,
RAI.ACCOUNTING_RULE_ID AR_ID,
RAI.INVOICING_RULE_ID IR_ID,
RAI.LINE_TYPE LINE_TYPE,
RAI.INTERFACE_LINE_ATTRIBUTE1 Order_Num_1,
RAI.INTERFACE_LINE_ATTRIBUTE2 Order_Type_2,
RAI.INTERFACE_LINE_ATTRIBUTE3 Delivery_3,
RAI.INTERFACE_LINE_ATTRIBUTE4 WayBill_4,
RAI.INTERFACE_LINE_ATTRIBUTE6 Line_ID_6,
RAI.INTERFACE_LINE_ATTRIBUTE7 Pick_Line_Id_7,
RAI.INTERFACE_LINE_ATTRIBUTE8 Bill_Lading_8,
RAI.INTERFACE_LINE_ATTRIBUTE10 WH_ID_10,
RAI.INTERFACE_LINE_ATTRIBUTE11 PA_ID_11,
RAI.CONVERSION_RATE C_RATE,
to_char(RAI.CONVERSION_DATE,'DD-MON-RR_HH24:MI:SS') C_DATE,
RAI.CURRENCY_CODE CURR,
RAI.TAX_RATE TR,
RAI.SALES_TAX_ID S_TAX_ID,
RAI.VAT_TAX_ID VAT_ID,
RAI.TAX_EXEMPT_FLAG EF,
RAI.TERRITORY_ID TERR_ID
--ENABLE_TIMESTAMP ,to_char(RAI.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(RAI.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,RAI.REQUEST_ID REQUEST_ID
FROM
RA_INTERFACE_LINES RAI,
OE_ORDER_HEADERS ORD,
OE_PRICE_ADJUSTMENTS ADJ,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and RAI.LINE_TYPE = 'FREIGHT'
and ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ADJ.LINE_ID IS NULL
and ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id);

begin
for ril in ra_int_lin
loop
utl_file.put_line(handle,'&sld'||n(ril.INTF_LINE_ID)||'&d'||n(ril.BATCH_SOURCE)||'&d');
utl_file.put_line(handle,n(ril.ITEM_ID)||'&d'||n(ril.QTY)||'&d');
utl_file.put_line(handle,n(ril.ORD_Q)||'&d'||n(ril.UOM)||'&d');
utl_file.put_line(handle,n(ril.PRICE)||'&d'||n(ril.SO_LIN)||'&d');
utl_file.put_line(handle,n(ril.AR_ID)||'&d'||n(ril.IR_ID)||'&d');
utl_file.put_line(handle,n(ril.LINE_TYPE)||'&d'||n(ril.ORDER_NUM_1)||'&d');
utl_file.put_line(handle,n(ril.ORDER_TYPE_2)||'&d'||n(ril.DELIVERY_3)||'&d');
utl_file.put_line(handle,n(ril.WAYBILL_4)||'&d'||n(ril.LINE_ID_6)||'&d');
utl_file.put_line(handle,n(ril.PICK_LINE_ID_7)||'&d'||n(ril.BILL_LADING_8)||'&d');
utl_file.put_line(handle,n(ril.WH_ID_10)||'&d'||n(ril.PA_ID_11)||'&d');
utl_file.put_line(handle,n(ril.C_RATE)||'&d'||n(ril.C_DATE)||'&d');
utl_file.put_line(handle,n(ril.CURR)||'&d'||n(ril.TR)||'&d');
utl_file.put_line(handle,n(ril.S_TAX_ID)||'&d'||n(ril.VAT_ID)||'&d');
utl_file.put_line(handle,n(ril.EF)||'&d'||n(ril.TERR_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f RA_INTERFACE_ERRORS (RAE) - RECEIVABLES INTERFACE ERRORS &f');
UTL_FILE.PUT_LINE(handle,'&std &sh INTERFACE_LINE_ID &dh INTERFACE_SALESCREDIT_ID &dh MESSAGE_TEXT &eh');

Declare
cursor ra_int_err is
select distinct
RAE.INTERFACE_LINE_ID,
RAE.INTERFACE_SALESCREDIT_ID,
RAE.MESSAGE_TEXT
FROM
RA_INTERFACE_LINES RAI,
RA_INTERFACE_ERRORS RAE,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAI.INTERFACE_LINE_ID = RAE.INTERFACE_LINE_ID
and RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and (NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and NVL(RAI.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID))
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
RAE.INTERFACE_LINE_ID,
RAE.INTERFACE_SALESCREDIT_ID,
RAE.MESSAGE_TEXT
FROM
RA_INTERFACE_LINES RAI,
RA_INTERFACE_ERRORS RAE,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_PRICE_ADJUSTMENTS ADJ,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and RAI.INTERFACE_LINE_ID = RAE.INTERFACE_LINE_ID
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and RAI.LINE_TYPE = 'FREIGHT'
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and to_number(RAI.INTERFACE_LINE_ATTRIBUTE6) = ADJ.PRICE_ADJUSTMENT_ID
and ADJ.LINE_ID = LIN.LINE_ID
and ADJ.LINE_ID IS NOT NULL
and ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
UNION
select distinct
RAE.INTERFACE_LINE_ID,
RAE.INTERFACE_SALESCREDIT_ID,
RAE.MESSAGE_TEXT
FROM
RA_INTERFACE_LINES RAI,
RA_INTERFACE_ERRORS RAE,
OE_ORDER_HEADERS ORD,
OE_PRICE_ADJUSTMENTS ADJ,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAI.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAI.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and RAI.INTERFACE_LINE_ID = RAE.INTERFACE_LINE_ID
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and RAI.LINE_TYPE = 'FREIGHT'
and ADJ.HEADER_ID = nvl('&header_id_selected',:v_header_id)
and ADJ.LINE_ID IS NULL
and ORD.HEADER_ID = nvl('&header_id_selected',:v_header_id);

begin
for rie in ra_int_err
loop
utl_file.put_line(handle,'&sld'||n(rie.INTERFACE_LINE_ID)||'&d'||n(rie.INTERFACE_SALESCREDIT_ID)||'&d');
utl_file.put_line(handle,n(rie.MESSAGE_TEXT)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="RA_CUSTOMER_TRX"> RA_CUSTOMER_TRX (RAH) - INVOICE HEADERS </a> <a HREF="#RAH">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh CUST_TRX_ID &dh TRX_NUMBER &dh TRX_TYPE_ID &dh TRX_DATE &dh BATCH_ID &dh SOURCE_ID &dh BILL_CUST &dh BILL_SITE &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_CUST &dh SHIP_SITE &dh TERM_ID &dh SALESREP_ID &dh PO_NUMBER &dh CURR &dh AGREEMENT &dh COMP_FL &dh IR_ID &dh ');
UTL_FILE.PUT_LINE(handle,'SHIP_VIA &dh WAYBILL &dh STATUS &eh');

Declare
cursor ra_cus_trx is
select distinct
RAH.CUSTOMER_TRX_ID CUST_TRX_ID,
RAH.TRX_NUMBER TRX_NUMBER,
RAH.CUST_TRX_TYPE_ID TRX_TYPE_ID,
to_char(RAH.TRX_DATE,'DD-MON-RR_HH24:MI:SS') TRX_DATE,
RAH.BATCH_ID BATCH_ID,
RAH.BATCH_SOURCE_ID SOURCE_ID,
RAH.BILL_TO_CUSTOMER_ID BILL_CUST,
RAH.BILL_TO_SITE_USE_ID BILL_SITE,
RAH.SHIP_TO_CUSTOMER_ID SHIP_CUST,
RAH.SHIP_TO_SITE_USE_ID SHIP_SITE,
RAH.TERM_ID TERM_ID,
RAH.PRIMARY_SALESREP_ID SALESREP_ID,
RAH.PURCHASE_ORDER PO_NUMBER,
RAH.INVOICE_CURRENCY_CODE CURR,
RAH.AGREEMENT_ID AGREEMENT,
RAH.COMPLETE_FLAG COMP_FL,
RAH.INVOICING_RULE_ID IR_ID,
RAH.SHIP_VIA SHIP_VIA,
RAH.WAYBILL_NUMBER WAYBILL,
RAH.STATUS_TRX STATUS
--ENABLE_TIMESTAMP ,to_char(RAH.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(RAH.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,RAH.REQUEST_ID REQUEST_ID
FROM
RA_CUSTOMER_TRX RAH,
RA_CUSTOMER_TRX_LINES RAL,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAH.CUSTOMER_TRX_ID = RAL.CUSTOMER_TRX_ID
and RAL.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAL.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and NVL(RAL.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id)
ORDER BY
RAH.TRX_NUMBER;

begin
for rct in ra_cus_trx
loop
utl_file.put_line(handle,'&sld'||n(rct.CUST_TRX_ID)||'&d'||n(rct.TRX_NUMBER)||'&d');
utl_file.put_line(handle,n(rct.TRX_TYPE_ID)||'&d'||n(rct.TRX_DATE)||'&d');
utl_file.put_line(handle,n(rct.BATCH_ID)||'&d'||n(rct.SOURCE_ID)||'&d');
utl_file.put_line(handle,n(rct.BILL_CUST)||'&d'||n(rct.BILL_SITE)||'&d');
utl_file.put_line(handle,n(rct.SHIP_CUST)||'&d'||n(rct.SHIP_SITE)||'&d');
utl_file.put_line(handle,n(rct.TERM_ID)||'&d'||n(rct.SALESREP_ID)||'&d');
utl_file.put_line(handle,n(rct.PO_NUMBER)||'&d'||n(rct.CURR)||'&d');
utl_file.put_line(handle,n(rct.AGREEMENT)||'&d'||n(rct.COMP_FL)||'&d');
utl_file.put_line(handle,n(rct.IR_ID)||'&d'||n(rct.SHIP_VIA)||'&d');
utl_file.put_line(handle,n(rct.WAYBILL)||'&d'||n(rct.STATUS)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');


UTL_FILE.PUT_LINE(handle,'&f &f <a NAME="RA_CUSTOMER_TRX_LINES"> RA_CUSTOMER_TRX_LINES (RAL) - INVOICE LINES </a> <a HREF="#RAL">Column Definitions</a> &f');
UTL_FILE.PUT_LINE(handle,'&std &sh TRX_LINE_ID &dh LINK_TO_ID &dh CUST_TRX_ID &dh TRX_NUMBER &dh SOURCE &dh LINE_NUM &dh ITEM_ID &dh ORD_Q &dh ');
UTL_FILE.PUT_LINE(handle,'INV_Q &dh CRD_Q &dh UOM &dh PRICE &dh EXTD_AMT &dh REV_AMT &dh SO_LIN &dh LINE_TYPE &dh Order_Num_1 &dh Order_Type_2 &dh ');
UTL_FILE.PUT_LINE(handle,'Delivery_3 &dh WayBill_4 &dh Line_ID_5 &dh Bill_Lading_8 &dh WH_ID_10 &dh PA_ID_11 &dh TF &dh TR &dh VAT_ID &dh S_TAX_ID &eh');

Declare
cursor ra_cus_trxl is
select distinct
RAL.CUSTOMER_TRX_LINE_ID TRX_LINE_ID,
RAL.LINK_TO_CUST_TRX_LINE_ID LINK_TO_ID,
RAL.CUSTOMER_TRX_ID CUST_TRX_ID,
RAH.TRX_NUMBER TRX_NUMBER,
RAL.SALES_ORDER_SOURCE SOURCE,
RAL.LINE_NUMBER LINE_NUM,
RAL.INVENTORY_ITEM_ID ITEM_ID,
RAL.QUANTITY_ORDERED ORD_Q,
RAL.QUANTITY_INVOICED INV_Q,
RAL.QUANTITY_CREDITED CRD_Q,
RAL.UOM_CODE UOM,
RAL.UNIT_SELLING_PRICE PRICE,
RAL.EXTENDED_AMOUNT EXTD_AMT,
RAL.REVENUE_AMOUNT REV_AMT,
TRIM(RAL.SALES_ORDER_LINE) SO_LIN,
RAL.LINE_TYPE LINE_TYPE,
RAL.INTERFACE_LINE_ATTRIBUTE1 Order_Num_1,
RAL.INTERFACE_LINE_ATTRIBUTE2 Order_Type_2,
RAL.INTERFACE_LINE_ATTRIBUTE3 Delivery_3,
RAL.INTERFACE_LINE_ATTRIBUTE4 WayBill_4,
RAL.INTERFACE_LINE_ATTRIBUTE6 Line_ID_5,
RAL.INTERFACE_LINE_ATTRIBUTE8 Bill_Lading_8,
RAL.INTERFACE_LINE_ATTRIBUTE10 WH_ID_10,
RAL.INTERFACE_LINE_ATTRIBUTE11 PA_ID_11,
RAL.TAXABLE_FLAG TF,
RAL.TAX_RATE TR,
RAL.VAT_TAX_ID VAT_ID,
RAL.SALES_TAX_ID S_TAX_ID
--ENABLE_TIMESTAMP ,to_char(RAL.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(RAL.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,RAL.REQUEST_ID REQUEST_ID
FROM
RA_CUSTOMER_TRX RAH,
RA_CUSTOMER_TRX_LINES RAL
WHERE
RAH.CUSTOMER_TRX_ID = RAL.CUSTOMER_TRX_ID
and RAL.CUSTOMER_TRX_LINE_ID in
(select RAL1.CUSTOMER_TRX_LINE_ID
FROM
RA_CUSTOMER_TRX RAH1,
RA_CUSTOMER_TRX_LINES RAL1,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAH1.CUSTOMER_TRX_ID = RAL1.CUSTOMER_TRX_ID
and RAL1.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAL1.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and NVL(RAL1.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id))
UNION
select /* LINKED LINES */
distinct
RAL.CUSTOMER_TRX_LINE_ID TRX_LINE_ID,
RAL.LINK_TO_CUST_TRX_LINE_ID LINK_TO_ID,
RAL.CUSTOMER_TRX_ID CUST_TRX_ID,
RAH.TRX_NUMBER TRX_NUMBER,
RAL.SALES_ORDER_SOURCE SOURCE,
RAL.LINE_NUMBER LINE_NUM,
RAL.INVENTORY_ITEM_ID ITEM_ID,
RAL.QUANTITY_ORDERED ORD_Q,
RAL.QUANTITY_INVOICED INV_Q,
RAL.QUANTITY_CREDITED CRD_Q,
RAL.UOM_CODE UOM,
RAL.UNIT_SELLING_PRICE PRICE,
RAL.EXTENDED_AMOUNT EXTD_AMT,
RAL.REVENUE_AMOUNT REV_AMT,
TRIM(RAL.SALES_ORDER_LINE) SO_LIN,
RAL.LINE_TYPE LINE_TYPE,
RAL.INTERFACE_LINE_ATTRIBUTE1 Order_Num_1,
RAL.INTERFACE_LINE_ATTRIBUTE2 Order_Type_2,
RAL.INTERFACE_LINE_ATTRIBUTE3 Delivery_3,
RAL.INTERFACE_LINE_ATTRIBUTE4 WayBill_4,
RAL.INTERFACE_LINE_ATTRIBUTE6 Line_ID_5,
RAL.INTERFACE_LINE_ATTRIBUTE8 Bill_Lading_8,
RAL.INTERFACE_LINE_ATTRIBUTE10 WH_ID_10,
RAL.INTERFACE_LINE_ATTRIBUTE11 PA_ID_11,
RAL.TAXABLE_FLAG TF,
RAL.TAX_RATE TR,
RAL.VAT_TAX_ID VAT_ID,
RAL.SALES_TAX_ID S_TAX_ID
--ENABLE_TIMESTAMP ,to_char(RAL.CREATION_DATE,'DD-MON-RR_HH24:MI:SS') CREATE_DT
--ENABLE_TIMESTAMP ,to_char(RAL.LAST_UPDATE_DATE,'DD-MON-RR_HH24:MI:SS') UPDATE_DT
--ENABLE_TIMESTAMP ,RAL.REQUEST_ID REQUEST_ID
FROM
RA_CUSTOMER_TRX RAH,
RA_CUSTOMER_TRX_LINES RAL
WHERE
RAH.CUSTOMER_TRX_ID = RAL.CUSTOMER_TRX_ID
and RAL.LINK_TO_CUST_TRX_LINE_ID in
(select RAL1.CUSTOMER_TRX_LINE_ID
FROM
RA_CUSTOMER_TRX RAH1,
RA_CUSTOMER_TRX_LINES RAL1,
OE_ORDER_LINES LIN,
OE_ORDER_HEADERS ORD,
OE_TRANSACTION_TYPES_V TYP
WHERE
RAH1.CUSTOMER_TRX_ID = RAL1.CUSTOMER_TRX_ID
and RAL1.SALES_ORDER = to_char(ORD.ORDER_NUMBER)
and RAL1.INTERFACE_LINE_ATTRIBUTE2 = TYP.NAME
and TYP.TRANSACTION_TYPE_ID = ORD.ORDER_TYPE_ID
and ORD.HEADER_ID = LIN.HEADER_ID
and NVL('&line_id_selected',0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and NVL(RAL1.INTERFACE_LINE_ATTRIBUTE6,0) in (0,LIN.LINE_ID,
LIN.TOP_MODEL_LINE_ID,
LIN.ATO_LINE_ID,
LIN.LINK_TO_LINE_ID,
LIN.REFERENCE_LINE_ID,
LIN.SERVICE_REFERENCE_LINE_ID)
and LIN.HEADER_ID = nvl('&header_id_selected',:v_header_id))
order by
TRX_NUMBER,
TRX_LINE_ID;

begin
for rctl in ra_cus_trxl
loop
utl_file.put_line(handle,'&sld'||n(rctl.TRX_LINE_ID)||'&d'||n(rctl.LINK_TO_ID)||'&d');
utl_file.put_line(handle,n(rctl.CUST_TRX_ID)||'&d'||n(rctl.TRX_NUMBER)||'&d');
utl_file.put_line(handle,n(rctl.SOURCE)||'&d'||n(rctl.LINE_NUM)||'&d');
utl_file.put_line(handle,n(rctl.ITEM_ID)||'&d'||n(rctl.ORD_Q)||'&d');
utl_file.put_line(handle,n(rctl.INV_Q)||'&d'||n(rctl.CRD_Q)||'&d');
utl_file.put_line(handle,n(rctl.UOM)||'&d'||n(rctl.PRICE)||'&d');
utl_file.put_line(handle,n(rctl.EXTD_AMT)||'&d'||n(rctl.REV_AMT)||'&d');
utl_file.put_line(handle,n(rctl.SO_LIN)||'&d'||n(rctl.LINE_TYPE)||'&d');
utl_file.put_line(handle,n(rctl.ORDER_NUM_1)||'&d'||n(rctl.ORDER_TYPE_2)||'&d');
utl_file.put_line(handle,n(rctl.DELIVERY_3)||'&d'||n(rctl.WAYBILL_4)||'&d');
utl_file.put_line(handle,n(rctl.LINE_ID_5)||'&d'||n(rctl.BILL_LADING_8)||'&d');
utl_file.put_line(handle,n(rctl.WH_ID_10)||'&d'||n(rctl.PA_ID_11)||'&d');
utl_file.put_line(handle,n(rctl.TF)||'&d'||n(rctl.TR)||'&d');
utl_file.put_line(handle,n(rctl.VAT_ID)||'&d'||n(rctl.S_TAX_ID)||'&el');
end loop;
end;

UTL_FILE.PUT_LINE(handle,'&et');

end if; --prt_ar

end if; -- :v_head_only

-- Column descriptions for each table
UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <CENTER> COLUMN DEFINITIONS </CENTER> &eh &et &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="OOH">OE_ORDER_HEADERS (ORD)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld OP => OPEN FLAG &d BK => BOOKED FLAG &d SP => PARTIAL SHIPMENTS ALLOWED &el ');
UTL_FILE.PUT_LINE(handle,'&sld CN => CANCEL FLAG &d STA => SHIP TOLERANCE ABOVE &d STB => SHIP TOLERANCE BELOW &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="OOL">OE_ORDER_LINES (LIN)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld SHN_Q => SHIPPING QUANTITY &d OP => OPEN FLAG &d ORG => ORGANIZATION CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld SHP_Q => SHIPPED QUANTITY &d BK => BOOKED FLAG &d SI => Shipping Interfaced Flag &el');
UTL_FILE.PUT_LINE(handle,'&sld FUL_Q => FULFILLED QUANTITY &d SH => SHIPPABLE FLAG &d II => Inventory Interfaced Flag &el');
UTL_FILE.PUT_LINE(handle,'&sld CAN_Q => CANCELLED QUANTITY &d CN => CANCELLED FLAG &d ATO => ATO FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld INC_Q => INVOICED QUANTITY &d VD => VISIBLE DEMAND FLAG &d OPT => OPTION FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld RES_Q => RESERVATION QUANTITY &d SMC => SHIP MODEL COMPLETE &d FF => FULFILLED_FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld LCN_Q => LAST CANCELLED QTY &d CAL_PR => CALCULATE PRICE &d &sp &el');
UTL_FILE.PUT_LINE(handle,'&sld STA => SHIP TOLERANCE ABOVE &d STB => SHIP TOLERANCE BELOW &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

if UPPER(nvl('&prt_price','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="ADJC">APPLIED and UN-APPLIED HEADER PRICE ADJUSTMENTS (ADJ)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MOD_LVL => MODIFIER_LEVEL &d IF => INVOICED FLAG &d LK => LOCK CONTROL &el');
UTL_FILE.PUT_LINE(handle,'&sld CHG_TY_CD => CHARGE_TYPE_CODE &d EF => ESTIMATED FLAG &d PP => PRICING PHASE &el');
UTL_FILE.PUT_LINE(handle,'&sld CD => CREDIT_OR_DEBIT &d UA => UPDATE ALLOWED &d PI => PRINT ON INVOICE &el');
UTL_FILE.PUT_LINE(handle,'&sld AF => AUTOMATIC FLAG &d UF => UPDATED FLAG &d AP => APPLIED FLAG &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="ALA">APPLIED AND UNAPPLIED LINE PRICE ADJUSTMENTS</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MOD_LVL => MODIFIER_LEVEL_CODE &d CD => CREDIT_OR_CHARGE_FLAG &d UA => UPDATE_ALLOWED &el');
UTL_FILE.PUT_LINE(handle,'&sld CHG_TY_CD => CHARGE_TYPE_CODE &d AF => AUTOMATIC_FLAG &d UF => UPDATED_FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld ARITH_OP => ARITHMETIC_OPERATOR &d PI => PRINT_ON_INVOICE_FLAG &d AP => APPLIED_FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld OP_PER_QTY => OPERAND_PER_PQTY &d AC => ACCRUAL_FLAG &d LK => LOCK_CONTROL &el');
UTL_FILE.PUT_LINE(handle,'&sld ADJ_AMT_PO => ADJUSTED_AMOUNT_PER_PQTY &d EF => ESTIMATED_FLAG &d PERC => PERCENT &el');
UTL_FILE.PUT_LINE(handle,'&sld ADJ_AMT => ADJUSTED_AMOUNT &d PP => PRICING_PHASE_ID &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

end if; -- prt_price

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="WDD">WSH_DELIVERY_DETAILS (DET)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MO_LINE_ID => MOVE ORDER LINE ID &d DLV_Q => DELIVERED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld DELIV_ID => DELIVERY ID &d CAN_Q => CANCELLED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld SRQ_Q => SOURCE REQUESTED QUANTITY &d SRQ_U => SOURCE REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld REQ_Q => REQUESTED QUANTITY &d REQ_U => REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld OMI => ORDER MANAGEMENT INTERFACED &d INI => INVENTORY INTERFACED &el');
UTL_FILE.PUT_LINE(handle,'&sld PIKF => PICKABLE_FLAG &d PIK_Q => PICKED_QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld SHP_Q => SHIPPED QUANTITY &d ORG_SUB => ORIGINAL SUBINVENTORY &el');
UTL_FILE.PUT_LINE(handle,'&sld CUR_SUB => CURRENT SUBINVENTORY &d CF => CONTAINER FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld FL_PERC => FILL PERCENTAGE &d SHP_SET => SHIP_SET_ID &el');
UTL_FILE.PUT_LINE(handle,'&sld STA => SHIP TOLERANCE ABOVE &d STB => SHIP TOLERANCE BELOW &el');
UTL_FILE.PUT_LINE(handle,'&sld TRX_TEMP_ID=> TRANSACTION_TEMP_ID &d TOP_MO_LIN => TOP_MODEL_LINE_ID &el');
UTL_FILE.PUT_LINE(handle,'&sld SHP_MC => SHIP_MODEL_COMPLETE_FLAG &d SPL_DEL_DET_ID ==> SPLIT FROM DEL.DETAIL ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="WSN">WSH_SERIAL_NUMBERS (WSN)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld DET_DET_ID => DELIVERY DETAIL ID &d DLV_Q => DELIVERED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld REL_STATUS => RELEASED STATUS &d CAN_Q => CANCELLED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld SRQ_Q => SOURCE REQUESTED QUANTITY &d SRQ_U => SOURCE REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld REQ_Q => REQUESTED QUANTITY &d REQ_U => REQUESTED QUANTITY UOM &el');
UTL_FILE.PUT_LINE(handle,'&sld OMI => ORDER MANAGEMENT INTERFACED &d INI => INVENTORY INTERFACED &el');
UTL_FILE.PUT_LINE(handle,'&sld PIKF => PICKABLE_FLAG &d PIK_Q => PICKED_QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld SHP_Q => SHIPPED QUANTITY &d ORG_SUB => ORIGINAL SUBINVENTORY &el');
UTL_FILE.PUT_LINE(handle,'&sld CUR_SUB => CURRENT SUBINVENTORY &d CF => CONTAINER FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld FL_PERC => FILL PERCENTAGE &d SHP_SET => SHIP_SET_ID &el');
UTL_FILE.PUT_LINE(handle,'&sld STA => SHIP TOLERANCE ABOVE &d STB => SHIP TOLERANCE BELOW &el');
UTL_FILE.PUT_LINE(handle,'&sld SHP_MC => SHIP_MODEL_COMPLETE_FLAG &d SPL_DEL_DET_ID ==> SPLIT FROM DEL.DETAIL ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

if UPPER(nvl('&prt_inv','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="MR">MTL_RESERVATIONS (RES)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld RES_Q => PRIMARY RESERVATION QUANTITY &d DET_Q => DETAILED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld DS_TYPE => DEMAND SOURCE TYPE &d WH_ID => ORGANIZATION ID &el');
UTL_FILE.PUT_LINE(handle,'&sld SS_TYPE_ID => SUPPLY SOURCE TYPE ID &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="MTI">MTL_TRANSACTIONS_INTERFACE (MTI)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld TRX_INT_ID => TRANSACTION_INTERFACE_ID &d PRM_Q => PRIMARY QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld LCK => LOCK CODE &d FROM_SUB => FROM SUBINVENTORY &el');
UTL_FILE.PUT_LINE(handle,'&sld FROM_LOC_ID => FROM LOCATOR ID &d TRANS_MODE => TRANSACTION MODE &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="TMP">MTL_MATERIAL_TRANSACTIONS_TEMP (TMP) - UNPICKED LINES</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MTL_TRNS_ID => MTL TRANSACTION ID &d PICK_SLIP => PICK SLIP NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld PRM_Q => PRIMARY QUANTITY &d LCK => LOCK CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld FROM_SUB => FROM SUBINVENTORY &d FROM_LOC_ID => FROM LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld TRANS_MODE => TRANSACTION MODE &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="TRN">MTL_MATERIAL_TRANSACTIONS (TRN) - PICKED LINES</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MTL_TRNS_ID => MTL TRANSACTION ID &d TRANS_TYPE => TRANSACTION TYPE &el');
UTL_FILE.PUT_LINE(handle,'&sld PRM_Q => PRIMARY QUANTITY &d LCK => LOCK CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld FROM_SUB => FROM SUBINVENTORY &d FROM_LOC_ID => FROM LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld TO_SUB => TO SUBINVENTORY &d TO_LOC_ID => TO LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld TRANS_MODE => TRANSACTION MODE &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="UNT">MTL_UNIT_TRANSACTIONS (UNT)</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld TRANS_ID => TRANSACTION ID &d SUBINV => SUBINVENTRY CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld LOC_ID => LOCATOR ID &d SERIAL_NUM => SERIAL NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld WH_ID => WAREHOUSE ID &d TRX_DATE => TRANSACTION DATE &el');
UTL_FILE.PUT_LINE(handle,'&sld TRX_SRC_ID => TRANSACTION SOURCE ID &d TRX_SRC_TYPE_ID => TRANSACTION SOURCE TYPE ID &el');
UTL_FILE.PUT_LINE(handle,'&sld CUST_ID => CUSTOMER ID &d SHIP_ID => SHIPMENT ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="MOV">MTL_TXN_REQUEST_LINES_V (MOV) - MOVE TRANSACTIONS</a> &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld MO_LINE_ID => MOVE ORDER LINE ID &d MO_NUMBER => MOVE ORDER NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld MV_HDR_ID => MOVE ORDER HEADER ID &d MV_LINE_NUM => MOVE ORDER LINE NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld MV_LINE_STAT => MOVE ORDER LINE STATUS &d TXN_SLINE_ID=> TRANSACTION SOURCE LINE ID &el');
UTL_FILE.PUT_LINE(handle,'&sld PRM_Q => PRIMARY QUANTITY &d DLV_Q => DELIVERED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld DTL_Q => DETAILED QUANTITY &d WH_ID => WAREHOUSE ID &el');
UTL_FILE.PUT_LINE(handle,'&sld FROM_SUB => FROM SUBINVENTORY &d FROM_LOC_ID => FROM LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld TO_SUB => TO SUBINVENTORY &d TO_LOC_ID => TO LOCATOR ID &el');
UTL_FILE.PUT_LINE(handle,'&sld LOT_NUM => LOT NUMBER &d TRNS_HEAD_ID=> TRANSACTION HEADER ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

end if; -- prt_inv

if UPPER(nvl('&prt_ar','Y')) = 'Y' then

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="RAI">RA_INTERFACE_LINES (RAI)</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld QTY => QUANTITY &d IR_ID => INVOICING RULE ID &d TR => TAX RATE &el');
UTL_FILE.PUT_LINE(handle,'&sld ORD_Q => ORDERED QUANTITY &d PA_ID_11 => PRICE ADJUSTMENT ID &d EF => TAX EXEMPT FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld SO_LIN => SALES ORDER LINE ID &d C_RATE => CONVERSION RATE &d S_TAX_ID => SALES TAX ID &el');
UTL_FILE.PUT_LINE(handle,'&sld AR_ID => ACCOUNTING RULE ID &d C_DATE => CONVERSION DATE &d CURR => CURRENCY CODE &el');
UTL_FILE.PUT_LINE(handle,'&sld WH_ID => WAREHOUSE ID &d VAT_ID => VALUE ADDED TAX ID &d EF => TAX EXEMPT FLAG &el');
UTL_FILE.PUT_LINE(handle,'&sld TERR_ID=> TERRITORY ID &d &sp &d &sp &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="RAH">RA_CUSTOMER_TRX (RAH) - INVOICE HEADERS</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld CUST_TRX_ID => CUSTOMER TRANSACTION ID &d TRX_NUMBER => TRANSACTION NUMBER &d TRX_DATE => TRANSACTION DATE &el');
UTL_FILE.PUT_LINE(handle,'&sld CURR => CURRENCY &d COMP_FL => COMPLETE FLAG &d IR_ID => INVOICING RULE ID &el &et');

UTL_FILE.PUT_LINE(handle,'&f &f');

UTL_FILE.PUT_LINE(handle,'&std &sh <a NAME="RAL">RA_CUSTOMER_TRX_LINES (RAL) - INVOICE LINES</a> &dh &sp &dh &sp &eh');
UTL_FILE.PUT_LINE(handle,'&sld TRX_LINE_ID => TRANSACTION LINE ID &d CUST_TRX_ID => CUSTOMER TRANSACTION ID &d TRX_NUMBER => TRANSACTION NUMBER &el');
UTL_FILE.PUT_LINE(handle,'&sld ORD_Q => ORDERED QUANTITY &d INV_Q => INVOICED QUANTITY &d CRD_Q => CREDITED QUANTITY &el');
UTL_FILE.PUT_LINE(handle,'&sld EXTD_AMT => EXTENDED AMOUNT &d REV_AMT => REVISED AMOUNT &d PA_ID_11 => PRICE ADJUSTMENT ID &el');
UTL_FILE.PUT_LINE(handle,'&sld TF => TAXABLE FLAG &d TR => TAX RATE &d VAT_ID => VALUE ADDED TAX ID &el &et');

end if; -- prt_ar

UTL_FILE.PUT_LINE(handle,'&f &f');

-- Closing Time
select '&std &sh Script completion time: &eh &sld '||to_char(sysdate,'DD-MON-RR_HH24:MI:SS')||' &el &et &f &f'
into text
from dual;
UTL_FILE.PUT_LINE(handle,text);

UTL_FILE.PUT_LINE(handle,'</HTML>');

-- Close output file

UTL_FILE.FCLOSE(handle);
END;
/


此脚本用于诊断销售订单的所有信息,运行完成后生产html报表,放在服务器上;

 

 

好了下面开始研究UTL_FILE包

包中主要的函数



FOPEN 

IS_OPEN 

GET_LINE 

PUT 

NEW_LINE 

PUT_LINE 

PUTF 

FFLUSH 

FCLOSE 

FCLOSE_ALL 

使用utl_file包之前应先建立目录



create or replace directory BFILE_DIR as 

'f:/home/oracle/bfiletest';



给用户读写该目录的权限



grant read,write on directory BFILE_DIR  to lunar;



GRANT EXECUTE ON utl_file TO wangyh

UTL_FILE.FOPEN



用法

FOPEN会打开指定文件并返回一个文件句柄用于操作文件。



  FUNCTION UTL_FILE.FOPEN (

    location     IN VARCHAR2,

     filename     IN VARCHAR2,

      open_mode    IN VARCHAR2,

           max_linesize IN BINARY_INTEGER)

                                RETURN file_type;



参数

location

文件地址



filename

 文件名

openmode

 打开文件的模式(参见下面说明)

max_linesize

文件每行最大的字符数,包括换行符。最小为1,最大为32767

3种文件打开模式:

R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。

W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用

A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用



打开文件时注意以下几点:

文件路径和文件名合起来必须表示操作系统中一个合法的文件。

文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。

如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。

如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。



FOPEN 会抛出以下异常

UTL_FILE.INVALID_MODE

UTL_FILE.INVALID_OPERATION

UTL_FILE.INVALID_PATH

UTL_FILE.INVALID_MAXLINESIZE



UTL_FILE.IS_OPEN用法

如果文件句柄指定的文件已打开,返回TRUE,否则FALSE



FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;



UTL_FILE只提供一个方法去读取数据:GET_LINE



UTL_FILE.GET_LINE用法

读取指定文件的一行到提供的缓存。

PROCEDURE UTL_FILE.GET_LINE 

   (file IN UTL_FILE.FILE_TYPE, 

    buffer OUT VARCHAR2);



file

由FOPEN返回的文件句柄

 

buffer

 读取的一行数据的存放缓存



buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。



异常

NO_DATA_FOUND 

VALUE_ERROR 

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.READ_ERROR



 

UTL_FILE.PUT用法

在当前行输出数据

PROCEDURE UTL_FILE.PUT 

    (file IN UTL_FILE.FILE_TYPE, 

    buffer OUT VARCHAR2);

file

由FOPEN返回的文件句柄

buffer

包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B



UTL_FILE.PUT输出数据时不会附加行终止符。



UTL_FILE.PUT会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR



UTL_FILE.NEW_LINE

在当前位置输出新行或行终止符,必须使用NEW_LINE来结束当前行,或者使用PUT_LINE输出带有行终止符的完整行数据。



PROCEDURE UTL_FILE.NEW_LINE 

   (file IN UTL_FILE.FILE_TYPE, 

    lines IN NATURAL := 1); 

file

由FOPEN返回的文件句柄

lines

要插入的行数



如果不指定lines参数,NEW_LINE会使用默认值1,在当前行尾换行。如果要插入一个空白行,可以使用以下语句:

UTL_FILE.NEW_LINE (my_file, 2);

如果lines参数为0或负数,什么都不会写入文件。



NEW_LINE会产生以下异常

VALUE_ERROR

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR

例子

如果要在UTL_FILE.PUT后立刻换行,可以如下例所示:

PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)

IS

BEGIN

   UTL_FILE.PUT (file_in, line_in);

   UTL_FILE.NEW_LINE (file_in);

END;





UTL_FILE.PUT_LINE 

输出一个字符串以及一个与系统有关的行终止符

PROCEDURE UTL_FILE.PUT_LINE 

    (file IN UTL_FILE.FILE_TYPE, 

    buffer IN VARCHAR2);

file

由FOPEN返回的文件句柄

buffer

包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B

在调用UTL_FILE.PUT_LINE前,必须先打开文件。

UTL_FILE.PUT_LINE会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR



例子

这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:

declare

   fileID UTL_FILE.FILE_TYPE;

BEGIN

   fileID := UTL_FILE.FOPEN ('BFILE_DIR', 'emp.TXT', 'W');

   /* Quick and dirty construction here! */

   FOR emprec IN (SELECT * FROM emp)

   LOOP

      UTL_FILE.PUT_LINE 

         (FILEID,TO_CHAR (emprec.empno) || ',' ||

          emprec.ename || ',' ||

          TO_CHAR (emprec.deptno));

   END LOOP;

   UTL_FILE.FCLOSE (fileID);

END;

/

GRANT READ ON DIRECTORY BFILE_DIR TO SCOTT;

GRANT write ON DIRECTORY BFILE_DIR TO SCOTT;PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%s\n"。



UTL_FILE.PUTF

以一个模版样式输出至多5个字符串,类似C中的printf



PROCEDURE UTL_FILE.PUTF

    (file IN FILE_TYPE

    ,format IN VARCHAR2

    ,arg1 IN VARCHAR2 DEFAULT NULL

    ,arg2 IN VARCHAR2 DEFAULT NULL

    ,arg3 IN VARCHAR2 DEFAULT NULL

    ,arg4 IN VARCHAR2 DEFAULT NULL

    ,arg5 IN VARCHAR2 DEFAULT NULL);

file

由FOPEN返回的文件句柄

format

决定格式的格式串

argN

可选的5个参数,最多5个



格式串可使用以下样式

%s

在格式串中可以使用最多5个%s,与后面的5个参数一一对应

\n

换行符。在格式串中没有个数限制

%s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件



UTL_FILE.PUTF会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR



declare

   fileID UTL_FILE.FILE_TYPE;

BEGIN

   fileID := UTL_FILE.FOPEN ('BFILE_DIR', 'emp.TXT', 'W');

   /* Quick and dirty construction here! */

   FOR emprec IN (SELECT * FROM emp)

   LOOP

      UTL_FILE.PUTf

         (FILEID,TO_CHAR (emprec.empno) || ',' ||

          emprec.ename || ',' ||

          TO_CHAR (emprec.deptno),',');

utl_file.new_line(fileid);

   END LOOP;

   UTL_FILE.FCLOSE (fileID);

END;

/



UTL_FILE.FFLUSH

确保所有数据写入文件。

PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);

file

由FOPEN返回的文件句柄



操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。

典型的使用方法包括分析执行进度和调试纪录。

UTL_FILE.FFLUSH会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.INVALID_OPERATION

UTL_FILE.WRITE_ERROR



UTL_FILE.FCLOSE 

关闭文件

PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);

file

由FOPEN返回的文件句柄



注意file是一个IN OUT参数,因为在关闭文件后会设置为NULL

当试图关闭文件时有缓存数据未写入文件,会抛出WRITE_ERROR异常



UTL_FILE.FCLOSE会产生以下异常

UTL_FILE.INVALID_FILEHANDLE

UTL_FILE.WRITE_ERROR



UTL_FILE.FCLOSE_ALL 

关闭所有已打开的文件

PROCEDURE UTL_FILE.FCLOSE_ALL;



在结束程序时要确保所有打开的文件已关闭,可使用FCLOSE_ALL

也可以在EXCEPTION使用,当异常退出时,文件也会被关闭。

EXCEPTION

   WHEN OTHERS

   

THEN

      UTL_FILE.FCLOSE_ALL;

      ... other clean up activities ...

END;



注意:当使用FCLOSE_ALL关闭所有文件时,文件句柄并不会标记为NULL,使用IS_OPEN会返回TRUE。但是,那些关闭的文件不能执行读写操作(除非你再次打开文件)。

UTL_FILE.FCLOSE_ALL会产生以下异常

UTL_FILE.WRITE_ERROR

 

其他的资料

0.为避免目录修改导致程序的修改,目录可以定义为一个常量,或ORACLE的directory。

1.fopen的模式: R(只读),W(读写,且首先清除原有数据),A(读写,原有数据基础上追加数据)。

  fopen的限制:

  (1)目录和文件名必须合法

  (2)目录必须存在

  (3)若为R模式,文件必须存在

  (4)若为W模式,若文件不存在,则自动创建

  (5)若为A模式,则文件必须存在

2.is_open:检查文件是否打开(其实只检查句柄是否为空,比如fclose_all关闭的文件,is_open仍返回true)。

3.get_line:读取一行数据到varchar2变量中。

  nvarchar2数据使用get_line_nchar;raw数据使用get_raw。

  读取到文件末尾,产生no_data_found异常。还有如下三种情况也会产生no_data_found异常

    (1)无返回行的select

    (2)pl/sql集合中未定义的行

    (3)使用dbms_lob读取bfile文件至末尾。

    所以以上四种no_data_found情况在一个pl/sql块中,要区分捕获异常

4.put    

9.fclose:若关闭前缓冲区中仍有未写入文件的数据,则触发write_error异常

 .fclose_all:关闭所有打开的文件。关闭后,所有文件的句柄不变(仍为非NULL),例如测试中

  步骤3使用fclose_all关闭文件,而is_opened仍为TRUE。但此时文件以不可读写。

  原因:fclose传入文件句柄参数,且为IN OUT模式,调用后将句柄设置为NULL,而fclose_all

  并未传入任何文件句柄参数,所以并未修改文件句柄的值(仍保持原值)。

6.frename:可以重命名文件,也可重命名路径(相当于FCOPY+FREMOVE),也可都改变

7.putf:put format

8.fgetattr:获取文件属性(是否存在,大小,块大小)

*/

PROCEDURE prc_utl_file

IS

  file_read_handle utl_file.file_type;

  file_write_handle utl_file.file_type;

  is_opened BOOLEAN;

  v_one_line VARCHAR2(1000);

  b_file_exist BOOLEAN;

  n_file_length NUMBER(10,2);

  bi_block_size BINARY_INTEGER;

BEGIN

  --1.读/读写模式打开文件

  file_read_handle := utl_file.fopen('TEST_UTL_FILE_DIR_READ', 'orcl_ora_396.trc', 'R');

  file_write_handle := utl_file.fopen('TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE.txt', 'W');

  --2.检查文件是否打开

  is_opened := utl_file.is_open(file_read_handle);

  IF is_opened THEN

    dbms_output.put_line('file is opened');

  ELSE

    dbms_output.put_line('file is not opened');

  END IF;

  --3.读文件

  LOOP

    BEGIN

      utl_file.get_line(file_read_handle, v_one_line);

      dbms_output.put_line(v_one_line);

      -- 4.将读入结果写入新文件中

      utl_file.put(file_write_handle, v_one_line);

      utl_file.new_line(file_write_handle, 2);

      --utl_file.put_line(file_write_handle, v_one_line);

      --utl_file.put_line(file_write_handle, v_one_line, TRUE);

    EXCEPTION

      WHEN no_data_found THEN

        EXIT;

      WHEN OTHERS THEN 

        dbms_output.put_line('error1:'||SQLERRM);

        EXIT;

    END;

    

  END LOOP;

  

  --5.关闭文件

  utl_file.fclose(file_read_handle);

  --6确认所有未决的数据都写到物理文件中

  --utl_file.fflush(file_write_handle);

  utl_file.fclose(file_write_handle);

  --utl_file.fclose_all;

  --6.检查文件是否关闭

  is_opened := utl_file.is_open(file_read_handle);

  IF is_opened THEN

    dbms_output.put_line('file is still opened');

  ELSE

    dbms_output.put_line('file is already closed');

  END IF;

  --7.拷贝文件

  utl_file.fcopy('TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE.txt', 'TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE_COPY.txt', 1, 10);

  --8.删除文件

  utl_file.fcopy('TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE.txt', 'TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE_COPY_DELETE.txt', 1, 10);

  utl_file.fremove('TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE_COPY_DELETE.txt');

  --9.重命名

  --utl_file.frename('TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE_COPY.txt', 'TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE_COPY_DELETE_RENAME.txt', FALSE);

  --10.获取重命名后的文件属性

  utl_file.fgetattr('TEST_UTL_FILE_DIR_WRITE', 'TEST_UTL_FILE_DIR_WRITE_COPY.txt',b_file_exist,n_file_length, bi_block_size);

  IF b_file_exist THEN

    dbms_output.put_line('n_file_length:'||n_file_length||'\n'||'bi_block_size'||bi_block_size);

  END IF;

  

END;