added LSL2 stored procedures
This commit is contained in:
681
LSL2/STPROC/WO_DAILY_SCHED_COMM.txt
Normal file
681
LSL2/STPROC/WO_DAILY_SCHED_COMM.txt
Normal file
@ -0,0 +1,681 @@
|
||||
function wo_daily_sched_comm(Branch, CurParam)
|
||||
declare function Set_Property, fieldcount, Get_Property, msg, dialog_box, Security_Check
|
||||
declare function send_message, utility, key_sort, Start_Window, entid, repository
|
||||
declare FUNCTION relational_call, MemberOf
|
||||
declare SUBROUTINE extract_si_keys, End_Dialog, make.list, security_err_msg, Set_Property
|
||||
|
||||
$insert msg_equates
|
||||
$insert lsl_users_equ
|
||||
$insert rds_equ
|
||||
$insert security_rights_equ
|
||||
$insert logical
|
||||
$insert popup_equates
|
||||
$insert react_mode_equ
|
||||
|
||||
equ Blue$ TO 16711680
|
||||
equ Red$ TO 255
|
||||
equ Green$ TO 65280
|
||||
equ Yellow$ TO 65535
|
||||
equ White$ TO 16777215
|
||||
equ Black$ TO 1
|
||||
equ Gray$ TO 12632256
|
||||
equ BoxStart$ TO 8 ;* this is critical it is the position in the
|
||||
|
||||
* wo_daily_sched1-8 records where the box arrays start; IF the structure
|
||||
* changes then this will need to also
|
||||
|
||||
ForceModeChange = false$ ;* flag set to true when changing work order as to stamp
|
||||
ReturnVar = 0
|
||||
|
||||
Branches = 'WO_GOT_FOCUS,WO_LOST_FOCUS,FORM_CREATE,FORM_SAVE,FORM_CANCEL,CALL_WINDOW,REFRESH,OPTIONS,REACT_MODE'
|
||||
CONVERT ',' TO @FM in Branches
|
||||
|
||||
LOCATE Branch in Branches using @FM setting Bpos then
|
||||
on Bpos GOSUB WO_GOT_FOCUS, WO_LOST_FOCUS, FORM_CREATE, FORM_SAVE, FORM_CANCEL, CALL_WINDOW, REFRESH, OPTIONS, REACT_MODE
|
||||
END ELSE
|
||||
void = msg( '', 'Invalid Branch ':Bpos:' passed to wo_daily_sched_comm' )
|
||||
END
|
||||
|
||||
RETURN ReturnVar
|
||||
|
||||
|
||||
* * * * * * *
|
||||
WO_GOT_FOCUS:
|
||||
* * * * * * *
|
||||
|
||||
* CurParam is the current control name
|
||||
|
||||
OrigWoVal = Get_Property( CurParam, 'TEXT' )
|
||||
|
||||
Set_Property( @WINDOW, '@OrigWoVal', OrigWoVal )
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
WO_LOST_FOCUS:
|
||||
* * * * * * *
|
||||
|
||||
* CurParam is the current control name
|
||||
HoldParam = CurParam
|
||||
NewWoVal = Get_Property( CurParam, 'TEXT' )
|
||||
OrigWoVal = Get_Property( @WINDOW, '@OrigWoVal' )
|
||||
IF NewWoVal <> OrigWoVal then
|
||||
* NOW FORCE THEM TO CHANGE THE STATUS OR APPLY SETTING THIS WORK ORDER
|
||||
SWAP 'RW' with 'RM' in CurParam
|
||||
ForceModeChange = true$
|
||||
Mode = ''
|
||||
GOSUB react_mode
|
||||
IF Mode = 'CANCEL' then
|
||||
* could not get a lock so someone else is changing the mode with a
|
||||
* different work order than the one we have changed to
|
||||
* so do not change the work order
|
||||
void = Set_Property( HoldParam, 'TEXT', OrigWoVal )
|
||||
END ELSE
|
||||
* check to see IF we are running this wo anywhere else
|
||||
* and warn user - as to not forget to finish a wo before
|
||||
* starting a new one
|
||||
IF OrigWoVal then
|
||||
GOSUB CheckWo
|
||||
END
|
||||
CurEditTable = HoldParam
|
||||
CurWoVal = NewWoVal
|
||||
SWAP '.RW' with '.R' in CurEditTable
|
||||
GOSUB PrepWo
|
||||
GOSUB RecalcWo
|
||||
END
|
||||
END
|
||||
RETURN
|
||||
|
||||
* * * * * * *
|
||||
RecalcWo:
|
||||
* * * * * * *
|
||||
|
||||
|
||||
* called from this code only no external branch
|
||||
CurRMode = CurEditTable
|
||||
TRMode = field( CurRMode, '.', 2 )
|
||||
SWAP 'R' with 'RM' in TRMode
|
||||
CurRMode = field( CurRMode, '.', 1 ):'.':TRMode
|
||||
RNum = field( CurRMode, '.', 2 )
|
||||
SWAP 'RM' with '' in RNum
|
||||
RMId = 'REACT_MODE':RNum
|
||||
Mode = XLATE( 'CONFIG', RMId, Mode$, 'X' )[1,4]
|
||||
IF Mode then
|
||||
SWAP 'Down' with 'Down2' in Mode ;* down 2 is bmp for down no material
|
||||
SWAP 'N/A ' with 'NONA' in Mode ;* nona is for not_applicable reactor not in use
|
||||
DosBmp = 'BMPS\':Mode:'.BMP'
|
||||
void = Set_Property( CurRMode, 'BITMAP', DosBmp )
|
||||
END
|
||||
IF num( WoToRecalc ) then
|
||||
Stat = utility( 'CURSOR', 'H' )
|
||||
OPEN 'RDS' TO RdsTable else
|
||||
void = msg( '', 'Unable TO OPEN RDS...' )
|
||||
RETURN 0
|
||||
END
|
||||
extract_si_keys( 'RDS', 'WO', WoToRecalc, RdsToProc )
|
||||
IF RdsToProc then
|
||||
CurArray = Get_Property( CurEditTable, 'ARRAY' )
|
||||
for i = 1 TO 80
|
||||
void = send_message( CurEditTable, 'COLOR_BY_POS', i, 1, Black$ )
|
||||
NEXT I
|
||||
CONVERT @VM TO @FM in RdsToProc
|
||||
RdsToProc = key_sort( RdsToProc, 'RDS', 'RUN_ORDER_NUM', 1 )
|
||||
Tcnt = fieldcount( RdsToProc, @FM )
|
||||
IF SeperateLayer then
|
||||
IF SeperateLayer = 1 then
|
||||
* eliminate all layers except one
|
||||
Trds = RdsToProc
|
||||
RdsToProc = ''
|
||||
FOR I = 1 TO Tcnt
|
||||
IF INDEX( Trds<i>, '.', 1 ) else
|
||||
RdsToProc := Trds<i>:@FM
|
||||
END
|
||||
NEXT I
|
||||
RdsToProc[-1,1] = ''
|
||||
END ELSE
|
||||
* have to extract only the .layers
|
||||
Trds = RdsToProc
|
||||
RdsToProc = ''
|
||||
FOR I = 1 TO Tcnt
|
||||
IF INDEX( Trds<i>, '.':SeperateLayer, 1 ) then
|
||||
RdsToProc := Trds<i>:@FM
|
||||
END
|
||||
NEXT I
|
||||
RdsToProc[-1,1] = ''
|
||||
END
|
||||
END
|
||||
RdsToProc = field( RdsToProc, @FM, 1, 80 ) ;* only room for 80
|
||||
Rcnt = fieldcount( RdsToProc, @FM )
|
||||
|
||||
FOR I = 1 TO Rcnt
|
||||
READ RdsRec FROM RdsTable, RdsToProc<i> else
|
||||
void = msg( '', 'Unable to READ ':RdsToProc<i>:' FROM RDS...' )
|
||||
RETURN 0
|
||||
END
|
||||
*
|
||||
IF CurArray<i,2> = 0 then
|
||||
* they do not want to run this box on this reactor
|
||||
GrayBox = true$
|
||||
END ELSE
|
||||
* it is either one on blank meaning show this box
|
||||
GrayBox = false$
|
||||
END
|
||||
DateIn = RdsRec<rds_date_in$>
|
||||
DateOut = RdsRec<rds_date_out$>
|
||||
Reactor = RdsRec<rds_reactor$>
|
||||
|
||||
BEGIN CASE
|
||||
CASE ( GrayBox ) and ( Reactor = CurReactor )
|
||||
* this is a gray box meaning run on another reactor but it
|
||||
* ran here so show blue
|
||||
ColorToUse = Blue$
|
||||
CASE GrayBox
|
||||
ColorToUse = Gray$
|
||||
CASE ( DateIn = '' ) and ( DateOut = '' )
|
||||
ColorToUse = White$
|
||||
CASE Reactor <> CurReactor
|
||||
ColorToUse = Blue$
|
||||
CASE ( DateIn <> '' ) and ( DateOut = '' )
|
||||
ColorToUse = Green$
|
||||
CASE ( DateIn <> '' ) and ( DateOut <> '' )
|
||||
ColorToUse = Red$
|
||||
END CASE
|
||||
*
|
||||
void = send_message( CurEditTable, 'COLOR_BY_POS', i, 1, ColorToUse )
|
||||
NEXT I
|
||||
END
|
||||
Stat = utility( 'CURSOR', 'A' )
|
||||
END
|
||||
RETURN
|
||||
|
||||
* * * * * * *
|
||||
FORM_CREATE:
|
||||
* * * * * * *
|
||||
|
||||
* curparam is the window number 1,2,3,4,5
|
||||
* field one of the config "WO_DAILY_SCHED"1-9999 will have an @VM delim on
|
||||
* controls to load using fields 2-999
|
||||
|
||||
DailySchedName = 'WO_DAILY_SCHED':CurParam
|
||||
|
||||
OPEN 'CONFIG' TO ConfigTable else
|
||||
void = msg( '', 'Unable to OPEN CONFIG table' )
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN 0
|
||||
END
|
||||
|
||||
*UserRec = XLATE( 'LSL_USERS', @user4, '', 'X' )
|
||||
*Groups = UserRec<lsl_users_groups$>
|
||||
*LOCATE 'DATA_ENTRY' in Groups using @VM setting Fpos then
|
||||
|
||||
IF MemberOf( @user4, 'SUPERVISOR' ) or MemberOf( @user4, 'DATA_ENTRY' ) then
|
||||
lock ConfigTable, DailySchedName then
|
||||
GOSUB DoRead
|
||||
END ELSE
|
||||
MsgInfo = ''
|
||||
MsgInfo<mtext$> = DailySchedName:' is in use somewhere else...You will not be allowed to change anything.'
|
||||
MsgInfo<micon$> = '!'
|
||||
void = msg( '', MsgInfo )
|
||||
void = Set_Property( @WINDOW:'.SAVE', 'ENABLED', 0 )
|
||||
void = Set_Property( @WINDOW:'.CANCEL', 'TEXT', 'OK' )
|
||||
void = Set_Property( @WINDOW:'.SAVE2', 'ENABLED', 0 )
|
||||
void = Set_Property( @WINDOW:'.CANCEL2', 'TEXT', 'OK' )
|
||||
GOSUB DoRead
|
||||
FOR I = 1 TO Ccnt
|
||||
ThisControl = @WINDOW:'.':ControlsToLoad<1,i>
|
||||
void = Set_Property( ThisControl, 'ENABLED', 0 )
|
||||
NEXT I
|
||||
END
|
||||
END ELSE
|
||||
void = Set_Property( @WINDOW:'.SAVE', 'ENABLED', 0 )
|
||||
void = Set_Property( @WINDOW:'.CANCEL', 'TEXT', 'OK' )
|
||||
void = Set_Property( @WINDOW:'.SAVE2', 'ENABLED', 0 )
|
||||
void = Set_Property( @WINDOW:'.CANCEL2', 'TEXT', 'OK' )
|
||||
GOSUB DoRead
|
||||
FOR I = 1 TO Ccnt
|
||||
ThisControl = @WINDOW:'.':ControlsToLoad<1,i>
|
||||
void = Set_Property( ThisControl, 'ENABLED', 0 )
|
||||
NEXT I
|
||||
END
|
||||
RETURN 0
|
||||
|
||||
|
||||
* * * * * * *
|
||||
DoRead:
|
||||
* * * * * * *
|
||||
|
||||
* called from this code only no external branch
|
||||
READ DailySched FROM ConfigTable, DailySchedName then
|
||||
IF DailySched then
|
||||
ControlsToLoad = DailySched<1>
|
||||
ValsToLoad = field( DailySched, @FM, 2, 999 )
|
||||
Ccnt = fieldcount( ControlsToLoad, @VM )
|
||||
FOR j = 1 TO Ccnt
|
||||
ControlToLoad = @WINDOW:'.':ControlsToLoad<1,j>
|
||||
CurWoVal = ValsToLoad<j>
|
||||
CurEditTable = ControlToLoad
|
||||
SWAP '.RW' with '.R' in CurEditTable
|
||||
void = Set_Property( ControlToLoad, 'TEXT', CurWoVal )
|
||||
BoxPos = j+6
|
||||
BoxData = ValsToLoad<BoxPos>
|
||||
ArrayData = ''
|
||||
FOR k = 1 TO 80
|
||||
ArrayData<k,1> = k
|
||||
ArrayData<k,2> = BoxData<1,k>
|
||||
next k
|
||||
void = Set_Property( CurEditTable, 'ARRAY', ArrayData )
|
||||
GOSUB PrepWo
|
||||
GOSUB RecalcWo
|
||||
next j
|
||||
END
|
||||
END ELSE
|
||||
Ccnt = 0
|
||||
END
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
FORM_SAVE:
|
||||
* * * * * * *
|
||||
|
||||
* curparam is the window number 1,2,3,4,5
|
||||
* field one of the config "WO_DAILY_SCHED"1-9999 will have an @VM delim on
|
||||
* controls to save in fields 2-999
|
||||
|
||||
OPEN 'CONFIG' TO ConfigTable else
|
||||
void = msg( '', 'Unable to OPEN CONFIG table' )
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN 0
|
||||
END
|
||||
|
||||
DailySchedName = 'WO_DAILY_SCHED':CurParam
|
||||
ControlsToSave = XLATE( 'CONFIG', DailySchedName, 1, 'X' )
|
||||
DailySchedRec = ''
|
||||
|
||||
Ccnt = fieldcount( ControlsToSave, @VM )
|
||||
FOR I = 1 TO Ccnt
|
||||
ControlToSave = @WINDOW:'.':ControlsToSave<1,i>
|
||||
DailySchedRec<i> = Get_Property( ControlToSave, 'TEXT' )
|
||||
NEXT I
|
||||
DailySchedRec = ControlsToSave:@FM:DailySchedRec
|
||||
SWAP 'RW' with 'R' in ControlsToSave
|
||||
BoxPos = BoxStart$
|
||||
|
||||
FOR I = 1 TO Ccnt
|
||||
CurArray = Get_Property( @WINDOW:'.':ControlsToSave<1,i>, 'ARRAY' )
|
||||
FieldOut = ''
|
||||
FOR j = 1 TO 80
|
||||
FieldOut<1,j> = CurArray<j,2>
|
||||
next j
|
||||
DailySchedRec<BoxPos> = FieldOut
|
||||
BoxPos += 1
|
||||
NEXT I
|
||||
write DailySchedRec on ConfigTable, DailySchedName else
|
||||
void = msg( '', 'Unable to write ':DailySchedName:' in CONFIG table' )
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN 0
|
||||
END
|
||||
unlock ConfigTable, DailySchedName else
|
||||
void = msg( '', 'Unable to unlock ':DailySchedName:' in CONFIG table' )
|
||||
END
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
FORM_CANCEL:
|
||||
* * * * * * *
|
||||
|
||||
* curparam is the window number 1,2,3,4,5
|
||||
*UserRec = XLATE( 'LSL_USERS', @user4, '', 'X' )
|
||||
*Groups = UserRec<lsl_users_groups$>
|
||||
*LOCATE 'DATA_ENTRY' in Groups using @VM setting Fpos then
|
||||
|
||||
IF MemberOf( @user4, 'SUPERVISOR' ) or MemberOf( @user4, 'DATA_ENTRY' ) then
|
||||
DailySchedName = 'WO_DAILY_SCHED':CurParam
|
||||
OPEN 'CONFIG' TO ConfigTable else
|
||||
void = msg( '', 'Unable to OPEN CONFIG table' )
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN 0
|
||||
END
|
||||
unlock ConfigTable, DailySchedName else
|
||||
*void = msg( '', 'Unable to unlock CONFIG ':DailySchedName )
|
||||
* removed error message - as to allow DATA_ENTRY to view
|
||||
* only is alREADy locked
|
||||
END
|
||||
END
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
CALL_WINDOW:
|
||||
* * * * * * *
|
||||
|
||||
*CurParam is the window to call
|
||||
If Get_Property('NDW_MAIN', 'VISIBLE') then
|
||||
AppMain = 'NDW_MAIN'
|
||||
end else
|
||||
AppMain = 'LSL_MAIN2'
|
||||
end
|
||||
void = Start_Window( CurParam, AppMain, '*CENTER', '', '' )
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
PrepWo:
|
||||
* * * * * * *
|
||||
|
||||
* called internally
|
||||
|
||||
CurReactor = field( CurEditTable, '.', 2 )
|
||||
CONVERT @UPPER_CASE TO '' in CurReactor
|
||||
CONVERT @LOWER_CASE TO '' in CurReactor
|
||||
SeperateLayer = ''
|
||||
LayPos = INDEX( CurWoVal, 'LAY', 1 )
|
||||
IF LayPos then
|
||||
BegPos = LayPos +3 ;* for length of lay
|
||||
SeperateLayer = CurWoVal[BegPos,'F>']
|
||||
SWAP '<LAY':SeperateLayer:'>' with '' in CurWoVal
|
||||
END
|
||||
SWAP '52nd' with '' in CurWoVal
|
||||
CONVERT @UPPER_CASE TO '' in CurWoVal
|
||||
CONVERT @LOWER_CASE TO '' in CurWoVal
|
||||
CONVERT " `~!@#$%^&*()_+-=\][{}|';:/?.>,<" TO '' in CurWoVal
|
||||
CONVERT '"' TO '' in CurWoVal
|
||||
WoToRecalc = CurWoVal
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
REFRESH:
|
||||
* * * * * * *
|
||||
|
||||
* curparam is the window number 1,2,3,4,5
|
||||
DailySchedName = 'WO_DAILY_SCHED':CurParam
|
||||
OPEN 'CONFIG' TO ConfigTable else
|
||||
void = msg( '', 'Unable TO OPEN CONFIG table' )
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN 0
|
||||
END
|
||||
IF Get_Property( @WINDOW:'.SAVE', 'ENABLED' ) then
|
||||
* is a DATA_ENTRY and has the lock so reload from window values
|
||||
READ DailySched FROM ConfigTable, DailySchedName then
|
||||
IF DailySched then ;* READ controls from config but get vals from window
|
||||
ControlsToLoad = DailySched<1>
|
||||
Ccnt = fieldcount( ControlsToLoad, @VM )
|
||||
FOR j = 1 TO Ccnt
|
||||
ControlToLoad = @WINDOW:'.':ControlsToLoad<1,j>
|
||||
CurWoVal = Get_Property( ControlToLoad, 'TEXT' )
|
||||
CurEditTable = ControlToLoad
|
||||
SWAP '.RW' with '.R' in CurEditTable
|
||||
GOSUB PrepWo
|
||||
GOSUB RecalcWo
|
||||
NEXT I
|
||||
END
|
||||
END ELSE
|
||||
Ccnt = 0
|
||||
END
|
||||
END ELSE
|
||||
GOSUB DoRead
|
||||
* is not a DATA_ENTRY so READ FROM disk as it may have changed
|
||||
END
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
OPTIONS:
|
||||
* * * * * * *
|
||||
|
||||
* CurParam will pass the control name of the edittable
|
||||
* and all this code needs to do is add a W to the R
|
||||
|
||||
HoldEdTable = CurParam
|
||||
Reactor = CurParam
|
||||
Reactor = field(CurParam,'.', 2 )
|
||||
|
||||
CONVERT @UPPER_CASE TO '' in Reactor
|
||||
CONVERT @LOWER_CASE TO '' in Reactor
|
||||
|
||||
SWAP '.R' with '.RW' in CurParam
|
||||
PopupId = entid( @appid<1>, 'POPUP', '', 'DAILY_SCHED_OPTS' )
|
||||
OverRide = ''
|
||||
|
||||
IF MemberOf( @user4, 'SUPERVISOR' ) or MemberOf( @user4, 'DATA_ENTRY' ) THEN
|
||||
* add option to choose boxes if the save button is enabled meaning they have the lock
|
||||
IF Get_Property( @WINDOW:'.SAVE', 'ENABLED' ) THEN
|
||||
Display = 'Quote':@tm:'QUOTE':@VM:'PSN':@tm:'PSN':@VM:'Recipe':@tm:'RECIPE':@VM:'RunData Sheet':@tm:'RDS':@VM:'Work Order':@tm:'WO'
|
||||
Display:= @VM:'Choose Boxes':@tm:'CHOOSE_BOXES'
|
||||
* When the popup daily_sched_opts changes the above 2 lines need changing
|
||||
OverRide<Pdisplay$> = Display
|
||||
END
|
||||
END
|
||||
ChosenOpt = repository( 'EXECUTE', PopupId, @WINDOW, OverRide )
|
||||
CurWoVal = Get_Property( CurParam, 'TEXT' )
|
||||
HoldWoVal = CurWoVal
|
||||
SeperateLayer = ''
|
||||
LayPos = INDEX( CurWoVal, 'LAY', 1 )
|
||||
IF LayPos then
|
||||
BegPos = LayPos +3 ;* for length of lay
|
||||
SeperateLayer = CurWoVal[BegPos,'F>']
|
||||
SWAP '<LAY':SeperateLayer:'>' with '' in CurWoVal
|
||||
END
|
||||
SWAP '52nd' with '' in CurWoVal
|
||||
|
||||
CONVERT @UPPER_CASE TO '' IN CurWoVal
|
||||
CONVERT @LOWER_CASE TO '' IN CurWoVal
|
||||
CONVERT " `~!@#$%^&*()_+-=\][{}|';:/?.>,<" TO '' IN CurWoVal
|
||||
CONVERT '"' TO '' IN CurWoVal
|
||||
|
||||
RdsKeys = ''
|
||||
BEGIN CASE
|
||||
CASE ChosenOpt = 'QUOTE'
|
||||
IF Security_Check( 'Quote', Read$ ) THEN
|
||||
GOSUB GetRdsKeys
|
||||
QuoteKey = XLATE( 'RDS', RdsKeys<1,1>, rds_quote_no$, 'X' )
|
||||
void = Start_Window( 'QUOTE', @WINDOW, QuoteKey:'*CENTER', '', '' )
|
||||
END ELSE
|
||||
security_err_msg( 'Quote', Read$ )
|
||||
END
|
||||
|
||||
CASE ChosenOpt = 'PSN'
|
||||
IF Security_Check( 'Prod Spec', Read$ ) THEN
|
||||
GOSUB GetRdsKeys
|
||||
PSNId = XLATE( 'RDS', RdsKeys<1,1>, rds_prod_spec_id$, 'X' )
|
||||
void = Start_Window( 'PROD_SPEC', @WINDOW, PSNId:'*CENTER', '', '' )
|
||||
END ELSE
|
||||
security_err_msg( 'Prod Spec', Read$ )
|
||||
END
|
||||
|
||||
CASE ChosenOpt = 'RECIPE'
|
||||
IF Security_Check( 'Recipe', Read$ ) THEN
|
||||
GOSUB GetRdsKeys
|
||||
RecipeKey = XLATE( 'RDS', RdsKeys<1,1>, rds_recipe_no$, 'X' )
|
||||
void = Start_Window( 'RECIPE', @WINDOW, RecipeKey:'*CENTER', '', '' )
|
||||
END ELSE
|
||||
security_err_msg( 'Recipe', Read$ )
|
||||
END
|
||||
|
||||
CASE ChosenOpt = 'RDS'
|
||||
IF Security_Check( 'RDS', Read$ ) THEN
|
||||
Keys = relational_call( 'WO_LOG', 'RDS_KEYS', CurWoVal, 'RDS_QUERY', 'RDS', 'CUST_NAME':@FM:'WO':@FM:'RUN_ORDER_NUM' )
|
||||
IF Keys then
|
||||
SWAP 'NoKeys' with '' in Keys
|
||||
ParamToPass = Keys
|
||||
void = Start_Window( 'RDS', @WINDOW, Keys:'*CENTER', '', '' )
|
||||
END
|
||||
END ELSE
|
||||
security_err_msg( 'RDS', Read$ )
|
||||
END
|
||||
|
||||
CASE ChosenOpt = 'WO'
|
||||
IF Security_Check( 'WO Log', Read$ ) then
|
||||
void = Start_Window( 'WO_LOG', @WINDOW, CurWoVal:'*CENTER', '', '' )
|
||||
END ELSE
|
||||
security_err_msg( 'WO Log', Read$ )
|
||||
END
|
||||
|
||||
CASE ChosenOpt = 'CHOOSE_BOXES'
|
||||
extract_si_keys( 'RDS', 'WO', CurWoVal, RdsIds )
|
||||
IF RdsIds then
|
||||
PopId = entid( @appid<1>, 'POPUP', '', 'RDS_QUERY' )
|
||||
OverRide = ''
|
||||
OverRide<ptitle$> = 'Choose the RDS Run Orders for Reactor ':Reactor
|
||||
CONVERT @VM TO @FM in RdsIds
|
||||
make.list( 0, RdsIds, '', '' )
|
||||
ChosenKeys = repository( "EXECUTE", PopId, @WINDOW, OverRide )
|
||||
IF ChosenKeys then
|
||||
Ccnt = fieldcount( ChosenKeys, @VM )
|
||||
CurArray = Get_Property( HoldEdTable, 'ARRAY' )
|
||||
FOR I = 1 TO 80
|
||||
* to gray boxes
|
||||
CurArray<i,2> = 0
|
||||
NEXT I
|
||||
RunNums = XLATE( 'RDS', ChosenKeys, 'RUN_ORDER_NUM', 'X' )
|
||||
FOR I = 1 TO Ccnt
|
||||
* ungray selected boxes
|
||||
CurArray<RunNums<1,i>,2> = 1
|
||||
NEXT I
|
||||
void = Set_Property( HoldEdTable, 'ARRAY', CurArray )
|
||||
CurEditTable = HoldEdTable
|
||||
CurWoVal = HoldWoVal
|
||||
GOSUB PrepWo
|
||||
GOSUB RecalcWo
|
||||
END
|
||||
END ELSE
|
||||
MsgInfo = ''
|
||||
MsgInfo<mtext$> = 'Error extracting keys...'
|
||||
MsgInfo<micon$> = 'H'
|
||||
void = msg( '', MsgInfo )
|
||||
RETURN 0
|
||||
END
|
||||
END CASE
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
GetRdsKeys:
|
||||
* * * * * * *
|
||||
|
||||
* called internally only
|
||||
|
||||
Extract_SI_keys( 'RDS', 'WO', CurWoVal, RdsKeys )
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
CheckWo:
|
||||
* * * * * * *
|
||||
|
||||
Window = @WINDOW
|
||||
|
||||
CONVERT @UPPER_CASE TO '' in Window
|
||||
CONVERT @LOWER_CASE TO '' in Window
|
||||
CONVERT '_' TO '' in Window
|
||||
|
||||
IF Window else
|
||||
Window = 1
|
||||
END
|
||||
|
||||
* get current window control names FROM config but load from window
|
||||
|
||||
CurControl = CurParam
|
||||
Controls = XLATE( 'CONFIG', 'WO_DAILY_SCHED':Window, 1, 'X' )
|
||||
CCnt = fieldcount( Controls, @VM )
|
||||
ErrMsg = ''
|
||||
FOR I = 1 TO CCnt
|
||||
TControl = @WINDOW:'.':Controls<1,i>
|
||||
IF TControl = CurControl else
|
||||
IF Get_Property( TControl, 'TEXT' ) = OrigWoVal then
|
||||
* present a message to user
|
||||
Treactor = Controls<1,i>
|
||||
CONVERT @UPPER_CASE TO '' in Treactor
|
||||
CONVERT @LOWER_CASE TO '' in Treactor
|
||||
ErrMsg := 'Reactor ':Treactor:', '
|
||||
END
|
||||
END
|
||||
NEXT I
|
||||
|
||||
* now look through all other windows using disk values
|
||||
|
||||
OPEN 'CONFIG' TO ConfigTable else
|
||||
void = msg( '', 'Unable to OPEN CONFIG table' )
|
||||
End_Dialog( @WINDOW, '' )
|
||||
RETURN 0
|
||||
END
|
||||
|
||||
i = 1
|
||||
loop
|
||||
ThisDailyWoId = 'WO_DAILY_SCHED':i
|
||||
IF i = Window then
|
||||
DailyWoRec = 'SkipThisMother'
|
||||
END ELSE
|
||||
READ DailyWoRec FROM ConfigTable, ThisDailyWoId else
|
||||
DailyWoRec = ''
|
||||
END
|
||||
IF DailyWoRec then
|
||||
FOR j = 2 TO 6 ;* for the positions of actual wo# in the config record
|
||||
IF INDEX( DailyWoRec<j>, OrigWoVal, 1 ) then
|
||||
* present a message to user
|
||||
Treactor = DailyWoRec<1,j-1>
|
||||
CONVERT @UPPER_CASE TO '' in Treactor
|
||||
CONVERT @LOWER_CASE TO '' in Treactor
|
||||
ErrMsg := 'Reactor ':Treactor:', '
|
||||
END
|
||||
next j
|
||||
END
|
||||
END
|
||||
until DailyWoRec = ''
|
||||
i += 1
|
||||
repeat
|
||||
ErrMsg[-2,2] = ''
|
||||
IF ErrMsg then
|
||||
CONVERT ',' TO @FM in ErrMsg
|
||||
LastOne = fieldcount( ErrMsg, @FM )
|
||||
IF LastOne > 1 then
|
||||
TWo = ErrMsg<LastOne>
|
||||
TWo = ' and ':TWo
|
||||
ErrMsg<LastOne> = TWo
|
||||
CONVERT @FM TO ',' in ErrMsg
|
||||
END
|
||||
MsgInfo = ''
|
||||
MsgInfo<micon$> = '!'
|
||||
MsgInfo<mtext$> = quote( OrigWoVal ):' is currently running on ':ErrMsg:'...Please verify that all boxes for Work Order ':quote( OrigWoVal ):' are assigned to reactors before starting a new Work Order.'
|
||||
void = msg( '', MsgInfo )
|
||||
END
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
REACT_MODE:
|
||||
* * * * * * *
|
||||
|
||||
* CurParam is the current control name
|
||||
|
||||
Tparam = CurParam
|
||||
WoControl = Tparam
|
||||
SWAP 'RM' with 'RW' in WoControl
|
||||
CurWo = Get_Property( WoControl, 'TEXT' )
|
||||
SeperateLayer = ''
|
||||
LayPos = INDEX( CurWo, 'LAY', 1 )
|
||||
IF LayPos then
|
||||
BegPos = LayPos +3 ;* for length of lay
|
||||
SeperateLayer = CurWo[BegPos,'F>']
|
||||
SWAP '<LAY':SeperateLayer:'>' with '' in CurWo
|
||||
END
|
||||
SWAP '52nd' with '' in CurWo
|
||||
CONVERT @UPPER_CASE TO '' in CurWo
|
||||
CONVERT @LOWER_CASE TO '' in CurWo
|
||||
CONVERT " `~!@#$%^&*()_+-=\][{}|';:/?.>,<" TO '' in CurWo
|
||||
CONVERT '"' TO '' in CurWo
|
||||
Tparam = field( Tparam, '.', 2 )
|
||||
SWAP 'RM' with '' in Tparam
|
||||
*Tparam is the reactor number
|
||||
Mode = dialog_box( 'REACT_MODE_CHG', @WINDOW, Tparam:'*':CurWo:'*':ForceModechange )
|
||||
IF Mode <> 'CANCEL' then
|
||||
SWAP 'Down' with 'Down2' in Mode ;* down 2 is bmp for down no material
|
||||
SWAP 'N/A ' with 'NONA' in Mode ;* nona is for not_applicable reactor not in use
|
||||
DosBmp = 'BMPS\':Mode:'.BMP'
|
||||
void = Set_Property( CurParam, 'BITMAP', DosBmp )
|
||||
END
|
||||
RETURN
|
Reference in New Issue
Block a user