Files
open-insight/LSL2/STPROC/WO_MAT_SERVICES.txt
Mitchem Dakota (CSC FI SPS MESLEO External) 273b7f67a6 Merged PR 19143: Require 100 percent centerpoint on MU conversion.
Initial commit.

Create FQASignatureReady service in QA_SERVICES.

Create SignFQA service in SIGNATURE_SERVICES.

Commit remaining portion of project.

Implement changes requested in review meeting.

Fix typo. Add new MU logic to final entry point.

Restrict logic to only apply to 'THICK'
inspections.

Bypass new logic if Biorad 4 and 5 are down.
2025-06-18 22:23:57 +02:00

523 lines
25 KiB
Plaintext

Compile function WO_MAT_Services(@Service, @Params)
#pragma precomp SRP_PreCompiler
Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services
Declare function Datetime, Rds_Services, GetTickCount
Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services
Declare subroutine obj_wo_mat_log, Set_Status, Rds_Services, Signature_Services, Mona_Services
$insert LOGICAL
$Insert APP_INSERTS
$insert WO_MAT_EQUATES
$Insert WO_LOG_EQUATES
$Insert SERVICE_SETUP
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\WO_Mat\InvActionsSyncUp'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' InvActionsSyncUpLog.csv'
Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'Missing Signature' : @FM : 'Missing Signature Dtm' : @FM : 'Message'
objSyncLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
IsProd = Environment_Services('IsProd')
If IsProd EQ True$ then
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_WOMATSERVICES'
end else
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_WOMATSERVICES'
end
GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end
Return Response or ""
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service ConvertRecordToJSON(WOMatKey, Record, ItemURL)
jsonRecord = ''
IF WOMatKey NE '' then
If Record EQ '' then Record = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
If Error_Services('NoError') then
@DICT = Database_Services('GetTableHandle', 'DICT.WO_MAT')
@ID = WOMatKey
@RECORD = Record
objJSON = ''
If SRP_JSON(objJSON, 'New', 'Object') then
objWOMat = ''
If SRP_JSON(objWOMat, 'New', 'Object') then
SRP_JSON(objWOMat, 'SetValue', 'KeyId', @ID)
SRP_JSON(objWOMat, 'SetValue', 'WoNo', {WO_NO})
SRP_JSON(objWOMat, 'SetValue', 'CassNo', {CASS_NO})
SRP_JSON(objWOMat, 'SetValue', 'Ver', {REC_VER})
SRP_JSON(objWOMat, 'SetValue', 'ProdOrdNo', {PROD_ORD_NO})
SRP_JSON(objWOMat, 'SetValue', 'SapBatchNo', {SAP_BATCH_NO})
SRP_JSON(objWOMat, 'SetValue', 'SapTxDtm', OConv({SAP_TX_DTM}, 'DT'))
SRP_JSON(objWOMat, 'SetValue', 'ReactorType', {REACTOR_TYPE})
SRP_JSON(objWOMat, 'SetValue', 'CustInfo', {CUST_INFO})
SRP_JSON(objWOMat, 'SetValue', 'LotNo', {LOT_NO})
SRP_JSON(objWOMat, 'SetValue', 'WaferQty', {WAFER_QTY})
SRP_JSON(objWOMat, 'SetValue', 'CustPartNo', {CUST_PART_NO})
SRP_JSON(objWOMat, 'SetValue', 'SubPartNo', {SUB_PART_NO})
SRP_JSON(objWOMat, 'SetValue', 'ProdVerNo', {PROD_VER_NO})
SRP_JSON(objWOMat, 'SetValue', 'ShipNo', {SHIP_NO})
SRP_JSON(objWOMat, 'SetValue', 'Hold', {HOLD})
SRP_JSON(objWOMat, 'SetValue', 'Makeup', {MAKEUP_BOX})
SRP_JSON(objWOMat, 'SetValue', 'HotLot', {HOT_LOT})
SRP_JSON(objWOMat, 'SetValue', 'Cancelled', {CANCELLED})
SRP_JSON(objWOMat, 'SetValue', 'Void', {VOID})
SRP_JSON(objWOMat, 'SetValue', 'RetReject', {RET_REJECTS})
SRP_JSON(objWOMat, 'SetValue', 'CassShipQty', {CASS_SHIP_QTY})
SRP_JSON(objWOMat, 'SetValue', 'GrQty', {SAP_GR_QTY})
SRP_JSON(objWOMat, 'SetValue', 'SapYield', {SAP_YIELD})
SRP_JSON(objWOMat, 'SetValue', 'SapMuQty', {SAP_MU_QTY})
SRP_JSON(objWOMat, 'SetValue', 'SapRawScrapQty', {SAP_RAW_SCRAP_QTY})
SRP_JSON(objWOMat, 'SetValue', 'SapScrapQty', {SAP_CONFIRM_SCRAP})
objInvActions = ''
If SRP_JSON(objInvActions, 'New', 'Array') then
InventoryActions = {INV_DTM}
If InventoryActions NE '' then
for each InvAction in InventoryActions using @VM setting vPos
//Add in each indv. inventory action
InvTimestamp = {INV_DTM}<1, vPos>
InvWhCd = {INV_WH}<1, vPos>
InvWarehouse = {INV_WH_DESC}<1, vPos>
InvLocCd = {INV_LOCATION}<1, vPos>
InvLocation = {INV_LOC_DESC}<1, vPos>
InvAction = {INV_ACTION}<1, vPos>
InvUserId = {INV_USER}<1, vPos>
InvTag = {INV_TAG}<1, vPos>
InvToolId = {INV_TOOL_ID}<1, vPos>
objInvAction = ''
If SRP_JSON(objInvAction, 'New', 'Object') then
SRP_JSON(objInvAction, 'SetValue', 'InvTimestamp', Oconv(InvTimeStamp, 'DT'))
SRP_JSON(objInvAction, 'SetValue', 'InvWhCd', InvWhCd)
SRP_JSON(objInvAction, 'SetValue', 'InvWarehouse', InvWarehouse)
SRP_JSON(objInvAction, 'SetValue', 'InvLocCd', InvLocCd)
SRP_JSON(objInvAction, 'SetValue', 'InvLocation', InvLocation)
SRP_JSON(objInvAction, 'SetValue', 'InvAction', InvAction)
SRP_JSON(objInvAction, 'SetValue', 'InvUserId', InvUserId)
SRP_JSON(objInvAction, 'SetValue', 'InvTag', InvTag)
SRP_JSON(objInvAction, 'SetValue', 'InvToolId', InvToolId)
SRP_JSON(objInvActions, 'Add', objInvAction)
SRP_JSON(objInvAction, 'Release')
end
Next InvAction
end else
SRP_JSON(objWOMat, 'SetValue', 'InventoryActions', '')
end
SRP_JSON(objWOMat, 'Set', 'InventoryActions', objInvActions)
SRP_JSON(objInvActions, 'Release')
end
objSlots = ''
If SRP_JSON(objSlots, 'New', 'Array') then
SlotCount = 25
for Slot = 1 to SlotCount
SlotNo = Slot
WaferId = {SLOT_WAFER_ID}<1, Slot>
NcrId = {SLOT_NCR}<1, Slot>
MetNo = {SLOT_MET_NO}<1, Slot>
MovedToSlot = {SLOT_MOVED_TO}<1, Slot>
MuWaferId = {SLOT_REP_WAFER_ID}<1, Slot>
MovedFromSlot = {SLOT_MOVED_FROM}<1, Slot>
objSlot = ''
If SRP_JSON(objSlot, 'New', 'Object') then
SRP_JSON(objSlot, 'SetValue', 'SlotNo', SlotNo)
SRP_JSON(objSlot, 'SetValue', 'WaferId', WaferId)
SRP_JSON(objSlot, 'SetValue', 'NcrId', NcrId)
SRP_JSON(objSlot, 'SetValue', 'MetNo', MetNo)
SRP_JSON(objSlot, 'SetValue', 'MovedToSlot', MovedToSlot)
SRP_JSON(objSlot, 'SetValue', 'MuWaferId', MuWaferId)
SRP_JSON(objSlot, 'SetValue', 'MovedFromSlot', MovedFromSlot)
SRP_JSON(objSlots, 'Add', objSlot)
SRP_JSON(objSlot, 'Release')
end
Next Slot
SRP_JSON(objWOMat, 'Set', 'Slots', objSlots)
SRP_JSON(objSlots, 'Release')
end
objNCRs = ''
If SRP_JSON(objNCRs, 'New', 'Array') then
NCRs = {NCR_KEYS}
if DCount(NCRs, @VM) GT 0 then
for each NCRKey in NCRs setting nPos
NcrId = NCRKey
NcrStatus = {NCR_STATUS}<1, nPos>
NcrQty = {NCR_REJ_CNT}<1, nPos>
NcrResp = {NCR_LOSS_BY}<1, nPos>
NcrStage = {NCR_LOSS_STAGE}<1, nPos>
NcrLossDesc = {NCR_LOSS_DESC}<1, nPos>
NcrLossComment = {NCR_LOSS_COMMENT}<1, nPos>
objNCR = ''
If SRP_JSON(objNCR, 'New', 'Object') then
SRP_JSON(objNCR, 'SetValue', 'NcrId', NcrId)
SRP_JSON(objNCR, 'SetValue', 'NcrStatus', NcrStatus)
SRP_JSON(objNCR, 'SetValue', 'NcrQty', NcrQty)
SRP_JSON(objNCR, 'SetValue', 'NcrResp', NcrResp)
SRP_JSON(objNCR, 'SetValue', 'NcrStage', NcrStage)
SRP_JSON(objNCR, 'SetValue', 'NcrLossDesc', NcrLossDesc)
SRP_JSON(objNCR, 'SetValue', 'NcrLossComment', NcrLossComment)
SRP_JSON(objNCRs, 'Add', objNCR)
SRP_JSON(objNCR, 'Release')
end
Next NCRKey
SRP_JSON(objWOMat, 'Set', 'NCRs', objNCRs)
SRP_JSON(objNCRs, 'Release')
end else
SRP_JSON(objWOMat, 'SetValue', 'NCRs', '')
end
objHolds = ''
If SRP_JSON(objHolds, 'New', 'Array') then
HoldDtms = {HOLD_START_DTM}
if DCount(HoldDtms, @VM) GT 0 then
for each HoldDtm in HoldDtms setting hPos
OnHoldDtm = OConv(HoldDtm, 'DT')
HoldUser = {HOLD_START_USER}<1, hPos>
OnHoldReason = {HOLD_START_REASON}<1, hPos>
OffHoldDtm = {HOLD_STOP_DTM}<1, hPos>
OffHoldUser = {HOLD_STOP_USER}<1, hPos>
OffHoldReason = {HOLD_STOP_REASON}<1, hPos>
HoldEntity = {HOLD_ENTITY}<1, hPos>
HoldEntityId = {HOLD_ENTITY_ID}<1, hPos>
objHold = ''
If SRP_JSON(objHold, 'New', 'Object') then
SRP_JSON(objHold, 'SetValue', 'OnHoldDtm', OnHoldDtm)
SRP_JSON(objHold, 'SetValue', 'HoldUser', HoldUser)
SRP_JSON(objHold, 'SetValue', 'OnHoldReason', OnHoldReason)
SRP_JSON(objHold, 'SetValue', 'OffHoldDtm', OffHoldDtm)
SRP_JSON(objHold, 'SetValue', 'OffHoldUser', OffHoldUser)
SRP_JSON(objHold, 'SetValue', 'OffHoldReason', OffHoldReason)
SRP_JSON(objHold, 'SetValue', 'HoldEntity', HoldEntity)
SRP_JSON(objHold, 'SetValue', 'HoldEntityId', HoldEntityId)
SRP_JSON(objHolds, 'Add', objHold)
SRP_JSON(objHold, 'Release')
end
Next HoldDtm
SRP_JSON(objWOMat, 'Set', 'Holds', objHolds)
SRP_JSON(objHolds, 'Release')
end else
SRP_JSON(objWOMat, 'SetValue', 'Holds', '')
end
end
SRP_JSON(objJSON, 'Set', 'WO_Mat', objWOMat)
SRP_JSON(objWOMat, 'Release')
end
end
If itemURL NE '' then
// The itemURL was passed in so add HAL+JSON properties.
// Create the _links property and then all link objects needed for this resource.
objLinks = ''
If SRP_JSON(objLinks, 'New', 'Object') then
// Create a self link.
objLink = ''
If SRP_JSON(objLink, 'New', 'Object') then
SRP_JSON(objLink, 'SetValue', 'href', ItemURL, 'String')
SRP_JSON(objLink, 'SetValue', 'title', 'Self', 'String')
SRP_JSON(objLinks, 'Set', 'self', objLink)
SRP_JSON(objLink, 'Release')
end
SRP_JSON(objJSON, 'Set', '_links', objLinks)
SRP_JSON(objLinks, 'Release')
end
// Create the _class property for this resource.
SRP_JSON(objJSON, 'SetValue', '_class', 'resource')
end
jsonRecord = SRP_JSON(objJSON, 'Stringify', 'Styled')
SRP_JSON(objJSON, 'Release')
end else
Error_Services('Add', 'Unable to create JSON representation in the ' : Service : ' service.')
end
end
end else
Error_Services('Add', 'KeyID argument was missing in the ' : Service : ' service.')
end
Response = jsonRecord
End Service
//----------------------------------------------------------------------------------------------------------------------
// GetWaferMap
//
// Returns a @VM delimited array of boolean values, which represents which slots are filled.
// Note: The response is in the slot order 25, 24, ..., 2, 1.
//----------------------------------------------------------------------------------------------------------------------
Service GetWaferMap(WOMatKey)
WaferMap = ''
ErrorMsg = ''
If WOMatKey NE '' then
If RowExists('WO_MAT', WOMatKey) then
ReactType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
If ReactType NE 'EPP' then
SlotWaferIDs = Xlate('WO_MAT', WOMatKey, 'SLOT_WAFER_ID', 'X')
WaferMap = ''
For SlotIndex = 1 to 25
SlotWaferID = SlotWaferIDs<0, SlotIndex>
WaferMap = Insert(WaferMap, 0, 1, 0, (SlotWaferID NE '') )
Next SlotIndex
end else
ErrorMsg = 'Error in ':Service:' service. EpiPro is not supported by this service. Use WM_OUT_SERVICES instead.'
end
end else
ErrorMsg = 'Error in ':Service:' service. WO_MAT record ':WOMatKey:' does not exist.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null WOMatKey passed in.'
end
If ErrorMsg EQ '' then
Response = WaferMap
end else
Error_Services('Add', ErrorMsg)
Response = False$
end
end service
Service CheckInvActionsSignatureSync()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
Script = "SELECT WO_MAT_SIG_PROFILE.WO_NO, WO_MAT_SIG_PROFILE.CASS_NO,WO_MAT_SIG_PROFILE.CASS_ID_SAP, WO_MAT_SIG_PROFILE.SIG_DTM, WO_MAT_SIG_PROFILE.SIGNATURE, WMSP.SIG_PROFILE FROM WO_MAT_SIG_PROFILE "
Script := "Left JOIN WO_MAT_SIG_PROFILE_AUDIT WMSP ON WO_MAT_SIG_PROFILE.WO_NO = WMSP.WO_NO AND WO_MAT_SIG_PROFILE.CASS_NO = WMSP.CASS_NO AND WO_MAT_SIG_PROFILE.SIG_PROFILE = WMSP.SIG_PROFILE "
Script := "WHERE SIG_DTM != '' AND (WMSP.SIG_PROFILE IS NULL OR WMSP.SIG_PROFILE = '') AND WO_MAT_SIG_PROFILE.SIG_DTM > DATEADD(day, -1, GETDATE()) AND WO_MAT_SIG_PROFILE.SIGNATURE != 'AUTO_FQA' AND WO_MAT_SIG_PROFILE.SIGNATURE IS NOT NULL order by WO_NO desc"
Connection = ''
RecordSetResult = ''
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
RecordSetResult = SRP_Com(Connection, "CALL", "Execute", Script)
Records = SRP_Com(RecordSetResult, "CALL", "GetString", 2, -1, @VM, @FM)
SRP_Com(RecordSetResult, "RELEASE")
end else
Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
end
SRP_Com(Connection, "CALL", "Close")
SRP_Com(Connection, "RELEASE")
end else
Ans = "Unable to create ADO connection."
end
if Records then
for each WOMatRecord in Records using @FM
WO = WOMatRecord<1,1>
CassNo = WOMatRecord<1,2>
WOMatKey = WO : '*' : CassNo
WO_MAT_SERVICES('SyncWOMatInvActionsAndSigProfile', WoMatKey)
Next WOMatRecord
end
Unlock hSysLists, ServiceKeyID else Null
end
end service
Service SyncWOMatInvActionsAndSigProfile(WOMatKey)
If RowExists('WO_MAT', WOMatKey) then
OrigWOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
WOMatRec = OrigWOMatRec
SigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
Sigs = WOMatRec<WO_MAT_SIGNATURE$>
SigDtms = WOMatRec<WO_MAT_SIG_DTM$>
OrigInvActions = WOMatRec<WO_MAT_INV_ACTION$>
For each Stage in SigProfile using @VM setting vPos
if SigDtms<0, vPos> NE '' then
Locate Stage in OrigInvActions using @VM setting dummy else
// Stage missing from material log
InvDtms = WOMatRec<WO_MAT_INV_DTM$>
StageSigDtm = SigDtms<0, vPos>
Done = False$
For each InvDtm in InvDtms using @VM setting Pos
If InvDtm _GTX StageSigDtm then Done = True$
Until Done
Next InvDtm
// Insert stage into material log
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_WH$,Pos,0,'CR')
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_LOCATION$,Pos,0,'FE')
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_ACTION$,Pos,0,Stage)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_DTM$,Pos,0,StageSigDtm)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_USER$,Pos,0,Sigs<0, vPos>)
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TAG$,Pos,0,'')
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_TOOL_ID$,Pos,0,'')
WOMatRec = INSERT(WOMatRec,WO_MAT_INV_SCAN_ENTRY$,Pos,0,0)
LogData = ''
LogData<1> = LoggingDtm
LogData<2> = WOMatKey
LogData<3> = Stage
LogData<4> = StageSigDtm
LogData<5> = 'Adding To Record.'
Logging_Services('AppendLog', objSyncLog, LogData, @RM, @FM)
end
end
Next Stage
If WOMatRec NE OrigWOMatRec then
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
If Error_Services('NoError') then
LogData = ''
LogData<1> = LoggingDtm
LogData<2> = WOMatKey
LogData<3> = ''
LogData<4> = ''
LogData<5> = 'Successfully Wrote WO_Mat Record'
Logging_Services('AppendLog', objSyncLog, LogData, @RM, @FM)
end else
LogData = ''
LogData<1> = LoggingDtm
LogData<2> = WOMatKey
LogData<3> = ''
LogData<4> = ''
LogData<5> = 'Error writing WO_MAT record.'
Logging_Services('AppendLog', objSyncLog, LogData, @RM, @FM)
end
end
end else
LogData = ''
LogData<1> = LoggingDtm
LogData<2> = WOMatKey
LogData<3> = ''
LogData<4> = ''
LogData<5> = 'WO_MAT record did not exist in OpenInsight.'
Logging_Services('AppendLog', objSyncLog, LogData, @RM, @FM)
end
end service
Service CassetteIsLastInWo(WoMatKey)
StartTick = GetTickCount()
MetricName = 'CassetteIsLastInWo'
IsLastInWo = False$
If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then
Error_Services('Add', 'invalid WO_MAT key')
end
WO = Field(WoMatKey, '*', 1)
If WO EQ '' then
Error_Services('Add', 'WO# not found in WO_MAT record')
end
If Error_Services('NoError') and Num(WO) EQ False$ then
Error_Services('Add', 'WO# is not numeric')
end
CassNo = Field(WoMatKey, '*', 2)
If Error_Services('NoError') and CassNo EQ '' then
Error_Services('Add', 'Cassette# not found in WO_MAT record')
end
If Error_Services('NoError') and Num(CassNo) EQ False$ then
Error_Services('Add', 'Cassette# is not numeric')
end
If Error_Services('NoError') then
WoMatKeys = Xlate('WO_LOG', WO, WO_LOG_WO_MAT_KEY$, 'X')
If Error_Services('NoError') and WoMatKeys NE '' then
TotalCassettes = DCount(WoMatKeys, @VM)
IsLastInWo = TotalCassettes EQ CassNo
end
end
If Error_Services('HasError') then
ErrMsg = Error_Services('GetMessage')
LogData = ''
LogData<1> = LoggingDtm
LogData<2> = WOMatKey
LogData<3> = ''
LogData<4> = ''
LogData<5> = 'Error in ' : Service:': ' : ErrMsg
Logging_Services('AppendLog', objSyncLog, LogData, @RM, @FM)
Error_Services('Add', ErrMsg)
end
Response = IsLastInWo
EndTick = GetTickCount()
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
end service
Service SetWoMatVoidFlag(WoMatKey, Username)
ErrorMessage = ''
If RowExists('WO_MAT', WoMatKey) then
WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey, True$, 0, False$)
If Error_Services('NoError') then
WoMatRec<WO_MAT_VOID$> = True$
HaveLock = Database_Services('GetKeyIDLock', 'WO_MAT', WoMatKey, True$)
If HaveLock then
Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False, False$)
If Error_Services('NoError') then
Set_Status(0)
WONo = Field(WoMatKey, '*', 1)
CassNo = Field(WoMatKey, '*', 2)
WOMLParms = ''
LogFile = 'WO_MAT' ; WOMLParms = LogFile:@RM
LogDTM = OConv(Datetime(), 'DT') ; WOMLParms := LogDTM:@RM
Action = 'VOID' ; WOMLParms := Action:@RM
WhCd = 'CR' ; WOMLParms := WhCd:@RM
LocCd = 'VOID' ; WOMLParms := LocCd:@RM
WONos = WONo ; WOMLParms := WONos:@RM
CassNos = CassNo ; WOMLParms := CassNos:@RM
UserID = Username ; WOMLParms := UserID:@RM
Tags = '' ; WOMLParms := Tags:@RM
ToolID = '' ; WOMLParms := ToolID:@RM
WOMLParms := ''
obj_WO_Mat_Log('Create',WOMLParms)
IF Get_Status(errCode) THEN
ErrorMessage = 'Error writing inventory transactions'
end
end else
ErrorMessage = 'Failed to write to the WO_MAT record ' : WoMatKey : ' while attempting to set void status.'
end
end else
ErrorMessage = 'Failed to get lock on WO_MAT record ' : WoMatKey : ' while attempting to set void status.'
end
end else
ErrorMessage = 'Failed to read WO_MAT record ' : WoMatKey : ' while attempting to set void status.'
end
end else
ErrorMessage = 'Invalid WoMat Key ' : WoMatKey : ' passed to SetWoMatVoidFlag routine.'
end
If ErrorMessage NE '' then
Error_Services('Add', ErrorMessage)
end
end service
Service MakeupFlagOn(RDSNo)
EpiCheck = Rds_Services('IsEpiPro', RDSNo)
BioRadDown = False$
Bio4Down = False$
Bio5Down = False$
Bio4LogKey = Xlate('TOOL', 'BIORAD4', 'CURR_MODE_KEY', 'X')
Bio5LogKey = Xlate('TOOL', 'BIORAD5', 'CURR_MODE_KEY', 'X')
Bio4Mode = Xlate('TOOL_LOG', Bio4LogKey, 'TOOL_MODE', 'X')
Bio5Mode = Xlate('TOOL_LOG', Bio5LogKey, 'TOOL_MODE', 'X')
If (Bio4Mode NE 'PROD') AND (Bio4Mode NE 'LIM') then Bio4Down = True$
If (Bio5Mode NE 'PROD') AND (Bio5Mode NE 'LIM') then Bio5Down = True$
If (Bio4Down) AND (Bio5Down) then BioRadDown = True$
If EpiCheck EQ False$ then
WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
WOMatQARec = XLATE('WO_MAT_QA',WOMatKey,'','X')
PropRow = WOMatQARec<3>
If (Count(PropRow, 'THICK') NE 0) AND (BioRadDown EQ False$) then
CurrentStage = Rds_Services('GetCurrentStage', RDSNo)
If CurrentStage EQ 'COMP' then
Signature_Services('UnsignFQAStage', RDSNo)
end
Rds_Services('ApplyQA100PercentADE', RDSNo)
end
end
end service