open-insight/LSL2/STPROC/OBJ_WO_REACT.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

328 lines
8.4 KiB
Plaintext

COMPILE FUNCTION obj_WO_React(Method,Parms)
/*
Methods for the WO_React table
03/31/2015 JCH - Initial Coding
Properties:
Methods:
AddRDSNo
RemRDSNo
*/
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA
$INSERT MSG_EQUATES
$INSERT WO_REACT_EQUATES
$INSERT PRS_STAGE_EQUATES
$INSERT WO_MAT_EQUATES
$INSERT RDS_EQUATES
$INSERT QA_MET_EQUATES ;* Used in GetQAMet data structure return variable
ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"'
ErrorMsg = ''
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
Result = ''
Log = ''
BEGIN CASE
CASE Method = 'AddRdsNo' ; GOSUB AddRdsNo
CASE Method = 'RemRdsNo' ; GOSUB RemRdsNo
CASE 1
ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to object.'
END CASE
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
RETURN Result
* * * * * * *
AddRdsNo:
* * * * * * *
WONo = Parms[1,@RM]
StepNo = Parms[COL2()+1,@RM]
ReactNo = Parms[COL2()+1,@RM]
RdsNo = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM]
IF WONo = '' THEN RETURN
IF StepNo = '' THEN RETURN
IF ReactNo = '' THEN RETURN
IF RdsNo = '' THEN RETURN
IF CassNo = '' THEN RETURN
WOReactKey = WONo:'*':StepNo:'*':ReactNo
otParms = 'WO_REACT':@RM:WOReactKey
WOReactRec = obj_Tables('ReadOnlyRec',otParms)
RDSNos = WOReactRec<WO_REACT_RDS_NO$>
CassNos = WOReactRec<WO_REACT_CASS_NO$>
PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X')
PSNo = PSNos<1,StepNo>
QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * *
IF QAMetData = '' THEN RETURN ;* No reactor scheduled QA_MET specified
Start = QAMetData<COL$QA_MET_START>
Interval = QAMetData<COL$QA_MET_INTERVAL>
Stage = QAMetData<COL$QA_MET_STAGE>
MetPropCd = QAMetData<COL$QA_MET_PROP>
GOSUB BuildAllTestPos ;* Set RDSNos, Start and Interval -> returns AllTestPos
* * * Find where the the RDS being added will be in the list. * * *
LOCATE RDSNo IN WOReactRec<WO_REACT_RDS_NO$> BY 'AR' USING @VM SETTING InsPos THEN
otParms = 'WO_REACT':@RM:WOReactKey
WOReactRec = obj_Tables('UnlockRec',otParms)
RETURN ;* RDSNo already in this list -> nothing to do.
END ELSE
LOCATE InsPos IN AllTestPos BY 'AR' USING @VM SETTING TrimPos ELSE Null
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB RemSchedQA ;* Removes unsigned QAMet from cassettes scheduled past the box being removed
END
WOReactRec = INSERT(WOReactRec,WO_REACT_RDS_NO$,InsPos,0,RDSNo)
WOReactRec = INSERT(WOReactRec,WO_REACT_CASS_NO$,InsPos,0,CassNo) ;* Inserts the passed in RDSNo & associated cassette number from the data fields
RDSNos = WOReactRec<WO_REACT_RDS_NO$> ;* List after insert
CassNos = WOReactRec<WO_REACT_CASS_NO$> ;* List after insert
* * * Now build list for cassette
GOSUB BuildAllTestPos
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB AddSchedQA ;* Add QAMet spec data to cassettes now associated with the test positions after removing the RDS & Cassno from the lists
otParms = FIELDSTORE(otParms,@RM,4,0,WOReactRec)
obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REACT record
Result = Log
RETURN
* * * * * * *
RemRDSNo:
* * * * * * *
WONo = Parms[1,@RM]
StepNo = Parms[COL2()+1,@RM]
ReactNo = Parms[COL2()+1,@RM]
RdsNo = Parms[COL2()+1,@RM]
CassNo = Parms[COL2()+1,@RM]
IF WONo = '' THEN RETURN
IF StepNo = '' THEN RETURN
IF ReactNo = '' THEN RETURN
IF RdsNo = '' THEN RETURN
IF CassNo = '' THEN RETURN
WOReactKey = WONo:'*':StepNo:'*':ReactNo
otParms = 'WO_REACT':@RM:WOReactKey
// 10/12/18 Changed to ReadOnlyRec as per Francois' instructions. - djs
WOReactRec = obj_Tables('ReadOnlyRec',otParms)
RDSNos = WOReactRec<WO_REACT_RDS_NO$>
CassNos = WOReactRec<WO_REACT_CASS_NO$>
PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X')
PSNo = PSNos<1,StepNo>
QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * *
Start = QAMetData<COL$QA_MET_START>
Interval = QAMetData<COL$QA_MET_INTERVAL>
Stage = QAMetData<COL$QA_MET_STAGE>
MetPropCd = QAMetData<COL$QA_MET_PROP>
GOSUB BuildAllTestPos ;* Set RDSNos, Start and Interval -> returns AllTestPos
IF AllTestPos NE '' THEN
* * * Find where the the RDS being removed is in the list. * * *
LOCATE RDSNo IN WOReactRec<WO_REACT_RDS_NO$> USING @VM SETTING RemPos THEN
LOCATE RemPos IN AllTestPos BY 'AR' USING @VM SETTING TrimPos ELSE Null
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB RemSchedQA ;* Removes unsigned QAMet from cassettes scheduled past the box being removed
END ELSE
otParms = 'WO_REACT':@RM:WOReactKey
WOReactRec = obj_Tables('UnlockRec',otParms)
RETURN ;* RDSNo is not in this list -> nothing to do.
END
END ;* End of check for AllTestPos null
WOReactRec = DELETE(WOReactRec,WO_REACT_RDS_NO$,RemPos,0)
WOReactRec = DELETE(WOReactRec,WO_REACT_CASS_NO$,RemPos,0) ;* Removes the passed in RDSNo & associated cassette number from the data fields
RDSNos = WOReactRec<WO_REACT_RDS_NO$> ;* List after removal
CassNos = WOReactRec<WO_REACT_CASS_NO$> ;* List after removal
* * * Now build list for cassette
GOSUB BuildAllTestPos
ChangePosList = FIELD(AllTestPos,@VM,TrimPos,SeqCnt)
GOSUB AddSchedQA ;* Add QAMet spec data to cassettes now associated with the test positions after removing the RDS & Cassno from the lists
otParms = FIELDSTORE(otParms,@RM,4,0,WOReactRec)
// 10/12/18 Changed to WriteOnlyRec as per Francois' instructions. - djs
obj_Tables('WriteOnlyRec',otParms) ;* Done with updates to the WO_REACT record
Result = Log
RETURN
************** Internal Methods *************
* * * * * * *
BuildAllTestPos:
* * * * * * *
AllTestPos = ''
RDSCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
SeqCnt = 0
FOR TestSeq = 1 TO RDSCnt
IF REM((TestSeq - Start),Interval) = 0 THEN
AllTestPos<1,-1> = TestSeq ;* Build list of list positions to have QAMet scheduled
SeqCnt += 1
END
NEXT TestSeq
Log := 'AllTestPos: ':AllTestPos:@FM
RETURN
* * * * * * *
RemSchedQA:
* * * * * * *
chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '')
FOR I = 1 TO chgCnt
RemCassNo = CassNos<1,ChangePoslist<1,I>>
Log:= 'RemSched on CassNo: ':RemCassNo:@FM
owmParms = WONo:@RM:StepNo:@RM:RemCassNo:@RM:Stage:@RM:MetPropCd
obj_WO_Mat_QA('RemQAMet',owmParms) ;* Unschedule test boxes before list change
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
*obj_WO_Mat('RemQAMet',owmParms) ;* Dead 6/5/2015 JCH - Remove after a few days
*IF Get_Status(errCode) THEN
* ErrMsg(errCode)
*END
NEXT I
RETURN
* * * * * * *
AddSchedQA:
* * * * * * *
chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '')
FOR I = 1 TO chgCnt
AddCassNo = CassNos<1,ChangePoslist<1,I>>
Log:= 'AddSched on CassNo: ':AddCassNo:@FM
owmParms = WONo:@RM
owmParms := StepNo:@RM
owmParms := AddCassNo:@RM
owmParms := QAMetData<COL$QA_MET_STAGE>:@RM
owmParms := QAMetData<COL$QA_MET_TEST>:@RM
owmParms := QAMetData<COL$QA_MET_PROP>:@RM
owmParms := QAMetData<COL$QA_MET_TOOL_CLASS>:@RM
owmParms := QAMetData<COL$QA_MET_MIN>:@RM
owmParms := QAMetData<COL$QA_MET_MAX>:@RM
owmParms := QAMetData<COL$QA_MET_SLOT>:@RM
owmParms := QAMetData<COL$QA_MET_RECIPE>:@RM
owmParms := QAMetData<COL$QA_MET_RECIPE_PATTERN>:@RM
owmParms := QAMetData<COL$QA_MET_WFR_QTY>:@RM
owmParms := QAMetData<COL$QA_MET_WFR_TYPE>:@RM
owmParms := QAMetData<COL$QA_MET_REACT_SCHED>:@RM
owmParms := QAMetData<COL$QA_MET_SHIP_DOC>:@RM
owmParms := QAMetData<COL$QA_MET_PHASE_MIN> ; // 10/15/18 - djs - Added Phase Min Spec for HgCV
obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
*obj_WO_Mat('AddQAMet',owmParms) ;* Dead 6/5/2015 JCH - remove after a few days
*IF Get_Status(errCode) THEN
* ErrMsg(errCode)
*END
NEXT I
RETURN