Esempio n. 1
0
        public ActionResult AddToCart(Dictionary <string, string> item)
        {
            if (!item["culture"].IsNullOrEmpty())
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo(item["culture"]);
            }


            Product product_to_add = UvendiaContext.Products.Single <long>(long.Parse(item["p"]));
            string  size           = item["size"];

            if (product_to_add.HasVariant)
            {
                if (size.IsNullOrEmpty())
                {
                    product_to_add = product_to_add.Variants.First();
                }
                else
                {
                    product_to_add = product_to_add.Variants.First(x => string.Equals(x["Size"] as string, size, StringComparison.InvariantCultureIgnoreCase));
                }
            }

            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            currentCart.AddProduct(product_to_add, int.Parse(item["qnty"]), SnuffoSettings.GetCurrency(), 0, item["thumb"]);

            return(PartialView("~/views/partials/_CartShop.cshtml", new CartShopModel()));
        }
Esempio n. 2
0
        public ActionResult CheckoutReviewPage(ContentModel model)
        {
            var crm = new CheckoutReviewModel(model.Content);

            crm.CurrentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
            crm.Order       = crm.CurrentCart.GetOrder();

            if (!crm.Order.PaymentMethodId.HasValue)
            {
                return(Redirect(string.Concat("/", CurrentUser.LanguageCode, "/cart/checkout-payment")));
            }

            crm.CartItems = crm.CurrentCart.GetCartItemsByCookieId();

            var productIds = crm.CartItems.Where(c => c.ProductId.HasValue).Select(c => c.ProductId);

            if (productIds.Any())
            {
                crm.Products = UvendiaContext.Products.All(productIds.ToArray());
            }

            var ticketSaleIds = crm.CartItems.Where(c => c.TicketSaleId.HasValue).Select(c => c.TicketSaleId);

            if (ticketSaleIds.Any())
            {
                crm.TicketsSale = UvendiaContext.TicketSales.All(ticketSaleIds.ToArray());
            }

            return(CurrentTemplate(crm));
        }
Esempio n. 3
0
        public ActionResult BuyTickets(EventDetailModel model, string imageId)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
            var tickets     = model.Event.TicketsSale.ToList();

            model.Event.LazyLoadProperties();

            for (int i = 0; i < tickets.Count; i++)
            {
                string dropdownName = string.Concat("TicketType", i);

                int ticketsQuantityToBuy = !Request.Form[dropdownName].IsNullOrEmpty() ? int.Parse(Request.Form[dropdownName]) : 0;
                ViewData[dropdownName] = ticketsQuantityToBuy;

                if (ticketsQuantityToBuy > 0)
                {
                    currentCart.AddTicket(
                        tickets[i].Id,
                        model.Event.DisplayName(),
                        ticketsQuantityToBuy,
                        metaData: imageId);
                }
            }

            return(Redirect($"/{CurrentUser.LanguageCode}/cart/"));
        }
Esempio n. 4
0
        public ActionResult CartPage(ContentModel model)
        {
            var cartModel = new CartPageModel();

            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            cartModel.CartItems = currentCart.GetCartItemsByCookieId().OrderBy(c => c.Name).ToList();
            if (!cartModel.CartItems.IsNullOrEmpty())
            {
                var productIds = cartModel.CartItems.Where(c => c.ProductId.HasValue).Select(c => c.ProductId);
                if (productIds.Any())
                {
                    cartModel.Products = UvendiaContext.Products.All(productIds.ToArray()).ToList();
                }
                var ticketSaleIds = cartModel.CartItems.Where(c => c.TicketSaleId.HasValue).Select(c => c.TicketSaleId);
                if (ticketSaleIds.Any())
                {
                    cartModel.TicketsSale = UvendiaContext.TicketSales.All(ticketSaleIds.ToArray()).ToList();
                }
                cartModel.Subtotal = currentCart.CalculateSubtotal(cartModel.CartItems);
            }

            var checkoutUrl = $"/{CurrentUser.LanguageCode}/cart/checkout-address/";

            cartModel.CheckoutUrl = (!CurrentUser.IsAuthenticated)
                    ? $"/{CurrentUser.LanguageCode}/cart/checkout-login/?returnUrl={checkoutUrl}"
                    : checkoutUrl;

            return(CurrentTemplate(cartModel));
        }
Esempio n. 5
0
        public ActionResult ClearCart()
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            currentCart.ClearCart();

            return(PartialView("~/views/partials/_CartShop.cshtml", new CartShopModel()));
        }
Esempio n. 6
0
        public ActionResult RemoveFromCart(Guid ci)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            currentCart.DeleteCartItem(ci);
            currentCart.UpdateCartQuantityCount();

            return(PartialView("~/views/partials/_CartShop.cshtml", new CartShopModel()));
        }
Esempio n. 7
0
        public ActionResult CheckoutPaymentPage(ContentModel model)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
            var order       = currentCart.GetOrder();

            if (order.HasOrderProductDetails() && !order.ShippingMethodId.HasValue)
            {
                return(Redirect(string.Concat("/", CurrentUser.LanguageCode, "/cart/checkout-shipping")));
            }

            var cpm = new CheckoutPaymentModel(model.Content);

            cpm.PaymentMethods = UvendiaContext.PaymentMethods.All().Where(p => p.Enabled).ToList();

            cpm.SelectedPaymentMethodId = order.PaymentMethodId;
            cpm.iDealIssuerId           = order.MetaData;

            try
            {
                var ideal = cpm.PaymentMethods.Single(x => x.Name.Equals("ideal", StringComparison.InvariantCultureIgnoreCase));
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol  = SecurityProtocolType.Tls12;

                Connector connector = new Connector();
                connector.MerchantId        = ideal["MerchantID"];
                connector.SubId             = ideal["SubID"];
                connector.ExpirationPeriod  = ideal["ExpirationPeriod"];
                connector.MerchantReturnUrl = new Uri(string.Format(ideal["MerchantReturnURL"], CurrentUser.LanguageCode));

                ING.iDealAdvanced.Data.Issuers issuers = connector.GetIssuerList();

                foreach (var country in issuers.Countries)
                {
                    foreach (var issuer in country.Issuers)
                    {
                        cpm.iDealIssuerList.Add(new SelectListItem()
                        {
                            Text = issuer.Name, Value = issuer.Id.ToString()
                        });
                    }
                }
            }
            catch (ING.iDealAdvanced.Data.IDealException iex)
            {
                // request consumerMessage
                MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).MailError(new HandleErrorInfo(iex, "CheckoutPaymentPage", "LoadIssueList")).SendAsync();
            }
            catch (Exception ex)
            {
                MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).MailError(new HandleErrorInfo(ex, "CheckoutPaymentPage", "LoadIssueList")).SendAsync();
                //throw;
            }

            return(CurrentTemplate(cpm));
        }
Esempio n. 8
0
        public ActionResult UpdateCart(CartPageModel model)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            foreach (var item in model.CartItems)
            {
                currentCart.UpdateQuantity(item.Id, item.Quantity);
            }
            currentCart.UpdateCartQuantityCount();
            return(Redirect($"/{CurrentUser.LanguageCode}/cart"));
        }
Esempio n. 9
0
        public ActionResult UpdateOrderCheckoutShipping(CheckoutShippingModel model)
        {
            if (ModelState.IsValid)
            {
                var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
                var order       = currentCart.GetOrder();

                order.ShippingMethodId = model.SelectedShippingMethodId.Value;

                currentCart.SaveOrder(order);

                return(Redirect($"/{CurrentUser.LanguageCode}/cart/checkout-payment"));
            }
            return(CurrentUmbracoPage());
        }
Esempio n. 10
0
        public ActionResult LanguageCurrencySelect(LanguageCurrencySelectModel model)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            if (!currentCart.HasCartItems())
            {
                SnuffoSettings.SetCurrency(model.SelectedCurrency);
            }
            else
            {
                base.ShowAlertMessage("Multiple Currencies Detected", "It is not allowed to add multiple type of currencies to your shopping cart", AlertMessageType.Error);
            }


            return(CurrentUmbracoPage());
        }
Esempio n. 11
0
        public ActionResult CheckoutShippingPage(ContentModel model)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
            var order       = currentCart.GetOrder();

            if (!order.InvoiceAddressId.HasValue)
            {
                return(Redirect(string.Concat("/", CurrentUser.LanguageCode, "/cart/checkout-address")));
            }

            var csm = new CheckoutShippingModel(model.Content);

            csm.ShippingMethods = UvendiaContext.ShippingMethods.All().Where(s => s.Enabled).ToList();

            csm.SelectedShippingMethodId = order.ShippingMethodId;

            return(CurrentTemplate(csm));
        }
Esempio n. 12
0
        public CartShopModel()
        {
            CurrentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
            if (CurrentCart.HasCartItems())
            {
                var items = CurrentCart.GetCartItemsByCookieId();
                if (!items.IsNullOrEmpty())
                {
                    CartItems = items.OrderBy(c => c.Name);
                    var productIds = items.Select(x => x.ProductId);
                    Subtotal = items.Sum(x => (x.Quantity * x.UnitPrice));
                }

                var checkoutUrl = $"/{CurrentUser.LanguageCode}/cart/checkout-address/";
                CheckoutUrl = (!CurrentUser.IsAuthenticated)
                    ? $"/{CurrentUser.LanguageCode}/cart/checkout-login/?returnUrl={checkoutUrl}"
                    : checkoutUrl;
            }
        }
Esempio n. 13
0
        public static string GetCurrency()
        {
            var cookie = HttpContext.Current.Request.Cookies[SELECTED_CURRENCY_COOKIE_NAME];

            if (cookie == null)
            {
                var currentCart = CurrentCart.Create(STORE_NAME);
                if (currentCart.ItemsCount > 0)
                {
                    var order    = currentCart.GetOrder();
                    var currency = order.GetOrderCurrency();
                    if (!currency.IsNullOrEmpty())
                    {
                        SetCurrency(currency);
                        return(currency);
                    }
                }
            }
            return(cookie != null ? cookie.Value : "EUR");
        }
Esempio n. 14
0
        public ActionResult CheckoutLoginPage(ContentModel model)
        {
            var authModel = new AuthenticateModel(model.Content);

            authModel.ReturnUrl = Request.QueryString["returnUrl"];

            authModel.Authenticated = CurrentUser.IsAuthenticated;
            if (!authModel.Authenticated)
            {
                var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
                var order       = currentCart.GetOrder();

                if (order.InvoiceAddressId.HasValue)
                {
                    return(Redirect(string.Concat("/", CurrentUser.LanguageCode, "/cart/checkout-address/")));
                }
            }

            return(CurrentTemplate(authModel));
        }
Esempio n. 15
0
        public ActionResult UpdateOrderCheckoutPayment(CheckoutPaymentModel model)
        {
            PaymentMethod paymentMethod = null;

            if (model.SelectedPaymentMethodId.HasValue)
            {
                paymentMethod = UvendiaContext.PaymentMethods.Single(model.SelectedPaymentMethodId.Value);
                if (model.SelectedPaymentMethodId.HasValue)
                {
                    if (string.Equals(paymentMethod.Name, "ideal", StringComparison.InvariantCultureIgnoreCase) &&
                        model.iDealIssuerId.IsNullOrEmpty())
                    {
                        ModelState.AddModelError("", "Please select your bank");
                    }
                }
            }

            if (ModelState.IsValid)
            {
                var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
                var order       = currentCart.GetOrder();

                order.PaymentMethod   = paymentMethod;
                order.PaymentMethodId = model.SelectedPaymentMethodId.Value;
                order.MetaData        = model.iDealIssuerId;

                if (currentCart.SaveOrder(order, true, out List <string> errors))
                {
                    return(Redirect($"/{CurrentUser.LanguageCode}/cart/checkout-review"));
                }
                else
                {
                    errors.ForEach(err => ModelState.AddModelError("", err));
                }
            }
            return(CurrentUmbracoPage());
        }
Esempio n. 16
0
        public ActionResult UpdateOrderCheckoutAddress(AccountAddressModel model)
        {
            model.ContactAddress.AddressTypeId = AddressType.Default.Id;
            model.ContactAddress.FirstName     = model.FirstName;
            model.ContactAddress.LastName      = model.LastName;
            model.ContactAddress.Email         = model.EmailAddress;
            model.ContactAddress.Phone         = model.Phone;

            base.SuppressValidation(model.GetPropertyName(x => x.ContactAddress.Phone));
            base.SuppressValidation(model.GetPropertyName(x => x.ContactAddress.AddressTypeId));
            base.SuppressValidation(model.GetPropertyName(x => x.ShippingAddress.AddressTypeId));
            base.SuppressValidation(model.GetPropertyName(x => x.ShippingAddress.Phone));

            if (model.ShippingAddress != null)
            {
                model.ShippingAddress.AddressTypeId = AddressType.ShipAddress.Id;
            }

            if (model.HasSameAddress)
            {
                base.SuppressValidation(model.GetPropertyName(x => x.ShippingAddress));
                model.ShippingAddress = null;
            }

            if (!CurrentUser.IsAuthenticated)
            {
                base.SuppressValidation(model.GetPropertyName(x => x.UserId));
            }
            else
            {
                if (model.HasSameAddress)
                {
                    UvendiaContext.Addresses.DeleteByUseryIdAndAddressType(CurrentUser.UserId, AddressType.ShipAddress);
                }
            }

            if (ModelState.IsValid)
            {
                // Save user data
                if (CurrentUser.IsAuthenticated)
                {
                    _auth0Helper.UpdateAuth0User(model);
                }

                model.ContactAddress.CreatedBy = CurrentUser.UserId;
                var addresses = new List <Address>()
                {
                    model.ContactAddress
                };
                if (model.ShippingAddress != null)
                {
                    model.ShippingAddress.CreatedBy = CurrentUser.UserId;
                    model.ShippingAddress.Phone     = model.ContactAddress.Phone;
                    addresses.Add(model.ShippingAddress);
                }

                UvendiaContext.Addresses.Save(addresses);

                var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);
                var order       = currentCart.GetOrder();

                // Attach address to order
                var invoiceAddress = addresses.Single(a => a.AddressTypeId == AddressType.Default.Id);
                order.InvoiceAddressId = invoiceAddress.Id;
                order.ShipAddressId    = (model.ShippingAddress == null) ? (long?)null : addresses.Single(a => a.AddressTypeId != AddressType.Default.Id).Id;

                // Save the order
                currentCart.SaveOrder(order);

                if (order.HasOrderProductDetails())
                {
                    return(Redirect($"/{CurrentUser.LanguageCode}/cart/checkout-shipping"));
                }
                else
                {
                    return(Redirect($"/{CurrentUser.LanguageCode}/cart/checkout-payment"));
                }
            }

            return(CurrentUmbracoPage());
        }
Esempio n. 17
0
        public ActionResult CheckoutCompletedPage(ContentModel model)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            if (currentCart.ItemsCount == 0)
            {
                return(Redirect($"/{CurrentUser.LanguageCode}/cart/"));
            }
            try
            {
                var order = currentCart.GetOrder();

                var    checkoutOrder = OrderMapper.Map <CheckoutOrder>(order);
                string baseUrl       = WebUtils.GetApplicationUrlPath(HttpContext.ApplicationInstance.Context);
                checkoutOrder.CallBackUrlOnPaymentSucceed = $"{baseUrl}{CurrentUser.LanguageCode}/checkout-completed";
                checkoutOrder.CallBackUrlOnPaymentFailed  = $"{baseUrl}{CurrentUser.LanguageCode}/checkout-cancelled";

                checkoutOrder.OrderDetails.AddRange(OrderMapper.Map <List <CheckoutOrderDetail> >(order.ProductOrderDetails));
                checkoutOrder.OrderDetails.AddRange(OrderMapper.Map <List <CheckoutOrderDetail> >(order.TicketOrderDetails));

                var payment = PaymentBase.CreatePayment(checkoutOrder);
                if (payment.PaymentMethod == CS.PaymentMethod.PayPal)
                {
                    PayPalPayment paypal = payment as PayPalPayment;
                    paypal.IsSandbox    = string.Equals(order.PaymentMethod["Mode"], "sandbox");
                    paypal.ClientId     = order.PaymentMethod["ClientId"];
                    paypal.ClientSecret = order.PaymentMethod["ClientSecret"];
                }

                if (Request.QueryString.Count == 0)
                {
                    var response = payment.DoPayment();
                    order.PaymentTransactionId = response.PaymentTransactionId;

                    // Save the order
                    currentCart.SaveOrder(order);

                    return(Redirect(response.PaymentServiceUrl));
                }

                order.PayerId = Request.QueryString["PayerID"];
                if (payment.RequestPaymentStatus(order.PaymentTransactionId, order.PayerId, out string message) != PaymentStatus.Success)
                {
                    order.PaymentError = message;
                    // Save order
                    order.OrderStatusId = OrderStatus.Cancelled.Id;
                    currentCart.SaveOrder(order);

                    return(Redirect($"/{CurrentUser.LanguageCode}/checkout-cancelled/"));
                }
                // Tickets are sent immediately
                order.OrderStatusId = (order.ProductOrderDetails.IsNullOrEmpty()) ? OrderStatus.Sent.Id : OrderStatus.Started.Id;

                order.Paid       = true;
                order.PaidAmount = order.CalculateTotal();

                currentCart.CompleteOrder(order);

                if (order.ProductOrderDetails.Any())
                {
                    // Send order confirmation mail.
                    MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).ConfirmOrderMail(order).Send();
                }
                if (order.TicketOrderDetails.Any()) // tickets bought
                {
                    MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).SendTicketsPDF(order).Send();
                }
            }
            catch (OrderAlreadyProcessedException)
            {
                // Clear cart.
                currentCart.ClearCart();
            }

            return(CurrentTemplate(model));
        }