open-insight/LSL2/STPROC/COMM_REACTOR_LOG.txt
Ouellette Jonathan (CSC FI SPS MESLEO) 6fd0d30717 Merged PR 11840: Added MFS logic to ensure notes data cannot be removed.
Added MFS logic to ensure notes data cannot be removed.

Related work items: #231781
2025-03-03 20:19:19 +01:00

1664 lines
44 KiB
Plaintext

COMPILE FUNCTION COMM_REACTOR_LOG(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
#pragma precomp SRP_PreCompiler
/*
Commuter module for COMM_REACTOR_LOG (Reactor_Log) window
09/9/2013 - John C. Henry, J.C. Henry & Co., Inc.
*/
Declare Subroutine Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event, Set_List_Box_Data
Declare Subroutine obj_Tables, Print_RootCause_Analysis, Database_Services, obj_React_Reads, obj_React_Event
Declare Subroutine ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow, Dialog_Box, Yield
Declare Subroutine obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, obj_Reactor_Log, obj_Post_Log
Declare Subroutine Reactor_Log_Events, Reactor_Log_Services, Error_Services, React_Servs_Services, Reactor_Services
Declare Subroutine Override_Log_Services, SRP_List, Nica_Orders_Services
Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals, EntID, Repository, NextKey
Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar
Declare Function GetAsyncKeyState, obj_Tables, MemberOf, Environment_Services, Database_Services, Rds_Services
Declare Function Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List
Declare Function Nica_Orders_Services
$Insert MSG_EQUATES
$Insert APPCOLORS
$Insert LSL_USERS_EQU
$Insert SECURITY_RIGHTS_EQU
$Insert POPUP_EQUATES
$Insert RTI_STYLE_EQUATES
$Insert RLIST_EQUATES
$Insert REACT_SERVS_EQUATES
$Insert REACT_PROB_CAT_EQUATES
$Insert REACTOR_LOG_EQUATES
$Insert REACT_SERV_CAT_EQUATES
$Insert REACT_ITEM_EQUATES
$Insert REACT_INJECTOR_EQUATES
$Insert REACT_STATE_EQUATES
$Insert EXCEL_EQU
$Insert REACTOR_PM_EQUATES
$Insert REACTOR_EQUATES
$Insert RDS_EQUATES
$Insert LOGICAL
EQU WM_USER$ TO 1024
EQU DTM_EDITCURCELL$ TO WM_USER$ + 95
EQU DT_BEGINEDIT$ TO 1
EQU DT_ENDEDIT$ TO 2
EQU DT_ABORTEDIT$ TO 3
EQU CRLF$ TO \0D0A\
EQU TAB$ TO \09\
EQU COL$PROB_CAT TO 1 ;* Used in .SERV_INFO
EQU COL$PROB_CAT_DESC TO 2
EQU COL$SERV_ID TO 3
EQU COL$SERV_ID_DESC TO 4
EQU COL$SCHED TO 5
EQU COL$ITEM_TYPE TO 6
EQU COL$ITEM_ID TO 7
EQU COL$ITEM_RI_NO TO 8
EQU COL$MFR_PART_NO TO 9
EQU COL$REV TO 10
EQU COL$SERIAL_NO TO 11
EQU COL$RI_NO TO 1 ;* Used in .REM_RI_NO and .INST_RI_NO
EQU COL$RI_SERIAL TO 2
EQU COL$RI_TYPE TO 3
EQU COL$RI_PART_NO TO 4
EQU COL$RI_PART_REV TO 5
EQU COL$RI_SERIAL_NO TO 6
EQU COL$RI_DISP TO 7
EQU COL$RI_DISPOSITION TO 8
EQU COL$RI_INST_RL_ID TO 9
EQU COL$INST_DTM TO 10
EQU COL$INST_RIH_KEY TO 11
EQU COL$INST_RHI_KEY TO 7
EQU COL$REM_RHI_KEY TO 9
EQU COL$CURR_RI_NO TO 1 ;* Used in .CURR_REACT_ITEMS
EQU COL$CURR_SERIAL TO 2
EQU COL$CURR_RI_TYPE TO 3
EQU COL$CURR_INST_DTM TO 4
EQU COL$CURR_DESC TO 5
EQU COL$CURR_RL_ID TO 6
LastServCol = COL$ITEM_ID
EQU COL$SIG TO 1
EQU COL$SIG_DTM TO 2
EQU COL$SIG_NOTE TO 3
EQU HIDDEN$ TO 32
EQU SKIPPED$ TO 4100
ErrTitle = 'Error in Reactor_Log'
ErrorMsg = ''
Result = ''
BEGIN CASE
CASE EntID = @WINDOW
BEGIN CASE
CASE Event = 'CREATE' ; GOSUB Create
CASE Event = 'CLEAR' ; GOSUB Clear
CASE Event = 'CLOSE' ; GOSUB Close
CASE Event = 'WRITE' ; GOSUB Write
CASE Event = 'READ' ; GOSUB Read
CASE Event = 'PAGE' ; GOSUB Page
CASE Event = 'VSCROLL' ; GOSUB VScroll
CASE Event = 'DELETE' ; GOSUB Delete
CASE Event[1,3] = 'QBF' ; GOSUB Refresh
END CASE
CASE EntID = @WINDOW:'.LOTO' AND Event = 'CLICK' ; GOSUB LOTOClick
CASE EntID = @WINDOW:'.LO_NA' AND Event = 'CLICK' ; GOSUB Refresh
CASE EntID = @WINDOW:'.LO_REVIEWED' AND Event = 'CLICK' ; GOSUB Refresh
CASE EntID = @WINDOW:'.LU_RL_NO' AND Event = 'CLICK' ; GOSUB LURLNo
CASE EntID = @WINDOW:'.NEW_BUTTON' AND Event = 'CLICK' ; GOSUB New
CASE EntID = @WINDOW:'.TAB' AND Event = 'CLICK' ; GOSUB Page
CASE EntID = @WINDOW:'.ADD_BUTTON' AND Event = 'CLICK' ; GOSUB CopyRemove
CASE EntID = @WINDOW:'.POST_BUTTON' AND Event = 'CLICK' ; GOSUB PostItems
CASE EntID = @WINDOW:'.TECH_SIGN' AND Event = 'CLICK' ; GOSUB TechSign
CASE EntID = @WINDOW:'.REACT_WAFER_CNT' AND Event = 'LOSTFOCUS' ; GOSUB Refresh
CASE EntID = @WINDOW:'.INJ_SETTING' AND Event = 'LOSTFOCUS' ; GOSUB SettingLF
CASE EntID = @WINDOW:'.INJ_SETTING_HIST' AND Event = 'CLICK' ; GOSUB InjHistory
CASE EntID = @WINDOW:'.TEMP_INJ_POST' AND Event = 'CLICK' ; GOSUB InjPost
CASE EntID = @WINDOW:'.PRINT_ROOT_CAUSE' AND Event = 'CLICK' ; GOSUB PrintRootCause
CASE EntID = @WINDOW:'.SERV_INFO'
BEGIN CASE
CASE Event = 'POSCHANGED' ; GOSUB SvcsPC
CASE Event = 'OPTIONS' ; GOSUB SvcsOptions
CASE Event = 'GOTFOCUS' ; GOSUB SvcsGF
CASE Event = 'LOSTFOCUS' ; GOSUB SvcsLF
CASE Event = 'DBLCLK' ; GOSUB SvcsDC
END CASE
CASE EntID = @WINDOW:'.SHIFT_SIG'
BEGIN CASE
CASE Event = 'POSCHANGED' ; GOSUB ShiftSigPC
CASE Event = 'DBLCLK' ; GOSUB ShiftSigDC
END CASE
CASE EntID = @WINDOW:'.REM_RI_NO'
BEGIN CASE
CASE Event = 'DBLCLK' ; GOSUB RemRIDC
CASE Event = 'OPTIONS' ; GOSUB RemOptions
END CASE
CASE EntID = @WINDOW:'.CURR_REACT_ITEMS'
BEGIN CASE
CASE Event = 'DBLCLK' ; GOSUB CurrRIDC
END CASE
CASE 1
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
ErrMsg(ErrorMsg)
END CASE
IF ErrorMsg NE '' THEN
ErrMsg(ErrTitle:@SVM:ErrorMsg)
END
RETURN Result
* * * * * * *
Create:
* * * * * * *
IF NOT(MemberOf(@USER4,'MAINTENANCE')) AND NOT(MemberOf(@USER4,'SUPERVISOR')) THEN
ErrMsg('Please contact the System Administrator if you require access to this window')
Send_Event(@WINDOW,'CLOSE')
RETURN
END
obj_Appwindow('Create',@WINDOW)
Reactor_Log_Events(@Window, 'CREATE')
IF MemberOf(@USER4, 'OI_SUPERUSER') THEN
Set_Property(@WINDOW:'.TEMP_INJ_POST','VISIBLE',1)
END ELSE
Set_Property(@WINDOW:'.TEMP_INJ_POST','VISIBLE',0)
END
Keys = Field( Parm1, '*', 1 )
IF LEN(Keys) THEN
IF INDEX(Keys,@VM,1) THEN
Set_Property(@WINDOW,'QBFLIST',Keys)
END ELSE
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:Keys)
END
END
IF Security_Check( 'Reactor Log', Read$ ) THEN
Set_List_Box_Data( @WINDOW )
END ELSE
Security_Err_Msg( 'Reactor Log', Read$ )
Send_Event(@WINDOW,'CLOSE')
RETURN
END
IF NOT(Security_Check( 'Reactor Log', Edit$ )) THEN
Security_Err_Msg( 'Reactor Log', Edit$ )
END
IF NOT(MemberOf( @USER4, 'MAINTENANCE' )) THEN
Set_Property(@WINDOW:'.SERV_BUTTON_MULTI', 'VISIBLE', 0 )
END
col1Style = Send_Message(@WINDOW:'.SERV_INFO','STYLE_BY_POS',COL$PROB_CAT,0)
col1Style = bitor(col1Style,DTCS_OPTIONSBUTTON$)
col1Style = Send_Message(@WINDOW:'.SERV_INFO','STYLE_BY_POS',COL$PROB_CAT,0,col1Style)
col3Style = Send_Message(@WINDOW:'.SERV_INFO','STYLE_BY_POS',COL$SERV_ID,0)
col3Style = bitor(col3Style,DTCS_OPTIONSBUTTON$)
col3Style = Send_Message(@WINDOW:'.SERV_INFO','STYLE_BY_POS',COL$SERV_ID,0,col3Style)
col8Style = Send_Message(@WINDOW:'.SERV_INFO','STYLE_BY_POS',COL$ITEM_ID,0)
col8Style = bitor(col8Style,DTCS_OPTIONSBUTTON$)
col8Style = Send_Message(@WINDOW:'.SERV_INFO','STYLE_BY_POS',COL$ITEM_ID,0,col8Style)
colStyle = Send_Message(@WINDOW:'.REM_RI_NO','STYLE_BY_POS',COL$RI_DISP,0)
colStyle = bitor(colStyle,DTCS_OPTIONSBUTTON$)
colStyle = Send_Message(@WINDOW:'.REM_RI_NO','STYLE_BY_POS',COL$RI_DISP,0,colStyle)
ReactorType = Get_Property(@WINDOW:'.REACT_TYPE','TEXT')
IF ReactorType = 'EPP' THEN
Set_Property(@Window:'.CHB_WAFERS_REMOVED', 'VISIBLE', False$)
end
RETURN
* * * * * * *
Clear:
* * * * * * *
Page = 1
Send_Event(@WINDOW,'VSCROLL',Page)
Send_Event(@WINDOW,'PAGE',Page)
Reactor_Log_Events(@Window, 'CLEAR')
RETURN
* * * * * * *
Page:
* * * * * * *
Page = Get_Property(@WINDOW:'.TAB', 'VALUE')
Set_Property(@WINDOW,'VPOSITION', Page)
RETURN
* * * * * * *
VScroll:
* * * * * * *
Page = Parm1
Set_Property(@WINDOW:'.TAB','VALUE', Page)
RETURN
* * * * * * *
New:
* * * * * * *
RLId = Get_Property(@WINDOW:'.REACTOR_LOG_NO','DEFPROP')
IF RLId = '' THEN
NextRLId = NextKey('REACTOR_LOG')
obj_Appwindow('LoadFormKeys',@WINDOW:@RM:NextRLId)
END
GOSUB Refresh
RETURN
* * * * * * *
Close:
* * * * * * *
ParentWindow = Get_Property(@WINDOW,'@PARENT')
If ParentWindow = 'REACT_MODE_CHG' Then
Send_Event(ParentWindow:'.CANCEL','CLICK')
END
RETURN
* * * * * * *
Write:
* * * * * * *
RLId = Get_Property(@WINDOW:'.REACTOR_LOG_NO','DEFPROP')
ChangeDt = Get_Property(@WINDOW:'.END_DATE','TEXT')
ChangeTm = Get_Property(@WINDOW:'.END_TIME','TEXT')
ReactHrs = Get_Property(@WINDOW:'.REACT_HRS_START','DEFPROP')
ReactWaferCnt = Get_Property(@WINDOW:'.REACT_WAFER_CNT','DEFPROP')
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
Notes = Get_Property(@WINDOW:'.NOTES','DEFPROP')
IF ChangeDt NE '' AND ChangeTm NE '' THEN
ChangeDTM = ChangeDt:' ':ChangeTm
EnteredBy = @USER4
* Log new Reactor Read if the EndDate and EndTime if this record is newer than the last one logged for the reactor
IF ReactWaferCnt NE '' AND ReactNo NE '0' THEN
thisChangeDTM = ICONV(ChangeDTM,'DT')
LastWfrReadDTM = XLATE('REACTOR',ReactNo,REACTOR_LAST_READ_WFRS_DTM$,'X')
IF thisChangeDTM > LastWfrReadDTM THEN
obj_React_Reads('Create',ReactNo:@RM:EnteredBy:@RM:ChangeDTM:@RM:ReactWaferCnt)
errCode = ''
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
END
* Log Maintenance event in Reactor Event
oREParms = ReactNo:@RM
oREParms := ChangeDTM:@RM
oREParms := 'MTC':@RM
oREParms := EnteredBy:@RM
oREParms := Notes:@RM
oREParms := '':@RM ;* Not a mode change
oREParms := XLATE('REACTOR',ReactNo,'CURR_MODE','X') ;* Curr reactor mode
obj_React_Event('Create',oREParms)
END ;* End of check for ChangeDt and ChangeTm filled in
ROTRCheckStatus = Get_Property(@Window:'.CHECK_BOX_ROTR', 'CHECK')
If ROTRCheckStatus EQ False$ then
// Prompt user whether or not maintenance event is ROTR related
MsgHead = 'ROTR Reminder'
MsgText = 'Is this maintenance ROTR related?'
Response = Msg(@Window,'','YESNO','',MsgHead:@FM:MsgText)
If Response EQ True$ then
Set_Property(@Window:'.CHECK_BOX_ROTR', 'CHECK', True$)
end
end
IOOptions = Get_Property(@Window, 'IOOPTIONS')
IOOptions<6> = True$
Set_Property(@Window, 'IOOPTIONS', IOOptions)
Reactor_Log_Events(@Window, 'WRITE')
Reactor_Log_Events(@Window, 'READ')
Result = 1
RETURN
* * * * * * *
Delete:
* * * * * * *
* Pre-Event called from DELETE event handler on window
IF Security_Check( 'Reactor Log', Delete$ ) THEN
Result = 1
END ELSE
Security_Err_Msg( 'Reactor Log', Delete$ )
Result = 0
END
RETURN
* * * * * * *
Read:
* * * * * * *
* Check for and Set Entry data if null *
EntryID = Get_Property(@WINDOW:'.ENTRY_ID','DEFPROP')
IF EntryID = '' THEN
Set_Property(@WINDOW:'.ENTRY_ID','INVALUE',@USER4)
Set_Property(@WINDOW:'.ENTRY_DATE','DEFPROP',OCONV(Date(),'D4/'))
END
* Check for and Set Start data if null *
IF Get_Property(@WINDOW:'.START_DATE','DEFPROP') = '' THEN
Set_Property(@WINDOW:'.START_DATE','DEFPROP',OCONV(Date(),'D4/'))
Set_Property(@WINDOW:'.START_TIME','DEFPROP',OCONV(Time(),'MTS'))
END
* Check for any pending Reactor PM records *
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
IF RowExists('REACTOR',ReactNo) THEN
TechSig = Get_Property(@WINDOW:'.TECH_SIG','TEXT')
EndDate = Get_Property(@WINDOW:'.END_DATE','TEXT')
IDs = ''
IF ReactNo NE '' AND EndDate = '' THEN
* Check for PM's due
ReactPMIds = ''
Today = Date()
AWeekAndADayFromNow = OCONV(Today + 8, 'D2/' )
Statement = 'SELECT REACTOR_PM WITH COMPLETE_DATE = ""'
Statement := ' AND WITH NEXT_DONE < ':QUOTE( AWeekAndADayFromNow )
Statement := ' AND WITH REACTOR = ':ReactNo
Statement := ' BY NEXT_DONE'
RList( Statement, TARGET_ACTIVELIST$, '', '', '' )
@RN.COUNTER = 0
Done = 0
LOOP
READNEXT ReactPMId ELSE Done = 1
UNTIL Done
ReactPMIds<-1> = ReactPMId
REPEAT
IF ReactPMIds NE '' THEN
Dialog_Box( 'REACTOR_LOG_TODO', @WINDOW, ReactPMIds:CHAR(245):ReactNo)
END
END ;* End of check for ReactNo and no End Date)
END
GOSUB CalcRIHKeys
Reactor_Log_Events(@Window, 'READ')
* * * * * * *
Refresh:
* * * * * * *
LOReviewed = Get_Property(@WINDOW:'.LO_REVIEWED','CHECK')
LONotApp = Get_Property(@WINDOW:'.LO_NA','CHECK')
IF LOReviewed OR LONotApp THEN
Set_Property(@WINDOW:'.TECH_SIGN','ENABLED',1)
END ELSE
Set_Property(@WINDOW:'.TECH_SIGN','ENABLED',0)
END
TechSig = Get_Property(@WINDOW:'.TECH_SIG','DEFPROP')
PostSig = Get_Property(@WINDOW:'.RI_POST_BY','DEFPROP')
IF TechSig NE '' OR PostSig NE '' THEN
Set_Property(@WINDOW:'.REACTOR','ENABLED',0)
END ELSE
Set_Property(@WINDOW:'.REACTOR','ENABLED',1)
END
IF PostSig = '' THEN
RemText = 'Items Being Removed'
InstText = 'Items Being Installed'
ButtonText = 'Post Items'
END ELSE
RemText = 'Items Removed'
InstText = 'Items Installed'
ButtonText = 'Unpost Items'
END
Ctrls = @WINDOW:'.POST_BUTTON':@RM ; Props = 'TEXT':@RM ; Vals = ButtonText:@RM
Ctrls := @WINDOW:'.REMOVE_GROUP':@RM ; Props := 'TEXT':@RM ; Vals := RemText:@RM
Ctrls := @WINDOW:'.INST_GROUP' ; Props := 'TEXT' ; Vals := InstText
Set_Property(Ctrls,Props,Vals)
* Load ReactWfrCntEnd value ***************************************************
ItemArray = Get_Property(@WINDOW:'.SERV_INFO','DEFPROP')
ItemTypes = ICONV(ItemArray<COL$ITEM_TYPE>,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
StartWfrCnt = Get_Property(@WINDOW:'.REACT_WAFER_CNT','DEFPROP')
IF INDEX(ItemTypes,'T',1) THEN
EndWfrCnt = 0 ;* Tube being installed
Set_Property(@WINDOW:'.RESET_REMINDER','VISIBLE',1)
END ELSE
EndWfrCnt = StartWfrCnt ;* No tube change -> no reset
Set_Property(@WINDOW:'.RESET_REMINDER','VISIBLE',0)
END
Set_Property(@WINDOW:'.REACT_WFR_CNT_END','DEFPROP',EndWfrCnt) ;* New tubes start with zero wafers
* QBF buttons
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
END ELSE
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
END
Set_Property(Ctrls,Props,Vals)
* Turn edit table symbolic column backgrounds to green *
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
ETCtrls = ETSymbolics<1>
ETCols = ETSymbolics<2>
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
ETCtrl = ETCtrls<1,I>
ETList = Get_Property(ETCtrl,'LIST')
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
IF ETList<Line,1> NE '' THEN
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
NEXT N
END
NEXT I
NEXT I
* CurrItems Flagged for removal
IF Get_Property(@WINDOW:'.RI_POST_BY','DEFPROP') ='' THEN
RemRINos = Get_Property(@WINDOW:'.REM_RI_NO','ARRAY')<COL$RI_NO>
IF RemRINos NE '' THEN
CurrRINos = Get_Property(@WINDOW:'.CURR_REACT_ITEMS','ARRAY')<COL$CURR_RI_NO>
RemCnt = COUNT(RemRINos,@VM) + (RemRINos NE '')
FOR I = 1 TO RemCnt
RemRINo = RemRINos<1,I>
LOCATE RemRINo IN CurrRINos USING @VM SETTING Pos THEN
FOR N = 1 TO COL$CURR_RL_ID
stat = Send_Message(@WINDOW:'.CURR_REACT_ITEMS','COLOR_BY_POS',N,Pos,YELLOW$)
NEXT N
END
NEXT I
END ;* End of check for RemRINos
END ;* End of check for RI Posted signature
GoSub FillServInfoCalcCols
GoSub ColorRemRiTable
Reactor_Log_Events(@Window, 'OMNIEVENT')
RETURN
* * * * * * *
LURLNo:
* * * * * * *
FocusControl = Parm1
FocusPos = Parm2
RetVal = Dialog_Box('REACTOR_LOG_QUERY',@WINDOW,'')
IF RetVal = '' THEN RETURN
CONVERT @FM TO @VM IN RetVal
TypeOver = ''
TypeOver<PMODE$> = 'K'
TypeOver<PDISPLAY$> = RetVal
RetVal = Popup( @WINDOW , TypeOver , 'REACTOR_LOG_QUERY' )
IF RetVal = '' THEN RETURN
IF INDEX(RetVal,@VM,1) THEN
Set_Property(@WINDOW,'QBFLIST',RetVal)
END ELSE
oaParms = RetVal:@RM:@WINDOW:'.':FocusControl
obj_Appwindow('LUValReturn',oaParms)
END
GOSUB Refresh
RETURN
* * * * * * *
TechSign:
* * * * * * *
Action = Get_Property(@Window:'.TECH_SIGN', 'TEXT')
If Action EQ 'Sign' then
TechSig = Get_Property(@WINDOW:'.TECH_SIG','DEFPROP')
IF TechSig NE '' THEN
ErrMsg('Application Message':@SVM:'This log has already been signed.')
RETURN
END
AtRecord = Get_Property(@WINDOW,'ATRECORD')
ReactNo = AtRecord<REACTOR_LOG_REACTOR$>
wafersRemoved = Get_Property(@Window:'.CHB_WAFERS_REMOVED', 'CHECK')
If wafersRemoved EQ True$ then
RdsKeys = Reactor_Services('GetLoadedRds', ReactNo)
SelectedRdsKeys = ''
Begin Case
Case ((RdsKeys<1> NE '') and (RdsKeys<2> NE ''))
selectedLoadLocks = Dialog_Box("NDW_WAFERS_REMOVED_RDS_PROMPT", @Window)
For each selectedLoadLock in selectedLoadLocks using @VM
For idx = 1 to 2
rdsLoadLockSide = Xlate('RDS', RdsKeys<idx>, RDS_LOAD_LOCK_SIDE$, 'X')
If (rdsLoadLockSide _EQC selectedLoadLock) then
If (SelectedRdsKeys NE '') then SelectedRdsKeys := @VM
SelectedRdsKeys := RdsKeys<idx>
end
Next idx
Next selectedLoadLock
Case RdsKeys<1> NE ''
SelectedRdsKeys = RdsKeys<1>
Case RdsKeys<2> NE ''
SelectedRdsKeys = RdsKeys<2>
End Case
Set_Property(@Window:'.EDL_WAFERS_REMOVED_RDS', 'TEXT', SelectedRdsKeys)
end
PrevOptions = Get_Property(@Window, 'IOOPTIONS')
NewOptions = PrevOptions
NewOptions<6> = True$ ; // Do not clear the form on write
Set_Property(@Window, 'IOOPTIONS', NewOptions)
Send_Event(@Window, 'WRITE')
Set_Property(@Window, 'IOOPTIONS', PrevOptions)
ReactorlogNo = Get_Property(@Window:'.REACTOR_LOG_NO', 'TEXT')
Valid = Dialog_Box('QUOTE_SIG_PWD_ENTRY', @WINDOW, @USER4:@VM:XLATE( 'LSL_USERS', @USER4, LSL_USERS_PASSWORD$, 'X' ) )
If Valid then
SuccessfulSign = Reactor_Log_Services('SignReactorLog', ReactorLogNo, @USER4)
If Not(SuccessfulSign) then
Error_Services('DisplayError')
ActiveRlNicaOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', ReactorLogNo)
ActiveChecklist = (ActiveRlNicaOrderIds NE '')
If ActiveChecklist then
OverrideGroups = 'MAINTENANCE':@VM:'SUPERVISOR'
UserMsg = "Reactor Log PM must be processed in NICA. Override required from a member of "
UserMsg := "the MAINTENANCE or SUPERVISOR groups to bypass NICA."
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Override EQ True$ then
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
ResponseComment = ''
ActiveRlNicaOrderTypes = Xlate('NICA_ORDERS', ActiveRlNicaOrderIds, 'ORDER_TYPE', 'X')
For each ActiveRlNicaOrderId in ActiveRlNicaOrderIds using @VM setting Idx
Nica_Orders_Services('CancelOrder', ActiveRlNicaOrderId)
If ResponseComment NE '' then ResponseComment := ', '
ResponseComment := ActiveRlNicaOrderTypes<0, Idx>
Next ActiveRlNicaOrderId
Override_Log_Services('Create', 'REACTOR_LOG', ReactorLogNo, UserVerification<2>, ResponseComment, 'REACTOR_LOG_PM')
SuccessfulSign = Reactor_Log_Services('SignReactorLog', ReactorLogNo, @USER4)
If Not(SuccessfulSign) then Error_Services('DisplayError')
SRP_List('Release', PmOrderList)
SRP_List('Release', PmTypeList)
end
end
Send_Event(@Window, 'READ')
RETURN
end
Send_Event(@Window, 'READ')
end else
ErrMsg('Application Message':@SVM:'Invalid user password.')
end
end else
// Unsign the reactor log
RLKey = Get_Property(@Window:'.REACTOR_LOG_NO', 'TEXT')
If RLKey NE '' then
Set_Property(@Window, 'SAVEWARN', False$)
Reactor_Log_Services('ClearSignature', RLKey)
If Error_Services('NoError') then
Post_Event(@Window, 'READ')
end else
Error_Services('DisplayError')
end
end
end
RETURN
* * * * * * *
InjPost:
* * * * * * *
* This is a temporary routine hooked to a temporary button for debugging JCH 2/13/2014
AtRecord = Get_Property(@WINDOW,'ATRECORD')
IF AtRecord<REACTOR_LOG_INJ_SETTING$> NE '' THEN
ReactNo = AtRecord<REACTOR_LOG_REACTOR$>
RLId = Get_Property(@WINDOW:'.REACTOR_LOG_NO','DEFPROP')
plParms = 'REACT_STATE':@RM
plParms := ReactNo:@RM
plParms := REACT_STATE_CURR_INJ_RL_ID$:@RM
plParms := RLId:@RM
obj_Post_Log('Create',plParms)
END ;* End of check for Injector Settings entered
Send_Event(@WINDOW,'WRITE')
RETURN
* * * * * * *
SvcsGF:
* * * * * * *
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
IF ReactNo = '' THEN
ErrMsg('Application Message':@SVM:'Reactor No is required')
Set_Property(@WINDOW:'.REACTOR','FOCUS',1)
END
RETURN
* * * * * * *
SvcsPC:
* * * * * * *
GoSub FillServInfoCalcCols
CtrlEntID = 'REACTOR_LOG.SERV_INFO'
PrevSelPos = Get_Property(CtrlEntID,'PREVSELPOS')
PrevCol = PrevSelPos<1>
PrevRow = PrevSelPos<2>
SelPos = Get_Property(CtrlEntID,'SELPOS')
CurCol = SelPos<1>
CurRow = SelPos<2>
ListData = Get_Property(CtrlEntID,'LIST')
ArrayData = Get_Property(CtrlEntID,'DEFPROP')
CurRowData = ListData<CurRow>
* Move Up to non-empty row or first row *
TestRow = CurRowData
CONVERT @VM TO '' IN TestRow
IF TestRow = '' THEN
CurLine = CurRow
LOOP
Col1Val = ListData<CurLine-1,1>
UNTIL Col1Val NE '' OR CurLine = 1
CurLine -=1
REPEAT
Set_Property(CtrlEntId,"SELPOS",1:@FM:CurLine)
END ELSE
BadCol = ''
Mesg = ''
BEGIN CASE
CASE CurCol > COL$PROB_CAT AND CurRowData<1,COL$PROB_CAT> = ''
Mesg = 'Please fill in the Prob Cat column.'
BadCol = COL$PROB_CAT
CASE CurCol > COL$SERV_ID AND CurRowData<1,COL$SERV_ID> = ''
Mesg = 'Please fill in the Serv ID column.'
BadCol = COL$SERV_ID
CASE CurCol > COL$SCHED AND CurRowData<1,COL$SCHED> = ''
Mesg = 'Please fill in the Sched column.'
BadCol = COL$SCHED
END CASE
IF BadCol THEN
Msg('',Mesg)
Set_Property(CtrlEntID,'SELPOS',BadCol:@FM:CurRow)
RETURN
END
END
CurrWindow = CtrlEntID[1,'.']
IF PrevCol = COL$PROB_CAT THEN
ProbCat = CurRowData<1,PrevCol>
If ProbCat = 44 Then ;* Added by dkk 4/8/15
NotesRequired = XLATE('REACT_PROB_CAT',ProbCat,REACT_PROB_CAT_NOTES$,'X')
IF NotesRequired THEN
Notes = Get_Property(@WINDOW:'.NOTES','DEFPROP')
Notes = TRIM(Notes)
IF Notes = '' THEN
MsgInfo = ''
MsgInfo<mtext$> = 'Notes required when #44 - Problem ID not found.'
MsgInfo<micon$> = 'H'
Void = Msg( '', MsgInfo )
Set_Property( @WINDOW:'.NOTES', "FOCUS", 1 )
Post_Event( @WINDOW:'.NOTES', 'GOTFOCUS' )
END
End ;* Added by dkk 4/8/15
END
END
IF PrevCol = COL$SERV_ID THEN
IF CurRowData<1,COL$SERV_ID> NE '' THEN
ReactServsRec = XLATE('REACT_SERVS',CurRowData<1,COL$SERV_ID>,'','X')
InjectorFlag = ReactServsRec<REACT_SERVS_INJECTOR_CHANGE$>
NotesRequired = ReactServsRec<REACT_SERVS_NOTE_REQ$>
IF InjectorFlag THEN
Set_Property(CurrWindow:'.TAB','VALUE',4)
Send_Event(CurrWindow:'.TAB','CLICK')
Set_Property(CurrWindow:'.INJ_SETTING','FOCUS',1)
Set_Property(CurrWindow:'.INJ_SETTING','SELPOS',1:@FM:1)
hTable = Get_Property(CurrWindow:'.INJ_SETTING','HANDLE')
IF NOT(hTable) THEN
ErrMsg('Problem Getting the handle to the INJ_SETTINGS control.')
RETURN
END
void = Send_Message(hTable,DTM_EDITCURCELL$,DT_BEGINEDIT$,0)
RETURN
END
IF NotesRequired THEN
Notes = Get_Property(@WINDOW:'.NOTES','DEFPROP')
Notes = TRIM(Notes)
IF Notes = '' THEN
MsgInfo = ''
MsgInfo<mtext$> = 'Notes required when no Service ID is found.'
MsgInfo<micon$> = 'H'
Void = Msg( '', MsgInfo )
Set_Property( @WINDOW:'.NOTES', "FOCUS", 1 )
Post_Event( @WINDOW:'.NOTES', 'GOTFOCUS' )
END
END
END
END
IF PrevCol = COL$ITEM_ID THEN
CurrWindow = CtrlEntID[1,'.']
IF CurRowData<1,COL$ITEM_TYPE> = 'Tube' THEN
RINo = CurRowData<1,COL$ITEM_RI_NO>
IF RINo NE '' THEN
obj_AppWindow('ViewRelated','REACT_ITEM':@RM:RINo)
Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
END
END ;* End of check for Tube Change
GoSub VerifyReactItems
END
* Skip calculated columns *
IF CurCol = COL$PROB_CAT_DESC THEN
Set_Property(CtrlEntId,'SELPOS',COL$SERV_ID:@FM:CurRow)
END
IF CurCol = COL$SERV_ID_DESC THEN
Set_Property(CtrlEntId,'SELPOS',COL$SCHED:@FM:CurRow)
END
IF CurCol = COL$ITEM_TYPE THEN
Set_Property(CtrlEntId,'SELPOS',COL$ITEM_ID:@FM:CurRow)
END
IF PrevCol = COL$ITEM_ID THEN GOSUB CalcRIHKeys
RETURN
* * * * * * *
SettingLF:
* * * * * * *
RETURN
* * * * * * *
InjHistory:
* * * * * * *
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
IF ReactNo NE '' THEN
TypeOver = ''
TypeOver<PDISPLAY$> = 'WITH INJ_SET_REACT_NO = ':ReactNo:' BY-DSND INJ_SET_DTM'
void = Popup(@WINDOW,TypeOver,'REACT_INJ_SETTINGS')
END
RETURN
* * * * * * *
SvcsOptions:
* * * * * * *
SelPos = Get_Property(@WINDOW:'.SERV_INFO','SELPOS')
CurCol = SelPos<1>
CurRow = SelPos<2>
CurrArray = Get_Property(@WINDOW:'.SERV_INFO','ARRAY')
BEGIN CASE
CASE CurCol = COL$PROB_CAT
ProbCat = Popup(@WINDOW,'','SHOW_REACT_PROB_CAT')
IF ProbCat NE '' THEN
obj_AppWindow('LUValReturn',ProbCat:@RM:@WINDOW:'.SERV_INFO':@RM:SelPos)
END
CASE CurCol = COL$SERV_ID
ReactServ = Popup(@WINDOW,'','SHOW_REACT_SERVS')
IF ReactServ NE '' THEN
obj_AppWindow('LUValReturn',ReactServ:@RM:@WINDOW:'.SERV_INFO':@RM:SelPos)
END
CASE CurCol = COL$ITEM_ID
ItemType = Get_Property(@WINDOW:'.SERV_INFO','DEFPROP',COL$ITEM_TYPE:@FM:CurRow)
IF ItemType NE '' THEN
RetVal = ''
ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
OPEN 'DICT.REACT_ITEM' TO DictReactItem ELSE
ErrMsg('Unable to open DICT.REACT_ITEM')
RETURN
END
SearchString = 'RI_TYPE':@VM:ItemType:@FM
SearchString := 'CURR_STATUS':@VM:'N':@VM:'U':@FM
RIKeys = ''
Option = ''
Flag = ''
Btree.Extract(SearchString,'REACT_ITEM',DictReactItem,RIKeys,Option,Flag)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
TypeOver = ''
TypeOVer<PMODE$> = 'K'
TypeOver<PDISPLAY$> = RIKeys
RetVal = Popup(@WINDOW,TypeOver,'REACT_ITEM')
IF RetVal NE '' THEN
obj_AppWindow('LUValReturn',RetVal:@RM:@WINDOW:'.SERV_INFO':@RM:SelPos)
RIRec = XLATE('REACT_ITEM',RetVal,'','X')
IF RIRec<REACT_ITEM_RI_TYPE$> = 'T' THEN
CardWindow = 'REACT_ITEM'
CardKey = RetVal
DefaultRec = ''
NewCardCtrl = ''
RecalcCtrl = @WINDOW:'.SERV_INFO'
RecalcPos = SelPos
RetCtrl = @WINDOW:'.SERV_INFO'
RetPos = SelPos
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
obj_AppWindow('ViewNewCard',oAParms)
Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
GOSUB Refresh
END
END ;* End of check for null SNReq
END CASE
GOSUB Refresh
RETURN
* * * * * * *
SvcsDC:
* * * * * * *
CurrPos = Get_Property(EntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
CurrList = Get_Property(EntID,'LIST')
BEGIN CASE
CASE CurrCol = COL$ITEM_RI_NO
RINo = CurrList<CurrRow,COL$ITEM_RI_NO>
IF RINo NE '' THEN
obj_AppWindow('ViewRelated','REACT_ITEM':@RM:RINo)
END
END CASE
RETURN
* * * * * * *
ShiftSigPC:
* * * * * * *
CtrlEntID = EntID
PrevSelPos = Get_Property(CtrlEntID,'PREVSELPOS')
PrevCol = PrevSelPos<1>
PrevRow = PrevSelPos<2>
SelPos = Get_Property(CtrlEntID,'SELPOS')
CurCol = SelPos<1>
CurRow = SelPos<2>
ListData = Get_Property(CtrlEntID,'LIST')
ArrayData = Get_Property(CtrlEntID,'DEFPROP')
CurRowData = ListData<CurRow>
* Move Up to non-empty row or first row *
TestRow = CurRowData
CONVERT @VM TO '' IN TestRow
IF TestRow = '' THEN
CurLine = CurRow
LOOP
Col1Val = ListData<CurLine-1,1>
UNTIL Col1Val NE '' OR CurLine = 1
CurLine -=1
REPEAT
Set_Property(CtrlEntId,"SELPOS",1:@FM:CurLine)
END
IF CurRow NE PrevRow THEN
* check last field in prev row
IF ListData<PrevRow,COL$ITEM_TYPE> NE '' THEN
IF ListData<PrevRow,COL$ITEM_ID> = '' THEN
Msg('','Please fill in the Item SN column.')
Set_Property(CtrlEntID,'SELPOS',COL$ITEM_ID:@FM:PrevRow)
END
END
END ;* End of check for row change
RETURN
* * * * * * *
ShiftSigDC:
* * * * * * *
CurrPos = Get_Property(EntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
CurrList = Get_Property(EntID,'LIST')
Note = CurrList<CurrRow,COL$SIG_NOTE>
DialogResult = Dialog_Box("DIALOG_ZOOM",@WINDOW,Note)
IF DialogResult = 'Cancel' THEN RETURN
IF DialogResult NE '' THEN
Set_Property(EntID,'CELLPOS',@USER4,COL$SIG:@FM:CurrRow)
Set_Property(EntID,'CELLPOS',obj_Calendar('CurrDTM'),COL$SIG_DTM:@FM:CurrRow)
Set_Property(EntID,'CELLPOS',DialogResult,COL$SIG_NOTE:@FM:CurrRow)
END
RETURN
* * * * * *
CurrRIDC:
* * * * * *
CurrPos = Get_Property(EntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
CurrList = Get_Property(EntID,'LIST')
BEGIN CASE
CASE CurrCol = COL$CURR_RI_NO
RINo = CurrList<CurrRow,COL$CURR_RI_NO>
IF RINo NE '' THEN
obj_AppWindow('ViewRelated','REACT_ITEM':@RM:RINo)
END
END CASE
RETURN
* * * * * * *
RemOptions:
* * * * * * *
SelPos = Get_Property(@WINDOW:'.REM_RI_NO','SELPOS')
CurCol = SelPos<1>
CurRow = SelPos<2>
CurrArray = Get_Property(@WINDOW:'.REM_RI_NO','ARRAY')
BEGIN CASE
CASE CurCol = COL$RI_DISP
RetVal = Popup(@WINDOW,'','REACT_ITEM_DISP')
IF RetVal NE '' THEN
obj_AppWindow('LUValReturn',RetVal:@RM:@WINDOW:'.REM_RI_NO':@RM:SelPos)
END
END CASE
GOSUB Refresh
RETURN
* * * * * * * *
CalcRIHKeys:
* * * * * * * *
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
PostDTM = Get_Property(@WINDOW:'.POST_DTM','INVALUE')
AtRecord = Get_Property(@WINDOW,'ATRECORD')
RawReactItemIds = AtRecord<REACTOR_LOG_REACT_ITEM_IDS$>
rawCnt = COUNT(RawReactItemIds,@VM) + (RawReactItemIds NE '')
InstRINos = ''
FOR I = 1 TO rawCnt
IF RawReactItemIds<1,I> NE '' THEN
InstRINos<1,-1> = obj_React_Item('Serial_RINo',RawReactItemIds<1,I>)
END
NEXT I
InstRIData = ''
InstRIData<1> = InstRINos
InstRIData<2> = XLATE('REACT_ITEM', InstRINos, 17, 'X')
InstRIData<3> = OConv(XLATE('REACT_ITEM',InstRINos,11,'X'), '[RI_TYPE_CONV]')
InstRIData<4> = XLATE('REACT_ITEM',InstRINos,8,'X')
InstRIData<5> = XLATE('REACT_ITEM',InstRINos,9,'X')
InstRIData<6> = XLATE('REACT_ITEM',InstRINos,10,'X')
InstRIData<7> = XLATE('REACT_ITEM',InstRINos,10,'X')
Set_Property(@Window:'.INST_RI_NO', 'DEFPROP', InstRIData)
GoSub ColorInstRiTable
* Remove Calculation
PostedBy = Get_Property(@WINDOW:'.RI_POST_BY','DEFPROP')
NewRITypes = XLATE('REACT_ITEM',InstRINos,REACT_ITEM_RI_TYPE$,'X')
CurrRIArray = Get_Property(@WINDOW:'.CURR_REACT_ITEMS','ARRAY')
CurrRITypes = CurrRIArray<COL$CURR_RI_TYPE>
CurrRITypes = ICONV(CUrrRITypes,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
nRICnt = COUNT(NewRITypes,@VM) + (NewRITypes NE '')
cRICnt = COUNT(CurrRITypes,@VM) + (CurrRITypes NE '')
RemRINos = ''
RemHistKeys = ''
FOR J = 1 TO nRICnt
NewRIType = NewRITypes<1,J>
FOR K = 1 TO cRICnt
CurrRIType = CurrRITypes<1,K>
IF CurrRIType[1,1] = NewRIType[1,1] THEN
RemNo = CurrRIArray<COL$CURR_RI_NO,K>
RemInstDTM = ICONV(CurrRIArray<COL$CURR_INST_DTM,K>,'DT')
RemHistKey = ReactNo:'*':RemNo:'*':RemInstDTM
LOCATE RemNo IN RemRINos USING @VM SETTING Pos ELSE
RemRINos = INSERT(RemRINos,1,Pos,0,RemNo)
RemHistKeys = INSERT(RemHistKeys,1,Pos,0,RemHistKey)
END
END
NEXT K ;* End of Curr Loop
NEXT J ;* End of New Loop
RemArray = Get_Property(@Window:'.REM_RI_NO', 'ARRAY')
RemArray<1> = RemRINos
RemArray<2> = Xlate('REACT_ITEM', RemRINos, 17, 'X')
RemArray<3> = OConv(Xlate('REACT_ITEM', RemRINos, 11, 'X'), '[RI_TYPE_CONV]')
RemArray<4> = Xlate('REACT_ITEM', RemRINos, 8, 'X')
RemArray<5> = Xlate('REACT_ITEM', RemRINos, 9, 'X')
RemArray<6> = XLATE('REACT_ITEM', RemRINos, 10, 'X')
RemArray<8> = OConv(RemArray<7>, '[CONV_CODE_DESC,REACT_ITEM_DISP]')
RemArray<9> = Xlate('REACT_ITEM_HIST', RemHistKeys, 1, 'X')
KeyList = RemHistKeys
kCnt = COUNT(KeyList,@VM) + (KeyList NE '')
Dtms = ''
FOR I = 1 TO kCnt
Dtms<1,I> = FIELD(KeyList<1,I>,'*',3)
NEXT I
RemArray<10> = OConv(Dtms, 'DT4/^S')
RemArray<11> = RemHistKeys
Set_Property(@Window:'.REM_RI_NO', 'DEFPROP', RemArray)
GoSub ColorRemRiTable
GoSub Refresh
RETURN
* * * * * * *
CopyRemove:
* * * * * * *
RETURN
EntID = @WINDOW:'.CURR_REACT_ITEMS'
CurrRIList = Get_Property(EntID,'LIST')
CurrRISelection = Get_Property(EntID,'SELPOS')
SelectedRows = CurrRISelection<2>
CONVERT @VM TO @FM in SelectedRows
SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '')
IF SelCnt = 0 THEN
ErrMsg('You must select at least one row in order to copy to the Remove list.')
RETURN
END
CopyRINos = 0
CopyRICnt = 0
FOR I = 1 TO SelCnt
IF CurrRIList<SelectedRows<I>,COL$CURR_RI_NO> NE '' THEN
CopyRICnt += 1
CopyRINos<1,CopyRICnt> =CurrRIList<SelectedRows<I>,COL$CURR_RI_NO>
END
NEXT I
Set_Property(EntID,'SELPOS',SlotSelection) ;* Toggle WM_IN select off
RETURN
* * * * * * *
PostItems:
* * * * * * *
RemList = Get_Property(@WINDOW:'.REM_RI_NO','LIST')
CurrWindow = @WINDOW
rlCnt = COUNT(RemList,@FM) + (RemList NE '')
FOR I = 1 TO rlCnt
RINo = RemList<I,COL$RI_NO>
UNTIL RINo = ''
IF RemList<I,COL$RI_DISP> = '' THEN
* RINo without associated Disposition Code entered
ErrMsg('Application Message':@SVM:'Disposition for items being removed has not been completed.')
Set_Property(CurrWindow:'.TAB','VALUE',3)
Send_Event(CurrWindow:'.TAB','CLICK')
Set_Property(CurrWindow:'.REM_RI_NO','FOCUS',1)
Set_Property(CurrWindow:'.REM_RI_NO','SELPOS',COL$RI_DISP:@FM:I)
hTable = Get_Property(CurrWindow:'.REM_RI_NO','HANDLE')
IF NOT(hTable) THEN
ErrMsg('Problem Getting the handle to the REM_RI_NO control.')
RETURN
END
void = Send_Message(hTable,DTM_EDITCURCELL$,DT_BEGINEDIT$,0)
RETURN
END ;* End of check for missing Disposition code on line with RI No
NEXT I
Ctrls = @WINDOW:'.REACTOR_LOG_NO':@RM ; Props = 'DEFPROP':@RM
Ctrls := @WINDOW:'.RI_POST_BY':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.RI_POST_DTM' ; Props := 'DEFPROP'
Vals = Get_Property(Ctrls,Props)
RLNo = Vals[1,@RM]
PostBy = Vals[COL2()+1,@RM]
PostDTM = Vals[COL2()+1,@RM]
Reactor_Log_Events(@WINDOW, 'WRITE')
CurrRLRec = Get_Property (@Window, "ATRECORD")
Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, CurrRLRec, 1, 0, 1)
Set_Property(@Window, 'SAVEWARN', 0)
IF PostBy = '' THEN
obj_Reactor_Log('PostReactItems',RLNo)
END ELSE
obj_Reactor_Log('UnpostReactItems',RLNo)
END
If Error_Services('HasError') then
ErrorMessage = Error_Services('GetMessage')
ErrMsg('Application Message':@SVM:ErrorMessage)
end
obj_Appwindow('LoadFormKeys','REACTOR_LOG':@RM:RLNo)
Send_Event(@Window, 'READ')
RETURN
* * * * * * *
RemRIDC:
* * * * * * *
CurrPos = Get_Property(EntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
CurrList = Get_Property(EntID,'LIST')
BEGIN CASE
CASE CurrCol = COL$RI_NO
RINo = CurrList<CurrRow,COL$RI_NO>
IF RINo NE '' THEN
obj_AppWindow('ViewRelated','REACT_ITEM':@RM:RINo)
END
END CASE
RETURN
* * * * * * *
PrintRootCause:
* * * * * * *
ReactLogNo = Get_Property(@WINDOW:'.REACTOR_LOG_NO','DEFPROP')
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
ServInfo = Get_Property(@WINDOW:'.SERV_INFO','DEFPROP')
InitProbCat = ServInfo<1,1> ;* 1st line, 1st column is Init Prob Cat
Print_RootCause_Analysis(ReactLogNo,ReactNo,InitProbCat)
RETURN
* * * * * * *
LOTOClick:
* * * * * * *
xlApp = OleCreateInstance("excel.Application")
OlePutProperty(XlApp, 'Visible', xlSheetVisible)
IF OleStatus() THEN
GOTO HadError
RETURN
END
xlWorkBooks = OleGetProperty(xlApp, "Workbooks")
IF OleStatus() THEN
GOTO HadError
RETURN
END
xlWkb = OleCallMethod(xlWorkbooks,"Open",Environment_Services('GetUserDataRootPath') : "\Facilities\DeptData\LOTO Procedures\LOTO Master List App.xlsm")
IF OleStatus() THEN
GOTO HadError
RETURN
END
xdummy = OleCallMethod(xlWkb, "RunAutoMacros", xlAutoOpen )
IF OleStatus() THEN
GOTO HadError
RETURN
END
Set_Property(@WINDOW:'.LO_REVIEWED','CHECK',1)
GOSUB Refresh
RETURN
* * * * * * *
HadError:
* * * * * * *
status = OleStatus()
IF Status THEN
ErrMsg('OLE Error Code ':Status)
END
xlChart = ''
Charts = ''
range = ''
xlSht = ''
xlWkb=''
xlWorkBooks = ''
x = OleCallMethod(xlApp, 'Quit')
RETURN
SvcsLF:
GoSub VerifyReactItems
return
VerifyReactItems:
GoSub CalcRIHKeys
SvcsList = Get_Property(@Window:'.SERV_INFO', 'LIST')
Done = False$
BadRow = False$
BadRowMessage = ''
For each Row in SvcsList using @FM setting RowPos
ReactItem = Row<0, COL$ITEM_ID>
ServiceItem = Row<0, COL$SERV_ID>
ServiceItemType = XLATE('REACT_SERVS', ServiceItem, REACT_SERVS_GRAPHITE_OR_TUBE$, 'X')
If ReactItem NE '' then
If RowExists('REACT_ITEM', ReactItem) EQ False$ then
Msg(@Window, '', 'OK', '', 'Invalid React Item':@FM:'React Item ':ReactItem:' does not exist!')
BadRow = RowPos
end else
RIRec = Database_Services('ReadDataRow', 'REACT_ITEM', ReactItem)
RIType = RIRec<REACT_ITEM_RI_TYPE$>
TypeMatch = (RIType EQ ServiceItemType) OR ServiceItemType EQ ''
Retired = RIRec<REACT_ITEM_RETIRE_DT$> NE ''
If Retired then
BadRowMessage := 'Invalid React Item':@FM:'React Item ':ReactItem:' is retired' : CRLF$
BadRow = RowPos
end
If Not(TypeMatch) then
BadRowMessage := 'Invalid React Item':@FM:'React Item ':ReactItem:' is the incorrect type' : CRLF$
BadRow = RowPos
end
If BadRow NE False$ then
Msg(@Window, '', 'OK', '', BadRowMessage)
BadRow = RowPos
end
end
end
Until Done
Next Row
If BadRow then
SvcsList<BadRow, COL$ITEM_ID> = ''
Set_Property(@Window:'.SERV_INFO', 'LIST', SvcsList)
end
return
FillServInfoCalcCols:
ServInfo = Get_Property(@Window:'.SERV_INFO', 'ARRAY')
CatIds = ServInfo<COL$PROB_CAT>
ServIds = ServInfo<COL$SERV_ID>
ReactItemIds = ServInfo<COL$ITEM_ID>
CatDescs = Xlate('REACT_PROB_CAT', CatIds , REACT_PROB_CAT_REACTOR_PROBLEM_CATEGORY$, 'X')
ServDescs = Xlate('REACT_SERVS', ServIds, REACT_SERVS_DESCRIPTION$, 'X')
convert @fm to @vm in ServDescs
ServItemTypes = OConv(Xlate('REACT_SERVS', ServIds, REACT_SERVS_REACT_ITEM_TYPE$, 'X'), '[CONV_CODE_DESC,REACT_ITEM_TYPE]')
RINos = obj_React_Item('Serial_RINo', ReactItemIds)
MfrPartNos = Xlate('REACT_ITEM', RINos, REACT_ITEM_MFR_PART_NO$, 'X')
Revs = Xlate('REACT_ITEM', RINos, REACT_ITEM_MFR_PART_NO_REV$, 'X')
SerialNos = Xlate('REACT_ITEM', RINos, REACT_ITEM_SERIAL_NO$, 'X')
ServInfo<COL$PROB_CAT_DESC> = CatDescs
ServInfo<COL$SERV_ID_DESC> = ServDescs
ServInfo<COL$ITEM_TYPE> = ServItemTypes
ServInfo<COL$ITEM_RI_NO> = RINos
ServInfo<COL$MFR_PART_NO> = MfrPartNos
ServInfo<COL$REV> = Revs
ServInfo<COL$SERIAL_NO> = SerialNos
Set_Property(@Window:'.SERV_INFO', 'ARRAY', ServInfo)
For each CatId in CatIds using @VM setting vPos
If CatId NE '' then
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$PROB_CAT_DESC, vPos ,GREEN$)
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$SERV_ID_DESC, vPos ,GREEN$)
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$ITEM_TYPE, vPos ,GREEN$)
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$ITEM_RI_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$MFR_PART_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$REV, vPos ,GREEN$)
stat = Send_Message(@Window:'.SERV_INFO', 'COLOR_BY_POS', COL$SERIAL_NO, vPos ,GREEN$)
end
Next CatId
return
ColorInstRiTable:
InstRiArray = Get_Property(@Window:'.INST_RI_NO', 'ARRAY')
InstRiKeys = InstRiArray<1>
If InstRiKeys NE '' then
For each InstRiKey in InstRiKeys using @VM setting vPos
If InstRiKey NE '' then
stat = Send_Message(@Window:'.INST_RI_NO', 'COLOR_BY_POS', COL$RI_SERIAL, vPos ,GREEN$)
stat = Send_Message(@Window:'.INST_RI_NO', 'COLOR_BY_POS', COL$RI_TYPE, vPos ,GREEN$)
stat = Send_Message(@Window:'.INST_RI_NO', 'COLOR_BY_POS', COL$RI_PART_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.INST_RI_NO', 'COLOR_BY_POS', COL$RI_PART_REV, vPos ,GREEN$)
stat = Send_Message(@Window:'.INST_RI_NO', 'COLOR_BY_POS', COL$RI_SERIAL_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.INST_RI_NO', 'COLOR_BY_POS', COL$RI_DISP, vPos ,GREEN$)
end
Next InstRiKey
end
return
ColorRemRiTable:
RemRiArray = Get_Property(@Window:'.REM_RI_NO', 'ARRAY')
RemRihKeys = RemRiArray<11>
If RemRihKeys NE '' then
For each RemRihKey in RemRihKeys using @VM setting vPos
If RemRihKey NE '' then
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_SERIAL, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_TYPE, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_PART_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_PART_REV, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_SERIAL_NO, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_DISPOSITION, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$RI_INST_RL_ID, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$INST_DTM, vPos ,GREEN$)
stat = Send_Message(@Window:'.REM_RI_NO', 'COLOR_BY_POS', COL$INST_RIH_KEY, vPos ,GREEN$)
end
Next RemRihKey
end
return