COMPILE SUBROUTINE Export_WO_Log( Dummy )

DECLARE FUNCTION Msg, Dialog_Box, Utility, obj_Export, obj_WO_Log
DECLARE FUNCTION Set_Printer, Get_Printer, obj_Install, Utility, obj_MUWafers, Database_Services 

DECLARE SUBROUTINE Btree.Extract, RList, END_Dialog, Make.List, Msg, ErrMsg, SetInitDirOptions

$INSERT LSL_USERS_EQU
$INSERT MSG_EQUATES
$INSERT RLIST_EQUATES
$INSERT OIPRINT_EQUATES
$INSERT WO_LOG_EQUATES
$INSERT WO_STEP_EQU
$INSERT WO_MAT_EQUATES
$INSERT COMPANY_EQU
$INSERT QUOTE_EQU
$INSERT QUOTE_SPEC_EQU
$INSERT RECIPE_EQU
$INSERT ORDER_DET_EQU
$INSERT PROD_SPEC_EQUATES
$insert PROD_VER_EQUATES
$INSERT EXCEL_EQU

CRLF$ = \0D0A\

OPEN 'WO_STEP' TO WOStepTable ELSE
	ErrMsg('Unable to open "WO_STEP" table in EXPORT_WO_LOG routine.')
	RETURN
END

OPEN 'DICT.WO_STEP' TO DictWOStep ELSE
	ErrMsg('Unable to open "DICT.WO_STEP" table in EXPORT_WO_LOG routine.')
	RETURN
END

Def = ""
Def<MTEXT$> = "Selecting Uncheduled Work Orders..."
Def<MTYPE$> = "U"

MsgUp = Msg(@window, Def)

* SelectSent = 'SELECT WO_STEP WITH SCHEDULED NE "Yes" '
Declare subroutine SRP_Stopwatch
SRP_Stopwatch('Reset')
SRP_Stopwatch('Start', 'StartDate')
StartDate   = Oconv(Date() - 182, 'D4/')
SelectSent  = 'SELECT WO_LOG WITH ENTRY_DATE GE ' : Quote(StartDate)
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
SRP_Stopwatch('Stop', 'StartDate')
SRP_Stopwatch('Start', 'Schedule')
SelectSent = 'SELECT WO_LOG WITH SCHEDULED NE "Yes" '
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
SRP_Stopwatch('Stop', 'Schedule')
* SRP_Stopwatch('ShowAll')
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS NE "CL" "COMP" '
*SelectSent = 'SELECT WO_STEP WITH CURR_STATUS = "NEW" "RTP" "RTS" "RX" "INPR" '
*RList(SelectSent,TARGET_ACTIVELIST$,'','','')

WOLogKeys = ''
Done = 0
LOOP
	READNEXT WOLogKey ELSE Done = 1
UNTIL Done
	WOLogKeys<-1> = WOLogKey
REPEAT

CONVERT @VM TO @FM IN WOLogKeys

IF WOLogKeys = '' THEN
	Msg(@window, MsgUp)
	ErrMsg('No Work Orders remain unscheduled.')
	RETURN
END


Make.List('',WOLogKeys,'','')

IF Get_Status(errCode) THEN
	ErrMsg(errCode)
END

Results = ''
Results<1,1> = 'Spec Type'
Results<1,2> = 'WO'
Results<1,3> = 'Customer'
Results<1,4> = 'Qty'
Results<1,5> = 'PSN'
Results<1,6> = 'Cust Part Numbers'
Results<1,7> = 'Reactor Type'
Results<1,8> = 'Sched Reacts'
Results<1,9> = 'Inch'
Results<1,10> = 'Tube Press Type'
Results<1,11> = 'Epi Gases'
Results<1,12> = 'Dopant L1'
Results<1,13> = 'Cap/Burst Gases'
Results<1,14> = 'Thick Target'
Results<1,15> = 'Res Target'
Results<1,16> = 'Expected Rx Dt'
Results<1,17> = 'Received Date'
Results<1,18> = 'Promised Ship'
Results<1,19> = 'Qual'
Results<1,20> = 'Blkd'
Results<1,21> = 'MU Wfrs'

Done = 0
LineCnt = 1
LOOP
	READNEXT WOLogKey ELSE Done = 1
UNTIL Done
			
    WONo = WOLogKey
    WORec = XLATE('WO_LOG',WONo,'','X')
    WOMatKeys = WORec<WO_LOG_WO_MAT_KEY$>
    
    CassCustPNs = XLATE('WO_MAT',WOMatKeys,WO_MAT_CUST_PART_NO$,'X')
    CustPNs = ''
    FOR I = 1 TO COUNT(CassCustPNs,@VM) + (CassCustPNs NE '')
        LOCATE CassCustPNs<1,I> IN CustPNs USING @VM SETTING POS ELSE
            CustPNs = INSERT(CustPNs,1,Pos,0,CassCustPNs<1,I>)
        END
    NEXT I
    
    CompanyName = XLATE( 'COMPANY', WORec<WO_LOG_CUST_NO$>,COMPANY_CO_NAME$,'X')
    SWAP ',' WITH '-' IN CompanyName
    
    WaferQty = SUM(XLATE('WO_MAT',WOMatKeys,WO_MAT_WAFER_QTY$,'X'))
    IF WaferQty > 0 THEN
        ExpectedRxDts = ''
    END ELSE
        OrderNo = WORec<WO_LOG_ORDER_NO$>
        OrderItems = WORec<WO_LOG_ORDER_ITEM$>
        OrderDetKeys = ''
        FOR N = 1 TO COUNT(OrderItems,@VM) + (OrderItems NE '')
            OrderDetKeys<1,N> = OrderNo:'*':OrderItems<1,N>
        NEXT N
        WaferQty = SUM(XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_ITEM_QTY$,'X'))
        ExpectedRxDts = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_EXP_RX_DT$,'X')
    END
    
    MUWafers		= obj_MUWafers('AvailWafers',WONo:@RM:WORec:@RM:0:@RM:1)
    ShipThickTarget	= XLATE('WO_LOG',WONo,'SHIP_THICK_TARGET','X')
    ShipResTarget	= XLATE('WO_LOG',WONo,'SHIP_RES_TARGET','X')
        
    CustPSNs = XLATE('WO_STEP',WORec<34>,1,'X')
    
    SWAP @VM WITH '\' IN CustPNs
    
*    PSNo = WOStepRec<WO_STEP_PROD_SPEC_ID$>
    ProdVerNo   = WORec<WO_LOG_PROD_VER_NO$>
    ProdVerRow  = Database_Services('ReadDataRow', 'PROD_VER', ProdVerNo)
    PSNo        = ProdVerRow<PROD_VER_PROC_STEP_PSN$>
    
    PSReactType = OCONV(XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X'),'[REACT_TYPE_CONV]')

    WaferSize = xlate( 'PROD_SPEC', PSNo, 'SUB_WAFER_SIZE', 'X' )
    SWAP 75		WITH '' IN WaferSize
    SWAP 100	WITH '' IN WaferSize
    SWAP 125	WITH '' IN WaferSize
    SWAP 150	WITH '' IN WaferSize
    SWAP 200	WITH '' IN WaferSize
    SWAP 'mm'	WITH '' IN WaferSize
    WaferSize = trim( WaferSize )
    
    RecipeId = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
    EPIGases = XLATE( 'RECIPE', RecipeId, RECIPE_EPI_GASES$, 'X' )

*    Reactors		= WOStepRec<WO_STEP_REACTORS$>
    Reactors        = Xlate('PROD_SPEC', PSNo, PROD_SPEC_QUAL_REACTS$, 'X')
*    BlockedReactors	= WOStepRec<WO_STEP_BLOCKED_REACTORS$>
    BlockedReactors = Xlate('PROD_SPEC', PSNo, PROD_SPEC_BLOCKED_REACTS$, 'X')
    SchedReactors	= XLATE('WO_LOG',WONo,'SCHED_REACTS','X')
    
    CONVERT @VM TO ',' IN Reactors
    CONVERT @VM TO ',' IN BlockedReactors
    
    IF WaferQty > 0 THEN
        LineCnt += 1
        Results<LineCnt,1> = OCONV(XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ),'[SPEC_TYPE_CONV]')				;* Spec Type
        Results<LineCnt,2> = OCONV(WONo,'MD0')																	;* WO
        Results<LineCnt,3> = CompanyName																		;* Company Name
        Results<LineCnt,4> = OCONV(WaferQty,'MDO')																;* Wafer Qty
        Results<LineCnt,5> = OCONV(PSNo,'MD0')																	;* Prod Spec ID
        Results<LineCnt,6> = CustPNs																			;* Customer Part Numbers
        Results<LineCnt,7> = PSReactType																		;* Reactor type for Prod Spec
        Results<LineCnt,8> = SchedReactors
        Results<LineCnt,9> = WaferSize																			;* Wafer Size
        Results<LineCnt,10> = XLATE( 'PROD_SPEC', PSNo, 'TUBE_PRESSURE_TYPE', 'X' )								;* Tube Pressure Type
        Results<LineCnt,11> = EPIGases
        Results<LineCnt,12> = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' )										;* Dopant L1
        Results<LineCnt,13> = XLATE( 'RECIPE', RecipeId, RECIPE_CAP_BURST_GASES$, 'X' )							;* Cap Burst Gases
        Results<LineCnt,14> = ShipThickTarget
        Results<LineCnt,15> = ShipResTarget
        Results<LineCnt,16> = OCONV(ExpectedRxDts<1,1>,'D4/')
        Results<LineCnt,17> = OCONV(XLATE('WO_MAT',WONo:'*1',WO_MAT_RX_DTM$,'X')[1,'.'],'D4/')
        Results<LineCnt,18> = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D4/')
        Results<LineCnt,19> = Reactors
        Results<LineCnt,20> = BlockedReactors
        Results<LineCnt,21> = MUWafers
        TempLine = Results<LineCnt>
        CONVERT '"' TO '' IN TempLine
        Results<LineCnt> = TempLine
    END
REPEAT

PasteBlob = Results

* * * * * * 

SWAP @VM WITH CHAR(9) IN PasteBlob
SWAP @FM WITH CRLF$ IN PasteBlob
CALL Set_Property('CLIPBOARD', 'TEXT', PasteBlob)


ExportColCnt = 20


* * *  Paste it into a blank Excel Sheet

xlApp		= OleCreateInstance("excel.Application")

IF OleStatus() THEN

	Msg(@window, MsgUp)
	
	ErrorMsg  = 'Excel failed to start.':CRLF$:CRLF$
	ErrorMsg := 'The data from this export is on your clipboard and can be pasted into Excel on your local machine using <Ctrl><V> .'
						
	ErrMsg(ErrorMsg)
	
	RETURN
	
END

xlWorkBooks = OleGetProperty(xlApp, "Workbooks")
xlWorkBook	= OleCallMethod(xlWorkBooks,'Add')

* * *  wait a second

Now = Time()
LOOP
   CALL Yield()
WHILE Time() EQ Now
REPEAT

OlePutProperty(XlApp, 'Visible', xlSheetVisible)

void			= OleCallMethod(xlWorkBook,'Activate')
xlActiveSheet	= OleGetProperty(xlWorkBook,'ActiveSheet')
void			= OleCallMethod(xlActiveSheet,'Paste')

eXcelCols = obj_Export('ExcelCol',TextColNos)	;* Returns alpha Excel columns from numeric columns

FirstLastCols = obj_Export('ExcelCol',1:@VM:ExportColCnt)

FirstColumn	= FirstLastCols[1,@VM]
LastColumn	= FirstLastCols[COL2()+1,@VM]

range	= OleGetProperty(xlActiveSheet,'Range',FirstColumn:'1:':LastColumn:'1')
font	= OleGetProperty(range,'Font')

OlePutProperty(font,'FontStyle','Bold')
OlePutProperty(font,'UnderLine',xlUnderlineStyleSingle)
	
column	= OleGetProperty(xlActiveSheet,'Columns',FirstColumn:':':LastColumn)	
void 	= OleCallMethod(column,'AutoFit')

Msg(@window, MsgUp)

RETURN



