public async Task <SiteCartVM> Cart() { ViewBag.P = @Request.Headers["Referer"].ToString(); var categories = await _context.ProductCategories.ToListAsync(); var user = _context.Users.SingleOrDefault(u => u.UserName == User.Identity.Name); var products = (from a in _context.Products.Where(x => x.ProductStatus == ProductStatus.آماده_برای_فروش) .Join(_context.ProductCategories, ac => ac.CategoryIdLvl1, cc => cc.Id, (ac, cc) => new { ac, cc } ).ToList() group a by a.ac.Code into pp select new ProductWithMeterForFactorVM { Code = pp.FirstOrDefault().ac.Code, Name = pp.FirstOrDefault().ac.Name + " " + removeDuplicate(String.Join(", ", (pp.Select(x => x.cc.ProductCategoryType == 7 ? x.cc.Name : "")).ToArray())).Replace(",", ""), Price = pp.FirstOrDefault().ac.Price, ImageUrl = pp.FirstOrDefault().ac.ImageUrl, Id = pp.FirstOrDefault().ac.Id, }) .ToList(); var sendPrice = await _context.Settings.SingleOrDefaultAsync(x => x.Key == "SendPrice"); var vm = new SiteCartVM(); if (user != null) { if (user.Phone != null) { vm.IsProfileCompelete = true; } } var cart = Request.Cookies["cart"]; if (cart != null) { vm.ProductIds = cart.Split("_").Select(x => int.Parse(x.Split("-")[0])).ToList(); vm.Lengths = cart.Split("_").Select(x => int.Parse(x.Split("-")[1])).ToList(); vm.Products = products.Where(x => vm.ProductIds.Contains(x.Id)).ToList(); foreach (var item in vm.ProductIds) { var l = vm.Lengths.ElementAt(vm.ProductIds.IndexOf(item)); vm.Products.Where(x => x.Id.Equals(item)).SingleOrDefault().Meter = l / 100; double productPricePerMeter = vm.Products.Where(x => x.Id.Equals(item)).SingleOrDefault().Price; vm.Price += productPricePerMeter * l / 100; } vm.SendPrice = int.Parse(sendPrice.Value); vm.TotalPrice = vm.Price + vm.SendPrice; } return(vm); }
public async Task <IActionResult> Cart() { ViewBag.P = @Request.Headers["Referer"].ToString(); var categories = await _context.ProductCategories.ToListAsync(); var user = _context.Users.SingleOrDefault(u => u.UserName == User.Identity.Name); var sendPrice = await _context.Settings.SingleOrDefaultAsync(x => x.Key == "SendPrice"); var vm = new SiteCartVM(); if (user != null) { if (user.PhoneNumber != null) { vm.IsProfileCompelete = true; } } var cart = Request.Cookies["tempcart"]; if (cart != null) { vm.ProductIds = cart.Split("_").Select(x => x.Split("-")[0]).ToList(); vm.Count = cart.Split("_").Select(x => int.Parse(x.Split("-")[1])).ToList(); var products = _context.Products.Where(x => vm.ProductIds.Contains(x.Code)).ToLookup(p => p.Code, p => new ProductWithMeterForFactorVM { Name = p.Name, Code = p.Code, Discount = p.Discount, ImageUrl = p.ImageUrl, Price = p.Price, Id = p.Id, }).ToList(); vm.Products = new List <ProductWithMeterForFactorVM>(); foreach (IGrouping <string, ProductWithMeterForFactorVM> item in products) { var x = item.FirstOrDefault(); vm.Products.Add(item.FirstOrDefault()); } foreach (var item in vm.ProductIds) { int count = vm.Count.ElementAt(vm.ProductIds.IndexOf(item)); vm.Products.Where(x => x.Code.Equals(item)).SingleOrDefault().Count = count; var pr = vm.Products.Where(x => x.Code.Equals(item)).SingleOrDefault(); vm.Price += (pr.Price * count) - ((pr.Discount * pr.Price / 100) * pr.Count); } vm.SendPrice = (sendPrice != null) ? int.Parse(sendPrice.Value) : 25000; vm.TotalPrice = vm.Price + vm.SendPrice; } return(PartialView(vm)); }
public async Task <IActionResult> SubmitBasket() { var user = _context.Users.SingleOrDefault(u => u.UserName == User.Identity.Name); if (user == null) { return(new JsonResult(new { status = 0, message = "پروفایل خود را تکمیل کنید" })); } var sendPrice = await _context.Settings.SingleOrDefaultAsync(x => x.Key == "SendPrice"); var vm = new SiteCartVM(); var cart = Request.Cookies["tempcart"]; var listOfFactorItems = new List <CartItem>(); if (cart != null) { vm.ProductIds = cart.Split("_").Select(x => x.Split("-")[0]).ToList(); vm.Count = cart.Split("_").Select(x => int.Parse(x.Split("-")[1])).ToList(); var products = _context.Products.Where(x => vm.ProductIds.Contains(x.Code)).ToLookup(p => p.Code, p => new ProductWithMeterForFactorVM { Name = p.Name, Code = p.Code, Discount = p.Discount, ImageUrl = p.ImageUrl, Price = p.Price, Id = p.Id, }).ToList(); vm.Products = new List <ProductWithMeterForFactorVM>(); foreach (IGrouping <string, ProductWithMeterForFactorVM> item in products) { var x = item.FirstOrDefault(); vm.Products.Add(item.FirstOrDefault()); } foreach (var item in vm.ProductIds) { int count = vm.Count.ElementAt(vm.ProductIds.IndexOf(item)); vm.Products.Where(x => x.Code.Equals(item)).SingleOrDefault().Count = count; var pr = vm.Products.Where(x => x.Code.Equals(item)).SingleOrDefault(); var factorItem = new CartItem() { ProductId = pr.Id, Price = ((pr.Price) - (pr.Discount * pr.Price / 100)).ToString(), UserName = user.UserName, Date = DateTime.Now, Quantity = count, }; listOfFactorItems.Add(factorItem); vm.Price += (pr.Price * count) - ((pr.Discount * pr.Price / 100) * pr.Count); vm.DiscountPrice += (pr.Discount * pr.Price / 100) * pr.Count; } vm.SendPrice = (sendPrice != null) ? int.Parse(sendPrice.Value) : 25000; vm.TotalPrice = vm.Price + vm.SendPrice; } else { return(new JsonResult(new { status = 0, message = "مشکلی در سبد خرید شما به وجود آمده است" })); } var factor = new ShoppingCart() { UserName = user.UserName, Date = DateTime.Now, Price = vm.Price.ToString(), Address = user.Address, CartItems = listOfFactorItems, DiscountPercent = vm.DiscountPrice.ToString(), Name = user.FirstName + " " + user.LastName, PaymentType = PaymentType.Online, Phone = user.Phone, PhoneNumber = user.PhoneNumber, RequestCode = RandomString(5), SendPrice = vm.SendPrice.ToString(), Status = RequestStatus.Confirmed, }; await _context.CartItems.AddRangeAsync(listOfFactorItems); await _context.ShoppingCarts.AddRangeAsync(factor); await _context.SaveChangesAsync(); return(new JsonResult(new { status = 1, message = "با موفقیت انجام شد" })); }