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 If ReactorNo NE '' then // Verify wafer count is populated WaferCount = ReactorLogRec 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 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 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 If InstRINo NE '' then RIPostBy = ReactorLogRec 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 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 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 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 = UserID NewPMRec = Date() NewPMRec = ReactorNo NewPMRec = EndDate NewPMRec = EndDate + PMDays NewPMRec = CurService NewPMRec = 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 = UserID ReactorLogRec = Date() ReactorLogRec = 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 = '' RLRec = '' RLRec = '' RLRec = '' RLRec = '' RLRec = '' 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 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 RawReactItemIds = RLRec 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 = InstRINos * Remove Calculation PostedBy = RLRec 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 = 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 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 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 IN existingServIDs using @FM setting DUMMY else SortedArray := ServicesPerformed : @FM existingServIDs := ServicesPerformed : @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, RDS_LOAD_LOCK_SIDE$, 'X') SRP_JSON(objLoadedRds, 'SetValue', 'loadLockSide', loadLockSide) currentRds = loadedRds 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 NumNotes = DCount(Notes, @VM) RLRec = NewNote RLRec = Datetime() RLRec = 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