diff --git a/LSL2/STPROC/NDW_LOAD_UNLOAD_EXTRA_EVENTS.txt b/LSL2/STPROC/NDW_LOAD_UNLOAD_EXTRA_EVENTS.txt index 0595e17..3d6d40d 100644 --- a/LSL2/STPROC/NDW_LOAD_UNLOAD_EXTRA_EVENTS.txt +++ b/LSL2/STPROC/NDW_LOAD_UNLOAD_EXTRA_EVENTS.txt @@ -199,89 +199,94 @@ Refresh: RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - UnloadSigned = RDSRec - ReactorNo = RDSRec - //Unload Extra 1 - UnloadExtra1Signature = RDSRec - UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' ) - UnloadExtra1Date = OConv(RDSRec, 'D') - UnloadExtra1Time = Oconv(RDSRec, 'MT') - //Load Extra 1 - LoadExtra1Signature = RDSRec - LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' ) - LoadExtra1Date = Oconv(RDSRec, 'D') - LoadExtra1Time = Oconv(RDSRec, 'MT') - LoadExtra1Reactor = RDSRec - //Unload Extra 2 - UnloadExtra2Signature = RDSRec - UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' ) - UnloadExtra2Date = Oconv(RDSRec, 'D') - UnloadExtra2Time = Oconv(RDSRec, 'MT') - //Load Extra 2 - LoadExtra2Signature = RDSRec - LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' ) - LoadExtra2Date = Oconv(RDSRec, 'D') - LoadExtra2Time = Oconv(RDSRec, 'MT') - LoadExtra2Reactor = RDSRec + if Error_Services('NoError') then + UnloadSigned = RDSRec + ReactorNo = RDSRec + //Unload Extra 1 + UnloadExtra1Signature = RDSRec + UnloadExtra1UserFirstLast = xlate( 'LSL_USERS', UnloadExtra1Signature, 'FIRST_LAST', 'X' ) + UnloadExtra1Date = OConv(RDSRec, 'D') + UnloadExtra1Time = Oconv(RDSRec, 'MT') + //Load Extra 1 + LoadExtra1Signature = RDSRec + LoadExtra1UserFirstLast = xlate( 'LSL_USERS', LoadExtra1Signature, 'FIRST_LAST', 'X' ) + LoadExtra1Date = Oconv(RDSRec, 'D') + LoadExtra1Time = Oconv(RDSRec, 'MT') + LoadExtra1Reactor = RDSRec + //Unload Extra 2 + UnloadExtra2Signature = RDSRec + UnloadExtra2UserFirstLast = xlate( 'LSL_USERS', UnloadExtra2Signature, 'FIRST_LAST', 'X' ) + UnloadExtra2Date = Oconv(RDSRec, 'D') + UnloadExtra2Time = Oconv(RDSRec, 'MT') + //Load Extra 2 + LoadExtra2Signature = RDSRec + LoadExtra2UserFirstLast = xlate( 'LSL_USERS', LoadExtra2Signature, 'FIRST_LAST', 'X' ) + LoadExtra2Date = Oconv(RDSRec, 'D') + LoadExtra2Time = Oconv(RDSRec, 'MT') + LoadExtra2Reactor = RDSRec + + //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 + Msg(@Window, 'Error reading RDS record from database.') + end - //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') @@ -289,101 +294,115 @@ Refresh: return - - ReactorChange: RDSNo = Get_Property(@Window : '.EDL_RDS', 'TEXT') RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - WONo = RDSRec - 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 + if Error_Services('NoError') then + WONo = RDSRec + ReactorNo = '' + LLChosen = '' + ChangePermitted = False$ + Begin Case - 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 - QualMode = ReactLLRec - Begin Case - Case SideDisabled EQ 'L' - LLChosen = 'R' - Case SideDisabled EQ 'R' - LLChosen = 'L' - End Case - end else - Def = '' - Def = 'Select Load Lock' - Def = 'BLeft,Right' - Def = 'Please select a load lock.' - Def = '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$ + 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 + GoSub ClearCursors + 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 + QualMode = ReactLLRec + Begin Case + Case SideDisabled EQ 'L' + LLChosen = 'R' + Case SideDisabled EQ 'R' + LLChosen = 'L' + End Case + end else + Def = '' + Def = 'Select Load Lock' + Def = 'BLeft,Right' + Def = 'Please select a load lock.' + Def = '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 - Error_Services('Add', 'You must select a load lock for this lot.') + ChangePermitted = True$ end end else - ChangePermitted = True$ + Swap @VM with ',' in SchedReactors + Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.') end end else - Swap @VM with ',' in SchedReactors - Error_Services('Add', 'Assigned reactor, ':ReactorNo:', does not equal any scheduled reactor(s), ':SchedReactors:'.') + Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.') end end else - Error_Services('Add', ReactorNo: 'does not have the capacity necessary for this lot.') + Error_Services('Add', 'Invalid Reactor number.') + end + If ChangePermitted then + RDSRec = ReactorNo + RDSRec = ReactorNo + RDSRec = LLChosen + Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$) + If Error_Services('NoError') then + Msg(@Window, 'Reactor successfully changed!') + end else + Msg(@Window, 'Error changing reactor!') + end end end else - Error_Services('Add', 'Invalid Reactor number.') - end - If ChangePermitted then - RDSRec = ReactorNo - RDSRec = ReactorNo - RDSRec = LLChosen - Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, False$) - If Error_Services('NoError') then - Msg(@Window, 'Reactor successfully changed!') - end + Msg(@Window, 'Error reading RDS from database!') end + +return + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Internal GoSubs +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ClearCursors: + For counter = 0 to 8 + ClearSelect counter + Next counter return - diff --git a/LSL2/STPROC/QA_SERVICES.txt b/LSL2/STPROC/QA_SERVICES.txt index cfd1e4d..0af1625 100644 --- a/LSL2/STPROC/QA_SERVICES.txt +++ b/LSL2/STPROC/QA_SERVICES.txt @@ -2333,123 +2333,52 @@ Service UnsignLoadSignatureReady(RDSNo) 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 - CassNo = RDSRec - 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 - LoadExtra1Sig = RDSRec - UnloadExtra2Sig = RDSRec - LoadExtra2Sig = RDSRec - UnloadSig = RDSRecXlate('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 LoadExtra1stReady(RDSNo) + ErrorMsg = '' Response = False$ RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - StandardLoadSignature = RDSRec - UnloadExtra1Signature = RDSRec - LoadExtra1Signature = RDSRec - UnloadExtra2Signature = RDSRec - LoadExtra2Signature = RDSRec - StandardUnloadSignature = RDSRec - Reactor = RDSRec - - If Reactor NE '' then - WONo = RDSRec - 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 + if Error_Services('NoError') then + StandardLoadSignature = RDSRec + UnloadExtra1Signature = RDSRec + LoadExtra1Signature = RDSRec + UnloadExtra2Signature = RDSRec + LoadExtra2Signature = RDSRec + StandardUnloadSignature = RDSRec + Reactor = RDSRec - 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 + If Reactor NE '' then + WONo = RDSRec + Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo + GoSub ClearCursors + 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 then + If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then + Response = True$ + end else + ErrorMsg = 'RDS is not eligible to have Load Extra 1 signed.' + end + end else + Swap @VM with ',' in SchedReactors + ErrorMsg = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.' + end end + end else + ErrorMsg = Error_Services('GetMessage') end - If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then - Response = True$ + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) end end service @@ -2457,79 +2386,106 @@ end service Service UnsignLoadExtra1stReady(RDSNo) + ErrorMsg = '' Response = False$ RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - StandardLoadSignature = RDSRec - UnloadExtra1Signature = RDSRec - LoadExtra1Signature = RDSRec - UnloadExtra2Signature = RDSRec - LoadExtra2Signature = RDSRec - StandardUnloadSignature = RDSRec - If LoadExtra1Signature NE '' then - If UnloadExtra2Signature EQ '' AND LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then - Response = True$ - end + if Error_Services('NoError') then + StandardLoadSignature = RDSRec + UnloadExtra1Signature = RDSRec + LoadExtra1Signature = RDSRec + UnloadExtra2Signature = RDSRec + LoadExtra2Signature = RDSRec + StandardUnloadSignature = RDSRec + If LoadExtra1Signature NE '' then + If UnloadExtra2Signature EQ '' AND LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then + Response = True$ + end + end + end else + ErrorMsg = Error_Services('GetMessage') end - + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end + end service Service LoadExtra2ndReady(RDSNo) + ErrorMsg = '' Response = False$ RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - StandardLoadSignature = RDSRec - UnloadExtra1Signature = RDSRec - LoadExtra1Signature = RDSRec - UnloadExtra2Signature = RDSRec - LoadExtra2Signature = RDSRec - StandardUnloadSignature = RDSRec - Reactor = RDSRec - - If Reactor NE '' then - WONo = RDSRec - 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 + If Error_Services('NoError') then + StandardLoadSignature = RDSRec + UnloadExtra1Signature = RDSRec + LoadExtra1Signature = RDSRec + UnloadExtra2Signature = RDSRec + LoadExtra2Signature = RDSRec + StandardUnloadSignature = RDSRec + Reactor = RDSRec - 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 + If Reactor NE '' then + WONo = RDSRec + 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 then + If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then + Response = True$ + end else + ErrorMsg = 'RDS is not eligible to have the Load Extra 2 set.' + end + end else + Swap @VM with ',' in SchedReactors + ErrorMsg = 'Assigned reactor, ':Reactor:', does not equal any scheduled reactor(s), ':SchedReactors:'.' + Response = False$ + end end + end else + ErrorMsg = Error_Services('GetMessage') end - If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then - Response = True$ + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) end - + end service Service UnsignLoadExtra2ndReady(RDSNo) + ErrorMsg = '' Response = False$ RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) - StandardLoadSignature = RDSRec - UnloadExtra1Signature = RDSRec - LoadExtra1Signature = RDSRec - UnloadExtra2Signature = RDSRec - LoadExtra2Signature = RDSRec - StandardUnloadSignature = RDSRec - If LoadExtra2Signature NE '' then - If StandardUnloadSignature EQ '' then - Response = True$ - end + If Error_Services('NoError') then + StandardLoadSignature = RDSRec + UnloadExtra1Signature = RDSRec + LoadExtra1Signature = RDSRec + UnloadExtra2Signature = RDSRec + LoadExtra2Signature = RDSRec + StandardUnloadSignature = RDSRec + If LoadExtra2Signature NE '' then + If StandardUnloadSignature EQ '' then + Response = True$ + end + end + end else + ErrorMsg = Error_Services('GetMessage') + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) end end service @@ -3834,10 +3790,14 @@ Service UnsignPreEpiReady(RDSNo) 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$ + If Error_Services('NoError') then + If LoadSig EQ '' then + UnsignPreEpiReady = True$ + end else + ErrorMsg = 'Load signature is set.' + end end else - ErrorMsg = 'Load signature is set.' + ErrorMsg = Error_Services('GetMessage') end end else ErrorMsg = 'A signature beyond pre-epi exists. Please check later stages of this RDS.' @@ -3883,3 +3843,4 @@ return + diff --git a/LSL2/STPROC/RDS_EVENTS.txt b/LSL2/STPROC/RDS_EVENTS.txt index 00b2201..529db86 100644 --- a/LSL2/STPROC/RDS_EVENTS.txt +++ b/LSL2/STPROC/RDS_EVENTS.txt @@ -169,7 +169,6 @@ 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') @@ -187,243 +186,252 @@ Event PUB_SIGN.CLICK() 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 = Database_Services('ReadDataColumn', 'RDS', RDSNo, RDS_REACTOR$, True$, 0, False$) - If Reactor NE '' then - ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) - ReactorType = ReactorRec - 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 - 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 (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 - If ROTRStatus EQ 'F' then - FailReason = ReactorRec - Message = 'Unable to load reactor.' : CRLF$ : FailReason - RotrOverrideCount = ReactorRec - 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 = 'P' - - rotrStatusReason = ReactorRec - ReactorRec = rotrStatusReason - ReactorRec = '' - - ReactorRec = RDSNo - - rotrOverrideCount = ReactorRec - ReactorRec = 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 - // ROTR override not verified. Block load signature. - return - end - end else - // Block load signature - 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 - 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) + If Error_Services('NoError') then + If Reactor NE '' then + ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) + if Error_Services('NoError') then + ReactorType = ReactorRec + ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X') - 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 + // 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 + 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 - 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 + + 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 + If ROTRStatus EQ 'F' then + FailReason = ReactorRec + Message = 'Unable to load reactor.' : CRLF$ : FailReason + RotrOverrideCount = ReactorRec + 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 - 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', '') + 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 = 'P' + + rotrStatusReason = ReactorRec + ReactorRec = rotrStatusReason + ReactorRec = '' + + ReactorRec = RDSNo + + rotrOverrideCount = ReactorRec + ReactorRec = 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 + // ROTR override not verified. Block load signature. 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 + // Block load signature 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 + 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', '') + end else + return + end + end 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 - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) + + 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 + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + ErrMsg(ErrorMsg) end end else - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) + ErrorMsg = Error_Services('GetMessage') + Msg(@Window, ErrorMsg) end - end - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - ErrMsg(ErrorMsg) + 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 end else - Msg(@Window, "RDS is not assigned to a reactor.") + ErrorMsg = Error_Services('GetMessage') + Msg(@Window, ErrorMsg) end GoSub OLE_LL_Status Set_Property(@Window, 'SAVEWARN', False$) @@ -720,3 +728,4 @@ return + diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt index c77231f..339d8b8 100644 --- a/LSL2/STPROC/RDS_SERVICES.txt +++ b/LSL2/STPROC/RDS_SERVICES.txt @@ -1925,6 +1925,9 @@ Service PushSigProfileToWoMat(RDSNo) WOMatSigProf = obj_WO_Mat('CassSigProfile', WOMatKey) WOMatSig = WOMatRec WOMatSigDTM = WOMatRec + WOMatSigProfOrig = WOMatSigProf + WOMatSigOrig = WOMatSig + WOMatSigDTMOrig = WOMatSigDTM // Update WO_MAT signature profile to match for the "1VER" stage Stage = '1VER' @@ -1996,9 +1999,15 @@ Service PushSigProfileToWoMat(RDSNo) WOMatSigDTM<0, vPos> = FQASigDTM 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) + 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 end else ErrorMsg = Error_Services('GetMessage') @@ -2364,31 +2373,21 @@ Service UnsignPreEpiSignature(RDSNo, UserId) 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$) + RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo, True$, 0, False$) + if Error_Services('NoError') then + RDSRec = '' + RDSRec = '' + RDSRec = '' + RDSRec = '' + RDSRec = '' + Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, 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 + PreEpiUnsign = True$ end else - ErrorMsg = 'Error clearing the RDS Pre Epi Signature Date on RDS ' : RDSNo : '.' + ErrorMsg = Error_Services('GetMessage') end end else - ErrorMsg = 'Error clearing the RDS Pre Epi Signature on RDS ' : RDSNo : '.' + ErrorMsg = Error_Services('GetMessage') end end else ErrorMsg = 'Pre Epi is unable to be unsigned because a signature beyond pre-epi exists.' @@ -2464,3 +2463,4 @@ return +