Esempio n. 1
0
        private void Apply(ChangedOrderItemStateEvent e)
        {
            var logger = EngineContext.Current.Resolve <ILogger>();

            logger.InsertLog(LogLevel.Information, "Apply ChangedOrderItemQuantity",
                             String.Format("OrderItemGuid = {0}, ProductId = {1}, State = {2}", e.OrderItemGuid, e.ProductId, e.State));
            var item = _orderItems.Find(i => i.OrderItemGuid == e.OrderItemGuid);

            if (item != null)
            {
                item.State = e.State;
            }
            else
            {
                throw new Exception(String.Format("No have order item '{0}' in order.", e.OrderItemGuid));
            }
        }
        public async Task Handle(ChangedOrderItemStateEvent message, CancellationToken token)
        {
            var order = _currentOrderService.GetOrderByGuid(message.Id);

            order.Version      = message.Version;
            order.UpdatedOnUtc = message.TimeStamp.UtcDateTime;
            _currentOrderService.UpdateOrder(order);

            var item = _currentOrderService.GetOrderItemByGuid(message.OrderItemGuid);

            item.StateId      = message.State;
            item.UpdatedOnUtc = message.TimeStamp.UtcDateTime;
            _currentOrderService.UpdateOrderItem(item);

            // fill in model values from the entity
            var notifyModel    = order.ToNotifyChangedOrderItemModel();
            var product        = _productService.GetProductById(item.ProductId);
            var orderItemModel = new InStoreOrderItemListRowViewModel()
            {
                Id          = item.Id,
                AggregateId = item.AggregateId,
                ProductId   = item.ProductId,
                Quantity    = item.Quantity,
                OldQuantity = item.Quantity,
                Version     = item.Version,

                ProductName  = product.Name,
                ProductPrice = product.Price
            };

            notifyModel.UpdatedOnUtc     = _dateTimeHelper.ConvertToUserTime(order.UpdatedOnUtc, DateTimeKind.Utc).ToString("dd/MM HH:mm:ss");
            notifyModel.ChangedOrderItem = orderItemModel;

            await this._clientNotificationService.NotifyChangedOrderItemQuantityEvent(notifyModel);

            //return Task.CompletedTask;
        }