Пример #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
        public void Cancel(OrderCancellationReason cancellationReason)
        {
            if (State == OrderState.Canceled)
            {
                throw new InvalidOperationException($"{this} has already been canceled.");
            }

            State = OrderState.Canceled;
            WriteHistory($"Canceled with reason {cancellationReason}.");
        }
 public OrderCancelled(Guid orderId,
                       Guid?paymentId,
                       OrderCancellationReason orderCancellationReason,
                       DateTime cancelledAt)
 {
     OrderId   = orderId;
     PaymentId = paymentId;
     OrderCancellationReason = orderCancellationReason;
     CancelledAt             = cancelledAt;
 }
Пример #4
0
    public void Cancel(OrderCancellationReason cancellationReason)
    {
        if (OrderStatus.Closed.HasFlag(Status))
        {
            throw new InvalidOperationException($"Cannot cancel a closed order.");
        }

        var @event = OrderCancelled.Create(Id, PaymentId, cancellationReason, DateTime.UtcNow);

        Enqueue(@event);
        Apply(@event);
    }
Пример #5
0
        public static OrderCancelled Create(Guid orderId,
                                            Guid?paymentId,
                                            OrderCancellationReason orderCancellationReason,
                                            DateTime cancelledAt)
        {
            Guard.Against.Default(orderId, nameof(orderId));
            Guard.Against.Default(paymentId, nameof(paymentId));
            Guard.Against.Default(orderCancellationReason, nameof(orderCancellationReason));
            Guard.Against.Default(cancelledAt, nameof(cancelledAt));

            return(new OrderCancelled(orderId, paymentId, orderCancellationReason, cancelledAt));
        }
Пример #6
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));
                }
            }
        }
Пример #7
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));
                }
            }
        }
    public static OrderCancelled Create(Guid orderId,
                                        Guid?paymentId,
                                        OrderCancellationReason orderCancellationReason,
                                        DateTime cancelledAt)
    {
        if (orderId == Guid.Empty)
        {
            throw new ArgumentOutOfRangeException(nameof(orderId));
        }
        if (paymentId == Guid.Empty)
        {
            throw new ArgumentOutOfRangeException(nameof(paymentId));
        }
        if (orderCancellationReason == default)
        {
            throw new ArgumentOutOfRangeException(nameof(orderCancellationReason));
        }
        if (cancelledAt == default)
        {
            throw new ArgumentOutOfRangeException(nameof(cancelledAt));
        }

        return(new OrderCancelled(orderId, paymentId, orderCancellationReason, cancelledAt));
    }
Пример #9
0
 private CancelOrder(Guid orderId, OrderCancellationReason cancellationReason)
 {
     OrderId            = orderId;
     CancellationReason = cancellationReason;
 }
Пример #10
0
        // Cancellation

        public OrderBuilder WithCancellationReason(OrderCancellationReason cancellationReason) =>
        SetValue(_cancellationReason, cancellationReason);
Пример #11
0
 public CancelOrderRequest(OrderCancellationReason cancellationReason)
 {
     CancellationReason = cancellationReason;
 }
Пример #12
0
        public static CancelOrder Create(Guid orderId, OrderCancellationReason cancellationReason)
        {
            Guard.Against.Default(orderId, nameof(orderId));

            return(new CancelOrder(orderId, cancellationReason));
        }