public IActionResult Hold(int id)
        {
            var asset = _repository.GetById(id);

            var model = new CheckoutModel
            {
                AssetId       = id,
                ImageUrl      = asset.ImageUrl,
                Title         = asset.Title,
                LibraryCardId = "",
                IsCheckedOut  = _checkout.IsCheckedOut(id),
                HoldCount     = _checkout.GetCurrentHolds(id).Count()
            };

            return(View(model));
        }
        public IActionResult Checkout(int id)
        {
            var asset = _assets.GetById(id);

            var model = new CheckoutModel
            {
                AssetId       = asset.Id,
                Title         = asset.Title,
                ImageUrl      = asset.ImgUrl,
                LibraryCardId = "",
                HoldCount     = _checkout.CheckoutHistory(id).Count(),
                IsCheckedOut  = _checkout.IsCheckedOut(id)
            };

            return(View(model));
        }
        public IActionResult Index()
        {
            string ps_store_id = configuration.GetSection("MonerisConfiguration").GetSection("ps_store_id").Value;
            string hpp_key     = configuration.GetSection("MonerisConfiguration").GetSection("hpp_key").Value;
            string checkoutUrl = configuration.GetSection("MonerisConfiguration").GetSection("checkouturl").Value;

            CheckoutModel checkoutModel = new CheckoutModel();

            checkoutModel.PaymentGatewayConfig = new MonerisConfig()
            {
                StoreID = ps_store_id, HPPKey = hpp_key, CheckOutUrl = checkoutUrl
            };
            checkoutModel.OrderID     = Guid.NewGuid().ToString();
            checkoutModel.Amount      = "50.00";
            checkoutModel.CheckOurUrl = checkoutUrl;
            return(View(checkoutModel));
        }
Example #4
0
        public HistoryForm(CheckoutModel checkoutModel, ModelTets modelTetsTemp)
        {
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            this.model     = checkoutModel;
            this.modelTets = modelTetsTemp;

            InitializeComponent();

            Timer = new System.Windows.Forms.Timer()
            {
                Interval = 100
            };
            Timer.Tick  += new EventHandler(Timer_Tick);
            base.Opacity = 0;
            Timer.Start();
        }
 public ViewResult Checkout(Cart cart, CheckoutModel cm)
 {
     if (cart.Lines.Count() == 0)
     {
         ModelState.AddModelError("CustomError", "Sorry, your cart is empty!");
     }
     if (ModelState.IsValid)
     {
         // order processing logic
         cart.Clear();
         return(View("Completed"));
     }
     else
     {
         return(View(cm));
     }
 }
        // GET: Checkout/Create
        public ActionResult Create()
        {
            var checkout = new CheckoutModel();

            var currentUser = System.Web.HttpContext.Current.User as CustomPrincipal;

            if (currentUser == null)
            {
                return(RedirectToAction("Index", "Account"));
            }

            using (var proxy = new ClientesTouresBalonClient())
            {
                var c = proxy.ConsultarPorIdentificacionCliente((int)currentUser.CustId);
                checkout.Firstname      = c.nombres;
                checkout.LastName       = c.apellidos;
                checkout.CreditCardType = c.tipo_tarjeta;
                checkout.Creditcard     = c.numero_tarjeta;
                checkout.CustomerId     = c.id_cliente;
                if (c.email == null)
                {
                    return(RedirectToAction("Index", "Account"));
                }
            }

            var clientConfiguration = new MemcachedClientConfiguration {
                Protocol = MemcachedProtocol.Binary
            };

            clientConfiguration.Servers.Add(new IPEndPoint(IPAddress.Parse("192.168.99.100"), 32768));

            using (var cartCacheClient = new MemcachedClient(clientConfiguration))
            {
                checkout.Cart = cartCacheClient.Get <Cart>("Cart-" + currentUser.UserName);
                foreach (var item in checkout.Cart.Items)
                {
                    checkout.Total = checkout.Total + item.Cantidad * (item.Producto.tipo_espectaculo.precio + item.Producto.tipo_hospedaje.precio + item.Producto.tipo_transporte.precio);
                }
                if (checkout.Cart == null)
                {
                    return(RedirectToAction("Index", "Home"));
                }
            }

            return(View("Create", checkout));
        }
Example #7
0
        public async Task <IActionResult> Submit(CheckoutModel model)
        {
            if (model == null)
            {
                return(Redirect("/Cart/Cart"));
            }

            if (model.Cart == null || model.Cart.Count == 0)
            {
                return(Redirect("/Cart/Cart"));
            }

            var userId   = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
            var purchase = new Purchase()
            {
                UserId = int.Parse(userId)
            };

            _context.Add(purchase);


            foreach (var eve in model.Cart)
            {
                var eventId = eve.Key;
                var count   = eve.Value;

                var eveDb = await _context.Set <Event>().FirstOrDefaultAsync(x => x.ID == eventId);

                if (eveDb == null)
                {
                    return(BadRequest());
                }

                for (int i = 0; i < count; i++)
                {
                    var ticket = new Ticket();
                    ticket.Event    = eveDb;
                    ticket.Purchase = purchase;
                    ticket.PricePLN = eveDb.TicketPrice;
                    _context.Add(ticket);
                }
            }
            _context.SaveChanges();

            return(Redirect("/History/MyEvents"));
        }
Example #8
0
        // GET: Checkout
        public ActionResult Index()
        {
            var vm = new CheckoutModel();

            using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions(cartId, items, categories))
            {
                var shoppingCartItems = usersShoppingCart.GetCartItems();
                var cartItemsVM       = Mapper.Map <List <CartItemModel> >(shoppingCartItems);
                vm.CartItems  = cartItemsVM;
                vm.OrderTotal = usersShoppingCart.GetTotal();
                vm.ItemsTotal = usersShoppingCart.GetCount();
            }

            var user  = (User)Session["User"];
            var email = "*****@*****.**";

            if (user != null && !string.IsNullOrWhiteSpace(user.Email))
            {
                email = user.Email;
            }

            // To make filling out the form faster for demo purposes, pre-fill the values:
            vm.Order = new OrderModel
            {
                // Important! Keep this property here!
                Total = vm.OrderTotal,
                // Prefill properties for convenience:
                FirstName        = "Bob",
                LastName         = "Loblaw",
                Address          = "1313 Mockingbird Lane",
                City             = "Virginia Beach",
                State            = "VA",
                PostalCode       = "23456",
                Country          = "United States",
                Email            = email,
                NameOnCard       = "Bob Loblaw",
                CreditCardType   = "Visa",
                CreditCardNumber = "4111111111111111",
                ExpirationDate   = "12/25",
                CCV      = "987",
                SMSOptIn = true
            };

            return(View(vm));
        }
Example #9
0
        public async Task <CheckoutModel> CreateModel(CheckOutInputModel checkOutInputModel, string command)
        {
            var cart = await _mediator.Send(CartContentRequest.Create());

            var jurisdictions       = JurisdictionManager.GetJurisdictions(JurisdictionManager.JurisdictionType.Tax);
            var jurisdictionContrys = jurisdictions.Jurisdiction;
            var contrys             = jurisdictionContrys.Select(x => new SelectEntry()
            {
                DisplayName = x.DisplayName, Key = x.CountryCode, Selected = false
            }).ToList();

            var checkoutModel = new CheckoutModel()
            {
                Customer = checkOutInputModel, Cart = cart, Step = NextStep(command), JurisdictionContrys = contrys
            };

            return(checkoutModel);
        }
Example #10
0
        public ActionResult Checkout()
        {
            var cookie = Request.Cookies[".cart"];

            if (cookie == null)
            {
                return(RedirectToAction("Cart"));
            }

            var cart  = ArtContext.Carts.Single(where : "Cookie = @0", parms: cookie.Value);
            var items = ArtContext.CartItems.All(where : "CartId = @0", parms: cart.Id);

            var model = new CheckoutModel();

            model.GrandTotal = items.Aggregate(0D, (runningTotal, next) => runningTotal + (next.Quantity * next.Price));

            return(View(model));
        }
Example #11
0
        public CheckoutModel MakeModel(CapstoneShoppingListDBContext context)
        {
            var cart   = context.ShoppingListDetails;
            var table2 = context.ProductList;

            var checkout = new CheckoutModel();

            var productQuery = (from s in cart
                                join p in table2
                                on s.ProductId equals p.Id
                                select s.Product).ToList();

            checkout.Items      = productQuery;
            checkout.Total      = (double)productQuery.Sum(_ => _.Price);
            checkout.Tax        = Math.Round((checkout.Total * .06), 2, MidpointRounding.AwayFromZero);
            checkout.GrandTotal = checkout.Total + checkout.Tax;
            return(checkout);
        }
        public async Task <IActionResult> Checkout()
        {
            string sessionKey = MethodHelper.IsThereSomeone(HttpContext.Session);

            userSession = SessionHelper.GetObjectFromJson <UserModel>(HttpContext.Session, "userObject");
            if (userSession != null)
            {
                List <ProductModel> productFromSessionCard = SessionHelper.GetObjectFromJson <List <ProductModel> >(HttpContext.Session, sessionKey);
                StringContent       content       = new StringContent(JsonConvert.SerializeObject(productFromSessionCard), Encoding.UTF8, "application/json");
                CheckoutModel       checkoutModel = JsonConvert.DeserializeObject <CheckoutModel>(await MVCHelper.PostLoginAPI(configuration.GetSection("baseUrl").Value + "api/ProductToCard/" + sessionKey, content));
                HttpContext.Session.Remove("card");
                return(View("Checkout", checkoutModel));
            }
            else
            {
                return(RedirectToAction("Login", "Login"));
            }
        }
Example #13
0
        public UserSelectForm(CheckData checkModel, CheckoutModel checkoutModel, EDZ eDZ, ResultJSON resultJSONTemp)
        {
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            this.objEDZ     = eDZ;
            this.resultJSON = resultJSONTemp;
            this.model      = checkoutModel;
            this.checkData  = checkModel;
            InitializeComponent();

            Timer = new System.Windows.Forms.Timer()
            {
                Interval = 100
            };
            Timer.Tick  += new EventHandler(Timer_Tick);
            base.Opacity = 0;
            Timer.Start();
        }
Example #14
0
        // GET: Checkout
        public ActionResult Index()
        {
            CheckoutModel model = new CheckoutModel();
            // TODO: check this order id = cust's order id
            int orderId = int.Parse(Request.Cookies["OrderId"].Value);

            using (WebStoreDatabaseEntities e = new WebStoreDatabaseEntities())
            {
                var cart = e.OrderHeaders.Single(x => x.OrderId == orderId);
                //gets shipping method for display
                model.ShippingList = e.Shippings.Select(x => x.Method).ToList();
                var shipPrice = e.Shippings.Single(x => x.Method == model.ShippingMethod).Price;

                model.TotalDue = cart.SubTotal + shipPrice;
                // TODO: eventually add state tax, but for now assume the ship price includes some type of tax
            }
            return(View(model));
        }
Example #15
0
        public bool AddToOrders(CheckoutModel orders)
        {
            using (var connection = new MySqlConnection(this.connectionString))
            {
                try
                {
                    connection.Execute(
                        "insert into orders (price, adress, email, name) values (@price, @adress, @email, @name)",
                        new { price = @orders.price, adress = @orders.adress, email = @orders.email, name = @orders.name });
                }
                catch (Exception)
                {
                    return(false);
                }
            }

            return(true);
        }
Example #16
0
        public ReadIdCardFrm(CheckoutModel checkModel, ResultJSON resultJSONTemp)
        {
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

            this.model      = checkModel;
            this.resultJson = resultJSONTemp;

            InitializeComponent();

            Timer = new System.Windows.Forms.Timer()
            {
                Interval = 100
            };
            Timer.Tick  += new EventHandler(Timer_Tick);
            base.Opacity = 0;
            Timer.Start();
        }
Example #17
0
        public IActionResult Hold(int id) //Giu sach
        {
            var asset = _assets.Get(id);
            //HttpContext.Session.SetInt32("LibraryCard", patron_id.LibraryCard.Id);
            // msg += HttpContext.Session.GetInt32("LibraryCard");
            //msg += HttpContext.Session.GetString("username");
            var libCard = HttpContext.Session.GetInt32("LibraryCard");
            var model   = new CheckoutModel
            {
                AssetId       = id,
                ImageUrl      = asset.ImageUrl,
                Title         = asset.Title,
                LibraryCardId = libCard.ToString(),
                HoldCount     = _checkouts.GetCurrentHold(id).Count()
            };

            return(View(model));
            //return Content(msg);
        }
        public IActionResult Hold(int id)
        {
            var device = _devices.GetById(id);
            //var user = _users.Get(Int32.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier)));
            var user = _users.GetAll().FirstOrDefault(u => u.Username == this.User.Identity.Name);

            var model = new CheckoutModel
            {
                DeviceID    = id,
                ImageUrl    = device.ImageUrl,
                Description = device.Description,
                //UserCardId = user.UserCard.Id.ToString(),
                UserId       = user.Id.ToString(),
                IsCheckedOut = _checkouts.IsCheckedOut(id),
                HoldCount    = _checkouts.GetCurrentHolds(id).Count()
            };

            return(View(model));
        }
        public IActionResult Checkout(int id)
        {
            var device = _devices.GetById(id);
            //Need to update the following line after implementing the new Authentication system
            //var user = _users.Get(Int32.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier)));
            var user = _users.GetAll().FirstOrDefault(u => u.Username == this.User.Identity.Name);

            var model = new CheckoutModel
            {
                DeviceID    = id,
                ImageUrl    = device.ImageUrl,
                Description = device.Description,
                //UserCardId = user.UserCard.Id.ToString(),
                UserId       = user.Id.ToString(),
                IsCheckedOut = _checkouts.IsCheckedOut(id)
            };

            return(View(model));
        }
        public ActionResult Result()
        {
            // Get values from model and send to view
            CheckoutModel checkout    = new CheckoutModel();
            string        checkoutStr = HttpContext.Session.GetString("checkout");

            checkout = JsonConvert.DeserializeObject <CheckoutModel>(checkoutStr);

            ViewBag.Name    = checkout.Name;
            ViewBag.Ssn     = checkout.Ssn;
            ViewBag.Address = checkout.Address;
            ViewBag.Zip     = checkout.Zip;
            ViewBag.City    = checkout.City;
            ViewBag.Phone   = checkout.Phone;
            ViewBag.Email   = checkout.Email;
            HttpContext.Session.Remove("SelectedItems");
            ViewData["CartItems"] = 0;
            return(View());
        }
Example #21
0
        public CheckoutModel GetCheckout()
        {
            //kiem tra coi da dang nhap hay chua de hien thi View tuong ung
            string        username = SessionHelper.GetUserSession();
            CheckoutModel checkout = new CheckoutModel();

            if (username != null)
            {
                checkout.listCartSession = SessionHelper.GetCartSession(username);
                //checkout.user = (from u in db.THANHVIENs where u.TENDANGNHAP == username select u).SingleOrDefault();
                //ViewBag.summoney = Summoney(checkout.listCartSession);
                return(checkout);
            }
            else
            {
                checkout.listCartSession = SessionHelper.GetCartSession("cart");
                return(checkout);
            }
        }
        /// <summary>
        /// Populate and return the custom checkout model, containing billing and shipping information, along with the shopping cart.
        /// </summary>
        /// <param name="customerId">the customer to get the cart information for</param>
        /// <returns></returns>
        public ActionResult Checkout(int customerId)
        {
            CheckoutModel cart = new CheckoutModel();

            // initialize the sub-model as well
            cart.billing = new BillingModel();

            try
            {
                // query entity model for customer and relevant addresses/billing information
                Customer customer = _db.Customer
                                    .Include(cust => cust.Address)
                                    .ThenInclude(add => add.BillingInformation)
                                    .First(m => m.CustomerId == customerId);

                cart.customer = customer;

                cart.shoppingCart = GetCart(cart.customer.CustomerId)
                                    .Where(x => !x.IsWishList)
                                    .ToList();

                // sum the total cost of the cart items
                cart.amount = 0;
                foreach (var item in cart.shoppingCart)
                {
                    cart.amount += (item.Inventory.Price * item.Quantity);
                }

                cart.billing.billingAddress  = customer.Address.Where(m => m.AddressType == "Billing").FirstOrDefault();
                cart.billing.shippingAddress = customer.Address.Where(m => m.AddressType == "Shipping").FirstOrDefault();
                if (cart.billing.billingAddress != null)
                {
                    cart.billing.billingInformation = cart.billing.billingAddress.BillingInformation.FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }

            return(View(cart));
        }
        // POST: /Imprimir/CheckoutPagamento
        public IActionResult AjaxCheckoutPagamento(CheckoutModel checkout)
        {
            try
            {
                var validation = new CheckoutValidation().Validate(checkout);
                if (validation.IsValid)
                {
                    PedidoModel pedido = PedidoFromSession();
                    pedido.Checkout = checkout;
                    db.Pedidos.Insert(pedido);

                    int valor = (int)((pedido.valor_total) * 100);
                    return(Json(new
                    {
                        res = true,
                        amount = valor.ToString(),

                        /*customer = new
                         * {
                         *      external_id = "123",
                         * }*/
                    }));
                }
                else
                {
                    var errors = validation.Errors.Select(e => e.ErrorMessage).ToList();
                    return(Json(new
                    {
                        res = false,
                        errors
                    }));
                }
            }
            catch (Exception)
            {
                return(Json(new
                {
                    res = false,
                    errors = new[] { "Erro no servidor" }
                }));
            }
        }
Example #24
0
        public async Task <IActionResult> Checkout([FromBody] CheckoutModel checkoutModel)
        {
            using (var transaction = scvContext.Database.BeginTransaction(IsolationLevel.Serializable))
            {
                var order = await scvContext.Orders
                            .Include(o => o.OrderItems)
                            .Where(o => o.Id == checkoutModel.CartId)
                            .Cacheable()
                            .SingleAsync();

                var orderNumber = await scvContext.Orders
                                  .MaxAsync(o => o.OrderNumber) ?? 0;

                order.OrderNumber = ++orderNumber;
                order.OrderStatus = OrderStatus.Closed;
                order.CloseDate   = DateTime.Now;

                scvContext.Orders.Update(order);

                var orderDetails = new OrderDetails
                {
                    OrderId          = checkoutModel.CartId,
                    Street           = checkoutModel.Street,
                    City             = checkoutModel.City,
                    State            = checkoutModel.State,
                    Country          = checkoutModel.Country,
                    PostalCode       = checkoutModel.PostalCode,
                    CreditCardNumber = checkoutModel.CreditCardNumber,
                    VerificationCode = checkoutModel.VerificationCode
                };

                scvContext.OrderDetails.Add(orderDetails);

                await scvContext.SaveChangesAsync();

                await providerService.SellProductsAsync(order);

                transaction.Commit();

                return(Ok(orderNumber));
            }
        }
Example #25
0
        public ActionResult Index(CheckoutModel model)
        {
            if (ModelState.IsValid)
            {
                // TODO: if check out...
                using (WebStoreDatabaseEntities entities = new WebStoreDatabaseEntities())
                {
                    int orderNumber = int.Parse(Request.Cookies["OrderId"].Value);
                    var orderHeader = entities.OrderHeaders.Single(x => x.OrderId == orderNumber);
                    //looks at shipping table, gets method that equals model.method, then finds the ID for that method.
                    var shipMethod = entities.Shippings.Single(x => x.Method == model.ShippingMethod).ShippingMethodId;

                    var address = entities.Addresses.FirstOrDefault(
                        x => x.Line1 == model.ShippingAddress1 &&
                        x.Line2 == model.ShippingAddress2 &&
                        x.City == model.ShippingCity &&
                        x.State == model.ShippingState &&
                        x.Zipcode == model.ShippingZipcode);

                    if (address == null)
                    {
                        address = new Address
                        {
                            AddressId = entities.Addresses.Max(x => x.AddressId) + 1,
                            Line1     = model.ShippingAddress1,
                            Line2     = model.ShippingAddress2,
                            City      = model.ShippingCity,
                            State     = model.ShippingState,
                            Zipcode   = model.ShippingZipcode,
                        };
                        entities.Addresses.Add(address);
                    }
                    orderHeader.ShipToAddress = address.AddressId;
                    entities.SaveChanges();
                }
                return(RedirectToAction("Index", "Receipt"));
            }
            else
            {
                return(View(model));
            }
        }
        public ActionResult UpdateUserToBasket(CheckoutModel model)
        {
            if (!ModelState.IsValid)
            {
                return(JsonValidationError());
            }
            var responseresult = new ResponseModel <Omnicx.WebStore.Models.Commerce.BasketModel>();
            var response       = _customerRepository.GetUserdetailsByUserName(Sanitizer.GetSafeHtmlFragment(model.Email));
            var existingUser   = response.Result;

            if (existingUser.Count > 0)
            {
                var customerId = existingUser[0].UserId;
                if (model.CustomerId == null)
                {
                    responseresult = _checkoutApi.UpdateUserToBasket(model.BasketId, customerId.ToString());
                }
            }
            return(JsonSuccess(responseresult, JsonRequestBehavior.AllowGet));
        }
Example #27
0
        public IActionResult PlaceCheckout(int assetId, int libraryCardId)
        {
            if (_checkouts.CheckHoldExist(assetId, libraryCardId) || _checkouts.CheckLibraryCardId(libraryCardId))
            {
                ViewBag.error = "Invalid";
                var asset = _assets.Get(assetId);

                var model = new CheckoutModel
                {
                    AssetId       = assetId,
                    ImageUrl      = asset.ImageUrl,
                    Title         = asset.Title,
                    LibraryCardId = "",
                    HoldCount     = _checkouts.GetCurrentHold(assetId).Count()
                };
                return(View("Checkout", model));
            }
            _checkouts.CheckoutItem(assetId, libraryCardId);
            return(RedirectToAction("Detail", new { id = assetId }));
        }
Example #28
0
        public ActionResult Betaal()
        {
            //haal de sessie op
            List <ShoppingCartItem> lijst = HaalCartSessieOp();

            //vul checkoutmodel met juiste events
            CartPresentationModel reservingen = presentation.FillPresentationModel(lijst);

            CheckoutModel Model = new CheckoutModel(reservingen);

            if (Model.Reserveringen.Items.Count > 0 && Model.Email != "")
            {
                return(View(Model));
            }

            else
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
Example #29
0
        public ActionResult Index(BillingInfo info)
        {
            CheckoutModel model = new CheckoutModel()
            {
                Info = new CheckoutInfo
                {
                    BillingInfo = info
                }
            };
            // get Cart list items from sesion
            var sesionList = (List<CartItem>)Session["CART_SESSION"];

            CartModel cartModel = new CartModel();

            if (sesionList != null)
            {
                cartModel.get_Item_Details(sesionList);
            }
            else
            {
                List<CartItem> list = new List<CartItem>();
                cartModel.itemList = list;
            }

            model.Info.CartItems = cartModel.itemList;

            // create orders
            var helper = new Cart_CheckoutModel();
            try
            {
                helper.Create_Order_Infomation(model.Info);
                ViewBag.isSuccess = true;
            }
            catch (Exception ex)
            {
                ViewBag.isSuccess = false;
            }
            

            return View("ThongBao");
        }
Example #30
0
        public ViewResult Checkout()
        {
            CheckoutModel model = new CheckoutModel()
            {
            };


            foreach (var item in cart.Lines)
            {
                model.Movies.Add(item.Movie);
            }
            //foreach (var item in cart.Lines)
            //{
            //    model.games.Add(item.Game);
            //}

            return(View(new CartIndexViewModel
            {
                Cart = GetCart()
            }));
        }
        public CheckoutModel GetMyWallet(string providerUserKey)
        {
            using (var context = new greenMoneyEntities())
            {
                var user = context.Users1.Find(new Guid(providerUserKey));

                var vaucerItems = user.Vouchers.Select(i => new WalletItemSummary
                {
                    VoucherId = i.Id,
                    Name = i.Rewards.PartnerName,
                    Description = i.Rewards.Name,
                    Price = i.Rewards.Price,
                    DollarPrice = i.Rewards.DollarPrice,
                    ImageId = i.Rewards.ImageId,
                    DateAdded = i.Issued,
                    DateExpired = i.Issued.AddDays(30),
                    ValidFrom = i.Rewards.ValidFrom,
                    ValidTo = i.Rewards.ValidTo,
                    Mobile = i.Rewards.Mobile
                }).ToList();

                //vaucerItems = vaucerItems.Where(v => v.ValidTo != null && v.DateAdded > DateTime.Now.AddDays(-30)).ToList();
                List<WalletItemSummary> vouchersToShow = vaucerItems.Where(v => v.DateExpired >= DateTime.Now).ToList();

                var model = new CheckoutModel
                {
                    Items = vouchersToShow.OrderBy(v=>v.DateExpired).ThenBy(v=>v.DateAdded),
                    CartTotal = user.CartItems.Sum(i => i.Cost),
                    CartDollarTotal = user.CartItems.Sum(i => i.DollarCost),
                    //a reward is a voucher if it has a $0 price
                    HasVouchers = user.CartItems.Any(i => i.Rewards.DollarPrice == 0)
                };

                return model;
            }
        }
        public CheckoutModel GetMyCartCheckout(string providerUserKey)
        {
            using (var context = new greenMoneyEntities())
            {
                var user = context.Users1.Find(new Guid(providerUserKey));

                var items = user.CartItems.Select(i => new WalletItemSummary
                {
                    Id = i.Id,
                    Name = i.Rewards.Name,
                    Description = i.Rewards.Description,
                    Quantity = i.Quantity,
                    Price = i.Rewards.Price,
                    DollarPrice = i.Rewards.DollarPrice,
                    ImageId = i.Rewards.ImageId,
                    DateAdded = i.Rewards.DateAdded,
                    ValidFrom = i.Rewards.AvailableFrom,
                    ValidTo = i.Rewards.AvailableTo
                });

                var model = new CheckoutModel
                {
                    Items = items.OrderByDescending(c=>c.DateExpired).ThenByDescending(c=>c.DateAdded),
                    CartTotal = user.CartItems.Sum(i => i.Cost),
                    CartDollarTotal = user.CartItems.Sum(i => i.DollarCost),
                    //a reward is a voucher if it has a $0 price
                    HasVouchers = user.CartItems.Any(i => i.Rewards.DollarPrice == 0)
                };

                return model;
            }
        }
        /// <summary>
        /// Prepares the checkout model.
        /// </summary>
        /// <param name="model">The checkout model.</param>
        /// <returns>CheckoutModel.</returns>
        private CheckoutModel PrepareCheckoutModel(CheckoutModel model)
        {
            model.ButtonText = "Already registered? Click here to login.";
            model.Type = PopupType.LinkButton;
            model.ViewName = "~/Account/LogOnAsync";
            model.PopupTitle = "Login or Create New Account";

            var countries = _countryClient.GetAllCountries();

            // Bind addresses
            if (model.BillingAddress == null)
            {
                model.BillingAddress = new CheckoutAddressModel { Address = new AddressModel { Name = "Billing" } };
            }
            if (model.ShippingAddress == null)
            {
                model.ShippingAddress = new CheckoutAddressModel { Address = new AddressModel { Name = "Shipping" } };
            }

            model.BillingAddress.Countries = countries;
            model.ShippingAddress.Countries = countries;

            if (model.AddressBook == null)
            {
                model.AddressBook = new AddressBook();
            }

            if (UserHelper.CustomerSession.IsRegistered)
            {
                model.AddressBook.Addresses = UserHelper.GetAllCustomerAddresses().ToArray();
            }

            return model;
        }
        public CheckoutModel GetMyChallengesWallet(string providerUserKey)
        {
            using (var context = new greenMoneyEntities())
            {
                DateTime monthBeforeDate = DateTime.Today.AddDays(-30);

                var userChallenges = context.UserChallenges.Where(c => c.UserId == new Guid(providerUserKey)
                    && c.Issued > monthBeforeDate && c.PointsClaimed == false);

                List<WalletItemSummary> challenges = new List<WalletItemSummary>();
                foreach (var challenge in userChallenges)
                {
                    WalletItemSummary summaryModel = new WalletItemSummary
                    {
                        Id = challenge.ChallengeId.HasValue ? challenge.ChallengeId.Value : 0,
                        Name = challenge.Challenges.Name,
                        Description = challenge.Challenges.EarnAmount,
                        ChallengeCategoryShortName = challenge.Challenges.ChallengeCategories.ShortName,
                        CategoryImageId = challenge.Challenges.ChallengeCategories.ImageId,
                        ImageId = challenge.Challenges.LogoImageId,
                        DateAdded = challenge.Issued,
                        DateExpired = challenge.Challenges.EndDate,
                        PointsClaimed = challenge.PointsClaimed != null && (bool)challenge.PointsClaimed
                    };
                    challenges.Add(summaryModel);
                }

                var model = new CheckoutModel
                {
                    Items = challenges.OrderBy(c => c.DateExpired).ThenBy(c => c.DateAdded)
                };

                return model;
            }
        }
        /// <summary>
        /// Updates the cart.
        /// </summary>
        /// <param name="model">The checkout model.</param>
        /// <param name="isFinalStep">if set to <c>true</c> [is final step].</param>
        private void UpdateCart(CheckoutModel model, bool isFinalStep = false)
        {
            PrepareCheckoutModel(model);

            var errors = new List<string>();

            var form = Ch.OrderForm;

            #region Process billing address

            var billingAddress = Ch.FindAddressByName("Billing");
            if (billingAddress == null)
            {
                billingAddress = new OrderAddress();
                Ch.Cart.OrderAddresses.Add(billingAddress);
            }

            var orderAddressId = billingAddress.OrderAddressId;

            // if not empty, then we use existing customer address
            if (!String.IsNullOrEmpty(model.AddressBook.BillingAddressId))
            {
                // load address from the customer address book
                var userAddress = _userClient.GetUserAddress(model.AddressBook.BillingAddressId);
                if (userAddress != null)
                {
                    billingAddress.InjectFrom(userAddress);
                }
            }
            else
            {
                billingAddress.InjectFrom(
                    new IgnorePropertiesInjection("OrderGroupId", "OrderGroup", "OrderAddressId", "Created"),
                    model.BillingAddress.Address);
            }

            billingAddress.Name = "Billing";
            billingAddress.OrderAddressId = orderAddressId;
            model.BillingAddress.Address = ConvertToAddressModel(billingAddress);

            var hasValidBillingAddress = DoValidateModel(billingAddress);
            if (hasValidBillingAddress)
            {
                Ch.Cart.AddressId = orderAddressId;
                Ch.OrderForm.BillingAddressId = orderAddressId;
            }
            else
            {
                //Remove invalid address from cart if not final step
                //otherwise saving cart will fail
                if (!isFinalStep)
                {
                    Ch.Cart.OrderAddresses.Remove(billingAddress);
                }

                errors.Add("Billing address is invalid");
            }

            #endregion

            #region Process shipping address

            var shippingAddress = Ch.FindAddressByName("Shipping");
            if (shippingAddress == null)
            {
                shippingAddress = new OrderAddress();
                Ch.Cart.OrderAddresses.Add(shippingAddress);
            }

            var shippingAddressId = shippingAddress.OrderAddressId;

            if (model.UseForShipping)
            {
                shippingAddress.InjectFrom(billingAddress);
            }
            else if (!String.IsNullOrEmpty(model.AddressBook.ShippingAddressId))
            {
                // load address from the customer address book
                var userAddress = _userClient.GetUserAddress(model.AddressBook.ShippingAddressId);
                if (userAddress != null)
                {
                    shippingAddress.InjectFrom(userAddress);
                }
            }
            else
            {
                shippingAddress.InjectFrom(
                    new IgnorePropertiesInjection("OrderGroupId", "OrderGroup", "OrderAddressId", "Created"),
                    model.ShippingAddress.Address);
            }

            shippingAddress.Name = "Shipping";
            shippingAddress.OrderAddressId = shippingAddressId;
            model.ShippingAddress.Address = ConvertToAddressModel(shippingAddress);

            var hasValidShippingAddress = DoValidateModel(shippingAddress);
            if (!hasValidShippingAddress)
            {
                //Remove invalid address from cart if not final step
                //otherwise saving cart will fail
                if (!isFinalStep)
                {
                    Ch.Cart.OrderAddresses.Remove(shippingAddress);
                }

                errors.Add("Shipping address is invalid");
            }

            #endregion

            #region Update payment info

            var paymentmethod = model.PaymentMethod;
            var paymentCreated = false;

            if (!String.IsNullOrEmpty(paymentmethod))
            {
                var paymentModel = model.Payments.Single(p => p.Name.Equals(paymentmethod, StringComparison.OrdinalIgnoreCase));
                var payment = CreatePayment(form, paymentmethod, paymentModel);

                form.Payments.Clear();

                if (DoValidateModel(payment))
                {
                    form.Payments.Add(payment);
                    paymentCreated = true;
                }
            }

            if (!paymentCreated)
            {
                errors.Add("Failed to create payment".Localize());
            }

            #endregion

            #region Update shipment delivery method

            if (!string.IsNullOrEmpty(model.ShippingMethod))
            {
                foreach (var lineItem in form.LineItems)
                {
                    var shippingMethod = Ch.GetShippingMethods(new List<string> { model.ShippingMethod }).First();
                    lineItem.ShippingMethodName = shippingMethod.DisplayName;
                    lineItem.ShippingMethodId = shippingMethod.Id;
                }
            }

            #endregion

            #region Update Shipment ShipmentAddressId

            //If ShipmentSplitActivity is not called ShipmentAddressId must be updated manually
            if (hasValidShippingAddress)
            {
                foreach (var shipment in form.Shipments)
                {
                    shipment.ShippingAddressId = model.ShippingAddress.Address.AddressId;
                }
                foreach (var lineItem in form.LineItems)
                {
                    lineItem.ShippingAddressId = model.ShippingAddress.Address.AddressId;
                }
            }

            #endregion

            foreach (var err in errors)
            {
                ModelState.AddModelError("", err);
            }
        }
        private void RecalculateCart(CheckoutModel checkoutModel)
        {
            // reset the cart
            Ch.Reset();

            // Update cart from the post back
            UpdateCart(checkoutModel);

            // run workflow
            Ch.RunWorkflow("ShoppingCartPrepareWorkflow");

            // save changes
            Ch.SaveChanges();
        }
        public ActionResult PaypalExpress(CheckoutModel model, SolutionTypeType solutionType = SolutionTypeType.SOLE)
        {
            // Create request object
            var request = new SetExpressCheckoutRequestType();
            var ecDetails = new SetExpressCheckoutRequestDetailsType
            {
                CallbackTimeout = "3",
                ReturnURL = Url.Action("PaypalExpressSuccess", "Checkout", null, "http"),
                CancelURL = Url.Action("Index", "Checkout", null, "http"),
                SolutionType = solutionType
            };

            var currency = (CurrencyCodeType)Enum.Parse(typeof(CurrencyCodeType), Ch.CustomerSession.Currency.ToUpper());
            model = PrepareCheckoutModel(model);
            model.Payments = model.Payments ?? GetPayments().ToArray();
            var payment = _paymentClient.GetPaymentMethod(model.PaymentMethod ?? "Paypal");
            var configMap = payment.CreateSettings();

            //Create Shipping methods
            var shippingMethods = GetShipinngMethodModels();
            var noShippingMethod = !shippingMethods.Any(x => x.IsCurrent);
            string currentShippingOption = null;

            for (var i = 0; i < shippingMethods.Length; i++)
            {
                var shipping = shippingMethods[i];
                var shippingOptionIsDefault = "0";
                if (shipping.IsCurrent || noShippingMethod && i == 0)
                {
                    shippingOptionIsDefault = "1";
                    currentShippingOption = shipping.Method.Name;
                }

                ecDetails.FlatRateShippingOptions.Add(new ShippingOptionType
                {
                    ShippingOptionAmount = new BasicAmountType(currency, FormatMoney(shipping.Price)),
                    ShippingOptionIsDefault = shippingOptionIsDefault,
                    ShippingOptionName = shipping.Method.Name,
                });
            }

            var recalcualteCart = false;

            if (!string.Equals(model.ShippingMethod,currentShippingOption))
            {
                model.ShippingMethod = currentShippingOption;
                recalcualteCart = true;
            }

            if (!string.Equals(model.PaymentMethod, payment.Name))
            {
                model.PaymentMethod = payment.Name;
                recalcualteCart = true;
            }

            if (recalcualteCart)
            {
                //Must recalculate cart as prices could have changed
                RecalculateCart(model);
            }

            // (Optional) Email address of the buyer as entered during checkout. PayPal uses this value to pre-fill the PayPal membership sign-up portion on the PayPal pages.
            if (model.BillingAddress != null && !string.IsNullOrEmpty(model.BillingAddress.Address.Email))
            {
                ecDetails.BuyerEmail = model.BillingAddress.Address.Email;
            }

            ecDetails.NoShipping = "2";
            ecDetails.PaymentDetails.Add(GetPaypalPaymentDetail(currency, PaymentActionCodeType.SALE));
            ecDetails.MaxAmount = new BasicAmountType(currency, FormatMoney(Math.Max(Ch.Cart.Total, Ch.Cart.Subtotal)));
            ecDetails.LocaleCode = new RegionInfo(Thread.CurrentThread.CurrentUICulture.LCID).TwoLetterISORegionName;
            //paymentDetails.OrderDescription = Ch.Cart.Name;

            AddressModel modelAddress = null;

            if (!model.UseForShipping && model.ShippingAddress != null && DoValidateModel(model.ShippingAddress.Address))
            {
                modelAddress = model.ShippingAddress.Address;
            }
            else if (model.BillingAddress != null && DoValidateModel(model.BillingAddress.Address))
            {
                modelAddress = model.BillingAddress.Address;
            }

            if (modelAddress != null)
            {
                ecDetails.AddressOverride = "1";

                var shipAddress = new AddressType
                {
                    Name = string.Format("{0} {1}", modelAddress.FirstName, modelAddress.LastName),
                    Street1 = modelAddress.Line1,
                    Street2 = modelAddress.Line2,
                    CityName = modelAddress.City,
                    StateOrProvince = modelAddress.StateProvince,
                    Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), modelAddress.CountryCode.Substring(0, 2)),
                    PostalCode = modelAddress.PostalCode,
                    Phone = modelAddress.DaytimePhoneNumber
                };
                ecDetails.PaymentDetails[0].ShipToAddress = shipAddress;
            }

            request.SetExpressCheckoutRequestDetails = ecDetails;


            // Invoke the API
            var wrapper = new SetExpressCheckoutReq { SetExpressCheckoutRequest = request };

            // Create the PayPalAPIInterfaceServiceService service object to make the API call
            var service = new PayPalAPIInterfaceServiceService(configMap);

            SetExpressCheckoutResponseType setEcResponse = null;

            try
            {
                setEcResponse = service.SetExpressCheckout(wrapper);
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", @"Paypal failure".Localize());
                ModelState.AddModelError("", ex.Message);
            }

            if (setEcResponse != null)
            {
                // Check for API return status
                if (setEcResponse.Ack.Equals(AckCodeType.FAILURE) ||
                    (setEcResponse.Errors != null && setEcResponse.Errors.Count > 0))
                {
                    ModelState.AddModelError("", @"Paypal failure".Localize());

                    foreach (var error in setEcResponse.Errors)
                    {
                        ModelState.AddModelError("", error.LongMessage);
                    }
                }
                else
                {
                    var redirectUrl =
                        string.Format(
                            configMap.ContainsKey("URL")
                                ? configMap["URL"]
                                : "https://www.sandbox.paypal.com/webscr&amp;cmd={0}",
                            "_express-checkout&token=" + setEcResponse.Token);
                    TempData.Add("checkout_" + setEcResponse.Token,model);
                    return Redirect(redirectUrl);
                }
            }

            return View("Index", model);
        }
        public ActionResult ProcessCheckout(CheckoutModel checkoutModel)
        {
            //Need to submit changes again to make sure cart is still valid
            RecalculateCart(checkoutModel);

            if (!ModelState.IsValid)
            {
                return View("Index", checkoutModel);
            }

            if (checkoutModel.PaymentMethod.Equals("PayPal", StringComparison.OrdinalIgnoreCase))
            {
                return PaypalExpress(checkoutModel, SolutionTypeType.MARK);
            }


            if (UserHelper.CustomerSession.IsRegistered)
            {
                var orgs = _userClient.GetOrganizationsForCurrentUser();
                if (orgs != null)
                {
                    var org = orgs.SingleOrDefault();
                    if (org != null)
                        Ch.Cart.OrganizationId = org.MemberId;
                }

                var user = _userClient.GetCurrentCustomer(false);


                // Save addresses to customer address book
                if (checkoutModel.AddressBook.SaveBillingAddress)
                {
                    var billing = ConvertToCustomerAddress(checkoutModel.BillingAddress.Address);
                    billing.AddressId = Guid.NewGuid().ToString();
                    user.Addresses.Add(billing);
                }
                if (checkoutModel.AddressBook.SaveShippingAddress)
                {
                    var shipping = ConvertToCustomerAddress(checkoutModel.ShippingAddress.Address);
                    shipping.AddressId = Guid.NewGuid().ToString();
                    user.Addresses.Add(shipping);
                }

                //Save last ordered date&time to customer profile
                var lastOrdered = user.ContactPropertyValues.FirstOrDefault(x => x.Name == ContactPropertyValueName.LastOrder);

                if (lastOrdered != null)
                {
                    lastOrdered.DateTimeValue = DateTime.UtcNow;
                }
                else
                {
                    user.ContactPropertyValues.Add(new ContactPropertyValue
                    {
                        DateTimeValue = DateTime.UtcNow,
                        Name = ContactPropertyValueName.LastOrder,
                        ValueType = PropertyValueType.DateTime.GetHashCode()
                    });
                }

                _userClient.SaveCustomerChanges(user.MemberId);
            }
            else if (checkoutModel.CreateAccount)
            {
                var regModel = new RegisterModel();

                regModel.InjectFrom(checkoutModel, checkoutModel.BillingAddress.Address);

                //Save billing address to book
                var billing = ConvertToCustomerAddress(checkoutModel.BillingAddress.Address);
                billing.AddressId = Guid.NewGuid().ToString();
                regModel.Addresses.Add(billing);

                //save shipping address to book
                if (!checkoutModel.UseForShipping)
                {
                    var shipping = ConvertToCustomerAddress(checkoutModel.ShippingAddress.Address);
                    shipping.AddressId = Guid.NewGuid().ToString();
                    regModel.Addresses.Add(shipping);
                }

                string message;

                if (!UserHelper.Register(regModel, out message))
                {
                    ModelState.AddModelError("", message);
                    return View("Index", checkoutModel);
                }

                UserHelper.OnPostLogon(regModel.Email);
            }

            if (DoCheckout())
            {
                return RedirectToAction("ProcessCheckout", "Checkout", new { id = Ch.Cart.OrderGroupId });
            }


            return View("Index", checkoutModel);
        }
 public ActionResult SubmitChanges(CheckoutModel checkoutModel)
 {
     RecalculateCart(checkoutModel);
     return DisplayCart();
 }
        /// <summary>
        /// Checkout home page
        /// </summary>
        /// <returns>ActionResult.</returns>
        public ActionResult Index()
        {
            if (Ch.IsEmpty)
                return RedirectToAction("Index", "Cart");

            var model = new CheckoutModel();

            //Need to make sure we are displaying correct cart
            RecalculateCart(model);
            //Dont show any errors initially
            ModelState.Clear();

            return View(model);
        }
        public ActionResult ProcessCheckout(CheckoutModel checkoutModel)
        {
            //Need to submit changes again to make sure cart is still valid
            RecalculateCart(checkoutModel);

            if (!ModelState.IsValid)
            {
                return View("Index", checkoutModel);
            }

            if (checkoutModel.PaymentMethod.Equals("PayPal", StringComparison.OrdinalIgnoreCase))
            {
                return PaypalExpress(checkoutModel, SolutionTypeType.MARK);
            }


            if (UserHelper.CustomerSession.IsRegistered)
            {
                var orgs = _userClient.GetOrganizationsForCurrentUser();
                if (orgs != null)
                {
                    var org = orgs.SingleOrDefault();
                    if (org != null)
                        Ch.Cart.OrganizationId = org.MemberId;
                }

                var user = _userClient.GetCurrentCustomer(false);

                // Save addresses to customer address book
                if (checkoutModel.AddressBook.SaveBillingAddress)
                {
                    var billing = ConvertToCustomerAddress(checkoutModel.BillingAddress.Address);
                    billing.AddressId = Guid.NewGuid().ToString();
                    user.Addresses.Add(billing);
                }
                if (checkoutModel.AddressBook.SaveShippingAddress)
                {
                    var shipping = ConvertToCustomerAddress(checkoutModel.ShippingAddress.Address);
                    shipping.AddressId = Guid.NewGuid().ToString();
                    user.Addresses.Add(shipping);
                }

                //Save last ordered date&time to customer profile
                var lastOrdered = user.ContactPropertyValues.FirstOrDefault(x => x.Name == ContactPropertyValueName.LastOrder);

                if (lastOrdered != null)
                {
                    lastOrdered.DateTimeValue = DateTime.UtcNow;
                }
                else
                {
                    user.ContactPropertyValues.Add(new ContactPropertyValue
                    {
                        DateTimeValue = DateTime.UtcNow,
                        Name = ContactPropertyValueName.LastOrder,
                        ValueType = PropertyValueType.DateTime.GetHashCode()
                    });
                }

                _userClient.SaveCustomerChanges(user.MemberId);
            }
            else if (checkoutModel.CreateAccount)
            {
                var regModel = new RegisterModel();

                regModel.InjectFrom(checkoutModel, checkoutModel.BillingAddress.Address);

                //Save billing address to book
                var billing = ConvertToCustomerAddress(checkoutModel.BillingAddress.Address);
                billing.AddressId = Guid.NewGuid().ToString();
                regModel.Addresses.Add(billing);

                //save shipping address to book
                if (!checkoutModel.UseForShipping)
                {
                    var shipping = ConvertToCustomerAddress(checkoutModel.ShippingAddress.Address);
                    shipping.AddressId = Guid.NewGuid().ToString();
                    regModel.Addresses.Add(shipping);
                }

                string message,token;

                var requireConfirmation = StoreHelper.GetSettingValue("RequireAccountConfirmation", false);

                if (!UserHelper.Register(regModel, requireConfirmation, out message, out token))
                {
                    ModelState.AddModelError("", message);
                    return View("Index", checkoutModel);
                }

                if (requireConfirmation)
                {
                    var user = string.Format("{0} {1}", regModel.FirstName, regModel.LastName);
                    var linkUrl = Url.Action("ConfirmAccount", "Account", new { token, username = regModel.Email }, Request.Url.Scheme);

                    if (
                        UserHelper.SendEmail(linkUrl, user, regModel.Email, "confirm-account",
                            emailMessage =>
                            {
                                //Use default template
                                emailMessage.Html =
                                    string.Format(
                                        "<b>{0}</b> <br/><br/> To confirm your account, click on the following link:<br/> <br/> <a href='{1}'>{1}</a> <br/>",
                                        user,
                                        linkUrl);

                                emailMessage.Subject = "Account confirmation";
                            }))
                    {
                        TempData[GetMessageTempKey(MessageType.Success)] = new[]
                        {
                            "Your account was succesfully created. To confirm your account follow the instruction received in email.".Localize()
                        };
                    }
                    else
                    {
                        TempData[GetMessageTempKey(MessageType.Error)] = new[] { string.Format("Failed to send confirmation email to {0}.".Localize(), regModel.Email) };
                    }

                }
                else
                {
                    UserHelper.OnPostLogon(regModel.Email);
                }

            }

            if (DoCheckout())
            {
                return RedirectToAction("ProcessCheckout", "Checkout", new { id = Ch.Cart.OrderGroupId });
            }


            return View("Index", checkoutModel);
        }