public void AddOrder(Order order)
 {
     try
     {
         _orderRepository.AddItem(order);
     }
     catch (Exception exception)
     {
         //_logger.WriteLog("Cannot insert data \n-----------------\n"+ exception);
         throw;
     }
 }
示例#2
0
        public IActionResult Cart(string code)
        {
            if (!string.IsNullOrEmpty(code))
            {
                orderRepository.AddItem(code);
            }

            Order order = orderRepository.GetOrder();
            var   cart  = orderRepository.GetProductOrder(order.Id);

            return(View(cart));
        }
示例#3
0
        public async Task <IActionResult> BuyChart(string code)
        {
            if (!string.IsNullOrEmpty(code))
            {
                await orderRepository.AddItem(code);
            }
            Order order = await orderRepository.GetOrder();

            List <ItemOrder> itens          = order.Itens;
            ChartViewModel   chartViewModel = new ChartViewModel(itens);

            return(View(chartViewModel));
        }
        public IActionResult ShoppingCart(string internalId)
        {
            if (!string.IsNullOrEmpty(internalId))
            {
                OrderRepository.AddItem(internalId);
            }

            Order                 order = OrderRepository.GetOrder();
            List <OrderItem>      items = order.Items;
            ShoppingCartViewModel shoppingCartViewModel = new ShoppingCartViewModel(items);

            return(base.View(shoppingCartViewModel));
        }
示例#5
0
        public IActionResult Post(OrderItemRequest orderItemRequest)
        {
            var errorMessage = _orderRepository.AddItem(orderItemRequest);
            var response     = new DefaultResponse
            {
                Success      = string.IsNullOrWhiteSpace(errorMessage),
                ErrorMessage = errorMessage
            };

            if (!response.Success)
            {
                return(BadRequest(response));
            }

            return(Ok(response));
        }
        public async Task <bool> Handle(AddOrderItemCommand message, CancellationToken cancellationToken)
        {
            if (!IsCommandValid(message))
            {
                return(false);
            }

            var order = await _orderRepository.GetOrderDraftByClientId(message.ClientId);

            var item = new OrderItem(message.ProductId, message.ProductName, message.Quantity, message.UnitPrice);

            if (order == null)
            {
                order = Order.OrderFactory.NewOrderDraft(message.ClientId);
                order.AddItemOrder(item);

                _orderRepository.Add(order);
                order.AddEvents(new OrderDraftStartedEvent(message.ClientId, order.Id));
            }
            else
            {
                var existingItem = order.IsAlreadyItemInOrder(item);
                order.AddItemOrder(item);

                if (existingItem)
                {
                    _orderRepository.UpdateItem(order.OrderItems.FirstOrDefault(i => i.ProductId == item.ProductId));
                }
                else
                {
                    _orderRepository.AddItem(item);
                }

                order.AddEvents(new OrderUpdatedEvent(message.ClientId, order.Id, order.TotalOrder));
            }

            order.AddEvents(new OrderItemAddedEvent(message.ClientId, order.Id, message.ProductId,
                                                    message.ProductName, message.UnitPrice, message.Quantity));

            return(await _orderRepository.UnitOfWork.Commit());
        }
示例#7
0
        public async Task <bool> Handle(AddOrderItemCommand message, CancellationToken cancellationToken)
        {
            if (!IsValid(message))
            {
                return(false);
            }

            var order = await _orderRepository.GetDraftOrderByClientId(message.ClientId);

            var orderItem = new OrderItem(message.CourseId, message.CourseName, message.Price);

            if (order == null)
            {
                order = Order.OrderFactory.NewDraftOrder(message.ClientId);
                order.AddItem(orderItem);

                _orderRepository.Add(order);

                order.AddEvent(new OrderDraftStartedEvent(order.Id, message.CourseId, message.CourseName, message.ClientId));
            }
            else
            {
                var hasOrderItem = order.HasOrderItem(orderItem);
                order.AddItem(orderItem);

                if (hasOrderItem)
                {
                    _orderRepository.UpdateItem(order.OrderItems.FirstOrDefault(p => p.CourseId == orderItem.CourseId));
                }
                else
                {
                    _orderRepository.AddItem(orderItem);
                }

                // order.AddEvent(new OrderItemAddedEvent(order.Id, message.CourseId, message.CourseName, message.ClientId));
            }

            order.AddEvent(new OrderUpdatedEvent(order.Id, message.ClientId, order.TotalValue));

            return(await _orderRepository.UnitOfWork.Commit());
        }
示例#8
0
        public async Task <bool> Handle(AddOrderItemCommand command, CancellationToken cancellationToken)
        {
            if (!ValidateCommand(command))
            {
                return(false);
            }

            var order = await _orderRepository.GetOrderDraftByCustomerId(command.CustomerId);

            var item = new OrderItem(command.ProductId, command.Name, command.Quantity, command.Amount);

            if (order is null)
            {
                order = Order.OrderFactory.NewDraftOrder(command.CustomerId);
                order.AddOrderItem(item);

                _orderRepository.Add(order);
                order.AddEvent(new DraftOrderCreatedEvent(command.CustomerId, order.Id));
            }
            else
            {
                var itemExists = order.OrderItemExists(item);
                order.AddOrderItem(item);

                if (itemExists)
                {
                    _orderRepository.UpdateItem(order.OrderItems.FirstOrDefault(o => o.ProductId == item.ProductId));
                }
                else
                {
                    _orderRepository.AddItem(item);
                }

                order.AddEvent(new OrderUpdatedEvent(order.CustomerId, order.Id, order.TotalAmount));
            }

            order.AddEvent(new OrderItemAddedEvent(order.CustomerId, order.Id, command.ProductId, command.Amount, command.Quantity));
            return(await _orderRepository.UnitOfWork.Commit());
        }
示例#9
0
 public async Task <Order> OrderAddItem(Guid?orderId, [FromBody] OrderItem item)
 {
     return(await _orderRepository.AddItem(orderId, item));
 }