Exemplo n.º 1
0
        public void Execute(ChangeOStatusDto request)
        {
            var order = _context.Orders.AsQueryable().Include(o => o.OrderLines).ThenInclude(order => order.Product).FirstOrDefault(o => o.Id == request.OrderId);


            if (order == null)
            {
                throw new EntityNotFoundException(request.OrderId, typeof(Order));
            }

            if (order.OrderStatus == OrderStatus.Delivered)
            {
                throw new ConflictOrderStatusException("Cannot change status of delivered order!");
            }

            if (order.OrderStatus == OrderStatus.OnHold)
            {
                if (request.Status == OrderStatus.Delivered)
                {
                    throw new ConflictOrderStatusException("Order cannot be changed from recieved to delivered directly!");
                }
            }

            if (request.Status == OrderStatus.Canceled || request.Status == OrderStatus.Shipped)
            {
                order.OrderStatus = request.Status;
                if (request.Status == OrderStatus.Canceled)
                {
                    foreach (var item in order.OrderLines)
                    {
                        item.Product.Stock += item.Quantity;
                    }
                }
                _context.SaveChanges();
            }
        }
Exemplo n.º 2
0
 public void ChangeStatus([FromBody] ChangeOStatusDto dto, [FromServices] IUpdateOrderStatusCommand command)
 {
     executor.ExecuteCommand(command, dto);
 }