Beispiel #1
0
        public async Task <IActionResult> ConfirmOrder()
        {
            List <Matratt> cart;
            var            currentUser = await _userManager.GetUserAsync(HttpContext.User);

            if (string.IsNullOrEmpty(HttpContext.Session.GetString(sessionName)))
            {
                return(RedirectToAction("Menu", "Store"));
            }
            else
            {
                var temp = HttpContext.Session.GetString(sessionName);
                cart = JsonConvert.DeserializeObject <List <Matratt> >(temp);

                var            cartDistinct        = cart.Select(x => x.MatrattId).Distinct().ToList(); // Plockar ut distinkta MatrattID ur cart
                List <Matratt> cartDistinctMatratt = new List <Matratt>();                              // Konverterar distincta IDn till typen Matratt

                foreach (var item in cartDistinct)                                                      // Lägger till matratt i lista av distinkta maträtter
                {
                    var query = (from c in cart where c.MatrattId == item select c).First();
                    cartDistinctMatratt.Add(query);
                }

                var order = new Bestallning // Skapar en grundbeställning
                {
                    KundId           = currentUser.Id,
                    BestallningDatum = DateTime.Now,
                    Totalbelopp      = cart.Sum(x => x.Pris),
                    Levererad        = false
                };

                if (User.IsInRole("premium"))
                {
                    if (cart.Count >= 3)
                    {
                        order.Totalbelopp = Convert.ToInt32(order.Totalbelopp * .8);
                    }

                    foreach (var item in cart)
                    {
                        currentUser.Points += 10;
                    }

                    if (currentUser.Points >= 100)
                    {
                        var cheapest = cart.OrderBy(x => x.Pris).First();
                        cart.First(x => x.MatrattId == cheapest.MatrattId).Pris = 0;
                        currentUser.Points -= 100;
                    }

                    _applicationContext.SaveChanges();
                }

                _tomasosContext.Bestallning.Add(order);

                var bestallningMatratt = new BestallningMatratt();

                foreach (var item in cartDistinctMatratt)
                {
                    bestallningMatratt = new BestallningMatratt
                    {
                        BestallningId = order.BestallningId,
                        Antal         = cart.Where(x => x.MatrattId == item.MatrattId).Count(),
                        MatrattId     = item.MatrattId
                    };

                    _tomasosContext.BestallningMatratt.Add(bestallningMatratt);
                }

                _tomasosContext.SaveChanges();
                _tomasosContext.Dispose();
            }

            return(RedirectToAction("Orders", "User"));
        }