コード例 #1
0
        internal async Task <int> PlaceOrderAsync(CheckoutVM input)
        {
            decimal?orderPrice = await GetOrderPriceAsync();

            var   orderTime = DateTime.Now;
            Order myOrder   = new Order
            {
                CustomerId = input.Id,
                FirstName  = input.FirstName,
                LastName   = input.LastName,
                Street     = input.Street,
                Zip        = input.Zip,
                City       = input.City,
                Date       = orderTime,
                Cart       = accessor.HttpContext.Request.Cookies["shoppingCart"],
                TotPrice   = orderPrice
            };

            context.Orders.Add(myOrder);
            context.SaveChanges();
            var result = context.Orders
                         .Where(p => p.Date == orderTime)
                         .Select(p => p.Id)
                         .ToArray();

            return(result[0]);
        }
コード例 #2
0
        public async Task <IActionResult> CheckoutAsync()
        {
            var User = await mService.GetUser();

            CheckoutVM input;

            if (User != null)
            {
                input = new CheckoutVM
                {
                    Id        = User.Id,
                    FirstName = User.FirstName,
                    LastName  = User.LastName,
                    Email     = User.Email,
                    Street    = User.Street,
                    Zip       = User.Zip,
                    City      = User.City,
                    OrderCart = await pService.GetSummaryVMAsync()
                };
            }
            else
            {
                input = new CheckoutVM
                {
                    OrderCart = await pService.GetSummaryVMAsync()
                };
            };

            return(View(input));
        }
コード例 #3
0
        public async Task <IActionResult> Checkout()
        {
            var rqf     = Request.HttpContext.Features.Get <IRequestCultureFeature>();
            var culture = rqf.RequestCulture.Culture;

            var cookieValue = Request.Cookies["Token"];

            if (cookieValue == null)
            {
                return(RedirectToAction("index", "login"));
            }
            UserClient user = await _db.UserClients.FirstOrDefaultAsync(a => a.Token == cookieValue);

            if (user == null)
            {
                return(RedirectToAction("index", "login"));
            }

            List <CartItem> carts = HttpContext.Session.GetJson <List <CartItem> >("Cart") ?? new List <CartItem>();
            CheckoutVM      model = new CheckoutVM {
                Breadcrumb = new Breadcrumb
                {
                    Path = new Dictionary <string, string> {
                        { "Home", Url.Action("Index", "Home") },
                        { "Checkout", null }
                    },
                    Page = Page.Checkout
                },
                LanguageId = _db.Languages.FirstOrDefault(x => x.LanguageCode == culture.ToString()).Id
            };

            foreach (var cart in carts)
            {
                if (await _db.OrderProducts.FirstOrDefaultAsync(x => x.ProductId == cart.ProductId && x.UserClientId == user.Id && x.Complete == Complete.Processsing && x.Status == true) != null)
                {
                    _db.OrderProducts.FirstOrDefault(x => x.ProductId == cart.ProductId && x.UserClientId == user.Id && x.Complete == Complete.Processsing && x.Status == true).Quantity += cart.Quantity;
                    await _db.SaveChangesAsync();
                }
                else
                {
                    OrderProduct orderProduct = new OrderProduct
                    {
                        ProductId = cart.ProductId,
                        Price     = cart.Price,
                        Quantity  = cart.Quantity,
                        CreatedAt = DateTime.Now,
                        User      = user,
                        Status    = true,
                        Complete  = Complete.Processsing,
                        ColorId   = cart.ColorId
                    };
                    await _db.OrderProducts.AddAsync(orderProduct);

                    await _db.SaveChangesAsync();
                }
            }
            model.OrderProducts = await _db.OrderProducts.Include("Product").Where(x => x.UserClientId == user.Id && x.Status == true && x.Complete == Complete.Processsing).OrderByDescending(x => x.CreatedAt).ToListAsync();

            return(View(model));
        }
コード例 #4
0
 public void FillCountries(CheckoutVM model)
 {
     model.Countries = db.Countries.OrderBy(o => o.CountryName).Select(c => new SelectListItem()
     {
         Text = c.CountryName, Value = c.CountryId.ToString()
     }).ToList();
 }
コード例 #5
0
        public async Task <IActionResult> PaymentAsync(CheckoutVM model)
        {
            if (model.BrojKarata > (_context.DvoranaTipSjedista.First(w => w.TipSjedistaId == model.TipSjedistaId && w.DvoranaId == _context.Termin.First(q => q.Id == model.TerminId).DvoranaId).BrojSjedista
                                    - _context.Narudzba.Where(w => w.TerminId == model.TerminId && w.TipSjedistaId == model.TipSjedistaId).Sum(a => (int?)a.Kolicina) ?? 0))
            {
                return(Redirect("~/Termini/Checkout/" + model.TerminId.ToString()));
            }

            Data.Models.Termin      termin      = _context.Termin.Include("Predstava").First(w => w.Id == model.TerminId);
            Data.Models.TipSjedista tipSjedista = _context.TipSjedista.First(w => w.Id == model.TipSjedistaId);

            string Naziv  = termin.Predstava.Naziv + " " + termin.DatumVrijeme.ToString("dd.MM.yyyy HH:mm") + " " + tipSjedista.Naziv;
            double Cijena = (termin.BaznaCijenaKarte * tipSjedista.CijenaKarteMultiplier) - (termin.BaznaCijenaKarte * tipSjedista.CijenaKarteMultiplier * _context.Kupac.Where(w => w.Username == HttpContext.User.Identity.Name).Select(s => s.TipKorisnika.CijenaKartePopust).First());

            TempData["TerminId"]      = model.TerminId;
            TempData["BrojKarata"]    = model.BrojKarata;
            TempData["TipSjedistaId"] = model.TipSjedistaId;
            TempData["CijenaKarte"]   = Cijena;

            string SucessUrl = "http://" + Request.Host.ToString() + "/Termini/Checkout/PaymentSuccess";
            string CancelUrl = "http://" + Request.Host.ToString();

            string link = await PayPalHelper.GeneratePayment(Naziv, (float)Cijena / 2, model.BrojKarata, SucessUrl, CancelUrl);

            return(Redirect(link));
        }
コード例 #6
0
        public ActionResult Checkout(CheckoutVM checkout)
        {
            decimal total = 0;

            foreach (var item in cart.OrderItems)
            {
                total += (item.OrderItemProduct.ProductPrice * item.OrderQuantity);
            }
            Order currentOrder = new Order {
                OrderTotal = total,
                OrderItems = new List <OrderItems>(),
                OrderDate  = DateTime.Now,
                CustomerID = (int)HttpContext.Session.GetInt32("CustomerID"),
                LocationID = (int)HttpContext.Session.GetInt32("LocationID")
            };

            foreach (var thing in cart.OrderItems)
            {
                currentOrder.OrderItems.Add(new OrderItems {
                    OrderQuantity = thing.OrderQuantity,
                    ProductID     = thing.ProductID
                });
            }

            _storeBL.CreateOrder(currentOrder);
            _storeBL.UpdateInventory(currentOrder);
            _logger.LogWarning($"User Checkout!");
            cart.OrderItems.Clear();
            return(RedirectToAction("Index", "Home"));
        }
コード例 #7
0
        public IActionResult CheckoutCart()
        {
            CheckoutVM model = new CheckoutVM();

            model.Cart = _cart;
            return(View(model));
        }
コード例 #8
0
        public ActionResult Checkout()
        {
            string     currency  = CookieService.GetCurrency(Request.Cookies);
            CheckoutVM viewModel = new CheckoutVM()
            {
                CurrencyCode = currency
            };

            // If we are a guest on the site use cookies for the shopping cart
            if (!UserService.IsUserConnected(System.Web.HttpContext.Current.User))
            {
                // Get products using the CookieService
                viewModel.Products = CookieService.GetShoppingCartProducts(Request.Cookies);

                viewModel.Subtotal = ShoppingCartService.GetSubTotal(viewModel.Products, currency);
                // Reverse the list so the most recent products are first
                viewModel.Products.Reverse();
                return(View(viewModel));
            }

            ShoppingCart shoppingCart = new ShoppingCartManager().GetShoppingCartByUser(User.Identity.GetUserId());

            viewModel.Products = new ShoppingCartProductManager().GetShoppingCartProductByShoppingCartId(shoppingCart.ShoppingCartId);


            viewModel.Subtotal = ShoppingCartService.GetSubTotal(viewModel.Products, currency);
            // Reverse the list so the most recent products are first
            viewModel.Products.Reverse();
            return(View(viewModel));
        }
コード例 #9
0
        public void AddPyramidValuesByCoupon(CheckoutVM model)
        {
            var coupon  = db.Coupons.First(c => c.CouponId == model.CouponId);
            var pyramid = db.Pyramids.First(p => p.SiteUserId == coupon.SiteUserId);

            SavePyramidValues(pyramid, model);
        }
コード例 #10
0
        public void AddPyramidValuesToBP(CheckoutVM model, int customerId)
        {
            var customer = db.Customers.First(c => c.CustomerId == customerId);
            var bp       = db.BPs.First(b => b.BPId == customer.BPId);
            var pyramid  = db.Pyramids.First(p => p.SiteUserId == bp.SiteUserId);

            SavePyramidValues(pyramid, model);
        }
コード例 #11
0
        public ActionResult Payment()
        {
            //var checkout = Session["checkout"] as CheckOutDTO;
            Mapper.Initialize(cfg => cfg.CreateMap <CheckOutDTO, CheckoutVM>());
            CheckoutVM vm = Mapper.Map <CheckOutDTO, CheckoutVM>(checkout);

            return(PartialView("_Payment", vm));
        }
コード例 #12
0
        public void AddPyramidValuesRandom(CheckoutVM model)
        {
            var pyramid = db.Pyramids.Where(p => p.PyramidParentId == null).OrderBy(p => Guid.NewGuid()).FirstOrDefault();

            if (pyramid != null)
            {
                SavePyramidValues(pyramid, model);
            }
        }
コード例 #13
0
        public ActionResult Pay(CheckoutVM model)
        {
            model.Countries = db.GetCountries();
            CartVM cart = (CartVM)Session["Cart"];

            model.Details       = cart.Products;
            model.DeliveryPrice = GetDeliveryPrice(model.DeliveryCountryId);
            return(View(model));
        }
コード例 #14
0
        public async Task <IActionResult> CheckoutAsync(CheckoutVM input)
        {
            int orderNum = await pService.PlaceOrderAsync(input);

            pService.DeleteCart();
            TempData["Message"] = $"{orderNum}";


            return(RedirectToAction(nameof(CheckoutConfirmed)));
        }
コード例 #15
0
        public IActionResult Edit(CheckoutVM checkoutVM, int Id)
        {
            var edit = _checkoutRepository.Edit(checkoutVM, Id);

            if (edit > 0)
            {
                return(Ok(edit));
            }
            return(BadRequest("Can't be edited"));
        }
コード例 #16
0
        public IActionResult Create(CheckoutVM checkoutVM)
        {
            var create = _checkoutRepository.Create(checkoutVM);

            if (create > 0)
            {
                return(Ok(create));
            }
            return(BadRequest("Can't be created"));
        }
コード例 #17
0
        public IActionResult Checkout(int id)
        {
            CheckoutVM model = new CheckoutVM();

            model.incomesOfSharedBoats = db.IncomesOfSharedBoats.Include(c => c.Boat).Where(c => c.BoatID == id && c.IsCheckedOut == false).ToList();
            model.Expenses             = db.Expenses.Where(c => c.BoatID == id && c.IsCheckedOut == false).ToList();
            ViewBag.BoatName           = db.Boats.Find(id).BoatName;
            ViewBag.BoatId             = id;
            return(View(model));
        }
コード例 #18
0
        public PartialViewResult Addresses()
        {
            //var checkOut = Session["checkout"] as CheckOutDTO;

            Mapper.Initialize(cfg => cfg.CreateMap <CheckOutDTO, CheckoutVM>());
            CheckoutVM vm = Mapper.Map <CheckOutDTO, CheckoutVM>(checkout);

            ViewBag.NoCost = Utils.GetValueCurrencyDisplay(Utils.getCurrencyName(CurrentCurrency, CurrentLanguage), 0);
            return(PartialView("_UserAddresses", vm));
        }
コード例 #19
0
 public int Create(CheckoutVM checkoutVM)
 {
     using (SqlConnection connection = new SqlConnection(_configuration.GetConnectionString("MyConnection")))
     {
         var procName = "SP_Insert_Checkout";
         parameters.Add("receiptId", checkoutVM.receiptId);
         var Insert = connection.Execute(procName, parameters, commandType: CommandType.StoredProcedure);
         return(Insert);
     }
 }
コード例 #20
0
        public async Task <IActionResult> CheckoutPayment(CheckoutVM model)
        {
            //register the user and sign them in if they are not already signed in
            ApplicationUser user = await CurrentUser();

            if (user == null)
            {
                var userresult = await CreateUser(model);

                if (userresult.HasErrors)
                {
                    CheckoutErrorVM errorVM = new CheckoutErrorVM()
                    {
                        ErrorMessage = userresult.ErrorMessage
                    };
                    return(RedirectToAction("CheckoutError", errorVM));
                }
                else
                {
                    //we now have a user
                    user = userresult.User;
                }
            }



            //hook up with the stripe service and get the payment intent
            //add this to the model and pass it on
            model.Cart = _cart;
            PaymentIntentResult result = await _stripeService.CreatePaymentIntent((model.Cart.Total * 100), model.Email);

            //add the user to the courses but with the PaymentSucceeded set to false for now
            //this is set when the webhook handles the payment success event
            var useraddedresult = AddUserToCourses(user, result.PaymentIntentId);

            if (!useraddedresult.Succeeded)
            {
                //we've been able to create the user but unable to add them to any courses
                //this is highly unlikely but in this event we don't want them to go through
                //to the payment form where the payment will be asked to be collected
                //from stripe.  So just send them to an error page
                CheckoutErrorVM errorVM = new CheckoutErrorVM()
                {
                    ErrorMessage = "There was a problem adding the user to the course(s).  This may be a system problem.  Please try again later."
                };
                return(RedirectToAction("CheckoutError", errorVM));
            }



            model.Cart.ClientSecret = result.ClientSecret;
            model.PublishableKey    = result.PublishableKey;
            return(View(model));
        }
コード例 #21
0
        public IActionResult Checkout()
        {
            var model = new CheckoutVM
            {
                CartItems          = UnitOfWork.StoredProcedures.GetCartItemsInfo(SystemUser.Id),
                OrderDeliveryTypes = UnitOfWork.OrderDeliveryTypes.FindAll(),
                OrderPaymentTypes  = UnitOfWork.OrderPaymentTypes.FindAll()
            };

            return(View(model));
        }
コード例 #22
0
        private async Task <CheckoutUserResult> CreateUser(CheckoutVM model)
        {
            CheckoutUserResult userresult = new CheckoutUserResult();
            var user = new ApplicationUser
            {
                UserName  = model.Email,
                FirstName = model.FirstName,
                LastName  = model.LastName,
                Company   = model.Company,
                Division  = model.Division,
                JobTitle  = model.JobTitle,
                Mobile    = model.Mobile,
                Email     = model.Email
            };


            var result = await _userManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=532713
                // Send an email with this link
                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                var callbackUrl = Url.Action(nameof(AccountController.ConfirmEmail),
                                             "Account",
                                             new { userId = user.Id, code = code },
                                             protocol: HttpContext.Request.Scheme);

                await _emailSender.SendEmailAsync(model.Email,
                                                  "Confirm your account",
                                                  $"Please confirm your account by clicking this link: <a href='{callbackUrl}'>link</a>");

                await _signInManager.SignInAsync(user, isPersistent : false);

                userresult.User = user;
            }
            else
            {
                IdentityError error = result.Errors.FirstOrDefault();
                if (error.Code == "DuplicateUserName")
                {
                    userresult.ErrorMessage = error.Description + "  Please Log in to continue.";
                }
                else
                {
                    userresult.ErrorMessage = "User could not be created" + error.Description;
                }

                userresult.HasErrors = true;
            }

            return(userresult);
        }
コード例 #23
0
        private void SavePyramidValues(Pyramid pyramid, CheckoutVM model)
        {
            pyramid.PBV += model.SubTotal;
            decimal sales = 0;

            foreach (var p in model.Details)
            {
                sales += (0.23M - p.Discount) * p.Price * p.Quantity / 100M;
            }
            pyramid.SaleBonus += sales;
            db.SaveChanges();
        }
コード例 #24
0
        public IActionResult Checkout(int id)
        {
            var book = _books.GetById(id);

            var model = new CheckoutVM()
            {
                BookId       = id,
                Title        = book.Title,
                PatronId     = "",
                IsCheckedOut = book.IsCheckouted
            };

            return(View(model));
        }
コード例 #25
0
        public async Task <IActionResult> CheckoutUserInfo(CheckoutVM model)
        {
            //if user is logged in already then jump to the payment screen
            ApplicationUser user = await CurrentUser();

            if (user != null)
            {
                return(RedirectToAction("CheckoutPayment", model));
            }


            //pass the model into the view so we can collect the uer details
            return(View(model));
        }
コード例 #26
0
        public async Task <IActionResult> Checkout()
        {
            var        productIds = Request.Cookies["CartProduct"];
            CheckoutVM vm         = new CheckoutVM();

            if (productIds != null && !string.IsNullOrEmpty(productIds))
            {
                var ProIDs = productIds.Split('-').Select(p => int.Parse(p)).ToList();
                vm.Products = _productService.FindProductIDs(ProIDs);
                vm.K101User = await _userManager.GetUserAsync(User);

                vm.ProductIds = ProIDs;
            }
            return(View(vm));
        }
コード例 #27
0
        public async Task <IActionResult> Checkout(CheckoutVM model)
        {
            JsonResult jsonResult = new JsonResult(new { });

            var productIds = Request.Cookies["CartProduct"];

            if (productIds != null && !string.IsNullOrEmpty(productIds))
            {
                var ProIDs = productIds.Split('-').Select(p => int.Parse(p)).ToList();
                model.Products   = _productService.FindProductIDs(ProIDs);
                model.ProductIds = ProIDs;
                if (User.Identity.IsAuthenticated)
                {
                    var newOrder = new Order();
                    newOrder.CustomerID      = _userManager.GetUserId(User);
                    newOrder.CustomerName    = model.FullName;
                    newOrder.CustomerEmail   = model.Email;
                    newOrder.CustomerPhone   = model.PhoneNumber;
                    newOrder.CustomerAddress = model.Address;
                    newOrder.OrderItems      = new List <OrderItem>();
                    foreach (var product in model.Products)
                    {
                        var orderItem = new OrderItem()
                        {
                            ProductID   = product.ID,
                            ProductName = product.Name,
                            ItemPrice   = product.Price,
                            Quantity    = ProIDs.Where(x => product.ID == x).Count()
                        };
                        newOrder.OrderItems.Add(orderItem);
                        newOrder.OrderCode    = Guid.NewGuid().ToString();
                        newOrder.TotalAmmount = newOrder.OrderItems.Sum(x => (x.ItemPrice * x.Quantity));
                        newOrder.OrderHistory = new List <OrderHistory>()
                        {
                            OrderStatus = (int)OrderStatus.Placed,
                            ModifiedOn  = DateTime.Now,
                            Note        = "Order Placed."
                        };
                        newOrder.PlacedOn = DateTime.Now;
                    }
                    _context.Add(newOrder);
                    await _context.SaveChangesAsync();
                }
            }
            Response.Cookies.Delete("CartProduct");
            return(jsonResult);
        }
コード例 #28
0
        public ActionResult SaveOrder(CheckoutVM model)
        {
            CartVM cart = (CartVM)Session["Cart"];

            model.Details       = cart.Products;
            model.DeliveryPrice = GetDeliveryPrice(model.DeliveryCountryId);
            if (!string.IsNullOrEmpty(cart.CouponUniqueId))
            {
                model.CouponId = db.GetCouponInfo(cart.CouponUniqueId).CouponId;
            }
            Session.Remove("Cart");
            if (Session["CustomerId"] == null)
            {
                var    customerData = db.CreateCustomer(model);
                string content      = System.IO.File.ReadAllText(Server.MapPath("/Mails/newuser.txt"));
                content = content.Replace("{username}", model.CustomerEmail);
                content = content.Replace("{password}", customerData.Password);
                Parallel.Invoke(() =>
                {
                    Common.Tools.Mailer.SendMailSpecific(content,
                                                         model.CustomerEmail,
                                                         "Your user is created");
                });
                Session["CustomerId"]   = customerData.CustomerId;
                Session["CustomerName"] = model.CustomerName;
            }



            model.CustomerId = (int)Session["CustomerId"];
            db.SaveSale(model);

            if (model.CouponId.HasValue)
            {
                db.AddPyramidValuesByCoupon(model);
            }
            else
            if (Session["IsBP"] != null && (bool)Session["IsBP"])
            {
                db.AddPyramidValuesToBP(model, (int)Session["CustomerId"]);
            }
            else
            {
                db.AddPyramidValuesRandom(model);
            }
            return(RedirectToAction("Confirm", "Cart"));
        }
コード例 #29
0
        // GET: /Cart/PlaceOrder
        public ActionResult Checkout()
        {
            List <CartVM> cart  = Session["cart"] as List <CartVM>;
            decimal       total = 0m;

            if (cart == null)
            {
                // Create a TempData message
                TempData["Checkout"] = "Your order has been recieved and is now being processed.";
                return(View());
            }

            foreach (var item in cart)
            {
                total += item.Total;
            }

            ViewBag.GrandTotal = total;
            ViewBag.CartVMList = cart;

            // Get username
            string username = User.Identity.Name;

            if (string.IsNullOrEmpty(username))
            {
                ViewBag.IsAuthenticated = "false";
                return(View());
            }
            else
            {
                CheckoutVM model;

                using (Db db = new Db())
                {
                    // Get user
                    UserModel dto = db.Users.FirstOrDefault(x => x.Username == username);

                    // Build model
                    model = new CheckoutVM(dto);
                }

                ViewBag.IsAuthenticated = "true";
                return(View(model));
            }
        }
コード例 #30
0
        public IActionResult Checkout()
        {
            var productCookie = Request.Cookies["k207Cart"];

            if (productCookie != null && productCookie.Length > 0)
            {
                List <int>     productIds = productCookie.Split('-').Select(p => int.Parse(p)).ToList();
                List <Product> products   = _context.Products.Where(p => productIds.Contains(p.ID)).ToList();
                CheckoutVM     vm         = new CheckoutVM()
                {
                    Products   = products,
                    ProductIds = productIds,
                    K207User   = _userManager.GetUserAsync(User)
                };
                return(View(vm));
            }
            return(View());
        }