updated headers for nica order request Added reactor type support to nica checklists. Refactored flow logic to just use NICA_CHECKLISTS table. added feature flag support gated Feature Flags menu item to supervisors removed debug added auto comment for intr maint flows on reactor log, intr maint flow id to react servs form, and cancel order on unsign reactor log added exceptions for lamp and tc services, added control to edit flow id on react servs form, added auto-reactor log comment, added cancel order on unsign event removed debug modified NicaOrdersServices to use env variables for group resource name added logic to filter out service flow ids for servics with is_intrusive set to false, modified security group for feature flag menu, added ability to clear intr main flow id to react serv form removed unused equates
975 lines
39 KiB
Plaintext
975 lines
39 KiB
Plaintext
Compile function Reactor_Log_Services(@Service, @Params)
|
|
/***********************************************************************************************************************
|
|
|
|
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
|
permission from SRP Computer Solutions, Inc.
|
|
|
|
Name : Reactor_Log_Services
|
|
|
|
Description : Handler program for all module related services.
|
|
|
|
Notes : The generic parameters should contain all the necessary information to process the services. Often
|
|
this will be information like the data Record and Key ID.
|
|
|
|
Parameters :
|
|
Service [in] -- Name of the service being requested
|
|
Param1-10 [in/out] -- Additional request parameter holders
|
|
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
|
|
|
|
History : (Date, Initials, Notes)
|
|
??/??/?? jro Original programmer.
|
|
|
|
***********************************************************************************************************************/
|
|
#pragma precomp SRP_PreCompiler
|
|
|
|
$Insert APP_INSERTS
|
|
$Insert SERVICE_SETUP
|
|
$Insert REACTOR_LOG_EQUATES
|
|
$Insert RLIST_EQUATES
|
|
$Insert REACT_STATE_EQUATES
|
|
$Insert REACTOR_PM_EQUATES
|
|
$Insert REACT_ITEM_EQUATES
|
|
$Insert RDS_EQUATES
|
|
$Insert REACT_SERVS_EQUATES
|
|
$Insert REACTOR_EQUATES
|
|
$Insert FEATURE_FLAGS_EQUATES
|
|
|
|
Declare function Database_Services, Reactor_Log_Services, Obj_React_Item, Set_Status, Errmsg, Error_Services, Utility
|
|
Declare function obj_Calendar, NextKey, SRP_JSON, Datetime, Reactor_Services, React_Servs_Services, Logging_Services
|
|
Declare function Environment_Services, HttpClient_Services, SRP_List, Nica_Orders_Services
|
|
Declare subroutine Set_Status, RList, Errmsg, Database_Services, Error_Services, obj_React_Reads, obj_Post_Log, Delay
|
|
Declare subroutine obj_Reactor_Log, Btree.Extract, SRP_JSON, Reactor_Services, Logging_Services, Mona_Services, SRP_List
|
|
Declare subroutine Reactor_Log_Services, Nica_Orders_Services
|
|
|
|
GoToService
|
|
|
|
Return Response or ""
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Service Parameter Options
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
Options BOOLEAN = True$,False$
|
|
Options PM_TYPES = 'ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM'
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// SERVICES
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
Service Create()
|
|
|
|
end service
|
|
|
|
|
|
Service UpdateReactorLog(ReactorLogID, ReactorLogRec)
|
|
|
|
ErrorMsg = ''
|
|
If ( RowExists('REACTOR_LOG', ReactorLogID) and (ReactorLogRec NE '') ) then
|
|
Database_Services('WriteDataRow', 'REACTOR_LOG', ReactorLogID, ReactorLogRec)
|
|
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. REACTOR_LOG record "':ReactorLogID:'" does not exist!'
|
|
end
|
|
|
|
If ErrorMsg EQ '' then
|
|
Response = True$
|
|
end else
|
|
Error_Services('Add', ErrorMsg)
|
|
Response = False$
|
|
end
|
|
|
|
|
|
end service
|
|
|
|
|
|
Service SignReactorLog(ReactorLogID, UserID)
|
|
|
|
Flag = ''
|
|
ErrCode = ''
|
|
ErrorMsg = ''
|
|
If RowExists('REACTOR_LOG', ReactorLogID) then
|
|
If Error_Services('NoError') then
|
|
If RowExists('LSL_USERS', UserID) then
|
|
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
|
If Error_Services('NoError') then
|
|
// Verify NICA checklists are complete
|
|
ActiveRlNicaOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', ReactorLogID)
|
|
If ActiveRLNicaOrders EQ '' then
|
|
// Verify reactor number is populated
|
|
ReactorNo = ReactorLogRec<REACTOR_LOG_REACTOR$>
|
|
If ReactorNo NE '' then
|
|
// Verify wafer count is populated
|
|
WaferCount = ReactorLogRec<REACTOR_LOG_REACT_WFR_CNT_START$>
|
|
If WaferCount NE '' then
|
|
//Check if any of the services chosen require a reactor item
|
|
CurrServices = Xlate('REACTOR_LOG', ReactorLogID, REACTOR_LOG_REACT_SERV_ID$, 'X')
|
|
CurrItems = Xlate('REACTOR_LOG', ReactorLogID, REACTOR_LOG_REACT_ITEM_IDS$, 'X')
|
|
If CurrServices NE '' then
|
|
for each ServiceID in CurrServices using @VM setting sPos
|
|
If RowExists('REACT_SERVS', ServiceID) then
|
|
ServiceRec = Database_Services('ReadDataRow', 'REACT_SERVS', ServiceID)
|
|
If Error_Services('NoError') then
|
|
ItemReqd = ServiceRec<REACT_SERVS_GRAPHITE_OR_TUBE$>
|
|
If ItemReqd NE '' then
|
|
If CurrItems<1, sPos> NE '' then
|
|
CurrItemID = CurrItems<1, sPos>
|
|
If RowExists('REACT_ITEM', CurrItemID) then
|
|
CurrReactItemType = XLATE('REACT_ITEM', CurrItemID, REACT_ITEM_RI_TYPE$, 'X')
|
|
If CurrReactItemType NE ItemReqd then
|
|
ErrorMsg = 'React Item ' : CurrItemID : " doesn't match the required react item type!"
|
|
end
|
|
end else
|
|
ErrorMsg = 'React Item ' : CurrItemID : " doesn't exist!"
|
|
end
|
|
end else
|
|
ErrorMsg = 'Service ' : ServiceID : ' requires an item to be selected and none was selected.'
|
|
end
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error reading service record for service ID: ' : ServiceID
|
|
end
|
|
end else
|
|
ErrorMsg = 'Invalid service selected! Service ID: ' : ServiceID
|
|
end
|
|
Until ErrorMsg NE ''
|
|
Next ServiceID
|
|
end
|
|
|
|
// Check if any react items are missing disposition codes
|
|
If ErrorMsg EQ '' then
|
|
RemRINos = Xlate('REACTOR_LOG', ReactorLogID, 'REM_RI_NO', 'X')
|
|
If RemRINos NE '' then
|
|
RemRIDispCDs = Xlate('REACTOR_LOG', ReactorLogID, 'REM_DISP_CD', 'X')
|
|
For each RemRINo in RemRINos using @VM setting vPos
|
|
If RemRIDispCDs<0, vPos> EQ '' then
|
|
ErrorMsg = 'Error in ':Service:' service. Disposition for REACT_ITEM ':RemRINo:' being removed has not been completed.'
|
|
end
|
|
Until ErrorMsg NE ''
|
|
Next RemRINo
|
|
end
|
|
AddedRINos = Xlate('REACTOR_LOG', ReactorLogID, 'REACT_ITEM_IDS', 'X')
|
|
If AddedRINos NE '' then
|
|
for each AddedRINo in AddedRINos using @VM
|
|
RIRec = Database_Services('ReadDataRow', 'REACT_ITEM', AddedRINo)
|
|
If RIRec<REACT_ITEM_RETIRE_DT$> NE '' then
|
|
ErrorMsg = 'Error in ':Service:' service. REACT_ITEM ':AddedRINo:' cannot be added because it is RETIRED.'
|
|
end
|
|
Until ErrorMsg NE ''
|
|
Next AddedRINo
|
|
end
|
|
end
|
|
|
|
If ErrorMsg EQ '' then
|
|
// Check if we need to "post" any items that are being installed
|
|
InstRINo = ReactorLogRec<REACTOR_LOG_INST_RI_NO$>
|
|
If InstRINo NE '' then
|
|
RIPostBy = ReactorLogRec<REACTOR_LOG_RI_POST_BY$>
|
|
If RIPostBy EQ '' then
|
|
obj_Reactor_Log('PostReactItems',ReactorLogID:@RM:UserID)
|
|
// Pull in a fresh copy of the record with the POST_BY signature set
|
|
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
|
If Get_Status(ErrCode) then
|
|
ErrorMsg = 'Error in ':Service:' service. Error calling obj_Reactor_Log("PostReactItems"). Error code: ':ErrCode:'.'
|
|
end
|
|
end
|
|
end
|
|
If ErrorMsg EQ '' then
|
|
// Check if we need to create a REACT_READS record
|
|
ReactWfrCntEnd = ReactorLogRec<REACTOR_LOG_REACT_WFR_CNT_END$>
|
|
If ReactWfrCntEnd EQ 0 then
|
|
CurrDTM = obj_Calendar('CurrDTM')
|
|
obj_React_Reads('Create',ReactorNo:@RM:UserID:@RM:CurrDTM:@RM:'0')
|
|
If Get_Status(ErrCode) then
|
|
ErrorMsg = 'Error in ':Service:' service. Error calling obj_React_Reads("Create"). Error code: ':ErrCode:'.'
|
|
end
|
|
end
|
|
If ErrorMsg EQ '' then
|
|
// Check if injector settings have been entered
|
|
ReactInjSetting = ReactorLogRec<REACTOR_LOG_INJ_SETTING$>
|
|
If ReactInjSetting NE '' then
|
|
plParms = 'REACT_STATE':@RM
|
|
plParms := ReactorNo:@RM
|
|
plParms := REACT_STATE_CURR_INJ_RL_ID$:@RM
|
|
plParms := ReactorLogID:@RM
|
|
obj_Post_Log('Create',plParms)
|
|
If Get_Status(ErrCode) then
|
|
ErrorMsg = 'Error in ':Service:' service. Error calling obj_Post_Log("Create"). Error code: ':ErrCode:'.'
|
|
end
|
|
end
|
|
If ErrorMsg EQ '' then
|
|
// Check reactor prevent maintenance records
|
|
CurServices = ReactorLogRec<REACTOR_LOG_REACT_SERV_ID$>
|
|
Loop
|
|
TestChar = CurServices[-1,1]
|
|
Until TestChar NE @VM or CurServices = ''
|
|
CurServices[-1,1] = ''
|
|
Repeat
|
|
CCnt = COUNT(CurServices,@VM) + (CurServices NE '')
|
|
IntrMaintFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_INTRUSIVE_MAINTENANCE', FEATURE_FLAGS.ENABLED$, 'X')
|
|
If ( (IntrMaintFeatureFlag EQ True$) and (CCnt GT 0) ) then
|
|
IntrMaintFlowCodes = React_Servs_Services('GetIntrMaintFlowIds', CurServices)
|
|
If IntrMaintFlowCodes NE '' then
|
|
// Create INTRUSIVE_MAINT NICA order
|
|
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactorNo, 'INTRUSIVE_MAINT', IntrMaintFlowCodes)
|
|
If Error_Services('NoError') then
|
|
LogFlows = IntrMaintFlowCodes
|
|
Convert @VM to ', ' in LogFlows
|
|
Reactor_Log_Services('AddComment', ReactorNo, 'Intrusive Maintenance initiated for flow(s) ':LogFlows:'.', UserID)
|
|
end else
|
|
ErrorMsg = Error_Services('GetMessage')
|
|
end
|
|
end
|
|
end
|
|
If ErrorMsg EQ '' then
|
|
For ReactServsIndex = 1 to CCnt
|
|
CurService = CurServices<1,ReactServsIndex>
|
|
Open 'REACTOR_PM' to ReactorPMTable then
|
|
Open 'DICT.REACTOR_PM' to DictReactorPMTable then
|
|
|
|
SearchStr = 'REACT_SERV_ID':@VM:CurService:@FM
|
|
SearchStr := 'REACTOR':@VM:ReactorNo:@FM
|
|
SearchStr := 'COMPLETE_DATE':@VM:'':@FM
|
|
|
|
Btree.Extract(SearchStr, 'REACTOR_PM', DictReactorPMTable, OpenPMKeys, '', Flag)
|
|
|
|
If Flag EQ 0 then
|
|
EndDate = Date()
|
|
* Add Maintenance metric reset
|
|
AssocMetrics = ''
|
|
AssocMetrics = React_Servs_Services('GetAssociatedMetrics', CurService)
|
|
If AssocMetrics NE '' then
|
|
MetricCount = Dcount(AssocMetrics, @VM)
|
|
For MetricIndex = 1 to MetricCount
|
|
ThisMetric = AssocMetrics<1,MetricIndex>
|
|
Reactor_Services('ResetWfrMetric', ReactorNo, ThisMetric)
|
|
Next MetricIndex
|
|
End
|
|
If OpenPMKeys NE '' then
|
|
* If more than one, which should not happen then close all
|
|
KCnt = COUNT( OpenPMKeys, @VM ) + (OpenPMKeys NE '')
|
|
PMResched = False$
|
|
For I = 1 to KCnt
|
|
ThisOpenPMKey = OpenPMKeys<1,I>
|
|
|
|
otlParms = 'REACTOR_PM':@RM
|
|
otlParms := ThisOpenPMKey:@RM
|
|
otlParms := REACTOR_PM_COMPLETE_DATE$:@VM:REACTOR_PM_COMP_RL_NO$:@RM
|
|
otlParms := EndDate:@VM:ReactorLogID:@RM
|
|
If ThisOpenPMKey NE '' then
|
|
obj_Post_Log('Create',otlParms) ;* Closes previous PM record
|
|
If Not(Get_Status(ErrCode)) then
|
|
* Schedule next PM
|
|
PMDays = XLATE( 'REACT_SERVS', CurService, REACT_SERVS_PM_DAYS$, 'X' )
|
|
IF PMDays NE '' THEN
|
|
If PMResched EQ False$ then
|
|
PMNo = NextKey('REACTOR_PM')
|
|
If Error_Services('NoError') then
|
|
NewPMRec = ''
|
|
NewPMRec<REACTOR_PM_ENTRY_ID$> = UserID
|
|
NewPMRec<REACTOR_PM_ENTRY_DATE$> = Date()
|
|
NewPMRec<REACTOR_PM_REACTOR$> = ReactorNo
|
|
NewPMRec<REACTOR_PM_PREV_PM_COMP_DT$> = EndDate
|
|
NewPMRec<REACTOR_PM_DUE_DT$> = EndDate + PMDays
|
|
NewPMRec<REACTOR_PM_REACT_SERV_ID$> = CurService
|
|
NewPMRec<REACTOR_PM_ENTRY_RL_NO$> = ReactorLogID
|
|
|
|
Database_Services('WriteDataRow', 'REACTOR_PM', PMNo, NewPMRec)
|
|
If Error_Services('NoError') then
|
|
PMResched = True$
|
|
end else
|
|
ErrorMsg = Error_Services('GetMessage')
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Error calling NextKey("REACTOR_PM").'
|
|
end
|
|
end
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Error calling obj_Post_Log("Create"). Error code: ':ErrCode
|
|
end
|
|
end
|
|
Next I
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' serivce. Error calling Btree.Extract. Error code: ':Flag
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Error opening DICT.REACTOR_PM table.'
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Error opening REACTOR_PM table.'
|
|
end
|
|
Next ReactServsIndex
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Error creating INTRUSIVE_MAINT NICA order.'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Wafer count is missing.'
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. Reactor number is missing.'
|
|
end
|
|
end else
|
|
ActiveChecklistTypes = Xlate('NICA_ORDERS', ActiveRlNicaOrders, 'ORDER_TYPE', 'X')
|
|
Swap @VM with ',' in ActiveChecklistTypes
|
|
ErrorMsg = 'Error in ':Service:' service. NICA order(s) ':ActiveChecklistTypes
|
|
ErrorMsg := ' must be completed prior to signing reactor log.'
|
|
end
|
|
end else
|
|
ErrorMsg = Error_Services('GetMessage')
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. LSL_USERS record "':UserID:'" does not exist.'
|
|
end
|
|
end else
|
|
ErrorMsg = Error_Services('GetMessage')
|
|
end
|
|
end else
|
|
ErrorMsg = 'Error in ':Service:' service. REACTOR_LOG record "':ReactorLogID:'" does not exist.'
|
|
end
|
|
|
|
If ErrorMsg EQ '' then
|
|
// Pull in a fresh copy of the record in case comments were added above
|
|
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
|
// Set signature, end date, and end time
|
|
ReactorLogRec<REACTOR_LOG_TECH_SIG$> = UserID
|
|
ReactorLogRec<REACTOR_LOG_END_DATE$> = Date()
|
|
ReactorLogRec<REACTOR_LOG_END_TIME$> = Time()
|
|
Database_Services('WriteDataRow', 'REACTOR_LOG', ReactorLogID, ReactorLogRec)
|
|
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
|
|
end
|
|
|
|
If ErrorMsg EQ '' then
|
|
Response = True$
|
|
end else
|
|
Error_Services('Add', ErrorMsg)
|
|
Response = False$
|
|
end
|
|
|
|
end service
|
|
|
|
|
|
Service ClearSignature(RLKey)
|
|
|
|
If RLKey NE '' then
|
|
RLRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RLKey)
|
|
If Error_Services('NoError') then
|
|
RLRec<REACTOR_LOG_TECH_SIG$> = ''
|
|
RLRec<REACTOR_LOG_END_DATE$> = ''
|
|
RLRec<REACTOR_LOG_END_TIME$> = ''
|
|
RLRec<REACTOR_LOG_LO_REVIEWED$> = ''
|
|
RLRec<REACTOR_LOG_LO_NA$> = ''
|
|
RLRec<REACTOR_LOG_REACT_WFR_CNT_START$> = ''
|
|
Database_Services('WriteDataRow', 'REACTOR_LOG', RLKey, RLRec, True$, False$, False$)
|
|
If Error_Services('NoError') then
|
|
// Cancel active Intrusive Maintenance NICA orders in the event the maintenance user set an
|
|
// invalid service id or a difference service was required.
|
|
ReactorNo = RLRec<REACTOR_LOG_REACTOR$>
|
|
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactorNo, 'INTRUSIVE_MAINT')
|
|
If CurrActiveOrders NE '' then
|
|
For each ActiveIntrMaintOrderId in CurrActiveOrders using @VM
|
|
Nica_Orders_Services('CancelOrder', ActiveIntrMaintOrderId)
|
|
Next ActiveIntrMaintOrderId
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end service
|
|
|
|
|
|
Service SaveReactorLogRecord(RLKey, RLRec)
|
|
|
|
If ( (RLKey NE '') and (RLRec NE '') ) then
|
|
|
|
ReactNo = RLRec<REACTOR_LOG_REACTOR$>
|
|
RawReactItemIds = RLRec<REACTOR_LOG_REACT_ITEM_IDS$>
|
|
rawCnt = COUNT(RawReactItemIds,@VM) + (RawReactItemIds NE '')
|
|
|
|
InstRINos = ''
|
|
|
|
FOR I = 1 TO rawCnt
|
|
IF RawReactItemIds<1,I> NE '' THEN
|
|
InstRINos<1,-1> = obj_React_Item('Serial_RINo',RawReactItemIds<1,I>)
|
|
END
|
|
NEXT I
|
|
|
|
RLRec<REACTOR_LOG_INST_RI_NO$> = InstRINos
|
|
|
|
* Remove Calculation
|
|
|
|
PostedBy = RLRec<REACTOR_LOG_RI_POST_BY$>
|
|
|
|
IF PostedBy = '' THEN
|
|
|
|
NewRITypes = XLATE('REACT_ITEM',InstRINos,REACT_ITEM_RI_TYPE$,'X')
|
|
|
|
CurrRINos = Xlate('REACTOR_LOG', RLKey, 'CURR_RI_NO', 'X')
|
|
CurrRITypes = Xlate('REACTOR_LOG', RLKey, 'CURR_RI_TYPE', 'X')
|
|
CurrRIDTMs = Xlate('REACTOR_LOG', RLKey, 'CURR_RI_DTM', 'X')
|
|
|
|
nRICnt = COUNT(NewRITypes,@VM) + (NewRITypes NE '')
|
|
cRICnt = COUNT(CurrRITypes,@VM) + (CurrRITypes NE '')
|
|
|
|
RemRINos = ''
|
|
RemHistKeys = ''
|
|
|
|
FOR J = 1 TO nRICnt
|
|
NewRIType = NewRITypes<1,J>
|
|
FOR K = 1 TO cRICnt
|
|
CurrRIType = CurrRITypes<1,K>
|
|
IF CurrRIType[1,1] = NewRIType[1,1] THEN
|
|
RemNo = CurrRINos<0, K>
|
|
RemInstDTM = CurrRIDTMs<0, K>
|
|
RemHistKey = ReactNo:'*':RemNo:'*':RemInstDTM
|
|
|
|
LOCATE RemNo IN RemRINos USING @VM SETTING Pos ELSE
|
|
RemRINos = INSERT(RemRINos,1,Pos,0,RemNo)
|
|
RemHistKeys = INSERT(RemHistKeys,1,Pos,0,RemHistKey)
|
|
END
|
|
END
|
|
NEXT K ;* End of Curr Loop
|
|
NEXT J ;* End of New Loop
|
|
|
|
RLRec<REACTOR_LOG_REM_RIH_KEY$> = RemHistKeys
|
|
|
|
END ;* End of check for NOT Posted
|
|
|
|
Database_Services('WriteDataRow', 'REACTOR_LOG', RLKey, RLRec)
|
|
|
|
end
|
|
|
|
end service
|
|
|
|
|
|
Service IsSigned(ReactorLogID)
|
|
|
|
Response = 0
|
|
If ReactorLogID EQ '' then
|
|
Response = 'Error, null parameter passed for ReactorLogID'
|
|
return;
|
|
end
|
|
|
|
//Read record
|
|
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
|
|
|
ReactorLogTechSig = ReactorLogRec<REACTOR_LOG_TECH_SIG$>
|
|
If ReactorLogTechSig then
|
|
Response = 1
|
|
end else
|
|
Response = 0
|
|
end
|
|
|
|
End Service
|
|
|
|
|
|
Service IsMaint(ReactorLogID)
|
|
|
|
Response = 0
|
|
If ReactorLogID EQ '' then
|
|
Response = 'Error, null parameter passed for ReactorLogID'
|
|
return;
|
|
end
|
|
|
|
//Read record
|
|
ReactorLogRec = Database_Services('ReadDataRow', 'REACTOR_LOG', ReactorLogID)
|
|
|
|
ReactorLogCategory = ReactorLogRec<REACTOR_LOG_CATEGORY$>
|
|
If ReactorLogCategory EQ 'M' then
|
|
Response = 1
|
|
end else
|
|
Response = 0
|
|
end
|
|
|
|
End Service
|
|
|
|
|
|
Service GetLogsByReactor(ReactNo)
|
|
|
|
ReactLogList = ''
|
|
SelectSent = 'SELECT REACTOR_LOG WITH REACTOR EQ ': ReactNo : ' AND WITH START_DATE GT ' : Date() - 5475 : ' BY-DSND START_DATE'
|
|
|
|
Set_Status(0)
|
|
RList(SelectSent, TARGET_ACTIVELIST$, "", "", "")
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
Response = 0
|
|
RETURN
|
|
END
|
|
IF @RecCount then
|
|
EoF = 0
|
|
NumKeys = @RecCount
|
|
Cnt = 0
|
|
|
|
Loop
|
|
ReadNext log Else EoF = 1
|
|
until EoF
|
|
ReactLogList := log : @FM
|
|
Repeat
|
|
|
|
end
|
|
//to here
|
|
GoSub ClearCursors
|
|
ClearSelect TARGET_ACTIVELIST$
|
|
Response = ReactLogList
|
|
|
|
end service
|
|
|
|
|
|
Service GetLogsByReactorAndServID(ReactNo, ServID)
|
|
|
|
ServicesPerformed = ''
|
|
|
|
ServiceList = Reactor_Log_Services('GetLogsByReactor', ReactNo)
|
|
for each rlKey in ServiceList using @FM
|
|
ServiceIDs = XLATE('REACTOR_LOG', rlKey, 18, 'X')
|
|
|
|
for each ServiceID in ServiceIDs using @VM
|
|
If ServiceID EQ ServID then
|
|
Date = XLATE('REACTOR_LOG', rlKey, 'END_DTM', 'X')
|
|
ServiceDesc = XLATE('REACT_SERVS', ServiceID, 1, 'X')
|
|
ReactItemID = ''
|
|
RLServIDs = XLATE('REACTOR_LOG', rlKey, 18, 'X')
|
|
RLSerialNos = XLATE('REACTOR_LOG', rlKey, 15, 'X')
|
|
RLReactItemIDs = obj_React_Item('Serial_RINo',RLSerialNos)
|
|
Locate ServiceID in RLServIDs using @VM setting ServPos then
|
|
ReactItemID = RLReactItemIDs<1,ServPos>
|
|
end
|
|
ServicesPerformed := ServiceID : @VM : ServiceDesc : @VM: OCONV(Date, 'D4/') : @VM : rlKey : @VM : ReactItemID : @FM
|
|
end
|
|
Next ServiceID
|
|
Next rlKey
|
|
response = ServicesPerformed
|
|
|
|
end service
|
|
|
|
|
|
Service GetLatestReactorLogsByReactor(ReactNo)
|
|
|
|
ServicesPerformed = ''
|
|
|
|
ServiceList = Reactor_Log_Services('GetLogsByReactor', ReactNo)
|
|
//FoundResults = ''
|
|
|
|
for each rlKey in ServiceList using @FM
|
|
ServiceIDs = XLATE('REACTOR_LOG', rlKey, 18, 'X')
|
|
|
|
for each ServiceID in ServiceIDs using @VM
|
|
Date = XLATE('REACTOR_LOG', rlKey, 'END_DTM', 'X')
|
|
ServiceDesc = XLATE('REACT_SERVS', ServiceID, 1, 'X')
|
|
ReactItemID = ''
|
|
RLServIDs = XLATE('REACTOR_LOG', rlKey, 18, 'X')
|
|
RLSerialNos = XLATE('REACTOR_LOG', rlKey, 15, 'X')
|
|
RLReactItemIDs = obj_React_Item('Serial_RINo',RLSerialNos)
|
|
Locate ServiceID in RLServIDs using @VM setting ServPos then
|
|
ReactItemID = RLReactItemIDs<1,ServPos>
|
|
end
|
|
ReactItemSN = XLATE('REACT_ITEM', ReactItemID, 10, 'X')
|
|
ServicesPerformed := ServiceID : @VM : rlKey : @VM : ServiceDesc : @VM: OCONV(Date, 'D4/') : @VM: ReactItemID : @FM
|
|
Next ServiceID
|
|
Next rlKey
|
|
//remove duplicates
|
|
sortIndex = ''
|
|
existingServIDs = ''
|
|
SortedArray = ''
|
|
for ServiceIndex = 1 to DCOUNT(ServicesPerformed, @FM)
|
|
LOCATE ServicesPerformed<ServiceIndex, 1> IN existingServIDs using @FM setting DUMMY else
|
|
SortedArray := ServicesPerformed<ServiceIndex> : @FM
|
|
existingServIDs := ServicesPerformed<ServiceIndex, 1> : @FM
|
|
end
|
|
Next ServiceIndex
|
|
|
|
response = SortedArray
|
|
|
|
end service
|
|
|
|
|
|
Service GetAllServIDs()
|
|
|
|
ReactServsList = ''
|
|
SelectSent = 'SELECT REACT_SERVS BY SERV_ID'
|
|
|
|
Set_Status(0)
|
|
RList(SelectSent, TARGET_ACTIVELIST$, "", "", "")
|
|
IF @RecCount then
|
|
EoF = 0
|
|
NumKeys = @RecCount
|
|
Cnt = 0
|
|
|
|
Loop
|
|
ReadNext ReactServID Else EoF = 1
|
|
until EoF
|
|
Description = XLATE('REACT_SERVS', ReactServID, 1, 'X')
|
|
ReactServsList := ReactServID : @VM : Description : @FM
|
|
Repeat
|
|
|
|
end
|
|
//to here
|
|
GoSub ClearCursors
|
|
ClearSelect TARGET_ACTIVELIST$
|
|
Response = ReactServsList
|
|
|
|
end service
|
|
|
|
|
|
Service ConvertRecordToJSON(KeyID, Record, itemURL)
|
|
|
|
jsonRecord = ''
|
|
|
|
If KeyID NE '' then
|
|
|
|
If Record EQ '' then Record = Database_Services('ReadDataRow', 'REACTOR_LOG', KeyID)
|
|
If Error_Services('NoError') then
|
|
@DICT = Database_Services('GetTableHandle', 'DICT.REACTOR_LOG')
|
|
@ID = KeyID
|
|
@RECORD = Record
|
|
objJSON = ''
|
|
If SRP_JSON(objJSON, 'New', 'Object') then
|
|
If SRP_JSON(objReactorLog, 'New', 'Object') then
|
|
SRP_JSON(objReactorLog, 'SetValue', 'keyId', @ID)
|
|
SRP_JSON(objReactorLog, 'SetValue', 'reactor', {REACTOR})
|
|
SRP_JSON(objReactorLog, 'SetValue', 'reactType', {REACT_TYPE})
|
|
SRP_JSON(objReactorLog, 'SetValue', 'reactTypeDesc', {REACT_TYPE_DESC})
|
|
SRP_JSON(objReactorLog, 'SetValue', 'reactProbId', {REACT_PROB_ID})
|
|
SRP_JSON(objReactorLog, 'SetValue', 'category', {CATEGORY})
|
|
|
|
// Create an array of service info objects
|
|
If SRP_JSON(objServInfoArray, 'New', 'Array') then
|
|
ReactProbCatIDs = {REACT_PROB_CAT_ID}
|
|
For each ReactProbCatID in ReactProbCatIDs using @VM setting vPos
|
|
objServInfo = ''
|
|
If SRP_JSON(objServInfo, 'New', 'Object') then
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactProbCatId', ReactProbCatID)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactProbCatDesc', {REACT_PROB_CAT_DESC}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactServId', {REACT_SERV_ID}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactServDesc', {REACT_SERV_DESC}<0, vPos>)
|
|
If {SCHEDULED}<0, vPos> EQ '' then
|
|
SRP_JSON(objServInfo, 'SetValue', 'scheduled', {SCHEDULED}<0, vPos>, 'Null')
|
|
end else
|
|
SRP_JSON(objServInfo, 'SetValue', 'scheduled', {SCHEDULED}<0, vPos>, 'Boolean')
|
|
end
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactServSnType', {REACT_SERV_SN_TYPE}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactItemId', {REACT_ITEM_IDS}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactItemRiNo', {REACT_ITEM_RI_NO}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactItemMfrPartNo', {RI_MFR_PART_NO}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactItemMfrPartRev', {RI_MFR_PART_REV}<0, vPos>)
|
|
SRP_JSON(objServInfo, 'SetValue', 'reactItemMfrSerialNo', {RI_MFR_SERIAL_NO}<0, vPos>)
|
|
|
|
SRP_JSON(objServInfo, 'SetValue', 'remReactItemId', Field({REM_RIH_KEY}<0, vPos>, '*', 2))
|
|
SRP_JSON(objServInfo, 'SetValue', 'remReactItemDispCd', {REM_DISP_CD}<0, vPos>)
|
|
|
|
|
|
SRP_JSON(objServInfoArray, 'Add', objServInfo)
|
|
SRP_JSON(objServInfo, 'Release')
|
|
end
|
|
Next ReactProbCatID
|
|
SRP_JSON(objReactorLog, 'Set', 'servInfo', objServInfoArray)
|
|
SRP_JSON(objServInfoArray, 'Release')
|
|
end
|
|
SRP_JSON(objReactorLog, 'SetValue', 'reactUtilId', {REACT_UTIL_ID})
|
|
objWaferCount = ''
|
|
If SRP_JSON(objWaferCount, 'New', 'Object') then
|
|
SRP_JSON(objWaferCount, 'SetValue', 'startCount', {REACT_WFR_CNT_START})
|
|
StartDTM = OConv({START_DATE}, 'D4/') :' ': OConv({START_TIME}, 'MTH')
|
|
SRP_JSON(objWaferCount, 'SetValue', 'startDtm', StartDTM)
|
|
SRP_JSON(objWaferCount, 'SetValue', 'endCount', {REACT_WFR_CNT_END})
|
|
SRP_JSON(objReactorLog, 'Set', 'waferCount', objWaferCount)
|
|
SRP_JSON(objWaferCount, 'Release')
|
|
end
|
|
SRP_JSON(objReactorLog, 'SetValue', 'entryId', {ENTRY_ID})
|
|
SRP_JSON(objReactorLog, 'SetValue', 'entryDate', OConv({ENTRY_DATE}, 'D4/'))
|
|
SRP_JSON(objReactorLog, 'SetValue', 'techSig', {TECH_SIG})
|
|
EndDTM = OConv({END_DATE}, 'D4/') :' ': OConv({END_TIME}, 'MTH')
|
|
SRP_JSON(objReactorLog, 'SetValue', 'endDtm', Trim(EndDTM))
|
|
SRP_JSON(objReactorLog, 'SetValue', 'elapsedHours', {ELAPSED_HOURS})
|
|
If {LO_NA} EQ '' then
|
|
SRP_JSON(objReactorLog, 'SetValue', 'lockOutTagOutNA', {LO_NA}, 'Null')
|
|
end else
|
|
SRP_JSON(objReactorLog, 'SetValue', 'lockOutTagOutNA', {LO_NA}, 'Boolean')
|
|
end
|
|
If {LO_REVIEWED} EQ '' then
|
|
SRP_JSON(objReactorLog, 'SetValue', 'lockOutTagOutReviewed', {LO_REVIEWED}, 'Null')
|
|
end else
|
|
SRP_JSON(objReactorLog, 'SetValue', 'lockOutTagOutReviewed', {LO_REVIEWED}, 'Boolean')
|
|
end
|
|
If {ROTR} EQ '' then
|
|
SRP_JSON(objReactorLog, 'SetValue', 'ROTR', {ROTR}, 'Null')
|
|
end else
|
|
SRP_JSON(objReactorLog, 'SetValue', 'ROTR', {ROTR}, 'Boolean')
|
|
end
|
|
|
|
Notes = {NOTES}
|
|
NotesDTMs = OConv({NOTES_DTMS}, 'DT2/^H')
|
|
NotesUsers = OConv({NOTES_USERS}, '[CONV_XLATE,LSL_USERS*FIRST_LAST]')
|
|
|
|
If SRP_JSON(objNotesArray, 'New', 'Array') then
|
|
If Notes NE '' then
|
|
objNote = ''
|
|
For each Note in Notes using @VM setting vPos
|
|
If SRP_JSON(objNote, 'New', 'Object') then
|
|
SRP_JSON(objNote, 'SetValue', 'datetime', NotesDTMs<0, vPos>)
|
|
SRP_JSON(objNote, 'SetValue', 'user', NotesUsers<0, vPos>)
|
|
SRP_JSON(objNote, 'SetValue', 'comment', Notes<0, vPos>)
|
|
SRP_JSON(objNotesArray, 'Add', objNote)
|
|
SRP_JSON(objNote, 'Release')
|
|
end
|
|
Next Note
|
|
end
|
|
SRP_JSON(objReactorLog, 'Set', 'comments', objNotesArray)
|
|
SRP_JSON(objNotesArray, 'Release')
|
|
end
|
|
|
|
objInjSettings = ''
|
|
If SRP_JSON(objInjSettings, 'New', 'Object') then
|
|
For InjIndex = 1 to 5
|
|
SRP_JSON(objInjSettings, 'SetValue', InjIndex, {CURR_INJ_SETTINGS}<0, InjIndex>)
|
|
Next InjIndex
|
|
SRP_JSON(objReactorLog, 'Set', 'currInjSettings', objInjSettings)
|
|
SRP_JSON(objInjSettings, 'Release')
|
|
end
|
|
|
|
If {WAFERS_REMOVED} EQ '' then
|
|
SRP_JSON(objReactorLog, 'SetValue', 'wafersRemoved', {WAFERS_REMOVED}, 'Null')
|
|
end else
|
|
SRP_JSON(objReactorLog, 'SetValue', 'wafersRemoved', {WAFERS_REMOVED}, 'Boolean')
|
|
end
|
|
|
|
// Active NICA Orders
|
|
RlChecklistActive = {CHECKLIST_ACTIVE}
|
|
SRP_JSON(objReactorLog, 'SetValue', 'reactorLogChecklistActive', RlChecklistActive, 'Boolean')
|
|
If RlChecklistActive then
|
|
RlChecklistTypes = {CHECKLIST_TYPE}
|
|
RlChecklistOrderIds = {CHECKLIST_ORDER_ID}
|
|
objRlChecklistArray = ''
|
|
If SRP_JSON(objRlChecklistArray, 'New', 'Array') then
|
|
objChecklist = ''
|
|
For each RlChecklistType in RlChecklistTypes using @VM setting vPos
|
|
If SRP_JSON(objChecklist, 'New', 'Object') then
|
|
SRP_JSON(objChecklist, 'SetValue', 'reactorLogChecklistType', RlChecklistType)
|
|
RlChecklistOrderId = RlChecklistOrderIds<0, vPos>
|
|
SRP_JSON(objChecklist, 'SetValue', 'reactorLogChecklistOrderId', RlChecklistOrderId)
|
|
SRP_JSON(objRlChecklistArray, 'Add', objChecklist)
|
|
SRP_JSON(objChecklist, 'Release')
|
|
end
|
|
Next RlChecklistType
|
|
SRP_JSON(objReactorLog, 'Set', 'reactorLogChecklists', objRlChecklistArray)
|
|
SRP_JSON(objRlChecklistArray, 'Release')
|
|
end
|
|
end
|
|
|
|
loadedRds = Reactor_Services('GetLoadedRds', {REACTOR})
|
|
loadedRdsArray = ''
|
|
If SRP_JSON(loadedRdsArray, 'New', 'Array') then
|
|
objLoadedRds = ''
|
|
For idx = 1 To 2
|
|
If SRP_JSON(objLoadedRds, 'New', 'Object') then
|
|
loadLockSide = Xlate('RDS', loadedRds<idx>, RDS_LOAD_LOCK_SIDE$, 'X')
|
|
SRP_JSON(objLoadedRds, 'SetValue', 'loadLockSide', loadLockSide)
|
|
currentRds = loadedRds<idx>
|
|
SRP_JSON(objLoadedRds, 'SetValue', 'rds', currentRds)
|
|
end
|
|
SRP_JSON(loadedRdsArray, 'Add', objLoadedRds)
|
|
SRP_JSON(objLoadedRds, 'Release')
|
|
Next idx
|
|
SRP_JSON(objReactorLog, 'Set', 'loadedRds', loadedRdsArray, @FM)
|
|
SRP_JSON(loadedRdsArray, 'Release')
|
|
end
|
|
|
|
SRP_JSON(objJSON, 'Set', 'reactorLog', objReactorLog)
|
|
SRP_JSON(objReactorLog, 'Release')
|
|
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
|
|
|
|
|
|
Service ConvertJSONToRecord(JSON)
|
|
|
|
If JSON NE '' then
|
|
If SRP_JSON(objJSON, 'Parse', JSON) EQ '' then
|
|
objReactorLog = SRP_JSON(objJSON, 'Get', 'reactorLog')
|
|
@ID = SRP_JSON(objReactorLog, 'GetValue', 'keyId')
|
|
If @ID NE '' then
|
|
@Record = Database_Services('ReadDataRow', 'REACTOR_LOG', @ID)
|
|
If Error_Services('NoError') then
|
|
@Dict = Database_Services('GetTableHandle', 'DICT.REACTOR_LOG')
|
|
{REACT_PROB_ID} = SRP_JSON(objReactorLog, 'GetValue', 'reactProbID', '')
|
|
objServInfoArray = SRP_JSON(objReactorLog, 'Get', 'servInfo')
|
|
NumObjects = SRP_JSON(objServInfoArray, 'GetCount')
|
|
ReactProbCatIds = ''
|
|
ReactServIds = ''
|
|
Scheduled = ''
|
|
ReactItemIds = ''
|
|
RemReactItemIds = ''
|
|
RemReactItemDispCds = ''
|
|
For ArrayIndex = 1 to NumObjects
|
|
ReactProbCatIds<0, ArrayIndex> = SRP_JSON(objServInfoArray, 'GetValue', '[':ArrayIndex:'].reactProbCatId', '')
|
|
ReactServIds<0, ArrayIndex> = SRP_JSON(objServInfoArray, 'GetValue', '[':ArrayIndex:'].reactServId', '')
|
|
Scheduled<0, ArrayIndex> = SRP_JSON(objServInfoArray, 'GetValue', '[':ArrayIndex:'].scheduled', '')
|
|
ReactItemIds<0, ArrayIndex> = SRP_JSON(objServInfoArray, 'GetValue', '[':ArrayIndex:'].reactItemId', '')
|
|
RemReactItemIds<0, ArrayIndex> = SRP_JSON(objServInfoArray, 'GetValue', '[':ArrayIndex:'].remReactItemId', '')
|
|
RemReactItemDispCds<0, ArrayIndex> = SRP_JSON(objServInfoArray, 'GetValue', '[':ArrayIndex:'].remReactItemDispCd', '')
|
|
Next ArrayIndex
|
|
SRP_JSON(objServInfoArray, 'Release')
|
|
Notes = ''
|
|
NotesDTMs = ''
|
|
NotesUsers = ''
|
|
objNotesArray = SRP_JSON(objReactorLog, 'Get', 'comments')
|
|
NumNotes = SRP_JSON(objNotesArray, 'GetCount')
|
|
TempID = @ID
|
|
TempRec = @Record
|
|
TempDict = @Dict
|
|
For ArrayIndex = 1 to NumNotes
|
|
Notes<0, ArrayIndex> = SRP_JSON(objNotesArray, 'GetValue', '[':ArrayIndex:'].comment', '')
|
|
NotesDTMs<0, ArrayIndex> = IConv(SRP_JSON(objNotesArray, 'GetValue', '[':ArrayIndex:'].datetime', ''), 'DT')
|
|
User = SRP_JSON(objNotesArray, 'GetValue', '[':ArrayIndex:'].user', '')
|
|
If User NE '' then
|
|
Query = 'SELECT LSL_USERS WITH FIRST_LAST EQ ':Quote(User)
|
|
RList(Query, TARGET_ACTIVELIST$, '', '', '')
|
|
ReadNext User else Null
|
|
GoSub ClearCursors
|
|
end
|
|
NotesUsers<0, ArrayIndex> = User
|
|
Next ArrayIndex
|
|
SRP_JSON(objNotesArray, 'Release')
|
|
@ID = TempID
|
|
@Record = TempRec
|
|
@Dict = TempDict
|
|
{NOTES} = Notes
|
|
{NOTES_DTMS} = NotesDTMs
|
|
{NOTES_USERS} = NotesUsers
|
|
{REACT_PROB_CAT_ID} = ReactProbCatIds
|
|
{REACT_SERV_ID} = ReactServIds
|
|
{SCHEDULED} = Scheduled
|
|
{REACT_ITEM_IDS} = ReactItemIds
|
|
{REM_DISP_CD} = RemReactItemDispCds
|
|
{REACT_UTIL_ID} = SRP_JSON(objReactorLog, 'GetValue', 'reactUtilId', '')
|
|
{REACT_WFR_CNT_START} = SRP_JSON(objReactorLog, 'GetValue', 'waferCount.startCount', '')
|
|
{TECH_SIG} = SRP_JSON(objReactorLog, 'GetValue', 'techSig', '')
|
|
{LO_NA} = SRP_JSON(objReactorLog, 'GetValue', 'lockOutTagOutNA', '')
|
|
{LO_REVIEWED} = SRP_JSON(objReactorLog, 'GetValue', 'lockOutTagOutReviewed', '')
|
|
{ROTR} = SRP_JSON(objReactorLog, 'GetValue', 'ROTR', '')
|
|
|
|
{WAFERS_REMOVED} = SRP_JSON(objReactorLog, 'GetValue', 'wafersRemoved', '')
|
|
objWafersRemovedRdsArray = SRP_JSON(objReactorLog, 'Get', 'wafersRemovedRds')
|
|
wafersRemovedRdsCount = SRP_JSON(objWafersRemovedRdsArray, 'GetCount')
|
|
wafersRemovedRds = ''
|
|
For idx = 1 to wafersRemovedRdsCount
|
|
If (idx GT 1) then wafersRemovedRds := @VM
|
|
rds = SRP_JSON(objWafersRemovedRdsArray, 'GetValue', '[':idx:']', '')
|
|
wafersRemovedRds := rds
|
|
Next idx
|
|
{WAFERS_REMOVED_RDS} = wafersRemovedRds
|
|
SRP_Json(objWafersRemovedRdsArray, 'Release')
|
|
|
|
{WAFERS_REMOVED} = SRP_JSON(objReactorLog, 'GetValue', 'wafersRemoved', '')
|
|
objWafersRemovedRdsArray = SRP_JSON(objReactorLog, 'Get', 'wafersRemovedRds')
|
|
wafersRemovedRdsCount = SRP_JSON(objWafersRemovedRdsArray, 'GetCount')
|
|
wafersRemovedRds = ''
|
|
For idx = 1 to wafersRemovedRdsCount
|
|
If (idx GT 1) then wafersRemovedRds := @VM
|
|
rds = SRP_JSON(objWafersRemovedRdsArray, 'GetValue', '[':idx:']', '')
|
|
wafersRemovedRds := rds
|
|
Next idx
|
|
{WAFERS_REMOVED_RDS} = wafersRemovedRds
|
|
SRP_Json(objWafersRemovedRdsArray, 'Release')
|
|
end
|
|
end else
|
|
Error_Services('Add', 'Error in ':Service:' service. Null value for reactorLog.keyID.')
|
|
end
|
|
SRP_JSON(objReactorLog, 'Release')
|
|
SRP_JSON(objJSON, 'Release')
|
|
end else
|
|
Error_Services('Add', 'Error in ':Service:' service. Unable to parse JSON payload.')
|
|
end
|
|
end else
|
|
Error_Services('Add', 'Error in ':Service:' service. Null JSON passed in.')
|
|
end
|
|
|
|
Response = @Record
|
|
|
|
end service
|
|
|
|
|
|
Service GetRlChecklistActive(RLKey)
|
|
|
|
If RLKey NE '' then
|
|
OrderTypes = 'ASM_HTR_TUBE_CHANGE' : @VM : 'ASM_HTR_ANNUAL_PM' : @VM : 'ASM_HTR_SEMIANNUAL_PM' : @VM : 'ASM_HTR_FIVE_AND_TEN_YEAR_PM'
|
|
ActiveRlOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR_LOG', RLKey, OrderTypes)
|
|
Response = ( ActiveRlOrderIds NE '' )
|
|
end else
|
|
Error_Services('Add', 'Error in ':Service:' service. Null ReactNo passed into service.')
|
|
end
|
|
|
|
end service
|
|
|
|
|
|
Service AddComment(Reactor, NewNote, User)
|
|
|
|
ReactModeNGKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 'REACT_MODE_KEY_IDS', 'X')
|
|
RLKey = Xlate('REACT_MODE_NG', ReactModeNGKey, 'START_RL_ID', 'X')
|
|
If RLKey NE '' then
|
|
RLRec = Database_Services('ReadDataRow', 'REACTOR_LOG', RLKey)
|
|
If Error_Services('NoError') then
|
|
Notes = RLRec<REACTOR_LOG_NOTES$>
|
|
NumNotes = DCount(Notes, @VM)
|
|
RLRec<REACTOR_LOG_NOTES$, NumNotes + 1> = NewNote
|
|
RLRec<REACTOR_LOG_NOTES_DTMS$, NumNotes + 1> = Datetime()
|
|
RLRec<REACTOR_LOG_NOTES_USERS$, NumNotes + 1> = User
|
|
Database_Services('WriteDataRow', 'REACTOR_LOG', RLKey, RLRec)
|
|
end
|
|
end else
|
|
Error_Services('Add', 'Error in ':Service:' service. Error locating reactor log key for reactor ':Reactor:'.')
|
|
end
|
|
|
|
end service
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Internal GoSubs
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
ClearCursors:
|
|
|
|
For counter = 0 to 8
|
|
ClearSelect counter
|
|
Next counter
|
|
|
|
return
|
|
|