Merged PR 13809: ABORT/ALARM Nica Integration

## Background

Currently when a mode change sub mode is an ABORT/ALARM sub mode, operators must refer to an Excel spreadsheet matrix of which paper checklists to complete. This feature is part of an effort to further digitize work instructions and streamline the process of determining which checklists should be completed depending on the reason why a reactor alarmed / aborted.

## Description of Change

NICA_ORDERS_SERVICES (and the NICA Integration Service) now support an order type "ABORT_ALARM", which may be triggered when a reactor mode change occurs and the sub mode contains "ABORT/ALARM". Whether or not a NICA order is created depends on if the NICA checklist defined in OpenInsight applies to that reactor type (EpiPro is excluded for now). The "flows" of checklists to prescribe are defined in the REACT_PROB_CAT records for the ABORT/ALARM sub modes. Furthermore, NICA checklists defined in OpenInsight can now feature a property of whether or not they should _not_ be re-prescribed if a new NICA order is created of the same type while one is already active.

## Testing
- Local testing
- UAT by Jonathon Sperling

## Notes
In the previous NICA integration feature, Intrusive Maintenance, the MonA group resource name was stored in environment variables instead of in ENVIRONMENT_SERVICES. After further testing, this turned out to be an unviable option as environment variables that are picked up are from the user's client or the terminal server they are running OpenInsight from. Setting environment variables on all clients and the terminal servers is not practical, so this was removed in a previous PR.

Related work items: #175188
This commit is contained in:
Stieber Daniel (CSC FI SPS MESLEO) 2025-03-26 22:03:25 +01:00
parent 0716e25303
commit 6050b346a5
11 changed files with 352 additions and 150 deletions

View File

@ -231,3 +231,4 @@ Restore_System_Variables:
return return

View File

@ -27,11 +27,14 @@ $Insert SERVICE_SETUP
$Insert REACTOR_EQUATES $Insert REACTOR_EQUATES
$Insert REACTOR_LOG_EQUATES $Insert REACTOR_LOG_EQUATES
$Insert NICA_ORDERS_EQUATES $Insert NICA_ORDERS_EQUATES
$Insert NICA_CHECKLISTS_EQUATES
$Insert NICA_ORDERS_CHECKLISTS_EQUATES $Insert NICA_ORDERS_CHECKLISTS_EQUATES
$Insert RLIST_EQUATES $Insert RLIST_EQUATES
Equ SECONDS_IN_DAY$ to 86400
Declare function Environment_Services, Database_Services, Error_Services, Logging_Services, Nica_Orders_Services Declare function Environment_Services, Database_Services, Error_Services, Logging_Services, Nica_Orders_Services
Declare function Httpclient_Services, SRP_JSON, Reactor_Services, Reactor_Log_Services, SRP_Array Declare function Httpclient_Services, SRP_JSON, Reactor_Services, Reactor_Log_Services, SRP_Array, Datetime
Declare subroutine Error_Services, Btree.Extract, Database_Services, Logging_Services, Nica_Orders_Services, Delay Declare subroutine Error_Services, Btree.Extract, Database_Services, Logging_Services, Nica_Orders_Services, Delay
Declare subroutine Httpclient_Services, SRP_JSON, Mona_Services, Service_Services, Extract_SI_Keys Declare subroutine Httpclient_Services, SRP_JSON, Mona_Services, Service_Services, Extract_SI_Keys
@ -49,7 +52,7 @@ Return Response or ""
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Options BOOLEAN = True$, False$ Options BOOLEAN = True$, False$
Options ENTITY_TYPES = 'REACTOR','REACTOR_LOG' Options ENTITY_TYPES = 'REACTOR','REACTOR_LOG'
Options ORDER_TYPES = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM' Options ORDER_TYPES = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM','ABORT_ALARM'
Options ORDER_STATUSES = 'new','creating','not-started','in-progress','cancelled','done' Options ORDER_STATUSES = 'new','creating','not-started','in-progress','cancelled','done'
Options REACTOR_TYPES = 'ASM','ASM+','HTR','EPP' Options REACTOR_TYPES = 'ASM','ASM+','HTR','EPP'
@ -125,9 +128,10 @@ Service UpdateNicaFlags()
Open 'REACTOR' to hReactor then Open 'REACTOR' to hReactor then
Open 'REACTOR_LOG' to hReactorLog then Open 'REACTOR_LOG' to hReactorLog then
For each ReactNo in ReactNos using @FM For each ReactNo in ReactNos using @FM
ProveInActive = Reactor_Services('GetProveInActive', ReactNo) ProveInActive = Reactor_Services('GetProveInActive', ReactNo)
HgCVChecklistActive = (Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'IQS_HGCV_ALARM') NE '') HgCVChecklistActive = (Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'IQS_HGCV_ALARM') NE '')
IntrMaintChecklistActive = (Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'INTRUSIVE_MAINT') NE '') IntrMaintChecklistActive = (Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'INTRUSIVE_MAINT') NE '')
AbortAlarmChecklistActive = (Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM') NE '')
Open 'REACTOR' to hReactor then Open 'REACTOR' to hReactor then
ReadV CacheProveInActive from hReactor, ReactNo, REACTOR_PROVE_IN_ACTIVE$ then ReadV CacheProveInActive from hReactor, ReactNo, REACTOR_PROVE_IN_ACTIVE$ then
If CacheProveInActive NE ProveInActive then If CacheProveInActive NE ProveInActive then
@ -153,6 +157,14 @@ Service UpdateNicaFlags()
end end
end end
end end
ReadV CacheAbortAlarmChecklistActive from hReactor, ReactNo, REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$ then
If CacheAbortAlarmChecklistActive NE AbortAlarmChecklistActive then
Lock hReactor, ReactNo then
WriteV AbortAlarmChecklistActive on hReactor, ReactNo, REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$ else Null
Unlock hReactor, ReactNo else Null
end
end
end
end end
CurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', ReactNo, 'REACT_MODE_KEY_IDS', 'X') CurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', ReactNo, 'REACT_MODE_KEY_IDS', 'X')
CurrModeKey = CurrModeKey[-1, 'B':@VM] CurrModeKey = CurrModeKey[-1, 'B':@VM]
@ -182,12 +194,12 @@ Service GetActiveOrders(EntityType=ENTITY_TYPES, EntityId, OrderTypes=ORDER_TYPE
end service end service
Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows) Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds)
ErrorMsg = '' ErrorMsg = ''
EntityTypes = 'REACTOR,REACTOR_LOG' EntityTypes = 'REACTOR,REACTOR_LOG'
OrderTypes = 'INTRUSIVE_MAINT,CHANGEOVER,INITIATE_IDLE,IDLE,ASM_HTR_TUBE_CHANGE,ASM_HTR_ANNUAL_PM,' OrderTypes = 'INTRUSIVE_MAINT,CHANGEOVER,INITIATE_IDLE,IDLE,ASM_HTR_TUBE_CHANGE,ASM_HTR_ANNUAL_PM,'
OrderTypes := 'ASM_HTR_SEMIANNUAL_PM,ASM_HTR_FIVE_AND_TEN_YEAR_PM,IQS_HGCV_ALARM' OrderTypes := 'ASM_HTR_SEMIANNUAL_PM,ASM_HTR_FIVE_AND_TEN_YEAR_PM,IQS_HGCV_ALARM,ABORT_ALARM'
Machine = Environment_Services('GetServer') Machine = Environment_Services('GetServer')
Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log' Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log'
@ -198,7 +210,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$) objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$)
Prod = Environment_Services('IsProd') Prod = Environment_Services('IsProd')
IgnoreCertErrors = Not(Prod) IgnoreCertErrors = Not(Prod)
If ( (EntityType NE '') and (EntityID NE '') and (OrderType NE '') ) then If ( (EntityType NE '') and (EntityID NE '') and (OrderType NE '') ) then
@ -220,7 +232,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType) CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
OrderTypeAlreadyActive = (CurrActiveOrders NE '') OrderTypeAlreadyActive = (CurrActiveOrders NE '')
If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') ) then If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') or (OrderType EQ 'ABORT_ALARM') ) then
Begin Case Begin Case
Case EntityType EQ 'REACTOR' Case EntityType EQ 'REACTOR'
@ -233,7 +245,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
// Build request // Build request
Body = '' Body = ''
NewSortedChecklistIds = '' NewSortedChecklistIds = ''
If OrderType NE 'INTRUSIVE_MAINT' then If ( (OrderType NE 'INTRUSIVE_MAINT') and (OrderType NE 'ABORT_ALARM') ) then
// Original API endpoint just uses query params, no body. // Original API endpoint just uses query params, no body.
NicaURL = Environment_Services("GetProveInApiUrl"):'/checklists?' NicaURL = Environment_Services("GetProveInApiUrl"):'/checklists?'
NicaURL := 'checklistType=':OrderType NicaURL := 'checklistType=':OrderType
@ -242,46 +254,71 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
// New API endpoint uses JSON body instead of query params. // New API endpoint uses JSON body instead of query params.
NicaURL = Environment_Services("GetProveInApiUrl"):'/order' NicaURL = Environment_Services("GetProveInApiUrl"):'/order'
If OrderFlows NE '' then If OrderFlows NE '' then
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X') If ChecklistIds NE '' then
NewChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', OrderFlows, OrderType, ReactorType) NewChecklistIds = ChecklistIds
// Get incomplete checklists and add them to the new order If CurrActiveOrders NE '' then
If CurrActiveOrders NE '' then IncompleteChecklistIds = ''
IncompleteChecklistIds = '' CompleteChecklistIds = ''
Open 'DICT.NICA_ORDERS_CHECKLISTS' to hDict then Open 'DICT.NICA_ORDERS_CHECKLISTS' to hDict then
For each ActiveNicaOrdersId in CurrActiveOrders using @VM For each ActiveNicaOrdersId in CurrActiveOrders using @VM
IncompleteOrderChecklistIds = '' // Get incomplete checklists so we can add them to the new order
Flag = '' IncompleteOrderChecklistIds = ''
Query = 'NICA_ORDERS_ID':@VM:ActiveNicaOrdersId:@FM Flag = ''
Query := 'IS_COMPLETE':@VM:False$:@FM Query = 'NICA_ORDERS_ID':@VM:ActiveNicaOrdersId:@FM
Btree.Extract(Query, 'NICA_ORDERS_CHECKLISTS', hDict, IncompleteOrderChecklistIds, 'E', Flag) Query := 'IS_COMPLETE':@VM:False$:@FM
If Flag EQ 0 then Btree.Extract(Query, 'NICA_ORDERS_CHECKLISTS', hDict, IncompleteOrderChecklistIds, 'E', Flag)
IncompleteOrderChecklistIdsRot = SRP_Array('Rotate', IncompleteOrderChecklistIds, @VM, '*') If Flag EQ 0 then
PrevChecklistIds = IncompleteOrderChecklistIdsRot<0, 2> IncompleteOrderChecklistIdsRot = SRP_Array('Rotate', IncompleteOrderChecklistIds, @VM, '*')
Swap '*' with @VM in PrevChecklistIds PrevChecklistIds = IncompleteOrderChecklistIdsRot<0, 2>
IncompleteChecklistIds<0, -1> = PrevChecklistIds Swap '*' with @VM in PrevChecklistIds
end IncompleteChecklistIds<0, -1> = PrevChecklistIds
Next ActiveNicaOrdersId end
// Build a list of completed checklists which should not be prescribed again in the replacement NICA order
CompleteOrderChecklistIds = ''
Flag = ''
Query = 'NICA_ORDERS_ID':@VM:ActiveNicaOrdersId:@FM
Query := 'IS_COMPLETE':@VM:True$:@FM
Btree.Extract(Query, 'NICA_ORDERS_CHECKLISTS', hDict, CompleteOrderChecklistIds, 'E', Flag)
If Flag EQ 0 then
CompleteOrderChecklistIdsRot = SRP_Array('Rotate', CompleteOrderChecklistIds, @VM, '*')
CompChecklistIds = CompleteOrderChecklistIdsRot<0, 2>
Swap '*' with @VM in CompChecklistIds
end
For each CompChecklistId in CompChecklistIds using @VM
RemoveIfComp = Xlate('NICA_CHECKLISTS', CompChecklistId, NICA_CHECKLISTS.REMOVE_IF_COMPLETE$, 'X')
If RemoveIfComp then
Locate CompChecklistId in NewChecklistIds using @VM setting vPos then
NewChecklistIds = Delete(NewChecklistIds, 0, vPos, 0)
end
end
Next CompChecklistId
Next ActiveNicaOrdersId
end
NewChecklistIds<0, -1> = IncompleteChecklistIds
end
NewChecklistIds = SRP_Array('Clean', NewChecklistIds, 'TrimAndMakeUnique', @VM)
NewChecklistPriorities = Xlate('NICA_CHECKLISTS', NewChecklistIds, 'PRIORITY', 'X')
ChecklistArray = NewChecklistIds:@FM:NewChecklistPriorities
ChecklistArray = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
NewSortedChecklistIds = ChecklistArray<1>
JsonRequest = ''
objJson = ''
If SRP_JSON(objJson, 'New', 'Object') then
SRP_JSON(objJson, 'SetValue', 'orderType', OrderType)
SRP_JSON(objJson, 'SetValue', 'reactorNumber', ReactNo)
NewChecklistInstIds = Xlate('NICA_CHECKLISTS', NewSortedChecklistIds, 'NICA_BASE_INSTRUCTION_ID', 'X')
SRP_JSON(objJson, 'SetValueArray', 'baseInstructionIds', NewChecklistInstIds, @VM)
Body = SRP_JSON(objJson, 'Stringify', 'Styled')
Convert @FM to '' in Body
SRP_JSON(objJson, 'Release')
end else
ErrorMsg = 'Error in ':Service:' service. Failed to initialize JSON object for request body.'
end end
NewChecklistIds<0, -1> = IncompleteChecklistIds
end
NewChecklistIds = SRP_Array('Clean', NewChecklistIds, 'TrimAndMakeUnique', @VM)
NewChecklistPriorities = Xlate('NICA_CHECKLISTS', NewChecklistIds, 'PRIORITY', 'X')
ChecklistArray = NewChecklistIds:@FM:NewChecklistPriorities
ChecklistArray = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
NewSortedChecklistIds = ChecklistArray<1>
JsonRequest = ''
objJson = ''
If SRP_JSON(objJson, 'New', 'Object') then
SRP_JSON(objJson, 'SetValue', 'orderType', OrderType)
SRP_JSON(objJson, 'SetValue', 'reactorNumber', ReactNo)
NewChecklistInstIds = Xlate('NICA_CHECKLISTS', NewSortedChecklistIds, 'NICA_BASE_INSTRUCTION_ID', 'X')
SRP_JSON(objJson, 'SetValueArray', 'baseInstructionIds', NewChecklistInstIds, @VM)
Body = SRP_JSON(objJson, 'Stringify', 'Styled')
Convert @FM to '' in Body
SRP_JSON(objJson, 'Release')
end else end else
ErrorMsg = 'Error in ':Service:' service. Failed to initialize JSON object for request body.' ErrorMsg = 'Error in ':Service:' service. Null ChecklistIds variable passed in.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Null Orderflows variable passed in.' ErrorMsg = 'Error in ':Service:' service. Null Orderflows variable passed in.'
@ -314,24 +351,30 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id') OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id')
If OrderId NE '' then If OrderId NE '' then
Convert @Lower.Case to @Upper.Case in OrderId Convert @Lower.Case to @Upper.Case in OrderId
ReqDtm = SRP_JSON(ObjResponseJson, 'GetValue', 'requestedDate')
ReqDate = IConv(ReqDtm[1, 'FT'], 'DJ')
ReqTime = IConv(ReqDtm[Col2() + 1, 'F.'], 'MT')
CreatedDtm = ReqDate + (ReqTime/SECONDS_IN_DAY$)
NicaOrderRec = '' NicaOrderRec = ''
NicaOrderRec<NICA_ORDERS.ORDER_TYPE$> = OrderType NicaOrderRec<NICA_ORDERS.ORDER_TYPE$> = OrderType
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state') NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
NicaOrderRec<NICA_ORDERS.ENTITY_TYPE$> = EntityType NicaOrderRec<NICA_ORDERS.ENTITY_TYPE$> = EntityType
NicaOrderRec<NICA_ORDERS.ENTITY_ID$> = EntityID NicaOrderRec<NICA_ORDERS.ENTITY_ID$> = EntityID
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete') NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
NicaOrderRec<NICA_ORDERS.CREATED_DTM$> = CreatedDtm
If NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> EQ False$ then If NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> EQ False$ then
NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'progressPercentage') NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'progressPercentage')
end else end else
NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = 100 NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = 100
end end
NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$> = OrderFlows
LogNicaOrderRec = NicaOrderRec NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel
LogNicaOrderRec = NicaOrderRec
Swap @FM with ',' in LogNicaOrderRec Swap @FM with ',' in LogNicaOrderRec
LogData = '' LogData = ''
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = Machine LogData<2> = Machine
LogData<3> = 'Nica order record to write: ':LogNicaOrderRec LogData<3> = 'Nica order record to write: ':LogNicaOrderRec
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$) Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$)
@ -342,8 +385,8 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.' ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.'
end end
end end
end end
If OrderType _EQC 'INTRUSIVE_MAINT' then If ( (OrderType _EQC 'INTRUSIVE_MAINT') or (OrderType _EQC 'ABORT_ALARM') ) then
// Create NICA_ORDERS_CHECKLISTS child records for each checklist // Create NICA_ORDERS_CHECKLISTS child records for each checklist
If NewSortedChecklistIds NE '' then If NewSortedChecklistIds NE '' then
For each ChecklistId in NewSortedChecklistIds using @VM For each ChecklistId in NewSortedChecklistIds using @VM
@ -394,10 +437,10 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
end else end else
ErrorMsg = 'Error encountered when attempting to create Nica in order for reactor ':ReactNo:' of type ':OrderType ErrorMsg = 'Error encountered when attempting to create Nica in order for reactor ':ReactNo:' of type ':OrderType
Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical') Mona_Services('SendBufferedStatus', MonAResource, StatusName, 'Critical')
end end
end else
ErrorMsg = 'Error encountered when attempting to create Nica order for entity ':EntityType:' ' :EntityID:' of type ':OrderType:'. Active order already exists.'
end end
end else
ErrorMsg = 'Error encountered when attempting to create Nica order for entity ':EntityType:' ' :EntityID:' of type ':OrderType:'. Active order already exists.'
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Null EntityType, EntityID, or OrderType passed in.' ErrorMsg = 'Error in ':Service:' service. Null EntityType, EntityID, or OrderType passed in.'
@ -492,9 +535,11 @@ Service CancelOrder(OrderId)
If HttpResponseJson NE '' then If HttpResponseJson NE '' then
ObjResponseJson = '' ObjResponseJson = ''
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate') IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate')
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state') NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete') NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
CloseDtm = Datetime()
NicaOrderRec<NICA_ORDERS.CLOSED_DTM$> = CloseDtm
If IsComplete EQ False$ then If IsComplete EQ False$ then
NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'progressPercentage') NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'progressPercentage')
end else end else
@ -509,7 +554,18 @@ Service CancelOrder(OrderId)
ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.' ErrorMsg = 'Error in ':Service:' service. Error setting IDLE_STARTUP_REQUIRED flag in REACTOR record.'
end end
end end
end end
If (OrderType EQ 'ABORT_ALARM') then
ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
AbortAlarmOrderActive = (ActiveAbortAlarmOrders NE '')
If (AbortAlarmOrderActive EQ False$) then
Open 'REACTOR' to hReactor then
WriteV True$ on hReactor, ReactNo, REACTOR_ABORT_ALARM_COMPLETE$ else
ErrorMsg = 'Error in ':Service:' service. Error setting ABORT_ALARM_COMPLETE flag in REACTOR record.'
end
end
end
end
If ( (Response EQ True$) or (Response EQ False$) ) then IsSuccessful = True$ If ( (Response EQ True$) or (Response EQ False$) ) then IsSuccessful = True$
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
@ -645,9 +701,15 @@ Service GetOrderStatusUpdate(OrderId)
If HttpResponseJson NE '' then If HttpResponseJson NE '' then
ObjResponseJson = '' ObjResponseJson = ''
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete') IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state') State = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = State
NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = IsComplete NicaOrderRec<NICA_ORDERS.IS_COMPLETE$> = IsComplete
CloseDtm = NicaOrderRec<NICA_ORDERS.CLOSED_DTM$>
If ( (CloseDtm EQ '' ) and ( (State _EQC 'done') or (State _EQC 'cancelled') ) ) then
CloseDtm = Datetime()
NicaOrderRec<NICA_ORDERS.CLOSED_DTM$> = CloseDtm
end
If IsComplete EQ False$ then If IsComplete EQ False$ then
NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'progressPercentage') NicaOrderRec<NICA_ORDERS.PROGRESS_PERCENTAGE$> = SRP_JSON(ObjResponseJson, 'GetValue', 'progressPercentage')
end else end else
@ -656,7 +718,7 @@ Service GetOrderStatusUpdate(OrderId)
Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$) Database_Services('WriteDataRow', 'NICA_ORDERS', OrderId, NicaOrderRec, True$, False$, False$)
If Error_Services('NoError') then If Error_Services('NoError') then
OrderType = NicaOrderRec<NICA_ORDERS.ORDER_TYPE$> OrderType = NicaOrderRec<NICA_ORDERS.ORDER_TYPE$>
If (OrderType _EQC 'INTRUSIVE_MAINT') then If ( (OrderType _EQC 'INTRUSIVE_MAINT') or (OrderType _EQC 'ABORT_ALARM') ) then
// Update NICA_ORDERS_CHECKLISTS records (documents) // Update NICA_ORDERS_CHECKLISTS records (documents)
Open 'NICA_ORDERS_CHECKLISTS' to hNicaOrdersChecklists then Open 'NICA_ORDERS_CHECKLISTS' to hNicaOrdersChecklists then
// Parse documents array for their isComplete flag // Parse documents array for their isComplete flag
@ -704,7 +766,17 @@ Service GetOrderStatusUpdate(OrderId)
ErrorMsg = 'Error in ':Service:' service. Error opening NICA_ORDERS_CHECKLISTS table.' ErrorMsg = 'Error in ':Service:' service. Error opening NICA_ORDERS_CHECKLISTS table.'
end end
end end
If ( (OrderType _EQC 'ABORT_ALARM') and ( (State _EQC 'done') or (State _EQC 'cancelled') ) ) then
ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
AbortAlarmOrderActive = (ActiveAbortAlarmOrders NE '')
If (AbortAlarmOrderActive EQ False$) then
Open 'REACTOR' to hReactor then
WriteV True$ on hReactor, ReactNo, REACTOR_ABORT_ALARM_COMPLETE$ else
ErrorMsg = 'Error in ':Service:' service. Error setting ABORT_ALARM_COMPLETE flag in REACTOR record.'
end
end
end
end
If IsComplete EQ True$ then If IsComplete EQ True$ then
If ( (OrderType _EQC 'IDLE') and (EntityType _EQC 'REACTOR') ) then If ( (OrderType _EQC 'IDLE') and (EntityType _EQC 'REACTOR') ) then
Open 'REACTOR' to hReactor then Open 'REACTOR' to hReactor then

View File

@ -82,7 +82,7 @@ end service
Service SignReactorLog(ReactorLogID, UserID) Service SignReactorLog(ReactorLogID, UserID)
Flag = '' Flag = ''
ErrCode = '' ErrCode = ''
ErrorMsg = '' ErrorMsg = ''
@ -208,14 +208,18 @@ Service SignReactorLog(ReactorLogID, UserID)
If ( (IntrMaintFeatureFlag EQ True$) and (CCnt GT 0) ) then If ( (IntrMaintFeatureFlag EQ True$) and (CCnt GT 0) ) then
IntrMaintFlowCodes = React_Servs_Services('GetIntrMaintFlowIds', CurServices) IntrMaintFlowCodes = React_Servs_Services('GetIntrMaintFlowIds', CurServices)
If IntrMaintFlowCodes NE '' then If IntrMaintFlowCodes NE '' then
// Create INTRUSIVE_MAINT NICA order ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactorNo, 'INTRUSIVE_MAINT', IntrMaintFlowCodes) ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', IntrMaintFlowCodes, 'INTRUSIVE_MAINT', ReactorType)
If Error_Services('NoError') then If ChecklistIds NE '' then
LogFlows = IntrMaintFlowCodes // Create INTRUSIVE_MAINT NICA order
Convert @VM to ', ' in LogFlows Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactorNo, 'INTRUSIVE_MAINT', IntrMaintFlowCodes, '', ChecklistIds)
Reactor_Log_Services('AddComment', ReactorNo, 'Intrusive Maintenance initiated for flow(s) ':LogFlows:'.', UserID) If Error_Services('NoError') then
end else LogFlows = IntrMaintFlowCodes
ErrorMsg = Error_Services('GetMessage') Convert @VM to ', ' in LogFlows
Reactor_Log_Services('AddComment', ReactorNo, 'Intrusive Maintenance initiated for flow(s) ':LogFlows:'.', UserID)
end else
ErrorMsg = Error_Services('GetMessage')
end
end end
end end
end end

View File

@ -53,6 +53,8 @@ $Insert REACTOR_DAILY_UPTIME_EQUATES
$Insert REACT_LL_EQUATES $Insert REACT_LL_EQUATES
$Insert IQS_VIOL_DATA_EQUATES $Insert IQS_VIOL_DATA_EQUATES
$Insert FEATURE_FLAGS_EQUATES $Insert FEATURE_FLAGS_EQUATES
$Insert REACT_PROB_CAT_EQUATES
$Insert NICA_ORDERS_EQUATES
Equ WOCust$ to 2 Equ WOCust$ to 2
@ -66,13 +68,13 @@ Equ ENG$ to 5
Declare subroutine Error_Services, Reactor_Services, Memory_Services, RList, Database_Services, SRP_JSON Declare subroutine Error_Services, Reactor_Services, Memory_Services, RList, Database_Services, SRP_JSON
Declare subroutine Excel_Services, Schedule_Services, Logging_Services, Set_Status, obj_React_Status, Errmsg Declare subroutine Excel_Services, Schedule_Services, Logging_Services, Set_Status, obj_React_Status, Errmsg
Declare subroutine Obj_Notes, Btree.Extract, SRP_Fastarray, Delay, Mona_Services, SRP_List, Msg, Rds_Services Declare subroutine Obj_Notes, Btree.Extract, SRP_Fastarray, Delay, Mona_Services, SRP_List, Msg, Rds_Services
Declare subroutine React_Assign_Conv, Nica_Orders_Services, obj_React_Mode Declare subroutine React_Assign_Conv, Nica_Orders_Services, obj_React_Mode, Reactor_Log_Services
Declare function SRP_Array, Reactor_Services, Memory_Services, Database_Services, SRP_Sort_Array, Excel_Services Declare function SRP_Array, Reactor_Services, Memory_Services, Database_Services, SRP_Sort_Array, Excel_Services
Declare function SRP_Math, SRP_Hash, SRP_JSON, Epi_Part_Services, Schedule_Services, Date_Services, Environment_Services Declare function SRP_Math, SRP_Hash, SRP_JSON, Epi_Part_Services, Schedule_Services, Date_Services, Environment_Services
Declare function Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage Declare function Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage
Declare function Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services Declare function Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services
Declare function SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services Declare function SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services
Declare function Nica_Orders_Services Declare function Nica_Orders_Services, Max
// Report paths for various performance report services. // Report paths for various performance report services.
TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\' TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
@ -1873,7 +1875,7 @@ end service
Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, ForceModeChange) Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, ForceModeChange)
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorModeChg' LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorModeChg'
LogDate = Oconv(Date(), 'D4/') LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS') LogTime = Oconv(Time(), 'MTS')
@ -1885,13 +1887,13 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
ErrorMsg = '' ErrorMsg = ''
IF ForceModeChange NE True$ then ForceModeChange = False$ IF ForceModeChange NE True$ then ForceModeChange = False$
If ( (UserID NE '') and (ReactNo NE '') and (Mode NE '') and (ModeSubCat NE '')) then If ( (UserID NE '') and (ReactNo NE '') and (Mode NE '') and (ModeSubCat NE '')) then
CurTime = Time() CurTime = Time()
CurDate = Date() CurDate = Date()
NGPrevModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', ReactNo, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X')<1, 1> NGPrevModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', ReactNo, REACTOR_CHILD_KEY_IDS_REACT_MODE_KEY_IDS$, 'X')<1, 1>
PrevModeRec = Reactor_Services('GetReactCurrModeRec', ReactNo) PrevModeRec = Reactor_Services('GetReactCurrModeRec', ReactNo)
SelectedModeRec = Database_Services('ReadDataRow', 'REACTOR_MODES', Mode) SelectedModeRec = Database_Services('ReadDataRow', 'REACTOR_MODES', Mode)
SelE10State = SelectedModeRec<REACTOR_MODES_E10_STATE$> SelE10State = SelectedModeRec<REACTOR_MODES_E10_STATE$>
RlComment = ''
CommentException = False$ CommentException = False$
Begin Case Begin Case
@ -1990,6 +1992,53 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
end end
end end
If ErrorMsg EQ '' then
AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM', FEATURE_FLAGS.ENABLED$, 'X')
If AbortAlarmFeatureFlag EQ True$ then
ModeSubCatFlowId = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_FLOW_ID$, 'X')
ModeSubCatRespLvl = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X')
AbortAlarmComp = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X')
ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
AbortAlarmOrderActive = (ActiveAbortAlarmOrders NE '')
Begin Case
Case ( AbortAlarmOrderActive and (SelE10State _EQC 'Productive') )
ErrorMsg = "An ABORT/ALARM Checklist is active for this reactor and must be completed or overridden in order to change to a productive state."
Case ( AbortAlarmOrderActive and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
// If there is an active ABORT/ALARM NICA order, then we need to check if the new sub mode is different than the sub mode entered when the ABORT/ALARM
// NICA order was created and is of a higher response level or the new mode is WAITING_FOR_OPERATOR and the sub mode has changed. This means the maintenance
// team deemed the true ABORT/ALARM root cause was different than the cause the operators selected.
ActiveAbortAlarmFlowIds = Xlate('NICA_ORDERS', ActiveAbortAlarmOrders, NICA_ORDERS.ORDER_FLOW_IDS$, 'X')
ActiveAbortAlarmRespLvls = Xlate('NICA_ORDERS', ActiveAbortAlarmOrders, NICA_ORDERS.ORDER_RESPONSE_LEVEL$, 'X')
MaxActiveRespLvl = ''
For each ActiveAbortAlarmRespLvl in ActiveAbortAlarmRespLvls using @VM
MaxActiveRespLvl = Max(MaxActiveRespLvl, ActiveAbortAlarmRespLvl)
Next ActiveAbortAlarmRespLvl
If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) |
or ( (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) and (ModeSubCatRespLvl GT MaxActiveRespLvl) ) then
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
If ChecklistIds NE '' then
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
end
end
Case ( Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
ReactorType = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
If ChecklistIds NE '' then
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
end
Case Otherwise$
// Don't create an ABORT/ALARM NICA order
Null
End Case
end
end
If ErrorMsg EQ '' then If ErrorMsg EQ '' then
If Len(Mode) GT 10 and Mode[1, 10] EQ 'CHANGEOVER' then If Len(Mode) GT 10 and Mode[1, 10] EQ 'CHANGEOVER' then
Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'CHANGEOVER') Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'CHANGEOVER')
@ -2005,7 +2054,7 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
end end
If ErrorMsg EQ '' then If ErrorMsg EQ '' then
//Log the current Mode Change // Log the current Mode Change
LogData = '' LogData = ''
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = 'Reactor No: ' : ReactNo : ' - Requested Mode Change: ' : Mode LogData<2> = 'Reactor No: ' : ReactNo : ' - Requested Mode Change: ' : Mode
@ -2025,7 +2074,7 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
********************************************************************************** **********************************************************************************
* WRITE OUT NEW MODE INFORMATION * WRITE OUT NEW MODE INFORMATION
//Create new React_Util record // Create new React_Util record
NewRUKey = NextKey('REACT_UTIL') NewRUKey = NextKey('REACT_UTIL')
If Error_Services('NoError') then If Error_Services('NoError') then
@ -2052,7 +2101,7 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
RUtilRec<react_util_cust_no$> = xlate( 'WO_LOG', WorkOrder, wo_log_cust_no$, 'X' ) ; RUtilRec<react_util_cust_no$> = xlate( 'WO_LOG', WorkOrder, wo_log_cust_no$, 'X' ) ;
******************************************************************************************************** ********************************************************************************************************
//Create a new Reactor_Log Entry // Create a new Reactor_Log Entry
EntryId = UserID EntryId = UserID
RLRec = '' RLRec = ''
@ -2118,7 +2167,7 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
END ;* End of check on Current Mode END ;* End of check on Current Mode
* * * End of changes * * * * * * * * End of changes * * * * *
//Write new mode info to config table. // Write new mode info to config table.
OrigConfigRec = Database_Services('ReadDataRow', 'CONFIG', RecName) OrigConfigRec = Database_Services('ReadDataRow', 'CONFIG', RecName)
Database_Services('WriteDataRow', 'CONFIG', RecName, Rec) Database_Services('WriteDataRow', 'CONFIG', RecName, Rec)
@ -2168,6 +2217,24 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
// Reopen previous react mode // Reopen previous react mode
Database_Services('WriteDataRow', 'REACT_MODE_NG', NGPrevModeKey, PrevModeRec) Database_Services('WriteDataRow', 'REACT_MODE_NG', NGPrevModeKey, PrevModeRec)
end else end else
If RlComment NE '' then Reactor_Log_Services('AddComment', ReactNo, RlComment, UserID)
If SelE10State _EQC 'Productive' then
// Reset ABORT/ALARM flag
Open 'REACTOR' to hReactor then
WriteV False$ to hReactor, ReactNo, REACTOR_ABORT_ALARM_COMPLETE$ then
LogData = ''
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = 'Successfully set ABORT_ALARM_COMPLETE flag to false for Reactor No: ' : ReactNo
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end else
LogData = ''
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = 'Failed set ABORT_ALARM_COMPLETE flag to false for Reactor No: ' : ReactNo
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end
end
end
// Check to see if notifications are active for this mode // Check to see if notifications are active for this mode
If SelectedModeRec<REACTOR_MODES_NOTIFICATION_ACTIVE$> then If SelectedModeRec<REACTOR_MODES_NOTIFICATION_ACTIVE$> then
//If notifications are active get the classes from the REACTOR_MODE record //If notifications are active get the classes from the REACTOR_MODE record

View File

@ -280,7 +280,19 @@ Event APPLY.CLICK()
end end
If Error_Services('NoError') then If Error_Services('NoError') then
Def = ""
Def<MCAPTION$> = "Changing Reactor Mode..."
Def<MCOL$> = -2
Def<MROW$> = -2
Def<MTYPE$> = "U"
MsgHandle = Msg(@Window, Def)
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText) Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
// Take down the message
Msg(@Window, MsgHandle)
If Error_Services('NoError') then If Error_Services('NoError') then
End_Dialog(@Window, NewMode) End_Dialog(@Window, NewMode)
@ -290,10 +302,10 @@ Event APPLY.CLICK()
Error_Services('DisplayError') Error_Services('DisplayError')
ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo) ReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactNo)
If Error_Services('NoError') then If Error_Services('NoError') then
ActiveProveInOrder = ReactorRec<REACTOR_PROVE_IN_ACTIVE$> ActiveProveInOrder = ReactorRec<REACTOR_PROVE_IN_ACTIVE$>
ActiveHgCVOrder = ReactorRec<REACTOR_HGCV_CHECKLIST_ACTIVE$> ActiveHgCVOrder = ReactorRec<REACTOR_HGCV_CHECKLIST_ACTIVE$>
ActiveIntrMaintOrder = ReactorRec<REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$> ActiveIntrMaintOrder = ReactorRec<REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$>
ActiveAbortAlarmOrder = ReactorRec<REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$>
Begin Case Begin Case
Case ActiveProveInOrder Case ActiveProveInOrder
@ -387,6 +399,32 @@ Event APPLY.CLICK()
end end
end end
Case ActiveAbortAlarmOrder
OverrideGroups = 'LEAD':@VM:'SUPERVISOR'
UserMsg = "ABORT/ALARM Checklist must be completed in NICA. Override required from a lead or supervisor to bypass NICA."
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Override then
ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW)<2>
If Assigned(ResponseComment) and Len(ResponseComment) GT 4 then
ActiveIntrMaintOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
For each ActiveIntrMaintOrderId in ActiveIntrMaintOrders using @VM
Nica_Orders_Services('CancelOrder', ActiveIntrMaintOrderId)
Next ActiveIntrMaintOrderId
Override_Log_Services('Create', 'REACTOR', ReactNo, UserVerification<2>, ResponseComment, 'ABORT_ALARM_CHECKLIST')
Reactor_Services('CreateReactModeChange', @User4, ReactNo, NewMode, NewReactModeSvc, NewNoteText)
If Error_Services('NoError') then
End_Dialog(@Window, NewMode)
end
end else
Message_Box(@Window, 'You must enter a comment greater than 4 letters!', 'Error', MSG_ICON_EXCLAM$)
end
end
End Case End Case
end else end else
Error_Services('DisplayError') Error_Services('DisplayError')

View File

@ -1,46 +1,58 @@
Compile function React_Prob_Cat_Services(@Service, @Params) Compile function React_Prob_Cat_Services(@Service, @Params)
Declare Function Next_Key, Date /***********************************************************************************************************************
Declare Subroutine Msg, Database_Services
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
permission from SRP Computer Solutions, Inc.
Name : React_Prob_Cat_Services
Description : Handler program for all module related services.
Notes : The generic parameters should contain all the necessary information to process the services. Often
this will be information like the data Record and Key ID.
Parameters :
Service [in] -- Name of the service being requested
Param1-10 [in/out] -- Additional request parameter holders
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
Metadata :
History : (Date, Initials, Notes)
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler #pragma precomp SRP_PreCompiler
$insert LOGICAL
$Insert SERVICE_SETUP
$Insert APP_INSERTS
$insert REACT_PROB_CAT_EQUATES $insert REACT_PROB_CAT_EQUATES
Declare Function NextKey
Declare Subroutine Database_Services, Error_Services
GoToService GoToService
Return Response or "" Return Response or ""
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// SERVICES // SERVICES
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
Service Create(ReactProbCatName, ReactProbCat) Service Create(ReactProbCatName, ReactProbCat)
OPEN 'REACT_PROB_CAT' TO RPTable ELSE
MSG( '', 'Unable to open REACT_PROB_CAT...' )
RETURN
END
RPRec = ''
NewCatKey = Next_Key('REACT_PROB_CAT', RPTable, 'NEXT', '')
RPRec<REACT_PROB_CAT_CAT_DESC$> = ReactProbCatName
RPRec<REACT_PROB_CAT_ENTRY_ID$> = @User4
RPRec<REACT_PROB_CAT_ENTRY_DATE$> = Date()
RPRec<REACT_PROB_CAT_REACT_PROB_ID$> = ''
//RPRec<5> = 0
RPRec<6> = ReactProbCat
WRITE RPRec ON RPTable, NewCatKey ELSE Response = ''
MSG( '', 'Damn') If ReactProbCatName NE '' then
RETURN RPRec = ''
END NewCatKey = NextKey('REACT_PROB_CAT')
UNLOCK RPTable, NewCatKey else RPRec<REACT_PROB_CAT_CAT_DESC$> = ReactProbCatName
MSG( '', 'Damn' ) RPRec<REACT_PROB_CAT_ENTRY_ID$> = @User4
RETURN RPRec<REACT_PROB_CAT_ENTRY_DATE$> = Date()
END RPRec<REACT_PROB_CAT_REACT_PROB_ID$> = ''
Response = NewCatKey Database_Services('WriteDataRow', 'REACT_PROB_CAT', NewCatKey, RPRec, True$, False$, False$)
Response = NewCatKey
end else
Error_Services('Add', 'Error in ':Service:' service. Null ReactProbCatName passed into service.')
end
End Service End Service
Service Delete(ProbCatId)
end service

View File

@ -83,14 +83,14 @@ ChecklistButton:
If ReactorPmOrderIds NE '' then If ReactorPmOrderIds NE '' then
For each ReactorPmOrderId in ReactorPmOrderIds using @VM setting vPos For each ReactorPmOrderId in ReactorPmOrderIds using @VM setting vPos
ProgressPercentage = Xlate('NICA_ORDERS', ReactorPmOrderId, 'PROGRESS_PERCENTAGE', 'X') ProgressPercentage = Xlate('NICA_ORDERS', ReactorPmOrderId, 'PROGRESS_PERCENTAGE', 'X')
ChecklistInfo<-1> = Xlate('NICA_ORDERS', ReactorPmOrderId, 'ORDER_TYPE', 'X') : '- ' : ProgressPercentage :'% Complete.' ChecklistInfo<-1> = Xlate('NICA_ORDERS', ReactorPmOrderId, 'ORDER_TYPE', 'X') : ' - ' : ProgressPercentage :'% Complete.'
Next RlPmType Next RlPmType
end end
If ReactorNicaOrders NE '' then If ReactorNicaOrders NE '' then
For each NicaOrderId in ReactorNicaOrders using @VM For each NicaOrderId in ReactorNicaOrders using @VM
ProgressPercentage = Xlate('NICA_ORDERS', NicaOrderId, 'PROGRESS_PERCENTAGE', 'X') ProgressPercentage = Xlate('NICA_ORDERS', NicaOrderId, 'PROGRESS_PERCENTAGE', 'X')
ChecklistInfo<-1> = Xlate('NICA_ORDERS', NicaOrderId, 'ORDER_TYPE', 'X') : '- ' : ProgressPercentage :'% Complete.' ChecklistInfo<-1> = Xlate('NICA_ORDERS', NicaOrderId, 'ORDER_TYPE', 'X') : ' - ' : ProgressPercentage :'% Complete.'
Next NicaOrderId Next NicaOrderId
end end
@ -270,18 +270,14 @@ FORM_CREATE:
Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveReactorPM.png') Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveReactorPM.png')
end end
Status_HgCV_Alarm = Xlate('REACTOR', I, REACTOR_HGCV_CHECKLIST_ACTIVE$, 'X') Status_HgCV_Alarm = Xlate('REACTOR', I, REACTOR_HGCV_CHECKLIST_ACTIVE$, 'X')
If Status_HgCV_Alarm EQ True$ then
Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveProveIn.png')
end
Status_Intrusive_Maint = Xlate('REACTOR', I, REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$, 'X') Status_Intrusive_Maint = Xlate('REACTOR', I, REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$, 'X')
If Status_Intrusive_Maint EQ True$ then Status_Abort_Alarm = Xlate('REACTOR', I, REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$, 'X')
If Status_HgCV_Alarm or Status_Intrusive_Maint or Status_Abort_Alarm then
Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveProveIn.png') Set_Property(Window:'.OLE_PIC_':I, 'OLE.Image', '.\BMPS\ActiveProveIn.png')
end end
OlePicVisible = ( Status_ProveIn or Status_0311 or Status_ReactorPM or Status_HgCV_Alarm or Status_Intrusive_Maint) OlePicVisible = ( Status_ProveIn or Status_0311 or Status_ReactorPM or Status_HgCV_Alarm or Status_Intrusive_Maint or Status_Abort_Alarm )
Set_Property(Window:'.OLE_PIC_':I,'VISIBLE', OlePicVisible) Set_Property(Window:'.OLE_PIC_':I,'VISIBLE', OlePicVisible)
IQSPicControl = @Window : '.OLE_PIC_IQS_': i IQSPicControl = @Window : '.OLE_PIC_IQS_': i
@ -329,3 +325,4 @@ REACT_DETAIL:
return return
*===============================================================================================* *===============================================================================================*

View File

@ -12,5 +12,7 @@ compile insert NICA_CHECKLISTS_EQUATES
equ NICA_CHECKLISTS.NICA_ORDER_FLOW_IDS$ to 3 equ NICA_CHECKLISTS.NICA_ORDER_FLOW_IDS$ to 3
equ NICA_CHECKLISTS.NICA_ORDER_FLOW_TYPE$ to 4 equ NICA_CHECKLISTS.NICA_ORDER_FLOW_TYPE$ to 4
equ NICA_CHECKLISTS.REACTOR_TYPES$ to 5 equ NICA_CHECKLISTS.REACTOR_TYPES$ to 5
equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$ to 6
#endif #endif

View File

@ -7,14 +7,18 @@ compile insert NICA_ORDERS_EQUATES
#ifndef __NICA_ORDERS_EQUATES__ #ifndef __NICA_ORDERS_EQUATES__
#define __NICA_ORDERS_EQUATES__ #define __NICA_ORDERS_EQUATES__
equ NICA_ORDERS.ORDER_TYPE$ to 1 equ NICA_ORDERS.ORDER_TYPE$ to 1
equ NICA_ORDERS.ORDER_STATUS$ to 2 equ NICA_ORDERS.ORDER_STATUS$ to 2
equ NICA_ORDERS.ENTITY_TYPE$ to 3 equ NICA_ORDERS.ENTITY_TYPE$ to 3
equ NICA_ORDERS.ENTITY_ID$ to 4 equ NICA_ORDERS.ENTITY_ID$ to 4
equ NICA_ORDERS.IS_COMPLETE$ to 5 equ NICA_ORDERS.IS_COMPLETE$ to 5
equ NICA_ORDERS.PROGRESS_PERCENTAGE$ to 6 equ NICA_ORDERS.PROGRESS_PERCENTAGE$ to 6
equ NICA_ORDERS.ORDER_CHECKLIST_IDS$ to 7 equ NICA_ORDERS.ORDER_CHECKLIST_IDS$ to 7
equ NICA_ORDERS.ORDER_FLOW_IDS$ to 8
equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9
equ NICA_ORDERS.CREATED_DTM$ to 10
equ NICA_ORDERS.CLOSED_DTM$ to 11
#endif #endif

View File

@ -81,4 +81,6 @@ Equ REACTOR_IQS_ALARM_DTM$ To 69
Equ REACTOR_IQS_ALARM_TEST$ To 70 Equ REACTOR_IQS_ALARM_TEST$ To 70
Equ REACTOR_HGCV_CHECKLIST_ACTIVE$ To 71 Equ REACTOR_HGCV_CHECKLIST_ACTIVE$ To 71
Equ REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$ To 72 Equ REACTOR_INTRUSIVE_MAINT_CHECKLIST_ACTIVE$ To 72
Equ REACTOR_ABORT_ALARM_CHECKLIST_ACTIVE$ To 73
Equ REACTOR_ABORT_ALARM_COMPLETE$ To 74

View File

@ -6,10 +6,13 @@ compile insert REACT_PROB_CAT_EQUATES
----------------------------------------*/ ----------------------------------------*/
Equ REACT_PROB_CAT_SEQ$ To 0 Equ REACT_PROB_CAT_SEQ$ To 0
Equ REACT_PROB_CAT_CAT_DESC$ To 1 Equ REACT_PROB_CAT_CAT_DESC$ To 1
Equ REACT_PROB_CAT_REACTOR_PROBLEM_CATEGORY$ To 1 Equ REACT_PROB_CAT_REACTOR_PROBLEM_CATEGORY$ To 1
Equ REACT_PROB_CAT_ENTRY_ID$ To 2 Equ REACT_PROB_CAT_ENTRY_ID$ To 2
Equ REACT_PROB_CAT_ENTRY_DATE$ To 3 Equ REACT_PROB_CAT_ENTRY_DATE$ To 3
Equ REACT_PROB_CAT_REACT_PROB_ID$ To 4 Equ REACT_PROB_CAT_REACT_PROB_ID$ To 4
Equ REACT_PROB_CAT_NOTES$ To 5 Equ REACT_PROB_CAT_NOTES$ To 5
Equ REACT_PROB_CAT_ABORT_ALARM_FLOW_ID$ To 6
Equ REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$ To 7