Example #1
0
        // Post Orders/Create
        public async Task <int> CreateAsync(ApplicationUser user, OrderInpitModel model)
        {
            if (model.TakeAway)
            {
                model.AddressId = this.addressRepository.All().Where(a => a.DisplayName == GlobalConstants.TakeAway).FirstOrDefault()?.Id;
            }

            var order = new Order()
            {
                AddInfo   = model.AddInfo,
                AddressId = model.AddressId,
                UserId    = user.Id,
                Status    = OrderStatus.Unprocessed,
                CreatedOn = DateTime.UtcNow,
                TakeAway  = model.TakeAway,
            };

            foreach (var item in user.ShopingCart.CartItems)
            {
                order.Bag.CartItems.Add(item);
            }

            await this.ordersRepository.AddAsync(order);

            await this.ordersRepository.SaveChangesAsync();

            user.ShopingCart.CartItems.Clear();

            return(order.Id);
        }
Example #2
0
        public async Task <IActionResult> Create(OrderInpitModel model)
        {
            if (DateTime.Now.TimeOfDay > GlobalConstants.CloseTime || DateTime.Now.TimeOfDay < GlobalConstants.OpenTime)
            {
                return(this.Redirect("/"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.Redirect("ShoppingCart/Index"));
            }

            try
            {
                ApplicationUser user = await this.GetUser(model);

                var id = await this.ordersService.CreateAsync(user, model);

                await this.hubAdmin.Clients.All.SendAsync("OperatorNewOrder", id);

                this.TempData["NewOrder"] = true;
                return(this.Ok());
            }
            catch (Exception e)
            {
                await this.logger.WriteException(e);

                await this.logger.WriteObject(typeof(OrderInpitModel), model);

                return(this.BadRequest());
            }
        }
Example #3
0
        private async Task <ApplicationUser> GetUser(OrderInpitModel model)
        {
            var user = await this.userManager.GetUserAsync(this.User);

            if (user == null && this.Request.Cookies.ContainsKey(GlobalConstants.UserIdCookieKey))
            {
                user = await this.userManager.FindByIdAsync(this.Request.Cookies[GlobalConstants.UserIdCookieKey]);
            }

            if (user == null)
            {
                user = new ApplicationUser()
                {
                    UserName    = model.Username,
                    PhoneNumber = model.Phone,
                    Email       = $"{this.Request.HttpContext.Connection.RemoteIpAddress}@tapas.bg{DateTime.Now}",
                };
                await this.userManager.CreateAsync(user);

                this.Response.Cookies.Append(GlobalConstants.UserIdCookieKey, user.Id, new CookieOptions()
                {
                    Domain   = this.Request.Host.Host,
                    HttpOnly = true,
                    Secure   = true,
                    Expires  = DateTime.UtcNow.AddYears(2),
                    Path     = GlobalConstants.IndexRoute,
                });
            }

            return(user);
        }
Example #4
0
        // Orders/Create
        public OrderInpitModel GetOrderInputModel(ApplicationUser user)
        {
            if (user is null)
            {
                throw new ArgumentNullException();
            }

            var model = new OrderInpitModel()
            {
                TakeAway          = false,
                AddInfo           = string.Empty,
                ApplicationUserId = user.Id,
                Addresses         = user.Addresses
                                    .Select(x => new AddressViewModel()
                {
                    Id           = x.Id,
                    AddInfo      = x.AddInfo,
                    Street       = x.Street,
                    StreetNumber = x.StreetNumber,
                    DisplayName  = x.DisplayName,
                }).ToList(),
                CartItems = this.cartRepository
                            .All()
                            .Where(x => x.Id == user.ShopingCart.Id)
                            .FirstOrDefault()
                            ?.CartItems
                            .Select(x => new ShopingItemsViewModel()
                {
                    ProductId    = x.ProductId,
                    ProductName  = x.Product.Name,
                    ProductPrice = x.Size.Price,
                    Quantity     = x.Quantity,
                    Description  = x.Description,
                    Extras       = x.ExtraItems
                                   ?.Select(e => new ExtraCartItemModel()
                    {
                        Name     = e.Extra.Name,
                        Price    = e.Extra.Price,
                        Quantity = e.Quantity,
                    }).ToList(),
                    Size = new ProductSizeViewModel()
                    {
                        SizeName = this.sizeRepository
                                   .All()
                                   .Where(s => s.MenuProductId == x.ProductId)
                                   .Count() > 1 ? x.Size.SizeName : null,
                    },
                }).ToList(),
                PackegesPrice = this.itemsRepository
                                .All()
                                .Where(x => x.ShopingCartId == user.ShopingCart.Id)
                                .Sum(x => Math.Ceiling((decimal)x.Quantity / x.Size.MaxProductsInPackage) * x.Size.Package.Price),
            };

            model.OrderPrice = model.CartItems.Sum(x => x.ItemPrice) + model.PackegesPrice + model.DeliveryFee;

            return(model);
        }
Example #5
0
        // Post Orders/Create
        public async Task <int> CreateAsync(ApplicationUser user, OrderInpitModel model)
        {
            var address = JsonConvert.DeserializeObject <DeliveryAddress>(model.Address);

            var cart = JsonConvert.DeserializeObject <List <ShoppingCartItemDto> >(model.Cart);

            var order = new Order()
            {
                Name      = model.Username,
                Phone     = model.Phone,
                AddInfo   = model.AddInfoOrder,
                AddressId = address.Id,
                Address   = address,
                User      = user,
                UserId    = user.Id,
                Status    = OrderStatus.Unprocessed,
                CreatedOn = DateTime.Now,
                TakeAway  = model.TakeAway,
                Cutlery   = model.CutleryCount,
                Bag       = new ShopingCart()
                {
                    CartItems = cart.Select(x => new ShopingCartItem()
                    {
                        SizeId      = x.SizeId,
                        ProductId   = x.ProductId,
                        Quantity    = x.Quantity,
                        Description = x.Description,
                        ExtraItems  = x.Extras.Select(e => new ExtraItem()
                        {
                            ExtraId  = e.Id,
                            Quantity = e.Quantity,
                        }).ToList(),
                    }).ToList(),
                },
            };

            if (model.TakeAway)
            {
                order.Address   = this.addressRepository.All().Where(a => a.DisplayName == GlobalConstants.TakeAway).FirstOrDefault();
                order.AddressId = order.Address.Id;
            }

            await this.ordersRepository.AddAsync(order);

            await this.ordersRepository.SaveChangesAsync();

            return(order.Id);
        }
        public async Task <IActionResult> Create(OrderInpitModel model)
        {
            if (DateTime.Now.TimeOfDay > GlobalConstants.CloseTime || DateTime.Now.TimeOfDay < GlobalConstants.OpenTime)
            {
                return(this.Redirect("/"));
            }

            if (!this.ModelState.IsValid)
            {
                foreach (var item in this.ModelState)
                {
                    Console.WriteLine(item.Key.ToString());
                    foreach (var error in item.Value.Errors)
                    {
                        Console.WriteLine(error.ErrorMessage);
                    }
                }

                return(this.RedirectToAction("Create"));
            }

            try
            {
                var user = await this.userManager.GetUserAsync(this.User);

                var id = await this.ordersService.CreateAsync(user, model);

                await this.hubAdmin.Clients.All.SendAsync("OperatorNewOrder", id);

                return(this.Redirect("/Orders/UserOrders"));
            }
            catch (Exception e)
            {
                this.logger.LogInformation(GlobalConstants.DefaultLogPattern, this.User?.Identity.Name, e.Message, e.StackTrace);
                return(this.BadRequest());
            }
        }