From 550f376a0b8fdb28f3b4f3c58bb80216c727d58f Mon Sep 17 00:00:00 2001 From: "Infineon\\StieberD" Date: Fri, 23 May 2025 11:38:34 -0700 Subject: [PATCH] ready for deployment --- LSL2/POPUP/REACT_ITEM.json | 32 +- LSL2/POPUP/SHOW_REACT_ITEMS.json | 14 +- LSL2/STPROC/COMM_REACTOR_LOG.txt | 94 +- LSL2/STPROC/DIALOG_REACT_ITEM_QUERY.txt | 7 +- LSL2/STPROC/OBJ_REACTOR_LOG.txt | 17 +- LSL2/STPROC/OBJ_REACT_ITEM_HIST.txt | 169 ++- LSL2/STPROC/REACTITEMS_API.txt | 95 +- LSL2/STPROC/REACTOR_LOG_SERVICES.txt | 1692 +++++++++++------------ LSL2/STPROC/REACT_ITEM_ACTIONS.txt | 489 ++++--- LSL2/STPROC/REACT_ITEM_SERVICES.txt | 159 ++- LSL2/STPROCINS/REACT_ITEM_EQUATES.txt | 46 +- 11 files changed, 1457 insertions(+), 1357 deletions(-) diff --git a/LSL2/POPUP/REACT_ITEM.json b/LSL2/POPUP/REACT_ITEM.json index 5a51199..3785135 100644 --- a/LSL2/POPUP/REACT_ITEM.json +++ b/LSL2/POPUP/REACT_ITEM.json @@ -9,7 +9,7 @@ "<2>": "-1", "<3>": "-1", "<4>": "-1", - "<5>": "16777215", + "<5>": "-2", "<6>": { "<6,1>": { "<6,1,1>": "Tahoma", @@ -31,7 +31,7 @@ } }, "<7>": "REACT_ITEM", - "<8>": "BY @ID", + "<8>": "BY-DSND ENTER_DTM", "<9>": { "<9,1>": { "<9,1,1>": "RI_NO", @@ -120,6 +120,22 @@ "<9,11,4>": "C", "<9,11,5>": "D4/", "<9,11,6>": "Retire Dt" + }, + "<9,12>": { + "<9,12,1>": "ENTER_DTM", + "<9,12,2>": "14", + "<9,12,3>": "L", + "<9,12,4>": "C", + "<9,12,5>": "DT2/^H", + "<9,12,6>": "Enter Dtm" + }, + "<9,13>": { + "<9,13,1>": "CURR_STATUS", + "<9,13,2>": "5", + "<9,13,3>": "L", + "<9,13,4>": "C", + "<9,13,5>": "[CONV_ITEM_CURR_STATUS]", + "<9,13,6>": "Curr Status" } }, "<10>": "T", @@ -147,7 +163,17 @@ "<32>": "0", "<33>": "1", "<34>": "16777215", - "<35>": "16777215" + "<35>": "16766894", + "<36>": "", + "<37>": "", + "<38>": "", + "<39>": "", + "<40>": "-2", + "<41>": "1000", + "<42>": "", + "<43>": "", + "<44>": "", + "<45>": "" } } } \ No newline at end of file diff --git a/LSL2/POPUP/SHOW_REACT_ITEMS.json b/LSL2/POPUP/SHOW_REACT_ITEMS.json index 9b4a7be..d48c9e1 100644 --- a/LSL2/POPUP/SHOW_REACT_ITEMS.json +++ b/LSL2/POPUP/SHOW_REACT_ITEMS.json @@ -9,7 +9,7 @@ "<2>": "-1", "<3>": "-1", "<4>": "-1", - "<5>": "16777215", + "<5>": "-2", "<6>": { "<6,1>": { "<6,1,1>": "MS Sans Serif", @@ -91,7 +91,17 @@ "<32>": "0", "<33>": "1", "<34>": "16777215", - "<35>": "16777215" + "<35>": "16777215", + "<36>": "", + "<37>": "", + "<38>": "", + "<39>": "", + "<40>": "-2", + "<41>": "1000", + "<42>": "", + "<43>": "", + "<44>": "", + "<45>": "" } } } \ No newline at end of file diff --git a/LSL2/STPROC/COMM_REACTOR_LOG.txt b/LSL2/STPROC/COMM_REACTOR_LOG.txt index 994f1e8..8d83c1b 100644 --- a/LSL2/STPROC/COMM_REACTOR_LOG.txt +++ b/LSL2/STPROC/COMM_REACTOR_LOG.txt @@ -20,7 +20,7 @@ Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.I Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar Declare Function GetAsyncKeyState, obj_Tables, MemberOf, Environment_Services, Database_Services, Rds_Services Declare Function Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List -Declare Function Nica_Orders_Services +Declare Function Nica_Orders_Services, SRP_Date, React_Item_Services, SRP_Datetime, Datetime $Insert MSG_EQUATES $Insert APPCOLORS @@ -1229,64 +1229,51 @@ SvcsOptions: If ItemType NE '' then RetVal = '' + ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]') - ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]') + RIKeys = React_Item_Services('GetReactItems', ItemType, 'N,U') - OPEN 'DICT.REACT_ITEM' to DictReactItem else - ErrMsg('Unable to open DICT.REACT_ITEM') - return - end - - SearchString = 'RI_TYPE':@VM:ItemType:@FM - SearchString := 'CURR_STATUS':@VM:'N':@VM:'U':@FM - - RIKeys = '' - Option = '' - Flag = '' - - Btree.Extract(SearchString,'REACT_ITEM',DictReactItem,RIKeys,Option,Flag) - If Get_Status(errCode) then - ErrMsg(errCode) - return - end - - TypeOver = '' - TypeOVer = 'K' - TypeOver = RIKeys - RetVal = Popup(@Window,TypeOver,'REACT_ITEM') - - If RetVal NE '' then - obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos) - - RIRec = XLATE('REACT_ITEM',RetVal,'','X') - - If RIRec = 'T' then - CardWindow = 'REACT_ITEM' - CardKey = RetVal - DefaultRec = '' - NewCardCtrl = '' - RecalcCtrl = @Window:'.SERV_INFO' - RecalcPos = SelPos - RetCtrl = @Window:'.SERV_INFO' - RetPos = SelPos - - oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos - - obj_AppWindow('ViewNewCard',oAParms) - - Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1) - - If Get_Status(errCode) then - ErrMsg(errCode) - end - end - - GoSub Refresh + If Error_Services('NoError') then + + TypeOver = '' + TypeOVer = 'K' + TypeOver = RIKeys + RetVal = Popup(@Window,TypeOver,'REACT_ITEM') + + If RetVal NE '' then + obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos) + + RIRec = XLATE('REACT_ITEM',RetVal,'','X') + + If RIRec = 'T' then + CardWindow = 'REACT_ITEM' + CardKey = RetVal + DefaultRec = '' + NewCardCtrl = '' + RecalcCtrl = @Window:'.SERV_INFO' + RecalcPos = SelPos + RetCtrl = @Window:'.SERV_INFO' + RetPos = SelPos + + oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos + + obj_AppWindow('ViewNewCard',oAParms) + + Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1) + + If Get_Status(errCode) then + ErrMsg(errCode) + end + end + + GoSub Refresh + end + end else + Error_Services('DisplayError') end end ;* End of check for null SNReq - End Case GoSub Refresh @@ -1877,4 +1864,3 @@ ColorRemRiTable: return - diff --git a/LSL2/STPROC/DIALOG_REACT_ITEM_QUERY.txt b/LSL2/STPROC/DIALOG_REACT_ITEM_QUERY.txt index 4e7de5a..6f3bcad 100644 --- a/LSL2/STPROC/DIALOG_REACT_ITEM_QUERY.txt +++ b/LSL2/STPROC/DIALOG_REACT_ITEM_QUERY.txt @@ -440,7 +440,7 @@ END IF CurrStatus NE '' THEN SWAP @VM WITH '" "' IN CurrStatus IF SelectSent NE '' THEN SelectSent := ' AND' - SelectSent := ' WITH CURR_STATUS ':QUOTE(CurrStatus) + SelectSent := ' WITH CURR_STATUS_STATIC ':QUOTE(CurrStatus) END IF PartTypes NE '' THEN @@ -471,7 +471,7 @@ SelectSent = 'SELECT REACT_ITEM ':SelectSent Def = "" -Def = "Selecting Reactor Events..." +Def = "Selecting Reactor Items..." Def = "U" * display the processing message and do the processing @@ -502,6 +502,3 @@ End_Dialog(@WINDOW,RINos) RETURN - - - diff --git a/LSL2/STPROC/OBJ_REACTOR_LOG.txt b/LSL2/STPROC/OBJ_REACTOR_LOG.txt index b774985..eb1e5e9 100644 --- a/LSL2/STPROC/OBJ_REACTOR_LOG.txt +++ b/LSL2/STPROC/OBJ_REACTOR_LOG.txt @@ -18,7 +18,7 @@ COMPILE FUNCTION obj_Reactor_Log(Method,Parms) */ DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log -Declare subroutine Error_Services, Database_Services +Declare subroutine Error_Services, Database_Services, React_Item_Services DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services @@ -195,18 +195,16 @@ PostReactItems: ReactorLogRec = PostDTM otParms = FIELDSTORE(otParms,@RM,4,0,ReactorLogRec) - //obj_Tables('WriteRec',otParms) + Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, ReactorLogRec, 1, 0, 1) - + Update_Index('REACT_ITEM_HIST', 'INST_RL_ID', False$, True$) ;* Don't wait for indexer - flush pending indexes now Update_Index('REACT_ITEM_HIST', 'REM_RL_ID', False$, True$) + end else Error_Services('Add', ValidationFailureReason) end - - - RETURN @@ -386,10 +384,3 @@ RemHistKeys: RETURN - - - - - - - diff --git a/LSL2/STPROC/OBJ_REACT_ITEM_HIST.txt b/LSL2/STPROC/OBJ_REACT_ITEM_HIST.txt index 88e177e..660e89a 100644 --- a/LSL2/STPROC/OBJ_REACT_ITEM_HIST.txt +++ b/LSL2/STPROC/OBJ_REACT_ITEM_HIST.txt @@ -18,11 +18,12 @@ COMPILE FUNCTION obj_React_Item_Hist(Method,Parms) */ -DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup -DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn -DECLARE SUBROUTINE ErrMsg, Btree.Extract +DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup +DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, React_Item_Services +$Insert LOGICAL $INSERT REACT_ITEM_HIST_EQUATES +$INSERT RLIST_EQUATES EQU CRLF$ TO \0D0A\ EQU TAB$ TO CHAR(9) @@ -62,26 +63,26 @@ RETURN Result Install: * * * * * * * -RIHKey = Parms[1,@RM] -RL_Id = Parms[COL2()+1,@RM] -ReactWfrCnt = Parms[COL2()+1,@RM] -ReactHrs = Parms[COL2()+1,@RM] + RIHKey = Parms[1,@RM] + RL_Id = Parms[COL2()+1,@RM] + ReactWfrCnt = Parms[COL2()+1,@RM] + ReactHrs = Parms[COL2()+1,@RM] -IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')' -IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')' -*IF ReactWfrCnt = '' THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')' ;* Optional -*IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' ;* Optional + IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')' + IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')' -IF ErrorMsg NE '' THEN RETURN + IF ErrorMsg NE '' THEN RETURN -RIHRec = '' -RIHRec = RL_ID -RIHRec = ReactWfrCnt -RIHRec = ReactHrs + RIHRec = '' + RIHRec = RL_ID + RIHRec = ReactWfrCnt + RIHRec = ReactHrs -otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec + otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec -obj_Tables('WriteRec',otParms) + obj_Tables('WriteRec',otParms) + RINo = Field(RIHKey, '*', 2, 1) + React_Item_Services('UpdateReactItemStatus', RINo) RETURN @@ -90,38 +91,36 @@ RETURN Remove: * * * * * * * -RIHKey = Parms[1,@RM] -RemoveDTM = Parms[COL2()+1,@RM] ;* Internal format * -RL_Id = Parms[COL2()+1,@RM] -ReactWfrCnt = Parms[COL2()+1,@RM] -ReactHrs = Parms[COL2()+1,@RM] + RIHKey = Parms[1,@RM] + RemoveDTM = Parms[COL2()+1,@RM] ;* Internal format * + RL_Id = Parms[COL2()+1,@RM] + ReactWfrCnt = Parms[COL2()+1,@RM] + ReactHrs = Parms[COL2()+1,@RM] -IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')' -IF RemoveDTM = '' THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')' -IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')' -*IF ReactWfrCnt = '' THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')' ;* Optional -*IF ReactHrs = '' THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')' ;* Optional + IF RIHKey = '' THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')' + IF RemoveDTM = '' THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')' + IF RL_Id = '' THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')' -IF ErrorMsg NE '' THEN RETURN + IF ErrorMsg NE '' THEN RETURN -* Read and update record * + otParms = 'REACT_ITEM_HIST':@RM:RIHKey -otParms = 'REACT_ITEM_HIST':@RM:RIHKey + RIHRec = obj_Tables('ReadRec',otParms) -RIHRec = obj_Tables('ReadRec',otParms) + IF Get_Status(errCode) THEN + Set_Status(0) + RIHRec = '' + END -IF Get_Status(errCode) THEN - Set_Status(0) - RIHRec = '' -END + RIHRec = RemoveDTM + RIHRec = RL_Id + RIHRec = ReactWfrCnt + RIHRec = ReactHrs -RIHRec = RemoveDTM -RIHRec = RL_Id -RIHRec = ReactWfrCnt -RIHRec = ReactHrs - -otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec) -obj_Tables('WriteRec',otParms) + otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec) + obj_Tables('WriteRec',otParms) + RINo = Field(RIHKey, '*', 2, 1) + React_Item_Services('UpdateReactItemStatus', RINo) RETURN @@ -130,24 +129,21 @@ RETURN ClearRemove: * * * * * * * -RIHKey = Parms[1,@RM] + RIHKey = Parms[1,@RM] -IF RIHKey = '' THEN RETURN + IF RIHKey = '' THEN RETURN + otParms = 'REACT_ITEM_HIST':@RM:RIHKey -* Read and update record * + RIHRec = obj_Tables('ReadRec',otParms) -otParms = 'REACT_ITEM_HIST':@RM:RIHKey + RIHRec = '' + RIHRec = '' + RIHRec = '' + RIHRec = '' -RIHRec = obj_Tables('ReadRec',otParms) - -RIHRec = '' -RIHRec = '' -RIHRec = '' -RIHRec = '' - -otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec) -obj_Tables('WriteRec',otParms) + otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec) + obj_Tables('WriteRec',otParms) RETURN @@ -156,49 +152,50 @@ RETURN GetHistory: * * * * * * * -ReactNo = Parms[1,@RM] -RINo = Parms[COL2()+1,@RM] -RIType = Parms[COL2()+1,@RM] + ReactNo = Parms[1,@RM] + RINo = Parms[COL2()+1,@RM] + RIType = Parms[COL2()+1,@RM] -IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN + IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN -OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE - ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup' - RETURN -END + OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE + ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup' + RETURN + END -Search = '' + Search = '' -IF ReactNo NE '' THEN Search := 'REACT_NO':@VM:ReactNo:@FM -IF RINo NE '' THEN Search := 'RI_NO':@VM:RINo:@FM -IF RIType NE '' THEN Search := 'RI_TYPE':@VM:RIType:@FM + IF ReactNo NE '' THEN Search := 'REACT_NO':@VM:ReactNo:@FM + IF RINo NE '' THEN Search := 'RI_NO':@VM:RINo:@FM + IF RIType NE '' THEN Search := 'RI_TYPE':@VM:RIType:@FM -Option = '' -Flag = '' + Option = '' + Flag = '' -Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag) ;* Get unsorted keys based on Search parameters + Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag) ;* Get unsorted keys based on Search parameters -* Put sort data in first column (Install DTM) + // Put sort data in first column (Install DTM) -WorkList = '' -riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '') -FOR I = 1 TO riCnt - RIKey = RIKeys<1,I> - WorkList = FIELD(RIKey,'*',3):@VM:RIKey -NEXT I + WorkList = '' + riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '') + FOR I = 1 TO riCnt + RIKey = RIKeys<1,I> + WorkList = FIELD(RIKey,'*',3):@VM:RIKey + NEXT I -WorkList := @RM + WorkList := @RM -CONVERT @FM:@VM TO @RM:@FM IN WorkList ;* push delimiters higher for V119 + CONVERT @FM:@VM TO @RM:@FM IN WorkList ;* push delimiters higher for V119 -CALL V119('S','','D','L',WorkList,'') ;* Descending Left justified sort + CALL V119('S','','D','L',WorkList,'') ;* Descending Left justified sort -CONVERT @FM:@RM TO @VM:@FM IN WorkList ;* pull delimiters lower + CONVERT @FM:@RM TO @VM:@FM IN WorkList ;* pull delimiters lower -WorkList[-1,1] = '' ;* Trim trailing delimiter + WorkList[-1,1] = '' ;* Trim trailing delimiter -FOR I = 1 TO riCnt - Result<1,I> = WorkList ;* Strip Sort column(s) -NEXT I + FOR I = 1 TO riCnt + Result<1,I> = WorkList ;* Strip Sort column(s) + NEXT I RETURN + diff --git a/LSL2/STPROC/REACTITEMS_API.txt b/LSL2/STPROC/REACTITEMS_API.txt index 54fdffc..8185617 100644 --- a/LSL2/STPROC/REACTITEMS_API.txt +++ b/LSL2/STPROC/REACTITEMS_API.txt @@ -62,24 +62,80 @@ API reactItems.HEAD API reactItems.GET QueryFields = HTTP_Services('GetHTTPGetString') - If Index(QueryFields, 'riType', 1) then - RIType = HTTP_Services('GetQueryField', 'riType') + If IndexC(QueryFields, 'includeNullRetireDt', 1) then + IncludeNullRetireDt = HTTP_Services('GetQueryField', 'includeNullRetireDt') + Begin Case + Case ( (IncludeNullRetireDt EQ 1) or (IncludeNullRetireDt EQ 0) ) + Null + Case ( (IncludeNullRetireDt _EQC 'true') or (IncludeNullRetireDt _EQC 'yes') ) + IncludeNullRetireDt = True$ + Case ( (IncludeNullRetireDt _EQC 'false') or (IncludeNullRetireDt _EQC 'no') ) + IncludeNullRetireDt = False$ + Case Otherwise$ + Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':IncludeNullRetireDt:'" passed in for includeNullRetireDt.') + End Case end else - RIType = '' + IncludeNullRetireDt = '' + end + + If Error_Services('NoError') then + If IndexC(QueryFields, 'showAllDetails', 1) then + ShowAllDetails = HTTP_Services('GetQueryField', 'showAllDetails') + Begin Case + Case ( (ShowAllDetails EQ 1) or (ShowAllDetails EQ 0) ) + Null + Case ( (ShowAllDetails _EQC 'true') or (ShowAllDetails _EQC 'yes') ) + ShowAllDetails = True$ + Case ( (ShowAllDetails _EQC 'false') or (ShowAllDetails _EQC 'no') ) + ShowAllDetails = False$ + Case Otherwise$ + Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':ShowAllDetails:'" passed in for showAllDetails.') + End Case + end else + ShowAllDetails = False$ + end + + If Error_Services('NoError') then + If IndexC(QueryFields, 'currStatus', 1) then + CurrStatus = HTTP_Services('GetQueryField', 'currStatus') + end else + CurrStatus = '' + end + If IndexC(QueryFields, 'riType', 1) then + RIType = HTTP_Services('GetQueryField', 'riType') + end else + RIType = '' + end + If IndexC(QueryFields, 'entryDtStart', 1) then + EntryDtStart = HTTP_Services('GetQueryField', 'entryDtStart') + end else + EntryDtStart = '' + end + If IndexC(QueryFields, 'entryDtEnd', 1) then + EntryDtEnd = HTTP_Services('GetQueryField', 'entryDtEnd') + end else + EntryDtEnd = '' + end + If IndexC(QueryFields, 'retireDtStart', 1) then + RetireDtStart = HTTP_Services('GetQueryField', 'retireDtStart') + end else + RetireDtStart = '' + end + If IndexC(QueryFields, 'retireDtEnd', 1) then + RetireDtEnd = HTTP_Services('GetQueryField', 'retireDtEnd') + end else + RetireDtEnd = '' + end + + StatusCode = 200 + GoSub CreateHALCollection + end else + HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage")) + end + end else + HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage")) end - If Index(QueryFields, 'currStatus', 1 ) then - CurrStatus = Http_Services('GetQueryField', 'currStatus') - end else - CurrStatus = '' - end - If Index(QueryFields, 'showAllDetails', 1 ) then - ShowAllDetails = Http_Services('GetQueryField', 'showAllDetails') - end else - ShowAllDetails = False$ - end - StatusCode = 200 - - GoSub CreateHALCollection + end api @@ -254,11 +310,7 @@ CreateHALCollection: JSONCollection = '' Abort = False$ - If RIType NE '' OR CurrStatus NE '' then - ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus) - end else - ReactItems = React_Item_Services('GetAllReactItemKeys') - end + ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt) If ReactItems NE '' then If SRP_JSON(hJSONCollection, 'New', 'Object') then @@ -304,3 +356,4 @@ CreateHALCollection: end return + diff --git a/LSL2/STPROC/REACTOR_LOG_SERVICES.txt b/LSL2/STPROC/REACTOR_LOG_SERVICES.txt index e720d3c..55c02a8 100644 --- a/LSL2/STPROC/REACTOR_LOG_SERVICES.txt +++ b/LSL2/STPROC/REACTOR_LOG_SERVICES.txt @@ -56,909 +56,896 @@ Options PM_TYPES = 'ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANN //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 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 - - + + 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 '') - If (CCnt GT 0) then - IntrMaintFlowCodes = React_Servs_Services('GetIntrMaintFlowIds', CurServices) - If IntrMaintFlowCodes NE '' then - ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X') - ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', IntrMaintFlowCodes, 'INTRUSIVE_MAINT', ReactorType) - If ChecklistIds NE '' then - LogFlows = IntrMaintFlowCodes - Convert @VM to ', ' in LogFlows - Reactor_Log_Services('AddComment', ReactorNo, 'Intrusive Maintenance initiated for flow(s) ':LogFlows:'.', UserID) - IntrMaintFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_INTRUSIVE_MAINTENANCE', FEATURE_FLAGS.ENABLED$, 'X') - If (IntrMaintFeatureFlag EQ True$) then - Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactorNo, 'INTRUSIVE_MAINT', IntrMaintFlowCodes, '', ChecklistIds) - end - If Error_Services('HasError') then 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 - + + 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 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 '') + If (CCnt GT 0) then + IntrMaintFlowCodes = React_Servs_Services('GetIntrMaintFlowIds', CurServices) + If IntrMaintFlowCodes NE '' then + ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X') + ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', IntrMaintFlowCodes, 'INTRUSIVE_MAINT', ReactorType) + If ChecklistIds NE '' then + LogFlows = IntrMaintFlowCodes + Convert @VM to ', ' in LogFlows + Reactor_Log_Services('AddComment', ReactorNo, 'Intrusive Maintenance initiated for flow(s) ':LogFlows:'.', UserID) + IntrMaintFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_INTRUSIVE_MAINTENANCE', FEATURE_FLAGS.ENABLED$, 'X') + If (IntrMaintFeatureFlag EQ True$) then + Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactorNo, 'INTRUSIVE_MAINT', IntrMaintFlowCodes, '', ChecklistIds) + end + If Error_Services('HasError') then 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 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 - + + 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 @@ -967,11 +954,10 @@ end service //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ClearCursors: - - For counter = 0 to 8 - ClearSelect counter - Next counter - + + For counter = 0 to 8 + ClearSelect counter + Next counter + return - diff --git a/LSL2/STPROC/REACT_ITEM_ACTIONS.txt b/LSL2/STPROC/REACT_ITEM_ACTIONS.txt index c6e0df9..c279ee0 100644 --- a/LSL2/STPROC/REACT_ITEM_ACTIONS.txt +++ b/LSL2/STPROC/REACT_ITEM_ACTIONS.txt @@ -1,254 +1,235 @@ -Function REACT_ITEM_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10) -/*********************************************************************************************************************** - - 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 Infineon. - - Name : RDS_Actions - - Description : Handles calculated columns and MFS calls for the current table. - - Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly. - If called from outside of a calculated column these will need to be set and restored. - - Parameters : - Action [in] -- Name of the action to be taken - CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be - populated when the CalcField action is being used. - FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM - delimited array, with the current MFS name as the first value in the array, and the BFS - name as the last value. Normally set by a calling MFS. - Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the - entire handle structure that the Basic+ Open statement would provide. Normally set by a - calling MFS. - Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS. - FMC [in] -- Various functions. Normally set by a calling MFS. - Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for - "get handle" functions). Normally set by a calling MFS. - Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but - for some actions can be set by the action handler to indicate failure. - OrigRecord [in] -- Original content of the record being processed by the current action. This is - automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within - BASE_MFS. - Param1-10 [in/out] -- Additional request parameter holders - ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.) - Can also be used to return a special value, such as the results of the CalcField - method. - - History : (Date, Initials, Notes) - 04/10/18 dmb Original programmer. - 10/04/18 djs Added a trigger within the WRITE_RECORD event, which fires when the reactor number has - changed. When this occurs the related RDS_LAYER records for this RDS record are populated - with the most recent associated TOOL_PARMS record. (related by PSN and Reactor) - -***********************************************************************************************************************/ - -#pragma precomp SRP_PreCompiler - -$Insert FILE.SYSTEM.EQUATES -$Insert ACTION_SETUP -$Insert RDS_EQUATES -$Insert CLEAN_INSP_EQUATES -$Insert COMPANY_EQUATES -$Insert RDS_LAYER_EQUATES -$Insert TOOL_PARMS_EQUATES -$Insert RLIST_EQUATES -$Insert APP_INSERTS -$Insert QA_MET_EQUATES -$Insert PRS_STAGE_EQUATES -$Insert WO_MAT_EQUATES -$Insert WO_MAT_QA_EQUATES - -Equ COMMA$ to ',' - -Declare function Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services, SRP_Math -Declare function Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services, obj_WO_Mat -Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services_Dev -Declare subroutine Work_Order_Services, Material_Services, Set_FSError - - - - - -If KeyID then GoSub Initialize_System_Variables - -Begin Case - - Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn - Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE - Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD - Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE - Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD - Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE - Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD - Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE - Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD - Case Otherwise$ ; Status = 'Invalid Action' - -End Case - -If KeyID then GoSub Restore_System_Variables - -If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$ - -Return ActionFlow - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Calculated Columns -// -// The typical structure of a calculated column will look like this: -// -// Declare function Database_Services -// -// @ANS = Database_Services('CalculateColumn') -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CalculateColumn: - - // Make sure the ActionFlow return variable is cleared in case nothing is calculated. - ActionFlow = '' - - - -return - - - -// ----- MFS calls ----------------------------------------------------------------------------------------------------- - -READ_RECORD_PRE: - // In order to stop a record from being read in this action these lines of code must be used: - // - // OrigFileError = 100 : @FM : KeyID - // Status = 0 - // Record = '' - // ActionFlow = ACTION_STOP$ - - -return - -READ_RECORD: - - // In order to stop a record from being read in this action these lines of code must be used: - // - // OrigFileError = 100 : @FM : KeyID - // Status = 0 - // Record = '' - -return - -READONLY_RECORD_PRE: - // In order to stop a record from being read in this action these lines of code must be used: - // - // OrigFileError = 100 : @FM : KeyID - // Status = 0 - // Record = '' - // ActionFlow = ACTION_STOP$ -return - -READONLY_RECORD: - // In order to stop a record from being read in this action these lines of code must be used: - // - // OrigFileError = 100 : @FM : KeyID - // Status = 0 - // Record = '' -return - -WRITE_RECORD_PRE: - -ErrMsg = '' - -//Req'd parameter checks -ItemType = {RI_TYPE} - -If ItemType EQ '' then - ErrMsg := 'Item Type was not specified. ' -end - -If ErrMsg NE '' then - Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg) - OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg - Status = 0 - Record = '' - ActionFlow = ACTION_STOP$ -end - -return - -WRITE_RECORD: - - - -return - -DELETE_RECORD_PRE: - - -return - -DELETE_RECORD: -return - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Internal GoSubs -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -ClearCursors: - For counter = 0 to 8 - ClearSelect counter - Next counter -return - - -Initialize_System_Variables: - - // Save these for restoration later - SaveDict = @DICT - SaveID = @ID - SaveRecord = @RECORD - OrigFileError = @FILE.ERROR - - // Now make sure @DICT, ID, and @RECORD are populated - CurrentDictName = '' - If @DICT then - DictHandle = @DICT<1, 2> - Locate DictHandle in @TABLES(5) Using @FM Setting fPos then - CurrentDictName = Field(@TABLES(0), @FM, fPos, 1) - end - end - - If CurrentDictName NE DictName then - Open DictName to @DICT else Status = 'Unable to initialize @DICT' - end - - @ID = KeyID - If Record else - // Record might not have been passed in. Read the record from the database table just to make sure. - @FILE.ERROR = '' - Open TableName to hTable then - FullFSList = hTable[1, 'F' : @VM] - BFS = FullFSList[-1, 'B' : @SVM] - LastHandle = hTable[-1, 'B' : \0D\] - FileHandle = \0D\ : LastHandle[1, @VM] - - Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus) - end - end - @RECORD = Record - -return - - -Restore_System_Variables: - - Transfer SaveDict to @DICT - Transfer SaveID to @ID - Transfer SaveRecord to @RECORD - @FILE.ERROR = OrigFileError - -return - - +Function REACT_ITEM_ACTIONS(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10) +/*********************************************************************************************************************** + + 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 Infineon. + + Name : React_Item_Actions + + Description : Handles calculated columns and MFS calls for the current table. + + Notes : This function uses @ID, @RECORD, and @DICT to make sure {ColumnName} references work correctly. + If called from outside of a calculated column these will need to be set and restored. + + Parameters : + Action [in] -- Name of the action to be taken + CalcColName [in] -- Name of the calculated column that needs to be processed. Normally this should only be + populated when the CalcField action is being used. + FSList [in] -- The list of MFSs and the BFS name for the current file or volume. This is an @SVM + delimited array, with the current MFS name as the first value in the array, and the BFS + name as the last value. Normally set by a calling MFS. + Handle [in] -- The file handle of the file or media map being accessed. Note, this does contain the + entire handle structure that the Basic+ Open statement would provide. Normally set by a + calling MFS. + Name [in] -- The name (key) of the record or file being accessed. Normally set by a calling MFS. + FMC [in] -- Various functions. Normally set by a calling MFS. + Record [in] -- The entire record (for record-oriented functions) or a newly-created handle (for + "get handle" functions). Normally set by a calling MFS. + Status [in/out] -- Indicator of the success or failure of an action. Normally set by the calling MFS but + for some actions can be set by the action handler to indicate failure. + OrigRecord [in] -- Original content of the record being processed by the current action. This is + automatically being assigned by the WRITE_RECORD and DELETE_RECORD actions within + BASE_MFS. + Param1-10 [in/out] -- Additional request parameter holders + ActionFlow [out] -- Used to control the action chain (see the ACTION_SETUP insert for more information.) + Can also be used to return a special value, such as the results of the CalcField + method. + + History : (Date, Initials, Notes) + 05/12/25 djs Updated WRITE_PRE action to update the CURR_STATUS_STATIC field if the retire date changes. + +***********************************************************************************************************************/ + +#pragma precomp SRP_PreCompiler + +$Insert ACTION_SETUP +$Insert APP_INSERTS +$Insert FILE.SYSTEM.EQUATES +$Insert REACT_ITEM_EQUATES + +Declare function obj_React_Item +Declare subroutine Error_Services + +If KeyID then GoSub Initialize_System_Variables + +Begin Case + + Case Action _EQC 'CalculateColumn' ; GoSub CalculateColumn + Case Action _EQC 'READ_RECORD_PRE' ; GoSub READ_RECORD_PRE + Case Action _EQC 'READ_RECORD' ; GoSub READ_RECORD + Case Action _EQC 'READONLY_RECORD_PRE' ; GoSub READONLY_RECORD_PRE + Case Action _EQC 'READONLY_RECORD' ; GoSub READONLY_RECORD + Case Action _EQC 'WRITE_RECORD_PRE' ; GoSub WRITE_RECORD_PRE + Case Action _EQC 'WRITE_RECORD' ; GoSub WRITE_RECORD + Case Action _EQC 'DELETE_RECORD_PRE' ; GoSub DELETE_RECORD_PRE + Case Action _EQC 'DELETE_RECORD' ; GoSub DELETE_RECORD + Case Otherwise$ ; Status = 'Invalid Action' + +End Case + +If KeyID then GoSub Restore_System_Variables + +If Assigned(ActionFlow) else ActionFlow = ACTION_CONTINUE$ + +Return ActionFlow + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Calculated Columns +// +// The typical structure of a calculated column will look like this: +// +// Declare function Database_Services +// +// @ANS = Database_Services('CalculateColumn') +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +CalculateColumn: + + // Make sure the ActionFlow return variable is cleared in case nothing is calculated. + ActionFlow = '' + +return + +// ----- MFS calls ----------------------------------------------------------------------------------------------------- + +READ_RECORD_PRE: + // In order to stop a record from being read in this action these lines of code must be used: + // + // OrigFileError = 100 : @FM : KeyID + // Status = 0 + // Record = '' + // ActionFlow = ACTION_STOP$ +return + + +READ_RECORD: + + // In order to stop a record from being read in this action these lines of code must be used: + // + // OrigFileError = 100 : @FM : KeyID + // Status = 0 + // Record = '' + +return + + +READONLY_RECORD_PRE: + // In order to stop a record from being read in this action these lines of code must be used: + // + // OrigFileError = 100 : @FM : KeyID + // Status = 0 + // Record = '' + // ActionFlow = ACTION_STOP$ +return + + +READONLY_RECORD: + // In order to stop a record from being read in this action these lines of code must be used: + // + // OrigFileError = 100 : @FM : KeyID + // Status = 0 + // Record = '' +return + + +WRITE_RECORD_PRE: + + ErrMsg = '' + + // Req'd parameter checks + ItemType = {RI_TYPE} + +* If ItemType EQ '' then ErrMsg := 'Item Type was not specified. ' + + If ErrMsg NE '' then + Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg) + OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg + Status = 0 + Record = '' + ActionFlow = ACTION_STOP$ + end else + OrigRetireDt = OrigRecord + NewRetireDt = Record + OrigNotes = OrigRecord + NewNotes = Record + If ( (OrigRetireDt NE NewRetireDt) or (OrigNotes NE NewNotes) ) then + CurrStatus = obj_React_Item('CurrStatus', Name:@RM:Record) + Record = CurrStatus + SaveRecord = Record + end + end + +return + +WRITE_RECORD: +return + +DELETE_RECORD_PRE: +return + +DELETE_RECORD: +return + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Internal GoSubs +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ClearCursors: + + For counter = 0 to 8 + ClearSelect counter + Next counter + +return + + +Initialize_System_Variables: + + // Save these for restoration later + SaveDict = @DICT + SaveID = @ID + SaveRecord = @RECORD + OrigFileError = @FILE.ERROR + + // Now make sure @DICT, ID, and @RECORD are populated + CurrentDictName = '' + If @DICT then + DictHandle = @DICT<1, 2> + Locate DictHandle in @TABLES(5) Using @FM Setting fPos then + CurrentDictName = Field(@TABLES(0), @FM, fPos, 1) + end + end + + If CurrentDictName NE DictName then + Open DictName to @DICT else Status = 'Unable to initialize @DICT' + end + + @ID = KeyID + If Record else + // Record might not have been passed in. Read the record from the database table just to make sure. + @FILE.ERROR = '' + Open TableName to hTable then + FullFSList = hTable[1, 'F' : @VM] + BFS = FullFSList[-1, 'B' : @SVM] + LastHandle = hTable[-1, 'B' : \0D\] + FileHandle = \0D\ : LastHandle[1, @VM] + + Call @BFS(READO.RECORD, BFS, FileHandle, KeyID, FMC, Record, ReadOStatus) + end + end + @RECORD = Record + +return + + +Restore_System_Variables: + + Transfer SaveDict to @DICT + Transfer SaveID to @ID + Transfer SaveRecord to @RECORD + @FILE.ERROR = OrigFileError + +return + diff --git a/LSL2/STPROC/REACT_ITEM_SERVICES.txt b/LSL2/STPROC/REACT_ITEM_SERVICES.txt index 9befbf1..6b91867 100644 --- a/LSL2/STPROC/REACT_ITEM_SERVICES.txt +++ b/LSL2/STPROC/REACT_ITEM_SERVICES.txt @@ -20,62 +20,110 @@ Compile function React_Item_Services(@Service, @Params) 08/02/22 djs Original programmer. ***********************************************************************************************************************/ - #pragma precomp SRP_PreCompiler -$Insert LOGICAL $Insert APP_INSERTS +$Insert SERVICE_SETUP $Insert RLIST_EQUATES $Insert REACT_ITEM_EQUATES -Declare function Database_Services, Error_Services, SRP_JSON, NextKey -Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services -GoToService +Declare function Database_Services, Error_Services, SRP_JSON, NextKey, SRP_Date, obj_React_Item, SRP_Array +Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services, Update_Index -Return Response or "" +GoToService else + Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') +end -//----------------------------------------------------------------------------- -// SERVICES -//----------------------------------------------------------------------------- +Return Response else '' -Service GetAllReactItemKeys() - AllKeys = '' - RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '') - Done = False$ - Reactors = '' - Loop - Readnext keyId else Done = True$ - Until Done - AllKeys<1,-1> = keyId - Repeat - Response = AllKeys -end service +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Service Parameter Options +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +Options BOOLEAN = True$, False$ -Service GetReactItems(RIType, CurrStatus) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Services +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +Service GetReactItems(RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt=BOOLEAN) ErrorMsg = '' Response = '' - Swap ',' with @VM in RIType - Swap ',' with @VM in CurrStatus - - Open 'DICT.REACT_ITEM' to DictReactItem then - - SearchString = '' - If RIType NE '' then SearchString := 'RI_TYPE':@VM:RIType:@FM - If CurrStatus NE '' then SearchString := 'CURR_STATUS':@VM:CurrStatus:@FM - RIKeys = '' - Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, '', '') - ErrCode = '' - IF Get_Status(ErrCode) then - ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract. Error code ':ErrCode:'.' + If ( (RIType NE '') or (CurrStatus NE '') or (EntryDtStart NE '') or (EntryDtEnd NE '') or (RetireDtStart NE '') or (RetireDtEnd NE '') or (IncludeNullRetireDt NE '') ) then + If EntryDtStart NE '' and Not(Num(EntryDtStart)) then EntryDtStart = IConv(EntryDtStart, 'D') + If EntryDtEnd NE '' and Not(Num(EntryDtEnd)) then EntryDtEnd = IConv(EntryDtEnd, 'D') + If RetireDtStart NE '' and Not(Num(RetireDtStart)) then RetireDtStart = IConv(RetireDtStart, 'D') + If RetireDtEnd NE '' and Not(Num(RetireDtEnd)) then RetireDtEnd = IConv(RetireDtEnd, 'D') + Open 'DICT.REACT_ITEM' to DictReactItem then + SearchString = '' + If RIType NE '' then + Swap ',' with @VM in RIType + SearchString := 'RI_TYPE':@VM:RIType:@FM + end + Begin Case + Case ( (EntryDtStart NE '') and (EntryDtEnd NE '') ) + EntryDtStart = OConv(EntryDtStart - 1, 'D4/') + EntryDtEnd = OConv(EntryDtEnd + 1, 'D4/') + SearchString := 'ENTER_DT':@VM:EntryDtStart:'~':EntryDtEnd:@FM + Case (EntryDtStart NE '') + EntryDtStart = OConv(EntryDtStart, 'D4/') + SearchString := 'ENTER_DT':@VM:'>=':EntryDtStart:@FM + Case (EntryDtEnd NE '') + SearchString := 'ENTER_DT':@VM:'<=':EntryDtEnd:@FM + Case Otherwise$ + Null + End Case + Begin Case + Case ( (RetireDtStart NE '') and (RetireDtEnd NE '') ) + RetireDtStart = OConv(RetireDtStart - 1, 'D4/') + RetireDtEnd = OConv(RetireDtEnd + 1, 'D4/') + SearchString := 'RETIRE_DT':@VM:RetireDtStart:'~':RetireDtEnd + If IncludeNullRetireDt then SearchString := @VM:'' + SearchString := @FM + Case (RetireDtStart NE '') + RetireDtStart = OConv(RetireDtStart, 'D4/') + SearchString := 'RETIRE_DT':@VM:'>=':RetireDtStart + If IncludeNullRetireDt then SearchString := @VM:'' + SearchString := @FM + Case (RetireDtEnd NE '') + SearchString := 'RETIRE_DT':@VM:'<=':RetireDtEnd + If IncludeNullRetireDt then SearchString := @VM:'' + SearchString := @FM + Case IncludeNullRetireDt + SearchString := 'RETIRE_DT':@VM:'':@FM + Case Otherwise$ + Null + End Case + If CurrStatus NE '' then + Swap ',' with @VM in CurrStatus + SearchString := 'CURR_STATUS_STATIC':@VM:CurrStatus:@FM + end + Flag = '' + RIKeys = '' + Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, 'E', Flag) + If Flag EQ 0 then + EnterDtms = Xlate('REACT_ITEM', RIKeys, 'ENTER_DTM', 'X') + Array = RIKeys:@FM:EnterDtms + Array = SRP_Array('SortRows', Array, 'DN2', 'ARRAY', @FM, @VM) + Response = Array<1> + end else + ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract.' + end end else - Response = RIKeys + ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.' end - end else - ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.' + AllKeys = '' + RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '') + Done = False$ + Loop + Readnext KeyId else Done = True$ + Until Done + AllKeys<1, -1> = KeyId + Repeat + Response = AllKeys end - If ErrorMsg NE '' then Error_Services('Add', ErrorMsg) end @@ -155,7 +203,6 @@ Service ConvertRecordToJSON(KeyID, Record, ItemURL) Response = jsonRecord - end service @@ -326,11 +373,11 @@ Service GetReactItemTemplateJSON() Response = jsonRecord - end service Service CreateReactItem(Record) + ErrMsg = '' KeyID = '' If Record NE '' then @@ -355,6 +402,7 @@ Service CreateReactItem(Record) end service + Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL) jsonRecord = '' @@ -407,6 +455,32 @@ Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL) Response = jsonRecord end service + + +Service UpdateReactItemStatus(RINo) + + If RINo NE '' then + If RowExists('REACT_ITEM', RINo) then + RIRec = Database_Services('ReadDataRow', 'REACT_ITEM', RINo) + If Error_Services('NoError') then + Update_Index('REACT_ITEM_HIST', 'RI_NO', False$, True$) + ReactItemCurrStatus = obj_React_Item('CurrStatus', RINo:@RM:RIRec) + ReactItemCurrStatusStatic = RIRec + If ReactItemCurrStatus NE ReactItemCurrStatusStatic then + Open 'REACT_ITEM' to hTable then + WriteV ReactItemCurrStatus on hTable, RINo, REACT_ITEM_CURR_STATUS_STATIC$ else + Error_Services('Add', 'Error in ':Service:' service. Error writing CURR_STATUS_STATIC, ':ReactItemCurrStatus:', for REACT_ITEM ':RINo:'.') + end + end else + Error_Services('Add', 'Error in ':Service:' service. Error opening REACT_ITEM table for status update.') + end + end + end + end + end + +end service + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -419,6 +493,3 @@ ClearCursors: return - - - diff --git a/LSL2/STPROCINS/REACT_ITEM_EQUATES.txt b/LSL2/STPROCINS/REACT_ITEM_EQUATES.txt index 4f25db2..97473e6 100644 --- a/LSL2/STPROCINS/REACT_ITEM_EQUATES.txt +++ b/LSL2/STPROCINS/REACT_ITEM_EQUATES.txt @@ -6,25 +6,27 @@ compile insert REACT_ITEM_EQUATES ----------------------------------------*/ -Equ REACT_ITEM_RI_NO$ To 0 -Equ REACT_ITEM_DESC$ To 1 -Equ REACT_ITEM_ENTER_BY$ To 2 -Equ REACT_ITEM_ENTER_DTM$ To 3 -Equ REACT_ITEM_RETIRE_BY$ To 4 -Equ REACT_ITEM_RETIRE_DT$ To 5 -Equ REACT_ITEM_PART_TYPE$ To 6 -Equ REACT_ITEM_MFR_CD$ To 7 -Equ REACT_ITEM_MFR_PART_NO$ To 8 -Equ REACT_ITEM_MFR_PART_NO_REV$ To 9 -Equ REACT_ITEM_SERIAL_NO$ To 10 -Equ REACT_ITEM_RI_TYPE$ To 11 -Equ REACT_ITEM_SUSC_SIZE$ To 12 -Equ REACT_ITEM_PKT_QTY$ To 13 -Equ REACT_ITEM_PKT_SIZE$ To 14 -Equ REACT_ITEM_NOTES$ To 15 -Equ REACT_ITEM_PPLUS_RDS_NO$ To 16 -Equ REACT_ITEM_SERIAL$ To 17 -Equ REACT_ITEM_TUBE_GRADE$ To 18 -Equ REACT_ITEM_TUBE_PRESS$ To 19 -Equ REACT_ITEM_TUBE_STYLE$ To 20 -Equ REACT_ITEM_NEW_OR_REFURB$ To 21 +Equ REACT_ITEM_RI_NO$ To 0 +Equ REACT_ITEM_DESC$ To 1 +Equ REACT_ITEM_ENTER_BY$ To 2 +Equ REACT_ITEM_ENTER_DTM$ To 3 +Equ REACT_ITEM_RETIRE_BY$ To 4 +Equ REACT_ITEM_RETIRE_DT$ To 5 +Equ REACT_ITEM_PART_TYPE$ To 6 +Equ REACT_ITEM_MFR_CD$ To 7 +Equ REACT_ITEM_MFR_PART_NO$ To 8 +Equ REACT_ITEM_MFR_PART_NO_REV$ To 9 +Equ REACT_ITEM_SERIAL_NO$ To 10 +Equ REACT_ITEM_RI_TYPE$ To 11 +Equ REACT_ITEM_SUSC_SIZE$ To 12 +Equ REACT_ITEM_PKT_QTY$ To 13 +Equ REACT_ITEM_PKT_SIZE$ To 14 +Equ REACT_ITEM_NOTES$ To 15 +Equ REACT_ITEM_PPLUS_RDS_NO$ To 16 +Equ REACT_ITEM_SERIAL$ To 17 +Equ REACT_ITEM_TUBE_GRADE$ To 18 +Equ REACT_ITEM_TUBE_PRESS$ To 19 +Equ REACT_ITEM_TUBE_STYLE$ To 20 +Equ REACT_ITEM_NEW_OR_REFURB$ To 21 +Equ REACT_ITEM_CURR_STATUS_STATIC$ To 22 +