open-insight/LSL2/STPROC/WO_MAST_SCHED_COMM.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

262 lines
8.5 KiB
Plaintext

function wo_mast_sched_comm(Branch, CurParam, CaseSens )
declare function set_property, fieldcount, get_property, msg, dialog_box
declare function editcell
declare function send_message, utility, key_sort, start_window, entid, repository
declare subroutine end_dialog
$INSERT MSG_EQUATES
$INSERT POPUP_EQUATES
$INSERT LOGICAL
$INSERT WO_LOG_EQU
$INSERT WO_STEP_EQU
equ Yellow$ to 65535
equ White$ to 16777215
ReturnVar = 0
Branches = 'PREV,NEXT,CANCEL,CLEARPOS,SET_WO_SCHEDULED'
convert ',' to @fm in Branches
locate Branch in Branches using @fm setting Bpos then
on Bpos gosub PREV, NEXT, CANCEL, CLEARPOS, SET_WO_SCHEDULED
end else
Void = msg( '', 'Invalid Branch ':Bpos:' passed to wo_mast_sched_comm' )
end
return ReturnVar
*============================================================================*
PREV:
*DEBUG
* CurParam = the string the user entered to search for
* LastPos is Column:@fm:Row of the last found string
SchedInfo = get_property( 'WO_MAST_SCHED.SCHED_INFO', 'ARRAY' )
LastPos = get_property( 'WO_MAST_SCHED', '@LastPos' )
if LastPos else
LastPos = fieldcount( SchedInfo, @fm ):@fm:get_property( 'WO_MAST_SCHED.REACTOR_CNT', 'TEXT' )+1
end
Col = LastPos<1>
Row = LastPos<2>
SchedInfo = get_property( 'WO_MAST_SCHED.SCHED_INFO', 'ARRAY' )
* we know they are searching back so only search on LastPos backward
SchedInfo = field( SchedInfo, @fm, 1, Col ) ;* start with one and get up to cur column
if Row-1 = 0 then
TColData = ''
end else
TColData = field( SchedInfo<Col>, @vm, 1, Row-1 )
end
SchedInfo<Col> = TColData
Found = false$
for i = Col to 1 step -1
ThisColumn = SchedInfo<i>
if CaseSens else
convert @lower_case to @upper_case in ThisColumn
convert @lower_case to @upper_case in CurParam
* because count is case sensitive yuchhhhhhhhhhhhhhhhhhh!!!!
end
CurParamCnt = count( ThisColumn, CurParam )
if CurParamcnt then
if CaseSens then
Fpos = index( ThisColumn, CurParam, CurParamCnt )
end else
Fpos = indexc( ThisColumn, CurParam, CurParamCnt )
end
if Fpos then
TColumn = ThisColumn[1,Fpos]
RowFound = fieldcount( TColumn, @vm )
LastPos = i:@fm:RowFound
Void = set_property( 'WO_MAST_SCHED', '@LastPos', LastPos )
Void = set_property( 'WO_MAST_SCHED.SCHED_INFO', 'SELPOS', LastPos )
Void = send_message( 'WO_MAST_SCHED.SCHED_INFO', 'COLOR_BY_POS', Col, Row, White$ )
Void = send_message( 'WO_MAST_SCHED.SCHED_INFO', 'COLOR_BY_POS', i, RowFound, Yellow$ )
Found = true$
end
end
until Found
next i
if Found else
MsgInfo = ''
MsgInfo<micon$> = '!'
MsgInfo<mtext$> = quote(CurParam):' not found...'
Void = msg( '', MsgInfo )
*Void = set_property( 'WO_MAST_SCHED', '@LastPos', '' )
end
return
*============================================================================*
NEXT:
*debug
* CurParam = the string the user entered to search for
* LastPos is Column:@fm:Row of the last found string
LastPos = get_property( 'WO_MAST_SCHED', '@LastPos' )
if LastPos else
LastPos = 1:@fm:0
end
Col = LastPos<1>
Row = LastPos<2>
SchedInfo = get_property( 'WO_MAST_SCHED.SCHED_INFO', 'ARRAY' )
* we know they are searching forward so only search on LastPos forward
SchedInfo = field( SchedInfo, @fm, Col, 99999 )
BegFields = Col - 1
if BegFields then
SchedInfo = str( @fm, BegFields ):SchedInfo
end
TColData = field( SchedInfo<Col>, @vm, Row+1, 999 )
BegValues = Row
if BegValues then
TColData = str( @vm, BegValues ):TColData
SchedInfo<Col> = TColData
end
Found = false$
CCnt = fieldcount( SchedInfo, @fm )
for i = Col to CCnt
ThisColumn = SchedInfo<i>
if CaseSens then
Fpos = index( ThisColumn, CurParam, 1 )
end else
Fpos = indexc( ThisColumn, CurParam, 1 )
end
if Fpos then
TColumn = ThisColumn[1,Fpos]
RowFound = fieldcount( TColumn, @vm )
LastPos = i:@fm:RowFound
Void = set_property( 'WO_MAST_SCHED', '@LastPos', LastPos )
Void = set_property( 'WO_MAST_SCHED.SCHED_INFO', 'SELPOS', LastPos )
Void = send_message( 'WO_MAST_SCHED.SCHED_INFO', 'COLOR_BY_POS', Col, Row, White$ )
Void = send_message( 'WO_MAST_SCHED.SCHED_INFO', 'COLOR_BY_POS', i, RowFound, Yellow$ )
Found = true$
end
until Found
next i
if Found else
MsgInfo = ''
MsgInfo<micon$> = '!'
MsgInfo<mtext$> = quote(CurParam):' not found...'
Void = msg( '', MsgInfo )
*Void = set_property( 'WO_MAST_SCHED', '@LastPos', '' )
end
return
*============================================================================*
CANCEL:
LastPos = get_property( 'WO_MAST_SCHED', '@LastPos' )
if LastPos then
Col = LastPos<1>
Row = LastPos<2>
Void = send_message( 'WO_MAST_SCHED.SCHED_INFO', 'COLOR_BY_POS', Col, Row, White$ )
end
Void = set_property( 'WO_MAST_SCHED', '@LastPos', '' )
end_dialog( @window, '' )
return
*============================================================================*
CLEARPOS:
LastPos = get_property( 'WO_MAST_SCHED', '@LastPos' )
if LastPos then
Col = LastPos<1>
Row = LastPos<2>
Void = send_message( 'WO_MAST_SCHED.SCHED_INFO', 'COLOR_BY_POS', Col, Row, White$ )
end
Void = set_property( 'WO_MAST_SCHED', '@LastPos', '' )
return
*============================================================================*
SET_WO_SCHEDULED:
SchedArray = get_property( @window:'.SCHED_INFO', 'ARRAY' )
WOsToUpdate = ''
Cols = fieldcount( SchedArray, @fm )
Rows = fieldcount( SchedArray<1>, @vm )
for Col = 1 to Cols
for Row = 1 to Rows
Reactor = Row
ThisCol = SchedArray<Col,Row>
TWOs = iconv( ThisCol, '[WO_VALID,1]' )
* PASSING A 1 TO PREVENT ERROR MESSAGES
convert ';' to @fm in TWOs
Wcnt = fieldcount( TWOs, @fm )
for W = 1 to Wcnt
ThisWo = TWOs<W>
IF INDEX(ThisWo,'.',1) THEN
WOStepKey = ThisWo
END ELSE
WOStepKey = ThisWo:'.1'
END
LOCATE WOStepKey IN WOsToUpdate<1> USING @VM SETTING Fpos ELSE
WOsToUpdate = INSERT(WOsToUpdate,1,Fpos,0,WOStepKey)
WOsToUpdate = INSERT(WOsToUpdate,2,Fpos,0,Reactor)
END
NEXT W
NEXT Row
NEXT Col
WOStepKeys = WOsToUpdate<1>
CONVERT '.' TO '*' IN WOStepKeys
WOsToUpdate<1> = WOStepKeys
SchedStatus = XLATE( 'WO_Step', WOsToUpdate<1>, WO_STEP_SCHEDULED$, 'X' )
Scnt = FIELDCOUNT( WOsToUpdate<1>, @VM )
OPEN 'WO_STEP' TO WOStepTable ELSE
Void = msg( '', 'Unable to open WO_STEP...' )
return 0
END
IF Scnt > 2 THEN
Def = ''
Def<MCAPTION$> = 'Scheduling Work Orders...'
Def<MTYPE$> = 'G'
Def<MEXTENT$> = Scnt
Def<MTEXTWIDTH$> = 600
MsgUp = Msg(@WINDOW,Def)
END ELSE
MsgUp = ''
END
LockErrs = ''
FOR I = 1 TO Scnt
ThisWoLog = WOsToUpdate<1,I>
ReactNo = WOsToUpdate<2,I>
IF MsgUp NE '' THEN
Msg(@WINDOW, MsgUp, I, MSGINSTUPDATE$)
END
ThisSchedStat = SchedStatus<1,I>
IF ( ThisSchedStat = true$ ) ELSE
LOCK WOStepTable, ThisWoLog THEN
READ WOStepRec FROM WOStepTable,ThisWoLog THEN
WOStepRec<WO_STEP_SCHEDULED$> = 1
CurrDate = OCONV(Date(),'D4/')
CurrTime = OCONV(Time(),'MTH')
WOStepRec<WO_STEP_SCHED_DTM$> = ICONV(CurrDate:' ':CurrTime,'DTM')
WRITE WOStepRec ON WOStepTable,ThisWoLog ELSE
Void = msg( '', 'Unable to open WO_STEP...' )
RETURN 0
END
END
UNLOCK WOStepTable,ThisWoLog ELSE
Void = msg( '', 'Unable to unlock WO_STEP ':ThisWoLog )
RETURN 0
END
END ELSE
LockErrs<-1> = ThisWoLog
END
END
NEXT I
IF MsgUp NE '' THEN Msg(@WINDOW,MsgUp)
if ( LockErrs <> '' ) then
swap @fm with ', ' in LockErrs
MsgInfo = ''
Tvar = 'The following WO(s) ':LockErrs:' could not be set to scheduled, due to them being '
Tvar:= 'in use. You will have to manuall set them to scheduled or try at a later time.'
MsgInfo<mtext$> = Tvar
MsgInfo<micon$> = '!'
Void = msg( '', MsgInfo )
end
return
*============================================================================*