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); }
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; }
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); }
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)); }
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)); } } }
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)); }
private CancelOrder(Guid orderId, OrderCancellationReason cancellationReason) { OrderId = orderId; CancellationReason = cancellationReason; }
// Cancellation public OrderBuilder WithCancellationReason(OrderCancellationReason cancellationReason) => SetValue(_cancellationReason, cancellationReason);
public CancelOrderRequest(OrderCancellationReason cancellationReason) { CancellationReason = cancellationReason; }
public static CancelOrder Create(Guid orderId, OrderCancellationReason cancellationReason) { Guard.Against.Default(orderId, nameof(orderId)); return(new CancelOrder(orderId, cancellationReason)); }