Compile function REACT_MODE_CHG_NG_EVENTS(CtrlEntId, Event, @PARAMS) Declare function center_window, msg, Memberof, Get_Property, NextKey, next_key, rowexists, Get_Status Declare function SRP_Array, start_window, Dialog_Box, Reactor_Log_Services, Reactor_Modes_Services, GetTickCount Declare function Reactor_Services, Error_Services, Logging_Services, Environment_Services Declare subroutine RList, Set_Property, Set_List_Box_Data, end_dialog, record_lock, obj_React_Mode, ErrMsg Declare subroutine Mona_Services, Reactor_Services, Error_Services, obj_React_Status, Logging_Services #pragma precomp SRP_PreCompiler #window REACT_MODE_CHG_NG $Insert EVENT_SETUP $insert logical $insert REACT_MODE_EQUATES $Insert REACT_MODE_NG_EQUATES $Insert REACTOR_MODES_EQUATES $insert react_mode_equ ;* THESE ARE NOT THE SAME jch, Update 9/15/21. These are the equates for the CONFIG records $insert msg_equates $insert rlist_equates $insert react_prob_cat_equates $insert reactor_log_equ $insert react_util_equ $insert wo_log_equ $insert REACTOR_CHILD_KEY_IDS_EQUATES GoToEvent Event for CtrlEntId else // Event not implemented end Return EventFlow or 1 //----------------------------------------------------------------------------- // EVENT HANDLERS //----------------------------------------------------------------------------- Event WINDOW.CREATE(CreateParam) //if @user4 eq 'JONATHAN_O' or @Username eq 'MESOUELLETTE' then debug Reactor = CreateParam[1,'*'] Wo = CreateParam[COL2()+1,'*'] ForceModeChange = CreateParam[COL2()+1,'*'] FourthParm = CreateParam[COL2()+1,'*'] LeakLampAutoFlag = (FourthParm = 1 ) IF INDEX(CreateParam,'CENTER',1 ) THEN void = center_window( @WINDOW ) END ELSE Void = Set_Property( @WINDOW, 'VISIBLE', 1 ) END EventFlow = 1 //Get List of Reactor Modes Statement = 'SELECT REACTOR_MODES BY DESCRIPTION' rlist( Statement, target_activelist$, '', '', '' ) ModeList = '' IF @RecCount then EoF = 0 NumKeys = @RecCount Cnt = 0 Loop ReadNext ReactorModeID Else EoF = 1 until EoF ModeList<-1> = ReactorModeID Repeat end Set_Property(@Window : '.MODE', 'LIST', ModeList) //End of Get list of Reactor Modes //Find the current REACT_MODE OR REACT_MODE_NG record. OldGenReactModeKey = XLATE('REACTOR_CHILD_KEY_IDS', Reactor, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X') NewGenReactModeKey = XLATE('REACTOR_CHILD_KEY_IDS_NG', Reactor, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X') OldGenReactModeDTM = Field(OldGenReactModeKey, '*', 2) NewGenReactModeDTM = Field(NewGenReactModeKey, '*', 2) ReactModeKeyToUse = '' If OldGenReactModeDTM GT NewGenReactModeDTM then ReactModeKeyToUse = OldGenReactModeKey GoSub TranslateOldCodes end If NewGenReactModeDTM GT OldGenReactModeDTM then ReactModeKeyToUse = NewGenReactModeKey end //CurReactMode = Xlate('REACT_MODE', ReactModeKeyToUse, REACT_MODE_MODE$, 'X') //End find the current REACT_MODE OR REACT_MODE_NG record. Set_List_Box_Data( @WINDOW ) //check for Groups allowed to change IF memberof( @USER4, 'DATA_ENTRY' ) OR memberof( @USER4, 'SUPERVISOR' ) OR memberof( @USER4, 'MAINTENANCE' ) OR @USER4 EQ 'JONATHAN_O' THEN IF Reactor NE '' THEN * called from status window and createparam is the reactor number * so simply READ and lock OPEN 'CONFIG' TO ConfigTable ELSE Void = msg( '', 'Unable to open CONFIG table...' ) RETURN 0 END LOCK ConfigTable, 'REACT_MODE':Reactor THEN IF ForceModeChange THEN Set_Property(@Window : '.CANCEL', 'ENABLED', 0) Set_Property(@Window : '.APPLY', 'ENABLED', 1) END END ELSE Set_Property(@Window : '.MODE', 'ENABLED', 0) Set_Property(@Window : '.REACTMODESVC', 'ENABLED', 0) Set_Property(@Window : '.CANCEL', 'TEXT', 'OK') MsgInfo = '' MsgInfo = 'Reactor ':Reactor:' is currently being set to another mode...' MsgInfo = '!' NotSignedRL = 1 Void = msg( '', MsgInfo ) END GOSUB DoRead unlock ConfigTable, 'REACT_MODE':Reactor else NULL END ELSE * let them enter the reactor number and get a lock on the onchange event Set_Property(@Window : '.reactor_no', 'ENABLED', 1) END ;* End of check for Non-Null Reactor No END ELSE Set_Property(@Window : '.MODE', 'ENABLED', 0) Set_Property(@Window : '.REACTMODESVC', 'ENABLED', 0) Set_Property(@Window : '.CANCEL', 'TEXT', 'OK') GOSUB DoRead END ;* End of check for Groups allowed to change OriginalCommentBackColor = Get_Property(@Window:'.EDB_COMMENT', 'BACKCOLOR') Set_Property(@Window, '@EDB_COMMENT_ORIG_BACK_COLOR', OriginalCommentBackColor) Set_Property(@Window:'.EDB_COMMENT', 'BACKCOLOR', 0) OriginalCommentSize = Get_Property(@Window:'.EDB_COMMENT', 'SIZE') Set_Property(@Window, '@EDB_COMMENT_ORIG_SIZE', OriginalCommentSize) End Event Event MODE.CHANGED() Set_Property(@Window:'.EDB_COMMENT', 'TEXT', '') OrigMode = Get_Property(@Window: '.CURRENT_MODE', 'TEXT') NewMode = Get_Property(@Window : '.MODE', 'TEXT') IF OrigMode NE NewMode then Set_Property(@Window : '.APPLY', 'ENABLED', 1) Set_Property(@Window : '.REACTMODESVC', 'TEXT', '') end else Set_Property(@Window : '.APPLY', 'ENABLED', 1) //Set_Property(@Window : '.REACTMODESVC', 'TEXT', '') end CatDesc = Xlate('REACTOR_MODES', NewMode, REACTOR_MODES_SERVICE_CATEGORIES$, 'X') Swap @VM with @FM in CatDesc Set_Property(@Window : '.REACTMODESVC', 'VISIBLE', 1) Set_Property(@Window : '.REACTMODESVC', 'ENABLED', 1) Set_Property(@Window : '.REACTMODESVC', 'LIST', CatDesc) Set_Property(@Window : '.SERV_LABEL', 'VISIBLE', 1) IF NewMode EQ 'CHANGEOVER_SCHEDULED' then //GoSub ChangeOverAutoSet end If (NewMode _NEC 'WAITING_FOR_MAINTENANCE_UNSCHEDULED') and (NewMode _NEC 'WAITING_FOR_ENGTECH_UNSCHEDULED') then GoSub HideDropDownComments end end event Event REACTMODESVC.CHANGED() Set_Property(@Window:'.EDB_COMMENT', 'TEXT', '') UseDropDownComments = 0 NewMode = Get_Property(@Window : '.MODE', 'TEXT') SvcCat = Get_Property(@Window:'.REACTMODESVC', 'TEXT') If NewMode _EQC 'WAITING_FOR_MAINTENANCE_UNSCHEDULED' then AvailableMaintComments = Xlate('APP_INFO', 'REACT_MODE_CHANGE_MAINT_COMMENT_OPTIONS', 1, 'X') Swap @VM with @FM in AvailableMaintComments Set_Property(@Window:'.COB_COMMENT', 'LIST', AvailableMaintComments) UseDropDownComments += 1 end If NewMode _EQC 'WAITING_FOR_ENGTECH_UNSCHEDULED' then AvailableEngrComments = Xlate('APP_INFO', 'REACT_MODE_CHANGE_ENGR_COMMENT_OPTIONS', 1, 'X') Swap @VM with @FM in AvailableEngrComments Set_Property(@Window:'.COB_COMMENT', 'LIST', AvailableEngrComments) UseDropDownComments +=1 end If SvcCat _EQC 'WF-PARTICLES' then UseDropDownComments += 1 end If UseDropDownComments GT 1 then Set_Property(@Window:'.COB_COMMENT', 'ENABLED', True$) Set_Property(@Window:'.COB_COMMENT', 'VISIBLE', True$) OrigBackColor = Get_Property(@Window, '@EDB_COMMENT_ORIG_BACK_COLOR') Set_Property(@Window:'.EDB_COMMENT', 'BACKCOLOR', OrigBackColor) OriginalCommentSize = Get_Property(@Window, '@EDB_COMMENT_ORIG_SIZE') CommentSize = Get_Property(@Window, '@EDB_COMMENT_ORIG_SIZE') CommentSize<2> = CommentSize<2> + 37 CommentSize<4> = 65 Set_Property(@Window:'.EDB_COMMENT', 'SIZE', CommentSize) Set_Property(@Window:'.COB_COMMENT', 'TEXT', '') end else GoSub HideDropDownComments end end event Event APPLY.CLICK() //Initialize Logging LogPath = Environment_Services('GetApplicationRootPath') : '\ReactMode\LogFiles' Date = Oconv(Date(), 'D4/') LogFileName = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' ReactMode Log.csv' Headers = 'Logging DTM' : @FM : 'Description' ColumnWidths = 20 : @FM : 250 objLog = Logging_Services('NewLog', LogPath, LogFilename, CRLF$, ' ', Headers, ColumnWidths, False$, False$) ReactNo = Get_Property(@WINDOW:'.REACTOR_NO','TEXT') NewMode = Get_Property(@Window : '.MODE', 'TEXT') NewReactModeSvc = Get_Property(@WINDOW:'.REACTMODESVC','TEXT') ;* .reactmodesvc->text NewNoteText = '' CobCommentEnabled = Get_Property(@Window:'.COB_COMMENT', 'ENABLED') If CobCommentEnabled then SelectedComment = Get_Property(@Window:'.COB_COMMENT', 'TEXT') If SelectedComment _EQC 'other' then NewNoteText = Get_Property(@Window:'.EDB_COMMENT', 'TEXT') end else NewNoteText = SelectedComment end end else NewNoteText = Get_Property(@Window:'.EDB_COMMENT', 'TEXT') end Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText) If Error_Services('NoError') then End_Dialog(@Window, NewMode) end else Error_Services('DisplayError') end RETURN 0 end event Event RL_BUTTON.CLICK() If Get_Property('NDW_MAIN', 'VISIBLE') then AppMain = 'NDW_MAIN' end else AppMain = 'LSL_MAIN2' end ReactorLogID = Get_Property(@Window : '.RLID', 'TEXT') //Void = start_window( 'REACTOR_LOG', AppMain, ReactorLogID:'*CENTER', '', '' ) Void = Dialog_Box('REACTOR_LOG', AppMain, ReactorLogID:'*CENTER') void = Set_Property('REACTOR_LOG','@PARENT','REACT_MODE_CHG_NG') If Reactor_Log_Services('IsMaint', ReactorLogID) AND Reactor_Log_Services('IsSigned', ReactorLogID) then Set_Property(@Window : '.MODE', 'ENABLED', 1) end RETURN 0 end event Event CANCEL.CLICK() Reactor = Get_Property(@Window : '.REACTOR_NO', 'TEXT') CurMode = Get_Property(@Window: '.CURRENT_MODE','TEXT') End_Dialog(@Window, CurMode) end event Event COB_COMMENT.CHANGED() Set_Property(@Window:'.EDB_COMMENT', 'TEXT', '') Comment = Get_Property(@Window:'.COB_COMMENT', 'TEXT') If Comment _EQC 'other' then Set_Property(@Window:'.EDB_COMMENT', 'ENABLED', True$) Set_Property(@Window:'.EDB_COMMENT', 'BACKCOLOR', 0) end else Set_Property(@Window:'.EDB_COMMENT', 'ENABLED', False$) OrigBackColor = Get_Property(@Window, '@EDB_COMMENT_ORIG_BACK_COLOR') Set_Property(@Window:'.EDB_COMMENT', 'BACKCOLOR', OrigBackColor) end end event //----------------------------------------------------------------------------- // INTERNAL GOSUBS //----------------------------------------------------------------------------- * * * * * * * DoRead: * * * * * * * //Pull in the full REACT_MODE or REACT_MODE_NG record. CurReactModeRec = XLATE('REACT_MODE', ReactModeKeyToUse, '','X') If CurReactModeRec EQ '' then //If CurReactModeRec is blank then check the NG table for that record. CurReactModeRec = XLATE('REACT_MODE_NG', ReactModeKeyToUse, '','X') end //This basically pulls in redundant information from a config table Rec = XLATE( 'CONFIG', 'REACT_MODE_NG':Reactor, '', 'X' ) If Rec = '' then Rec = XLATE( 'CONFIG', 'REACT_MODE':Reactor, '', 'X' ) end Service = Rec Note = Rec Mode = Rec ReactLogID = Rec ReactLogCat = XLATE('REACTOR_LOG', ReactLogID, 6, 'X') //This determines if the current mode is a maint. mode and if so checks that the REACTOR_LOG has been signed off by a technician. * IF Rec NE '' AND ReactLogCat EQ 'M' THEN * debug * Set_Property(@Window : '.RL_BUTTON', 'VISIBLE', 1) * OPEN 'REACTOR_LOG' TO RLTable ELSE * msg( '', 'Unable to open REACTOR_LOG...' ) * RETURN 0 * END * READ RLRec from RLTable, ReactLogID THEN * IF RLRec = '' THEN * * DO NOT ALLOW A MODE CHANGE CAUSE THE REACTOR LOG IS STILL OPEN * MsgInfo = '' * MsgInfo = 'You are not allowed to change the mode because the maintenance tech has not signed off on the reactor log entry...' * MsgInfo = '!' * Set_Property(@Window : '.MODE', 'ENABLED', 0); * NotSignedRL = 1 * Void = msg( '', MsgInfo ) * * * END ELSE * * ALLOW A MODE CHANGE CAUSE IT HAS BEEN SIGNED BY A MAINTENANCE TECHNICIAN * * END * END ELSE * * DO NOTHING CAUSE SOME MAINT GUY MUST HAVE DELETED THE ENTRY * END * END IF ReactLogID NE '' then IF Reactor_Log_Services('IsMaint', ReactLogID) then Set_Property(@Window : '.RL_BUTTON', 'VISIBLE', 1) IF NOT(Reactor_Log_Services('IsSigned', ReactLogID)) then * DO NOT ALLOW A MODE CHANGE CAUSE THE REACTOR LOG IS STILL OPEN MsgInfo = '' MsgInfo = 'You are not allowed to change the mode because the maintenance tech has not signed off on the reactor log entry...' MsgInfo = '!' Set_Property(@Window : '.MODE', 'ENABLED', 0); NotSignedRL = 1 Void = msg( '', MsgInfo ) end end else * ALLOW A MODE CHANGE CAUSE IT HAS BEEN SIGNED BY A MAINTENANCE TECHNICIAN end end Set_Property(@WINDOW:'.REACTOR_NO','TEXT', Reactor) Set_Property(@WINDOW:'.USERNAME','TEXT', Rec) Set_Property(@WINDOW:'.DATE','TEXT', Rec) Set_Property(@WINDOW:'.TIME','TEXT', Rec) Set_Property(@WINDOW:'.CURRENT_MODE','TEXT', Mode) Set_Property(@WINDOW:'.CURRENT_REACTMODESVC','TEXT', Service) //Set_Property(@WINDOW, '@Mode', Rec ) Set_Property(@WINDOW:'.RUID','TEXT', Rec) Set_Property(@WINDOW:'.RLID','TEXT', Rec) Set_Property(@WINDOW:'.WO','TEXT', Wo) IF Service THEN Set_Property(@WINDOW:'.REACTMODESVC','VISIBLE',TRUE$) Set_Property(@WINDOW:'.SERV_LABEL','VISIBLE',TRUE$) //Set_Property(@WINDOW:'.REACTMODESVC','TEXT', Service) Set_Property(@WINDOW:'.REACTMODESVC','ENABLED', 0) ;* Do not allow them to change the service until they change the mode END //Get Possible Modes here ModeList = '' ModeList = Reactor_Modes_Services('AvailableModes', Mode, @User4) Set_Property(@Window : '.MODE', 'LIST', ModeList) RETURN * * * * * * * * * * TranslateOldCodes: * * * * * * * * * * ReactorModeList = Xlate('SYSREPOSPOPUPS', @APPID<1>:'**':'REACTOR_MODE', PDISPLAY$, 'X') ReactorModeArray = ReactorModeList<8> Convert @VM to @FM in ReactorModeArray Convert @SVM to @VM in ReactorModeArray CurReactModeCode = XLATE('REACT_MODE', ReactModeKeyToUse, REACT_MODE_MODE$, 'X') Locate CurReactModeCode in ReactorModeArray using @FM setting CodePos then NewMode = ReactorModeArray end return * * * * * * * * * * * CheckReactorLogStatus: return * * * * * * * * * * * ChangeOverAutoSet: * * * * * * * * * * * LastWO = '' NextWO = '' return HideDropDownComments: Set_Property(@Window:'.COB_COMMENT', 'ENABLED', False$) Set_Property(@Window:'.COB_COMMENT', 'VISIBLE', False$) Set_Property(@Window:'.EDB_COMMENT', 'ENABLED', True$) Set_Property(@Window:'.EDB_COMMENT', 'VISIBLE', True$) Set_Property(@Window:'.EDB_COMMENT', 'BACKCOLOR', 0) OriginalCommentSize = Get_Property(@Window, '@EDB_COMMENT_ORIG_SIZE') Set_Property(@Window:'.EDB_COMMENT', 'SIZE', OriginalCommentSize) Set_Property(@Window:'.COB_COMMENT', 'TEXT', '') return