Exemple #1
0
        /// <summary>
        /// loads up the view model with paged data when there is a search string and page number
        /// otherwise it just returns a new view model with a show error flag
        /// </summary>
        /// <param name="search"></param>
        /// <param name="pageNo"></param>
        /// <param name="refinementFacets">comma separated list of selected facets to filter on</param>
        /// <returns></returns>
        private SearchResultsVM GetViewModel(string search, int pageNo, string refinementFacets, bool newSearch)
        {
            var returnViewModel = new SearchResultsVM();

            if (!string.IsNullOrEmpty(search) && pageNo > 0)
            {
                SearchServiceResult searchResult = null;
                try
                {
                    searchResult = _searchService.GetPaginatedResult(search, pageNo, _pageSize, refinementFacets, newSearch).Result;
                }
                catch
                {
                    return(null);//search is not working for some reason
                }
                returnViewModel.Data          = searchResult?.Data?.ToList() ?? new List <SearchResult>();
                returnViewModel.ShowResults   = true;
                returnViewModel.Search        = search;
                returnViewModel.PageSize      = _pageSize;
                returnViewModel.Count         = searchResult?.Count ?? 0;
                returnViewModel.Facets        = SubmissionHelper.ConvertList(searchResult?.Facets);
                returnViewModel.TypeOfService = searchResult?.Facets;
                returnViewModel.CurrentPage   = pageNo;

                if (returnViewModel.Facets != null && (!string.IsNullOrEmpty(refinementFacets)) && !newSearch)
                {
                    foreach (var facet in returnViewModel.Facets)
                    {
                        facet.Selected = (refinementFacets.Contains(facet.Text));
                    }
                }
            }

            return(returnViewModel);
        }
Exemple #2
0
        public async Task <IActionResult> SearchResultsGlobal(List <string> source, List <string> scout, List <string> alignment, List <string> theme, List <string> technologyArea, List <string> landscape,
                                                              List <string> country, List <string> state, List <string> city, List <string> stage, string dateAdded1st, string dateAdded2nd, string dateReviewed1st, string dateReviewed2nd, string globalSearch)
        {
            SearchResultsVM searchResultsVM = new SearchResultsVM();

            searchResultsVM.UsersList    = GetListOfUsers(globalSearch);
            searchResultsVM.SearchString = globalSearch;

            //----------------------------------------------------------------------
            string      uid         = User.FindFirstValue(ClaimTypes.NameIdentifier);
            AspNetUsers thisAspUser = _context.AspNetUsers.Where(x => x.Id == uid).First();
            Users       thisUser    = _context.Users.Where(x => x.UserId == uid).First();

            ViewBag.AspUser = thisAspUser;
            ViewBag.User    = thisUser;

            Startups startups = await _seamedInDal.GetStartups();

            var rankedStartups = Ranking(startups, thisUser).ToList();

            ViewBag.Startups = rankedStartups;

            if (globalSearch != null)
            {
                Startups foundStartups = await _seamedInDal.GetFilteredStartUps(globalSearch.ToLower());

                List <Tuple <int, Record> > rankedStartupsFromGlobal = RankingVersion2(foundStartups, thisUser);

                searchResultsVM.ResultsList = rankedStartupsFromGlobal;

                return(View(searchResultsVM));
            }
            else
            {
                List <List <string> > listOfLists = new List <List <string> >();

                listOfLists.Add(source);
                listOfLists.Add(scout);
                listOfLists.Add(alignment);
                listOfLists.Add(theme);
                listOfLists.Add(technologyArea);
                listOfLists.Add(landscape);
                listOfLists.Add(country);
                listOfLists.Add(state);
                listOfLists.Add(city);
                listOfLists.Add(stage);

                List <string> convertedList = _seamedInDal.ConvertsListsOfFormSelection(listOfLists);
                Startups      foundStartups = await _seamedInDal.GetFilteredStartUps(convertedList);

                List <Tuple <int, Record> > rankedStartupsFromFilter = RankingVersion2(foundStartups, thisUser);

                searchResultsVM.ResultsList = rankedStartupsFromFilter;

                return(View(searchResultsVM));
            }
        }
        // ----------------------------- this view is only for static run (TEMP VIEW)
        public ActionResult ViewHotelInfo()
        {
            SearchResultsVM srvm = new SearchResultsVM()
            {
                hotelId     = "https://api.sandbox.amadeus.com/v1.2/hotels/UZBOS174?apikey=qEM5DE19KoNf7p4xwiuLealWmaUzTTG5&check_in=2018-08-15&check_out=2018-08-16&referrer=more_rooms_at_this_hotel",
                startdDate  = "15.08.2018",
                endDate     = "16.08.2018",
                nights      = 1,
                hotelRating = "4",
            };

            return(ViewHotelInfo(srvm));
        }
        public ActionResult ViewHotelInfoGeneral(GeneralIndexVM obj)
        {
            SearchResultsVM hotel = new SearchResultsVM()
            {
                destination   = obj.desCountry,
                endDate       = obj.endDate,
                startdDate    = obj.startDate,
                nights        = obj.nights,
                originalLink  = obj.originalLink,
                selectedHotel = 0,
                hotelRating   = obj.hotelRating,
                hotelId       = obj.hotelId,
            };

            return(ViewHotelInfo(hotel));
        }
Exemple #5
0
        /* Page displaying a summary for the reservation of several rooms */
        public ActionResult MultipleResSummary(SearchResultsVM searchResults)
        {
            // Get the selected rooms
            List <Room> rooms = new List <Room>();

            foreach (SearchResult r in searchResults.SearchResult)
            {
                if (r.Book == true)
                {
                    rooms.Add(GetRoomById(r.IdRoom));
                }
            }

            // Get total price
            decimal totalPrice = 0;

            // Put data into view model
            foreach (Room r in rooms)
            {
                totalPrice += r.Price;
            }

            // Get dates from session
            var startDate = (DateTime)Session["start_date"];
            var endDate   = (DateTime)Session["end_date"];

            ReservationVM result = new ReservationVM
            {
                Rooms      = rooms,
                TotalPrice = totalPrice,
                StartDate  = startDate,
                EndDate    = endDate
            };

            return(View(result));
        }
Exemple #6
0
        private IActionResult GetSearchResult(string search, int pageNo, string selectedFacets, string errorMessage = "")
        {
            //This is commented out as it is causing Facets to not work
            //Make Sure we have a clean session
            //_sessionService.ClearSession();

            var vm = new SearchResultsVM();

            if (!string.IsNullOrEmpty(errorMessage))
            {
                vm.Data         = new List <SearchResult>();
                vm.Facets       = new List <SelectItem>();
                vm.FacetsModal  = new List <SelectItem>();
                vm.ErrorMessage = errorMessage;
                return(View(vm));
            }



            try
            {
                if (string.IsNullOrWhiteSpace(search))
                {
                    //reset search
                    //return RedirectToAction("Index", new { isError = true });

                    vm.ErrorMessage = "Enter the name of a service, its address, postcode or a combination of these";
                    return(View(vm));
                }

                if (search.Length > _maxSearchChars)
                {
                    return(View(new SearchResultsVM
                    {
                        Search = search,
                        ShowExceededMaxLengthMessage = true,
                        Facets = new List <SelectItem>(),
                        FacetsModal = new List <SelectItem>(),
                        Data = new List <SearchResult>()
                    }));
                }

                var newSearch = SetNewSearch(search);

                var viewModel = GetViewModel(search, pageNo, selectedFacets, newSearch);
                if (viewModel == null)
                {
                    return(GetCustomErrorCode(EnumStatusCode.SearchUnavailableError,
                                              "Search unavailable: Search string='" + search + "'"));
                }

                ViewBag.BackLink = new BackLinkVM {
                    Show = true, Url = Url.Action("Index", "Search"), Text = "Back"
                };

                TempData["search"] = search;

                if (viewModel.Count == 0)
                {
                    viewModel.ErrorMessage = "There are no results matching your search";
                }

                return(View(viewModel));
            }
            catch (Exception ex)
            {
                ex.Data.Add("GFCError", "Unexpected error in search :'" + search + "'");
                throw ex;
            }
        }
Exemple #7
0
        /* Page displaying the search results */
        public ActionResult SearchResult(Search result)
        {
            Search search;

            // Store search as a session to keep dates and location for reservation and back to results navigation
            Session["start_date"] = result.StartDate;
            Session["end_date"]   = result.EndDate;
            Session["location"]   = result.Location;
            Session["hair_dryer"] = result.HasHairDryer;
            Session["TV"]         = result.HasTV;
            Session["WiFi"]       = result.HasWiFi;
            Session["parking"]    = result.HasParking;

            search = result;

            List <Room> rooms = new List <Room>();

            // Get the list of available rooms
            if (search.HasHairDryer == false && search.HasParking == false && search.HasTV == false && search.HasWiFi == false)
            {
                // Normal search
                rooms = GetRoomsByDateAndLocation(search.StartDate, search.EndDate, search.Location);
            }

            else
            {
                // Advanced search
                rooms = GetRoomsAdvancedSearch(search);
            }

            // Put data into view model
            List <SearchResult> results = new List <SearchResult>();

            foreach (Room r in rooms)
            {
                string type;
                if (r.Type == 1)
                {
                    type = singleRoom;
                }
                else
                {
                    type = doubleRoom;
                }

                results.Add(new SearchResult
                {
                    Book            = false,
                    IdRoom          = r.IdRoom,
                    Number          = r.Number,
                    RoomDescription = r.Description,
                    Type            = type,
                    Price           = r.Price,
                    HasTV           = r.HasTV,
                    HasHairDryer    = r.HasHairDryer,
                    HasWiFi         = r.Hotel.HasWiFi,
                    HasParking      = r.Hotel.HasParking,
                    HotelName       = r.Hotel.Name,
                    Location        = r.Hotel.Location,
                    Pictures        = r.Picture
                });
            }

            SearchResultsVM resultsVM = new SearchResultsVM()
            {
                SearchResult = results,
                StartDate    = search.StartDate,
                EndDate      = search.EndDate
            };


            return(View(resultsVM));
        }
        public ActionResult SubmitSearch(PackageIndexVM packageData)
        {
            DataLayer dl = new DataLayer();

            packageData.desCode = (from u in dl.locations
                                   where  u.city.ToLower() == packageData.desCity.ToLower()
                                   select u.code).ToList <string>().FirstOrDefault();

            // HOTELS:
            HotelSearch hs = new HotelSearch();

            hs.FillData(packageData.desCode, packageData.sdate, packageData.edate);
            hs.BuildURL();
            string json = hs.GetJson();

            dynamic         results = JsonConvert.DeserializeObject(json); // convert incoming data to json form
            SearchResultsVM sr      = new SearchResultsVM();

            sr.hotelSearchResultsVM = new List <HotelSearchResultsVM>();
            sr.startdDate           = packageData.sdate;
            sr.endDate = packageData.edate;
            sr.nights  = ToolsClass.getNumOfNights(ToolsClass.getDate(sr.startdDate), ToolsClass.getDate(sr.endDate));

            for (int i = 0; i < results.results.Count; ++i)
            {
                ImageSearch image = new ImageSearch();

                try
                {
                    image.SetHotelName(results.results[i].property_name.ToString()); // initialize object by GoogleAPI
                }
                catch (Exception)
                {
                    Thread.Sleep(1000);
                    return(SubmitSearch(packageData));
                }

                int newRating = -1; // initialize to -1
                try
                {
                    if (results.results[i].awards[0].rating != null)
                    {
                        newRating = results.results[i].awards[0].rating;
                    }
                }
                catch (Exception) { }
                if (newRating == -1)
                {
                    newRating = GenerateRating();
                }

                HotelSearchResultsVM temp = new HotelSearchResultsVM()
                {
                    originalLink     = hs.GetSearchURL(), // to fix the api room problem
                    hotelLink        = results.results[i]._links.more_rooms_at_this_hotel.href,
                    hotelName        = results.results[i].property_name,
                    hotelDescription = results.results[i].marketing_text,
                    rating           = newRating,
                    hotelPrice       = results.results[i].total_price.amount,
                    hotelImage       = image.GetImage() // image is an object
                };
                sr.hotelSearchResultsVM.Add(temp);
            }

            // FLIGHTS:
            FlightSearch flightSearch = new FlightSearch();

            flightSearch.FillData("TLV", packageData.desCode, packageData.sdate, packageData.edate, "Israel", "Tel Aviv", packageData.desCountry, packageData.desCity);

            // if no results were found (400: bad request)
            if (flightSearch.GetResponse() != "")
            {
                List <PackageDetails> packages = new List <PackageDetails>();
                packages.Add(new PackageDetails()
                {
                    flight = new FlightInfoVM()
                    {
                        departureDate      = packageData.sdate,
                        returnDate         = packageData.edate,
                        destinationCity    = packageData.desCity,
                        destinationCountry = packageData.desCountry,
                        originCity         = "Tel Aviv",
                        originCountry      = "Israel",
                    }
                });

                PackageDetailsVM newObj = new PackageDetailsVM()
                {
                    composition = packageData.composition,
                    packages    = packages,
                };
                return(View("SearchResults", newObj));
            }

            // for the google map
            string[] loc       = flightSearch.GetLocation().Split(',');
            double   latitude  = Double.Parse(loc[0]);
            double   longitude = Double.Parse(loc[1]);

            // create object to pass to the view
            FlightSearchResultsVM flightSearchResultsVM = new FlightSearchResultsVM()
            {
                departureDate       = flightSearch.GetDepartureDate(),
                destinationCity     = flightSearch.GetDestinationCity(),
                destinationCodeCity = flightSearch.GetDestinationCodeCity(),
                destinationCountry  = flightSearch.GetDestinationCountry(),
                inbound             = flightSearch.GetInbound(),
                originCity          = flightSearch.GetOriginCity(),
                originCodeCity      = flightSearch.GetOriginCodeCity(),
                originCountry       = flightSearch.GetOriginCountry(),
                outbound            = flightSearch.GetOutbound(),
                price          = flightSearch.GetPrice(),
                returnDate     = flightSearch.GetReturnDate(),
                seatsRemaining = flightSearch.GetSeatsRemaining(),
                airline        = flightSearch.GetAirline(),
            };

            PackageDetailsVM pdvm = new PackageDetailsVM();

            pdvm.composition = packageData.composition;
            var rand = new Random();

            foreach (HotelSearchResultsVM h in sr.hotelSearchResultsVM)
            {
                PackageDetails pd = new PackageDetails();
                pd.hotel = h;

                int          n = rand.Next(flightSearchResultsVM.airline.Count());
                FlightInfoVM f = new FlightInfoVM()
                {
                    airline             = flightSearchResultsVM.airline[n],
                    inbound             = flightSearchResultsVM.inbound[n],
                    outbound            = flightSearchResultsVM.outbound[n],
                    departureDate       = flightSearchResultsVM.departureDate,
                    returnDate          = flightSearchResultsVM.returnDate,
                    originCountry       = flightSearchResultsVM.originCountry,
                    originCity          = flightSearchResultsVM.originCity,
                    destinationCountry  = flightSearchResultsVM.destinationCountry,
                    destinationCity     = flightSearchResultsVM.destinationCity,
                    originCodeCity      = flightSearchResultsVM.originCodeCity,
                    destinationCodeCity = flightSearchResultsVM.destinationCodeCity,
                    seatsRemaining      = flightSearchResultsVM.seatsRemaining[n],
                    price = flightSearchResultsVM.price[n].ToString()
                };
                pd.flight = f;

                pd.price = (pd.hotel.hotelPrice + Convert.ToDouble(pd.flight.price)) * Tools.ToolsClass.getPricePercent(pdvm.composition);

                pdvm.packages.Add(pd);
            }

            pdvm.nights = sr.nights;

            pdvm.latitude  = latitude;
            pdvm.longitude = longitude;

            return(View("SearchResults", pdvm));
        }
        public ActionResult ViewHotelInfo(SearchResultsVM srvm)
        {
            var json = "";

            using (WebClient wc = new WebClient())
            {
                json = wc.DownloadString(srvm.hotelId).ToString();
            }
            dynamic results = JsonConvert.DeserializeObject(json);

            // save some data from json to list. later we will save this data in the object we will pass to the view
            List <string> contactLST   = HotelDetailsHelper1(results, "contacts");
            List <string> amenitiesLST = HotelDetailsHelper1(results, "amenities");
            List <RoomVM> roomLST      = HotelDetailsHelper2(results);

            if (roomLST.Count == 0) // we need to fix the api
            {
                roomLST = HotelDetailsHelper3(srvm.originalLink, srvm.selectedHotel);
            }

            // load reviews
            DataLayer dl = new DataLayer();

            string hotelName = results.property_name;

            List <HotelReview> hotelReviewsList = (from u in dl.hotelReviews
                                                   where u.HotelName.ToLower() == hotelName.ToLower()
                                                   select u).ToList <HotelReview>();

            // search for customer name (by email)
            List <string> customersName = new List <string>();

            for (int i = 0; i < hotelReviewsList.Count; ++i)
            {
                string tempEmail    = hotelReviewsList[i].CustomerEmail;
                string customerName = (from u in dl.customers
                                       where u.Email.ToLower() == tempEmail.ToLower()
                                       select u.FullName).ToList <string>()[0];
                customersName.Add(customerName);
            }


            // create HotelOrderDetailsVM to pass to the view
            ImageSearch image = new ImageSearch();

            image.SetHotelName(results.property_name.ToString()); // initialize object by GoogleAPI
            image.SavePhotoReferences();
            List <string> imageLST = image.GetImages();

            HotelOrderDetailsVM hotelOrderDetailsVM = new HotelOrderDetailsVM()
            {
                destination     = srvm.destination,
                hotelName       = results.property_name,
                address         = "ADDRESS: " + results.address.line1 + ", " + results.address.city,
                contact         = contactLST,
                amenities       = amenitiesLST,
                rating          = srvm.hotelRating,
                latitude        = results.location.latitude,
                longitude       = results.location.longitude,
                room            = roomLST,
                image           = imageLST,
                apiKey          = image.GetKey(),
                searchResultsVM = srvm,
                reviews         = hotelReviewsList,
                customersName   = customersName
            };

            return(View("ViewHotelInfo", hotelOrderDetailsVM));
        }
        public ActionResult SubmitSearch(HotelIndexVM hotelsData)
        {
            DataLayer dl = new DataLayer();

            hotelsData.code = (from u in dl.locations
                               where u.city.ToLower() == hotelsData.city.ToLower()
                               select u.code).ToList <string>().FirstOrDefault();

            HotelSearch hs = new HotelSearch();

            hs.FillData(hotelsData.code, hotelsData.sdate, hotelsData.edate);
            hs.BuildURL();
            string json = hs.GetJson();

            dynamic         results = JsonConvert.DeserializeObject(json); // convert incoming data to json form
            SearchResultsVM sr      = new SearchResultsVM();

            sr.hotelSearchResultsVM = new List <HotelSearchResultsVM>();
            sr.startdDate           = hotelsData.sdate;
            sr.endDate      = hotelsData.edate;
            sr.originalLink = hs.GetSearchURL(); // to fix the api room problem
            sr.destination  = hotelsData.city + ", " + hotelsData.country;

            if (results.results.Count != 0)
            { // for the google map
                string   realCode = hs.GetLocation(hotelsData.code, "firstStage");
                string[] loc      = hs.GetLocation(realCode, "secondStage").Split(',');
                sr.latitude  = Double.Parse(loc[0]);
                sr.longitude = Double.Parse(loc[1]);
            }

            sr.nights = ToolsClass.getNumOfNights(ToolsClass.getDate(sr.startdDate), ToolsClass.getDate(sr.endDate));

            for (int i = 0; i < results.results.Count; ++i)
            {
                ImageSearch image = new ImageSearch();

                try
                {
                    image.SetHotelName(results.results[i].property_name.ToString()); // initialize object by GoogleAPI
                }
                catch (Exception)
                {
                    Thread.Sleep(1000);
                    return(SubmitSearch(hotelsData));
                }

                int newRating = -1; // initialize to -1
                try
                {
                    if (results.results[i].awards[0].rating != null)
                    {
                        newRating = results.results[i].awards[0].rating;
                    }
                }
                catch (Exception) { }
                if (newRating == -1)
                {
                    newRating = GenerateRating();
                }

                HotelSearchResultsVM temp = new HotelSearchResultsVM()
                {
                    hotelLink        = results.results[i]._links.more_rooms_at_this_hotel.href,
                    hotelName        = results.results[i].property_name,
                    hotelDescription = results.results[i].marketing_text,
                    rating           = newRating,
                    hotelPrice       = results.results[i].total_price.amount,
                    hotelImage       = image.GetImage() // image is an object
                };
                sr.hotelSearchResultsVM.Add(temp);
            }
            return(View("SearchResults", sr));
        }