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); }
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 OrderCancelledEventArgs(Order order, OrderCancelledMetadata metadata) : base(order) { ActivitiesMetadata = metadata.ToJson(); }