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 MsgInfo = '' MsgInfo = -2 MsgInfo = 'BNYC' MsgInfo = -2 MsgInfo = '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_Services('CompleteNonToolPM', CurrPMId , @User4, Datetime()) If Error_Services('NoError') then MsgInfo = '' MsgInfo = -2 MsgInfo = 'BO' MsgInfo = -2 MsgInfo = 'Task marked as complete!' Msg(@Window, MsgInfo) GoSub GetKeys end else MsgInfo = '' MsgInfo = -2 MsgInfo = 'BO' MsgInfo = -2 MsgInfo = Error_Services('GetMessage') Msg(@Window, MsgInfo) GoSub GetKeys end end else MsgInfo = '' MsgInfo = -2 MsgInfo = 'BO' MsgInfo = -2 MsgInfo = '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 PMSID = RowData<1,COL$PM_ID> PMSRec = Database_Services('ReadDataRow', 'PM_SPEC', PMSID) CurrPMId = PMSRec 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 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 CurrPMRecord = Database_Services('ReadDataRow', 'PM', CurrPMKey) CurrPMDesc = PMSpecRecord CurrPMLastPM = OConv(PMSpecRecord, 'DT') //Sched Calculation CurrPMSchedDT = CurrPMRecord CurrPMSchedTM = CurrPMRecord 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 = PMKey TableData = CurrPMDesc TableData = CurrPMLastPM TableData = EarlyStarts TableData = SchedStarts TableData = 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