Пример #1
0
		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);
				}
			}
		}
Пример #2
0
        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);
                }
            }
        }