open-insight/LSL2/STPROC/OBJ_REACTOR_LOG.txt
2025-05-27 18:38:30 +02:00

387 lines
10 KiB
Plaintext

COMPILE FUNCTION obj_Reactor_Log(Method,Parms)
#pragma precomp SRP_PreCompiler
/*
Methods for REACTOR_LOG table
01/24/2014 JCH - Initial Coding
Properties:
Methods:
InstHistKeys(@ID,@RECORD)
TubeChange(Reactor,Date,ReactLogID) ;* Creates new Line item for Tube Change
CloseOpenModes(Reactor) ;* Closes extraneous open REACT_MODE records
*/
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log
Declare subroutine Error_Services, Database_Services, React_Item_Services
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services
$INSERT REACTOR_LOG_EQUATES
$INSERT REACT_ITEM_EQUATES
$INSERT REACT_ITEM_HIST_EQUATES
$INSERT MSG_EQUATES
ErrTitle = 'Error in Stored Procedure "obj_Reactor_Log"'
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 = 'ElapsedHrs' ; GOSUB ElapsedHrs
CASE Method = 'PostReactItems' ; GOSUB PostReactItems
CASE Method = 'UnpostReactItems' ; GOSUB UnpostReactItems
CASE Method = 'InstHistKeys' ; GOSUB InstHistKeys
CASE Method = 'RemHistKeys' ; GOSUB RemHistKeys
CASE 1
ErrorMsg = 'Unknown Method ':Method:' passed to object routine.'
END CASE
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
END
RETURN Result
* * * * * * *
ElapsedHrs:
* * * * * * *
RLNo = Parms[1,@RM]
ReactLogRec = Parms[COL2()+1,@RM]
IF RLNo = '' THEN RETURN ;* This is used in the dictionary -> don't throw an error for a null parmeter
IF ReactLogRec = '' THEN ReactLogRec = XLATE('REACTOR_LOG',RLNo,'','X')
StartDt = OCONV(ReactLogRec<REACTOR_LOG_START_DATE$>,'D4/')
StartTm = OCONV(ReactLogRec<REACTOR_LOG_START_TIME$>,'MTH')
EndDt = OCONV(ReactLogRec<REACTOR_LOG_END_DATE$>,'D4/')
EndTm = OCONV(ReactLogRec<REACTOR_LOG_END_TIME$>,'MTH')
StartDTM = ICONV(StartDt:' ':StartTm,'DT')
EndDTM = ICONV(EndDt:' ':EndTm,'DT')
IF StartDTM NE '' AND EndDTM NE '' AND EndDTM > StartDTM THEN
Result = ICONV((EndDTM - StartDTM) * 24,'MD2')
END
RETURN
* * * * * * *
PostReactItems:
* * * * * * *
RLNo = Parms[1,@RM]
PostSig = Parms[Col2()+1,@RM]
IF RLNo = '' THEN RETURN
otParms = 'REACTOR_LOG':@RM:RLNo
//ReactorLogRec = obj_Tables('ReadRec',otParms)
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RLNo)
ReactNo = ReactorLogRec<REACTOR_LOG_REACTOR$>
PostBy = ReactorLogRec<REACTOR_LOG_RI_POST_BY$>
PostDTM = ReactorLogRec<REACTOR_LOG_RI_POST_DTM$>
If PostSig EQ '' then PostSig = @User4
* PostSig = @USER4
* Check for existing PostDTM (unposted case)
IF PostDTM = '' THEN
PostDTM = obj_Calendar('CurrDTM')
PostDTM = ICONV(PostDTM,'DT')
END
InstRINos = ReactorLogRec<REACTOR_LOG_INST_RI_NO$>
CurrRINos = XLATE('REACTOR_LOG', RLNo, 'CURR_RI_NO', 'X')
//Check to make sure that everything is valid before adding or removing anything
ValidationFailureReason = ''
for each InstRINo in InstRINos using @VM
InstRIRec = Database_Services('ReadDataRow', 'REACT_ITEM', InstRINo)
If InstRIRec<REACT_ITEM_RETIRE_DT$> NE '' then
ValidationFailureReason = 'Unable to install Reactor Item No. ' : InstRINo : ' because its status is retired!'
end
Until ValidationFailureReason NE ''
Next InstRINo
if ValidationFailureReason EQ '' then
irCnt = COUNT(InstRINos,@VM) + (InstRINos NE '')
* * * * * 6/17/2014 JCH Changed this logic to not reinstall a Reactor Item that is already in the reactor * * * * * * *
FOR I = 1 TO irCnt
InstRINo = InstRINos<1,I>
LOCATE InstRINo IN CurrRINos USING @VM SETTING Dummy ELSE
InstRIHKey = ReactNo:'*':InstRINos<1,I>:'*':PostDTM
oriParms = InstRIHKey:@RM
oriParms := RLNo:@RM
oriParms := ReactorLogRec<REACTOR_LOG_REACT_WFR_CNT_END$> ;*ReactorLogRec<REACTOR_LOG_REACT_WAFER_CNT$>:@RM
oriParms := ReactorLogRec<REACTOR_LOG_REACTORHOURS$>
obj_React_Item_Hist('Install',oriParms)
IF Get_Status(errCode) THEN
END
END ;* End of LOCATE check for Install RI number already in the reactor
NEXT I
RemRIHKeys = ReactorLogRec<REACTOR_LOG_REM_RIH_KEY$>
rrCnt = COUNT(RemRIHKeys,@VM) + (RemRIHKeys NE '')
FOR I = 1 TO rrCnt
RemRIHKey = RemRIHKeys<1,I>
DispCd = ReactorLogRec<REACTOR_LOG_REM_DISP_CD$,I> ;* Disposition Code
IF DispCd = 'RET' THEN
RemRINo = FIELD(RemRIHKey,'*',2)
rlParms = 'REACT_ITEM':@RM
rlParms := RemRINo:@RM
rlParms := REACT_ITEM_RETIRE_BY$:@VM:REACT_ITEM_RETIRE_DT$:@RM
rlParms := PostSig:@VM:PostDTM[1,'.']:@RM
obj_Post_Log('Create',rlParms)
END ELSE
*obj_React_Item('PrintLabel',
END ;* End of check for RET - Retire Item
oriParms = RemRIHKey:@RM
oriParms := PostDTM:@RM
oriParms := RLNo:@RM
oriParms := ReactorLogRec<REACTOR_LOG_REACT_WFR_CNT_START$>
oriParms := ReactorLogRec<REACTOR_LOG_REACTORHOURS$>
obj_React_Item_Hist('Remove',oriParms)
NEXT I
ReactorLogRec<REACTOR_LOG_RI_POST_BY$> = PostSig
ReactorLogRec<REACTOR_LOG_RI_POST_DTM$> = PostDTM
otParms = FIELDSTORE(otParms,@RM,4,0,ReactorLogRec)
Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, ReactorLogRec, 1, 0, 1)
Update_Index('REACT_ITEM_HIST', 'INST_RL_ID', False$, True$) ;* Don't wait for indexer - flush pending indexes now
Update_Index('REACT_ITEM_HIST', 'REM_RL_ID', False$, True$)
end else
Error_Services('Add', ValidationFailureReason)
end
RETURN
* * * * * * *
UnpostReactItems:
* * * * * * *
RLNo = Parms[1,@RM]
IF RLNo = '' THEN RETURN
otParms = 'REACTOR_LOG':@RM:RLNo
//ReactorLogRec = obj_Tables('ReadRec',otParms)
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RLNo)
ReactNo = ReactorLogRec<REACTOR_LOG_REACTOR$>
PostBy = ReactorLogRec<REACTOR_LOG_RI_POST_BY$>
PostDTM = ReactorLogRec<REACTOR_LOG_RI_POST_DTM$>
PostSig = @USER4
* Check for existing PostDTM (unposted case)
IF PostDTM = '' THEN
PostDTM = obj_Calendar('CurrDTM')
PostDTM = ICONV(PostDTM,'DT')
END
*
InstRINos = ReactorLogRec<REACTOR_LOG_INST_RI_NO$>
irCnt = COUNT(InstRINos,@VM) + (InstRINos NE '')
CloseDTM = ''
CloseRLId = ''
CloseReactWfrs = ''
CloseReactHrs = ''
FOR I = 1 TO irCnt
InstRIHKey = ReactNo:'*':InstRINos<1,I>:'*':PostDTM
IF CloseDtm = '' THEN
CloseRec = XLATE('REACT_ITEM_HIST',InstRIHkey,'','X')
CloseDTM = CloseRec<REACT_ITEM_HIST_REM_DTM$>
CloseRLId = CloseRec<REACT_ITEM_HIST_REM_RL_ID$>
CloseReactWfrs = CloseRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$>
CloseReactHrs = CloseRec<REACT_ITEM_HIST_REM_REACT_HRS$>
END
oRihParms = 'REACT_ITEM_HIST':@RM:InstRIHkey
obj_Tables('DeleteRec',oRihParms)
IF Get_Status(errCode) THEN
DEBUG
END
NEXT I
* Close - Update Close Records closed by ReactorLog Post
RemRIHKeys = ReactorLogRec<REACTOR_LOG_REM_RIH_KEY$>
rrCnt = COUNT(RemRIHKeys,@VM) + (RemRIHKeys NE '')
FOR I = 1 TO rrCnt
IF CloseDTM = '' THEN
oriParms = RemRIHKeys<1,I>
obj_React_Item_Hist('ClearRemove',oriParms)
END ELSE
oriParms = RemRIHKeys<1,I>:@RM
oriParms := CloseDTM:@RM
oriParms := CloseRLId:@RM
oriParms := CloseReactWfrs:@RM
oriParms := CloseReactHrs
obj_React_Item_Hist('Remove',oriParms)
IF Get_Status(errCode) THEN
DEBUG
END
END
NEXT I
ReactorLogRec<REACTOR_LOG_RI_POST_BY$> = ''
ReactorLogRec<REACTOR_LOG_RI_POST_DTM$> = PostDTM
//otParms = FIELDSTORE(otParms,@RM,4,0,ReactorLogRec)
//obj_Tables('WriteRec',otParms)
Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, ReactorLogRec, 1,0,1)
Update_Index('REACT_ITEM_HIST', 'REM_RL_ID', False$, True$) ;* Don't wait for indexer - flush pending indexes now
Update_Index('REACT_ITEM_HIST', 'INST_RL_ID', False$, True$)
RETURN
* * * * * * *
InstHistKeys:
* * * * * * *
IF NOT(ASSIGNED(RLId)) THEN RLId = Parms[1,@RM]
IF NOT(ASSIGNED(ReactLogRec)) THEN ReactLogRec = Parms[COL2()+1,@RM]
IF RLId = '' THEN RETURN ;* This is used in the dictionary -> don't throw an error for a null parmeter
IF ReactLogRec = '' THEN ReactLogRec = XLATE('REACTOR_LOG',RLId,'','X')
ReactNo = ReactLogRec<REACTOR_LOG_REACTOR$>
EndDt = OCONV(ReactLogRec<REACTOR_LOG_END_DATE$>,'D4/')
EndTm = OCONV(ReactLogRec<REACTOR_LOG_END_TIME$>,'MTS')
InstDTM = ICONV(EndDt:' ':EndTm,'DT')
ReactItemList = ReactLogRec<REACTOR_LOG_REACT_ITEM_IDS$>
riCnt = COUNT(ReactItemList,@VM) + (ReactItemList NE '')
RHKeys = ''
FOR I = 1 TO riCnt
ReactItem = ReactItemList<1,I>
IF ReactItem NE '' THEN
RINo = obj_React_Item('Serial_RINo',ReactItem)
IF RINo NE '' THEN
RHKeys<1,-1> = ReactNo:'*':RINo:'*':InstDTM
END
END
NEXT I
/*
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE RETURN
Search = 'INST_RL_ID':@VM:RLId:@FM
Btree.Extract(Search,'REACT_ITEM_HIST',DictVar,RHKeys,'','')
IF Get_Status(errCode) THEN DEBUG
*/
Result = RHKeys
RETURN
* * * * * * *
RemHistKeys:
* * * * * * *
IF NOT(ASSIGNED(RLId)) THEN RLId = Parms[1,@RM]
IF NOT(ASSIGNED(ReactLogRec)) THEN ReactLogRec = Parms[COL2()+1,@RM]
IF RLId = '' THEN RETURN ;* This is used in the dictionary -> don't throw an error for a null parmeter
IF ReactLogRec = '' THEN ReactLogRec = XLATE('REACTOR_LOG',RLId,'','X')
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE RETURN
Search = 'REM_RL_ID':@VM:RLId:@FM
Btree.Extract(Search,'REACT_ITEM_HIST',DictVar,RHKeys,'','')
IF Get_Status(errCode) THEN DEBUG
Result = RHKeys
RETURN