COMPILE FUNCTION obj_React_Status(Method,Parms) /* Methods for the Reactor Mode (REACT_STATUS) table 10/02/2006 JCH - Initial Coding Properties: Methods: SetOutOfProdDTM(React,OutOfProdDTM) ;* Create new React Mode record SetUnloadDTM(React,UnloadDTM) CassLoad(ReactNo,WONo,CassNo,LoadDTM) ;* Cass Load signoff button pressed ;* Loads may overlap in time (operators sign off BEFORE doing the work. ;* This returns a Date-Time for the PrevReactUnloadDTM CassUnload(ReactNo,WONo,CassNo,UnloadDTM) ;* Cass Unload signoff button pressed. Removes load WONo & CassNo & Resets UnoadDTM */ #pragma precomp SRP_PreCompiler DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, Database_Services DECLARE FUNCTION Error_Services, Environment_Services, Logging_Services, Override_Log_Services DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Database_Services, Rlist DECLARE SUBROUTINE Logging_Services $INSERT LOGICAL $INSERT MSG_EQUATES $INSERT REACT_STATUS_EQUATES $INSERT REACTOR_EQUATES $INSERT WO_MAT_EQUATES $INSERT RLIST_EQUATES $INSERT OVERRIDE_LOG_EQUATES EQU CRLF$ TO \0D0A\ EQU Comma$ to ',' LogDate = Oconv(Date(), 'D4/') LogTime = Oconv(Time(), 'MTS') LoggingDTM = LogDate : ' ' : LogTime LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactStatus' LogFilename = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' React Status.csv' Headers = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes' objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$) ErrTitle = 'Error in Stored Procedure "obj_React_Status"' 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 = 'SetOutOfProdDTM' ; GOSUB SetOutOfProdDTM CASE Method = 'CassLoad' ; GOSUB CassLoad CASE Method = 'CassUnload' ; GOSUB CassUnload CASE Method = 'ReactorLoad' ; GOSUB ReactorLoad CASE Method = 'ReactorUnload' ; GOSUB ReactorUnload CASE Method = 'CleanHouse' ; GOSUB CleanHouse CASE Method = 'HandleLoadUnsign' ; GOSUB HandleLoadUnsign CASE Method = 'HandleUnloadUnsign' ; GOSUB HandleUnloadUnsign 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 * * * * * * * SetOutOfProdDTM: * * * * * * * ReactNo = Parms[1,@RM] OutOfProdDTM = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF OutOfProdDTM = '' THEN ErrorMsg = 'Null parameter OutOfProdDTM passed to routine (':Method:').' IF ErrorMsg NE '' THEN RETURN thisOutOfProdDTM = ICONV(OutOfProdDTM,'DT') IF thisOutOfProdDTM = '' THEN ErrorMsg = 'Invalid value ':QUOTE(OutOfProdDTM):' passed for parameter OutOfProdDTM (':Method:').' RETURN END Test = XLATE('REACTOR',ReactNo,'','X') IF Test = '' THEN ErrorMsg = 'Invalid Reactor Number ':QUOTE(ReactNo):' passed to routine (':Method:').' RETURN END ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) IF Get_Status(errCode) or Error_Services('HasError') THEN ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' RETURN END ReactStatRec = thisOutOfProdDTM Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') end RETURN * * * * * * * CassLoad: * * * * * * * ReactNo = Parms[1,@RM] WONo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM] LoadDTM = Parms[COL2()+1,@RM] RDSNo = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF CassNo = '' THEN ErrorMsg = 'Null parameter CassNo passed to routine (':Method:').' IF LoadDTM = '' THEN ErrorMsg = 'Null parameter LoadDTM passed to routine (':Method:').' IF RDSNo = '' THEN ErrorMsg = 'Null parameter RDSNo passed to routine(':Method:').' IF ErrorMsg NE '' THEN RETURN thisLoadDTM = ICONV(LoadDTM,'DT') IF thisLoadDTM = '' THEN ErrorMsg = 'Invalid value ':QUOTE(LoadDTM):' passed for parameter LoadDTM (':Method:').' RETURN END ReactRec = XLATE('REACTOR',ReactNo,'','X') IF ReactRec = '' THEN ErrorMsg = 'Invalid Reactor Number ':QUOTE(ReactNo):' passed to routine (':Method:').' RETURN END IF ReactRec = 'EPP' THEN RETURN ;* CassLoad is for non EpiPro ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) IF Get_Status(errCode) or Error_Services('HasError') THEN ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' RETURN END CassID = WONo:'*':CassNo * PrevLoadedCassCnt = COUNT(ReactStatRec,@VM) + (ReactStatRec NE '') PrevLoadedCassCnt = DCount(ReactStatRec, @VM) ReactStatRec = INSERT(ReactStatRec,REACT_STATUS_LOAD_CASS_ID$,PrevLoadedCassCnt+1,0,CassID) ReactStatRec = INSERT(ReactStatRec,REACT_STATUS_LOAD_DTM$,PrevLoadedCassCnt+1,0,thisLoadDTM) ReactStatRec = RDSNo ReactStatRec = thisLoadDTM Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') LogData = '' LogData<1> = LoggingDTM LogData<2> = @User4 LogData<3> = CassNo LogData<4> = RDSNo LogData<5> = LoadDTM LogData<6> = 'obj_React_Status' LogData<7> = ErrorMsg Logging_Services('AppendLog', objReactStatusLog, LogData, @RM, @FM) end IF ReactStatRec = '' THEN UnloadDTM = thisLoadDTM END ELSE UnloadDTM = ReactStatRec END IF PrevLoadedCassCnt > 0 THEN IdleTime = 0 END ELSE IdleTime = thisLoadDTM - UnloadDTM END IF IdleTime < 0 THEN IdleTime = 0 IdleTime = OCONV(ICONV(IdleTime*24,'MD2'),'MD2,') Result = IdleTime RETURN * * * * * * * CassUnload: * * * * * * * ReactNo = Parms[1,@RM] WONo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM] UnloadDTM = Parms[COL2()+1,@RM] RDSNo = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF CassNo = '' THEN ErrorMsg = 'Null parameter CassNo passed to routine (':Method:').' IF UnloadDTM = '' THEN ErrorMsg = 'Null parameter UnloadDTM passed to routine (':Method:').' IF RDSNo = '' THEN ErrorMsg = 'Null parameter RDSNo passed to routine (':Method:').' IF ErrorMsg NE '' THEN RETURN thisUnloadDTM = ICONV(UnloadDTM,'DT') IF thisUnloadDTM = '' THEN ErrorMsg = 'Invalid value ':QUOTE(UnloadDTM):' passed for parameter UnloadDTM (':Method:').' RETURN END ReactRec = XLATE('REACTOR',ReactNo,'','X') IF ReactRec = '' THEN ErrorMsg = 'Invalid Reactor Number ':QUOTE(ReactNo):' passed to routine (':Method:').' RETURN END IF ReactRec = 'EPP' THEN RETURN ;* CassUnload is for non EpiPro ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) IF Get_Status(errCode) or Error_Services('HasError') THEN ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' RETURN END CassID = WONo:'*':CassNo LoadedCass = ReactStatRec Locate CassID in LoadedCass using @VM setting vPos then ReactStatRec = DELETE(ReactStatRec,REACT_STATUS_LOAD_CASS_ID$,vPos,0) ReactStatRec = DELETE(ReactStatRec,REACT_STATUS_LOAD_DTM$,vPos,0) end LoadedRDS = ReactStatRec Locate RDSNo in LoadedRDS using @VM setting vPos then ReactStatRec = Delete(ReactStatRec, REACT_STATUS_LOAD_RDS$, vPos, 0) ReactStatRec = Delete(ReactStatRec, REACT_STATUS_LOAD_RDS_DTM$, vPos, 0) end ReactStatRec = thisUnloadDTM ReactStatRec = CassID ;* Added 11/14/2008 JCH ReactStatRec = thisUnloadDTM ReactStatRec = RDSNo Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') end RETURN * * * * * * * ReactorLoad: * * * * * * * * EpiPro Reactor Load ReactNo = Parms[1,@RM] WONo = Parms[COL2()+1,@RM] CassNos = Parms[COL2()+1,@RM] LoadDTM = Parms[COL2()+1,@RM] RDSNos = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF CassNos = '' THEN ErrorMsg = 'Null parameter CassNos passed to routine (':Method:').' IF LoadDTM = '' THEN ErrorMsg = 'Null parameter LoadDTM passed to routine (':Method:').' IF RDSNos = '' THEN ErrorMsg = 'Null parameter RDSNos passed to routine (':Method:').' IF ErrorMsg NE '' THEN RETURN thisLoadDTM = ICONV(LoadDTM,'DT') IF thisLoadDTM = '' THEN ErrorMsg = 'Invalid value ':QUOTE(LoadDTM):' passed for parameter LoadDTM (':Method:').' RETURN END ReactRec = XLATE('REACTOR',ReactNo,'','X') IF ReactRec = '' THEN ErrorMsg = 'Invalid Reactor Number ':QUOTE(ReactNo):' passed to routine (':Method:').' ;* Check for valid reactor number RETURN END ELSE IF ReactRec NE 'EPP' THEN ErrorMsg = 'Invalid reactor type ':ReactRec:' passed to routine.' ;* Not an EpiPro reactor RETURN END END ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) If Error_Services('NoError') then * PrevLoadCnt = COUNT(ReactStatRec,@VM) + (ReactStatRec NE '') CassIDs = '' CassCnt = COUNT(CassNos,@VM) + (CassNos NE '') FOR I = 1 TO CassCnt ReactStatRec = WONo:'*':CassNos<1,I> ReactStatRec = thisLoadDTM NEXT I PrevLoadCnt = DCount(ReactStatRec, @VM) For each RDSNo in RDSNos using @VM ReactStatRec = RDSNo ReactStatRec = thisLoadDTM Next RDSNo Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') end * IF ReactStatRec = '' THEN * UnloadDTM = thisLoadDTM * END ELSE * UnloadDTM = ReactStatRec * END If ReactStatRec EQ '' then UnloadDTM = thisLoadDTM end else UnloadDTM = ReactStatRec end IF PrevLoadCnt > 0 THEN IdleTime = 0 ;* There were already a cassette on the reactor (HTR reactors) END ELSE IdleTime = thisLoadDTM - UnloadDTM END IF IdleTime < 0 THEN IdleTime = 0 IdleTime = OCONV(ICONV(IdleTime*24,'MD2'),'MD2,') Result = IdleTime end else ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' end RETURN * * * * * * * ReactorUnload: * * * * * * * * EpiPro Reactor Unload ReactNo = Parms[1,@RM] WONo = Parms[COL2()+1,@RM] CassNos = Parms[COL2()+1,@RM] UnloadDTM = Parms[COL2()+1,@RM] RDSNos = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF CassNos = '' THEN ErrorMsg = 'Null parameter CassNos passed to routine (':Method:').' IF UnloadDTM = '' THEN ErrorMsg = 'Null parameter UnloadDTM passed to routine (':Method:').' IF RDSNos = '' THEN ErrorMsg = 'Null parameter RDSNos passed to routine (':Method:').' IF ErrorMsg NE '' THEN RETURN thisUnloadDTM = ICONV(UnloadDTM,'DT') IF thisUnloadDTM = '' THEN ErrorMsg = 'Invalid value ':QUOTE(UnloadDTM):' passed for parameter UnloadDTM (':Method:').' RETURN END ReactRec = XLATE('REACTOR',ReactNo,'','X') IF ReactRec = '' THEN ErrorMsg = 'Invalid Reactor Number ':QUOTE(ReactNo):' passed to routine (':Method:').' RETURN END ELSE IF ReactRec NE 'EPP' THEN ErrorMsg = 'Invalid reactor type ':ReactRec:' passed to routine.' RETURN END END ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) If Error_Services('NoError') then CassIDs = '' CassCnt = COUNT(CassNos,@VM) + (CassNos NE '') FOR I = 1 TO CassCnt ReactStatRec = WONo:'*':CassNos<1,I> ;* Set Unload CassID(s) ReactStatRec = thisUnloadDTM ;* Set Unload DTM(s) NEXT I For each RDSNo in RDSNos using @VM setting vPos ReactStatRec = RDSNo ReactStatRec = thisUnloadDTM Next RDSNo ReactStatRec = '' ;* Clear Load CassID(s) ReactStatRec = '' ;* Clear Load DTM(s) ReactStatRec = '' ReactStatRec = '' Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') end end else ErrorMsg = Error_Services('GetMessage') end RETURN * * * * * * * HandleLoadUnsign: * * * * * * * ReactNo = Parms[1,@RM] WONo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM] RDSNo = Parms[COL2()+1,@RM] OverrideUser = Parms[COL2()+1,@RM] Extra = Parms[COL2()+1,@RM] IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF CassNo = '' THEN ErrorMsg = 'Null parameter CassNo passed to routine (':Method:').' IF RDSNo = '' THEN ErrorMsg = 'Null parameter RDSNo passed to routine(':Method:').' IF OverrideUser = '' THEN ErrorMsg = 'Null parameter OverrideUser passed to routine(':Method:').' If Extra = '' then Extra = 0 CassID = WONo:'*':CassNo ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) IF Get_Status(errCode) or Error_Services('HasError') THEN ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' RETURN END WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', CassID) LoadedRDS = ReactStatRec Locate RDSNo in LoadedRDS using @VM setting vPos then ReactStatRec = Delete(ReactStatRec, 0, vPos, 0) ReactStatRec = Delete(ReactStatRec, 0, vPos, 0) ReactStatRec = Delete(ReactStatRec, 0, vPos, 0) ReactStatRec = Delete(ReactStatRec, 0, vPos, 0) end Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') return end else overrideLogTable = 'RDS':@VM:'REACTOR' overrideLogKey = RDSNo:@VM:ReactNo overrideLogUser = OverrideUser If Extra then overrideLogComment = 'UNSIGN-LOAD-EXTRA' end else overrideLogComment = 'UNSIGN-LOAD' end overrideLogCategory = 'UNSIGN' orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory) end Return * * * * * * * HandleUnloadUnsign: * * * * * * * ReactNo = Parms[1,@RM] WONo = Parms[COL2()+1,@RM] CassNo = Parms[COL2()+1,@RM] RDSNo = Parms[COL2()+1,@RM] OverrideUser = Parms[COL2()+1,@RM] Extra = Parms[COL2()+1,@RM]; *This variable is used to determine whether or not this came from a regular unload signature or an unload IF ReactNo = '' THEN ErrorMsg = 'Null parameter ReactNo passed to routine (':Method:').' IF WONo = '' THEN ErrorMsg = 'Null parameter WONo passed to routine (':Method:').' IF CassNo = '' THEN ErrorMsg = 'Null parameter CassNo passed to routine (':Method:').' IF RDSNo = '' THEN ErrorMsg = 'Null parameter RDSNo passed to routine(':Method:').' IF OverrideUser = '' THEN ErrorMsg = 'Null parameter OverrideUser passed to routine(':Method:').' If Extra = '' then Extra = 0 CassID = WONo:'*':CassNo ReactStatRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) IF Get_Status(errCode) or Error_Services('HasError') THEN ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').' RETURN END OriginalLoadTime = '' WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', CassID) // Get the original load event DTM to reload OriginalLoadTime = Xlate('RDS', RDSNo, 'DTM_IN', 'X') If OriginalLoadTime NE '' then // Restore the loaded cassette information PrevLoadedCassCnt = DCount(ReactStatRec, @VM) ReactStatRec = RDSNo ReactStatRec = OriginalLoadTime PrevUnloadRDS = '' PrevRDSUnloadDTM = '' PrevUnloadCassID = '' ErrCode = '' Query = 'SELECT RDS WITH WO EQ ':WONo:' AND WITH REACTOR EQ ':ReactNo:' BY-DSND DATE_OUT BY-DSND TIME_OUT' Rlist(Query, TARGET_ACTIVELIST$, '', '', '') If Not(Get_Status(ErrCode)) then ReadNext PrevUnloadRDS else Null PrevRDSUnloadDTM = Xlate('RDS', PrevUnloadRDS, 'DTM_OUT', 'X') end ReactStatRec = PrevRDSUnloadDTM ReactStatRec = PrevUnloadRDS Database_Services('WriteDataRow', 'REACT_STATUS', ReactNo, ReactStatRec, True$, False$, True$) If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') return end else overrideLogTable = 'RDS':@VM:'REACTOR' overrideLogKey = RDSNo:@VM:ReactNo overrideLogUser = OverrideUser overrideLogComment = 'UNSIGN-UNLOAD' overrideLogCategory = 'UNSIGN' orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory) end end Return * * * * * * * CleanHouse: * * * * * * * OPEN 'REACT_STATUS' TO FileIn ELSE RETURN END SELECT FileIn Done = 0 LOOP READNEXT ReactNo ELSE Done =1 UNTIL DONE READ ReactStatRec FROM FileIn,ReactNo THEN ReactStatRec = '' ReactStatRec = '' WRITE ReactStatRec ON FileIn,ReactNo END ;* End of record read REPEAT RETURN