257 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Function NDW_Scheduler_Cancel_WO_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_Cancel_WO_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)
 | |
|         01/18/2021    djs     Created initial commuter module.
 | |
| 
 | |
| ***********************************************************************************************************************/
 | |
| 
 | |
| #pragma precomp SRP_PreCompiler
 | |
| #Window NDW_SCHEDULER_CANCEL_WO
 | |
| 
 | |
| $insert APP_INSERTS
 | |
| $insert EVENT_SETUP
 | |
| $insert MSG_EQUATES
 | |
| $insert SCHED_DET_NG_EQUATES
 | |
| $insert WO_LOG_EQUATES
 | |
| $insert WO_SCHEDULE_NG_EQUATES
 | |
| $insert REACTOR_EQUATES
 | |
| 
 | |
| Equ OI_DISABLED_GREY$ TO 239 + (239*256) + (239*65536)
 | |
| 
 | |
| WorkOrderCtrls      = 'OLE_DIV_WORK_ORDER_DETAILS,WO_NO_LABEL,WO_NO,EPI_PART_LABEL,EPI_PART,DESCRIPTION_LABEL,DESCRIPTION,CUSTOMER_NAME_LABEL,CUSTOMER_NAME,'
 | |
| WorkOrderCtrls     := 'TOTAL_WAFERS_LABEL,TOTAL_WAFERS,TOTAL_REMAINING_LABEL,TOTAL_REMAINING,PERCENT_COMPLETE_LABEL,PERCENT_COMPLETE'
 | |
| DateRangeCtrls      = 'SCHEDULE_START_DTM_LABEL,SCHEDULE_START_DTM,SCHEDULE_END_DTM_LABEL,SCHEDULE_END_DTM,DAYS_LABEL,DAYS'
 | |
| 
 | |
| Declare function    SRP_Array, Schedule_Services, Database_Services, Work_Order_Services, SRP_Math
 | |
| Declare function    Epi_Part_Services
 | |
| Declare subroutine  obj_Appwindow, Center_Window, Schedule_Services, Form_Services, SRP_Show_Window
 | |
| Declare subroutine  Form_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
 | |
| 
 | |
| Type = Get_Property(CtrlEntId, 'TYPE')
 | |
| If Type EQ 'RADIOBUTTON' then
 | |
| 	Convert ' ' to '_' in CtrlEntID
 | |
| end
 | |
| 
 | |
| GoToEvent Event for CtrlEntID
 | |
| 
 | |
| Return EventFlow else EVENT_CONTINUE$
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Events
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Event WINDOW.CREATE(CreateParam)
 | |
| 	
 | |
| 	SchedDetKeyID = CreateParam<3>
 | |
| 	SchedDetRec   = Schedule_Services('GetScheduleDetail', SchedDetKeyID)
 | |
| 	WONo          = SchedDetRec<SCHED_DET_NG.WO_NO$>
 | |
| 	ReactorNo     = SchedDetRec<SCHED_DET_NG.REACT_NO$>
 | |
| 	StartDTM      = SchedDetRec<SCHED_DET_NG.START_DTM$>
 | |
| 	StopDTM       = SchedDetRec<SCHED_DET_NG.STOP_DTM$>
 | |
| 	EventWfrs     = SchedDetRec<SCHED_DET_NG.EVENT_TOTAL_WFRS$>
 | |
| 	Set_Property(@Window : '.WO_NO', 'TEXT', WONo)
 | |
| 	Set_Property(@Window : '.REACTOR_NO', 'TEXT', ReactorNo)
 | |
| 	Set_Property(@Window : '.SCHEDULE_START_DTM', 'INVALUE', StartDTM)
 | |
| 	Set_Property(@Window : '.SCHEDULE_END_DTM', 'INVALUE', StopDTM)
 | |
| 	Set_Property(@Window : '.SCHEDULE_WAFERS', 'INVALUE', EventWfrs)
 | |
| 	Set_Property(@Window, '@SCHEDULE_KEY_ID', ScheduleKeyID)
 | |
| 	
 | |
| 	GoSub PopulateControls
 | |
| 	
 | |
| 	SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$)
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event WINDOW.CLOSE(CancelFlag)
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PROCEED_BUTTON.CLICK()
 | |
| 	
 | |
| 	End_Dialog(@Window, 'Proceed')
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event CANCEL_BUTTON.CLICK()
 | |
| 	
 | |
| 	End_Dialog(@Window, 'Cancel')
 | |
| 	
 | |
| end event
 | |
| 
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Internal GoSubs
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| SelectAll:
 | |
| 	
 | |
| 	Set_Property(CtrlEntId, 'SELECTION', 1 : @FM : 999)
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| UpdateScheduleDetails:
 | |
| 	
 | |
| 	ScheduleDetail  = Schedule_Services('GetScheduleDetail', ScheduleKeyID)
 | |
| 	Set_Property(@Window, '@ORIG_SCHEDULEDETAIL', ScheduleDetail)
 | |
| 	WorkOrder           = Get_Property(@Window : '.WO_NO', 'TEXT')
 | |
| 	If WorkOrder NE '' then
 | |
| 		Set_Property(@Window : '.DESCRIPTION', 'TEXT', ScheduleDetail<SCHED_DET_NG.DESC$>)
 | |
| 	end else
 | |
| 		Set_Property(@Window : '.DESCRIPTION', 'TEXT', '')
 | |
| 	end
 | |
| 	
 | |
| return
 | |
| 
 | |
| UpdateCustomerName:
 | |
| 	
 | |
| 	WoNo            = Get_Property(@Window : '.WO_NO', 'TEXT')
 | |
| 	If WoNo NE '' then
 | |
| 		WorkOrderDetail = Work_Order_Services('GetWorkOrderLogDetail', WONo)
 | |
| 		CustNo          = WorkOrderDetail<WO_LOG_CUST_NO$>
 | |
| 		CompanyRow      = Database_Services('ReadDataRow', 'COMPANY', CustNo)
 | |
| 		CustName        = CompanyRow<42>
 | |
| 	end else
 | |
| 		CustName        = ''
 | |
| 	end
 | |
| 	Set_Property(@Window : '.CUSTOMER_NAME', 'TEXT', CustName)
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| UpdateReactorDetails:
 | |
| 	
 | |
| 	ReactorNo       = Get_Property(@Window : '.REACTOR_NO', 'TEXT')
 | |
| 	If Index(ReactorNo, '/', 1) then
 | |
| 		// EpiPro reactors formatted as such, "40/42". We must truncate the reactor number to the first reactor.
 | |
| 		ReactorNo = Field(ReactorNo, '/', 1, 1)
 | |
| 		Set_Property(@Window : '.REACTOR_NO', 'TEXT', ReactorNo)
 | |
| 	end
 | |
| 	ReactorDetails  = Schedule_Services('GetReactorDetails', ReactorNo)
 | |
| 	ReactorType     = ReactorDetails<REACTOR_REACT_TYPE$>
 | |
| 	Begin Case
 | |
| 		Case ReactorType _EQC 'EPP' ; ReactorType = 'EpiPro'
 | |
| 		Case ReactorType _EQC 'GAN' ; ReactorType = 'GaN'
 | |
| 	End Case
 | |
| 	Set_Property(@Window : '.REACTOR_TYPE', 'TEXT', ReactorType)
 | |
| 	Set_Property(@Window : '.REACTOR_SIZE', 'TEXT', ReactorDetails<REACTOR_SUSC_POCKET_SIZE$>)
 | |
| 	FutureEvents    = Schedule_Services('GetScheduleEvents', Date() + 1, '', ReactorNo, '', False$)
 | |
| 	Set_Property(@Window, '@FUTURE_EVENTS', FutureEvents)
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| UpdateWorkOrderDetails:
 | |
| 	
 | |
| 	WorkOrder = Get_Property(@Window : '.WO_NO', 'TEXT')
 | |
| 	ReactNo   = Get_Property(@Window : '.REACTOR_NO', 'TEXT')
 | |
| 	EventWfrs = Get_Property(@Window : '.SCHEDULE_WFRS', 'TEXT')
 | |
| 	
 | |
| 	If WorkOrder NE '' then
 | |
| 		WorkOrderDetail     = Work_Order_Services('GetWorkOrderLogDetail', WorkOrder)
 | |
| 		EpiPart             = WorkOrderDetail<WO_LOG_EPI_PART_NO$>
 | |
| 		TotalWafers         = WorkOrderDetail<WO_LOG_WO_QTY$>
 | |
| 		Remaining           = Work_Order_Services('GetRemainingWafers', WorkOrder)
 | |
| 		Remaining           = Int(Remaining + .5)
 | |
| 		If TotalWafers GT 0 then
 | |
| 			Complete    = (TotalWafers - Remaining) / (TotalWafers * 100)
 | |
| 		end else
 | |
| 			Complete    = 0
 | |
| 		end
 | |
| 		ReactorType     = Get_Property(@Window : '.REACTOR_TYPE', 'TEXT')
 | |
| 		MinutesPerWafer = Epi_Part_Services('GetMinutesPerWaferScheduler', EpiPart, ReactorType)
 | |
| 		ScheduledWfrQty = Schedule_Services('GetScheduledWfrQty', WorkOrder)
 | |
| 		AdjustedDays    = Schedule_Services('GetAdjustedDays', WorkOrder, '', EventWfrs)
 | |
| 		If MinutesPerWafer EQ '' then
 | |
| 			Msg(@Window, 'Warning: ' : EpiPart : ' appears to be missing minutes per wafer values for ' : ReactorType)
 | |
| 		end
 | |
| 	end
 | |
| 	
 | |
| 	If (WorkOrder NE '') then
 | |
| 		Set_Property(@Window : '.EPI_PART', 'TEXT', EpiPart)
 | |
| 		Set_Property(@Window : '.TOTAL_WAFERS', 'TEXT', TotalWafers)
 | |
| 		Set_Property(@Window : '.TOTAL_REMAINING', 'TEXT', Remaining)
 | |
| 		Set_Property(@Window : '.PERCENT_COMPLETE', 'TEXT', Oconv(Complete, 'MD0[ %]S'))
 | |
| 		// Calculate the end date based on the adjusted days.
 | |
| 		StartDTM  = Get_Property(@Window : '.SCHEDULE_START_DTM', 'INVALUE')
 | |
| 		EndDTM    = StartDTM + AdjustedDays - 1            
 | |
| 		Set_Property(@Window : '.SCHEDULE_END_DTM', 'INVALUE', EndDTM)
 | |
| 		AdjustedDaysRounded = SRP_Math('ROUND', AdjustedDays, 1)
 | |
| 		Set_Property(@Window : '.DAYS', 'DEFPROP', AdjustedDaysRounded)
 | |
| 	end else
 | |
| 		Error_Services('DisplayError')
 | |
| 		Set_Property(@Window : '.EPI_PART', 'TEXT', '')
 | |
| 		Set_Property(@Window : '.TOTAL_WAFERS', 'TEXT', '')
 | |
| 		Set_Property(@Window : '.TOTAL_REMAINING', 'TEXT', '')
 | |
| 		Set_Property(@Window : '.SCHEDULE_WAFERS', 'TEXT', '')
 | |
| 		Set_Property(@Window : '.PERCENT_COMPLETE', 'TEXT', '')
 | |
| 		Set_Property(@Window : '.SCHEDULE_END_DTM', 'INVALUE', '')
 | |
| 		Set_Property(@Window : '.DAYS', 'DEFPROP', '')
 | |
| 	end
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 | |
| PopulateControls:
 | |
| 	
 | |
| 	Set_Property(@Window, 'TEXT', 'Scheduler Actions - Cancel Work Order Event')
 | |
| 	Set_Property(@Window : '.REACTOR_NO', 'NEXT', @Window : '.SCHEDULE_START_DTM')
 | |
| 	Set_Property(@Window : '.DESCRIPTION', 'NEXT', @Window : '.REACTOR_NO')
 | |
| 	WONo           = ''
 | |
| 	ScheduleKeyID  = ''
 | |
| 	GoSub UpdateScheduleDetails
 | |
| 	GoSub UpdateReactorDetails
 | |
| 	GoSub UpdateCustomerName
 | |
| 	GoSub UpdateWorkOrderDetails
 | |
| 	Set_Property(@Window : '.REACTOR_NO', 'FOCUS', True$)
 | |
| 	
 | |
| return
 | |
| 
 | |
| 
 |