예제 #1
0
        public async Task <ActionResult> Confirm([FromQuery] string idList, [FromQuery] string ProductID, [FromQuery] int Amount)
        {
            if (string.IsNullOrEmpty(idList) && string.IsNullOrEmpty(ProductID))
            {
                return(Redirect("/Home"));
            }

            string            userID            = HttpContext.User.Identity.Name;
            OrderConfirmModel orderConfirmModel = new OrderConfirmModel();

            orderConfirmModel.ShipAddresses = new List <SelectListItem>();
            orderConfirmModel.OrderItem     = new Order()
            {
                OrderID    = Guid.NewGuid(),
                UserID     = userID,
                OrderDate  = DateTime.Now,
                OrderState = OrderStatus.PendingPayment
            };


            Guid tempGuid = Guid.Empty;
            List <ShipAddress> addressStringList = await _shipAddressRepository.GetAddressAsync(userID, _MaxAddressCount, 0);

            foreach (ShipAddress sa in addressStringList)
            {
                orderConfirmModel.ShipAddresses.Add(
                    new SelectListItem {
                    Text = sa.ToString(), Value = sa.ToString()
                });
            }
            if (string.IsNullOrEmpty(idList))
            {
                orderConfirmModel.OrderDetails = await CreateOrderDetailsByProductAsync(
                    orderConfirmModel.OrderItem.OrderID, ProductID, Amount);
            }
            else
            {
                orderConfirmModel.OrderDetails = await CreateOrderDetailsByCartIDListAsync(
                    orderConfirmModel.OrderItem.OrderID, idList);
            }
            orderConfirmModel.IDList        = idList;
            orderConfirmModel.ProductID     = ProductID;
            orderConfirmModel.ProductAmount = Amount;
            foreach (OrderDetail od in orderConfirmModel.OrderDetails)
            {
                orderConfirmModel.TotalAmount += od.SubTotal;
            }

            return(View(orderConfirmModel));
        }
예제 #2
0
        public async Task <IActionResult> ConfirmOrder(OrderConfirmModel confirmModel)
        {
            if (ModelState.IsValid)
            {
                var userId = User.Claims.First(n => n.Type == ClaimTypes.NameIdentifier).Value;
                var user   = await _context.Users.FirstAsync(n => n.Id == userId);

                var cartProducts = await _context.ProductCards
                                   .Where(x => x.UserId == user.Id && !x.OrderId.HasValue)
                                   .Include(x => x.Product)
                                   .ToListAsync();

                Order order = new Order
                {
                    Date       = DateTime.Now,
                    Address    = user.Address,
                    UserId     = user.Id,
                    StatusId   = 1,
                    PostalCode = user.PostalCode,
                    TotalPrice = cartProducts.Sum(x => x.Product.Price)
                };
                var orderAdded = await _context.AddAsync(order);

                await _context.SaveChangesAsync();

                user.PhoneNumber = confirmModel.Phone;
                user.Address     = confirmModel.Address;
                user.PostalCode  = confirmModel.PostalCode;

                _context.UpdateRange(cartProducts.Select(x => {
                    x.SoldPrice = x.Product.Price;
                    x.OrderId   = order.Id;
                    return(x);
                }));
                _context.Update(user);
                await _context.SaveChangesAsync();

                return(LocalRedirect("/Home/Index?msg=confirmorder"));
            }
            return(View("Index"));
        }