COMPILE FUNCTION Comm_Dialog_WO_Find(Method, Parm1)
/*
	Commuter module for Dialog_WO_Find window.
	
	01/14/2005 - John C. Henry, J.C. Henry & Co., Inc.
*/

DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, ErrMsg, Btree.Extract, Msg, Send_Info
DECLARE SUBROUTINE obj_Appwindow, Start_Window
DECLARE FUNCTION   Get_Property, Get_Status, Dialog_Box, Utility, Send_Message, Popup, Collect.IXVals, Msg
DECLARE FUNCTION   SRP_Array

$INSERT LOGICAL
$INSERT PS_EQUATES
$INSERT POPUP_EQUATES
$INSERT MSG_EQUATES
$INSERT WO_LOG_EQUATES
$INSERT WO_STEP_EQUATES
$INSERT WO_MAT_EQUATES

EQU CRLF$	TO \0D0A\

EQU COL$CUST_NO		TO 1		;* Customer edit table column equates
EQU COL$CUST_NAME	TO 2

EQU COL$REACT_TYPE	TO 1

EQU LTGREY$		TO	229 + (229*256) + (229*65536)	;* JCH standard colors for edittable backgrounds
EQU GREY$		TO	192 + (192*256) + (192*65536)
EQU GREEN$		TO	192 + (220*256) + (192*65536)
EQU RED$		TO	255 + (128*256) + (128*65536)
EQU BLUE$		TO	128 + (255*256) + (255*65536)
EQU WHITE$		TO	255 + (255*256) + (255*65536)
EQU YELLOW$		TO	255 + (255*256) + (202*65536)
EQU LTBLUE$		TO	128 + (255*256) + (255*65536)
EQU PURPLE$		TO	225 + (181*256) + (255*65536)

EQU DTS_MULTIROW$	TO 512
EQU DTS_LARGEDATA$	TO 4096

ErrTitle = 'Error in Comm_Dialog_Order_Find'
ErrorMsg = ''

Result = ''

BEGIN CASE
    
    CASE Method = 'Create'			; GOSUB Create
    CASE Method = 'CustChar'		; GOSUB CustChar
    CASE Method = 'CustPC'			; GOSUB CustPC
    CASE Method = 'CustDC'			; GOSUB CustDC
    CASE Method = 'CustPNDC'		; GOSUB CustPNDC
    CASE Method = 'SubPNDC'			; GOSUB SubPNDC
    CASE Method = 'LotNoDC'			; GOSUB LotNoDC
    CASE Method = 'PSNoDC'			; GOSUB PSNoDC
    CASE Method = 'ReactTypeDC'		; GOSUB ReactTypeDC
    CASE Method = 'LUDate'			; GOSUB LUDate
    CASE Method = 'Cancel'			; GOSUB Cancel
    CASE Method = 'Refresh'			; GOSUB Refresh
    CASE Method = 'PerformQuery'	; GOSUB PerformQuery
    CASE Otherwise$
        ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
        
END CASE

RETURN Result


* * * * * * *
Create:
* * * * * * *

    obj_AppWindow('Create')

    Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')

    GOSUB Refresh

RETURN


* * * * * * *
Refresh:
* * * * * * *

    * Turn edit table symbolic column backgrounds to green

    stat = Send_Message(@WINDOW:'.CUST_INFO','COLOR_BY_POS',COL$CUST_NAME,0,GREEN$)	;* Turn names column all rows green

RETURN


* * * * * * *
CustChar:
* * * * * * *

    CtrlName  = @WINDOW:'.CUST_INFO'
    CustArray = Get_Property(CtrlName,'ARRAY')		;* Customer Information table
    CurrPos   = Get_Property(CtrlName,'SELPOS')
    CurrRow   = CurrPos<2>
    DataIn    = CustArray<COL$CUST_NO,CurrRow>

    IF LEN(DataIn) > 2 THEN
        ReturnToCtrl = CtrlName
        ReturnToPos  = CurrPos
        IF NOT(NUM(DataIn)) THEN 
            Set_Property(CtrlName,'CELLPOS','',CurrPos)	;* Clear characters input
            Start_Window('COMP_LOOKUP',@WINDOW,DataIn:@VM:'C':@FM:ReturnToCtrl:@FM:ReturnToPos,'','')
        END
    END

RETURN


* * * * * * *
CustPC:
* * * * * * *

    CtrlName = @WINDOW:'.CUST_INFO'
    CustList = Get_Property(CtrlName,'LIST')		;* Customer Information table
    CurrPos  = Get_Property(CtrlName,'SELPOS')
    CurrCol  = CurrPos<1>
    CurrRow  = CurrPos<2>
    CustNo   = CustList<CurrRow,COL$CUST_NO>
    IF CustNo NE '' THEN
        Set_Property(CtrlName,'CELLPOS',XLATE('COMPANY',CustNo,4,'X'),COL$CUST_NAME:@FM:CurrRow)
    END

RETURN


* * * * * * *
CustDC:
* * * * * * *

    CtrlName = @WINDOW:'.CUST_INFO'
    CustList = Get_Property(CtrlName,'LIST')		;* Customer Information table
    CurrPos  = Get_Property(CtrlName,'SELPOS')
    CurrCol  = CurrPos<1>
    CurrRow  = CurrPos<2>
    CustNo   = CustList<CurrRow,COL$CUST_NO>
    LineCnt  = COUNT(CustList,@FM) + (CustList NE '')
    IF CustNo = '' THEN
        CustNos = Popup(@WINDOW,'','CUSTOMER')
        CustCnt = COUNT(CustNos,@VM) + (CustNos NE '')
        IF CustCnt > LineCnt THEN
            FOR I = 1 TO CustCnt
                stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM)	; * Add blank lines
            NEXT I
        END
        
        FOR I = CurrRow TO CurrRow + CustCnt
            CustNo = CustNos<1,I>
            CustName = XLATE('COMPANY',CustNo,4,'X')
            Set_Property(CtrlName,'CELLPOS',CustNo,COL$CUST_NO:@FM:I)
            Set_Property(CtrlName,'CELLPOS',CustName,COL$CUST_NAME:@FM:I)
            Set_Property(CtrlName,'SELPOS',COL$CUST_NO:@FM:I+1)
        NEXT I
        
    END ELSE
        ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
    END

RETURN


* * * * * * *
SubPNDC:
* * * * * * *

    CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
    CustNos   = CustArray<COL$CUST_NO>
    LOOP
        LastCustNo = CustNos[-1,'B':@VM]
    UNTIL LastCustNo NE '' OR CustNos = ''
        CustNos[COL1(),99] = ''		;* Trim trailing blanks
    REPEAT

    IF CustNos = '' THEN RETURN

    * display the processing message and do the processing
    Def = ""
    Def<MTEXT$> = "Selecting Substrate Part Numbers..."
    Def<MTYPE$> = "U"

    MsgUp = Msg(@window, Def)
    OPEN 'DICT.WO_LOG' TO DictVar THEN
        SearchString  = 'CUST_NO':@VM:CustNos:@VM:@FM
        SearchString := 'SUB_PART_NO':@VM:'#':@FM
        
        Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
        IF Get_Status(errCode) THEN
            Msg(@WINDOW,MsgUp)
            ErrMsg(errCode)
            RETURN
        END
        
        IF WOKeys NE '' THEN
            RawPartNos = XLATE('WO_LOG',WOKeys,'SUB_PART_NO','X')	;* Calculated field
            IF Get_Status(errCode) THEN ErrMsg(errCode)
            PartNos = ''
            FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
                RawPartNo = RawPartNos<1,I>
                LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
                    PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
                END
            NEXT I
            
        END ELSE
            PartNos = ''
        END
        
        Msg(@WINDOW,MsgUp)
        
        IF PartNos = '' THEN
            ErrMsg('No Substrate Part Numbers on file for specified customer.')
            RETURN
        END
        
        PartNos := @VM
        CONVERT @VM TO @RM IN PartNos
        CALL V119('S','','D','R',PartNos,'')
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        CONVERT @RM TO @VM IN PartNos
        PartNos[-1,1] = ''					;* Strip trailing delimiter	
        
        TypeOver = ''
        TypeOver<PDISPLAY$> = PartNos
        PartNos = Popup(@WINDow,TypeOver,'CUST_PO')	;****** Need a popup
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        
        IF PartNos NE '' THEN
            Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',PartNos)
        END
        
    END ELSE
        ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
    END

RETURN


* * * * * * *
LotNoDC:
* * * * * * *

    CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>

    LOOP
        LastCustNo = CustNos[-1,'B':@VM]
    UNTIL LastCustNo NE '' OR CustNos = ''
        CustNos[COL1(),99] = ''		;* Trim trailing blanks
    REPEAT

    IF CustNos = '' THEN RETURN
    * display the processing message and do the processing
    Def = ""
    Def<MTEXT$> = "Selecting Lot Numbers..."
    Def<MTYPE$> = "U"

    MsgUp = Msg(@window, Def)
    OPEN 'DICT.WO_LOG' TO DictVar THEN
        SearchString  = 'CUST_NO':@VM:CustNos:@VM:@FM
        SearchString := 'LOT_NO':@VM:'#':@FM
        
        Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
        IF Get_Status(errCode) THEN
            Msg(@WINDOW,MsgUp)
            ErrMsg(errCode)
            RETURN
        END
        
        IF WOKeys NE '' THEN
            RawLotNos = XLATE('WO_LOG',WOKeys,'LOT_NO','X')	;* Calculated field
            IF Get_Status(errCode) THEN ErrMsg(errCode)
            LotNos = ''
            FOR I = 1 TO COUNT(RawLotNos,@VM) + (RawLotNos NE '')
                RawLotNo = RawLotNos<1,I>
                LOCATE RawLotNo IN LotNos BY 'AL' USING @VM SETTING Pos ELSE
                    LotNos = INSERT(LotNos,1,Pos,0,RawLotNo)
                END
            NEXT I
            
        END ELSE
            LotNos = ''
        END
        
        Msg(@WINDOW,MsgUp)
        
        IF LotNos = '' THEN
            ErrMsg('No Lot Numbers on file for specified customer.')
            RETURN
        END
        
        LotNos := @VM
        CONVERT @VM TO @RM IN LotNos
        CALL V119('S','','D','R',LotNos,'')
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        CONVERT @RM TO @VM IN LotNos
        LotNos[-1,1] = ''					;* Strip trailing delimiter	
        
        TypeOver = ''
        TypeOver<PDISPLAY$> = LotNos
        LotNos = Popup(@WINDow,TypeOver,'CUST_PO')	;****** Need a popup
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        
        IF LotNos NE '' THEN
            Set_Property(@WINDOW:'.LOT_NO','DEFPROP',LotNos)
        END
        
    END ELSE
        ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
    END

RETURN


* * * * * * *
PSNoDC:
* * * * * * *

    CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')

    CustNos = CustArray<COL$CUST_NO>

    LOOP
        LastCustNo = CustNos[-1,'B':@VM]
    UNTIL LastCustNo NE '' OR CustNos = ''
        CustNos[COL1(),99] = ''		;* Trim trailing blanks
    REPEAT

    IF CustNos = '' THEN RETURN

    * display the processing message and do the processing
    Def = ""
    Def<MTEXT$> = "Selecting Product Specifications..."
    Def<MTYPE$> = "U"

    MsgUp = Msg(@window, Def)
    OPEN 'DICT.WO_LOG' TO DictVar THEN
        SearchString  = 'CUST_NO':@VM:CustNos:@VM:@FM
        SearchString := 'PS_NO':@VM:'#':@FM
        
        Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
        IF Get_Status(errCode) THEN
            Msg(@WINDOW,MsgUp)
            ErrMsg(errCode)
            
            RETURN
        END
        
        IF WOKeys NE '' THEN
            PSNs = ''
            
            FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
                WOKey = WOKeys<1,N>
                RawPSNs = XLATE('WO_LOG',WOKey,'PS_NO','X')
                
                FOR I = 1 TO COUNT(RawPSNs,@VM) + (RawPSNs NE '')
                    RawPSN = RawPSNs<1,I>
                    
                    LOCATE RawPSN IN PSNs BY 'AL' USING @VM SETTING Pos ELSE
                        PSNs = INSERT(PSNs,1,Pos,0,RawPSN)
                    END
                    
                NEXT I
                
            NEXT N
        END ELSE
            PSNs = ''
        END
        
        Msg(@WINDOW,MsgUp)
        
        IF PSNs = '' THEN
            ErrMsg('No Product Specifications on file for specified customer.')
            RETURN
        END
        
        PSNs := @VM
        CONVERT @VM TO @RM IN PSNs
        CALL V119('S','','D','R',PSNs,'')
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        CONVERT @RM TO @VM IN PSNs
        PSNs[-1,1] = ''					;* Strip trailing delimiter	
        
        TypeOver = ''
        TypeOver<PDISPLAY$> = PSNs
        PSNs = Popup(@WINDow,TypeOver,'CUST_PO')
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        
        IF PSNs NE '' THEN
            CONVERT @VM TO @FM IN PSNs
            Set_Property(@WINDOW:'.PS_NO','LIST',PSNs)
        END
        
    END ELSE
        ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
    END

RETURN


* * * * * * *
ReactTypeDC:
* * * * * * *

    CtrlName  = @WINDOW:'.REACT_TYPE'
    RTypeList = Get_Property(CtrlName,'LIST')		;* Customer Information table
    CurrPos   = Get_Property(CtrlName,'SELPOS')
    CurrCol   = CurrPos<1>
    CurrRow   = CurrPos<2>
    RType     = RTypeList<CurrRow,COL$REACT_TYPE>
    LineCnt   = COUNT(RTypeList,@FM) + (RTypeList NE '')
    IF RType = '' THEN
        RTypes = Popup(@WINDOW,'','REACTOR_TYPE')
        rCnt = COUNT(RTypes,@VM) + (RTypes NE '')
        IF rCnt > LineCnt THEN
            FOR I = 1 TO rCnt
                stat = Send_Message(CtrlName,'INSERT',-1,@VM:@FM)	; * Add blank lines
            NEXT I
        END
        
        FOR I = CurrRow TO CurrRow + rCnt
            RType = RTypes<1,I>
            Set_Property(CtrlName,'CELLPOS',RType,COL$REACT_TYPE:@FM:I)
        NEXT I
        
    END ELSE
        ErrMsg('DoubleClick on the first empty Cust No field to view a popup of all Customers')
    END

RETURN


* * * * * * *
CustPNDC:
* * * * * * *

    CustArray = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')

    CustNos = CustArray<COL$CUST_NO>

    LOOP
        LastCustNo = CustNos[-1,'B':@VM]
    UNTIL LastCustNo NE '' OR CustNos = ''
        CustNos[COL1(),99] = ''		;* Trim trailing blanks
    REPEAT

    IF CustNos = '' THEN RETURN

    * display the processing message and do the processing

    Def = ""
    Def<MTEXT$> = "Selecting Part Numbers..."
    Def<MTYPE$> = "U"

    MsgUp = Msg(@window, Def)
    OPEN 'DICT.WO_LOG' TO DictVar THEN
        SearchString  = 'CUST_NO':@VM:CustNos:@VM:@FM
        SearchString := 'CUST_PART_NO':@VM:'#':@FM
        
        Btree.Extract(SearchString, 'WO_LOG', DictVar, WOKeys, '', Flag)
        IF Get_Status(errCode) THEN
            Msg(@WINDOW,MsgUp)
            ErrMsg(errCode)
            RETURN
        END
        
        IF WOKeys NE '' THEN
            PartNos = ''
            FOR N = 1 TO COUNT(WOKeys,@VM) + (WOKeys NE '')
                WOKey = WOKeys<1,N>
                RawPartNos = XLATE('WO_LOG',WOKey,'PART_NO','X')
                FOR I = 1 TO COUNT(RawPartNos,@VM) + (RawPartNos NE '')
                    RawPartNo = RawPartNos<1,I>
                    
                    LOCATE RawPartNo IN PartNos BY 'AL' USING @VM SETTING Pos ELSE
                        PartNos = INSERT(PartNos,1,Pos,0,RawPartNo)
                    END
                NEXT I
            NEXT N
        END ELSE
            PartNos = ''
        END
        
        Msg(@WINDOW,MsgUp)
        
        IF PartNos = '' THEN
            ErrMsg('No Customer Part Numbers on file for specified customer.')
            RETURN
        END
        
        PartNos := @VM
        CONVERT @VM TO @RM IN PartNos
        CALL V119('S','','D','R',PartNos,'')
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        CONVERT @RM TO @VM IN PartNos
        PartNos[-1,1] = ''					;* Strip trailing delimiter	
        
        
        TypeOver = ''
        TypeOver<PDISPLAY$> = PartNos
        PartNos = Popup(@WINDow,TypeOver,'CUST_PO')		;* Needs a popup
        IF Get_Status(errCode) THEN ErrMsg(errCode)
        
        IF PartNos NE '' THEN
            Set_Property(@WINDOW:'.CUST_PART_NO','DEFPROP',PartNos)
        END
        
    END ELSE
        ErrMsg('Unable to open DICT.WO_LOG in COMM_DIALOG_WO_LOG_FIND.')
    END

RETURN


* * * * * * *
LUDate:
* * * * * * *

    ReturnCtrl = Parm1[1,@RM]

    IF ReturnCtrl = '' THEN ReturnCtrl = Get_Property(@WINDOW,'FOCUS')

    DateSelected =  Dialog_Box('POPUP_YEAR',@WINDOW)

    RetVal = OCONV(DateSelected, 'D4/')

    obj_Appwindow('LUValReturn',RetVal:@RM:ReturnCtrl)

RETURN


* * * * * * *
Cancel:
* * * * * * *

RETURN


* * * * * * *
PerformQuery:
* * * * * * *

    SearchString = ''

    CustNos = Get_Property(@WINDOW:'.CUST_INFO','ARRAY')<COL$CUST_NO>
    CustNos = SRP_Array('Clean', CustNos, 'TrimAndMakeUnique', @VM)

    IF CustNos NE '' THEN SearchString := 'CUST_NO':@VM:CustNos:@FM			

    CustPNs = Get_Property(@WINDOW:'.CUST_PART_NO','ARRAY')<1>
    CustPNs = SRP_Array('Clean', CustPNs, 'TrimAndMakeUnique', @VM)
    IF CustPNs NE '' THEN SearchString := 'CUST_PART_NO':@VM:CustPNs:@FM

    SubPartNos = Get_Property(@WINDOW:'.SUB_PART_NO','ARRAY')<1>
    SubPartNos = SRP_Array('Clean', SubPartNos, 'TrimAndMakeUnique', @VM)
    IF SubPartNos NE '' THEN SearchString := 'ORD_SUB_PART_NO':@VM:SubPartNos:@FM
    
    ReactTypes = Get_Property(@WINDOW:'.REACT_TYPE','ARRAY')<COL$REACT_TYPE>
    ReactTypes = SRP_Array('Clean', ReactTypes, 'TrimAndMakeUnique', @VM)
    IF ReactTypes NE '' THEN SearchString := 'REACT_TYPE':@VM:ReactTypes:@FM

    StartDt = ICONV(Get_Property(@WINDOW:'.START_DT','TEXT'),'D')
    EndDt	= ICONV(Get_Property(@WINDOW:'.END_DT','TEXT'),'D')

    BEGIN CASE
        CASE StartDt NE '' AND EndDt = ''
            SearchString := 'ENTRY_DATE':@VM:'>=':StartDt:@FM
            
        CASE StartDt = '' AND EndDt NE ''
            SearchString := 'ENTRY_DATE':@VM:'<=':EndDt:@FM
            
        CASE StartDt NE '' AND EndDt NE ''
            // Modify the dates by one day. The '~' operator is not inclusive of the end dates.
            StartDt -= 1
            EndDt += 1
            SearchString := 'ENTRY_DATE':@VM:StartDt:'~':EndDt:@FM
            
        CASE Otherwise$
            NULL
    END CASE

    StartDt = ICONV(Get_Property(@WINDOW:'.MTL_RX_START_DT','TEXT'),'D')
    EndDt	= ICONV(Get_Property(@WINDOW:'.MTL_RX_END_DT','TEXT'),'D')

    OrdStatus = Get_Property(@WINDOW:'.STATUS','VALUE')

    IF OrdStatus NE 'I' THEN
        IF OrdStatus = 1 THEN
            SearchString := 'CLOSE_DATE':@VM:'#':@FM
        END ELSE
            SearchString := 'CLOSE_DATE':@VM:'=':@FM
        END
    END

    WONos = ''

    If SearchString NE '' then 
        OPEN 'DICT.WO_LOG' TO DictVar THEN
            Btree.Extract(SearchString,'WO_LOG',DictVar,WOKeys,'',flag)
            IF Get_Status(errCode) THEN
                ErrorMsg = 'Error querying WO_LOG table with supplied fields.'
            end
        END ELSE
            ErrMsg('Unable to open DICT.WO_LOG in routine COMM_DIALOG_WO_LOG_FIND')
        END
    end
    
    LotNos = Get_Property(@WINDOW:'.LOT_NO','ARRAY')<1>
    LotNos = SRP_Array('Clean', LotNos, 'TrimAndMakeUnique', @VM)    
    If LotNos NE '' then
        Query      = 'LOT_NO':@VM:LotNos:@FM
        dWoMat     = ''
        WOMatWONos = ''
        Open 'DICT.WO_MAT' to dWoMat then
            Flag      = ''
            WOMatKeys = ''
            Btree.Extract(Query, 'WO_MAT', dWoMat, WOMatKeys, 'E', Flag)
            If Not(Get_status(errCode)) then
                If WOMatKeys NE '' then
                    WOMatWONos = SRP_Array('Rotate', WOMatKeys, @VM, '*')
                    WOMatWONos = Delete(WOMatWONos, 0, 2, 0)
                    Convert '*' to @VM in WOMatWONos   
                    WOMatWONos = SRP_Array('Clean', WOMatWONos, 'TrimAndMakeUnique', @VM)
                    WOKeys     = SRP_Array('Join', WOKeys, WOMatWONos, 'OR', @VM)
                end
            end else
                ErrorMsg = 'Error querying LOT_NO field of the WO_MAT table.'
            end
        end else
            ErrorMsg = 'Error opening DICT.WO_MAT table in order to query on LOT_NO field'
        end
    end
    
    PSNos   = Get_Property(@WINDOW:'.PS_NO','ARRAY')<1>
    PSNos   = SRP_Array('Clean', PSNos, 'TrimAndMakeUnique', @VM)    
    If PSNos NE '' then
        Query       = 'PROD_SPEC_ID':@VM:PSNos:@FM
        dWOStep     = ''
        WOStepWONos = ''
        Open 'DICT.WO_STEP' to dWOStep then
            Flag       = ''
            WOStepKeys = ''
            Btree.Extract(Query, 'WO_STEP', dWOStep, WOStepKeys, 'E', Flag)
            If Not(Get_Status(ErrCode)) then
                If WOStepKeys NE '' then
                    WOStepWONos = SRP_Array('Rotate', WOStepKeys, @VM, '*')
                    WOStepWONos = Delete(WOStepWONos, 0, 2, 0)
                    Convert '*' to @VM in WOStepWONos                               
                    WOStepWONos = SRP_Array('Clean', WOStepWONos, 'TrimAndMakeUnique', @VM)
                    WOKeys      = SRP_Array('Join', WOKeys, WOStepWONos, 'OR', @VM)
                end
            end else
                ErrorMsg = 'Error querying PROD_SPEC_ID field in WO_STEP table.'
            end
        end else
            ErrorMsg = 'Error opening DICT.WO_STEP table in order to query on PROD_SPEC_ID field. Error code: ':ErrCode
        end
    end
    If ( (StartDt NE '') or (EndDt NE '') ) then
        Begin Case
            Case ( (StartDt NE '') and (EndDt EQ '') )
                Query = 'RX_DT':@VM:'>=':OConv(StartDt, 'D4/'):@FM
                
            Case ( (StartDt EQ '') and (EndDt NE '') )
                Query = 'RX_DT':@VM:'<=':OConv(EndDt, 'D4/'):@FM
                
            Case ( (StartDt NE '') and (EndDt NE '') )
                // Modify the dates by one day. The '~' operator is not inclusive of the end dates.
                StartDt -= 1
                EndDt   += 1
                Query    = 'RX_DT':@VM:OConv(StartDt, 'D4/'):'~':OConv(EndDt, 'D4/'):@FM
        End case
        dWOMat     = ''
        WOMatWONos = ''
        Open 'DICT.WO_MAT' to dWOMat then
            Flag      = ''
            WOMatKeys = ''
            Btree.Extract(Query, 'WO_MAT', dWOMat, WOMatKeys, 'E', Flag)
            If Not(Get_Status(ErrCode)) then
                If WOMatKeys NE '' then
                    WOMatWONos = SRP_Array('Rotate', WOMatKeys, @VM, '*')
                    WOMatWONos = Delete(WOMatWONos, 0, 2, 0)
                    Convert '*' to @VM in WOMatWONos                            
                    WOMatWONos = SRP_Array('Clean', WOMatWONos, 'TrimAndMakeUnique', @VM)
                    WOKeys     = SRP_Array('Join', WOKeys, WOMatWONos, 'OR', @VM)
                end                    
            end else
                ErrorMsg = 'Error querying on RX_DT field in WO_MAT table.'
            end
        end else
           ErrorMsg = 'Error opening DICT.WO_MAT table in order to query on RX_DT field.'
        end
    end

    If ErrorMsg EQ '' then
        If WOKeys NE '' then 
            WOKeys = SRP_Array('SortSimpleList', WOKeys, 'DescendingNumbers', @VM)
            End_Dialog(@WINDOW,WOKeys)
        end else
            Def         = ''
            Def<MICON$> = '*'
            Msg(@Window, Def, 'OK', '', 'Query Results':@FM:'No work orders found')
        end
    end else
        Msg(@Window, '', 'OK', '', 'Process Error':@FM:ErrorMsg)
    end
    
RETURN

