public async Task <bool> CreateOrder(string username, OrderProfileInputModel profile, string paymentMethod)
        {
            var user = this.usersRepository
                       .All()
                       .Where(u => u.UserName == username)
                       .FirstOrDefault();

            if (user == null)
            {
                return(false);
            }

            var order = this.OrderFactory(user, profile, paymentMethod);

            await this.ordersRepository.AddAsync(order);

            await this.ordersRepository.SaveChangesAsync();

            var products = this.cartProductRepository
                           .All()
                           .Where(x => x.ShoppingCartId == user.ShoppingCartId)
                           .AsQueryable();

            await this.OrderEntityUpdate(user, order, products);

            foreach (var entity in products)
            {
                this.cartProductRepository.Delete(entity);
            }

            await this.cartProductRepository.SaveChangesAsync();

            return(true);
        }
示例#2
0
        public IActionResult Index(OrderProfileInputModel input)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.RedirectToAction(nameof(this.Index)));
            }

            var sessionOrder = input;

            ExtensionsConf.SessionConf.SessionExtensions
            .SetDataObject <OrderProfileInputModel>(this.HttpContext.Session, "sessionOrder", sessionOrder);

            return(this.RedirectToAction(nameof(this.PaymentMethod)));
        }
        private Order OrderFactory(FamilyKitchenUser user, OrderProfileInputModel profile, string paymentMethod)
        {
            var card = this.clientCardRepository
                       .All()
                       .Where(x => x.Id == user.ClientCardId)
                       .FirstOrDefault();

            var clientCard = user.ClientCard?.DeliveryPrice;

            var order = new Order()
            {
                Status            = OrderStatus.PayingAwaiting,
                PaymentStatus     = PaymentStatus.Pending,
                PaymentMethod     = (PaymentMethod)Enum.Parse(typeof(PaymentMethod), paymentMethod),
                OrderDate         = DateTime.UtcNow,
                DeliveryDate      = DateTime.UtcNow.AddDays(2),
                DeliveryPrice     = card.DeliveryPrice,
                FamilyKitchenUser = user,
                OrderProfile      = this.mapper.Map <OrderProfile>(profile),
                TotalPrice        = 0,
            };

            return(order);
        }