From 781274c3951cba6b77a32e33e3287dcefc5ef1ed Mon Sep 17 00:00:00 2001 From: "Ouellette Jonathan (CSC FI SPS MESLEO)" Date: Mon, 14 Apr 2025 23:28:55 +0200 Subject: [PATCH] Merged PR 15044: Created a routine to determine lot eligible to be peeled off. Modified form l... Created a routine to determine lot eligible to be peeled off. Modified form logic to allow for lots to be selected out of order. Related work items: #252918 --- LSL2/STPROC/NDW_WO_LOG_EVENTS.txt | 448 +++++++++++++++------------- LSL2/STPROC/WORK_ORDER_SERVICES.txt | 105 ++++++- 2 files changed, 342 insertions(+), 211 deletions(-) diff --git a/LSL2/STPROC/NDW_WO_LOG_EVENTS.txt b/LSL2/STPROC/NDW_WO_LOG_EVENTS.txt index 17ffe62..e8d165e 100644 --- a/LSL2/STPROC/NDW_WO_LOG_EVENTS.txt +++ b/LSL2/STPROC/NDW_WO_LOG_EVENTS.txt @@ -73,6 +73,7 @@ $Insert ORDER_EQU $Insert ORDER_DET_EQU $Insert RLIST_EQUATES $Insert WO_STEP_EQUATES +$Insert RDS_EQUATES EQU COL$QUOTE_DESC TO 1 EQU COL$SETUP_CHG TO 4 @@ -1185,153 +1186,97 @@ Event PUB_REFRESH_SIG_PROFILE.CLICK() end event - Event PUB_REM_CASS.CLICK() + + ErrorMessage = '' WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT') - WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X') - IF WONo NE '' then - WORec = XLATE('WO_LOG',WONo,'','X') - WOMatKeys = WORec - WMInKeys = XLATE('WO_STEP', WOStepKey, WO_STEP_WM_IN_KEYS$, 'X') - WMInTestSTring = WMInKeys - - CONVERT @VM TO '' IN WMInTestString - - WMInCnt = COUNT(WMInKeys,@VM) + (WMinKeys NE '') - - RDSNos = '' - CassNos = '' - - WMIData = '' - RDSData = '' - - Display = '' - DispLine = 1 - - IF WMInTestString NE '' THEN - //EPP Case for WMI - FOR I = WMInCnt TO 1 STEP -1 - WMIRec = XLATE('WM_IN',WMInKeys<1,I>,'','X') - WMIRdsNos = WMIRec - WMINCRNos = WMIRec - CONVERT @VM TO '' IN WMIRdsNos - CONVERT @VM TO '' IN WMINCRNos - UNTIL WMIRdsNos NE '' OR WMINCRNos NE '' - Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2) - Display<1,DispLine,2> = XLATE('WO_MAT',WOMatKeys<1,I>,WO_MAT_LOT_NO$,'X') - Display<1,DispLine,3> = XLATE('WO_MAT',WOMatKeys<1,I>,WO_MAT_WAFER_QTY$,'X') - Display<1,DispLine,4> = WMInKeys<1,I> - Display<1,DispLine,5> = OCONV(XLATE('WM_IN',WMInKeys<1,I>,'CURR_STATUS','X'),'[WM_IN_CURR_STATUS_CONV]') - DispLine += 1 - NEXT I - - IF Display NE '' THEN - TypeOver = '' - TypeOver = Display - WMIData = Popup(@WINDOW,TypeOver,'UNUSED_WM_IN') - - WMIDCnt = COUNT(WMIData,@FM) + (WMIData NE '') - FOR N = 1 TO WMIDCnt - IF WMIData NE Display<1,N,1> THEN - ErrMsg('You must pick cassettes from the top line downward in sequence.') - RETURN - END - NEXT N - - IF WMIData = '' OR WMIData = CHAR(27) THEN - RETURN ;* Cancelled out - END - END ELSE - ErrMsg('All cassettes on this Work Order have started processing.') - RETURN - END - - DelWMInKeys = '' - FOR I = 1 TO COUNT(WMIData,@FM) + (WMIData NE '') - CassNos<1,I> = WMIData - DelWMInKeys<1,I> = WMIData - NEXT I - - TestWMInKeys = DelWMInKeys - - IF TestWMInKeys NE '' THEN - Set_Status(0) - for each DelWMInKey in DelWMInKeys using @VM - Work_Order_Services('SignVoidWMI', DelWMInKey, @USER4) - Next DelWMInKey - END - END ELSE - //Non-EPP Case for RDS - CassCnt = COUNT(WOMatKeys,@VM) + (WOMatKeys NE '') - - FOR I = CassCnt TO 1 STEP -1 - - WOMatKey = WOMatKeys<1,I> - WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') - - WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey:@RM:WOMatRec) - - WOMatSigs = WOMatRec - CONVERT @VM TO '' IN WOMatSigs - - UNTIL WOMatSigs NE '' - If WoMatCurrStatus NE 'VOID' then - Display<1,DispLine,1> = WOMatKeys<1,I>[-1,'B*'] + IF WONo NE '' then + WOReactType = Xlate('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X') + Begin Case + Case WOReactType EQ 'EPP' + CassList = Work_Order_Services('GetEligiblePeelOffLotsByWOAndEntityType', WONo, 'WM_IN') + Case WOReactType EQ 'ASM' OR WOReactType EQ 'HTR' OR WOReactType EQ 'ASM+' + CassList = Work_Order_Services('GetEligiblePeelOffLotsByWOAndEntityType', WONo, 'RDS') + Case Otherwise$ + ErrorMessage = 'Unsupported or null reactor type for this work order.' + End Case + If ErrorMessage EQ '' then + If CassList NE '' then + Display = '' + DispLine = 1 + For each Cass in CassList using @VM + Begin Case + Case WOReactType EQ 'EPP' + WOMatKey = Field(Cass, '*', 1) : '*' : Field(Cass, '*', 3) + Case WOReactType EQ 'ASM' OR WOReactType EQ 'HTR' OR WOReactType EQ 'ASM+' + WOMatKey = Cass + End Case + WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, True$, 0, False$) + If WOReactType EQ 'EPP' then + CassNo = Field(Cass, '*', 3) + CassId = Cass + UnConvCurrStatus = XLATE('WM_IN',CassId,'CURR_STATUS','X') + CassCurrStatus = OCONV(UnConvCurrStatus,'[WM_IN_CURR_STATUS_CONV]') + end else + CassNo = Field(Cass, '*', 2) + CassId = WOMatRec + UnConvCurrStatus = obj_WO_Mat('CurrStatus',CassId:@RM:WOMatRec) + CassCurrStatus = OConv(UnConvCurrStatus, '[WO_MAT_CURR_STATUS_CONV]') + end + Display<1,DispLine,1> = CassNo Display<1,DispLine,2> = WOMatRec Display<1,DispLine,3> = WOMatRec - Display<1,DispLine,4> = WOMatRec - Display<1,DispLine,5> = OCONV(WOMatCurrStatus,'[WO_MAT_CURR_STATUS_CONV]') + Display<1,DispLine,4> = CassId + Display<1,DispLine,5> = CassCurrStatus DispLine += 1 - end - NEXT I - IF Display NE '' THEN + Next Cass + CassettesToVoid = '' TypeOver = '' TypeOver = Display - UnusedData = Popup(@WINDOW,TypeOver,'UNUSED_RDS') - END ELSE - ErrMsg('All cassettes on this Work Order have started processing.') - RETURN - END - - IF UnusedData = '' OR UnusedData = CHAR(27) THEN - RETURN ;* Cancelled out - END - - UnusedCnt = COUNT(UnusedData,@FM) + (UnusedData NE '') - - FOR I = 1 TO UnusedCnt - IF Display<1,I,1> = UnusedData THEN - CassNos<1,I> = UnusedData - RDSNos<1,I> = UnusedData - END ELSE - Msg(@WINDOW,'','WO_MAT_REMOVAL') - RETURN - END - NEXT I - - VoidStatusMessage = '' - for each CassNo in CassNos using @VM - WoMatKey = WONo : '*' : CassNo - Work_Order_Services('SignVoidNonEpp', WoMatKey, @USER4) - If Error_Services('HasError') then - VoidStatusMessage = Error_Services('GetMessage') + If WOReactType EQ 'EPP' then + CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_WM_IN') + If CassettesToVoid NE '' then + for each CassetteToVoid in CassettesToVoid using @FM + WMIToVoid = CassetteToVoid<1,4> + Work_Order_Services('SignVoidWMI', WMIToVoid, @USER4) + If Error_Services('HasError') then + ErrorMessage = Error_Services('GetMessage') + end + Until ErrorMessage NE '' + Next CassetteToVoid + end else + ErrorMessage = 'No cassettes were selected.' + end + + end else + CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_RDS') + for each CassetteToVoid in CassettesToVoid using @FM + + RDSToVoid = CassetteToVoid<1,4> + WONo = XLATE('RDS', RDSToVoid, RDS_WO$, 'X') + CassNo = XLATE('RDS', RDSToVoid, RDS_CASS_NO$, 'X') + WOMatKey = WONo : '*' : CassNo + Work_Order_Services('SignVoidNonEPP', WOMatKey, @USER4) + If Error_Services('HasError') then + ErrorMessage = Error_Services('GetMessage') + end + Until ErrorMessage NE '' + Next CassetteToVoid end - Next CassNo - If VoidStatusMessage EQ '' then - VoidStatusMessage = 'All cassettes have been queued for void.' + end else + ErrorMessage = 'No eligible lots from this work order found to void.' end - Msg(@Window, VoidStatusMessage) - END - - IF Display = '' THEN - ErrMsg('All cassettes on this Work Order have started processing.') - RETURN - END - + end + end else + Msg(@Window, ErrorMessage) + return + end + If ErrorMessage EQ '' then + //Now send a message Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X') SentFrom = @USER4 - Subject = 'Unprocessed Cassettes removed from WO ':WONo + Subject = 'Cassettes removed from WO ':WONo Message = 'Cassettes removed from WO.' NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X') If NewForm then @@ -1345,90 +1290,177 @@ Event PUB_REM_CASS.CLICK() Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup obj_Notes('Create',Parms) - GoSub PopulateControls - - IF Get_Status(errCode) THEN - ErrMsg(errCode) - END + Msg(@Window, 'All selected lots queued for void.') + end else + Msg('Error in voiding lots process : ' : ErrorMessage) end - + GoSub PopulateControls end event - Event PUB_REM_WM_OUT.CLICK() + ErrorMessage = '' WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT') - WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X') - IF WONo NE '' then - WORec = XLATE('WO_LOG',WONo,'','X') - WOMatKeys = WORec - WMOutKeys = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_OUT_KEYS$, True$, 0, False$) - WMOutCnt = COUNT(WMOutKeys,@VM) + (WMOutKeys NE '') - - Display = '' - DispLine = 1 - - IF WMOutCnt > 0 THEN - - FOR I = WMOutCnt TO 1 STEP -1 - WMORec = XLATE('WM_OUT',WMOutKeys<1,I>,'','X') - WMO_RdsNos = WMORec - WMO_NCRNos = WMORec - WMO_UMWCassIDs = WMORec - CONVERT @VM TO '' IN WMO_RdsNos - CONVERT @VM TO '' IN WMO_NCRNos - CONVERT @VM TO '' IN WMO_UMWCassIDs - - UNTIL WMO_RdsNos NE '' OR WMO_NCRNos NE '' OR WMO_UMWCassIDs NE '' - Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2) - Display<1,DispLine,2> = OCONV(obj_WM_Out('CurrStatus',WOMatKeys<1,I>:@RM:WMORec),'[WO_MAT_CURR_STATUS_CONV]') - Display<1,DispLine,3> = WMOutKeys<1,I> - DispLine += 1 - NEXT I - - IF Display NE '' THEN + IF WONo NE '' then + WOReactType = Xlate('WO_LOG', WONo, WO_LOG_REACT_TYPE$, 'X') + Begin Case + Case WOReactType EQ 'EPP' + CassList = Work_Order_Services('GetEligiblePeelOffLotsByWOAndEntityType', WONo, 'WM_OUT') + Case WOReactType EQ 'ASM' OR WOReactType EQ 'HTR' OR WOReactType EQ 'ASM+' + ErrorMessage = 'Non EpiPro work order types do not utilize WM_OUT cassettes. Nothing to void.' + Case Otherwise$ + ErrorMessage = 'Unsupported or null reactor type for this work order.' + End Case + If ErrorMessage EQ '' then + If CassList NE '' then + Display = '' + DispLine = 1 + For each Cass in CassList using @VM + WOMatKey = Field(Cass, '*', 1) : '*' : Field(Cass, '*', 3) + WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, True$, 0, False$) + CassNo = Field(Cass, '*', 3) + CassId = Cass + UnConvCurrStatus = XLATE('WM_OUT',CassId,'CURR_STATUS','X') + CassCurrStatus = OCONV(UnConvCurrStatus,'[WM_OUT_CURR_STATUS_CONV]') + +* Display<1,DispLine,1> = CassNo +* Display<1,DispLine,2> = WOMatRec +* Display<1,DispLine,3> = WOMatRec +* Display<1,DispLine,4> = CassId +* Display<1,DispLine,5> = CassCurrStatus +* Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2) +* Display<1,DispLine,2> = OCONV(obj_WM_Out('CurrStatus',WOMatKeys<1,I>:@RM:WMORec),'[WO_MAT_CURR_STATUS_CONV]') +* Display<1,DispLine,3> = WMOutKeys<1,I> + + Display<1,DispLine,1> = CassNo + Display<1,DispLine,2> = CassCurrStatus + Display<1,DispLine,3> = CassId + DispLine += 1 + Next Cass + CassettesToVoid = '' TypeOver = '' TypeOver = Display - TypeOver = 'Unused WM_OUT Cassettes' - WMOData = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT') - IF WMOData = '' OR WMOData = CHAR(27) THEN RETURN ;* Cancelled out - END ELSE - ErrMsg('All cassettes on this Work Order have started processing.') - RETURN - END - - DelWMOutKeys = '' - FOR I = 1 TO COUNT(WMOData,@FM) + (WMOData NE '') - DelWMOutKeys<1,I> = WMOData - NEXT I - - TestWMOutKeys = DelWMOutKeys - - IF TestWMOutKeys NE '' THEN - for each WMOutKey in TestWMOutKeys using @VM - Work_Order_Services('SignVoidWMO', WMOutKey, @USER4) - Next WMOutKey - If Error_Services('HasError') then - Msg(@Window, Error_Services('GetMessage')) + CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT') + If CassettesToVoid NE '' then + for each CassetteToVoid in CassettesToVoid using @FM + WMOToVoid = CassetteToVoid<1,3> + Work_Order_Services('SignVoidWMO', WMOToVoid, @USER4) + If Error_Services('HasError') then + ErrorMessage = Error_Services('GetMessage') + end + Until ErrorMessage NE '' + Next CassetteToVoid + end else + ErrorMessage = 'No lots were selected to void.' end - END - END - - IF Display = '' THEN - ErrMsg('All cassettes on this Work Order have had wafers placed in them.') - RETURN - END - - IF Get_Status(errCode) THEN - ErrMsg(errCode) - END - - GoSub PopulateControls + end else + ErrorMessage = 'No eligible lots from this work order found to void.' + end + end else + Msg(@Window, ErrorMessage) + return + end end - + If ErrorMessage EQ '' then + //Now send a message + Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X') + SentFrom = @USER4 + Subject = 'Cassettes removed from WO ':WONo + Message = 'Cassettes removed from WO.' + NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X') + If NewForm then + AttachWindow = 'NDW_WO_LOG' + end else + AttachWindow = 'WO_LOG2' + end + AttachKey = WONo + SendToGroup = '' + + Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup + obj_Notes('Create',Parms) + + Msg(@Window, 'All selected lots queued for void.') + + end else + Msg('Error in voiding lots process : ' : ErrorMessage) + end + GoSub PopulateControls end event +* Event PUB_REM_WM_OUT.CLICK() +* WONo = Get_Property(@WINDOW:'.EDL_WO_NO','TEXT') +* WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X') +* IF WONo NE '' then +* +* WORec = XLATE('WO_LOG',WONo,'','X') +* WOMatKeys = WORec +* WMOutKeys = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_OUT_KEYS$, True$, 0, False$) +* WMOutCnt = COUNT(WMOutKeys,@VM) + (WMOutKeys NE '') +* +* Display = '' +* DispLine = 1 +* +* IF WMOutCnt > 0 THEN +* +* FOR I = WMOutCnt TO 1 STEP -1 +* WMORec = XLATE('WM_OUT',WMOutKeys<1,I>,'','X') +* WMO_RdsNos = WMORec +* WMO_NCRNos = WMORec +* WMO_UMWCassIDs = WMORec +* CONVERT @VM TO '' IN WMO_RdsNos +* CONVERT @VM TO '' IN WMO_NCRNos +* CONVERT @VM TO '' IN WMO_UMWCassIDs +* +* UNTIL WMO_RdsNos NE '' OR WMO_NCRNos NE '' OR WMO_UMWCassIDs NE '' +* Display<1,DispLine,1> = FIELD(WOMatKeys<1,I>,'*',2) +* Display<1,DispLine,2> = OCONV(obj_WM_Out('CurrStatus',WOMatKeys<1,I>:@RM:WMORec),'[WO_MAT_CURR_STATUS_CONV]') +* Display<1,DispLine,3> = WMOutKeys<1,I> +* DispLine += 1 +* NEXT I +* +* IF Display NE '' THEN +* TypeOver = '' +* TypeOver = Display +* TypeOver = 'Unused WM_OUT Cassettes' +* WMOData = Popup(@WINDOW,TypeOver,'UNUSED_WM_OUT') +* IF WMOData = '' OR WMOData = CHAR(27) THEN RETURN ;* Cancelled out +* END ELSE +* ErrMsg('All cassettes on this Work Order have started processing.') +* RETURN +* END +* +* DelWMOutKeys = '' +* FOR I = 1 TO COUNT(WMOData,@FM) + (WMOData NE '') +* DelWMOutKeys<1,I> = WMOData +* NEXT I +* +* TestWMOutKeys = DelWMOutKeys +* +* IF TestWMOutKeys NE '' THEN +* for each WMOutKey in TestWMOutKeys using @VM +* Work_Order_Services('SignVoidWMO', WMOutKey, @USER4) +* Next WMOutKey +* If Error_Services('HasError') then +* Msg(@Window, Error_Services('GetMessage')) +* end +* END +* END +* +* IF Display = '' THEN +* ErrMsg('All cassettes on this Work Order have had wafers placed in them.') +* RETURN +* END +* +* IF Get_Status(errCode) THEN +* ErrMsg(errCode) +* END +* +* GoSub PopulateControls +* end +* +* end event + Event PUB_RECALL.CLICK() @@ -2138,7 +2170,3 @@ StartStopDate: END return - - - - diff --git a/LSL2/STPROC/WORK_ORDER_SERVICES.txt b/LSL2/STPROC/WORK_ORDER_SERVICES.txt index 9d8e33d..f986b62 100644 --- a/LSL2/STPROC/WORK_ORDER_SERVICES.txt +++ b/LSL2/STPROC/WORK_ORDER_SERVICES.txt @@ -54,7 +54,7 @@ Declare subroutine Print_Wmi_Labels, Print_Wmo_Labels, ErrMsg, Print_Cass_Label Declare subroutine obj_WO_Mat_Log, WO_Mat_Services, Work_Order_Services Declare function SRP_Array, Work_Order_Services, Memory_Services, Database_Services, SRP_Sort_Array, SRP_JSON Declare function Company_Services, obj_Prod_Spec, Schedule_Services, Datetime, obj_WO_Log, obj_WO_Step, Memberof -Declare function Environment_Services, Logging_Services, Hold_Services +Declare function Environment_Services, Logging_Services, Hold_Services, Signature_Services LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_LOG' LogDate = Oconv(Date(), 'D4/') @@ -1442,6 +1442,108 @@ Service SignVoidWMO(WMOutKey, Username) end service +Service GetEligiblePeelOffLotsByWOAndEntityType(WONo, EntityType) + + ErrorMessage = '' + EligibleCassIds = '' + + If RowExists('WO_LOG', WONo) then + Begin Case + Case EntityType EQ 'RDS' + CassIds = Database_Services('ReadDataColumn', 'WO_LOG', WONo, WO_LOG_WO_MAT_KEY$, True$, 0, False$) + for each CassId in CassIds using @VM + RDSNo = XLATE('WO_MAT', CassId, WO_MAT_RDS_NO$, 'X') + Signatures = Signature_Services('GetSigProfile', CassId, 0, RDSNo) + Eligible = True$ + for each Signature in Signatures<1> using @VM setting SigPos + SignatureDtm = Signatures<3, SigPos> + If SignatureDtm NE '' then + Eligible = False$ + end + Until Eligible EQ False$ + Next Signature + If Eligible then EligibleCassIds<1, -1> = CassId + Next CassId + Case EntityType EQ 'WM_OUT' + //WM_OUTS can be voided when + //1. There are no RDS Nos associated + //2. There have never been any wafers in them + WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X') + CassIds = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_OUT_KEYS$, True$, 0, False$) + for each CassId in CassIds using @VM + WMORec = Database_Services('ReadDataRow', 'WM_OUT', CassId, True$, 0, False);//XLATE('WM_OUT',WMOutKeys<1,I>,'','X') + WMO_RdsNos = WMORec + WMO_NCRNos = WMORec + WMO_UMWCassIDs = WMORec + Eligible = True$ + //Loop through RDS list to see if there is an RDS attached. If there are any RDS No's attached it is not eligible. + for each RDSNo in WMO_RDSNos using @VM + If RDSNo NE '' then + Eligible = False$ + end + Until Eligible EQ False$ + Next RDSNo + //Loop through NCR list to see if there are any NCR's associated. If there are any NCR No's attached it is not eligible. + If Eligible then + For Each NCRNo in WMO_NCRNos using @VM + If NCRNo NE '' then + Eligible = False$ + end + Until Eligible EQ False$ + Next NCR + end + //Loop through MU Wafer Usage list to see if there are any MU wafer's taken from this lot. If there are any Makeup Wafers attached it is not eligible. + If Eligible then + For Each UMWCass in WMO_UMWCassIDs using @VM + If UMWCass NE '' then + Eligible = False$ + end + Until Eligible EQ False$ + Next UMWCass + end + If Eligible then EligibleCassIds<1, -1> = CassId + Next CassId + Case EntityType EQ 'WM_IN' + WOStepKey = XLATE('WO_LOG', WONo, WO_LOG_WO_STEP_KEY$, 'X') + CassIds = Database_Services('ReadDataColumn', 'WO_STEP', WOStepKey, WO_STEP_WM_IN_KEYS$, True$, 0, False$) + for each CassId in CassIds using @VM + Eligible = True$ + WMIRec = Database_Services('ReadDataRow', 'WM_IN', CassId, True$, 0, False);//XLATE('WM_OUT',WMOutKeys<1,I>,'','X') + WMI_RdsNos = WMIRec + WMI_NCRNos = WMIRec + Eligible = True$ + //Loop through RDS list to see if there is an RDS attached. If there are any RDS No's attached it is not eligible. + for each RDSNo in WMI_RDSNos using @VM + If RDSNo NE '' then + Eligible = False$ + end + Until Eligible EQ False$ + Next RDSNo + //Loop through NCR list to see if there are any NCR's associated. If there are any NCR No's attached it is not eligible. + If Eligible then + For Each NCRNo in WMI_NCRNos using @VM + If NCRNo NE '' then + Eligible = False$ + end + Until Eligible EQ False$ + Next NCR + end + If Eligible then EligibleCassIds<1, -1> = CassId + Next CassId + Case EntityType EQ '' + ErrorMessage = 'Entity type parameter was invalid.' + Case Otherwise$ + ErrorMessage = 'Entity type parameter was null.' + End Case + end else + ErrorMessage = 'WO# ' : WONo : ' not found in WO_LOG table.' + end + If ErrorMessage NE '' then + Error_Services('Add', 'Error in ' : Service : '. ' : ErrorMessage) + end + + Response = EligibleCassIds +end service //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs @@ -1455,3 +1557,4 @@ ClearCursors: return +