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:
parent
32df3e6816
commit
781274c395
@ -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*']
|
||||
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 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
|
||||
|
||||
IF UnusedData = '' OR UnusedData = CHAR(27) THEN
|
||||
RETURN ;* Cancelled out
|
||||
END
|
||||
end else
|
||||
CassettesToVoid = Popup(@WINDOW,TypeOver,'UNUSED_RDS')
|
||||
for each CassetteToVoid in CassettesToVoid using @FM
|
||||
|
||||
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')
|
||||
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
|
||||
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]')
|
||||
|
||||
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<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 = ''
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user