// 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); }
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()); } }
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); }
// 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); }
// 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()); } }