/// <summary>
        ///
        /// </summary>
        /// <param name="_prefLanguage">The language selected in the login screen. Can still be changed in the new user form itself</param>
        public NewUserForm(Language _prefLanguage)
        {
            InitializeComponent();

            _languageRepo = new LanguageRepository();
            _userRepo     = new DesktopUserRepository();
            _notifier     = new GmailNotifier();

            _preferredLanguage = _prefLanguage;

            InitializeWindow();
        }
        public ActionResult Charge(string stripeEmail, string stripeToken)
        {
            // TODO Make less dependent on Stripe

            // Gets the total price
            var totalPrice   = GetTotalPriceFromCookieCart();
            int priceInCents = (int)(totalPrice * 100);

            // Gets the information about the customers from Stripe
            var customers = new StripeCustomerService();
            var customer  = customers.Create(new StripeCustomerCreateOptions
            {
                Email       = stripeEmail,
                SourceToken = stripeToken
            });

            // Gets the information about the charges made from Stripe
            var charges = new StripeChargeService();
            var charge  = charges.Create(new StripeChargeCreateOptions
            {
                Amount      = priceInCents,//charge in cents
                Description = "Sample Charge",
                Currency    = "eur",
                CustomerId  = customer.Id
            });

            if (charge.Paid)
            {
                // TODO ERROR

                // Gets the deliveryOption from the cookie
                Delivery deliveryOption = Newtonsoft.Json.JsonConvert.DeserializeObject <Delivery>(Request.Cookies[ConstVal.cookieDeliverOptionName].Value);

                IncomingOrder order;

                if (deliveryOption.OtherAddress)
                {
                    // If the client wants to use another address

                    // Get the client ID
                    int clientID = int.Parse(RudycommerceLib.Security.Encryption.DecryptString(Request.Cookies[ConstVal.cookieClientIDName].Value));

                    // Pass the inserted deliveryOption to the incoming order
                    order = new IncomingOrder(deliveryOption)
                    {
                        ClientID = clientID
                    };
                }
                else
                {
                    // If the client wants to use his home address for delivery

                    // Gets the client
                    var client = _client;

                    // Adds the client with his address to the incoming order
                    order = new IncomingOrder(client)
                    {
                        ClientID = client.ID
                    };
                }

                // Gives a status code 0 ( = Ordered, but not yet picked)
                order.StatusCode = 0;

                // Adds a paymentComplete, paymentOption and totalprice
                order.PaymentComplete = true;
                order.PaymentOption   = charge.Source.Card.Brand;
                order.TotalPrice      = totalPrice;

                // Gets the products from the cart cookie and adds them as order lines)
                var cart = GetCartFromCookie();
                foreach (var item in cart.ProductList)
                {
                    order.IncomingOrderLines.Add(new IncomingOrderLines
                    {
                        ProductID        = item.ID,
                        ProductQuantity  = item.Quantity,
                        ProductUnitPrice = item.Price / 100
                    });
                }

                // Creates the order and saves it
                _incOrderRepo.Add(order);
                _incOrderRepo.SaveChangesAsync();

                try
                {
                    string productsString = "";
                    foreach (var prod in cart.ProductList)
                    {
                        productsString += prod.Quantity.ToString() + " x " + prod.Name + "\r\n";
                    }

                    string title   = Resources.Checkout.OrderEmailTitle;
                    string content = string.Format(Resources.Checkout.OrderEmailContent, _client.FullName, productsString, deliveryOption.StreetAndNumber,
                                                   deliveryOption.MailBox, deliveryOption.PostalCode, deliveryOption.City);

                    GmailNotifier gmail = new GmailNotifier();
                    gmail.Notify(new System.Net.Mail.MailAddress(_client.Email), title, content);
                }
                catch (EmailSentFailed)
                {
                }
                catch (Exception)
                {
                    throw;
                }

                // Redirects to the Thank you page
                return(RedirectToAction("OrderFinished", "Orders", null));
            }
            else
            {
                // If the payment failed, send back to the payment page
                return(Payment());
            }
        }