318 lines
8.1 KiB
Plaintext
318 lines
8.1 KiB
Plaintext
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<WAND_REACT_NO$,1> = 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<WAND_REACT_NO$,1> 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<WAND_REM_DTM$,1> = thisActionDTM
|
|
WandRec<WAND_REM_REACT_HRS$,1> = ReactHrs
|
|
WandRec<WAND_REM_REACT_WFRS$,1> = ReactWfrs
|
|
WandRec<WAND_REM_RL_ID$,1> = 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<TUBE_REM_DTM$,1>
|
|
|
|
IF LastRemDTM = '' THEN
|
|
ReactNo = TubeRec<TUBE_REACT_NO$,1>
|
|
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<TUBE_INST_REACT_HRS$>,@VM) + (TubeRec<TUBE_INST_REACT_HRS$> NE '')
|
|
|
|
FOR I = 1 TO IRCnt
|
|
|
|
RemReactHrs = TubeRec<TUBE_REM_REACT_HRS$,I>
|
|
InstReactHrs = TubeRec<TUBE_INST_REACT_HRS$,I>
|
|
|
|
IF I = 1 AND LastReadHrs NE '' THEN
|
|
ReactNo = TubeRec<TUBE_REACT_NO$,I>
|
|
|
|
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<TUBE_REM_DTM$,1>
|
|
|
|
IF LastRemDTM = '' THEN
|
|
ReactNo = TubeRec<TUBE_REACT_NO$,1>
|
|
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<TUBE_INST_REACT_WFRS$>,@VM) + (TubeRec<TUBE_INST_REACT_WFRS$> NE '')
|
|
|
|
|
|
IF IRCnt = 0 THEN
|
|
Ans = LastReadWfrs
|
|
END ELSE
|
|
|
|
FOR I = 1 TO IRCnt
|
|
|
|
RemReactWfrs = TubeRec<TUBE_REM_REACT_WFRS$,I>
|
|
InstReactWfrs = TubeRec<TUBE_INST_REACT_WFRS$,I>
|
|
|
|
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
|
|
|
|
|