Beispiel #1
0
        public static Order ToOrderDbModel(OrderNewModel newModel)
        {
            var orderDbModel = new Order {
                Address = newModel.Address,
                City    = newModel.City,
                Country = newModel.Country,
                ZipCode = newModel.ZipCode
            };

            return(orderDbModel);
        }
        async public Task <IActionResult> Create(OrderNewModel newModel)
        {
            if (ModelState.IsValid)
            {
                Console.WriteLine("Model valid!");
                var order = DataMapper.ModelMapper.ToOrderDbModel(newModel);

                var user = await _userManager.GetUserAsync(User);

                //add user to the order
                order.User = user;

                //The user cart items can be retrieved from db.
                var userCartItems =
                    await _shoppingCartItemRepository.Get(it => it.User == user,
                                                          includeProperties : "Item");

                var shoppingCartItems = userCartItems.ToList();

                if (shoppingCartItems.Count < 0)
                {
                    // The item is already in the cart
                    return(View("OrderPlaced", "Ceva nu a mers cum trebuie! Nu au fost gasite produse in cos la plasarea comenzii!"));
                }

                //update the total price
                order.OrderTotal = shoppingCartItems.Sum(it => it.Item.Price * it.Amount);

                //Add a new order entity in db
                await _orderRepository.Add(order);

                //Create an array of order details.
                var orderDetails = new List <OrderDetail>(shoppingCartItems.Count);
                foreach (var item in shoppingCartItems)
                {
                    orderDetails.Add(
                        new OrderDetail
                    {
                        Order  = order,
                        Item   = item.Item,
                        Amount = Math.Min(item.Amount, item.Item.InStock),     //in case something went wrong. Don't underflow
                        Price  = item.Item.Price,
                    });
                    //Update the new stock amount
                    item.Item.InStock = Math.Max(item.Item.InStock - item.Amount, 0);
                    _itemRepository.Update(item.Item);
                }

                //Remove user cart items;
                _shoppingCartItemRepository.DeleteRange(shoppingCartItems);

                await _orderDetailRepository.AddRange(orderDetails);

                await _orderDetailRepository.SaveChangesAsync();

                return(View("OrderPlaced", "Comanda plasata cu succes!"));
            }

            //Bad model
            Console.WriteLine("Model invalid!");
            return(View("New", newModel));
        }