Пример #1
0
        public MergeOrderResponse MergeOrder(MergeOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.SourceOrderRefs, "SourceOrderRefs");
            Platform.CheckTrue(request.SourceOrderRefs.Count > 0, "SourceOrderRefs.Count > 0");
            Platform.CheckMemberIsSet(request.DestinationOrderRef, "DestinationOrderRef");

            var response = new MergeOrderResponse();

            DryRunHelper(request.DryRun,
                         delegate
            {
                var destinationOrder = this.PersistenceContext.Load <Order>(request.DestinationOrderRef);
                var sourceOrders     = CollectionUtils.Map(request.SourceOrderRefs, (EntityRef r) => PersistenceContext.Load <Order>(r));
                var mergeInfo        = new OrderMergeInfo(this.CurrentUserStaff, Platform.Time, destinationOrder);

                MergeOrderHelper(destinationOrder, sourceOrders, mergeInfo, request.ValidationOnly);

                if (request.DryRun)
                {
                    var orderAssembler = new OrderAssembler();
                    var orderDetail    = orderAssembler.CreateOrderDetail(destinationOrder,
                                                                          OrderAssembler.CreateOrderDetailOptions.GetVerboseOptions(), PersistenceContext);
                    response.DryRunMergedOrder = orderDetail;
                }
            });
            return(response);
        }
Пример #2
0
        private void MergeOrderHelper(Order destinationOrder, IEnumerable <Order> sourceOrders, OrderMergeInfo mergeInfo, bool validateOnly)
        {
            var sourceOrderAccessionNumbers = new List <string>();

            foreach (var sourceOrder in sourceOrders)
            {
                sourceOrderAccessionNumbers.Add(sourceOrder.AccessionNumber);

                string failureReason;
                if (!sourceOrder.CanMerge(mergeInfo, out failureReason))
                {
                    throw new RequestValidationException(failureReason);
                }

                if (validateOnly)
                {
                    continue;
                }

                // Merge the source order into the destination order.
                var result = sourceOrder.Merge(mergeInfo);

                // sync state so that ghost procedures get OIDs, prior to queuing ghost HL7 events
                PersistenceContext.SynchState();

                // create all necessary HL7 events
                foreach (var ghostProcedure in result.GhostProcedures)
                {
                    LogicalHL7Event.ProcedureCancelled.EnqueueEvents(ghostProcedure);
                    LogicalHL7Event.ProcedureCreated.EnqueueEvents(ghostProcedure.GhostOf);
                }
                LogicalHL7Event.OrderModified.EnqueueEvents(destinationOrder);
            }
        }