Esempio n. 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);
        }
Esempio n. 2
0
        private GetOrderDetailResponse GetOrderDetail(GetOrderDetailRequest request)
        {
            var order = this.PersistenceContext.GetBroker <IOrderBroker>().Load(request.OrderRef);

            var createOrderDetailOptions = new OrderAssembler.CreateOrderDetailOptions
            {
                IncludeVisit              = request.IncludeVisit && (new WorkflowConfigurationReader()).EnableVisitWorkflow,
                IncludeProcedures         = request.IncludeProcedures,
                IncludeNotes              = request.IncludeNotes,
                IncludeVirtualNotes       = request.IncludeNotes,               // include virtual notes, if including notes at all
                NoteCategoriesFilter      = request.NoteCategoriesFilter,
                IncludeAttachments        = request.IncludeAttachments,
                IncludeResultRecipients   = request.IncludeResultRecipients,
                IncludeExtendedProperties = request.IncludeExtendedProperties
            };

            var response       = new GetOrderDetailResponse();
            var orderAssembler = new OrderAssembler();

            response.Order = orderAssembler.CreateOrderDetail(order, createOrderDetailOptions, this.PersistenceContext);

            if (request.IncludeAlerts)
            {
                var alertAssembler = new AlertAssembler();
                response.OrderAlerts =
                    CollectionUtils.Map <AlertNotification, AlertNotificationDetail>(
                        AlertHelper.Instance.Test(order, this.PersistenceContext),
                        alertAssembler.CreateAlertNotification);
            }

            return(response);
        }
		public LoadTranscriptionForEditResponse LoadTranscriptionForEdit(LoadTranscriptionForEditRequest request)
		{
			var step = this.PersistenceContext.Load<ReportingProcedureStep>(request.ReportingStepRef, EntityLoadFlags.CheckVersion);
			var reportAssembler = new ReportAssembler();
			var orderAssembler = new OrderAssembler();

			var orderDetailOptions = new OrderAssembler.CreateOrderDetailOptions {IncludeExtendedProperties = true};
			return new LoadTranscriptionForEditResponse(
				reportAssembler.CreateReportDetail(step.ReportPart.Report, false, this.PersistenceContext),
				step.ReportPart.Index,
				orderAssembler.CreateOrderDetail(step.Procedure.Order, orderDetailOptions, this.PersistenceContext));
		}
Esempio n. 4
0
		public ListOrdersForPatientResponse ListActiveOrdersForPatient(ListOrdersForPatientRequest request)
		{
			var criteria = new OrderSearchCriteria();

			var profile = this.PersistenceContext.Load<PatientProfile>(request.PatientProfileRef);
			criteria.Patient.EqualTo(profile.Patient);
			criteria.Status.In(new[] { OrderStatus.SC, OrderStatus.IP });

			var assembler = new OrderAssembler();
			return new ListOrdersForPatientResponse(
				CollectionUtils.Map<Order, OrderSummary, List<OrderSummary>>(
					this.PersistenceContext.GetBroker<IOrderBroker>().Find(criteria),
					order => assembler.CreateOrderSummary(order, this.PersistenceContext)));
		}
        public LoadTranscriptionForEditResponse LoadTranscriptionForEdit(LoadTranscriptionForEditRequest request)
        {
            var step            = this.PersistenceContext.Load <ReportingProcedureStep>(request.ReportingStepRef, EntityLoadFlags.CheckVersion);
            var reportAssembler = new ReportAssembler();
            var orderAssembler  = new OrderAssembler();

            var orderDetailOptions = new OrderAssembler.CreateOrderDetailOptions {
                IncludeExtendedProperties = true
            };

            return(new LoadTranscriptionForEditResponse(
                       reportAssembler.CreateReportDetail(step.ReportPart.Report, false, this.PersistenceContext),
                       step.ReportPart.Index,
                       orderAssembler.CreateOrderDetail(step.Procedure.Order, orderDetailOptions, this.PersistenceContext)));
        }
Esempio n. 6
0
        public ListOrdersForPatientResponse ListActiveOrdersForPatient(ListOrdersForPatientRequest request)
        {
            var criteria = new OrderSearchCriteria();

            var profile = this.PersistenceContext.Load <PatientProfile>(request.PatientProfileRef);

            criteria.Patient.EqualTo(profile.Patient);
            criteria.Status.In(new[] { OrderStatus.SC, OrderStatus.IP });

            var assembler = new OrderAssembler();

            return(new ListOrdersForPatientResponse(
                       CollectionUtils.Map <Order, OrderSummary, List <OrderSummary> >(
                           this.PersistenceContext.GetBroker <IOrderBroker>().Find(criteria),
                           order => assembler.CreateOrderSummary(order, this.PersistenceContext))));
        }
        public StartProtocolResponse StartProtocol(StartProtocolRequest request)
        {
            var assignmentStep = this.PersistenceContext.Load <ProtocolAssignmentStep>(request.ProtocolAssignmentStepRef);

            var   protocolClaimed             = false;
            var   canPerformerAcceptProtocols = Thread.CurrentPrincipal.IsInRole(Extended.Common.AuthorityTokens.Workflow.Protocol.Accept);
            Staff assignedStaff = null;

            var linkedSteps = new List <ProtocolAssignmentStep>();

            if (request.LinkedProtocolAssignmentStepRefs != null && request.LinkedProtocolAssignmentStepRefs.Count > 0)
            {
                linkedSteps = CollectionUtils.Map <EntityRef, ProtocolAssignmentStep>(
                    request.LinkedProtocolAssignmentStepRefs,
                    stepRef => this.PersistenceContext.Load <ProtocolAssignmentStep>(stepRef));
            }

            if (request.ShouldClaim)
            {
                try
                {
                    var op = new ProtocollingOperations.StartProtocolOperation();
                    op.Execute(assignmentStep, linkedSteps, this.CurrentUserStaff, canPerformerAcceptProtocols, out protocolClaimed, out assignedStaff);
                }
                catch (Exception e)
                {
                    throw new RequestValidationException(e.Message);
                }
            }

            var noteDetails = GetNoteDetails(assignmentStep.Procedure.Order, request.NoteCategory);

            var orderAssembler     = new OrderAssembler();
            var orderDetailOptions = new OrderAssembler.CreateOrderDetailOptions {
                IncludeExtendedProperties = true
            };
            var orderDetail = orderAssembler.CreateOrderDetail(assignmentStep.Procedure.Order, orderDetailOptions, this.PersistenceContext);

            this.PersistenceContext.SynchState();

            return(new StartProtocolResponse(
                       assignmentStep.GetRef(),
                       assignedStaff == null ? null : assignedStaff.GetRef(),
                       protocolClaimed,
                       noteDetails,
                       orderDetail));
        }
Esempio n. 8
0
        public PlaceOrderResponse PlaceOrder(PlaceOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.Requisition, "Requisition");

            var order = PlaceOrderHelper(request.Requisition);

            ValidateVisitsExist(order);

            // ensure the new order is assigned an OID before using it in the return value
            this.PersistenceContext.SynchState();

            LogicalHL7Event.OrderCreated.EnqueueEvents(order);

            var orderAssembler = new OrderAssembler();

            return(new PlaceOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext)));
        }
Esempio n. 9
0
        public ModifyOrderResponse ModifyOrder(ModifyOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.Requisition, "Requisition");
            Platform.CheckMemberIsSet(request.Requisition.OrderRef, "OrderRef");

            var order = this.PersistenceContext.Load <Order>(request.Requisition.OrderRef);

            var assembler = new OrderEntryAssembler();

            assembler.UpdateOrderFromRequisition(order, request.Requisition, this.CurrentUserStaff, this.PersistenceContext);

            UpdateProceduresHelper(order, request.Requisition.Procedures, request);
            ValidateVisitsExist(order);

            this.PersistenceContext.SynchState();

            var orderAssembler = new OrderAssembler();

            return(new ModifyOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext)));
        }
Esempio n. 10
0
        public TimeShiftOrderResponse TimeShiftOrder(TimeShiftOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.OrderRef, "OrderRef");

            // load the order, explicitly ignoring the version (since this is only used for testing/demo data creation, we don't care)
            var order = this.PersistenceContext.Load <Order>(request.OrderRef, EntityLoadFlags.None);

            // shift the order, which will also shift all procedures, etc.
            order.TimeShift(request.NumberOfMinutes);

            // shift the visit
            order.Visit.TimeShift(request.NumberOfMinutes);

            this.PersistenceContext.SynchState();

            LogicalHL7Event.OrderModified.EnqueueEvents(order);

            var orderAssembler = new OrderAssembler();

            return(new TimeShiftOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext)));
        }
        public void Should_be_able_to_assemble_item()
        {
            var now = DateTime.Now;
            var mappedData = new MappedData();

            var orderTable = new DataTable();

            orderTable.Columns.Add("OrderNumber", typeof(string));
            orderTable.Columns.Add("OrderDate", typeof(DateTime));

            const string orderNumber = "ON-10";

            mappedData.Add(new MappedRow<Order>(orderTable.Rows.Add(orderNumber, now), new Order(orderNumber, now)));

            var orderLineTable = new DataTable();

            orderLineTable.Columns.Add("OrderNumber", typeof(string));
            orderLineTable.Columns.Add("ProductId", typeof(string));
            orderLineTable.Columns.Add("Quantity", typeof(int));
            orderLineTable.Columns.Add("UnitCost", typeof(double));

            mappedData.Add(new List<MappedRow<OrderLine>>
                {
                    new MappedRow<OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-1", 5, 10), new OrderLine("SKU-1", 5, 10)),
                    new MappedRow<OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-2", 1, 65), new OrderLine("SKU-2", 1, 65)),
                    new MappedRow<OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-3", 10, 10.5), new OrderLine("SKU-3", 10, 10.5))
                });

            var order = new OrderAssembler().AssembleItem(mappedData);

            Assert.AreEqual(orderNumber, order.OrderNumber);
            Assert.AreEqual(now, order.OrderDate);
            Assert.AreEqual(3, order.Lines.Count());
            Assert.AreEqual(50, order.Lines.ElementAt(0).TotalCost());
            Assert.AreEqual(65, order.Lines.ElementAt(1).TotalCost());
            Assert.AreEqual(105, order.Lines.ElementAt(2).TotalCost());
            Assert.AreEqual(220, order.Total());
        }
Esempio n. 12
0
        public void Should_be_able_to_assemble_item()
        {
            var now        = DateTime.Now;
            var mappedData = new MappedData();

            var orderTable = new DataTable();

            orderTable.Columns.Add("OrderNumber", typeof(string));
            orderTable.Columns.Add("OrderDate", typeof(DateTime));

            const string orderNumber = "ON-10";

            mappedData.Add(new MappedRow <Order>(orderTable.Rows.Add(orderNumber, now), new Order(orderNumber, now)));

            var orderLineTable = new DataTable();

            orderLineTable.Columns.Add("OrderNumber", typeof(string));
            orderLineTable.Columns.Add("ProductId", typeof(string));
            orderLineTable.Columns.Add("Quantity", typeof(int));
            orderLineTable.Columns.Add("UnitCost", typeof(double));

            mappedData.Add(new List <MappedRow <OrderLine> >
            {
                new MappedRow <OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-1", 5, 10), new OrderLine("SKU-1", 5, 10)),
                new MappedRow <OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-2", 1, 65), new OrderLine("SKU-2", 1, 65)),
                new MappedRow <OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-3", 10, 10.5), new OrderLine("SKU-3", 10, 10.5))
            });

            var order = new OrderAssembler().AssembleItem(mappedData);

            Assert.AreEqual(orderNumber, order.OrderNumber);
            Assert.AreEqual(now, order.OrderDate);
            Assert.AreEqual(3, order.Lines.Count());
            Assert.AreEqual(50, order.Lines.ElementAt(0).TotalCost());
            Assert.AreEqual(65, order.Lines.ElementAt(1).TotalCost());
            Assert.AreEqual(105, order.Lines.ElementAt(2).TotalCost());
            Assert.AreEqual(220, order.Total());
        }
Esempio n. 13
0
        public ReplaceOrderResponse ReplaceOrder(ReplaceOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.OrderRef, "OrderRef");
            Platform.CheckMemberIsSet(request.Requisition, "Requisition");

            var orderToReplace = this.PersistenceContext.Load <Order>(request.OrderRef);

            ValidateOrderReplacable(orderToReplace);

            // reason is optional
            var reason = (request.CancelReason != null) ?
                         EnumUtils.GetEnumValue <OrderCancelReasonEnum>(request.CancelReason, this.PersistenceContext) : null;

            // duplicate any attachments in the requisition,
            // so that the replacement order gets a copy while the replaced order
            // retains the association to the originals
            DuplicateAttachmentsForOrderReplace(orderToReplace, request.Requisition);

            // place new order
            var newOrder = PlaceOrderHelper(request.Requisition);

            ValidateVisitsExist(newOrder);

            // cancel existing order
            CancelOrderHelper(orderToReplace, new OrderCancelInfo(reason, this.CurrentUserStaff, null, newOrder));

            this.PersistenceContext.SynchState();

            LogicalHL7Event.OrderCreated.EnqueueEvents(newOrder);
            LogicalHL7Event.OrderCancelled.EnqueueEvents(orderToReplace);

            var orderAssembler = new OrderAssembler();

            return(new ReplaceOrderResponse(orderAssembler.CreateOrderSummary(newOrder, this.PersistenceContext)));
        }
		private GetOrderDetailResponse GetOrderDetail(GetOrderDetailRequest request)
		{
			var order = this.PersistenceContext.GetBroker<IOrderBroker>().Load(request.OrderRef);

			var createOrderDetailOptions = new OrderAssembler.CreateOrderDetailOptions
			{
				IncludeVisit = request.IncludeVisit && (new WorkflowConfigurationReader()).EnableVisitWorkflow,
				IncludeProcedures = request.IncludeProcedures,
				IncludeNotes = request.IncludeNotes,
				IncludeVirtualNotes = request.IncludeNotes,	// include virtual notes, if including notes at all
				NoteCategoriesFilter = request.NoteCategoriesFilter,
				IncludeAttachments = request.IncludeAttachments,
				IncludeResultRecipients = request.IncludeResultRecipients,
				IncludeExtendedProperties = request.IncludeExtendedProperties
			};

			var response = new GetOrderDetailResponse();
			var orderAssembler = new OrderAssembler();
			response.Order = orderAssembler.CreateOrderDetail(order, createOrderDetailOptions, this.PersistenceContext);

			if (request.IncludeAlerts)
			{
				var alertAssembler = new AlertAssembler();
				response.OrderAlerts =
					CollectionUtils.Map<AlertNotification, AlertNotificationDetail>(
						AlertHelper.Instance.Test(order, this.PersistenceContext),
						alertAssembler.CreateAlertNotification);
			}

			return response;
		}
Esempio n. 15
0
		public TimeShiftOrderResponse TimeShiftOrder(TimeShiftOrderRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.OrderRef, "OrderRef");

			// load the order, explicitly ignoring the version (since this is only used for testing/demo data creation, we don't care)
			var order = this.PersistenceContext.Load<Order>(request.OrderRef, EntityLoadFlags.None);

			// shift the order, which will also shift all procedures, etc.
			order.TimeShift(request.NumberOfMinutes);

			// shift the visit
			order.Visit.TimeShift(request.NumberOfMinutes);

			this.PersistenceContext.SynchState();

			LogicalHL7Event.OrderModified.EnqueueEvents(order);

			var orderAssembler = new OrderAssembler();
			return new TimeShiftOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext));
		}
Esempio n. 16
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;
		}
Esempio n. 17
0
		public ReplaceOrderResponse ReplaceOrder(ReplaceOrderRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.OrderRef, "OrderRef");
			Platform.CheckMemberIsSet(request.Requisition, "Requisition");

			var orderToReplace = this.PersistenceContext.Load<Order>(request.OrderRef);
			ValidateOrderReplacable(orderToReplace);

			// reason is optional
			var reason = (request.CancelReason != null) ?
				EnumUtils.GetEnumValue<OrderCancelReasonEnum>(request.CancelReason, this.PersistenceContext) : null;

			// duplicate any attachments in the requisition,
			// so that the replacement order gets a copy while the replaced order
			// retains the association to the originals
			DuplicateAttachmentsForOrderReplace(orderToReplace, request.Requisition);

			// place new order
			var newOrder = PlaceOrderHelper(request.Requisition);
			ValidateVisitsExist(newOrder);

			// cancel existing order
			CancelOrderHelper(orderToReplace, new OrderCancelInfo(reason, this.CurrentUserStaff, null, newOrder));

			this.PersistenceContext.SynchState();

			LogicalHL7Event.OrderCreated.EnqueueEvents(newOrder);
			LogicalHL7Event.OrderCancelled.EnqueueEvents(orderToReplace);

			var orderAssembler = new OrderAssembler();
			return new ReplaceOrderResponse(orderAssembler.CreateOrderSummary(newOrder, this.PersistenceContext));
		}
Esempio n. 18
0
		public ModifyOrderResponse ModifyOrder(ModifyOrderRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.Requisition, "Requisition");
			Platform.CheckMemberIsSet(request.Requisition.OrderRef, "OrderRef");

			var order = this.PersistenceContext.Load<Order>(request.Requisition.OrderRef);

			var assembler = new OrderEntryAssembler();
			assembler.UpdateOrderFromRequisition(order, request.Requisition, this.CurrentUserStaff, this.PersistenceContext);

			UpdateProceduresHelper(order, request.Requisition.Procedures, request);
			ValidateVisitsExist(order);

			this.PersistenceContext.SynchState();

			var orderAssembler = new OrderAssembler();
			return new ModifyOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext));
		}
Esempio n. 19
0
		public PlaceOrderResponse PlaceOrder(PlaceOrderRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.Requisition, "Requisition");

			var order = PlaceOrderHelper(request.Requisition);

			ValidateVisitsExist(order);

			// ensure the new order is assigned an OID before using it in the return value
			this.PersistenceContext.SynchState();

			LogicalHL7Event.OrderCreated.EnqueueEvents(order);

			var orderAssembler = new OrderAssembler();
			return new PlaceOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext));
		}