示例#1
0
        public void Test_CanExecute()
        {
            Order order             = new Order();
            CancelOrderOperation op = new CancelOrderOperation();

            Assert.AreEqual(OrderStatus.SC, order.Status);
            Assert.IsTrue(op.CanExecute(order));
        }
示例#2
0
        public void Test_CanExecute_Cancel()
        {
            Order order             = new Order();
            CancelOrderOperation op = new CancelOrderOperation();

            order.Cancel(new OrderCancelInfo());
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CA, order.Status);

            Assert.IsFalse(op.CanExecute(order));
        }
示例#3
0
        public ResponseMessage ProcessOrder(RequestMessage reqMsg)
        {
            ResponseMessage responseToDuplicateMessage = _deduplicator.GetExistingResponseMessage(reqMsg.RequestId);

            if (responseToDuplicateMessage != null)
            {
                return(responseToDuplicateMessage);
            }

            ResponseMessage response;

            switch (reqMsg.Operation)
            {
            case CreateOrderOperation.Id:
                CreateOrderOperation submitOrder = new CreateOrderOperation
                {
                    InventoryRepository = _InventoryRepository,
                    OrderRepository     = _orderRepository
                };

                response = submitOrder.ExecuteOperation(reqMsg);
                break;

            case CancelOrderOperation.Id:
                CancelOrderOperation cancelOrder = new CancelOrderOperation
                {
                    InventoryRepository = _InventoryRepository,
                    OrderRepository     = _orderRepository
                };

                response = cancelOrder.ExecuteOperation(reqMsg);
                break;

            case GetOrderOperation.Id:
                GetOrderOperation getOrder = new GetOrderOperation
                {
                    OrderRepository = _orderRepository
                };

                response = getOrder.ExecuteOperation(reqMsg);
                break;

            default:
                _loggerService.WriteLine("Received bad message: " + reqMsg.RequestId, "ProcessOrderError");
                response = _responseMessageFactory.CreateBadRequestResponseMessage(reqMsg);
                break;
            }

            _deduplicator.StoreResponseToMessage(reqMsg.RequestId, response);

            return(response);
        }
示例#4
0
        public void Test_Execute()
        {
            Order                order = new Order();
            OrderCancelInfo      info  = new OrderCancelInfo();
            CancelOrderOperation op    = new CancelOrderOperation();

            Assert.AreEqual(OrderStatus.SC, order.Status);

            op.Execute(order, info);
            order.UpdateStatus();

            Assert.AreEqual(OrderStatus.CA, order.Status);
        }
示例#5
0
        public void Test_Execute()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            CancelOrderOperation op = new CancelOrderOperation();

            Assert.AreEqual(OrderStatus.SC, order.Status);

            op.Execute(order, info);
            order.UpdateStatus();

            Assert.AreEqual(OrderStatus.CA, order.Status);
        }
示例#6
0
        public void Test_CanExecute_InProgress()
        {
            Order order = new Order();
            CancelOrderOperation  op        = new CancelOrderOperation();
            Procedure             procedure = new Procedure();
            ModalityProcedureStep step      = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());

            order.AddProcedure(procedure);

            step.Start(new Staff());
            Assert.AreEqual(OrderStatus.IP, order.Status);

            Assert.IsFalse(op.CanExecute(order));
        }
示例#7
0
        public void Test_Execute_InProgress()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            CancelOrderOperation op = new CancelOrderOperation();
            Procedure procedure = new Procedure();
            ModalityProcedureStep step = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());
            order.AddProcedure(procedure);

            step.Start(new Staff());
            Assert.AreEqual(OrderStatus.IP, order.Status);

            op.Execute(order, info);
        }
示例#8
0
        public void Test_Execute_Discontinue()
        {
            Order                 order     = new Order();
            OrderCancelInfo       info      = new OrderCancelInfo();
            CancelOrderOperation  op        = new CancelOrderOperation();
            Procedure             procedure = new Procedure();
            ModalityProcedureStep step      = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());

            order.AddProcedure(procedure);

            step.Start(new Staff());
            order.Discontinue(new OrderCancelInfo());
            Assert.AreEqual(OrderStatus.DC, order.Status);

            op.Execute(order, info);
        }
示例#9
0
        public void Test_Execute_Complete()
        {
            Order                 order     = new Order();
            OrderCancelInfo       info      = new OrderCancelInfo();
            CancelOrderOperation  op        = new CancelOrderOperation();
            Procedure             procedure = new Procedure();
            ModalityProcedureStep step      = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());

            order.AddProcedure(procedure);

            step.Start(new Staff());
            procedure.Complete(DateTime.Now);
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CM, order.Status);

            op.Execute(order, info);
        }
示例#10
0
        bool OrderExecutionSourceStub.IImplementation.CloseOrCancelOrder(AccountInfo accountInfo, string orderId,
                                                                         string orderTag, decimal?allowedSlippage, decimal?desiredPrice, out decimal closingPrice,
                                                                         out DateTime closingTime, out string modifiedId, out string operationResultMessage)
        {
            operationResultMessage = string.Empty;

            closingPrice = 0;
            closingTime  = DateTime.MinValue;
            modifiedId   = orderId;

            string operationResultMessageLocal = string.Empty;

            OperationInformation operation = null;

            GeneralHelper.GenericReturnDelegate <string> operationDelegate = delegate()
            {
                operationResultMessageLocal = "Operation not supported.";
                operation = null;

                MbtAccount pAcct = GetAccountByInfo(accountInfo);

                if (pAcct == null)
                {
                    operationResultMessageLocal = "Failed to retrieve account.";
                    SystemMonitor.OperationWarning(operationResultMessageLocal);
                    return(null);
                }

                string message = string.Empty;
                lock (this)
                {// Make sure to keep the entire package here locked, since the order operation get placed after the submit
                    // so we need to make sure we shall catch the responce in OnSubmit() too.
                    if (_orderClient.Cancel(orderTag, ref message) == false)
                    {// Error requestMessage.
                        operationResultMessageLocal = message;
                        return(null);
                    }

                    operation = new CancelOrderOperation()
                    {
                        Id = message
                    };
                    // The message, or operation Id is the order token (further stored in OrderInfo.id)
                    _operationStub.RegisterOperation(operation, false);
                }

                return(message);
            };

            object result;

            if (_messageLoopOperator.Invoke(operationDelegate, TimeSpan.FromSeconds(8), out result) == false)
            {// Timed out.
                operationResultMessage = "Timeout submiting order cancelation.";
                return(false);
            }

            if (string.IsNullOrEmpty((string)result))
            {// Operation error.
                operationResultMessage = operationResultMessageLocal;
                return(false);
            }

            // Return the ID of the submitted order.
            return(true);
        }
        bool OrderExecutionSourceStub.IImplementation.CloseOrCancelOrder(AccountInfo accountInfo, string orderId, 
            string orderTag, decimal? allowedSlippage, decimal? desiredPrice, out decimal closingPrice, 
            out DateTime closingTime, out string modifiedId, out string operationResultMessage)
        {
            operationResultMessage = string.Empty;

            closingPrice = 0;
            closingTime = DateTime.MinValue;
            modifiedId = orderId;

            string operationResultMessageLocal = string.Empty;

            OperationInformation operation = null;
            GeneralHelper.GenericReturnDelegate<string> operationDelegate = delegate()
            {
                operationResultMessageLocal = "Operation not supported.";
                operation = null;

                MbtAccount pAcct = GetAccountByInfo(accountInfo);

                if (pAcct == null)
                {
                    operationResultMessageLocal = "Failed to retrieve account.";
                    SystemMonitor.OperationWarning(operationResultMessageLocal);
                    return null;
                }

                string message = string.Empty;
                lock (this)
                {// Make sure to keep the entire package here locked, since the order operation get placed after the submit
                    // so we need to make sure we shall catch the responce in OnSubmit() too.
                    if (_orderClient.Cancel(orderTag, ref message) == false)
                    {// Error requestMessage.
                        operationResultMessageLocal = message;
                        return null;
                    }

                    operation = new CancelOrderOperation() { Id = message };
                    // The message, or operation Id is the order token (further stored in OrderInfo.id)
                    _operationStub.RegisterOperation(operation, false);
                }

                return message;
            };

            object result;
            if (_messageLoopOperator.Invoke(operationDelegate, TimeSpan.FromSeconds(8), out result) == false)
            {// Timed out.
                operationResultMessage = "Timeout submiting order cancelation.";
                return false;
            }

            if (string.IsNullOrEmpty((string)result))
            {// Operation error.
                operationResultMessage = operationResultMessageLocal;
                return false;
            }

            // Return the ID of the submitted order.
            return true;
        }
示例#12
0
        public void Test_CanExecute_Cancel()
        {
            Order order = new Order();
            CancelOrderOperation op = new CancelOrderOperation();

            order.Cancel(new OrderCancelInfo());
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CA, order.Status);

            Assert.IsFalse(op.CanExecute(order));
        }
示例#13
0
        public void Test_CanExecute_Discontinue()
        {
            Order order = new Order();
            CancelOrderOperation op = new CancelOrderOperation();
            Procedure procedure = new Procedure();
            ModalityProcedureStep step = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());
            order.AddProcedure(procedure);

            step.Start(new Staff());
            order.Discontinue(new OrderCancelInfo());
            Assert.AreEqual(OrderStatus.DC, order.Status);

            Assert.IsFalse(op.CanExecute(order));
        }
示例#14
0
        public void Test_CanExecute_Complete()
        {
            Order order = new Order();
            CancelOrderOperation op = new CancelOrderOperation();
            Procedure procedure = new Procedure();
            ModalityProcedureStep step = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());
            order.AddProcedure(procedure);

            step.Start(new Staff());
            procedure.Complete(DateTime.Now);
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CM, order.Status);

            Assert.IsFalse(op.CanExecute(order));
        }
示例#15
0
 public void Test_CanExecute()
 {
     Order order = new Order();
     CancelOrderOperation op = new CancelOrderOperation();
     
     Assert.AreEqual(OrderStatus.SC, order.Status);
     Assert.IsTrue(op.CanExecute(order));
 }