COMPILE FUNCTION obj_Wand(Method,Parms) /* Methods for WAND table 01/8/2014 JCH - Initial Coding Properties: Methods: Install(WaferID,ReactNo,DTM,ReactHrs,ReactWfrs,RL_Id) ;* Adds Reactor Installation line item to record Remove(WaferID,ReactNo,DTM,ReactHrs,ReactWfrs,RL_Id) ;* Adds Removal information to Reactor Installation line item */ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn DECLARE SUBROUTINE ErrMsg, Btree.Extract $INSERT MSG_EQUATES $INSERT WAND_EQUATES $INSERT REACTOR_EQUATES $INSERT REACT_READS_EQUATES EQU CRLF$ TO \0D0A\ EQU TAB$ TO CHAR(9) ErrTitle = 'Error in Stored Procedure "obj_Wand"' 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 = 'Install' ; GOSUB Install CASE Method = 'Remove' ; GOSUB Remove CASE Method = 'ServiceHrs' ; GOSUB ServiceHrs CASE Method = 'ServiceWfrs' ; GOSUB ServiceWfrs CASE 1 ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.' END CASE IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) END RETURN Result * * * * * * * Install: * * * * * * * WandID = Parms[1,@RM] ReactNo = Parms[COL2()+1,@RM] ActionDTM = Parms[COL2()+1,@RM] ReactHrs = Parms[COL2()+1,@RM] ReactWfrs = Parms[COL2()+1,@RM] RL_Id = Parms[COL2()+1,@RM] IF WandID = '' THEN ErrorMsg = 'Null Parameter "WandID" passed to routine. (':Method:')' IF ReactNo = '' THEN ErrorMsg = 'Null Parameter "ReactNo" passed to routine. (':Method:')' IF ActionDTM = '' THEN ErrorMsg = 'Null Parameter "ActionDTM" passed to routine. (':Method:')' *IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' *IF ReactWfrs = '' THEN ErrorMsg = 'Null Parameter "ReactWfrs" passed to routine. (':Method:')' IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')' IF ErrorMsg NE '' THEN RETURN thisActionDTM = ICONV(ActionDTM,'DT') IF thisActionDTM = '' THEN ErrorMsg = 'Invalid parameter ActionDTM ':QUOTE(ActionDTM):' passed to routine. (':Method:')' RETURN END otParms = 'WAND':@RM:WandID WandRec = obj_Tables('ReadRec',otParms) IF Get_Status(errCode) THEN Set_Status(0) WandRec = '' END /* IF WandRec = ReactNo THEN ErrorMsg = 'WandID ':QUOTE(WandID):' is already in service in reactor ':ReactNo:'.' obj_Tables('UnlockRec',otParms) RETURN END */ WandRec = INSERT(WandRec,WAND_REACT_NO$,1,0,ReactNo) WandRec = INSERT(WandRec,WAND_INST_DTM$,1,0,thisActionDTM) WandRec = INSERT(WandRec,WAND_INST_REACT_HRS$,1,0,ReactHrs) WandRec = INSERT(WandRec,WAND_INST_REACT_WFRS$,1,0,ReactWfrs) WandRec = INSERT(WandRec,WAND_INST_RL_ID$,1,0,RL_Id) WandRec = INSERT(WandRec,WAND_REM_DTM$,1,0,'') WandRec = INSERT(WandRec,WAND_REM_REACT_HRS$,1,0,'') WandRec = INSERT(WandRec,WAND_REM_REACT_WFRS$,1,0,'') WandRec = INSERT(WandRec,WAND_REM_RL_ID$,1,0,'') otParms = FIELDSTORE(OtParms,@RM,4,0,WandRec) obj_Tables('WriteRec',otParms) RETURN * * * * * * * Remove: * * * * * * * WandID = Parms[1,@RM] ReactNo = Parms[COL2()+1,@RM] ActionDTM = Parms[COL2()+1,@RM] ReactHrs = Parms[COL2()+1,@RM] ReactWfrs = Parms[COL2()+1,@RM] RL_Id = Parms[COL2()+1,@RM] RDSWfrCnt = Parms[COL2()+1,@RM] IF WandID = '' THEN ErrorMsg = 'Null Parameter "WandID" passed to routine. (':Method:')' IF ReactNo = '' THEN ErrorMsg = 'Null Parameter "ReactNo" passed to routine. (':Method:')' IF ActionDTM = '' THEN ErrorMsg = 'Null Parameter "ActionDTM" passed to routine. (':Method:')' *IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' *IF ReactWfrs = '' THEN ErrorMsg = 'Null Parameter "ReactWfrs" passed to routine. (':Method:')' *IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')' *IF RDSWfrCnt = '' THEN ErrorMsg = 'Null Parameter "RDSWfrCnt" passed to routine. (':Method:')' IF ErrorMsg NE '' THEN RETURN thisActionDTM = ICONV(ActionDTM,'DT') IF thisActionDTM = '' THEN ErrorMsg = 'Invalid parameter ActionDTM ':QUOTE(ActionDTM):' passed to routine. (':Method:')' RETURN END otParms = 'WAND':@RM:WandID WandRec = obj_Tables('ReadRec',otParms) IF Get_Status(errCode) THEN Set_Status(0) WandRec = '' END IF WandRec NE ReactNo THEN WandRec = INSERT(WandRec,WAND_REACT_NO$,1,0,ReactNo) WandRec = INSERT(WandRec,WAND_INST_DTM$,1,0,'') WandRec = INSERT(WandRec,WAND_INST_REACT_HRS$,1,0,'') WandRec = INSERT(WandRec,WAND_INST_REACT_WFRS$,1,0,'') WandRec = INSERT(WandRec,WAND_INST_RL_ID$,1,0,'') WandRec = INSERT(WandRec,WAND_REM_DTM$,1,0,thisActionDTM) WandRec = INSERT(WandRec,WAND_REM_REACT_HRS$,1,0,ReactHrs) WandRec = INSERT(WandRec,WAND_REM_REACT_WFRS$,1,0,ReactWfrs) WandRec = INSERT(WandRec,WAND_REM_RL_ID$,1,0,RL_Id) otParms = FIELDSTORE(OtParms,@RM,4,0,WandRec) obj_Tables('WriteRec',otParms) *ErrorMsg = 'WandID ':QUOTE(WandID):' is not in service in reactor ':ReactNo:'.' *obj_Tables('UnlockRec',otParms) RETURN END WandRec = thisActionDTM WandRec = ReactHrs WandRec = ReactWfrs WandRec = RL_Id otParms = FIELDSTORE(OtParms,@RM,4,0,WandRec) obj_Tables('WriteRec',otParms) RETURN * * * * * * * ServiceHrs: * * * * * * * DEBUG RETURN IF NOT(ASSIGNED(TubeID)) THEN TubeID = Parms[1,@RM] IF NOT(ASSIGNED(TubeRec)) THEN TubeRec = Parms[COL2()+1,@RM] IF TubeID = '' THEN RETURN ;* This is used in the dictionary -> don't throw an error for a null parmeter IF TubeRec = '' THEN TubeRec = XLATE('TUBE',TubeID,'','X') LastRemDtm = TubeRec IF LastRemDTM = '' THEN ReactNo = TubeRec LastReadDTM = XLATE('REACTOR',ReactNo,REACTOR_LAST_READ_HRS_DTM$,'X') LastReadHrs = XLATE('REACT_READS',ReactNo:'*':LastReadDTM,REACT_READS_HOURS$,'X') END ELSE LastReadHrs = '' END Ans = '' IRCnt = COUNT(TubeRec,@VM) + (TubeRec NE '') FOR I = 1 TO IRCnt RemReactHrs = TubeRec InstReactHrs = TubeRec IF I = 1 AND LastReadHrs NE '' THEN ReactNo = TubeRec LastReadDTM = XLATE('REACTOR',ReactNo,25,'X') LastReadHrs = XLATE('REACT_READS',ReactNo:'*':LastReadDTM,1,'X') RemReactHrs = LastReadHrs END IF RemReactHrs > InstReactHrs AND NUM(InstReactHrs) AND NUM(RemReactHrs) THEN Ans<1,I> = RemReactHrs - InstReactHrs END ELSE Ans<1,I> = '' END NEXT I Result = Ans RETURN * * * * * * * ServiceWfrs: * * * * * * * DEBUG RETURN IF NOT(ASSIGNED(TubeID)) THEN TubeID = Parms[1,@RM] IF NOT(ASSIGNED(TubeRec)) THEN TubeRec = Parms[COL2()+1,@RM] IF TubeID = '' THEN RETURN ;* This is used in the dictionary -> don't throw an error for a null parmeter IF TubeRec = '' THEN TubeRec = XLATE('TUBE',TubeID,'','X') LastRemDtm = TubeRec IF LastRemDTM = '' THEN ReactNo = TubeRec LastReadDTM = XLATE('REACTOR',ReactNo,REACTOR_LAST_READ_WFRS_DTM$,'X') LastReadWfrs = XLATE('REACT_READS',ReactNo:'*':LastReadDTM,REACT_READS_WAFER_CNT$,'X') END ELSE LastReadWfrs = '' END Ans = '' IRCnt = COUNT(TubeRec,@VM) + (TubeRec NE '') IF IRCnt = 0 THEN Ans = LastReadWfrs END ELSE FOR I = 1 TO IRCnt RemReactWfrs = TubeRec InstReactWfrs = TubeRec IF I = 1 AND LastReadWfrs NE '' THEN RemReactWfrs = LastReadWfrs END IF RemReactWfrs > InstReactWfrs AND NUM(InstReactWfrs) AND NUM(RemReactWfrs) THEN Ans<1,I> = RemReactWfrs - InstReactWfrs END ELSE Ans<1,I> = '' END NEXT I END Result = Ans RETURN Result