open-insight/LSL2/STPROC/NDW_5S_EVENTS.txt
Stieber Daniel (CSC FI SPS MESLEO) ec70fcc80b Merged PR 16672: updated 5S form and PM History form to fit longer descriptions
updated 5S form and PM History form to fit longer descriptions

Related work items: #110769
2025-05-14 20:57:10 +02:00

408 lines
15 KiB
Plaintext

Compile function NDW_5S_EVENTS(CtrlEntId, Event, @PARAMS)
/***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
permission from Infineon.
Name : NDW_5S_Events
Description : This function acts as a commuter module for all events related to this window.
Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the
application-specific promoted event handler. This makes it possible to add QuickEvents that need to
execute Basic+ logic without having use the Form Designer to make the association, although this is
limited to the events which are currently promoted.
If the form needs to call the commuter module directly then the QuickEvent parameters should be
formatted like this:
'@SELF','@EVENT',['@PARAM1','@PARAMx']
Parameters :
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event
Event [in] -- The event being executed. See the Notes section regarding "PRE" events
Param1-15 [in] -- Additional event parameter holders
EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
EVENT_SETUP insert
History : (Date, Initials, Notes)
05/14/2025 djs Modified edit table properties to fit longer descriptions
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
#window NDW_5S
$Insert EVENT_SETUP
$Insert APP_INSERTS
$Insert PM_SPEC_EQUATES
$Insert PM_EQUATES
$Insert MSG_EQUATES
Declare function Get_Property, Pm_Services, obj_PM_Spec, Database_Services, SRP_Array, SRP_Datetime, Msg, Datetime
Declare function Memberof
Declare subroutine Set_Property, Pm_Services, Start_Window, Obj_Appwindow, PlaceDialog
// Columns in OLE Edit Table
EQU COL$PM_ID TO 1
EQU COL$DESC TO 2
EQU COL$LAST_PM TO 3
EQU COL$EARLY_START TO 4
EQU COL$SCHED_START TO 5
EQU COL$LATE_START TO 6
EQU COL$ACTION TO 7
// Form colors
EQU RED$FIVES TO '5924072'
EQU GREEN$FIVES TO '7596927'
EQU YELLOW$FIVES TO '9109501'
EQU ORANGE$FIVES TO '4168946'
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
If Event EQ 'OLE' then
Transfer Event to OIEvent
Transfer Param1 to Event
Transfer Param2 to Param1
Transfer Param3 to Param2
Transfer Param4 to Param3
Transfer Param5 to Param4
Transfer Param6 to Param5
Transfer Param7 to Param6
Transfer Param8 to Param7
end
GoToEvent Event for CtrlEntId else
// Event not implemented
end
Return EventFlow or 1
//-----------------------------------------------------------------------------
// EVENT HANDLERS
//-----------------------------------------------------------------------------
Event WINDOW.CREATE(CreateParam)
SelectedArea = ''
Begin Case
Case CreateParam EQ 'CLEANROOM'
SelectedArea = 'CLEANROOM'
Case CreateParam EQ 'MAINTENANCE'
SelectedArea = 'MAINTENANCE'
Case CreateParam EQ 'SHIPPING/RECEIVING'
SelectedArea = 'SHIPPING/RECEIVING'
Case Otherwise$
SelectedArea = 'CLEANROOM'
End Case
Set_Property(@Window : '.CMB_AREA', 'TEXT', SelectedArea)
GoSub Setup_OLE_Controls
GoSub SetupForm
GoSub GetKeys
stat = Set_Property(@WINDOW,'TIMER',10000:@FM:0)
PlaceDialog(-2, -2)
End Event
Event CHK_ARCHIVED.CLICK()
GoSub GetKeys
end event
Event CMB_AREA.CHANGED(NewData)
GoSub GetKeys
end event
Event EDT_5S_TABLE.OnClick(Cell, Point, Button, Shift, Ctrl)
EdtTableCtrl = @Window : '.EDT_5S_TABLE'
RowClicked = Field(Cell, ';' , 2)
SelArray = 1 : @FM : RowClicked
Set_Property(@Window: '.EDT_SEL_ROW', "TEXT", RowClicked)
Set_Property(@Window : '.PUB_VIEW_SELECTED', 'ENABLED', 1)
end event
Event EDT_5S_TABLE.OnButtonClick(Cell, Point, Button, Shift, Ctrl)
EdtTableCtrl = @Window : '.EDT_5S_TABLE'
TableData = Get_Property(EdtTableCtrl, "OLE.ARRAY")
TableData = SRP_Array("Rotate", TableData)
ColClicked = Field(Cell, ';' , 1)
Begin Case
Case ColClicked EQ COL$ACTION
//Clicked Complete Button
RowNoClicked = Field(Cell, ';' , 2)
RowData = TableData<RowNoClicked>
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<MTYPE$> = 'BNYC'
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = 'Are you sure you wish to mark this 5S task as complete?'
Verify = Msg(@Window, MsgInfo)
If Verify EQ True$ then
PMSID = RowData<1,COL$PM_ID>
PMSRec = Database_Services('ReadDataRow', 'PM_SPEC', PMSID)
CurrPMId = PMSRec<PM_SPEC_PM_KEYS$, 1>
Pm_Services('CompleteNonToolPM', CurrPMId , @User4, Datetime())
If Error_Services('NoError') then
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<MTYPE$> = 'BO'
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = 'Task marked as complete!'
Msg(@Window, MsgInfo)
GoSub GetKeys
end else
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<MTYPE$> = 'BO'
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = Error_Services('GetMessage')
Msg(@Window, MsgInfo)
GoSub GetKeys
end
end else
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<MTYPE$> = 'BO'
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = 'Task NOT marked as complete!'
Msg(@Window, MsgInfo)
GoSub GetKeys
end
Case ColClicked EQ COL$PM_ID
Null
Case Otherwise$
Null
End Case
end event
Event EDT_5S_TABLE.OnDblClick(Cell, Point, Button, Shift, Ctrl)
EdtTableCtrl = @Window : '.EDT_5S_TABLE'
TableData = Get_Property(EdtTableCtrl, "OLE.ARRAY")
TableData = SRP_Array("Rotate", TableData)
ColClicked = Field(Cell, ';' , 1)
Begin Case
Case ColClicked EQ COL$PM_ID
//Clicked PM ID column, bring up PM history for this PM ID
RowNoClicked = Field(Cell, ';' , 2)
RowData = TableData<RowNoClicked>
PMSID = RowData<1,COL$PM_ID>
PMSRec = Database_Services('ReadDataRow', 'PM_SPEC', PMSID)
CurrPMId = PMSRec<PM_SPEC_PM_KEYS$, 1>
Start_Window('NDW_PM_HISTORY', @Window, PMSID)
Case Otherwise$
Null
End Case
end event
Event PUB_ADD_NEW_PM_SPEC.CLICK()
Start_Window('PM_SPEC', @Window, '')
end event
Event PUB_VIEW_SELECTED.CLICK()
EdtTableCtrl = @Window : '.EDT_5S_TABLE'
RowSelected = Get_Property(@Window : '.EDT_SEL_ROW', 'TEXT')
TableData = Get_Property(EdtTableCtrl, "OLE.ARRAY")
TableData = SRP_Array("Rotate", TableData)
SelectedPmsKey = TableData<RowSelected, 1>
Set_Property(@Window : '.EDT_SEL_ROW', 'TEXT', ''); *Clear out selected row.
Set_Property(@Window : '.PUB_VIEW_SELECTED', 'ENABLED', 0)
if SelectedPmsKey NE '' then
obj_AppWindow('ViewRelated','PM_SPEC':@RM:SelectedPmsKey)
end
end event
Event WINDOW.TIMER()
GoSub GetKeys
end event
//-----------------------------------------------------------------------------
// INTERNAL GOSUBS
//-----------------------------------------------------------------------------
GetKeys:
ShowArchived = Get_Property(@Window : '.CHK_ARCHIVED', 'CHECK')
SelectedArea = Get_Property(@Window : '.CMB_AREA', 'TEXT')
FiveSPMKeys = Pm_Services('Get5SPMs', ShowArchived, SelectedArea)
FormatData:
TableData = ''
For each PMKey in FiveSPMKeys using @VM setting tPos
//Record for the PM Specification
PMSpecRecord = Database_Services('ReadDataRow', 'PM_SPEC', PMKey)
//Record for the currently scheduled PM for the specificed PM Spec.
CurrPMKey = PMSpecRecord<PM_SPEC_PM_KEYS$>
CurrPMRecord = Database_Services('ReadDataRow', 'PM', CurrPMKey)
CurrPMDesc = PMSpecRecord<PM_SPEC_DESC$>
CurrPMLastPM = OConv(PMSpecRecord<PM_SPEC_LAST_PM_COMP_DTM$>, 'DT')
//Sched Calculation
CurrPMSchedDT = CurrPMRecord<PM_SCHED_DT$>
CurrPMSchedTM = CurrPMRecord<PM_SCHED_TM$>
SchedStarts = obj_PM_Spec('SchedStart',PMKey:@RM:PMSpecRecord)
EarlyStarts = obj_PM_Spec('EarlyStart',PMKey:@RM:PMSpecRecord)
LateStarts = obj_PM_Spec('LateStart',PMKey:@RM:PMSpecRecord)
TableData<tPos, COL$PM_ID> = PMKey
TableData<tPos, COL$DESC> = CurrPMDesc
TableData<tPos, COL$LAST_PM> = CurrPMLastPM
TableData<tPos, COL$EARLY_START> = EarlyStarts
TableData<tPos, COL$SCHED_START> = SchedStarts
TableData<tPos, COL$LATE_START> = LateStarts
Next PMKey
PopulateTable:
EdtTableCtrl = @Window : '.EDT_5S_TABLE'
TableData = SRP_Array("Rotate", TableData)
Set_Property(EdtTableCtrl, "OLE.ARRAY", TableData)
// Set last column in row to a PUB
Set_Property(EdtTableCtrl, "OLE.CellType[7; ALL]", "Push Button")
Set_Property(EdtTableCtrl, "OLE.CellText[7; ALL]", "Click To Complete")
Set_Property(EdtTableCtrl, "OLE.CellImage[7; ALL]", 1)
// Get All Cell Settings
ColumnSettings = Get_Property(EdtTableCtrl, "OLE.CellType[3; ALL]")
ColumnSettings<2,3> = 0; *Turns off data from cell 7 of each row.
Set_Property(EdtTableCtrl, "OLE.CellType[7; ALL]", ColumnSettings)
ColorCodeRows:
// Here we color code all the rows based on whether they're not due, due, or overdue.
TableData = Get_Property(EdtTableCtrl, "OLE.ARRAY")
TableData = SRP_Array('Rotate', TableData)
CurrDTM = SRP_Datetime('Now')
for each DataRow in TableData using @FM setting dPos
EarlyStart = ''
SchedStart = ''
LateStart = ''
PMSpecID = DataRow<1,COL$PM_ID>
Units = XLATE('PM_SPEC', PMSpecID, PM_SPEC_UNITS$, 'X')
Begin Case
Case Units EQ 'D'
EarlyStart = ICONV(DataRow<1, COL$EARLY_START>, 'D')
SchedStart = ICONV(DataRow<1, COL$SCHED_START>, 'D')
LateStart = ICONV(DataRow<1, COL$LATE_START>, 'D')
Case Units EQ 'T'
EarlyStart = ICONV(DataRow<1, COL$EARLY_START>, 'DT')
SchedStart = ICONV(DataRow<1, COL$SCHED_START>, 'DT')
LateStart = ICONV(DataRow<1, COL$LATE_START>, 'DT')
End Case
Begin Case
Case CurrDTM LT EarlyStart
//Not Due Yet
LineColor = GREEN$FIVES
Case CurrDTM GT EarlyStart AND CurrDTM LT SchedStart
//Within the early start window
LineColor = YELLOW$FIVES
Case CurrDTM GT SchedStart AND CurrDTM LT LateStart
//Due
LineColor = ORANGE$FIVES
Case CurrDTM GT LateStart
//Past Due
LineColor = RED$FIVES
Case 1
LineColor = WHITE$
End Case
RowSettings = Get_Property(EdtTableCtrl, "OLE.CellColors[1; ":dPos:"]")
RowSettings<2> = LineColor
Set_Property(EdtTableCtrl, "OLE.CellColors[ALL; ":dPos:"]", RowSettings)
Next DataRow
return
SetupForm:
If NOT(Memberof(@User4, 'SUPERVISOR')) then
Set_Property(@Window : '.PUB_ADD_NEW_PM_SPEC', 'VISIBLE', 0)
Set_Property(@Window : '.PUB_VIEW_SELECTED', 'VISIBLE', 0)
end
Set_Property(@Window : '.PUB_VIEW_SELECTED', 'ENABLED', 0)
return
Setup_OLE_Controls:
EdtTableCtrl = @Window : '.EDT_5S_TABLE'
// Row Selection Settings
RowSelArray = Get_Property(EdtTableCtrl, "OLE.SelectionStyle")
RowSelArray<7> = 'Header'
RowSelArray<8> = True$;*Always show row selection
Set_Property(EdtTableCtrl, "OLE.SelectionStyle", RowSelArray)
Set_Property(EdtTableCtrl, 'OLE.Redraw', False$)
// Set up columns
Set_Property(EdtTableCtrl, "OLE.Dimension", 7);*Define number of columns
HeaderTitles = 'PM ID':@VM:'Desc':@VM:'Last PM':@VM:'Early Start':@VM:'Sched Start':@VM:'Late Start':@VM:'Action'; *Define the column header titles
Set_Property(EdtTableCtrl, "OLE.TitleList", HeaderTitles); *Set the column titles
// Set the column Sizes
Set_Property(EdtTableCtrl, "OLE.HeaderColumn[1]", '':@FM:False$)
ColSize = Get_Property(EdtTableCtrl, "OLE.DataColumn[1]")
// Column 1
ColSize<1> = 45
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$PM_ID:"]", ColSize)
// Column 2
ColSize<1> = 200
ColSize<4> = True$
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DESC:"]", ColSize)
ColSize<4> = False$
// Column 3
ColSize<1> = 110
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$LAST_PM:"]", ColSize)
// Column 4
ColSize<1> = 110
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$EARLY_START:"]", ColSize)
// Column 5
ColSize<1> = 110
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$SCHED_START:"]", ColSize)
//Column 6
ColSize<1> = 110
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$LATE_START:"]", ColSize)
//Column 7
ColSize<1> = 110
Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$ACTION:"]", ColSize)
Set_Property(EdtTableCtrl, 'OLE.Border', 'XP Flat')
Set_Property(EdtTableCtrl, 'OLE.Font', 'Segoe UI' : @SVM : '15')
Set_Property(EdtTableCtrl, "OLE.CellProtection[All; All]", 'RO')
Set_Property(EdtTableCtrl, 'OLE.Redraw', True$)
// Qualify OLE events that we want to intercept
Qualifier = ''
Qualifier<1> = 1
Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
Send_Message(EdtTableCtrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualifier)
Send_Message(EdtTableCtrl, 'QUALIFY_EVENT', 'OLE.OnButtonClick', Qualifier)
Send_Message(EdtTableCtrl, 'QUALIFY_EVENT', 'OLE.OnDblClick', Qualifier)
Send_Message(EdtTableCtrl, 'QUALIFY_EVENT', 'OLE.OnLostFocus', Qualifier)
return