308 lines
12 KiB
Plaintext
308 lines
12 KiB
Plaintext
Compile function NDW_RELEASE_CASSETTES_EVENTS(CtrlEntId, Event, @PARAMS)
|
|
/***********************************************************************************************************************
|
|
|
|
Name : NDW_Release_Cassettes_Events
|
|
|
|
Description : Commuter module for the NDW_Release_Cassettes form.
|
|
|
|
Notes : Application errors should be logged using the Error Services module. There are a few methodological
|
|
assumptions built into way errors are managed which are important to understand in order to properly
|
|
work with Error Services:
|
|
|
|
- The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to
|
|
the last routine (or the current routine) within a call stack. Within the OpenInsight Debugger
|
|
this will appear backwards since the originating procedure always appears at the bottom of the
|
|
list and the current routine appears at the top of the list. We are using this orientation because
|
|
it is common to refer to the process of calling other procedures as 'drilling down'.
|
|
|
|
- The reason for defining the orientation of the call stack is because Error_Services allows for
|
|
multiple error conditions to be appended to an original error. In most cases this will happen when
|
|
a procedure at the bottom of the stack generates an error condition and then returns to its
|
|
calling procedure. This higher level procedure can optionally add more information relevant to
|
|
itself. This continues as the call stack 'bubbles' its way back to the top to where the
|
|
originating procedure is waiting.
|
|
|
|
- Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus)
|
|
preserve their error state until explicitly cleared. This can hinder the normal execution of code
|
|
since subsequent procedures (usually SSPs) will fail if a pre-existing error condition exists.
|
|
Our philosophy is that error conditions should automatically be cleared before a new procedure
|
|
is executed to avoid this problem. However, the nature of Basic+ does not make this easy to
|
|
automate for any given stored procedure. Therefore, if a stored procedure wants to conform to our
|
|
philosophy then it should include a call into the 'Clear' service request at the top of the
|
|
program. Alternatively this can be done through a common insert (see SERVICE_SETUP for example.)
|
|
|
|
- Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
|
|
error conditions that were set before.
|
|
|
|
Parameters :
|
|
Service [in] -- Name of the service being requested
|
|
Param1-10 [in/out] -- Additional request parameter holders
|
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
|
|
|
Metadata :
|
|
|
|
History : (Date, Initials, Notes)
|
|
05/11/2021 djs Original programmer.
|
|
|
|
***********************************************************************************************************************/
|
|
#pragma precomp SRP_PreCompiler
|
|
#window NDW_RELEASE_CASSETTES
|
|
|
|
$Insert EVENT_SETUP
|
|
$Insert APP_INSERTS
|
|
$Insert MSG_EQUATES
|
|
$Insert POPUP_EQUATES
|
|
$Insert WO_LOG_EQUATES
|
|
|
|
Declare subroutine Errmsg, Btree.Extract, Set_Status, Logging_Services, Work_Order_Services
|
|
Declare function obj_WO_Log, Work_Order_Services, Environment_Services, Logging_Services, Database_Services
|
|
|
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_LOG'
|
|
LogDate = Oconv(Date(), 'D4/')
|
|
LogTime = Oconv(Time(), 'MTS')
|
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Release Performance Log New.csv'
|
|
Headers = 'Logging DTM':@FM:'WO':@FM:'User':@FM:'Cassettes (Qty)':@FM:'Release (Secs)':@FM:'Form Refresh (Secs)':@FM:'Total Duration (Secs)':@FM:'Seconds/Cassette'
|
|
objReleaseLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
|
|
|
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
|
|
|
// 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)
|
|
|
|
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
|
|
|
|
End Event
|
|
|
|
|
|
Event EDL_WO_NO.LOSTFOCUS(Flag, FocusID)
|
|
|
|
DataValue = Get_Property(CtrlEntID, 'TEXT')
|
|
If DataValue NE '' then
|
|
|
|
If Index(DataValue,'.',1) then
|
|
* Try a BTREE lookup on PROD_ORD_NO
|
|
|
|
Open 'DICT.WO_LOG' to DictVar then
|
|
|
|
SearchString = 'PROD_ORD_NO':@VM:DataValue:@FM
|
|
WONos = ''
|
|
Flag = ''
|
|
Btree.Extract(SearchString, 'WO_LOG', DictVar, WONos, '', Flag)
|
|
|
|
Begin Case
|
|
Case Get_Status(errCode)
|
|
ErrMsg(errCode)
|
|
|
|
Case WONos EQ ''
|
|
ErrMsg('Value Entered "':DataValue:'" is not found.')
|
|
|
|
Case Index(WONos,@VM,1)
|
|
ErrMsg('Multiple Work Orders ':QUOTE(DataValue):' for Prod Order entered.')
|
|
|
|
Case RowExists('WO_LOG', DataValue)
|
|
Set_Property(CtrlEntID,'DEFPROP',WONos)
|
|
GoSub PopulateControls
|
|
|
|
Case Otherwise$
|
|
ErrMsg(Quote(DataValue):' is not a valid work order.')
|
|
|
|
End Case
|
|
end else
|
|
ErrMsg('Unable to open "DICT.WO_LOG" for index lookup in COMM_SHIPMENT routine.')
|
|
end
|
|
end else
|
|
If RowExists('WO_LOG', DataValue) then
|
|
GoSub PopulateControls
|
|
end else
|
|
ErrMsg(Quote(DataValue):' is not a valid work order.')
|
|
end
|
|
end
|
|
end
|
|
|
|
end event
|
|
|
|
|
|
Event PUB_RX.CLICK()
|
|
|
|
WONo = Get_Property(@Window:'.EDL_WO_NO', 'TEXT')
|
|
If WONo NE '' then
|
|
Response = Dialog_Box('WO_REC', @Window, WONo)
|
|
GoSub PopulateControls
|
|
end
|
|
|
|
end event
|
|
|
|
|
|
Event PUB_RELEASE.CLICK()
|
|
|
|
WONo = Get_Property(@Window:'.EDL_WO_NO', 'TEXT')
|
|
If WONo NE '' then
|
|
NumRelCass = 0
|
|
ReleaseStartTime = Time()
|
|
NumRelCass = Work_Order_Services('ReleaseCassettes', WONo)
|
|
ReleaseStopTime = Time()
|
|
If Error_Services('HasError') then
|
|
ErrorMsg = Error_Services('GetMessage')
|
|
ErrMsg(ErrorMsg)
|
|
end
|
|
RefreshStartTime = Time()
|
|
GoSub PopulateControls
|
|
RefreshStopTime = Time()
|
|
ReleaseDuration = ReleaseStopTime - ReleaseStartTime
|
|
RefreshDuration = RefreshStopTime - RefreshStartTime
|
|
TotalDuration = ReleaseDuration + RefreshDuration
|
|
If NumRelCass GT 0 then
|
|
SecPerCass = TotalDuration / NumRelCass
|
|
end else
|
|
SecPerCass = 'N/A'
|
|
end
|
|
LogData = ''
|
|
LogData<1> = LoggingDTM
|
|
LogData<2> = WONo
|
|
LogData<3> = @User4
|
|
LogData<4> = NumRelCass
|
|
LogData<5> = ReleaseDuration
|
|
LogData<6> = RefreshDuration
|
|
LogData<7> = TotalDuration
|
|
LogData<8> = SecPerCass
|
|
Logging_Services('AppendLog', objReleaseLog, LogData, @RM, @FM)
|
|
end
|
|
|
|
end event
|
|
|
|
|
|
Event PUB_LABELS.CLICK()
|
|
|
|
WONo = Get_Property(@Window:'.EDL_WO_NO', 'TEXT')
|
|
If WONo NE '' then
|
|
Work_Order_Services('PrintLabels', WONo)
|
|
If Error_Services('HasError') then
|
|
ErrorMsg = Error_Services('GetMessage')
|
|
ErrMsg(ErrorMsg)
|
|
end
|
|
end
|
|
|
|
end event
|
|
|
|
|
|
Event PUB_LU_WO.CLICK()
|
|
|
|
Set_Status(0)
|
|
WOKeys = obj_WO_Log('Find')
|
|
|
|
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
|
|
|
|
IF WOKeys NE '' THEN
|
|
TypeOver = ''
|
|
TypeOver<PDISPLAY$> = WOKeys
|
|
TypeOver<PMODE$> = 'K'
|
|
|
|
WOKeys = Popup(@WINDOW,TypeOver,'WO_LOG_QUERY')
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
END
|
|
|
|
IF WOKeys NE '' THEN
|
|
Set_Property(@Window:'.EDL_WO_NO', 'TEXT', WOKeys)
|
|
GoSub PopulateControls
|
|
end
|
|
END
|
|
|
|
end event
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Internal GoSubs
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
PopulateControls:
|
|
|
|
WONo = Get_Property(@Window:'.EDL_WO_NO', 'TEXT')
|
|
If WONo NE '' then
|
|
|
|
Set_Property(@Window, "REDRAW", False$)
|
|
Ctrls = 'EDL_WO_QTY,EDL_RX_QTY,EDL_REL_QTY,EDL_UNREL_QTY,EDT_REL_STAMP,EDT_RX_STAMP'
|
|
Cols = 'WO_QTY,RX_QTY,REL_QTY,UNREL_QTY,REL_STAMP,RX_STAMP'
|
|
|
|
NumCtrls = DCount(Ctrls, ',')
|
|
|
|
Def = ""
|
|
Def<MCAPTION$> = "Loading Work Order Details..."
|
|
Def<MTYPE$> = "GC"
|
|
Def<MEXTENT$> = NumCtrls
|
|
Def<MTEXTWIDTH$> = 600
|
|
MsgUp = Msg(@WINDOW, Def) ;* Start gas guage message
|
|
|
|
Swap ',' with @VM in Ctrls
|
|
Swap ',' with @VM in Cols
|
|
|
|
WORec = Database_Services('ReadDataRow', 'WO_LOG', WONo)
|
|
WOQty = WORec<WO_LOG_QTY$>
|
|
// Pull these quantities using obj_WO_Log to ensure they are up-to-date.
|
|
// The physical fields are updated via the PROC_QUEUE and may lag by a few seconds.
|
|
RxQty = obj_WO_Log('RxQty', WONo:@RM:WORec)
|
|
RelQty = obj_WO_Log('RelQty', WONo:@RM:WORec)
|
|
UnRelQty = WOQty - RelQty
|
|
|
|
For each Ctrl in Ctrls using @VM setting vPos
|
|
|
|
Begin Case
|
|
Case Ctrl EQ 'EDL_RX_QTY'
|
|
Val = RxQty
|
|
Case Ctrl EQ 'EDL_REL_QTY'
|
|
Val = RelQty
|
|
Case Ctrl EQ 'EDL_UNREL_QTY'
|
|
Val = UnRelQty
|
|
Case Otherwise$
|
|
Val = Xlate('WO_LOG', WONo, Cols<0, vPos>, 'X')
|
|
End Case
|
|
|
|
Set_Property(@Window:'.':Ctrl, 'DEFPROP', Val)
|
|
Running = Msg(@WINDOW, MsgUp, vPos, MSGINSTUPDATE$) ;* Update message
|
|
|
|
Next Ctrl
|
|
|
|
Msg(@WINDOW,MsgUp) ;* Take message down
|
|
Set_Property(@Window, "REDRAW", True$)
|
|
end
|
|
GoSub EnableControls
|
|
|
|
return
|
|
|
|
|
|
EnableControls:
|
|
|
|
Ctrls = 'PUB_RX,PUB_RELEASE,PUB_LABELS'
|
|
WONo = Get_Property(@Window:'.EDL_WO_NO', 'TEXT')
|
|
ValidWO = RowExists('WO_LOG', WONo)
|
|
For each Ctrl in Ctrls using ','
|
|
Set_Property(@Window:'.':Ctrl, 'ENABLED', ValidWO)
|
|
Next Ctrl
|
|
|
|
return
|
|
|