refactored auto hold service and toggle hold service

This commit is contained in:
Infineon\StieberD 2025-01-22 15:42:27 -07:00
parent 2332b04103
commit 9d86fd5fba
2 changed files with 199 additions and 90 deletions

View File

@ -78,7 +78,7 @@ Return Response or ""
// WOMatKey - [Required]
// HoldEntity - [Required]
// HoldEntityID - [Required]
// CtrlEntID - [Required]
// CtrlEntID - [Optional] *Required for ship hold checks
// OriginFlag - [Optional]
// HoldData - [Optional]
// OperatorID - [Optional]
@ -87,15 +87,15 @@ Return Response or ""
//----------------------------------------------------------------------------------------------------------------------
Service ToggleHold(WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, HoldData, OperatorID)
IF WOMatKey = '' or HoldEntity = '' or HoldEntityID = '' or CtrlEntID = '' THEN
Error_Services('Add', 'Null parameter WOMatKey, HoldEntity, HoldEntityID, CtrlEntID passed to service.')
If ( (WOMatKey EQ '') or (HoldEntity EQ '') or (HoldEntityID EQ '') ) then
Error_Services('Add', 'Null parameter WOMatKey, HoldEntity, or HoldEntityID passed to service.')
end else
HoldCheck = Hold_Services("CheckForHold", WOMatKey, CtrlEntID)
If Unassigned(OperatorID) then OperatorID = ''
BEGIN CASE
CASE INDEX(CtrlEntID,'SHIP_HOLD',1) ; HoldType = 'SHOLD' ; * Ship Hold
CASE 1 ; HoldType = 'HOLD' ; * Production or Engineering Hold
END CASE
Begin Case
Case Index(CtrlEntID,'SHIP_HOLD',1) ; HoldType = 'SHOLD' ; * Ship Hold
Case Otherwise$ ; HoldType = 'HOLD' ; * Production or Engineering Hold
End Case
If Error_Services("NoError") then
If HoldCheck = False$ then
Hold_Services("OnHold", WOMatKey, HoldEntity, HoldEntityID, HoldType, HoldData, OperatorID, OriginFlag)
@ -502,8 +502,8 @@ Service CheckForHold(WOMatKey, CtrlEntID)
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, '', '', '')
BEGIN CASE
CASE INDEX(CtrlEntID,'SHIP_HOLD',1) ; HoldType = 'SHOLD' ; * Ship Hold
CASE 1 ; HoldType = 'HOLD' ; * Production or Engineering Hold
CASE Index(CtrlEntID,'SHIP_HOLD',1) ; HoldType = 'SHOLD' ; * Ship Hold
CASE Otherwise$ ; HoldType = 'HOLD' ; * Production or Engineering Hold
END CASE
IF HoldType = 'SHOLD' THEN
@ -765,3 +765,4 @@ Service CreateComment(HoldEntity, HoldEntityID, Reason, Transition, HoldType, Op
end service

View File

@ -49,6 +49,7 @@ $insert CLEAN_INSP_EQUATES
$insert RDS_LAYER_EQUATES
$insert RDS_TEST_EQUATES
$insert TW_USE_EQUATES
$insert MAKEUP_WAFERS_EQUATES
Equ Tab$ to Char(9)
Equ Esc$ to \1B\
@ -264,105 +265,211 @@ End Service
// looks for MakeUp wafers older than 3 years old and then puts them on hold and sends notification.
//----------------------------------------------------------------------------------------------------------------------
Service ProcessAutoHold()
// Service should run once a day or less
// First find subset of Makeup lots that are over 3 years old (age based on date out)
// From above list,
// 1) Put affected lots on hold and
// 2) Send notification to notification group
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Begin ':Service
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
HoldList = ''
CutoffDate = SRP_Date('AddYears', Date(), -3)
Query = 'SELECT MAKEUP_WAFERS WITH UNLOAD_DTM LT ':Quote(OConv(CutoffDate, 'DT2/^H'))
Flag = ''
RList(Query, TARGET_ACTIVELIST$, '', '', Flag)
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'RList Flag = ':Flag:'. @RecCount = ':@RecCount
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
EOF = False$
Loop
Readnext WOMatKey else EOF = True$
Until EOF
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Begin ':Service
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
HoldList = ''
FailedHoldList = ''
CutoffDate = SRP_Date('AddYears', Date(), -3)
Query = 'SELECT MAKEUP_WAFERS WITH UNLOAD_DTM LT ':Quote(OConv(CutoffDate, 'DT2/^H'))
Flag = ''
RList(Query, TARGET_ACTIVELIST$, '', '', Flag)
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Placing lot "':WOMatKey:'" on hold.'
LogData<2> = 'RList Flag = ':Flag:'. @RecCount = ':@RecCount
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
WONo = Field(WOMatKey, '*', 1)
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
If ReactType EQ 'EPP' then
CassNo = Field(WOMatKey, '*', 2)
HoldEntity = 'WM_OUT'
HoldEntityID = WONo:'*1*':CassNo
end else
HoldEntity = 'RDS'
HoldEntityID = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
end
HoldList<-1> = ReactType:TAB$:HoldEntityID
OnHold = Xlate(HoldEntity, HoldEntityID, 'HOLD', 'X')
If OnHold NE True$ then
//obj_WO_Mat('ToggleHold',WOMatKey:@RM:HoldEntity:@RM:HoldEntityID:@RM:'':@RM:'H':@RM:'SYSTEM')
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, '', 'H', '', 'SYSTEM')
end
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Lot "':WOMatKey:'" hold flag = ':Xlate(HoldEntity, HoldEntityID, 'HOLD', 'X'):'.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Marking lot "':WOMatKey:'" as expired.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Material_Services('MarkMUCassExpired', WOMatKey)
ExpiredFlag = Xlate('MAKEUP_WAFERS', WOMatKey, 'EXPIRED', 'X')
If Error_Services('NoError') then
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully marked lot "':WOMatKey:'" as expired. Expired flag = ':ExpiredFlag:'.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end else
LogData = ''
EOF = False$
Loop
Readnext WOMatKey else EOF = True$
Until EOF
ErrorMsg = '' ; // Local loop error message tracking
ExpiredFlag = ''
HoldFlag = ''
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
ErrorMsg = 'Failed to mark lot "':WOMatKey:'" as expired. Expired flag = ':ExpiredFlag:'. '
ErrorMsg := 'Error message: ':Error_Services('GetMessage')
LogData<2> = ErrorMsg
LogData<2> = 'Identified lot "':WOMatKey:'" as older than three years. Checking hold state...'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
WONo = Field(WOMatKey, '*', 1)
ReactType = Xlate('WO_LOG', WONo, 'REACT_TYPE', 'X')
If ReactType EQ 'EPP' then
CassNo = Field(WOMatKey, '*', 2)
HoldEntity = 'WM_OUT'
HoldEntityID = WONo:'*1*':CassNo
end else
HoldEntity = 'RDS'
HoldEntityID = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X')
end
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
If Error_Services('NoError') then
HoldFlag = WOMatRec<WO_MAT_HOLD$>
If HoldFlag EQ True$ then
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Lot "':WOMatKey:'" already on hold. Hold flag = ':HoldFlag:'.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end else
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Lot "':WOMatKey:'" not on hold. Hold flag = ':HoldFlag:'. Attempting to place lot on hold...'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
// Toggle hold state
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, '', 'H', '', 'SYSTEM')
If Error_Services('NoError') then
// Verify hold state
// Re-read record to verify hold state
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
If Error_Services('NoError') then
NewHoldFlag = WOMatRec<WO_MAT_HOLD$>
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Lot "':WOMatKey:'" new hold flag = ':NewHoldFlag:'.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
If NewHoldFlag EQ HoldFlag then
// Something went wrong somewhere
ErrorMsg = 'New hold state, ':NewHoldFlag:', of lot "':WOMatKey:'" equals previous hold state, ':HoldFlag:'.'
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = ErrorMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end else
ErrorMsg = Error_Services('GetMessage')
LogMsg = 'Failed to verify lot "':WOMatKey:'" was placed on hold.'
LogMsg := 'Error message: ':ErrorMsg
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = LogMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end else
ErrorMsg = Error_Services('GetMessage')
LogMsg = 'Failed to toggle hold state of lot "':WOMatKey:'".'
LogMsg := 'Error message: ':ErrorMsg
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = LogMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end
If ErrorMsg EQ '' then
// Now mark cassette as expired
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Attempting to mark lot "':WOMatKey:'" as expired.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Material_Services('MarkMUCassExpired', WOMatKey)
If Error_Services('NoError') then
MWRec = Database_Services('ReadDataRow', 'MAKEUP_WAFERS', WOMatKey)
If Error_Services('NoError') then
ExpiredFlag = MWRec<MAKEUP_WAFERS.EXPIRED$>
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully marked lot "':WOMatKey:'" as expired. Expired flag = ':ExpiredFlag:'.'
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end else
ErrorMsg = Error_Services('GetMessage')
LogMsg = 'Failed to verify lot "':WOMatKey:'" was marked as expired.'
LogMsg := 'Error message: ':ErrorMsg
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = LogMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end else
ErrorMsg = Error_Services('GetMessage')
LogMsg = 'Failed to mark lot "':WOMatKey:'" as expired.'
LogMsg := 'Error message: ':ErrorMsg
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = LogMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end else
ErrorMsg = Error_Services('GetMessage')
LogMsg = 'Failed to toggle hold state of lot "':WOMatKey:'".'
LogMsg := 'Error message: ':ErrorMsg
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = LogMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
end else
ErrorMsg = Error_Services('GetMessage')
LogMsg = 'Failed to place lot "':WOMatKey:'" on hold. Error reading WO_MAT record to get hold state.'
LogMsg := 'Error message: ':ErrorMsg
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = LogMsg
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end
If (ErrorMsg EQ '') then
HoldList<-1> = ReactType:TAB$:HoldEntityID
end else
FailedHoldList<-1> = ReactType:TAB$:HoldEntityID
end
Repeat
// Send notification of successful lots and failed lots
If (HoldList NE '') then
Recipients = ''
SentFrom = 'SYSTEM'
Subject = 'Makeup Wafer Auto-Hold Report'
AttachWindow = ''
AttachKey = ''
SendToGroup = 'AUTO_HOLD'
Message = 'The following makeup cassettes are older than three years and have been automatically '
Message := 'placed on hold.':CRLF$:'Reminder: EpiPro lots can contain multiple RDS lots.':CRLF$:CRLF$
Swap @FM with CRLF$ in HoldList
Message := HoldList
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
end
Repeat
// Send notification if list is not null
If HoldList NE '' then
Recipients = ''
SentFrom = 'SYSTEM'
Subject = 'Makeup Wafer Auto-Hold Report'
AttachWindow = ''
AttachKey = ''
SendToGroup = 'AUTO_HOLD'
Message = 'The following makeup cassettes are older than three years and have been automatically '
Message := 'placed on hold.':CRLF$:'Reminder: EpiPro lots can contain multiple RDS lots.':CRLF$:CRLF$
Swap @FM with CRLF$ in HoldList
Message := HoldList
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
If (FailedHoldList NE '') then
Recipients = ''
SentFrom = 'SYSTEM'
Subject = 'Makeup Wafer Auto-Hold Report'
AttachWindow = ''
AttachKey = ''
SendToGroup = 'AUTO_HOLD'
Message = 'The following makeup cassettes are older than three years and failed to be placed on hold by '
Message := 'the system.':CRLF$:'Reminder: EpiPro lots can contain multiple RDS lots.':CRLF$:CRLF$
Swap @FM with CRLF$ in FailedHoldList
Message := FailedHoldList
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
end
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'End ':Service
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
Unlock hSysLists, ServiceKeyID else Null
end
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'End ':Service
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
end service
@ -1353,3 +1460,4 @@ ClearCursors:
return