Ejemplo n.º 1
0
        protected void btnAddToBasket_Click(object sender, EventArgs e)
        {
            DatabaseCO5027Entities db = new DatabaseCO5027Entities();

            int    productId = int.Parse(Request.QueryString["id"]);
            string userId    = User.Identity.GetUserId();

            try
            {
                db.Baskets.Single(i => i.ProductId == productId && i.CustomerId == userId);
            }
            catch
            {
                if (User.Identity.IsAuthenticated)
                {
                    var basketEntry = new Basket();
                    basketEntry.CustomerId = userId;
                    basketEntry.ProductId  = productId;
                    db.Baskets.Add(basketEntry);
                    db.SaveChangesAsync();
                    Response.Redirect("~/checkout.aspx");
                }
                else
                {
                    // redir to login
                    Session.Add("basketProductId", productId);
                    Response.Redirect("~/login.aspx");
                }
            }
        }
Ejemplo n.º 2
0
        protected void btnConfirmOrder_Click(object sender, EventArgs e)
        {
            DatabaseCO5027Entities db = new DatabaseCO5027Entities();

            string paymentId = Request.QueryString["paymentId"];
            string payerId   = Request.QueryString["payerId"];
            string token     = Request.QueryString["token"];

            Order order = db.Orders.Single(o => o.PaymentId == paymentId && o.PaymentToken == token);

            PayPalConfirmation(paymentId, payerId);

            order.PaymentId  = paymentId;
            order.PayerId    = payerId;
            order.AmountPaid = order.TotalCost;

            var products = db.OrderedProducts.Where(op => op.OrderId == order.Id);

            foreach (var product in products)
            {
                product.DownloadsAllowed += 5;
            }
            db.SaveChanges();

            string customerId = User.Identity.GetUserId();
            var    customer   = db.UserDetails.Single(c => c.UserId == customerId);

            string customerName         = customer.FirstName + " " + customer.Surname;
            string customerEmailAddress = customer.Email;

            SendEmailToAdmin(customer, order, products.ToList());
            SendEmailToCustomer(customer, order, products.ToList());

            Response.Redirect("~/user");
        }
Ejemplo n.º 3
0
        private void SetupCheckout()
        {
            DatabaseCO5027Entities db = new DatabaseCO5027Entities();

            string paymentId = Request.QueryString["paymentId"];
            string payerId   = Request.QueryString["payerId"];
            string token     = Request.QueryString["token"];

            Order order = db.Orders.Single(o => o.PaymentId == paymentId);

            if (String.IsNullOrEmpty(paymentId) || String.IsNullOrEmpty(payerId) || String.IsNullOrEmpty(token))
            {
                litConfirmMessage.Text  = "<p>Payment aborted. You have not been charged. Please reorder the required products.</p>";
                btnConfirmOrder.Visible = false;
                db.Orders.Remove(order);
                db.SaveChanges();
                return;
            }
            litConfirmOrderDetails.Text  = "<p>Order: " + order.Id + "</p>";
            litConfirmOrderDetails.Text += "<p>Price: £" + order.TotalCost + "</p>";
            litConfirmOrderDetails.Text += "<h3>Products:</h3>";
            litConfirmOrderDetails.Text += "<div class=\"products\"><ul>";

            foreach (var item in order.OrderedProducts)
            {
                litConfirmOrderDetails.Text += "<li>" + item.Product.Name + " (£" + ((decimal)item.Product.Price).ToString("0.00") + ")</li>";
            }
            litConfirmOrderDetails.Text += "</ul></div>";
        }
Ejemplo n.º 4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                switch (Request.QueryString["action"])
                {
                case "confirm":
                    pnlBasket.Visible   = false;
                    pnlCheckout.Visible = true;

                    SetupCheckout();
                    break;

                case "cancel":
                    pnlBasket.Visible = false;
                    pnlCancel.Visible = true;
                    string token = Request.QueryString["token"];
                    DatabaseCO5027Entities db = new DatabaseCO5027Entities();
                    Order order = db.Orders.Single(o => o.PaymentToken == token);
                    db.Orders.Remove(order);
                    db.SaveChanges();
                    litCancelMessage.Text = "<p>Invalid payment. You have not been charged. Please reorder the required products.</p>";
                    break;

                default:
                    SetupBasket();
                    break;
                }
            }
        }
Ejemplo n.º 5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string customerId         = HttpContext.Current.User.Identity.GetUserId();
            DatabaseCO5027Entities db = new DatabaseCO5027Entities();
            var basket = db.Baskets.Where(b => b.CustomerId == customerId).ToList();

            if (basket.Count > 0)
            {
                litBasketQty.Text = " (" + basket.Count + ")";
            }
        }
Ejemplo n.º 6
0
        protected void rptBasket_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            string idString = e.CommandArgument.ToString();

            int id = int.Parse(idString);

            DatabaseCO5027Entities db = new DatabaseCO5027Entities();
            var basketItem            = db.Baskets.Single(b => b.Id == id);

            db.Baskets.Remove(basketItem);

            db.SaveChanges();
            SetupBasket();
        }
Ejemplo n.º 7
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         if (User.Identity.IsAuthenticated)
         {
             DatabaseCO5027Entities db = new DatabaseCO5027Entities();
             var userId = User.Identity.GetUserId();
             var user   = db.UserDetails.Single(u => u.UserId == userId);
             txtName.Text         = user.FirstName + " " + user.Surname;
             txtEmail.Text        = user.Email;
             txtEmailConfirm.Text = user.Email;
         }
     }
 }
Ejemplo n.º 8
0
        private void SetupBasket()
        {
            string customerId         = User.Identity.GetUserId();
            DatabaseCO5027Entities db = new DatabaseCO5027Entities();
            var basket = db.Baskets.Where(b => b.CustomerId == customerId).ToList();

            if (IsPostBack && basket.Count < 1)
            {
                Response.Redirect("~/");
            }

            if (basket.Count < 1)
            {
                pnlBasketItems.Visible = false;
                litBasketMessage.Text  = "<p>You have no items in your basket.</p>";
                return;
            }

            decimal totalCost = 0;

            var basketToDisplay = new List <BasketDisplay>();

            foreach (var item in basket)
            {
                BasketDisplay basketItem = new BasketDisplay();

                basketItem.CustomerId         = item.CustomerId;
                basketItem.Id                 = item.Id;
                basketItem.ProductId          = item.ProductId;
                basketItem.ProductName        = item.Product.Name;
                basketItem.ProductDescription = item.Product.Description;
                basketItem.Price              = (decimal)item.Product.Price;
                basketItem.InitialHeight      = item.Product.InitialHeight;
                basketItem.InitialWidth       = item.Product.InitialWidth;

                var image = db.Images.Single(p => p.ProductId == item.ProductId && p.SizeId == 3);

                basketItem.ImageHeight = image.Height;
                basketItem.ImageWidth  = image.Width;

                basketToDisplay.Add(basketItem);
                totalCost += (decimal)item.Product.Price;
            }

            rptBasket.DataSource = basketToDisplay;
            rptBasket.DataBind();
        }
Ejemplo n.º 9
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string idString = Request.QueryString["id"];

            int id = 0;

            try
            {
                id = int.Parse(idString);
            }
            catch
            {
                Response.Redirect("~/");
            }

            DatabaseCO5027Entities db = new DatabaseCO5027Entities();
            Product photo             = new Product();

            try
            {
                photo = db.Products.Single(p => p.Id == id && p.Archived == false);
            }
            catch
            {
                Response.Redirect("~/");
            }

            string photoInfoFormatted = "<h3>" + Server.HtmlEncode(photo.Name) + "</h3>";

            photoInfoFormatted += "<p>(" + photo.InitialWidth + " x " + photo.InitialHeight + ")</p>";
            photoInfoFormatted += "<p>" + Server.HtmlEncode(photo.Description) + "</p>";

            litPhotoInfo.Text = photoInfoFormatted;

            var image = photo.Images.FirstOrDefault(p => p.SizeId == 2);

            imgPhoto.Src    = "~/files/images/watermarked/" + id.ToString() + "-2.jpg";
            imgPhoto.Alt    = Server.HtmlEncode(photo.Description);
            imgPhoto.Width  = image.Width;
            imgPhoto.Height = image.Height;
        }
Ejemplo n.º 10
0
        protected void btnContinue_Click(object sender, EventArgs e)
        {
            string customerId         = User.Identity.GetUserId();
            DatabaseCO5027Entities db = new DatabaseCO5027Entities();
            var basket = db.Baskets.Where(b => b.CustomerId == customerId);

            var order = new Order();

            order.DateStamp  = DateTime.Now;
            order.CustomerId = customerId;
            order.TotalCost  = 0; // calculated in foreach loop

            db.Orders.Add(order);
            db.SaveChanges();

            var orderId = order.Id;

            decimal totalCost = 0;

            var products = new List <OrderedProduct>();

            foreach (var item in basket)
            {
                OrderedProduct orderedProduct = new OrderedProduct();
                orderedProduct.OrderId          = orderId;
                orderedProduct.ProductId        = item.ProductId;
                orderedProduct.DownloadsAllowed = 0; // set once payment complete
                db.OrderedProducts.Add(orderedProduct);
                products.Add(orderedProduct);
                totalCost += (decimal)item.Product.Price;
                db.Baskets.Remove(item);
            }

            order.TotalCost = totalCost;
            db.SaveChanges();

            PayPalPayment(db, order, products);
        }
Ejemplo n.º 11
0
        protected void PayPalPayment(DatabaseCO5027Entities db, Order order, List <OrderedProduct> products)
        {
            string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority;

            // ~~~~~~~~~~
            // Following code inspired by PayPal, (2015) and Muncey, (2016).
            // ~~~~~~~~~~

            var config      = ConfigManager.Instance.GetProperties();
            var accessToken = new OAuthTokenCredential(config).GetAccessToken();
            var apiContext  = new APIContext(accessToken);

            List <Item> items = new List <Item>();

            foreach (OrderedProduct product in products)
            {
                Item item = new Item
                {
                    name     = product.Product.Name,
                    currency = "GBP",
                    price    = ((decimal)product.Product.Price).ToString("0.00"),
                    quantity = "1",
                    sku      = product.ProductId.ToString()
                };
                items.Add(item);
            }
            ;
            ItemList productsItemList = new ItemList
            {
                items = items
            };

            var payment = Payment.Create(apiContext, new Payment
            {
                intent = "sale",
                payer  = new Payer
                {
                    payment_method = "paypal"
                },
                transactions = new List <Transaction>
                {
                    new Transaction
                    {
                        description    = "Order from StunningSnaps",
                        invoice_number = order.Id.ToString(),
                        amount         = new Amount
                        {
                            currency = "GBP",
                            total    = order.TotalCost.ToString("0.00"),
                            details  = new Details
                            {
                                tax      = "0",
                                shipping = "0",
                                subtotal = order.TotalCost.ToString("0.00")
                            }
                        },
                        item_list = productsItemList
                    }
                },
                redirect_urls = new RedirectUrls
                {
                    return_url = baseUrl + ResolveUrl("~/checkout.aspx?action=confirm"),
                    cancel_url = baseUrl + ResolveUrl("~/checkout.aspx?action=cancel")
                }
            });

            order.PaymentId    = payment.id;
            order.PaymentToken = payment.token;
            db.SaveChanges();

            foreach (var link in payment.links)
            {
                if (link.rel.ToLower().Trim().Equals("approval_url"))
                {
                    Response.Redirect(link.href);
                }
            }

            // ~~~~~~~~~~
            // end of code inspired by PayPal, (2015) and Muncey, (2016).
            // ~~~~~~~~~~
        }