public virtual ActionResult Podsumowanie(Cart shoppingCart)
        {
            if (!shoppingCart.Lines.Any() || shoppingCart.ShippingId == 0 || shoppingCart.PaymentId == 0 || shoppingCart.UserAddressModel == null)
            {
                return(RedirectToAction(MVC.Koszyk.Index()));
            }
            SharedShippingOrderSummaryModels paymentModel;
            SharedShippingOrderSummaryModels shippingModel;
            decimal totaltotalvalue;
            var     discount = 0;
            var     user     = _userManager.FindById(User.Identity.GetUserId <int>());

            if (user != null)
            {
                discount = user.Rabat;
            }
            var orderitemsummary = OrderViewItemsTotal(shoppingCart, out paymentModel, out shippingModel, out totaltotalvalue, discount);
            var userModel        = new CartAddressModel
            {
                NazwaFirmy  = shoppingCart.UserAddressModel.NazwaFirmy,
                Nip         = shoppingCart.UserAddressModel.Nip,
                Imie        = shoppingCart.UserAddressModel.Imie,
                KodPocztowy = shoppingCart.UserAddressModel.KodPocztowy,
                Miasto      = shoppingCart.UserAddressModel.Miasto,
                Nazwisko    = shoppingCart.UserAddressModel.Nazwisko,
                Numer       = shoppingCart.UserAddressModel.Numer,
                Telefon     = shoppingCart.UserAddressModel.Telefon,
                Ulica       = shoppingCart.UserAddressModel.Ulica,
                Email       = shoppingCart.Email
            };

            var orderModel = new OrderViewModelsSummary
            {
                OrderViewItemsTotal = orderitemsummary,
                OrderPayment        = paymentModel,
                OrderShipping       = shippingModel,
                UserAddressModel    = userModel,
                TotalTotalValue     = totaltotalvalue - Convert.ToDecimal((orderitemsummary.TotalValue * discount) / 100),
                Discount            = discount,
                DiscountValue       = Convert.ToDecimal((orderitemsummary.TotalValue * discount) / 100).ToString("c").Replace(",", ".")
            };

            if (shoppingCart.UserAddressModel.Nip != null)
            {
                orderModel.Firma = true;
            }
            return(View(orderModel));
        }
        public virtual async Task <ActionResult> Podsumowanie(OrderViewModelsSummary model, Cart shoppingCart)
        {
            if (!shoppingCart.Lines.Any())
            {
                return(RedirectToAction(MVC.Koszyk.Index()));
            }

            var user = await _userManager.FindByIdAsync(User.Identity.GetUserId <int>());

            int?userId   = null;
            var discount = 0;

            if (user != null)
            {
                userId   = user.Id;
                discount = user.Rabat;
            }

            var     orders           = new Orders();
            var     orderdetailslist = new List <OrderDetails>();
            decimal hehe             = 0;
            decimal discountVal      = 0;
            decimal?orderWeight      = 0;
            var     paymentPrice     = model.OrderPayment;
            var     shippingPrice    = model.OrderShipping;

            using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    foreach (var item in model.OrderViewItemsTotal.OrderProductList.ToList())
                    {
                        if (!item.ItemRemoved)
                        {
                            var product = _appRepository.GetSingle <Products>(i => i.ProductId == item.Id);

                            if (product.Quantity - product.ReservedQuantity >= item.Quantity)
                            {
                                var orderD = new OrderDetails
                                {
                                    ProductId     = item.Id,
                                    Quantity      = item.Quantity,
                                    ProdPrice     = item.Price,
                                    SubTotalPrice = item.TotalValue
                                };
                                _dbContext.OrderDetails.Add(orderD);
                                orderdetailslist.Add(orderD);
                                hehe        += item.TotalValue;
                                orderWeight += product.Weight * item.Quantity;
                                product.ReservedQuantity += item.Quantity;
                                product.OrdersCount      += item.Quantity;
                                _dbContext.Products.AddOrUpdate(product);
                            }
                            else
                            {
                                if (product.Quantity - product.ReservedQuantity <= 0)
                                {
                                    item.ItemRemoved = true;
                                    model.HasErrors  = true;
                                }
                                else if (product.Quantity - product.ReservedQuantity < item.Quantity)
                                {
                                    item.QuantityChanged = true;
                                    item.OldQuantity     = item.Quantity;
                                    item.Quantity        = (product.Quantity ?? 0) - product.ReservedQuantity;
                                    item.TotalValue      = item.Price * item.Quantity;
                                    var firstOrDefault = shoppingCart.Lines.FirstOrDefault(x => x.Id == item.Id);
                                    if (firstOrDefault != null)
                                    {
                                        firstOrDefault.Quantity = item.Quantity;
                                    }
                                    model.HasErrors = true;
                                    hehe           += item.TotalValue;
                                }
                            }
                        }
                        else
                        {
                            model.OrderViewItemsTotal.OrderProductList.Remove(item);
                        }
                    }
                    discountVal = Convert.ToDecimal(hehe * discount / 100);
                    if (model.HasErrors)
                    {
                        model.OrderViewItemsTotal.TotalValue = hehe;
                        model.TotalTotalValue = hehe + (hehe > 250 ? 0 : model.OrderShipping.Price) + (hehe > 250 ? 0 : model.OrderPayment.Price) - discountVal;
                        return(View(model));
                    }
                    if (model.OrderViewItemsTotal.OrderProductList.Count == 0)
                    {
                        shoppingCart.Clear();
                        return(RedirectToAction(MVC.Koszyk.Index()));
                    }

                    orders = new Orders
                    {
                        OrderWeight         = orderWeight ?? 0,
                        Email               = model.UserAddressModel.Email,
                        ProductsPrice       = hehe,
                        TotalPrice          = (hehe + (hehe > 250 ? 0 : paymentPrice.Price) + (hehe > 250 ? 0 : shippingPrice.Price)) - discountVal,
                        Name                = model.UserAddressModel.Imie,
                        Surname             = model.UserAddressModel.Nazwisko,
                        OrderDate           = DateTime.Today,
                        SentDate            = DateTime.Today,
                        ShippingId          = model.OrderShipping.Id,
                        PaymentId           = model.OrderPayment.Id,
                        City                = model.UserAddressModel.Miasto,
                        Street              = model.UserAddressModel.Ulica,
                        Number              = model.UserAddressModel.Numer,
                        PostalCode          = model.UserAddressModel.KodPocztowy,
                        OrderDetails        = orderdetailslist,
                        UserId              = userId,
                        OrderInfo           = (model.OrderPayment.Id == 1 || model.OrderPayment.Id == 3)?"Oczekujące":"Przyjęte",
                        UserHints           = model.UserHints,
                        NazwaFirmy          = model.UserAddressModel.NazwaFirmy,
                        OrderNip            = model.UserAddressModel.Nip,
                        Phone               = model.UserAddressModel.Telefon,
                        Discount            = discount,
                        FreeShippingPayment = hehe > 250
                    };
                    _dbContext.Orders.Add(orders);
                    await _dbContext.SaveChangesAsync();

                    transaction.Complete();
                }
                catch (Exception ex)
                {
                    if (ex.GetType() != typeof(UpdateException))
                    {
                    }
                }
            }
            var email = new OrderSumEmail
            {
                To                     = model.UserAddressModel.Email,
                CallbackUrl            = Url.Action(MVC.Konto.HistoriaZamowien()),
                Id                     = orders.OrderId,
                OrderViewModelsSummary = new OrderViewModelsSummary
                {
                    Firma           = model.UserAddressModel.Nip != null,
                    TotalTotalValue = orders.TotalPrice,
                    Discount        = discount,
                    DiscountValue   = discountVal.ToString("c"),
                    OrderPayment    = new SharedShippingOrderSummaryModels
                    {
                        Description = paymentPrice.Description,
                        Name        = paymentPrice.Name,
                        Price       = hehe > 250?0:paymentPrice.Price
                    },
                    OrderShipping = new SharedShippingOrderSummaryModels
                    {
                        Description = shippingPrice.Description,
                        Name        = shippingPrice.Name,
                        Price       = hehe > 250 ? 0 : shippingPrice.Price
                    },
                    UserAddressModel    = model.UserAddressModel,
                    OrderViewItemsTotal = new OrderViewItemsTotal
                    {
                        TotalValue       = hehe,
                        OrderProductList = orderdetailslist.Select(m => new OrderItemSummary
                        {
                            Image      = m.Products.IconName ?? "NoPhoto_small",
                            Name       = m.Products.Name,
                            Price      = m.Products.Price ?? 0,
                            Quantity   = m.Quantity,
                            TotalValue = m.SubTotalPrice,
                            Packing    = m.Products.Packing
                        }).ToList()
                    }
                }
            };

            email.Send();
            shoppingCart.Clear();
            return(View("OrderSubmitted", orders.OrderId));
        }