ebase 8/22/2025
Modified RDS_Actions to fix RDSNo being unassigned when calling obj_wo_react -> RemRDS various bug fixes Re-initializaing branch Modified RDS_Actions to fix RDSNo being unassigned when calling obj_wo_react -> RemRDS Added a check prior to running Load logic to check that a reactor is assigned.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -3591,7 +3591,7 @@
|
||||
"<22,2>": "",
|
||||
"<22,3>": "EDITFIELD",
|
||||
"<22,4>": "RDS_PRE_EPI",
|
||||
"<22,5>": "366",
|
||||
"<22,5>": "380",
|
||||
"<22,6>": "370",
|
||||
"<22,7>": "132",
|
||||
"<22,8>": "18",
|
||||
@ -3731,7 +3731,7 @@
|
||||
"<23,2>": "",
|
||||
"<23,3>": "EDITFIELD",
|
||||
"<23,4>": "RDS_PRE_EPI",
|
||||
"<23,5>": "505",
|
||||
"<23,5>": "521",
|
||||
"<23,6>": "370",
|
||||
"<23,7>": "84",
|
||||
"<23,8>": "18",
|
||||
@ -3871,7 +3871,7 @@
|
||||
"<24,2>": "",
|
||||
"<24,3>": "EDITFIELD",
|
||||
"<24,4>": "RDS_PRE_EPI",
|
||||
"<24,5>": "593",
|
||||
"<24,5>": "612",
|
||||
"<24,6>": "370",
|
||||
"<24,7>": "75",
|
||||
"<24,8>": "18",
|
||||
@ -9835,9 +9835,9 @@
|
||||
"<56,3>": "PUSHBUTTON",
|
||||
"<56,4>": "RDS_PRE_EPI",
|
||||
"<56,5>": "324",
|
||||
"<56,6>": "370",
|
||||
"<56,7>": "36",
|
||||
"<56,8>": "18",
|
||||
"<56,6>": "368",
|
||||
"<56,7>": "52",
|
||||
"<56,8>": "24",
|
||||
"<56,9>": "Sign",
|
||||
"<56,10>": {
|
||||
"<56,10,1>": "0x56000300",
|
||||
@ -17211,9 +17211,9 @@
|
||||
"<101,2>": "",
|
||||
"<101,3>": "GROUPBOX",
|
||||
"<101,4>": "RDS_PRE_EPI",
|
||||
"<101,5>": "10",
|
||||
"<101,5>": "12",
|
||||
"<101,6>": "268",
|
||||
"<101,7>": "672",
|
||||
"<101,7>": "690",
|
||||
"<101,8>": "129",
|
||||
"<101,9>": "Pre-Epi Verification",
|
||||
"<101,10>": {
|
||||
@ -17917,7 +17917,8 @@
|
||||
"<1,26,16>": "",
|
||||
"<1,26,17>": "",
|
||||
"<1,26,18>": "",
|
||||
"<1,26,19>": ""
|
||||
"<1,26,19>": "",
|
||||
"<1,26,20>": ""
|
||||
},
|
||||
"<1,27>": {
|
||||
"<1,27,1>": "ITEM",
|
||||
@ -17938,7 +17939,8 @@
|
||||
"<1,27,16>": "",
|
||||
"<1,27,17>": "",
|
||||
"<1,27,18>": "",
|
||||
"<1,27,19>": ""
|
||||
"<1,27,19>": "",
|
||||
"<1,27,20>": ""
|
||||
},
|
||||
"<1,28>": {
|
||||
"<1,28,1>": "POPUP",
|
||||
@ -18010,9 +18012,9 @@
|
||||
"<2>": {
|
||||
"<2,1>": {
|
||||
"<2,1,1>": {
|
||||
"<2,1,1,1>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT",
|
||||
"<2,1,1,1>": "EDIT.THICKNESS_OVERGROWTH_AVG",
|
||||
"<2,1,1,2>": "EDIT.SSI_STANDARDS",
|
||||
"<2,1,1,3>": "EDIT.THICKNESS_OVERGROWTH_AVG"
|
||||
"<2,1,1,3>": "SEND_MESSAGE.MESSAGE_W/ATTACHMENT"
|
||||
}
|
||||
},
|
||||
"<2,2>": {
|
||||
@ -18022,7 +18024,17 @@
|
||||
"<2,2,1,3>": "@WINDOW",
|
||||
"<2,2,1,4>": "",
|
||||
"<2,2,1,5>": "",
|
||||
"<2,2,1,6>": ""
|
||||
"<2,2,1,6>": "",
|
||||
"<2,2,1,7>": "",
|
||||
"<2,2,1,8>": "",
|
||||
"<2,2,1,9>": "",
|
||||
"<2,2,1,10>": "",
|
||||
"<2,2,1,11>": "",
|
||||
"<2,2,1,12>": "",
|
||||
"<2,2,1,13>": "",
|
||||
"<2,2,1,14>": "",
|
||||
"<2,2,1,15>": "READROW",
|
||||
"<2,2,1,16>": "0"
|
||||
},
|
||||
"<2,2,2>": {
|
||||
"<2,2,2,1>": "E",
|
||||
@ -18152,7 +18164,17 @@
|
||||
"<2,2,16,3>": "@WINDOW",
|
||||
"<2,2,16,4>": "",
|
||||
"<2,2,16,5>": "",
|
||||
"<2,2,16,6>": ""
|
||||
"<2,2,16,6>": "",
|
||||
"<2,2,16,7>": "",
|
||||
"<2,2,16,8>": "",
|
||||
"<2,2,16,9>": "",
|
||||
"<2,2,16,10>": "",
|
||||
"<2,2,16,11>": "",
|
||||
"<2,2,16,12>": "",
|
||||
"<2,2,16,13>": "",
|
||||
"<2,2,16,14>": "",
|
||||
"<2,2,16,15>": "GEN",
|
||||
"<2,2,16,16>": "0"
|
||||
}
|
||||
},
|
||||
"<2,3>": {
|
||||
|
@ -1,187 +1,389 @@
|
||||
Compile function NDW_LOAD_UNLOAD_EXTRA_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
#window NDW_LOAD_UNLOAD_EXTRA
|
||||
|
||||
Declare subroutine End_Dialog, Post_Event, Database_Services, Error_Services, Msg
|
||||
Declare subroutine Set_Property, Rds_Services
|
||||
Declare function Database_Services, Error_Services
|
||||
Declare function Get_Property
|
||||
|
||||
$Insert EVENT_SETUP
|
||||
$Insert LOGICAL
|
||||
$Insert RDS_EQUATES
|
||||
|
||||
GoToEvent Event for CtrlEntId else
|
||||
// Event not implemented
|
||||
end
|
||||
|
||||
Return EventFlow or 1
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// EVENT HANDLERS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
ResponseValue = Set_Property(@Window, '@responsevalue', 0)
|
||||
RDSNo = CreateParam
|
||||
If RowExists('RDS', RDSNo) then
|
||||
Set_Property(@Window : '.EDL_RDS', 'TEXT', RDSNo)
|
||||
GoSub Refresh
|
||||
end else
|
||||
ResponseValue = Set_Property(@Window, '@responsevalue', 0)
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
end
|
||||
|
||||
End Event
|
||||
|
||||
Event WINDOW.CLOSE(CancelFlag)
|
||||
ResponseValue = Get_Property(@Window, '@responsevalue')
|
||||
End_Dialog(@Window, ResponseValue)
|
||||
end event
|
||||
|
||||
//Signature buttons
|
||||
|
||||
Event PUB_SIGN_UNLOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('SignUnloadExtra1', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 1 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_SIGN_LOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('SignLoadExtra1', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 1 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_SIGN_UNLOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('SignUnloadExtra2', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 2 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_SIGN_LOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('SignLoadExtra2', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 2 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
//Clear Signature Buttons
|
||||
|
||||
Event PUB_CLEAR_UNLOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignUnloadExtra1', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 1 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_CLEAR_LOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignLoadExtra1', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 1 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_CLEAR_UNLOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignUnloadExtra2', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 2 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_CLEAR_LOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignLoadExtra2', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 2 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// INTERNAL GO-SUBS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
***************
|
||||
Refresh:
|
||||
***************
|
||||
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
If RowExists('RDS', RDSNo) then
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
//Unload Extra 1
|
||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
|
||||
UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D')
|
||||
UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT')
|
||||
//Load Extra 1
|
||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
|
||||
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
|
||||
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
|
||||
//Unload Extra 2
|
||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
|
||||
UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D')
|
||||
UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT')
|
||||
//Load Extra 2
|
||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
|
||||
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
|
||||
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
|
||||
|
||||
//Populate text fields
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_DATE', 'TEXT', UnloadExtra1Date)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_1_USER', 'TEXT', LoadExtra1UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_USER', 'TEXT', UnloadExtra2UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_2_USER', 'TEXT', LoadExtra2UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time)
|
||||
end else
|
||||
ResponseValue = Set_Property(@Window, '@responsevalue', 0)
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
Compile function NDW_LOAD_UNLOAD_EXTRA_EVENTS(CtrlEntId, Event, @PARAMS)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
#window NDW_LOAD_UNLOAD_EXTRA
|
||||
|
||||
Declare subroutine End_Dialog, Post_Event, Database_Services, Error_Services, Msg
|
||||
Declare subroutine Set_Property, Rds_Services, Set_Status, Rlist, Obj_Post_Log
|
||||
Declare function Database_Services, Error_Services, Qa_Services, Reactor_Services
|
||||
Declare function Get_Property, Dialog_Box
|
||||
$Insert EVENT_SETUP
|
||||
$Insert LOGICAL
|
||||
$Insert RDS_EQUATES
|
||||
$Insert REACT_LL_EQUATES
|
||||
$Insert REACTOR_EQUATES
|
||||
$Insert MSG_EQUATES
|
||||
|
||||
GoToEvent Event for CtrlEntId else
|
||||
// Event not implemented
|
||||
end
|
||||
|
||||
Return EventFlow or 1
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// EVENT HANDLERS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
ResponseValue = Set_Property(@Window, '@responsevalue', 0)
|
||||
RDSNo = CreateParam
|
||||
If RowExists('RDS', RDSNo) then
|
||||
Set_Property(@Window : '.EDL_RDS', 'TEXT', RDSNo)
|
||||
GoSub Refresh
|
||||
end else
|
||||
ResponseValue = Set_Property(@Window, '@responsevalue', 0)
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
end
|
||||
|
||||
End Event
|
||||
|
||||
Event WINDOW.CLOSE(CancelFlag)
|
||||
ResponseValue = Get_Property(@Window, '@responsevalue')
|
||||
End_Dialog(@Window, ResponseValue)
|
||||
end event
|
||||
|
||||
//Signature buttons
|
||||
|
||||
Event PUB_SIGN_UNLOAD_EX_1.CLICK()
|
||||
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
initParams = ''
|
||||
initParams<4> = 'Sign Unload Extra 1'
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||
Valid = Response<1>
|
||||
|
||||
If Valid then
|
||||
Rds_Services('SignUnloadExtra1', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 1 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_SIGN_LOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
OldReactorNo = RDSRec<RDS_REACTOR$>
|
||||
NewReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT')
|
||||
initParams = ''
|
||||
initParams<4> = 'Sign Load Extra 1'
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||
Valid = Response<1>
|
||||
|
||||
If Valid then
|
||||
If Qa_Services('LoadExtra1stReady', RDSNo) AND (OldReactorNo NE NewReactorNo) then
|
||||
Gosub ReactorChange
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('SignLoadExtra1', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 1 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
End else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
end
|
||||
GoSub Refresh
|
||||
|
||||
end event
|
||||
|
||||
Event PUB_SIGN_UNLOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
initParams = ''
|
||||
initParams<4> = 'Sign Unload Extra 2'
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||
Valid = Response<1>
|
||||
|
||||
If Valid then
|
||||
Rds_Services('SignUnloadExtra2', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 2 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_SIGN_LOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
OldReactorNo = RDSRec<RDS_REACTOR$>
|
||||
NewReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT')
|
||||
initParams = ''
|
||||
initParams<4> = 'Sign Load Extra 2'
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||
Valid = Response<1>
|
||||
|
||||
If Valid then
|
||||
If Qa_Services('LoadExtra2ndReady', RDSNo) AND (OldReactorNo NE NewReactorNo) then
|
||||
Gosub ReactorChange
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('SignLoadExtra2', RDSNo, @USER4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 2 Signed!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
End else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
end
|
||||
|
||||
GoSub Refresh
|
||||
|
||||
end event
|
||||
|
||||
//Clear Signature Buttons
|
||||
|
||||
Event PUB_CLEAR_UNLOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignUnloadExtra1', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 1 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_CLEAR_LOAD_EX_1.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignLoadExtra1', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 1 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_CLEAR_UNLOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignUnloadExtra2', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Unload Extra 2 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
Event PUB_CLEAR_LOAD_EX_2.CLICK()
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
Rds_Services('UnsignLoadExtra2', RDSNo, @User4)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Load Extra 2 unsigned!')
|
||||
end else
|
||||
Msg(@Window, Error_Services('GetMessage'))
|
||||
end
|
||||
GoSub Refresh
|
||||
end event
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// INTERNAL GO-SUBS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
***************
|
||||
Refresh:
|
||||
***************
|
||||
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
If RowExists('RDS', RDSNo) then
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
UnloadSigned = RDSRec<RDS_OPERATOR_OUT$>
|
||||
ReactorNo = RDSRec<RDS_REACTOR$>
|
||||
//Unload Extra 1
|
||||
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
|
||||
UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' )
|
||||
UnloadExtra1Date = OConv(RDSRec<RDS_OP_OUT_EX1_DATE$>, 'D')
|
||||
UnloadExtra1Time = Oconv(RDSRec<RDS_OP_OUT_EX1_TIME$>, 'MT')
|
||||
//Load Extra 1
|
||||
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
|
||||
LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' )
|
||||
LoadExtra1Date = Oconv(RDSRec<RDS_OP_IN_EX2_DATE$>, 'D')
|
||||
LoadExtra1Time = Oconv(RDSRec<RDS_OP_IN_EX2_TIME$>, 'MT')
|
||||
LoadExtra1Reactor = RDSRec<RDS_LOAD_EXTRA_1_REACTOR$>
|
||||
//Unload Extra 2
|
||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||
UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' )
|
||||
UnloadExtra2Date = Oconv(RDSRec<RDS_OP_OUT_EX2_DATE$>, 'D')
|
||||
UnloadExtra2Time = Oconv(RDSRec<RDS_OP_OUT_EX2_TIME$>, 'MT')
|
||||
//Load Extra 2
|
||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||
LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' )
|
||||
LoadExtra2Date = Oconv(RDSRec<RDS_OP_IN_EX3_DATE$>, 'D')
|
||||
LoadExtra2Time = Oconv(RDSRec<RDS_OP_IN_EX3_TIME$>, 'MT')
|
||||
LoadExtra2Reactor = RDSRec<RDS_LOAD_EXTRA_2_REACTOR$>
|
||||
|
||||
//Populate text fields
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_USER', 'TEXT', UnloadExtra1UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_DATE', 'TEXT', UnloadExtra1Date)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_1_TIME', 'TEXT', UnloadExtra1Time)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_1_USER', 'TEXT', LoadExtra1UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_1_DATE', 'TEXT', LoadExtra1Date)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_1_TIME', 'TEXT', LoadExtra1Time)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_USER', 'TEXT', UnloadExtra2UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_DATE', 'TEXT', UnloadExtra2Date)
|
||||
Set_Property(@Window : '.EDL_UNLOAD_EX_2_TIME', 'TEXT', UnloadExtra2Time)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_2_USER', 'TEXT', LoadExtra2UserFirstLast)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_2_DATE', 'TEXT', LoadExtra2Date)
|
||||
Set_Property(@Window : '.EDL_LOAD_EX_2_TIME', 'TEXT', LoadExtra2Time)
|
||||
If LoadExtra1Reactor NE '' then
|
||||
Set_Property(@Window : '.EDL_REACTOR1', 'TEXT', LoadExtra1Reactor)
|
||||
end else
|
||||
Set_Property(@Window : '.EDL_REACTOR1', 'TEXT', ReactorNo)
|
||||
end
|
||||
If LoadExtra2Reactor NE '' then
|
||||
Set_Property(@Window : '.EDL_REACTOR2', 'TEXT', LoadExtra2Reactor)
|
||||
end else
|
||||
Set_Property(@Window : '.EDL_REACTOR2', 'TEXT', ReactorNo)
|
||||
end
|
||||
If UnloadSigned EQ '' then
|
||||
Set_Property(@Window : '.EDL_REACTOR1', 'ENABLED', True$)
|
||||
Set_Property(@Window : '.EDL_REACTOR2', 'ENABLED', True$)
|
||||
end else
|
||||
Set_Property(@Window : '.EDL_REACTOR1', 'ENABLED', False$)
|
||||
Set_Property(@Window : '.EDL_REACTOR2', 'ENABLED', False$)
|
||||
end
|
||||
If UnloadExtra1Signature NE '' then
|
||||
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_1', 'ENABLED', False$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_1', 'ENABLED', True$)
|
||||
end else
|
||||
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_1', 'ENABLED', True$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_1', 'ENABLED', False$)
|
||||
end
|
||||
If UnloadExtra2Signature NE '' then
|
||||
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_2', 'ENABLED', False$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_2', 'ENABLED', True$)
|
||||
end else
|
||||
Set_Property(@Window : '.PUB_SIGN_UNLOAD_EX_2', 'ENABLED', True$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_UNLOAD_EX_2', 'ENABLED', False$)
|
||||
end
|
||||
If LoadExtra1Signature NE '' then
|
||||
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_1', 'ENABLED', False$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_1', 'ENABLED', True$)
|
||||
end else
|
||||
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_1', 'ENABLED', True$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_1', 'ENABLED', False$)
|
||||
end
|
||||
If LoadExtra2Signature NE '' then
|
||||
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_2', 'ENABLED', False$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_2', 'ENABLED', True$)
|
||||
end else
|
||||
Set_Property(@Window : '.PUB_SIGN_LOAD_EX_2', 'ENABLED', True$)
|
||||
Set_Property(@Window : '.PUB_CLEAR_LOAD_EX_2', 'ENABLED', False$)
|
||||
end
|
||||
end else
|
||||
ResponseValue = Set_Property(@Window, '@responsevalue', 0)
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
ReactorChange:
|
||||
|
||||
RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT')
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
ReactorNo = ''
|
||||
LLChosen = ''
|
||||
ChangePermitted = False$
|
||||
Begin Case
|
||||
|
||||
Case Control EQ 'PUB_SIGN_LOAD_EX_1'
|
||||
ReactorNo = Get_Property(@Window : '.EDL_REACTOR1', 'TEXT')
|
||||
ReactorField = RDS_LOAD_EXTRA_1_REACTOR$
|
||||
Case Control EQ 'PUB_SIGN_LOAD_EX_2'
|
||||
ReactorNo = Get_Property(@Window : '.EDL_REACTOR2', 'TEXT')
|
||||
ReactorField = RDS_LOAD_EXTRA_2_REACTOR$
|
||||
Case Otherwise$
|
||||
|
||||
End Case
|
||||
|
||||
If ReactorNo NE '' then
|
||||
PickPlace = Xlate('REACTOR', ReactorNo, 'PICK_PLACE', 'X')
|
||||
If (Reactor_Services('GetReactorAvailChamberCount', ReactorNo) NE 0) OR (PickPlace EQ False$) then
|
||||
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||
ClearSelect
|
||||
Set_Status(0)
|
||||
RList(Query, TARGET_ACTIVELIST$, '', '' '')
|
||||
SchedReactors = ''
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext SchedReactor else EOF = True$
|
||||
Until EOF
|
||||
SchedReactors<0, -1> = SchedReactor
|
||||
Repeat
|
||||
|
||||
Locate ReactorNo in SchedReactors using @VM setting vPos then
|
||||
If PickPlace EQ True$ then
|
||||
LLDisabled = XLATE('REACTOR', ReactorNo, 'ACTIVE_LL_DISABLED', 'X')
|
||||
IF LLDisabled NE '' then
|
||||
ReactLLRec = Database_Services('ReadDataRow', 'REACT_LL', LLDisabled)
|
||||
SideDisabled = ReactLLRec<REACT_LL_DISABLED$>
|
||||
QualMode = ReactLLRec<REACT_LL_QUAL_MODE$>
|
||||
Begin Case
|
||||
Case SideDisabled EQ 'L'
|
||||
LLChosen = 'R'
|
||||
Case SideDisabled EQ 'R'
|
||||
LLChosen = 'L'
|
||||
End Case
|
||||
end else
|
||||
Def = ''
|
||||
Def<MCAPTION$> = 'Select Load Lock'
|
||||
Def<MTYPE$> = 'BLeft,Right'
|
||||
Def<MTEXT$> = 'Please select a load lock.'
|
||||
Def<MMODAL$> = 'A'
|
||||
LLResponse = Msg(@Window, Def)
|
||||
Begin Case
|
||||
Case LLResponse EQ 1
|
||||
LLChosen = 'L'
|
||||
Case LLResponse EQ 2
|
||||
LLChosen = 'R'
|
||||
End Case
|
||||
end
|
||||
If LLChosen NE '' then
|
||||
ChangePermitted = True$
|
||||
end else
|
||||
Error_Services('Add', 'You must select a load lock for this lot.')
|
||||
end
|
||||
end else
|
||||
ChangePermitted = True$
|
||||
end
|
||||
end else
|
||||
Swap @VM with ',' in SchedReactors
|
||||
Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Invalid Reactor number.')
|
||||
end
|
||||
If ChangePermitted then
|
||||
RDSRec<RDS_REACTOR$> = ReactorNo
|
||||
RDSRec<ReactorField> = ReactorNo
|
||||
RDSRec<RDS_LOAD_LOCK_SIDE$> = LLChosen
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Msg(@Window, 'Reactor successfully changed!')
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -39,8 +39,6 @@ $Insert POPUP_EQUATES
|
||||
$Insert NOTIFICATION_EQUATES
|
||||
$Insert LSL_USERS_EQUATES
|
||||
|
||||
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
|
||||
|
||||
Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array
|
||||
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
|
||||
|
||||
@ -643,3 +641,4 @@ return
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -39,8 +39,6 @@ $Insert POPUP_EQUATES
|
||||
$Insert SEC_GROUPS_EQUATES
|
||||
$Insert LSL_USERS_EQUATES
|
||||
|
||||
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
|
||||
|
||||
Declare function Admin_User, Database_Services, Error_Services, Active_Directory_Services, SRP_Array
|
||||
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
|
||||
|
||||
@ -726,3 +724,4 @@ UnlockRec:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
@ -145,7 +145,7 @@ Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_
|
||||
Declare subroutine Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS
|
||||
Declare subroutine Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log
|
||||
Declare subroutine RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch
|
||||
Declare subroutine Override_Services, Reactor_Services, Lot_Services, Obj_Notes, Mona_Services, Service_Services
|
||||
Declare subroutine Override_Services, Reactor_Services, Lot_Services, Mona_Services, Service_Services, Obj_Notes
|
||||
Declare subroutine Transaction_Services
|
||||
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
|
||||
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
|
||||
@ -1828,22 +1828,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
PSNo = RDSRec<RDS_PROD_SPEC_ID$>
|
||||
WOStep = Xlate('RDS', RDSNo, 'WO_STEP', 'X')
|
||||
|
||||
BEGIN CASE
|
||||
CASE OrgReactNo = '' AND Reactor NE ''
|
||||
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
|
||||
CASE OrgReactNo NE '' AND Reactor = ''
|
||||
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
|
||||
CASE OrgReactNo NE Reactor
|
||||
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
|
||||
CASE Otherwise$
|
||||
NULL
|
||||
|
||||
END CASE
|
||||
|
||||
// Need to update/save RDS record before calling RDS_React_Run
|
||||
RDSRec<RDS_REACTOR$> = Reactor
|
||||
RDSRec<RDS_VERIFY_QTY$> = WaferQty
|
||||
@ -2013,11 +1997,11 @@ end service
|
||||
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
|
||||
StartTick = GetTickCount()
|
||||
MetricName = 'LoadSignatureReady'
|
||||
|
||||
ErrorMsg = ''
|
||||
Error_Services('Clear')
|
||||
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
|
||||
ErrorMessage = 'Process Error: RDSNo, Username, or WaferQty not supplied in the ':Service:' service.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
ErrorMsg = 'Process Error: RDSNo, Username, or WaferQty not supplied in the ':Service:' service.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
@ -2055,15 +2039,15 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
ReactorCapacity = Reactor_Services('GetReactorAvailChamberCount', Reactor)
|
||||
If ReactorCapacity LE 0 then
|
||||
|
||||
ErrorMessage = 'Process Error: Reactor ' : Reactor : ' does not have the capacity for this lot.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
ErrorMsg = 'Process Error: Reactor ' : Reactor : ' does not have the capacity for this lot.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
|
||||
If WaferQty NE SchedQty then
|
||||
ErrorMessage = 'Process Error: Verified wafer quantity does not match the scheduled quantity.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
ErrorMsg = 'Process Error: Verified wafer quantity does not match the scheduled quantity.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
@ -2083,8 +2067,8 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
// the parameters. If they do not confirm them, then we need to stop the load signature.
|
||||
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
|
||||
If RDSLayerAckReq EQ True$ then
|
||||
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
ErrorMsg = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
@ -2167,9 +2151,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$>
|
||||
|
||||
If ROTRStatus EQ 'F' then
|
||||
ErrorMessage = 'Process Error: Unable to load reactor due to ROTR load block. ' |
|
||||
ErrorMsg = 'Process Error: Unable to load reactor due to ROTR load block. ' |
|
||||
: 'A lead or supervisor must clear the ROTR load block.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
@ -2252,20 +2236,180 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
// Add check for supplement signatures
|
||||
UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
|
||||
If UnacknowledgedSupp NE FALSE$ then
|
||||
ErrorMessage = 'The LOAD stage supplements must be acknowledged before the load operation can be signed.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
ErrorMsg = 'The LOAD stage supplements must be acknowledged before the load operation can be signed.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
|
||||
If Error_Services('NoError') then
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
end service
|
||||
|
||||
Service UnsignLoadSignatureReady(RDSNo)
|
||||
|
||||
ErrorMessage = ''
|
||||
UnsignEligible = True$
|
||||
|
||||
If RowExists('RDS', RDSNo) then
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$)
|
||||
If Error_Services('NoError') then
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
CassNo = RDSRec<RDS_CASS_NO$>
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
If RowExists('WO_MAT', WoMatKey) then
|
||||
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey)
|
||||
|
||||
//Cases to check for various statuses that should block unsigning the unload.
|
||||
Begin Case
|
||||
Case WOMatCurrStatus EQ 'HOLD'
|
||||
ErrorMessage = 'Cassette is on HOLD and may not have the signature removed.'
|
||||
Case Otherwise$
|
||||
|
||||
End Case
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
//Check if any subsequent signature are set. If so RDS is not eligible.
|
||||
UnloadExtra1Sig = RDSRec<RDS_OP_OUT_EX1$>
|
||||
LoadExtra1Sig = RDSRec<RDS_OP_IN_EX2$>
|
||||
UnloadExtra2Sig = RDSRec<RDS_OP_OUT_EX2$>
|
||||
LoadExtra2Sig = RDSRec<RDS_OP_IN_EX3$>
|
||||
UnloadSig = RDSRec<RDS_OPERATOR_OUT$>Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X')
|
||||
CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X')
|
||||
swap @VM with '' in CISigs
|
||||
ReactorType = XLATE('RDS', RDSNo, 'REACTOR_TYPE', 'X')
|
||||
If ReactorType NE 'EPP' Then
|
||||
FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
|
||||
end else
|
||||
WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X')
|
||||
FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X')
|
||||
end
|
||||
|
||||
Begin Case
|
||||
Case FQASig NE ''
|
||||
ErrorMessage = 'FQA Signature is set.'
|
||||
Case CISigs NE ''
|
||||
ErrorMessage = 'Clean and Inspect Signatures are set.'
|
||||
Case UnloadSig NE ''
|
||||
ErrorMessage = 'Unload signature is set.'
|
||||
Case LoadExtra2Sig NE ''
|
||||
ErrorMessage = 'Load extra 2 signature is set.'
|
||||
Case UnloadExtra2Sig NE ''
|
||||
ErrorMessage = 'Unload extra 2 signature is set.'
|
||||
Case LoadExtra1Sig NE ''
|
||||
ErrorMessage = 'Load extra 1 signature is set.'
|
||||
Case UnloadExtra1Sig NE ''
|
||||
ErrorMessage = 'Unload extra 1 signature is set.'
|
||||
End Case
|
||||
|
||||
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to locate the WO_MAT record for this RDS in the WO_MAT table.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error reading RDS Record. ' : Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorMessage = 'Unable to locate RDS in the RDS Table.'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
UnsignEligible = False$
|
||||
ErrorMessage = 'Process Error: Unable to verify the load signature is Eligible to be unsigned: ' : ErrorMessage
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
Response = UnsignEligible
|
||||
|
||||
end service
|
||||
|
||||
Service UnsignLoadSignatureReady(RDSNo)
|
||||
|
||||
ErrorMessage = ''
|
||||
UnsignEligible = True$
|
||||
|
||||
If RowExists('RDS', RDSNo) then
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$)
|
||||
If Error_Services('NoError') then
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
CassNo = RDSRec<RDS_CASS_NO$>
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
If RowExists('WO_MAT', WoMatKey) then
|
||||
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey)
|
||||
|
||||
//Cases to check for various statuses that should block unsigning the unload.
|
||||
Begin Case
|
||||
Case WOMatCurrStatus EQ 'HOLD'
|
||||
ErrorMessage = 'Cassette is on HOLD and may not have the signature removed.'
|
||||
Case Otherwise$
|
||||
|
||||
End Case
|
||||
|
||||
If ErrorMessage EQ '' then
|
||||
//Check if any subsequent signature are set. If so RDS is not eligible.
|
||||
UnloadExtra1Sig = RDSRec<RDS_OP_OUT_EX1$>
|
||||
LoadExtra1Sig = RDSRec<RDS_OP_IN_EX2$>
|
||||
UnloadExtra2Sig = RDSRec<RDS_OP_OUT_EX2$>
|
||||
LoadExtra2Sig = RDSRec<RDS_OP_IN_EX3$>
|
||||
UnloadSig = RDSRec<RDS_OPERATOR_OUT$>Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X')
|
||||
CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X')
|
||||
swap @VM with '' in CISigs
|
||||
ReactorType = XLATE('RDS', RDSNo, 'REACTOR_TYPE', 'X')
|
||||
If ReactorType NE 'EPP' Then
|
||||
FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
|
||||
end else
|
||||
WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X')
|
||||
FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X')
|
||||
end
|
||||
|
||||
Begin Case
|
||||
Case FQASig NE ''
|
||||
ErrorMessage = 'FQA Signature is set.'
|
||||
Case CISigs NE ''
|
||||
ErrorMessage = 'Clean and Inspect Signatures are set.'
|
||||
Case UnloadSig NE ''
|
||||
ErrorMessage = 'Unload signature is set.'
|
||||
Case LoadExtra2Sig NE ''
|
||||
ErrorMessage = 'Load extra 2 signature is set.'
|
||||
Case UnloadExtra2Sig NE ''
|
||||
ErrorMessage = 'Unload extra 2 signature is set.'
|
||||
Case LoadExtra1Sig NE ''
|
||||
ErrorMessage = 'Load extra 1 signature is set.'
|
||||
Case UnloadExtra1Sig NE ''
|
||||
ErrorMessage = 'Unload extra 1 signature is set.'
|
||||
End Case
|
||||
|
||||
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Unable to locate the WO_MAT record for this RDS in the WO_MAT table.'
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Error reading RDS Record. ' : Error_Services('GetMessage')
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorMessage = 'Unable to locate RDS in the RDS Table.'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
UnsignEligible = False$
|
||||
ErrorMessage = 'Process Error: Unable to verify the load signature is Eligible to be unsigned: ' : ErrorMessage
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
|
||||
Response = UnsignEligible
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -2279,6 +2423,31 @@ Service LoadExtra1stReady(RDSNo)
|
||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
|
||||
If Reactor NE '' then
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||
ClearSelect
|
||||
Set_Status(0)
|
||||
RList(Query, TARGET_ACTIVELIST$, '', '' '')
|
||||
SchedReactors = ''
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext SchedReactor else EOF = True$
|
||||
Until EOF
|
||||
SchedReactors<0, -1> = SchedReactor
|
||||
Repeat
|
||||
|
||||
Locate Reactor in SchedReactors using @VM setting vPos else
|
||||
Swap @VM with ',' in SchedReactors
|
||||
ErrorMessage = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||
Response = True$
|
||||
end
|
||||
@ -2315,6 +2484,31 @@ Service LoadExtra2ndReady(RDSNo)
|
||||
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
|
||||
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
|
||||
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
|
||||
If Reactor NE '' then
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||
ClearSelect
|
||||
Set_Status(0)
|
||||
RList(Query, TARGET_ACTIVELIST$, '', '' '')
|
||||
SchedReactors = ''
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext SchedReactor else EOF = True$
|
||||
Until EOF
|
||||
SchedReactors<0, -1> = SchedReactor
|
||||
Repeat
|
||||
|
||||
Locate Reactor in SchedReactors using @VM setting vPos else
|
||||
Swap @VM with ',' in SchedReactors
|
||||
ErrorMessage = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||
Response = True$
|
||||
end
|
||||
@ -2400,62 +2594,6 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
|
||||
IF ReactorType NE 'EPP' THEN
|
||||
|
||||
WOMatRec = XLATE('WO_MAT',WONo:'*':CassNo,'','X')
|
||||
WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
SigAction = WOStep:'LOAD'
|
||||
|
||||
LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
|
||||
CurrDTM = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
|
||||
END ELSE
|
||||
WOMatSig = ''
|
||||
END
|
||||
RDSSig = Xlate('RDS', RDSNo, 'OPERATOR_IN', 'X')
|
||||
|
||||
BEGIN CASE
|
||||
CASE WOMatSig = '' AND RDSSig NE ''
|
||||
|
||||
* Signature missing on WO_MAT
|
||||
SigDate = RDSRec<RDS_DATE_IN$>
|
||||
SigTime = RDSRec<RDS_TIME_IN$>
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'LOAD':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||
* Sets LOAD signature
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
END else
|
||||
Response = True$
|
||||
end
|
||||
return
|
||||
|
||||
CASE RDSSig = '' AND WOMatSig NE ''
|
||||
|
||||
* Signature missing on RDS
|
||||
CurrDate = CurrDTM[1,' ']
|
||||
CurrTime = CurrDTM[COL2()+1,' ']
|
||||
RDSRec<RDS_OPERATOR_IN$> = WOMatSig
|
||||
RDSRec<RDS_DATE_IN$> = IConv(CurrDate, 'D')
|
||||
RDSRec<RDS_TIME_IN$> = IConv(CurrTime, 'MT')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Response = True$
|
||||
return
|
||||
|
||||
CASE RDSSig NE '' AND WOMatSig NE ''
|
||||
ErrorMsg = 'Process Error: Load stage has already been signed.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
RETURN
|
||||
|
||||
CASE Otherwise$
|
||||
Null
|
||||
// Continue
|
||||
END CASE
|
||||
|
||||
END
|
||||
|
||||
SigDt = OCONV( Date(), 'D2/' )
|
||||
SigTm = OCONV( Time(), 'MTS' )
|
||||
@ -3682,6 +3820,48 @@ Service SignFQAStage(RDSNo, Username)
|
||||
|
||||
end service
|
||||
|
||||
Service UnsignPreEpiReady(RDSNo)
|
||||
|
||||
ErrorMsg = ''
|
||||
UnsignPreEpiReady = False$
|
||||
|
||||
If RDSNo NE '' then
|
||||
If RowExists('RDS', RDSNo) then
|
||||
If Error_Services('NoError') then
|
||||
//Call on the same logic to determine if the unsign LOAD signature is ready
|
||||
UnsignLoadReady = QA_Services('UnsignLoadSignatureReady', RDSNo)
|
||||
if Error_Services('NoError') then
|
||||
If UnsignLoadReady then
|
||||
//Check if LOAD signature is present
|
||||
LoadSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_OPERATOR_IN$, True$, 0, False$)
|
||||
If LoadSig EQ '' then
|
||||
UnsignPreEpiReady = True$
|
||||
end else
|
||||
ErrorMsg = 'Load signature is set.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'A signature beyond pre-epi exists. Please check later stages of this RDS.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'RDS ' : RDSNo : ' was not found in database.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'RDS No was null'
|
||||
end
|
||||
|
||||
If ErrorMsg NE '' then
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
Response = UnsignPreEpiReady
|
||||
|
||||
end service
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
@ -3695,3 +3875,11 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -67,7 +67,8 @@ Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Ser
|
||||
Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services
|
||||
Declare function Rds_Services, SRP_DateTime, SRP_Math, obj_WO_Mat, Lot_Services, SRP_Array
|
||||
Declare function Lot_Event_Services, GetTickCount, Work_Order_Services
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services, Mona_Services
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Service_Services, obj_WO_React
|
||||
Declare Subroutine Mona_Services
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
@ -766,10 +767,10 @@ WRITE_RECORD_PRE:
|
||||
|
||||
// Look for UNLOAD_DTM override
|
||||
Override = Override_Services('GetOverride', 'RDS', RDSNo, 'UNLOAD_DTM')
|
||||
|
||||
|
||||
Begin Case
|
||||
|
||||
Case ( (OrigLoadSig NE '') and (OrigReactor NE NewReactor) )
|
||||
Case ( (OrigTimeOutSig NE '') and (OrigReactor NE NewReactor) )
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = @USER4
|
||||
@ -778,28 +779,11 @@ WRITE_RECORD_PRE:
|
||||
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||
|
||||
// User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write.
|
||||
Error_Services('Add', 'Reactor number cannot be changed or removed once the load signature is set!')
|
||||
OrigFileError = 104:': Reactor number cannot be changed or removed once the load signature is set!'
|
||||
Error_Services('Add', 'Reactor number cannot be changed or removed once the unload signature is set!')
|
||||
OrigFileError = 104:': Reactor number cannot be changed or removed once the unload signature is set!'
|
||||
Status = 0
|
||||
Record = ''
|
||||
ActionFlow = ACTION_STOP$
|
||||
|
||||
Case ( (OrigVerSig NE '') and (NewVerSig EQ '') ) or ( (OrigVerDate NE '') and (NewVerDate EQ '') ) |
|
||||
or ( (OrigVerTime NE '') and (NewVerTime EQ '') ) or ( (NewVerDate EQ '') and (NewVerTime NE '') ) |
|
||||
or ( (NewVerDate NE '') and (NewVerTime EQ '') )
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = @USER4
|
||||
LogData<3> = RDSKeyID
|
||||
LogData<4> = 'Signature data cannot be removed!'
|
||||
Logging_Services('AppendLog', ObjLog, LogData, @RM, @FM, False$)
|
||||
|
||||
// User is attempting to erase data that is prohibited from being erased Set the FS104 error and block the write.
|
||||
Error_Services('Add', 'Signature data cannot be removed!')
|
||||
OrigFileError = 104:': Signature data cannot be removed!'
|
||||
Status = 0
|
||||
Record = ''
|
||||
ActionFlow = ACTION_STOP$
|
||||
|
||||
Case ( (VerDTM GT CurrDTM) or (LoadDTM GT CurrDTM) or (LoadEx2DTM GT CurrDTM) or (LoadEx3DTM GT CurrDTM) |
|
||||
or (UnloadEx1DTM GT CurrDTM) or (UnloadEx2DTM GT CurrDTM) or (UnloadDTM GT CurrDTM) |
|
||||
@ -861,6 +845,7 @@ WRITE_RECORD_PRE:
|
||||
|
||||
EndTick = GetTickCount()
|
||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@ -880,6 +865,32 @@ WRITE_RECORD:
|
||||
OrigDateOut = OrigRecord<RDS_DATE_OUT$>
|
||||
NewDateOut = Record<RDS_DATE_OUT$>
|
||||
|
||||
RDSNo = {SEQ}
|
||||
Reactor = Record<RDS_REACTOR$>
|
||||
OrgReactNo = OrigRecord<RDS_REACTOR$>
|
||||
CassNo = Record<RDS_CASS_NO$>
|
||||
PSNo = Record<RDS_PROD_SPEC_ID$>
|
||||
WOStep = Xlate('RDS', RDSNo, 'WO_STEP', 'X')
|
||||
|
||||
BEGIN CASE
|
||||
CASE OrgReactNo = '' AND Reactor NE ''
|
||||
//Assignment to a reactor where there was no prior assigned reactor
|
||||
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
|
||||
CASE OrgReactNo NE '' AND Reactor = ''
|
||||
//Reactor Assignment is being cleared.
|
||||
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
|
||||
CASE OrgReactNo NE Reactor
|
||||
//Reactor Assignment is changing
|
||||
obj_WO_React('RemRdsNo',WONo:@RM:WOStep:@RM:OrgReactNo:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
obj_WO_React('AddRdsNo',WONo:@RM:WOStep:@RM:Reactor:@RM:RDSNo:@RM:CassNo:@RM:PSNo)
|
||||
|
||||
CASE Otherwise$
|
||||
NULL
|
||||
|
||||
END CASE
|
||||
|
||||
If ( ( (OrigDateOut EQ '') and (NewDateOut NE '') ) ) then
|
||||
// Mark this cassette as processed in the schedule event record
|
||||
DatetimeOut = {DATETIME_OUT}
|
||||
@ -1003,3 +1014,4 @@ Restore_System_Variables:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
@ -82,8 +82,6 @@ Equ COL$MET_SIG_DTM to 12
|
||||
|
||||
Equ MSG_WIDTH$ to 600
|
||||
|
||||
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
|
||||
|
||||
Declare subroutine ErrMsg, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, obj_RDS, Set_Property, Send_Event, Database_Services
|
||||
Declare subroutine Dialog_Box, Qa_Services, Obj_React_Ll, Start_Window, obj_React_Status, Reactor_Services, Rds_Services
|
||||
Declare subroutine Lot_Event_Services, Override_Log_Services, Logging_Services
|
||||
@ -170,7 +168,8 @@ end event
|
||||
|
||||
|
||||
Event PUB_SIGN.CLICK()
|
||||
|
||||
|
||||
|
||||
RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT')
|
||||
ReactorType = Get_Property(@WINDOW:'.REACTOR_TYPE','TEXT')
|
||||
LoadLockVal = Get_Property(@WINDOW:'.LOAD_LOCK_SIDE_HIDDEN','TEXT')
|
||||
@ -183,365 +182,345 @@ Event PUB_SIGN.CLICK()
|
||||
LSIDArray = Get_Property(@WINDOW:'.RDS_LS_ID','ARRAY')
|
||||
Preauthenticated = FALSE$
|
||||
SignEventType = Get_Property(CtrlEntID, 'TEXT')
|
||||
|
||||
WoMatKey = WONo : '*' : CassNo
|
||||
|
||||
Begin Case
|
||||
|
||||
Case SignEventType EQ 'Sign'
|
||||
|
||||
debug
|
||||
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
||||
WfrQty = Get_Property(@WINDOW:'.WAFERS_IN','TEXT')
|
||||
LLSide = Get_Property(@Window:'.LOAD_LOCK_SIDE', 'DEFPROP')
|
||||
|
||||
Reactor = Get_Property(@Window:'.REACTOR', 'TEXT')
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
||||
ReactorType = ReactorRec<REACTOR_REACT_TYPE$>
|
||||
ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X')
|
||||
|
||||
// Don't allow tracking in on down reactor
|
||||
ReactorCurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 1, 'X')
|
||||
ReactCurrModeRec = Database_Services('ReadDataRow','REACT_MODE_NG', ReactorCurrModeKey, '','','')
|
||||
CurrReactMode = ReactCurrModeRec<REACT_MODE_NG_MODE$>
|
||||
CurrE10State = Xlate('REACTOR_MODES', CurrReactMode, REACTOR_MODES_E10_STATE$, 'X')
|
||||
|
||||
Override = False$
|
||||
UserVerification = ''
|
||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
|
||||
|
||||
ReactorIsDown = CurrE10State _NEC 'PRODUCTIVE'
|
||||
If (ReactorIsDown EQ True$) then
|
||||
// Allow override during prove in
|
||||
If ReactorType EQ 'EPP' then
|
||||
If RDS_Services('IsEpiProTestRun', RDSNo) then Override = True$
|
||||
Reactor = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_REACTOR$, True$, 0, False$)
|
||||
If Reactor NE '' then
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
||||
ReactorType = ReactorRec<REACTOR_REACT_TYPE$>
|
||||
ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X')
|
||||
|
||||
// Don't allow tracking in on down reactor
|
||||
ReactorCurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 1, 'X')
|
||||
ReactCurrModeRec = Database_Services('ReadDataRow','REACT_MODE_NG', ReactorCurrModeKey, '','','')
|
||||
CurrReactMode = ReactCurrModeRec<REACT_MODE_NG_MODE$>
|
||||
CurrE10State = Xlate('REACTOR_MODES', CurrReactMode, REACTOR_MODES_E10_STATE$, 'X')
|
||||
|
||||
Override = False$
|
||||
UserVerification = ''
|
||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
|
||||
|
||||
ReactorIsDown = CurrE10State _NEC 'PRODUCTIVE'
|
||||
If (ReactorIsDown EQ True$) then
|
||||
// Allow override during prove in
|
||||
If ReactorType EQ 'EPP' then
|
||||
If RDS_Services('IsEpiProTestRun', RDSNo) then Override = True$
|
||||
end
|
||||
|
||||
If Override EQ False$ then
|
||||
UserMsg = "Reactor down. Override required from a lead or supervisor."
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||
Override = UserVerification<1>
|
||||
end
|
||||
end
|
||||
|
||||
If Override EQ False$ then
|
||||
UserMsg = "Reactor down. Override required from a lead or supervisor."
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||
Override = UserVerification<1>
|
||||
end
|
||||
end
|
||||
|
||||
If (ReactorIsDown NE True$) OR (Override EQ True$) then
|
||||
If (ReactorType EQ 'ASM+' OR ReactorType EQ 'HTR' OR ReactorType EQ 'ASM') AND (ROTREnabled EQ True$) then
|
||||
ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$>
|
||||
If ROTRStatus EQ 'F' then
|
||||
FailReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
||||
Message = 'Unable to load reactor.' : CRLF$ : FailReason
|
||||
RotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||
If RotrOverrideCount EQ '' then RotrOverrideCount = 0
|
||||
Message := CRLF$ : RotrOverrideCount : ' override(s) were performed since the ROTR block was originally set.'
|
||||
Message := CRLF$ : 'A lead or supervisor must override to clear ROTR status.'
|
||||
|
||||
Response = Msg(@Window, '', 'RDS_ROTR_OVERRIDE', '', Message)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
Response = True$ ; // User Clicked Override
|
||||
Case Response EQ 2
|
||||
Response = False$ ; // User Clicked Cancel
|
||||
Case Response EQ char(27)
|
||||
Response = False$ ; // User Pressed Escape Key
|
||||
End Case
|
||||
|
||||
If Response EQ True$ then
|
||||
If UserVerification EQ '' then
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups)
|
||||
end
|
||||
Valid = UserVerification<1>
|
||||
If Valid EQ True$ then
|
||||
// Prompt user for a comment
|
||||
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)
|
||||
|
||||
IF ResponseComment<2> NE '' THEN
|
||||
// Clear ROTR reactor load block.
|
||||
overrideLogTable = 'RDS':@VM:'REACTOR'
|
||||
overrideLogKey = RDSNo:@VM:Reactor
|
||||
overrideLogUser = Response<2>
|
||||
overrideLogComment = ResponseComment<2>
|
||||
overrideLogCategory = 'ROTR_BLOCK'
|
||||
overrideLogCause = FailReason
|
||||
orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory, overrideLogCause)
|
||||
|
||||
//Add override key to RDS
|
||||
RDSRec = Xlate('RDS', RDSNo, '', 'X')
|
||||
RDSRec = Insert(RDSRec, RDS_OVERRIDE_KEYS$, 1, 0, orKey)
|
||||
|
||||
ReactorRec<REACTOR_ROTR_STATUS$> = 'P'
|
||||
|
||||
rotrStatusReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
||||
ReactorRec<REACTOR_PREVIOUS_ROTR_STATUS_REASON$> = rotrStatusReason
|
||||
ReactorRec<REACTOR_ROTR_STATUS_REASON$> = ''
|
||||
|
||||
ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$> = RDSNo
|
||||
|
||||
rotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||
ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$> = rotrOverrideCount + 1
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
If (ReactorIsDown NE True$) OR (Override EQ True$) then
|
||||
If (ReactorType EQ 'ASM+' OR ReactorType EQ 'HTR' OR ReactorType EQ 'ASM') AND (ROTREnabled EQ True$) then
|
||||
ROTRStatus = ReactorRec<REACTOR_ROTR_STATUS$>
|
||||
If ROTRStatus EQ 'F' then
|
||||
FailReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
||||
Message = 'Unable to load reactor.' : CRLF$ : FailReason
|
||||
RotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||
If RotrOverrideCount EQ '' then RotrOverrideCount = 0
|
||||
Message := CRLF$ : RotrOverrideCount : ' override(s) were performed since the ROTR block was originally set.'
|
||||
Message := CRLF$ : 'A lead or supervisor must override to clear ROTR status.'
|
||||
|
||||
Response = Msg(@Window, '', 'RDS_ROTR_OVERRIDE', '', Message)
|
||||
|
||||
Begin Case
|
||||
Case Response EQ 1
|
||||
Response = True$ ; // User Clicked Override
|
||||
Case Response EQ 2
|
||||
Response = False$ ; // User Clicked Cancel
|
||||
Case Response EQ char(27)
|
||||
Response = False$ ; // User Pressed Escape Key
|
||||
End Case
|
||||
|
||||
If Response EQ True$ then
|
||||
If UserVerification EQ '' then
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups)
|
||||
end
|
||||
Valid = UserVerification<1>
|
||||
If Valid EQ True$ then
|
||||
// Prompt user for a comment
|
||||
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)
|
||||
|
||||
IF ResponseComment<2> NE '' THEN
|
||||
// Clear ROTR reactor load block.
|
||||
overrideLogTable = 'RDS':@VM:'REACTOR'
|
||||
overrideLogKey = RDSNo:@VM:Reactor
|
||||
overrideLogUser = Response<2>
|
||||
overrideLogComment = ResponseComment<2>
|
||||
overrideLogCategory = 'ROTR_BLOCK'
|
||||
overrideLogCause = FailReason
|
||||
orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory, overrideLogCause)
|
||||
|
||||
//Add override key to RDS
|
||||
RDSRec = Xlate('RDS', RDSNo, '', 'X')
|
||||
RDSRec = Insert(RDSRec, RDS_OVERRIDE_KEYS$, 1, 0, orKey)
|
||||
|
||||
ReactorRec<REACTOR_ROTR_STATUS$> = 'P'
|
||||
|
||||
rotrStatusReason = ReactorRec<REACTOR_ROTR_STATUS_REASON$>
|
||||
ReactorRec<REACTOR_PREVIOUS_ROTR_STATUS_REASON$> = rotrStatusReason
|
||||
ReactorRec<REACTOR_ROTR_STATUS_REASON$> = ''
|
||||
|
||||
ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$> = RDSNo
|
||||
|
||||
rotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||
ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$> = rotrOverrideCount + 1
|
||||
|
||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
|
||||
end else
|
||||
//No Comment added. Block Load Signaure
|
||||
Msg(@Window, 'A comment is required to perform an ROTR Block Override', '', '', '')
|
||||
return
|
||||
end
|
||||
end else
|
||||
//No Comment added. Block Load Signaure
|
||||
Msg(@Window, 'A comment is required to perform an ROTR Block Override', '', '', '')
|
||||
// ROTR override not verified. Block load signature.
|
||||
return
|
||||
end
|
||||
end else
|
||||
// ROTR override not verified. Block load signature.
|
||||
// Block load signature
|
||||
return
|
||||
end
|
||||
end else
|
||||
// Block load signature
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SupplAckReq = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
|
||||
IF (SupplAckReq NE FALSE$) then
|
||||
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$)
|
||||
If Response EQ False$ then
|
||||
return
|
||||
end else
|
||||
PreAuthenticated = TRUE$
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
|
||||
If RDSLayerAckReq EQ True$ then
|
||||
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
||||
ErrMsg(ErrorMessage)
|
||||
LayerKeys = Xlate('RDS', RDSNo, 'RDS_LAYER_KEYS', 'X')
|
||||
// Just display the first layer
|
||||
RDSLSID = LayerKeys<0, 1>
|
||||
Dialog_Box('RDS_LAYER', @Window, RDSLSID)
|
||||
|
||||
RDSLayerAck = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK', 'X')
|
||||
If ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) then
|
||||
ErrorMessage = 'RDS layer parameters were not acknowledged. Sign load stage event aborting.'
|
||||
ErrMsg(ErrorMessage)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
FWIInstAckReq = Xlate('RDS', RDSNo, 'FWI_INST_ACK_REQ', 'X')
|
||||
If (FWIInstAckReq EQ True$) then
|
||||
Response = RDS_Services('RDSVerifyInst', RDSNo, 'FWI')
|
||||
If Response EQ False$ then return
|
||||
end
|
||||
|
||||
LoadInstAckReq = Xlate('RDS', RDSNo, 'LOAD_INST_ACK_REQ', 'X')
|
||||
If (LoadInstAckReq EQ True$) then
|
||||
Response = RDS_Services('RDSVerifyInst', RDSNo, 'LOAD')
|
||||
If Response EQ False$ then return
|
||||
end
|
||||
|
||||
SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
|
||||
IF (SupplAckReq EQ True$) then
|
||||
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo)
|
||||
If Response EQ False$ then return
|
||||
end
|
||||
//Check if TW Required
|
||||
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ AND (ReactorType EQ 'HTR' OR ReactorType EQ 'ASM' OR ReactorType 'ASM+') then
|
||||
UsingTestWafers = False$
|
||||
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
||||
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
|
||||
If ExistingTestWafersLogged NE True$ then
|
||||
If Not(IsTWReqd) then
|
||||
//Test wafer logging is NOT required here.
|
||||
If ReactorType NE 'EPP' then
|
||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Test Wafer Usage logging is not required on this load.':@FM:'Are any test wafers loaded?')
|
||||
If UsingTestWafers EQ True$ then
|
||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||
If TWLogResult NE True$ then
|
||||
ContinueSign = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
||||
If Not(ContinueSign) then return
|
||||
end
|
||||
end
|
||||
end
|
||||
SupplAckReq = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
|
||||
IF (SupplAckReq NE FALSE$) then
|
||||
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$)
|
||||
If Response EQ False$ then
|
||||
return
|
||||
end else
|
||||
//Test wafer logging is Required here.
|
||||
Begin Case
|
||||
Case ReactorType EQ 'ASM' OR ReactorType EQ 'HTR'
|
||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on this run':@FM:'Are any test wafers loaded?')
|
||||
Case ReactorType EQ 'ASM+'
|
||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on the next run.':@FM:'Are any test wafers loaded?')
|
||||
End Case
|
||||
If UsingTestWafers EQ True$ then
|
||||
//User has stated that they are using test wafers
|
||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||
If TWLogResult NE True$ then
|
||||
//User exited the the TW log prompt answering that they are not using any test wafers.
|
||||
PreAuthenticated = TRUE$
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
|
||||
If RDSLayerAckReq EQ True$ then
|
||||
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
|
||||
ErrMsg(ErrorMessage)
|
||||
LayerKeys = Xlate('RDS', RDSNo, 'RDS_LAYER_KEYS', 'X')
|
||||
// Just display the first layer
|
||||
RDSLSID = LayerKeys<0, 1>
|
||||
Dialog_Box('RDS_LAYER', @Window, RDSLSID)
|
||||
|
||||
RDSLayerAck = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK', 'X')
|
||||
If ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) then
|
||||
ErrorMessage = 'RDS layer parameters were not acknowledged. Sign load stage event aborting.'
|
||||
ErrMsg(ErrorMessage)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
FWIInstAckReq = Xlate('RDS', RDSNo, 'FWI_INST_ACK_REQ', 'X')
|
||||
If (FWIInstAckReq EQ True$) then
|
||||
Response = RDS_Services('RDSVerifyInst', RDSNo, 'FWI')
|
||||
If Response EQ False$ then return
|
||||
end
|
||||
|
||||
LoadInstAckReq = Xlate('RDS', RDSNo, 'LOAD_INST_ACK_REQ', 'X')
|
||||
If (LoadInstAckReq EQ True$) then
|
||||
Response = RDS_Services('RDSVerifyInst', RDSNo, 'LOAD')
|
||||
If Response EQ False$ then return
|
||||
end
|
||||
|
||||
SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
|
||||
IF (SupplAckReq EQ True$) then
|
||||
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo)
|
||||
If Response EQ False$ then return
|
||||
end
|
||||
//Check if TW Required
|
||||
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ AND (ReactorType EQ 'HTR' OR ReactorType EQ 'ASM' OR ReactorType 'ASM+') then
|
||||
UsingTestWafers = False$
|
||||
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
||||
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
|
||||
If ExistingTestWafersLogged NE True$ then
|
||||
If Not(IsTWReqd) then
|
||||
//Test wafer logging is NOT required here.
|
||||
If ReactorType NE 'EPP' then
|
||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Test Wafer Usage logging is not required on this load.':@FM:'Are any test wafers loaded?')
|
||||
If UsingTestWafers EQ True$ then
|
||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||
If TWLogResult NE True$ then
|
||||
ContinueSign = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
|
||||
If Not(ContinueSign) then return
|
||||
end
|
||||
end
|
||||
end
|
||||
end else
|
||||
//Test wafer logging is Required here.
|
||||
Begin Case
|
||||
Case ReactorType EQ 'ASM' OR ReactorType EQ 'HTR'
|
||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on this run':@FM:'Are any test wafers loaded?')
|
||||
Case ReactorType EQ 'ASM+'
|
||||
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on the next run.':@FM:'Are any test wafers loaded?')
|
||||
End Case
|
||||
If UsingTestWafers EQ True$ then
|
||||
//User has stated that they are using test wafers
|
||||
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
|
||||
If TWLogResult NE True$ then
|
||||
//User exited the the TW log prompt answering that they are not using any test wafers.
|
||||
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||
Override = UserVerification<1>
|
||||
OverrideUser = UserVerification<2>
|
||||
If Override then
|
||||
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
||||
end else
|
||||
return
|
||||
end
|
||||
end
|
||||
end else
|
||||
//User has stated that they are NOT using test wafers
|
||||
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||
Override = UserVerification<1>
|
||||
OverrideUser = UserVerification<2>
|
||||
If Override then
|
||||
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
||||
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
||||
end else
|
||||
return
|
||||
return
|
||||
end
|
||||
end
|
||||
end else
|
||||
//User has stated that they are NOT using test wafers
|
||||
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
|
||||
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
|
||||
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
|
||||
Override = UserVerification<1>
|
||||
OverrideUser = UserVerification<2>
|
||||
If Override then
|
||||
Override_log_services('Create', 'RDS', RDSNo, OverrideUser, '', 'TW_USAGE', '')
|
||||
end else
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide)
|
||||
If ReadyToSign EQ True$ then
|
||||
If PreAuthenticated EQ FALSE$ then
|
||||
initParams = ''
|
||||
initParams<4> = 'Sign Load'
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||
Valid = Response<1>
|
||||
If (Valid EQ True$) then
|
||||
|
||||
ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide)
|
||||
If ReadyToSign EQ True$ then
|
||||
If PreAuthenticated EQ FALSE$ then
|
||||
initParams = ''
|
||||
initParams<4> = 'Sign Load'
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
|
||||
Valid = Response<1>
|
||||
If (Valid EQ True$) then
|
||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||
end
|
||||
end else
|
||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||
end
|
||||
end else
|
||||
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
|
||||
end
|
||||
end
|
||||
If Error_Services('HasError') then
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
ErrMsg(ErrorMsg)
|
||||
If Error_Services('HasError') then
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
ErrMsg(ErrorMsg)
|
||||
end
|
||||
end else
|
||||
Msg(@Window, "Reactor load signature not allowed on a down reactor.")
|
||||
end
|
||||
end else
|
||||
Msg(@Window, "Reactor load signature not allowed on a down reactor.")
|
||||
Msg(@Window, "RDS is not assigned to a reactor.")
|
||||
end
|
||||
|
||||
GoSub OLE_LL_Status
|
||||
Set_Property(@Window, 'SAVEWARN', False$)
|
||||
Send_Event(@Window, 'READ')
|
||||
|
||||
Case SignEventType EQ 'Unsign'
|
||||
// 1. Check if on hold. If so, then block event and inform user
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey)
|
||||
IF WOMatCurrStatus = 'HOLD' THEN
|
||||
ErrorMessage = 'Process Error':@SVM:'Cassette is on Hold and may not have the signature removed.':CRLF$:CRLF$
|
||||
ErrMsg(ErrorMessage)
|
||||
RETURN 0
|
||||
END
|
||||
// 2.
|
||||
// a. For Non-EPP - Check if LWII, LWIS, or FQA has been signed. If so, then block event and inform user
|
||||
// b. For EPP - Check Clean_Insp actions to see if an inspection or surfscan has been completed
|
||||
// Also check the FQA signature (MO_QA)
|
||||
UnloadSig = Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X')
|
||||
ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE','X')
|
||||
CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X')
|
||||
Convert @VM to '' in CISigs
|
||||
IF ReactorType NE 'EPP' THEN
|
||||
FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X')
|
||||
END ELSE
|
||||
WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X')
|
||||
FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X')
|
||||
END
|
||||
If ( (UnloadSig NE '') or (CISigs NE '') or (FQASig NE '') ) then
|
||||
// UNLOAD, LWII, LWIS, or FQA already signed. Block unload unsign event.
|
||||
ErrorMessage = 'Process Error':@SVM:'UNLOAD, LWII, LWIS, or FQA already signed. Cannot unsign unload event.' |
|
||||
: CRLF$ : CRLF$
|
||||
ErrMsg(ErrorMessage)
|
||||
Return 0
|
||||
end
|
||||
// 1. Check if RDS Load signature is eligible to be set.
|
||||
IsEligible = QA_Services('UnsignLoadSignatureReady', RDSNo)
|
||||
|
||||
// 3. Lead/Supervisor/Engineer/EngTech override
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH')
|
||||
Valid = Response<1>
|
||||
OverrideUser = Response<2>
|
||||
|
||||
If Valid then
|
||||
|
||||
Machine = Environment_Services('GetServer')
|
||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
|
||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||
LogFileName = 'R':RDSNo:'.csv'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'LOAD stage unsigned for RDS ':RDSNo:' by user ':@User4
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
// 4. Remove WO_MAT Unload signature, date, and time
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
SigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
Sigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||
SigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
||||
Locate '1LOAD' in SigProf using @VM setting vPos then
|
||||
Sigs<1, vPos> = ''
|
||||
SigDTMs<1, vPos> = ''
|
||||
WOMatRec<WO_MAT_SIGNATURE$> = Sigs
|
||||
WOMatRec<WO_MAT_SIG_DTM$> = SigDTMs
|
||||
obj_React_Status('HandleLoadUnsign',Reactor:@RM:WONo:@RM:CassNo:@RM:RDSNo:@RM:OverrideUser)
|
||||
end
|
||||
|
||||
// 5. Remove '1LOAD' material log entry (i.e. WO_MAT<INV...> columns)
|
||||
InvActions = WOMatRec<WO_MAT_INV_ACTION$>
|
||||
Locate '1LOAD' in InvActions using @VM setting vPos then
|
||||
WOMatRec<WO_MAT_INV_WH$> = Delete(WOMatRec<WO_MAT_INV_WH$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_LOCATION$> = Delete(WOMatRec<WO_MAT_INV_LOCATION$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_ACTION$> = Delete(WOMatRec<WO_MAT_INV_ACTION$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_DTM$> = Delete(WOMatRec<WO_MAT_INV_DTM$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_USER$> = Delete(WOMatRec<WO_MAT_INV_USER$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_TAG$> = Delete(WOMatRec<WO_MAT_INV_TAG$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_TOOL_ID$> = Delete(WOMatRec<WO_MAT_INV_TOOL_ID$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_LOC$> = Delete(WOMatRec<WO_MAT_INV_LOC$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_SCAN_ENTRY$> = Delete(WOMatRec<WO_MAT_INV_SCAN_ENTRY$>, 0, vPos, 0)
|
||||
end
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
||||
|
||||
// 6. Remove RDS Unload signature, date, and time
|
||||
// NOTE: This needs to occur before item #5 to avoid RDS_ACTIONS restoring the load signature
|
||||
Set_Property(@Window:'.OP_IN', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_NAME', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_DATE', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_TIME', 'TEXT', '')
|
||||
IOOptions = Get_Property(@Window, 'IOOPTIONS')
|
||||
IOOptions<6> = True$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
Send_Event(@Window, 'WRITE')
|
||||
IOOptions<6> = False$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
|
||||
Reactor = Get_Property(@Window:'.REACTOR', 'TEXT')
|
||||
Rds_Services('AddComment', RDSNo, 'Load Stage Unsigned from Reactor ' : Reactor)
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
||||
PreviousRotrOverrideRds = ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$>
|
||||
|
||||
// Check if ROTR override was preformed when signing this load
|
||||
If (PreviousRotrOverrideRds EQ RDSNo) then
|
||||
// Reset the override flag
|
||||
ReactorRec<REACTOR_ROTR_STATUS$> = 'F'
|
||||
PreviousRotrStatusReason = ReactorRec<REACTOR_PREVIOUS_ROTR_STATUS_REASON$>
|
||||
ReactorRec<REACTOR_ROTR_STATUS_REASON$> = PreviousRotrStatusReason
|
||||
RotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||
ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$> = Max(0, (RotrOverrideCount - 1))
|
||||
end
|
||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||
If ReactorType EQ 'EPP' then
|
||||
Reactor_Services('DecrementWfrMetrics', RDSNo)
|
||||
end
|
||||
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign')
|
||||
If IsEligible then
|
||||
// 3. Lead/Supervisor/Engineer/EngTech override
|
||||
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH')
|
||||
Valid = Response<1>
|
||||
OverrideUser = Response<2>
|
||||
|
||||
If Valid then
|
||||
|
||||
Machine = Environment_Services('GetServer')
|
||||
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
|
||||
ColumnWidths = 20 : @FM : 15 : @FM : 300
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Lot'
|
||||
makeDirSuccess = Utility("MAKEDIR", LogPath)
|
||||
LogFileName = 'R':RDSNo:'.csv'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
|
||||
LogData = ''
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
LogData<3> = 'LOAD stage unsigned for RDS ':RDSNo:' by user ':@User4
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
|
||||
// 4. Remove WO_MAT Unload signature, date, and time
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
SigProf = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
Sigs = WOMatRec<WO_MAT_SIGNATURE$>
|
||||
SigDTMs = WOMatRec<WO_MAT_SIG_DTM$>
|
||||
Locate '1LOAD' in SigProf using @VM setting vPos then
|
||||
Sigs<1, vPos> = ''
|
||||
SigDTMs<1, vPos> = ''
|
||||
WOMatRec<WO_MAT_SIGNATURE$> = Sigs
|
||||
WOMatRec<WO_MAT_SIG_DTM$> = SigDTMs
|
||||
obj_React_Status('HandleLoadUnsign',Reactor:@RM:WONo:@RM:CassNo:@RM:RDSNo:@RM:OverrideUser)
|
||||
end
|
||||
|
||||
// 5. Remove '1LOAD' material log entry (i.e. WO_MAT<INV...> columns)
|
||||
InvActions = WOMatRec<WO_MAT_INV_ACTION$>
|
||||
Locate '1LOAD' in InvActions using @VM setting vPos then
|
||||
WOMatRec<WO_MAT_INV_WH$> = Delete(WOMatRec<WO_MAT_INV_WH$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_LOCATION$> = Delete(WOMatRec<WO_MAT_INV_LOCATION$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_ACTION$> = Delete(WOMatRec<WO_MAT_INV_ACTION$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_DTM$> = Delete(WOMatRec<WO_MAT_INV_DTM$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_USER$> = Delete(WOMatRec<WO_MAT_INV_USER$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_TAG$> = Delete(WOMatRec<WO_MAT_INV_TAG$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_TOOL_ID$> = Delete(WOMatRec<WO_MAT_INV_TOOL_ID$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_LOC$> = Delete(WOMatRec<WO_MAT_INV_LOC$>, 0, vPos, 0)
|
||||
WOMatRec<WO_MAT_INV_SCAN_ENTRY$> = Delete(WOMatRec<WO_MAT_INV_SCAN_ENTRY$>, 0, vPos, 0)
|
||||
end
|
||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
||||
|
||||
// 6. Remove RDS Unload signature, date, and time
|
||||
// NOTE: This needs to occur before item #5 to avoid RDS_ACTIONS restoring the load signature
|
||||
Set_Property(@Window:'.OP_IN', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_NAME', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_DATE', 'TEXT', '')
|
||||
Set_Property(@Window:'.OP_IN_TIME', 'TEXT', '')
|
||||
IOOptions = Get_Property(@Window, 'IOOPTIONS')
|
||||
IOOptions<6> = True$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
Send_Event(@Window, 'WRITE')
|
||||
IOOptions<6> = False$
|
||||
Set_Property(@Window, 'IOOPTIONS', IOOptions)
|
||||
|
||||
Reactor = Get_Property(@Window:'.REACTOR', 'TEXT')
|
||||
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor)
|
||||
PreviousRotrOverrideRds = ReactorRec<REACTOR_PREVIOUS_ROTR_OVERRIDE_RDS$>
|
||||
|
||||
// Check if ROTR override was preformed when signing this load
|
||||
If (PreviousRotrOverrideRds EQ RDSNo) then
|
||||
// Reset the override flag
|
||||
ReactorRec<REACTOR_ROTR_STATUS$> = 'F'
|
||||
PreviousRotrStatusReason = ReactorRec<REACTOR_PREVIOUS_ROTR_STATUS_REASON$>
|
||||
ReactorRec<REACTOR_ROTR_STATUS_REASON$> = PreviousRotrStatusReason
|
||||
RotrOverrideCount = ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$>
|
||||
ReactorRec<REACTOR_ROTR_OVERRIDE_COUNT$> = Max(0, (RotrOverrideCount - 1))
|
||||
end
|
||||
Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
|
||||
If ReactorType EQ 'EPP' then
|
||||
Reactor_Services('DecrementWfrMetrics', RDSNo)
|
||||
end
|
||||
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign')
|
||||
|
||||
end else
|
||||
Return 0
|
||||
end
|
||||
end else
|
||||
Return 0
|
||||
end
|
||||
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
Msg(@Window, ErrorMessage)
|
||||
end
|
||||
End Case
|
||||
Post_Event(@Window, 'READ')
|
||||
|
||||
@ -582,7 +561,6 @@ Event LL_R_STATUS.OnClick()
|
||||
|
||||
end event
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -740,3 +718,5 @@ OLE_LL_Status:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
@ -51,8 +51,6 @@ $insert REACT_STATUS_EQUATES
|
||||
$insert SUPPL_INFO_ARRAY_EQU
|
||||
$insert CLEAN_INSP_EQUATES
|
||||
|
||||
EQU READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
|
||||
|
||||
Equ COL$LOG_FILE to 1
|
||||
Equ COL$LOG_DTM to 2
|
||||
Equ COL$ACTION to 3
|
||||
@ -67,7 +65,7 @@ Equ COL$TOOL_ID to 10
|
||||
Declare subroutine ErrMsg, Set_Status, obj_WO_Mat, obj_WO_Mat_Log, obj_RDS, Set_Property, Send_Event, Database_Services
|
||||
Declare subroutine Qa_Services, RDS_Services, Dialog_Box
|
||||
Declare function Dialog_Box, Msg, MemberOf, obj_WO_Mat, Database_Services, Get_Property, obj_React_Status, Get_Status
|
||||
Declare function QA_Services, Database_Services, Supplement_Services
|
||||
Declare function QA_Services, Database_Services, Supplement_Services, RDS_Services
|
||||
|
||||
SubclassInfo = Form_Services('FindSubclassControl')
|
||||
Subclass = SubclassInfo<1>
|
||||
@ -95,20 +93,16 @@ Return EventFlow else EVENT_CONTINUE$
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
|
||||
|
||||
GoSub SetupControls
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event WINDOW.READ()
|
||||
// Disable reactor edit line control if the RDS has been loaded.
|
||||
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
||||
If RDSNo NE '' then
|
||||
LoadSig = Xlate('RDS', RDSNo, 'OPERATOR_IN', 'X')
|
||||
If LoadSig NE '' then
|
||||
Set_Property(@Window:'.REACTOR', 'ENABLED', False$)
|
||||
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', READONLY_GREEN$)
|
||||
end
|
||||
end
|
||||
|
||||
GoSub SetupControls
|
||||
|
||||
end event
|
||||
|
||||
|
||||
@ -132,6 +126,76 @@ end event
|
||||
|
||||
Event PUB_SIGN.CLICK()
|
||||
|
||||
ButtonText = Get_Property(@Window:'.PUB_SIGN', 'TEXT')
|
||||
|
||||
Begin Case
|
||||
Case ButtonText EQ 'Sign'
|
||||
GoSub SignPreEpi
|
||||
Case ButtonText EQ 'Unsign'
|
||||
GoSub UnsignPreEpi
|
||||
End Case
|
||||
|
||||
If Error_Services('HasError') then
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
ErrMsg(ErrorMsg)
|
||||
end
|
||||
Set_Property(@Window, 'SAVEWARN', False$)
|
||||
Set_Status(0)
|
||||
Send_Event(@Window, 'READ')
|
||||
|
||||
end event
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SetupControls:
|
||||
|
||||
RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT')
|
||||
|
||||
GoSub ReactorEdlCtrlSetup
|
||||
GoSub PubSignCtrlSetup
|
||||
|
||||
return
|
||||
|
||||
ReactorEdlCtrlSetup:
|
||||
|
||||
// Disable reactor edit line control if the RDS has been assigned.
|
||||
If RDSNo NE '' then
|
||||
PreEpiSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, True$, 0, False$)
|
||||
If Error_Services('NoError') then
|
||||
If PreEpiSig NE '' then
|
||||
Set_Property(@Window:'.REACTOR', 'ENABLED', False$)
|
||||
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', READONLY_GREEN$)
|
||||
end else
|
||||
Set_Property(@Window:'.REACTOR', 'ENABLED', True$)
|
||||
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', EDIT_ACTIVE_WHITE$)
|
||||
end
|
||||
end else
|
||||
Set_Property(@Window:'.REACTOR', 'ENABLED', False$)
|
||||
Set_Property(@Window:'.REACTOR', 'BACKCOLOR', READONLY_GREEN$)
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
PubSignCtrlSetup:
|
||||
|
||||
If RDSNo NE '' then
|
||||
PreEpiSig = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, True$, 0, False$)
|
||||
If Error_Services('NoError') then
|
||||
If PreEpiSig NE '' then
|
||||
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Unsign')
|
||||
end else
|
||||
Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
SignPreEpi:
|
||||
|
||||
RDSNo = Get_Property(@Window:'.RDS_NO' ,'DEFPROP')
|
||||
WfrQty = Get_Property(@Window:'.VERIFY_QTY','TEXT')
|
||||
Reactor = Get_Property(@Window:'.REACTOR' ,'TEXT')
|
||||
@ -156,23 +220,29 @@ Event PUB_SIGN.CLICK()
|
||||
Valid = Response<1>
|
||||
If (Valid EQ True$) then
|
||||
QA_Services('SignPreEpiStage', RDSNo, @USER4, WfrQty, Reactor)
|
||||
end
|
||||
end
|
||||
end else
|
||||
QA_Services('SignPreEpiStage', RDSNo, @USER4, WfrQty, Reactor)
|
||||
end
|
||||
end
|
||||
If Error_Services('HasError') then
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
ErrMsg(ErrorMsg)
|
||||
end
|
||||
Set_Property(@Window, 'SAVEWARN', False$)
|
||||
Set_Status(0)
|
||||
Send_Event(@Window, 'READ')
|
||||
|
||||
end event
|
||||
return
|
||||
|
||||
UnsignPreEpi:
|
||||
|
||||
RDSNo = Get_Property(@Window:'.RDS_NO','DEFPROP')
|
||||
VerCheckParams = ''
|
||||
VerCheckParams<4> = 'Permission needed for Pre-Epi Unsign on RDS# ' : RDSNo
|
||||
UserVerCheck = Dialog_Box('NDW_VERIFY_USER', @Window, '':@FM:'':@FM:'':@FM:VerCheckParams)
|
||||
ValidUserCheck = UserVerCheck<1>
|
||||
If ValidUserCheck then
|
||||
ValidUserId = UserVerCheck<2>
|
||||
If ValidUserId NE '' then
|
||||
RDS_Services('UnsignPreEpiSignature', RDSNo, ValidUserId)
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -118,7 +118,7 @@ AutoDisplayErrors = FALSE$ ; // Set this to True$ when debugging so all erro
|
||||
|
||||
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services
|
||||
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log
|
||||
Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status , Reactor_Services
|
||||
Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status, Reactor_Services
|
||||
Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce
|
||||
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
|
||||
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
|
||||
@ -1461,12 +1461,11 @@ Service SignUnloadExtra1(RDSNo, LSLUserName)
|
||||
RDSRec<RDS_OP_OUT_EX1$> = LSLUsername
|
||||
RDSRec<RDS_OP_OUT_EX1_DATE$> = SRP_Date('Today')
|
||||
RDSRec<RDS_OP_OUT_EX1_TIME$> = SRP_Time('Now')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Unload Extra 1 Signed from Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end else
|
||||
Error_Services('Add', 'Unload Extra 1 is not able to be signed at this stage')
|
||||
end
|
||||
@ -1494,12 +1493,11 @@ Service UnsignUnloadExtra1(RDSNo, LSLUserName)
|
||||
RDSRec<RDS_OP_OUT_EX1$> = ''
|
||||
RDSRec<RDS_OP_OUT_EX1_DATE$> = ''
|
||||
RDSRec<RDS_OP_OUT_EX1_TIME$> = ''
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Unload Extra 1 Unsigned on Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end else
|
||||
Error_Services('Add', 'Unsign Load Extra 1 is not able to be unsigned.')
|
||||
end
|
||||
@ -1534,11 +1532,10 @@ Service SignLoadExtra1(RDSNo,LSLUserName)
|
||||
RDSRec<RDS_OP_IN_EX2$> = LSLUsername
|
||||
RDSRec<RDS_OP_IN_EX2_DATE$> = SRP_Date('Today')
|
||||
RDSRec<RDS_OP_IN_EX2_TIME$> = SRP_Time('Now')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Load Extra 1 Signed to Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end else
|
||||
Error_Services('Add', 'Load Extra 1 is not able to be signed at this stage')
|
||||
end
|
||||
@ -1569,12 +1566,11 @@ Service UnsignLoadExtra1(RDSNo, LSLUserName)
|
||||
RDSRec<RDS_OP_IN_EX2$> = ''
|
||||
RDSRec<RDS_OP_IN_EX2_DATE$> = ''
|
||||
RDSRec<RDS_OP_IN_EX2_TIME$> = ''
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Load Extra 1 Unsigned on Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end else
|
||||
Error_Services('Add', 'Unsign Load Extra 1 is not able to be unsigned.')
|
||||
end
|
||||
@ -1598,12 +1594,11 @@ Service SignUnloadExtra2(RDSNo,LSLUserName)
|
||||
RDSRec<RDS_OP_OUT_EX2$> = LSLUsername
|
||||
RDSRec<RDS_OP_OUT_EX2_DATE$> = SRP_Date('Today')
|
||||
RDSRec<RDS_OP_OUT_EX2_TIME$> = SRP_Time('Now')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Unload Extra 2 Signed from Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end else
|
||||
Error_Services('Add', 'Unload Extra 2 is not able to be signed at this stage')
|
||||
end
|
||||
@ -1631,12 +1626,11 @@ Service UnsignUnloadExtra2(RDSNo, LSLUserName)
|
||||
RDSRec<RDS_OP_OUT_EX2$> = ''
|
||||
RDSRec<RDS_OP_OUT_EX2_DATE$> = ''
|
||||
RDSRec<RDS_OP_OUT_EX2_TIME$> = ''
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Unload Extra 2 Unsigned on Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end else
|
||||
Error_Services('Add', 'Unsign Load Extra 2 is not able to be unsigned.')
|
||||
end
|
||||
@ -1671,11 +1665,10 @@ Service SignLoadExtra2(RDSNo,LSLUserName)
|
||||
RDSRec<RDS_OP_IN_EX3$> = LSLUsername
|
||||
RDSRec<RDS_OP_IN_EX3_DATE$> = SRP_Date('Today')
|
||||
RDSRec<RDS_OP_IN_EX3_TIME$> = SRP_Time('Now')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Load Extra 2 Signed to Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end
|
||||
Reactor_Services('AddRDSToReactorLoad', RDSNo, Reactor)
|
||||
end else
|
||||
Error_Services('Add', 'Load Extra 2 is not able to be signed at this stage')
|
||||
end
|
||||
@ -1689,7 +1682,7 @@ Service SignLoadExtra2(RDSNo,LSLUserName)
|
||||
Error_Services('Add', 'RDS ' : RDSNo : ' does not exist.')
|
||||
end
|
||||
end else
|
||||
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
||||
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 2 routine')
|
||||
end
|
||||
|
||||
end service
|
||||
@ -1705,12 +1698,11 @@ Service UnsignLoadExtra2(RDSNo, LSLUserName)
|
||||
RDSRec<RDS_OP_IN_EX3$> = ''
|
||||
RDSRec<RDS_OP_IN_EX3_DATE$> = ''
|
||||
RDSRec<RDS_OP_IN_EX3_TIME$> = ''
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
Reactor = RDSRec<RDS_REACTOR$>
|
||||
If Error_Services('NoError') then
|
||||
Rds_Services('AddComment', RDSNo, 'Load Extra 2 Unsigned on Reactor ' : Reactor, LSLUserName)
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end
|
||||
Reactor_Services('RemoveRDSFromReactorLoad', RDSNo, Reactor, LSLUserName)
|
||||
end else
|
||||
Error_Services('Add', 'Unsign Load Extra 2 is not able to be unsigned.')
|
||||
end
|
||||
@ -1868,6 +1860,47 @@ Service DetachRDSFromWO(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
Service ChangeReactor(RDSNo, NewReactorNo)
|
||||
|
||||
ErrorMessage = ''
|
||||
If RDSNo NE '' AND NewReactorNo NE '' then
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
|
||||
ClearSelect
|
||||
Set_Status(0)
|
||||
RList(Query, TARGET_ACTIVELIST$, '', '' '')
|
||||
SchedReactors = ''
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext SchedReactor else EOF = True$
|
||||
Until EOF
|
||||
SchedReactors<0, -1> = SchedReactor
|
||||
Repeat
|
||||
|
||||
Locate NewReactorNo in SchedReactors using @VM setting vPos then
|
||||
RDSRec<RDS_REACTOR$> = NewReactorNo
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Response = True$
|
||||
end else
|
||||
Response = False$
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
Swap @VM with ',' in SchedReactors
|
||||
ErrorMessage = 'Assigned reactor, ':NewReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.'
|
||||
Response = False$
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Missing RDSNo or NewReactorNo param.'
|
||||
end
|
||||
|
||||
If ErrorMessage NE '' then
|
||||
Error_Services('Set', ErrorMessage)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
Service PushSigProfileToWoMat(RDSNo)
|
||||
|
||||
@ -1889,12 +1922,9 @@ Service PushSigProfileToWoMat(RDSNo)
|
||||
If WOMatKey NE '' then
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
If Error_Services('NoError') then
|
||||
WOMatSigProf = obj_WO_Mat('CassSigProfile', WOMatKey)
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$>
|
||||
WOMatSigDTM = WOMatRec<WO_MAT_SIG_DTM$>
|
||||
WOMatSigProfOrig = WOMatSigProf
|
||||
WOMatSigOrig = WOMatSig
|
||||
WOMatSigDTMOrig = WOMatSigDTM
|
||||
WOMatSigProf = obj_WO_Mat('CassSigProfile', WOMatKey)
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$>
|
||||
WOMatSigDTM = WOMatRec<WO_MAT_SIG_DTM$>
|
||||
|
||||
// Update WO_MAT signature profile to match for the "1VER" stage
|
||||
Stage = '1VER'
|
||||
@ -1966,15 +1996,9 @@ Service PushSigProfileToWoMat(RDSNo)
|
||||
WOMatSigDTM<0, vPos> = FQASigDTM
|
||||
end
|
||||
|
||||
If WOMatSigProf NE WOMatSigProfOrig then
|
||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_PROFILE$, WOMatSigProf)
|
||||
end
|
||||
If WOMatSig NE WOMatSigOrig then
|
||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSig)
|
||||
end
|
||||
If WOMatSigDTM NE WOMatSigDTMOrig then
|
||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTM)
|
||||
end
|
||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_PROFILE$, WOMatSigProf)
|
||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIGNATURE$, WOMatSig)
|
||||
Transaction_Services('PostWriteFieldTransaction', 'WO_MAT', WOMatKey, WO_MAT_SIG_DTM$, WOMatSigDTM)
|
||||
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
@ -1997,9 +2021,7 @@ Service PushSigProfileToWoMat(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service AllTWUseSigned(RDSNo)
|
||||
|
||||
If RDSNo NE '' then
|
||||
LSKeys = Xlate('RDS', RDSNo, 'RDS_LS_SORTED', 'X')
|
||||
AllMetKeys = XLATE('RDS_LAYER', LSKeys, RDS_LAYER_RDS_TEST_KEYS$, 'X')
|
||||
@ -2022,10 +2044,8 @@ Service AllTWUseSigned(RDSNo)
|
||||
Error_Services('Add', ErrorMessage)
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service GetRDSKeys(WONo)
|
||||
|
||||
Response = ''
|
||||
@ -2286,6 +2306,136 @@ Service VerifyWOLogRDSKeyIndex(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
Service CheckUserRDSModificationPerm(UserId)
|
||||
|
||||
ErrorMsg = ''
|
||||
CanUserModify = False$
|
||||
|
||||
If UserId NE '' then
|
||||
If RowExists('LSL_USERS', UserId) then
|
||||
Begin Case
|
||||
Case MemberOf(UserId, 'ENGINEERING')
|
||||
CanUserModify = True$
|
||||
Case MemberOf(UserId, 'OI_ADMIN')
|
||||
CanUserModify = True$
|
||||
Case MemberOf(UserId, 'SUPERVISOR')
|
||||
CanUserModify = True$
|
||||
Case MemberOf(UserId, 'LEAD')
|
||||
CanUserModify = True$
|
||||
Case MemberOf(UserId, 'ENG_TECH')
|
||||
CanUserModify = True$
|
||||
Case Otherwise$
|
||||
CanUserModify = False$
|
||||
End Case
|
||||
end else
|
||||
ErrorMsg = 'User not found in Users table.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'User Id was null.'
|
||||
end
|
||||
|
||||
If ErrorMsg NE '' then
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
Response = CanUserModify
|
||||
|
||||
end service
|
||||
|
||||
Service UnsignPreEpiSignature(RDSNo, UserId)
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS\Signatures'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Pre-Epi-Unsign.csv'
|
||||
Headers = 'Logging DTM':@FM:'RDS No.':@FM:'User':@FM:'Message'
|
||||
objPreEpiUnsignLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
|
||||
LoggingDTM = LogDate : ' ' : LogTime
|
||||
|
||||
ErrorMsg = ''
|
||||
PreEpiUnsign = False$
|
||||
If RDSNo NE '' then
|
||||
If RowExists('RDS', RDSNo) then
|
||||
if UserId NE '' then
|
||||
if RowExists('LSL_USERS', UserId) then
|
||||
CanUserModifyRDS = RDS_Services('CheckUserRDSModificationPerm', UserId)
|
||||
If Error_Services('NoError') then
|
||||
If CanUserModifyRDS then
|
||||
UnsignPreEpiReady = QA_Services('UnsignPreEpiReady', RDSNo)
|
||||
if Error_Services('NoError') then
|
||||
If UnsignPreEpiReady then
|
||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG$, '', True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG_DATE$, '', True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_PRE_EPI_SIG_TIME$, '', True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_VERIFY_QTY$, '', True$, False$, False$)
|
||||
if Error_Services('NoError') then
|
||||
Database_Services('WriteDataColumn', 'RDS', RDSNo, RDS_REACTOR$, '', True$, False$, False$)
|
||||
If Error_Services('NoError') then
|
||||
PreEpiUnsign = True$
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error clearing the RDS Pre Epi Signature Time on RDS ' : RDSNo : '.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error clearing the RDS Pre Epi Signature Date on RDS ' : RDSNo : '.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error clearing the RDS Pre Epi Signature on RDS ' : RDSNo : '.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Pre Epi is unable to be unsigned because a signature beyond pre-epi exists.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'User does not have permissions to perform a Pre-Epi Unsign'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'User ' : UserId : ' not found in database.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'User Id was null.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'RDS ' : RDSNo : ' not found in database.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'RDS Number was null.'
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = RDSNo
|
||||
LogData<3> = UserId
|
||||
LogData<4> = 'Successfully unsigned pre-epi signature.'
|
||||
Logging_Services('AppendLog', objPreEpiUnsignLog, LogData, @RM, @FM, False$)
|
||||
end else
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = RDSNo
|
||||
LogData<3> = UserId
|
||||
LogData<4> = ErrorMsg
|
||||
Logging_Services('AppendLog', objPreEpiUnsignLog, LogData, @RM, @FM, False$)
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
Response = PreEpiUnsign
|
||||
|
||||
end service
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -2298,3 +2448,19 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -242,6 +242,10 @@ Equ API_COLOR_BTNTEXT$ To 18
|
||||
Equ API_COLOR_INACTIVECAPTIONTEXT$ To 19
|
||||
Equ API_COLOR_BTNHIGHLIGHT$ To 20
|
||||
|
||||
// Edit Line Color Equates
|
||||
Equ READONLY_GREEN$ TO 192 + (220*256) + (192*65536)
|
||||
Equ EDIT_ACTIVE_WHITE$ TO 16777215
|
||||
|
||||
// Preference Manager
|
||||
Equ ImagePath$ to Memory_Services('GetValue', 'PM_CURRENT_IMAGE_PATH') : '\'
|
||||
PMSystemFont = Memory_Services('GetValue', 'PM_SYSTEM_FONT')
|
||||
|
@ -260,4 +260,7 @@ Equ RDS_COMMENT_NOTE$ To 307
|
||||
Equ RDS_WAFER_COUNTER_QTY$ To 308
|
||||
Equ RDS_WAFER_COUNTER_DTM$ To 309
|
||||
Equ RDS_POST_SUPERCEDE$ To 310
|
||||
Equ RDS_ALL_TW_USE_SIGNED$ To 311
|
||||
Equ RDS_ALL_TW_USE_SIGNED$ To 311
|
||||
Equ RDS_LOAD_EXTRA_1_REACTOR$ To 312
|
||||
Equ RDS_LOAD_EXTRA_2_REACTOR$ To 313
|
||||
|
||||
|
Reference in New Issue
Block a user