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