564 lines
22 KiB
Plaintext
564 lines
22 KiB
Plaintext
Function NDW_Scheduler_Test_Events(CtrlEntId, Event, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)
|
|
/***********************************************************************************************************************
|
|
|
|
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_Scheduler_Test_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)
|
|
08/26/2021 djs Created initial commuter module.
|
|
|
|
***********************************************************************************************************************/
|
|
|
|
#pragma precomp SRP_PreCompiler
|
|
#Window NDW_SCHEDULER_TEST
|
|
|
|
$insert APP_INSERTS
|
|
$insert EVENT_SETUP
|
|
|
|
Equ LightGrey$ TO 239 + (239*256) + (239*65536)
|
|
EQU LTORANGE$ TO 255 + (220*256) + (128*65536)
|
|
|
|
Declare function SRP_Array, SRP_JSON, Database_Services
|
|
Declare subroutine SRP_JSON, Database_Services
|
|
|
|
SubclassInfo = Form_Services('FindSubclassControl')
|
|
Subclass = SubclassInfo<1>
|
|
|
|
// 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
|
|
|
|
Return EventFlow else EVENT_CONTINUE$
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Events
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
Event WINDOW.CREATE(CreateParam)
|
|
|
|
Set_Property(@Window, 'VISIBLE', 3)
|
|
|
|
GoSub Setup_OLE_Controls
|
|
|
|
end event
|
|
|
|
|
|
Event WINDOW.CLOSE(CancelFlag)
|
|
|
|
|
|
end event
|
|
|
|
|
|
Event OLE_DATEPICKER.OnSelChange(FirstDate)
|
|
|
|
SelectedDate = Get_Property(CtrlEntId, 'OLE.Selection')
|
|
Set_Property(@Window : '.OLE_SCHEDULE', 'OLE.Date', SelectedDate)
|
|
Send_Event(@Window : '.OLE_SCHEDULE', 'OLE', 'OnDateChange', SelectedDate)
|
|
|
|
end event
|
|
|
|
|
|
Event OLE_PUB_REFRESH_SCHEDULE.OnClick(Point, Button, Shift, Ctrl)
|
|
|
|
// The ShowWaitMessage gosub hides the schedule control and displays the picture contorl with the indicated caption.
|
|
Caption = 'Please wait...refreshing schedule'
|
|
GoSub ShowWaitMessage
|
|
GoSub UpdateAppointmentList
|
|
GoSub HideWaitMessage
|
|
|
|
end event
|
|
|
|
|
|
Event OLE_SUBCLASS.OnOptionClick(CtrlId)
|
|
|
|
Send_Event(CtrlId, 'OPTIONS')
|
|
|
|
end event
|
|
|
|
|
|
Event OLE_SUBCLASS.OnComboClick(CtrlId)
|
|
|
|
Send_Event(CtrlId, 'LOSTFOCUS')
|
|
|
|
end event
|
|
|
|
|
|
Event WINDOW.OMNIEVENT(Message, Param1, Param2, Param3, Param4)
|
|
|
|
Sender = Param1
|
|
If ( (Message EQ 'RefreshSchedule') and (Sender NE @User4) ) then
|
|
Caption = 'Please wait...refreshing schedule'
|
|
GoSub ShowWaitMessage
|
|
GoSub UpdateAppointmentList
|
|
GoSub HideWaitMessage
|
|
end
|
|
|
|
end event
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Internal GoSubs
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
Setup_OLE_Controls:
|
|
|
|
Ctrl = @Window : '.OLE_PICTURE'
|
|
Set_Property(Ctrl, 'OLE.BackgroundColor', 'Vertical(Gradient(LightSteelBlue L=90, LightSteelBlue L=80, 30%), Gradient(LightSteelBlue L=75, LightSteelBlue L=80), Border(LightSteelBlue L=50, LightSteelBlue L=50, LightSteelBlue L=50, LightSteelBlue L=50))')
|
|
Set_Property(Ctrl, 'OLE.Font', SystemTypeface$ : @SVM : 30 : @SVM : 700)
|
|
|
|
// The ShowWaitMessage gosub hides the schedule control and displays the picture contorl with the indicated caption.
|
|
GoSub ShowWaitMessage
|
|
Ctrl = @Window : '.OLE_SCHEDULE'
|
|
|
|
// Setup the inital date range during the 'Create'
|
|
StartDate = Date() - 120
|
|
EndDate = Date() + 120
|
|
DateList = ''
|
|
For Date = StartDate to EndDate
|
|
DateList := Date : @FM
|
|
Next Date
|
|
DateList[-1, 1] = ''
|
|
Set_Property(Ctrl, '@DATE_LIST', DateList)
|
|
Set_Property(Ctrl, 'OLE.Border', 'XP Flat')
|
|
Set_Property(Ctrl, 'OLE.View', 'MultiDayHorz') ; // Landscape mode
|
|
Set_Property(Ctrl, 'OLE.DateHeaderFormat', 'DDDD - mmm DD, YYYY')
|
|
Set_Property(Ctrl, 'OLE.CurrentTimeColor', 'Blue')
|
|
Set_Property(Ctrl, 'OLE.ShowCalendar', False$)
|
|
Set_Property(Ctrl, 'OLE.ShowTree', False$)
|
|
Set_Property(Ctrl, 'OLE.AllowLeadTime', False$)
|
|
Set_Property(Ctrl, 'OLE.AllowTrailTime', False$)
|
|
Set_Property(Ctrl, 'OLE.EnableLeadTrailDisplay', Trail$)
|
|
Set_Property(Ctrl, 'OLE.AppointmentMetrics', 4 : @FM : 4)
|
|
Set_Property(Ctrl, 'OLE.Interval', 60) ; // Number of minutes per interval
|
|
|
|
ZoomPercent = '100%'
|
|
Set_Property(@Window:'.LBL_ZOOM_PERCENT', 'TEXT', ZoomPercent)
|
|
|
|
IntervalSize = 11
|
|
|
|
Set_Property(Ctrl, 'OLE.IntervalSize', IntervalSize) ; // Space (width) for each time increment (in pixels)
|
|
Set_Property(Ctrl, 'OLE.TimeRange', 0 :@FM: 24 :@FM: 4) ; // <3> is hour display increment
|
|
Fonts = ''
|
|
Fonts<1> = 'Segoe UI' : @SVM : '10' ; // Column Hours
|
|
Fonts<2> = 'Segoe UI' : @SVM : '6' ; // Column Minutes
|
|
Fonts<3> = 'Segoe UI' : @SVM : '12' : @SVM : '700' ; // Reactor No
|
|
Fonts<4> = 'Segoe UI' : @SVM : '8' ; // Reactor Meta
|
|
Fonts<5> = 'Segoe UI' : @SVM : '12' : @SVM : '700' ; // Column Date and Day
|
|
Set_Property(Ctrl, 'OLE.ScheduleFonts', Fonts)
|
|
// Setup the initial reactors list. This populates the EntityList variable.
|
|
GoSub GetReactorEntities
|
|
Set_Property(Ctrl, 'OLE.EntityList', EntityList)
|
|
Set_Property(Ctrl, 'OLE.AutoSize', 0)
|
|
Set_Property(Ctrl, 'OLE.EntitySize[All]', 75)
|
|
Set_Property(Ctrl, 'OLE.Date', Date()-1)
|
|
Layout = ''
|
|
Layout<1, 1> = 'APPTDATA'
|
|
Layout<1, 2> = 0 : @SVM : 0 : @SVM : -1 : @SVM : -1
|
|
Layout<1, 3> = 'NAME'
|
|
Layout<1, 4> = ''
|
|
Layout<1, 5> = 'Segoe UI' : @SVM : 9 : @SVM : 700
|
|
Layout<1, 6> = 'Center'
|
|
Layout<1, 7> = 'Center'
|
|
Layout<1, 8> = 0
|
|
Layout<1, 10> = 1
|
|
Layout<2, 1> = 'APPTDATA'
|
|
Layout<2, 2> = 0 : @SVM : 0 : @SVM : -1 : @SVM : -1
|
|
Layout<2, 3> = 'DESC'
|
|
Layout<2, 4> = ''
|
|
Layout<2, 6> = 'Center'
|
|
Layout<2, 7> = 'Bottom'
|
|
Layout<2, 8> = 1
|
|
Layout<2, 10> = 0
|
|
Layout<3, 1> = 'FLAGS'
|
|
Layout<3, 2> = 0 : @SVM : 0 : @SVM : -1 : @SVM : -1
|
|
Layout<3, 3> = 'bmps\scheduler.png'
|
|
Layout<3, 4> = 4 : @SVM : @SVM : 0
|
|
Layout<3, 6> = 'Right'
|
|
Layout<3, 7> = ''
|
|
Layout<3, 8> = ''
|
|
Layout<3, 10> = 0
|
|
Set_Property(Ctrl, 'OLE.Layout', Layout)
|
|
// The GetScheduleAppointments gosub populates the AppointmentList, AppointmentKeys, and AppointmentFlags variables.
|
|
GoSub GetScheduleAppointments
|
|
Set_Property(Ctrl, 'OLE.AppointmentList', AppointmentList)
|
|
// The SetScheduleFlags gosub loops through the AppointmentKeys array and parses the AppointmentFlags
|
|
// array for the ApptFlags property.
|
|
GoSub SetScheduleFlags
|
|
Qualify = ''
|
|
Qualify<1> = 1
|
|
Qualify<4> = 0
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnApptClick', Qualify)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnApptDblClick', Qualify)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnScheduleClick', Qualify)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnContextMenuClick', Qualify)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnApptHover', Qualify)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnScheduleMouseMove', Qualify)
|
|
Set_Property(Ctrl, "OLE.EnableMouseMoveEvent", True$)
|
|
Send_Message(@Window:'.OLE_PUB_ZOOM_IN', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify)
|
|
Send_Message(@Window:'.OLE_PUB_ZOOM_OUT', 'QUALIFY_EVENT', 'OLE.OnClick', Qualify)
|
|
|
|
Qualify<4> = 1
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnDateChange', Qualify)
|
|
Qualify<4> = 0
|
|
GoSub HideWaitMessage
|
|
|
|
Ctrl = @Window : '.OLE_DATEPICKER'
|
|
Set_Property(Ctrl, 'OLE.Border', 'XP Flat')
|
|
Set_Property(Ctrl, 'OLE.Font', 'Segoe UI' : @SVM : '9')
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnSelChange', 1)
|
|
|
|
Ctrl = @Window : '.OLE_SUBCLASS'
|
|
EditLine = @Window : '.EDL_REACTOR_FILTER'
|
|
Set_Property(EditLine, 'TEXT', 'Reactor Type')
|
|
Post_Event(EditLine, 'LOSTFOCUS')
|
|
Handle = Get_Property(EditLine, 'HANDLE')
|
|
Send_Message(Ctrl, 'OLE.Subclass', Handle, EditLine)
|
|
EditLine = @Window : ';EDL_REACTOR_FILTER'
|
|
FilterTypes = 'Reactor Type' : @STM : 'Reactor Assignment' : @STM : 'Wafer Size' : @STM : 'Cleanroom Area'
|
|
Combo = ''
|
|
Combo<1> = 1
|
|
Combo<2, 1> = ''
|
|
Combo<2, 2> = 'L' : @STM : 'DYN'
|
|
Combo<2, 3> = FilterTypes
|
|
Combo<2, 4> = 1
|
|
Combo<2, 5> = 1
|
|
Combo<2, 6> = 0
|
|
Combo<2, 9> = 1
|
|
Combo<2,11> = 0
|
|
Set_Property(Ctrl, 'OLE.Combo[' : EditLine : ']', Combo)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnOptionClick', 1)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnComboClick', 1)
|
|
|
|
EditLine = @Window : '.EDL_WORK_ORDER_SEARCH'
|
|
Handle = Get_Property(EditLine, 'HANDLE')
|
|
Send_Message(Ctrl, 'OLE.Subclass', Handle, EditLine)
|
|
EditLine = @Window : ';EDL_WORK_ORDER_SEARCH'
|
|
ApptIDs = AppointmentArray<2>
|
|
WorkOrders = Xlate('SCHED_DET_NG', ApptIDs, 'WO_NO', 'X')
|
|
Convert @VM to @FM in WorkOrders
|
|
Convert '*' to @VM in WorkOrders
|
|
WorkOrders = SRP_Array('Rotate', WorkOrders, @FM, @VM)
|
|
WorkOrders = WorkOrders<1>
|
|
Convert @VM to @FM in WorkOrders
|
|
WorkOrders = SRP_Array('Clean', WorkOrders, 'TrimAndMakeUnique', @FM)
|
|
WorkOrders = SRP_Array('SortRows', WorkOrders, 'AR1', 'LIST', @FM, @VM)
|
|
Convert @FM to @STM in WorkOrders
|
|
Combo = ''
|
|
Combo<1> = 1
|
|
Combo<2, 1> = ''
|
|
Combo<2, 2> = 'L' : @STM : 'DYN'
|
|
Combo<2, 3> = WorkOrders
|
|
Combo<2, 4> = 1
|
|
Combo<2, 5> = 1
|
|
Combo<2, 6> = 0
|
|
Combo<2, 9> = 1
|
|
Combo<2,10> = 0
|
|
Combo<2,11> = 0
|
|
Set_Property(Ctrl, 'OLE.Combo[' : EditLine : ']', Combo)
|
|
|
|
EditLine = @Window : '.EDL_EPI_PART_SEARCH'
|
|
Handle = Get_Property(EditLine, 'HANDLE')
|
|
Send_Message(Ctrl, 'OLE.Subclass', Handle, EditLine)
|
|
EditLine = @Window : ';EDL_EPI_PART_SEARCH'
|
|
Convert @STM to @VM in WorkOrders
|
|
EpiParts = Xlate('WO_LOG', WorkOrders, 'EPI_PART_NO', 'X')
|
|
Convert @VM to @FM in EpiParts
|
|
Convert '*' to @VM in EpiParts
|
|
EpiParts = SRP_Array('Rotate', EpiParts, @FM, @VM)
|
|
Convert @VM to @FM in EpiParts
|
|
EpiParts = SRP_Array('Clean', EpiParts, 'TrimAndMakeUnique', @FM)
|
|
EpiParts = SRP_Array('SortRows', EpiParts, 'AR1', 'LIST', @FM, @VM)
|
|
|
|
Convert @FM to @STM in EpiParts
|
|
Combo = ''
|
|
Combo<1> = 1
|
|
Combo<2, 1> = ''
|
|
Combo<2, 2> = 'L' : @STM : 'DYN'
|
|
Combo<2, 3> = EpiParts
|
|
Combo<2, 4> = 1
|
|
Combo<2, 5> = 1
|
|
Combo<2, 6> = 0
|
|
Combo<2, 9> = 1
|
|
Combo<2,10> = 0
|
|
Combo<2,11> = 0
|
|
Set_Property(Ctrl, 'OLE.Combo[' : EditLine : ']', Combo)
|
|
|
|
Ctrl = @Window : '.OLE_TRE_REACTOR_FILTER_OPTIONS'
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnItemCheck', 1)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnApptDblClick', 1)
|
|
|
|
Ctrls = 'OLE_PUB_UPDATE_ASM_UTILIZATION,OLE_PUB_UPDATE_ASM_PLUS_UTILIZATION,OLE_PUB_UPDATE_HTR_UTILIZATION,OLE_PUB_UPDATE_EPIPRO_UTILIZATION,OLE_PUB_UPDATE_GAN_UTILIZATION'
|
|
For Each ButtonCtrl in Ctrls using ','
|
|
Ctrl = @Window : '.' : ButtonCtrl
|
|
Set_Property(Ctrl, 'OLE.Icon', '.\BMPS\Save.png')
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1)
|
|
Next ButtonCtrl
|
|
|
|
Ctrl = @Window : '.OLE_PUB_REFRESH_SCHEDULE'
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1)
|
|
|
|
Ctrl = @Window : '.OLE_POPUP'
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnItemClick', 1)
|
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnHide', 1)
|
|
GoSub EnableZoomButtons
|
|
|
|
return
|
|
|
|
|
|
ShowWaitMessage:
|
|
|
|
Set_Property(@Window : '.OLE_PICTURE', 'OLE.Caption', Caption)
|
|
Set_Property(@Window : '.OLE_PICTURE', 'VISIBLE', 1)
|
|
Set_Property(@Window : '.OLE_SCHEDULE', 'VISIBLE', 0)
|
|
Set_Property(@Window, 'REDRAW', 0)
|
|
|
|
return
|
|
|
|
|
|
HideWaitMessage:
|
|
|
|
Set_Property(@Window : '.OLE_SCHEDULE', 'VISIBLE', 1)
|
|
Set_Property(@Window : '.OLE_PICTURE', 'OLE.Caption', '')
|
|
Set_Property(@Window : '.OLE_PICTURE', 'VISIBLE', 0)
|
|
Set_Property(@Window, 'REDRAW', 1)
|
|
|
|
return
|
|
|
|
|
|
GetScheduleAppointments:
|
|
|
|
Ctrl = @Window : '.OLE_SCHEDULE'
|
|
AppointmentList = ''
|
|
AppointmentKeys = ''
|
|
AppointmentFlags = ''
|
|
StartDate = Date() - 60
|
|
EndDate = Date() + 60
|
|
AppointmentList = Database_Services('ReadDataRow', 'SYSLISTS', 'PREV_APPT_DATA')
|
|
Set_Property(@Window, '@APPT_LIST', AppointmentList)
|
|
AppointmentArray = SRP_Array('Rotate', AppointmentList, @FM, @VM)
|
|
AppointmentKeys = AppointmentArray<2>
|
|
Convert @VM to @FM in AppointmentKeys
|
|
AppointmentFlags = AppointmentArray<19>
|
|
Convert @VM to @FM in AppointmentFlags
|
|
|
|
DateList = Get_Property(@Window, '@DATE_LIST')
|
|
For Date = StartDate to EndDate
|
|
Locate Date in DateList using @FM setting fPos else
|
|
DateList = Insert(DateList, fPos, 0, 0, Date)
|
|
end
|
|
Next Date
|
|
Set_Property(CtrlEntId, '@DATE_LIST', DateList)
|
|
|
|
return
|
|
|
|
|
|
GetNewScheduleAppointments:
|
|
|
|
Ctrl = @Window : '.OLE_SCHEDULE'
|
|
AppointmentList = ''
|
|
AppointmentKeys = ''
|
|
AppointmentFlags = ''
|
|
StartDate = Date() - 60
|
|
EndDate = Date() + 60
|
|
AppointmentList = Database_Services('ReadDataRow', 'SYSLISTS', 'NEW_APPT_DATA')
|
|
Set_Property(@Window, '@APPT_LIST', AppointmentList)
|
|
AppointmentArray = SRP_Array('Rotate', AppointmentList, @FM, @VM)
|
|
AppointmentKeys = AppointmentArray<2>
|
|
Convert @VM to @FM in AppointmentKeys
|
|
AppointmentFlags = AppointmentArray<19>
|
|
Convert @VM to @FM in AppointmentFlags
|
|
|
|
DateList = Get_Property(@Window, '@DATE_LIST')
|
|
For Date = StartDate to EndDate
|
|
Locate Date in DateList using @FM setting fPos else
|
|
DateList = Insert(DateList, fPos, 0, 0, Date)
|
|
end
|
|
Next Date
|
|
Set_Property(CtrlEntId, '@DATE_LIST', DateList)
|
|
|
|
return
|
|
|
|
|
|
SetScheduleFlags:
|
|
|
|
Ctrl = @Window : '.OLE_SCHEDULE'
|
|
For Each AppointmentKey in AppointmentKeys using @FM setting fPos
|
|
Flags = AppointmentFlags<fPos>
|
|
If Sum(Flags) GT 0 then
|
|
Convert @SVM to @FM in Flags
|
|
Set_Property(Ctrl, 'OLE.ApptFlags[' : AppointmentKey : ']', Flags)
|
|
end
|
|
Next AppointmentKey
|
|
|
|
return
|
|
|
|
|
|
GetReactorEntities:
|
|
|
|
Ctrl = @Window : '.OLE_SCHEDULE'
|
|
EntityList = ''
|
|
Reactors = Database_Services('ReadDataRow', 'SYSLISTS', 'REACTOR_DATA')
|
|
If SRP_JSON(objReactors, 'PARSE', Reactors) EQ '' then
|
|
objReactorArray = SRP_JSON(objReactors, 'GET', 'Reactors')
|
|
objReactorList = SRP_JSON(objReactorArray, 'GETELEMENTS')
|
|
For Each objReactor in objReactorList using @FM
|
|
ReactorNo = SRP_JSON(objReactor, 'GETVALUE', 'ReactorNumber')
|
|
Type = SRP_JSON(objReactor, 'GETVALUE', 'TypeVerbose')
|
|
Size = SRP_JSON(objReactor, 'GETVALUE', 'SusceptorSize')
|
|
Assignment = SRP_JSON(objReactor, 'GETVALUE', 'AssignmentCode')
|
|
SecondChamber = SRP_JSON(objReactor, 'GETVALUE', 'SecondChamber')
|
|
PickPlace = SRP_JSON(objReactor, 'GETVALUE', 'PickPlace')
|
|
NotRepairable = SRP_JSON(objReactor, 'GETVALUE', 'NotRepairable')
|
|
EpiPro = (Type EQ 'EpiPro')
|
|
Begin Case
|
|
Case Assignment EQ 'G'
|
|
// GaN
|
|
Background = 'SkyBlue'
|
|
Case Assignment EQ 'O'
|
|
// Out-of-Service
|
|
Background = 'Silver'
|
|
Case Not(NotRepairable)
|
|
Background = 'LightGreen'
|
|
Case NotRepairable
|
|
Background = LTORANGE$
|
|
Case Otherwise$
|
|
Background = 'Silver'
|
|
End Case
|
|
If (Type NE 'EpiPro') OR (SecondChamber NE '') then
|
|
EntityName = ReactorNo
|
|
If SecondChamber NE '' then EntityName := '/' : SecondChamber
|
|
EntityList := 'ENT' : @VM : 1 : @VM : ReactorNo : @VM : EntityName : @VM : Type : CRLF$ : Size : @VM : 'Black' : @VM : Background : @FM
|
|
end
|
|
SRP_JSON(objReactor, 'RELEASE')
|
|
Next objReactor
|
|
EntityList[-1, 1] = ''
|
|
SRP_JSON(objReactorArray, 'RELEASE')
|
|
end
|
|
SRP_JSON(objReactors, 'RELEASE')
|
|
|
|
return
|
|
|
|
|
|
ParseScheduleEvent:
|
|
|
|
If Assigned(objScheduleEvent) else objScheduleEvent = ''
|
|
If objScheduleEvent EQ '' then
|
|
SRP_JSON(objScheduleEvent, 'PARSE', ScheduleEvent)
|
|
end
|
|
If objScheduleEvent GT 0 then
|
|
ReactorNo = SRP_JSON(objScheduleEvent, 'GETVALUE', 'Reactor.ReactorNumber')
|
|
ReactorType = SRP_JSON(objScheduleEvent, 'GETVALUE', 'Reactor.Type')
|
|
SusceptorSize = SRP_JSON(objScheduleEvent, 'GETVALUE', 'Reactor.SusceptorSize')
|
|
ScheduleDate = SRP_JSON(objScheduleEvent, 'GETVALUE', 'ScheduleDate')
|
|
ScheduleDate = Iconv(ScheduleDate, 'D')
|
|
Sequence = SRP_JSON(objScheduleEvent, 'GETVALUE', 'Sequence')
|
|
BackColor = SRP_JSON(objScheduleEvent, 'GETVALUE', 'BackColor')
|
|
ForeColor = SRP_JSON(objScheduleEvent, 'GETVALUE', 'ForeColor')
|
|
ModifiedDTM = SRP_JSON(objScheduleEvent, 'GETVALUE', 'ModifiedDTM')
|
|
BlockOut = Iconv(SRP_JSON(objScheduleEvent, 'GETVALUE', 'BlockOut'), 'BYes,No')
|
|
BlockOutType = SRP_JSON(objScheduleEvent, 'GETVALUE', 'BlockOutType')
|
|
Description = SRP_JSON(objScheduleEvent, 'GETVALUE', 'Note')
|
|
objWorkOrder = SRP_JSON(objScheduleEvent, 'GET', 'WorkOrder')
|
|
WorkOrderNo = SRP_JSON(objWorkOrder, 'GETVALUE', 'WorkOrderNumber')
|
|
EpiPartNo = SRP_JSON(objWorkOrder, 'GETVALUE', 'EpiPartNumber')
|
|
PSN = SRP_JSON(objWorkOrder, 'GETVALUE', 'PSN')
|
|
Recipe = SRP_JSON(objWorkOrder, 'GETVALUE', 'Recipe')
|
|
HotLot = Iconv(SRP_JSON(objWorkOrder, 'GETVALUE', 'HotLot'), 'BYes,No')
|
|
Closed = Iconv(SRP_JSON(objWorkOrder, 'GETVALUE', 'Closed'), 'BYes,No')
|
|
CustNameShort = SRP_JSON(objWorkOrder, 'GETVALUE', 'Company.NameShort')
|
|
SRP_JSON(objWorkOrder, 'RELEASE')
|
|
If BackColor EQ '' then
|
|
Begin Case
|
|
Case BackColor NE ''
|
|
// Set in the schedule detail record. Use current color.
|
|
Case HotLot
|
|
BackColor = 'LightCoral'
|
|
Case Closed
|
|
BackColor = 'LightGray'
|
|
Case BlockOut
|
|
BackColor = 'Plum'
|
|
Case Otherwise$
|
|
BackColor = 'LightSteelBlue'
|
|
End Case
|
|
end
|
|
Current = False$ ; // Assume false for now.
|
|
If (ScheduleDate GE Date()) then
|
|
If (ModifiedDTM NE '') then
|
|
CurrentDTM = Iconv(Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTH'), 'DTM')
|
|
ElapseTime = (CurrentDTM - ModifiedDTM) * 24
|
|
IF (ElapseTime LE 12) then
|
|
CurrentFlag = True$
|
|
end
|
|
end
|
|
end
|
|
If ForeColor EQ '' then ForeColor = 'Black'
|
|
FirstSchedDetKeyID = SRP_JSON(objScheduleEvent, 'GETVALUE', 'FirstSchedDetKeyID')
|
|
FirstReactorNo = FirstSchedDetKeyID[1, '*']
|
|
FirstScheduleDate = Oconv(FirstSchedDetKeyID[Col2() + 1, '*'], 'D4/')
|
|
LastSchedDetKeyID = SRP_JSON(objScheduleEvent, 'GETVALUE', 'LastSchedDetKeyID')
|
|
LastReactorNo = LastSchedDetKeyID[1, '*']
|
|
LastScheduleDate = Oconv(LastSchedDetKeyID[Col2() + 1, '*'], 'D4/')
|
|
TotalScheduledDays = SRP_JSON(objScheduleEvent, 'GETVALUE', 'TotalScheduledDays')
|
|
TotalWafers = SRP_JSON(objScheduleEvent, 'GETVALUE', 'WorkOrder.TotalWafers')
|
|
WafersRemaining = SRP_JSON(objScheduleEvent, 'GETVALUE', 'WorkOrder.WafersRemaining')
|
|
PercentComplete = SRP_JSON(objScheduleEvent, 'GETVALUE', 'WorkOrder.PercentComplete')
|
|
ScheduleEvent = SRP_JSON(objScheduleEvent, 'STRINGIFY', 'FAST')
|
|
SRP_JSON(objScheduleEvent, 'RELEASE')
|
|
end
|
|
|
|
return
|
|
|
|
|
|
EnableZoomButtons:
|
|
|
|
Ctrl = @Window : '.OLE_SCHEDULE'
|
|
IntervalSize = Get_Property(Ctrl, 'OLE.IntervalSize')
|
|
Set_Property(@Window:'.OLE_PUB_ZOOM_OUT', 'ENABLED', (IntervalSize GT 9))
|
|
Set_Property(@Window:'.LBL_ZOOM_OUT', 'ENABLED', (IntervalSize GT 9))
|
|
Set_Property(@Window:'.OLE_PUB_ZOOM_IN', 'ENABLED', (IntervalSize LT 29))
|
|
Set_Property(@Window:'.LBL_ZOOM_IN', 'ENABLED', (IntervalSize LT 29))
|
|
|
|
return
|
|
|
|
|
|
UpdateAppointmentList:
|
|
|
|
CurrApptList = Get_Property(Ctrl, 'OLE.AppointmentList')
|
|
GoSub GetNewScheduleAppointments
|
|
Set_Property(Ctrl, 'OLE.AppointmentList', AppointmentList)
|
|
|
|
return
|