private IEnumerable <Book> GetBooksInCart(int userId)
        {
            IEnumerable <OrdersBook> bookInBasket;
            IEnumerable <Book>       books;
            List <Book> booksInOrder = new List <Book>();

            using (ISession session = NHibernateSessions.OpenSession())
            {
                books        = session.Query <Book>().ToList();
                bookInBasket = session.Query <OrdersBook>().Where(x => x.OrderID == IsAnyOrderExist(userId)).ToList();
            }

            books = books.AsQueryable();

            foreach (var item in bookInBasket)
            {
                var id   = (long)item.BookID;
                var book = books.Where(x => x.Id == id).First();
                booksInOrder.Add(new Book {
                    Author = book.Author, Genre = book.Genre, Price = book.Price, Title = book.Title
                });
            }

            return(booksInOrder.AsEnumerable());
        }
 private int IsAnyOrderExist(int userId)
 {
     using (ISession session = NHibernateSessions.OpenSession())
     {
         var isOrderActive = session.Query <Orders>().Where(x => x.UserID.Id == userId).Where(x => x.Active == true).FirstOrDefault();
         if (isOrderActive == null)
         {
             return(0);
         }
         else
         {
             return(isOrderActive.Id);
         }
     }
 }
        private void CreateNewOrder(int userId)
        {
            using (ISession session = NHibernateSessions.OpenSession())
            {
                var currentLoggedUser = session.Query <User>().Where(x => x.Id == userId).First();

                using (var transaction = session.BeginTransaction())
                {
                    var createOrder = new Orders()
                    {
                        UserID = currentLoggedUser, Active = true
                    };
                    session.Save(createOrder);
                    transaction.Commit();
                }
            }
        }
        private void AddBookToOrder(int userId, int bookId)
        {
            using (ISession session = NHibernateSessions.OpenSession())
            {
                var activeOrder = session.Query <Orders>().Where(x => x.UserID.Id == userId).Where(x => x.Active == true).FirstOrDefault();


                if (activeOrder != null)
                {
                    using (var transaction = session.BeginTransaction())
                    {
                        var bookOrder = new OrdersBook()
                        {
                            BookID = bookId, OrderID = activeOrder.Id
                        };
                        session.Save(bookOrder);
                        transaction.Commit();
                    }
                }
            }
        }
        public ActionResult Search(string TitleToSearch, int?page)
        {
            IEnumerable <Book> books;
            int pageNumber    = (page ?? 1);
            var recordsOnPage = 8;

            using (ISession session = NHibernateSessions.OpenSession())
            {
                books = session.Query <Book>().ToList();
            }

            if (TitleToSearch != null)
            {
                books = from i in books where i.Title.Equals(TitleToSearch) select i;
                return(View(books.ToPagedList(pageNumber, recordsOnPage)));
            }



            return(View(books.ToPagedList(pageNumber, recordsOnPage)));
        }
        public ActionResult Address(AddressViewModel model)
        {
            if (Request.IsAuthenticated)
            {
                if (ModelState.IsValid)
                {
                    var    actualUserID = GetLoggedUserId();
                    Orders ord;

                    if (actualUserID != 0)
                    {
                        using (ISession session = NHibernateSessions.OpenSession())
                        {
                            var order = session.Query <Orders>().Where(x => x.UserID.Id == actualUserID).First();
                            ord           = session.Load <Orders>(order.Id);
                            ord.UserID    = order.UserID;
                            ord.FirstName = model.FirstName;
                            ord.LastName  = model.LastName;
                            ord.Street    = model.Street;
                            ord.City      = model.City;
                            ord.Country   = model.Country;
                            session.Flush();
                        }
                        GenerateEmailWithBooks(GetBooksInCart(actualUserID), User.Identity.GetUserName(), ord);
                    }

                    ClearOrder();
                    return(RedirectToAction("Index", "Home"));
                }
                else
                {
                    return(View(model));
                }
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
        /// <summary>
        /// Metoda czyszcząca koszyk
        /// </summary>
        /// <returns></returns>
        public ActionResult ClearOrder()
        {
            if (Request.IsAuthenticated)
            {
                var actualUserID = GetLoggedUserId();

                if (actualUserID != 0)
                {
                    using (ISession session = NHibernateSessions.OpenSession())
                    {
                        var order = session.Query <Orders>().Where(x => x.UserID.Id == actualUserID).First();
                        var ord   = session.Load <Orders>(order.Id);
                        order.Active = false;
                        session.Flush();
                    }
                }

                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }
        }