COMPILE FUNCTION obj_React_Mode(Method,Parms)
/*
	Methods for the Reactor Mode (REACT_MODE) table
    
	10/02/2006 JCH - Initial Coding
     
    Properties:
     
    Methods:
    
    Create()			;* Create new React Mode record 	
    Close()				;* Close existing React Mode record
	
*/


DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, obj_React_Event

$INSERT MSG_EQUATES
$INSERT REACT_MODE_EQUATES
$INSERT REACT_MODE_NG_EQUATES
$INSERT LOGICAL

DevSwitch = XLATE('SYSLISTS', 'DEV_SWITCH', 1, 'X')
ErrTitle = 'Error in Stored Procedure "obj_React_Mode"'
ErrorMsg = ''

IF NOT(ASSIGNED(Method))	THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
IF NOT(ASSIGNED(Parms))		THEN Parms = ''

IF ErrorMsg NE '' THEN
    Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
    RETURN ''
END

Result = ''

BEGIN CASE
    CASE Method = 'Create'				; GOSUB Create
    CASE Method = 'Close'				; GOSUB Close
    CASE Method = 'NonProdDates'		; GOSUB NonProdDates
    CASE Method = 'DateNonProdHrs'		; GOSUB DateNonProdHrs
        
    CASE 1
        ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.'
        
END CASE

IF ErrorMsg NE '' THEN
    Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
    RETURN ''
END

RETURN Result


* * * * * * *
Create:
* * * * * * *
    
    ReactNo		= Parms[1,@RM]
    StartDTM	= Parms[COL2()+1,@RM]
    UserID		= Parms[COL2()+1,@RM]
    Mode		= Parms[COL2()+1,@RM]
    Note		= Parms[COL2()+1,@RM]
    ReactUtilID	= Parms[COL2()+1,@RM]
    ReactLogID	= Parms[COL2()+1,@RM]
    ServiceDesc = Parms[COL2()+1,@RM]
    
    IF ReactNo	= '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').'
    IF StartDTM = '' THEN ErrorMsg = 'Null parameter StartDTM passed to routine (':Method:').'
    IF UserID	= '' THEN ErrorMsg = 'Null parameter UserID passed to routine (':Method:').'
    IF Mode		= '' THEN ErrorMsg = 'Null parameter Mode passed to routine (':Method:').'
    
    IF ErrorMsg NE '' THEN RETURN
    
    thisStartDTM = ICONV(StartDTM,'DT')
    IF thisStartDTM = '' THEN
        ErrorMsg = 'Invalid value ':QUOTE(StartDTM):' passed for parameter StartDTM (':Method:').'
        RETURN
    END
    
    ReactModeKey = ReactNo:'*':thisStartDTM
    
    ReactModeRec = ''
    ReactModeRec<REACT_MODE_START_USER$>	= UserID
    ReactModeRec<REACT_MODE_START_NOTE$>	= Note
    ReactModeRec<REACT_MODE_START_RU_ID$>	= ReactUtilID
    ReactModeRec<REACT_MODE_START_RL_ID$> 	= ReactLogID
    IF DevSwitch then
        ReactModeRec<REACT_MODE_NG_SERVICE_DESC$> 	= ServiceDesc; //New home for the PROB_CAT_DESC
    end
    
    IF DevSwitch then
        ReactModeRec<REACT_MODE_MODE$> = Mode
    end else
        IF LEN(Mode) > 2 THEN
            ModeData = XLATE('SYSREPOSPOPUPS','LSL2**REACTOR_MODE',8,'X')
            Pointer = 1
            LOOP
                ModeCode = ModeData<1,Pointer,1>
            UNTIL ModeData<1,Pointer,2> = Mode OR Pointer = 50
                Pointer += 1
            REPEAT
            
            ReactModeRec<REACT_MODE_MODE$> = ModeCode
        END ELSE
            ReactModeRec<REACT_MODE_MODE$> = Mode
        END
    end
    
    
    CurrReactMode = XLATE('REACTOR',ReactNo,'CURR_MODE','X')		;* Mode prior to change
    
    TableVar = ''
    
    IF DevSwitch then
        OtParms = 'REACT_MODE_NG':@RM:ReactModeKey:@RM:TableVar:@RM:ReactModeRec
    end else
        OtParms = 'REACT_MODE':@RM:ReactModeKey:@RM:TableVar:@RM:ReactModeRec
    end
    
    
    obj_Tables('WriteOnlyRec',OtParms)		;* Writes and unlocks the record
    
    ***** Added 10/2/1013 JCH - Log Mode change in the REACT_EVENT table.
    
    oREParms  = ReactNo:@RM
    oREParms := StartDTM:@RM
    oREParms := 'MODE':@RM
    oREParms := UserID:@RM
    oREParms := Note:@RM
    oREParms := ReactModeRec<REACT_MODE_MODE$>:@RM
    oREParms := CurrReactMode						;* Added 12/5/2013 JCH
    
    obj_React_Event('Create',oREParms)
    
RETURN


* * * * * * *
Close:
* * * * * * *
    
    ReactNo		= Parms[1,@RM]
    StartDTM	= Parms[COL2()+1,@RM]
    StopDTM		= Parms[COL2()+1,@RM]
    UserID		= Parms[COL2()+1,@RM]
    Note		= Parms[COL2()+1,@RM]
    ReactUtilID	= Parms[COL2()+1,@RM]
    ReactLogID	= Parms[COL2()+1,@RM]
    
    IF ReactNo	= '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').'
    IF StartDTM = '' THEN ErrorMsg = 'Null parameter StartDTM passed to routine (':Method:').'
    IF StopDTM	= '' THEN ErrorMsg = 'Null parameter StopDTM passed to routine (':Method:').'
    IF UserID	= '' THEN ErrorMsg = 'Null parameter UserID passed to routine (':Method:').'
    
    IF ErrorMsg NE '' THEN RETURN
    
    thisStartDTM = ICONV(StartDTM,'DT')
    IF thisStartDTM = '' THEN
        ErrorMsg = 'Invalid value ':QUOTE(StartDTM):' passed for parameter StartDTM (':Method:').'
        RETURN
    END
    
    
    thisStopDTM = ICONV(StopDTM,'DT')
    IF thisStopDTM = '' THEN
        ErrorMsg = 'Invalid value ':QUOTE(StopDTM):' passed for parameter StopDTM (':Method:').'
        RETURN
    END
    
    ReactModeKey = ReactNo:'*':thisStartDTM
    ReactModeOld = XLATE('REACT_MODE', ReactModeKey, '','X')
    
    //Determine if REACT_MODE is in Old Table or Next Gen. Table
    IF ReactModeOld NE '' then
        OtParms = 'REACT_MODE':@RM:ReactModeKey
    end else
        OtParms = 'REACT_MODE_NG':@RM:ReactModeKey
    end
    
    
    ReactModeRec = obj_Tables('ReadOnlyRec',OtParms)
    
    ReactModeRec<REACT_MODE_STOP_DTM$>		= thisStopDTM
    ReactModeRec<REACT_MODE_STOP_USER$>		= UserID
    ReactModeRec<REACT_MODE_STOP_NOTE$>		= Note
    ReactModeRec<REACT_MODE_STOP_RU_ID$>	= ReactUtilID
    ReactModeRec<REACT_MODE_STOP_RL_ID$> 	= ReactLogID
    
    OtParms = FieldStore(OtParms,@RM,4,1,ReactModeRec)
    
    obj_Tables('WriteOnlyRec',OtParms)		;* Writes and unlocks the record
    
RETURN



* * * * * * *
NonProdDates:
* * * * * * *
    
    RecKey		= Parms[1,@RM]
    Record		= Parms[COL2()+1,@RM]
    
    IF RecKey = ''	THEN RETURN
    IF Record = ''	THEN Record = XLATE('REACT_ESC',RecKey,'','X')
    
    
    StartDtm = FIELD(RecKey,'*',2)
    StartDt = StartDtm[1,'.']
    
    Mode = Record<REACT_MODE_MODE$>
    IF Mode = 'P' OR Mode = 'U' OR Mode = 'S' THEN RETURN				;* Production modes plus Shutdown are excluded
    
    StopDt = Record<REACT_MODE_STOP_DTM$>[1,'.']
    
    IF StopDt = '' THEN
        StopDt = Date()
    END
    
    Ans = ''
    FOR NonProdDt = StartDt TO StopDt
        LOCATE NonProdDt IN Ans USING @VM SETTING Pos ELSE
            Ans = INSERT(Ans,1,Pos,0,NonProdDt)
        END
    NEXT StopDt
    
    Result = Ans
    
RETURN



* * * * * * *
DateNonProdHrs:
* * * * * * *
    
    ReactNo	= Parms[1,@RM]
    NonProdDt	= Parms[COL2()+1,@RM]
    
    IF ReactNo = ''	THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').'
    IF NonProdDt = ''	THEN ErrorMsg = 'Null parameter NonProdDt passed to routine (':Method:').'
    
    IF ErrorMsg NE '' THEN RETURN
    
    thisNonProdDt = ICONV(NonProdDt,'D')
    IF thisNonProdDt = '' THEN
        ErrorMsg = 'Invalid value ':QUOTE(NonProdDt):' passed for parameter NonProdDt (':Method:').'
        RETURN
    END
    
    OPEN 'DICT.REACT_MODE' TO DictVar ELSE
        CALL FsMsg()
        RETURN
    END
    
    SearchString  = 'REACT_NO':@VM:ReactNo:@FM
    SearchString := 'NON_PROD_DT':@VM:OConv(thisNonProdDt, 'D4/'):@FM
    
    Option = ''
    Flag = ''
    
    Btree.Extract(SearchString, 'REACT_MODE', DictVar, ReactModeKeys, Option, Flag)
    
    Ans = ''
    FOR I = 1 TO COUNT(ReactModeKeys,@VM) + (ReactModeKeys NE '')
        ReactModeKey = ReactModeKeys<1,I>
        ReactModeRec = XLATE('REACT_MODE',ReactModeKey,'','X')
        
        DateStartDTM = thisNonProdDt:'.0000115741'
        DateStopDTM = thisNonProdDt:'.999988459'
        
        StartDTM = FIELD(ReactModeKey,'*',2)
        StopDTM = ReactModeRec<REACT_MODE_STOP_DTM$>
        
        IF StartDTM _LTX DateStartDTM THEN StartDTM = DateStartDTM
        
        IF StopDTM = '' THEN
            IF thisNonProdDt = Date() THEN
                StopDTM = ICONV(OCONV(thisNonProdDt,'D4/'):' ':OCONV(Time(),'MTS'),'DT')
            END ELSE
                StopDTM = DateStopDTM
            END
        END ELSE
            IF StopDTM _GTX DateStopDTM THEN StopDTM = DateStopDTM
        END
        
        Ans  += (StopDTM - StartDTM)*24
        
    NEXT I
    
    IF Ans NE '' THEN
        Result = ICONV(Ans,'MD2')
    END
    
    
RETURN







