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 CassNos = WOReactRec 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 Interval = QAMetData Stage = QAMetData MetPropCd = QAMetData 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 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 ;* List after insert CassNos = WOReactRec ;* 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 CassNos = WOReactRec 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 Interval = QAMetData Stage = QAMetData MetPropCd = QAMetData 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 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 ;* List after removal CassNos = WOReactRec ;* 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:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData:@RM owmParms := QAMetData ; // 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