示例#1
0
        public Order CancelPendingOrder(string orderId, string additionalInfo,
                                        string correlationId, string comment = null, OrderCancellationReason reason = OrderCancellationReason.None)
        {
            var order = _ordersCache.GetOrderById(orderId);

            if (order.Status == OrderStatus.Inactive)
            {
                _ordersCache.Inactive.Remove(order);
            }
            else if (order.Status == OrderStatus.Active)
            {
                _ordersCache.Active.Remove(order);
            }
            else
            {
                throw new InvalidOperationException($"Order in state {order.Status} can not be cancelled");
            }

            order.Cancel(_dateService.Now(), additionalInfo, correlationId);

            var metadata = new OrderCancelledMetadata {
                Reason = reason.ToType <OrderCancellationReasonContract>()
            };

            _orderCancelledEventChannel.SendEvent(this, new OrderCancelledEventArgs(order, metadata));

            return(order);
        }
示例#2
0
        private void CancelRelatedOrdersForOrder(Order order, OrderCancellationReason reason)
        {
            var metadata = new OrderCancelledMetadata {
                Reason = reason.ToType <OrderCancellationReasonContract>()
            };

            foreach (var relatedOrderInfo in order.RelatedOrders)
            {
                if (_ordersCache.Inactive.TryPopById(relatedOrderInfo.Id, out var relatedOrder))
                {
                    relatedOrder.Cancel(_dateService.Now(), null);
                    _orderCancelledEventChannel.SendEvent(this, new OrderCancelledEventArgs(relatedOrder, metadata));
                }
            }
        }
示例#3
0
        private void CancelRelatedOrders(List <RelatedOrderInfo> relatedOrderInfos, string correlationId,
                                         OrderCancellationReason reason)
        {
            var metadata = new OrderCancelledMetadata
            {
                Reason = reason.ToType <OrderCancellationReasonContract>()
            };

            foreach (var relatedOrderInfo in relatedOrderInfos)
            {
                if (_ordersCache.Inactive.TryPopById(relatedOrderInfo.Id, out var inactiveRelatedOrder))
                {
                    inactiveRelatedOrder.Cancel(_dateService.Now(), null, correlationId);
                    _orderCancelledEventChannel.SendEvent(this, new OrderCancelledEventArgs(inactiveRelatedOrder, metadata));
                }
                else if (_ordersCache.Active.TryPopById(relatedOrderInfo.Id, out var activeRelatedOrder))
                {
                    activeRelatedOrder.Cancel(_dateService.Now(), null, correlationId);
                    _orderCancelledEventChannel.SendEvent(this, new OrderCancelledEventArgs(activeRelatedOrder, metadata));
                }
            }
        }
示例#4
0
 public OrderCancelledEventArgs(Order order, OrderCancelledMetadata metadata)
     : base(order)
 {
     ActivitiesMetadata = metadata.ToJson();
 }