private void UnmergeHelper(IEnumerable<Order> sourceOrders, OrderCancelInfo cancelInfo, IAccessionNumberBroker accBroker) { foreach (var order in sourceOrders) { string failureReason; if (!order.CanUnmerge(cancelInfo, out failureReason)) throw new RequestValidationException(failureReason); var result = order.Unmerge(cancelInfo, accBroker.GetNext()); var replacementOrder = result.ReplacementOrder; PersistenceContext.Lock(replacementOrder, DirtyState.New); // sync state so that ghost procedures get OIDs, prior to queuing ghost HL7 events PersistenceContext.SynchState(); // notify HL7 of cancelled procedures (now existing as ghosts on dest order) foreach (var procedure in result.GhostProcedures) { LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure); } // if the replacement order is not terminated if (!replacementOrder.IsTerminated) { // notify HL7 of replacement LogicalHL7Event.OrderCreated.EnqueueEvents(replacementOrder); // recur on items that were merged into this order UnmergeHelper(replacementOrder.MergeSourceOrders, cancelInfo, accBroker); } } }
private void UnmergeHelper(IEnumerable <Order> sourceOrders, OrderCancelInfo cancelInfo, IAccessionNumberBroker accBroker) { foreach (var order in sourceOrders) { string failureReason; if (!order.CanUnmerge(cancelInfo, out failureReason)) { throw new RequestValidationException(failureReason); } var result = order.Unmerge(cancelInfo, accBroker.GetNext()); var replacementOrder = result.ReplacementOrder; PersistenceContext.Lock(replacementOrder, DirtyState.New); // sync state so that ghost procedures get OIDs, prior to queuing ghost HL7 events PersistenceContext.SynchState(); // notify HL7 of cancelled procedures (now existing as ghosts on dest order) foreach (var procedure in result.GhostProcedures) { LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure); } // if the replacement order is not terminated if (!replacementOrder.IsTerminated) { // notify HL7 of replacement LogicalHL7Event.OrderCreated.EnqueueEvents(replacementOrder); // recur on items that were merged into this order UnmergeHelper(replacementOrder.MergeSourceOrders, cancelInfo, accBroker); } } }