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
This commit is contained in:
Ouellette Jonathan (CSC FI SPS MESLEO) 2025-04-14 23:28:55 +02:00
parent 32df3e6816
commit 781274c395
2 changed files with 342 additions and 211 deletions

View File

@ -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<WO_LOG_WO_MAT_KEY$>
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<WM_IN_RDS_NO$>
WMINCRNos = WMIRec<WM_IN_SLOT_NCR$>
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<PDISPLAY$> = Display
WMIData = Popup(@WINDOW,TypeOver,'UNUSED_WM_IN')
WMIDCnt = COUNT(WMIData,@FM) + (WMIData NE '')
FOR N = 1 TO WMIDCnt
IF WMIData<N,1> 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<I,1>
DelWMInKeys<1,I> = WMIData<I,4>
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<WO_MAT_SIGNATURE$>
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<WO_MAT_RDS_NO$>
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<WO_MAT_LOT_NO$>
Display<1,DispLine,3> = WOMatRec<WO_MAT_WAFER_QTY$>
Display<1,DispLine,4> = WOMatRec<WO_MAT_RDS_NO$>
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<PDISPLAY$> = 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<I,1> THEN
CassNos<1,I> = UnusedData<I,1>
RDSNos<1,I> = UnusedData<I,4>
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<WO_LOG_WO_MAT_KEY$>
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<WM_OUT_RDS$>
WMO_NCRNos = WMORec<WM_OUT_SLOT_NCR$>
WMO_UMWCassIDs = WMORec<WM_OUT_UMW_CASS_ID$>
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<WO_MAT_LOT_NO$>
* Display<1,DispLine,3> = WOMatRec<WO_MAT_WAFER_QTY$>
* 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<PDISPLAY$> = Display
TypeOver<PTITLE$> = '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<I,3>
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<WO_LOG_WO_MAT_KEY$>
* 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<WM_OUT_RDS$>
* WMO_NCRNos = WMORec<WM_OUT_SLOT_NCR$>
* WMO_UMWCassIDs = WMORec<WM_OUT_UMW_CASS_ID$>
* 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<PDISPLAY$> = Display
* TypeOver<PTITLE$> = '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<I,3>
* 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

View File

@ -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<WM_OUT_RDS$>
WMO_NCRNos = WMORec<WM_OUT_SLOT_NCR$>
WMO_UMWCassIDs = WMORec<WM_OUT_UMW_CASS_ID$>
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<WM_IN_RDS_NO$>
WMI_NCRNos = WMIRec<WM_IN_NCR_NO$>
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