public IDictionary <int, string> GetTourRooms(int cityKeyFrom, int countryKey, List <int> cityToKeys, List <int> tourKeys, List <DateTime> tourDates, List <int> tourNights, List <int> hotelKeys, List <int> pansionKeys) { IDictionary <int, string> tourRooms; using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { tourRooms = mtsDc.GetTourRooms(sftDc, cityKeyFrom, countryKey, cityToKeys, tourKeys, tourDates, tourNights, hotelKeys, pansionKeys); } } return(tourRooms); }
public IDictionary <int, string> GetCountriesTo() { IDictionary <int, string> countriesTo; using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { countriesTo = mtsDc.GetCountriesTo(sftDc); } } return(countriesTo); }
public IDictionary <int, string> GetTourTypes(int cityKeyFrom, int countryKey) { IDictionary <int, string> tourTypes; using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { tourTypes = mtsDc.GetTourTypes(sftDc, cityKeyFrom, countryKey); } } return(tourTypes); }
public IDictionary <int, string> GetCitiesTo(int cityKeyFrom, int countryKey, List <int> tourTypes) { IDictionary <int, string> citiesTo; using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { citiesTo = mtsDc.GetCitiesTo(sftDc, cityKeyFrom, countryKey, tourTypes); } } return(citiesTo); }
public IEnumerable <int> GetTourNights(int cityKeyFrom, int countryKey, List <int> cityToKeys, List <int> tourKeys, List <DateTime> tourDates) { IEnumerable <int> tourNights; using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { tourNights = mtsDc.GetTourNights(sftDc, cityKeyFrom, countryKey, cityToKeys, tourKeys, tourDates); } } return(tourNights); }
public IDictionary <int, string> GetCitiesFrom(int countryKey) { IDictionary <int, string> citiesFrom; using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { citiesFrom = mtsDc.GetCitiesDeparture(sftDc, countryKey); } } return(citiesFrom); }
private void LoadHotels(MtSearchDbDataContext mtsDc, SftWebDbDataContext sftDc, bool isReinit = false) { if (RblCitiesFromFilter.Items.Count == 0 || DdlContriesToFilter.Items.Count == 0 || ChblTourTypes.Items.Count == 0 || ChblCitiesToFilter.Items.Count == 0 || DdlToursFilter.Items.Count == 0 || ArrivalDatesFilter.ArrivalDates == null || !ArrivalDatesFilter.ArrivalDates.Any() || ChblNightsFilter.Items.Count == 0 || ChblHotelCategoriesFilter.Items.Count == 0 || ChblPansionsFilter.Items.Count == 0) { UcHotelsFilter.Items.Clear(); return; } IList <string> selectedValues = new List <string>(); if (isReinit && !UcHotelsFilter.IsAllOptionsSelected) { selectedValues = UcHotelsFilter.SelectedValues; } var hotels = mtsDc.GetTourHotels(sftDc, SelectedCityFromKey, SelectedCountryToKey, SelectedCitiesToKeys, SelectedTourKeys, SelectedArrivalDates, SelectedNights, SelectedHotelCategoriesKeys, SelectedPansionKeys, !UcHotelsFilter.IsFilterByArrNights).ToList(); UcHotelsFilter.DataSource = hotels.ToDictionary(h => h.Key, h => GetHotelNameHtml(h.Name, h.Stars, h.ResortName, h.Url)); UcHotelsFilter.DataBind(); if (!UcHotelsFilter.IsFilterByArrNights) { foreach (var hotel in hotels.Where(h => !h.IsValidPrice)) { UcHotelsFilter.Items.FindByValue(hotel.Key.ToString(CultureInfo.InvariantCulture)).Enabled = false; } } if (isReinit && selectedValues.Any()) { UcHotelsFilter.SelectItems(selectedValues); } }
private bool InitFiltersByQs() { using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { foreach (KeyValuePair <Control, FilterDetails> filterDetail in _filterDetails) { filterDetail.Value.LoadDataAction(mtmDc, mtsDc, sftDc, false); if (!filterDetail.Value.SelectValueByQsAction()) { return(false); } } } } } if (!SetAviaQuotesByQs()) { return(false); } if (!SetRoomQuotesByQs()) { return(false); } if (!SetMaxPriceByQs()) { return(false); } if (!SetRowsNumberByQs()) { return(false); } return(true); }
private void LoadArrivalDates(MtSearchDbDataContext mtsDc, SftWebDbDataContext sftDc, bool isReinit = false) { if (mtsDc == null) { throw new ArgumentNullException("mtsDc"); } if (RblCitiesFromFilter.Items.Count == 0 || DdlContriesToFilter.Items.Count == 0 || ChblTourTypes.Items.Count == 0 || ChblCitiesToFilter.Items.Count == 0 || DdlToursFilter.Items.Count == 0) { ArrivalDatesFilter.ClearArrivalDays(); return; } DateTime?dateFrom = null; DateTime?dateTo = null; if (isReinit && ArrivalDatesFilter.IsArrivalDateChangedByUser) { dateFrom = ArrivalDatesFilter.SelectedArrivalDateFrom; dateTo = ArrivalDatesFilter.SelectedArrivalDateTo; } // если это первая загрузка страницы подтягиваем инициализацию фильтра из Web.config if (!Page.IsPostBack) { ArrivalDatesFilter.MaxArrivalRange = Globals.Settings.TourFilters.MaxArrivalRange; ArrivalDatesFilter.DefaultArrivalRange = Globals.Settings.TourFilters.DefaultArrivalRange; } ArrivalDatesFilter.LoadArrivalDates(mtsDc.GetTourDates(sftDc, SelectedCityFromKey, SelectedCountryToKey, SelectedCitiesToKeys, SelectedTourKeys)); if (isReinit && ArrivalDatesFilter.IsArrivalDateChangedByUser && dateFrom.HasValue && dateTo.HasValue && ArrivalDatesFilter.ArrivalDates.Contains(dateFrom.Value) && ArrivalDatesFilter.ArrivalDates.Contains(dateTo.Value)) { ArrivalDatesFilter.SelectArrivalRange(dateFrom.Value, dateTo.Value); } }
// ReSharper disable RedundantNameQualifier public IEnumerable <Seemplexity.Services.Wcf.ToursSearch.DataModel.Hotel> GetTourHotels(int cityKeyFrom, int countryKey, List <int> cityToKeys, List <int> tourKeys, List <DateTime> tourDates, List <int> tourNights, List <string> hotelCats, List <int> pansionKeys) // ReSharper restore RedundantNameQualifier { // ReSharper disable RedundantNameQualifier IEnumerable <Seemplexity.Services.Wcf.ToursSearch.DataModel.Hotel> tourHotels; // ReSharper restore RedundantNameQualifier using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { tourHotels = // ReSharper disable RedundantNameQualifier Seemplexity.Services.Wcf.ToursSearch.DataModel.Hotel.GetHotelsList( // ReSharper restore RedundantNameQualifier mtsDc.GetTourHotels(sftDc, cityKeyFrom, countryKey, cityToKeys, tourKeys, tourDates, // ReSharper disable once RedundantArgumentDefaultValue tourNights, hotelCats, pansionKeys, false).ToList()); } } return(tourHotels); }
private void InitFilters(Control startFromFilter = null, bool isReinit = false, bool skipFirstFilter = true) { var finded = startFromFilter == null; using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { foreach (KeyValuePair <Control, FilterDetails> filterDetail in _filterDetails) { if (!skipFirstFilter) { finded = startFromFilter == filterDetail.Key; } if (finded) { filterDetail.Value.LoadDataAction(mtmDc, mtsDc, sftDc, isReinit); } else { finded = startFromFilter == filterDetail.Key; } } } } } //todo: добавить инициализацию фильтров значениями по умолчанию из web.config // для тех фильтров которые не загружаются из БД if (startFromFilter == null) // для тех фильтров значение которых не меняются при изменении других фильтров { DdlRowsNumber.SelectedValue = DdlRowsNumber.Items.FindByValue(Globals.Settings.TourFilters.DefaultToursNumberOnPage.ToString(CultureInfo.InvariantCulture)).Value; } }
private static void MakeActualizeTourResponse(HttpContext context) { if (context == null) { throw new ArgumentNullException("context"); } var queryString = context.Request.QueryString; long offerId; int currencyId; try { offerId = long.Parse(queryString["offerId"]); currencyId = int.Parse(queryString["currencyId"]); } catch (Exception) { context.Response.Write("<error>Incorrect parametr.</error>"); return; } using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { string hash; var elementsList = mtsDc.ActualizeTour(mtmDc, sftDc, offerId, currencyId, out hash) as IXmlCompatible; SaveXmlToResponse(context, "actualizeTourResult", elementsList, hash); } } } }
private static void MakeResponse <T>(HttpContext context, string resaultName, Func <MtMainDbDataContext, MtSearchDbDataContext, SftWebDbDataContext, int?, Tuple <List <T>, string> > getElementsFunc) { if (context == null) { throw new ArgumentNullException("context"); } if (getElementsFunc == null) { throw new ArgumentNullException("getElementsFunc"); } if (resaultName == null || String.IsNullOrWhiteSpace(resaultName)) { throw new ArgumentNullException("resaultName"); } var queryString = context.Request.QueryString; int?id = QDSearch.Helpers.Converters.GetIntSafe(queryString["id"]); if (queryString.AllKeys.Contains("id") && !id.HasValue) { context.Response.Write("<error>Incorrect parametr.</error>"); return; } using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { Tuple <List <T>, string> tuple = getElementsFunc(mtmDc, mtsDc, sftDc, id); SaveXmlToResponse(context, resaultName, tuple.Item1.ConvertAll(c => c as IXmlCompatible), tuple.Item2); } } } }
private void LoadCitiesFrom(MtSearchDbDataContext mtsDc, SftWebDbDataContext sftDc, bool isReinit = false) { if (mtsDc == null) { throw new ArgumentNullException("mtsDc"); } if (DdlContriesToFilter.Items.Count == 0) { RblCitiesFromFilter.Items.Clear(); return; } // Код ниже реализует следующей алгоритм. При смене страны если пользователь ранее менял город вылета, выбирается ранее выбранный город вылета, // если такой город отсуствует в списке, пробуем выбрать город вылета из Web.config, если и этот город отсустствует в списке выбираем первый город из списка. // Если при смене города пользователь ранее не менял город вылета, то проем выбрать город вылета из Web.config, если не получилось то пробуем выбрать первый город из списака. // если это изменение фильтров пользователем и пользователь менял город вылета, // то запоминаем выбор пользователя, чтобы потом его повторить ListItem selectedItem = null; if (isReinit && IsCityFromChangedByUser) { selectedItem = RblCitiesFromFilter.SelectedItem; } //грузим города вылета RblCitiesFromFilter.DataSource = mtsDc.GetCitiesDeparture(sftDc, SelectedCountryToKey).ToDictionary(k => k.Key, v => HttpUtility.HtmlEncode(v.Value)); RblCitiesFromFilter.DataBind(); // если это изменение фильтров пользователем и пользователь менял город вылета, // то пытаемся восстановить выбор пользователя if (isReinit && IsCityFromChangedByUser && selectedItem != null && RblCitiesFromFilter.Items.FindByValue(selectedItem.Value) != null) { RblCitiesFromFilter.SelectedValue = selectedItem.Value; } // если пользователь не менял город вылета, то пробуем выбрать город вылета по значению в Web.config if (!IsCityFromChangedByUser && RblCitiesFromFilter.Items.FindByValue( Globals.Settings.TourFilters.DefaultCityFromKey.ToString(CultureInfo.InvariantCulture)) != null) { RblCitiesFromFilter.SelectedValue = Globals.Settings.TourFilters.DefaultCityFromKey.ToString(CultureInfo.InvariantCulture); } // если город вылета так и не выбран, но при этом список городов вылета содержит элементы, // пробуем еще раз выбрать город вылета из Web.config в случае не удачи, выбираем первый город вылета в списке. if (RblCitiesFromFilter.SelectedItem == null && RblCitiesFromFilter.Items.Count > 0) { if (RblCitiesFromFilter.Items.FindByValue( Globals.Settings.TourFilters.DefaultCityFromKey.ToString(CultureInfo.InvariantCulture)) != null) { RblCitiesFromFilter.SelectedValue = Globals.Settings.TourFilters.DefaultCityFromKey.ToString(CultureInfo.InvariantCulture); } else { RblCitiesFromFilter.SelectedIndex = 0; } } }
private void LoadRoomTypesAndMens(MtMainDbDataContext mtmDc, MtSearchDbDataContext mtsDc, SftWebDbDataContext sftDc, bool isReinit) { if (RblCitiesFromFilter.Items.Count == 0 || DdlContriesToFilter.Items.Count == 0 || ChblTourTypes.Items.Count == 0 || ChblCitiesToFilter.Items.Count == 0 || DdlToursFilter.Items.Count == 0 || ArrivalDatesFilter.ArrivalDates == null || !ArrivalDatesFilter.ArrivalDates.Any() || ChblNightsFilter.Items.Count == 0 || ChblHotelCategoriesFilter.Items.Count == 0 || UcHotelsFilter.Items.Count == 0 || ChblPansionsFilter.Items.Count == 0) { DdlRoomTypesFilter.Items.Clear(); return; } // выбираем вариант поиска по номеру или по людям в зависимости от большинства туров с ценой за номер или за человека PnPersons.Visible = !(PnRoomTypes.Visible = mtsDc.IsCountryPriceForMen(SelectedCountryToKey)); if (PnRoomTypes.Visible) { DdlRoomTypesFilter.DataSource = AddFirstCustomElement(-1, "- все -", mtsDc.GetTourRooms(sftDc, SelectedCityFromKey, SelectedCountryToKey, SelectedCitiesToKeys, SelectedTourKeys, SelectedArrivalDates, SelectedNights, SelectedHotelKeys, SelectedPansionKeys).ToDictionary(k => k.Key, v => HttpUtility.HtmlEncode(v.Value))); DdlRoomTypesFilter.DataBind(); } else { DdlRoomTypesFilter.Items.Clear(); } }
private static void MakeToursXmlResponse(HttpContext context) { if (context == null) { throw new ArgumentNullException("context"); } var queryString = context.Request.QueryString; var offerId = QDSearch.Helpers.Converters.GetLongSafe(queryString["offerId"]); int currencyId; if (queryString.AllKeys.Contains("offerId") && !offerId.HasValue) { context.Response.Write("<error>Incorrect parametr.</error>"); return; } try { currencyId = int.Parse(queryString["currencyId"]); } catch (Exception) { context.Response.Write("<error>Incorrect parametr.</error>"); return; } if (offerId.HasValue) { using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { string hash; var elementsList = mtsDc.GetTours(mtmDc, sftDc, offerId.Value, currencyId, out hash).Item2.ConvertAll(c => c as IXmlCompatible); SaveXmlToResponse(context, @"getToursResult", elementsList, hash); } } } return; } int count; int countryId; int departCityId; DateTime dateFrom; DateTime dateTo; ushort adults; ushort kids; List <ushort> kidsAges; int nightsMin; int nightsMax; List <int> resorts; List <int> hotelCategories; List <int> hotels; List <int> meals; uint? priceMin; uint? priceMax; int? hotelIsNotInStop; int? ticketsIncluded; int? hasTickets; try { count = int.Parse(queryString["count"]); countryId = int.Parse(queryString["countryId"]); departCityId = int.Parse(queryString["departCityId"]); dateFrom = DateTime.ParseExact(queryString["dateFrom"], "dd.MM.yyyy", new CultureInfo("ru-RU")); dateTo = DateTime.ParseExact(queryString["dateTo"], "dd.MM.yyyy", new CultureInfo("ru-RU")); adults = ushort.Parse(queryString["adults"]); kids = ushort.Parse(queryString["kids"]); kidsAges = kids > 0 ? queryString["kidsAges"].Split(',').Select(ushort.Parse).ToList() : null; nightsMin = int.Parse(queryString["nightsMin"]); nightsMax = int.Parse(queryString["nightsMax"]); resorts = queryString.AllKeys.Contains("resorts") ? queryString["resorts"].Split(',').Select(int.Parse).ToList() : null; hotelCategories = queryString.AllKeys.Contains("hotelCategories") ? queryString["hotelCategories"].Split(',').Select(int.Parse).ToList() : null; hotels = queryString.AllKeys.Contains("hotels") ? queryString["hotels"].Split(',').Select(int.Parse).ToList() : null; meals = queryString.AllKeys.Contains("meals") ? queryString["meals"].Split(',').Select(int.Parse).ToList() : null; currencyId = int.Parse(queryString["currencyId"]); priceMin = queryString.AllKeys.Contains("priceMin") ? uint.Parse(queryString["priceMin"]) : (uint?)null; priceMax = queryString.AllKeys.Contains("priceMax") ? uint.Parse(queryString["priceMax"]) : (uint?)null; hotelIsNotInStop = queryString.AllKeys.Contains("hotelIsNotInStop") ? int.Parse(queryString["hotelIsNotInStop"]) : (int?)null; ticketsIncluded = queryString.AllKeys.Contains("ticketsIncluded") ? int.Parse(queryString["ticketsIncluded"]) : (int?)null; hasTickets = queryString.AllKeys.Contains("hasTickets") ? int.Parse(queryString["hasTickets"]) : (int?)null; } catch (Exception) { context.Response.Write("<error>Incorrect parametr.</error>"); return; } using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { using (var sftDc = new SftWebDbDataContext()) { string hash; var elementsList = mtsDc.GetTours(mtmDc, sftDc, count, countryId, departCityId, dateFrom, dateTo, adults, kids, kidsAges, nightsMin, nightsMax, resorts, hotelCategories, hotels, meals, currencyId, priceMin, priceMax, hotelIsNotInStop, ticketsIncluded, hasTickets, out hash).Item2.ConvertAll(c => c as IXmlCompatible); SaveXmlToResponse(context, "getToursResult", elementsList, hash); } } } }
/// <summary> /// Города вылета /// </summary> /// <param name="sftDc"></param> /// <param name="cityKey">Ключ города (оциональный)</param> /// <param name="searchDc"></param> /// <param name="hash"></param> /// <returns></returns> public static List <City> GetDepartCities(this MtSearchDbDataContext searchDc, SftWebDbDataContext sftDc, int?cityKey, out string hash) { List <City> result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, cityKey); if ((result = CacheHelper.GetCacheItem <List <City> >(hash)) != null) { return(result); } var cacheDependencies = new List <string>(); string hashOut; var cities = searchDc.GetCitiesDeparture(sftDc, null, out hashOut); cacheDependencies.Add(hashOut); result = new List <City>(cities.Count); if (cityKey == null) { result.AddRange(cities.Select(city => new City { Id = city.Key, Name = city.Value.Trim(), CountriesTo = searchDc.GetCountriesTo(sftDc, city.Key, out hashOut).Select(c => new CountryTo { Id = c.Key }).ToList() })); } else { result.AddRange(cities.Where(c => c.Key == cityKey.Value).Select(city => new City { Id = city.Key, Name = city.Value.Trim(), CountriesTo = searchDc.GetCountriesTo(sftDc, city.Key, out hashOut).Select(c => new CountryTo { Id = c.Key }).ToList() })); } cacheDependencies.Add(hashOut); cacheDependencies.Add(CountriesExtension.TableName); cacheDependencies.Add(CitiesExtension.TableName); CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
public static Tuple <SearchResult, List <Tour> > GetTours(this MtSearchDbDataContext searchDc, MtMainDbDataContext mainDc, SftWebDbDataContext sftDc, long offerId, int currencyId, out string hash) { Tuple <SearchResult, List <Tour> > result; hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, offerId, currencyId); if ((result = CacheHelper.GetCacheItem <Tuple <SearchResult, List <Tour> > >(hash)) != null) { return(result); } string hashOut; var cacheDependencies = new List <string>(); var searchResult = searchDc.GetSearchResult(mainDc, sftDc, offerId, currencyId, out hashOut); cacheDependencies.Add(hashOut); var tours = searchDc.ConvertSearchItemsToTours(mainDc, searchResult.SearchItems, currencyId); result = new Tuple <SearchResult, List <Tour> >(searchResult, tours); CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
public static Tuple <SearchResult, List <Tour> > GetTours(this MtSearchDbDataContext searchDc, MtMainDbDataContext mainDc, SftWebDbDataContext sftDc, int count, int countryId, int departCityId, DateTime dateFrom, DateTime dateTo, ushort adults, ushort kids, IEnumerable <ushort> kidsAges, int nightsMin, int nightsMax, IEnumerable <int> resorts, IEnumerable <int> hotelCategories, IEnumerable <int> hotels, IEnumerable <int> meals, int currencyId, uint?priceMin, uint?priceMax, int?hotelsIsNotInStop, int?ticketsIncluded, int?hasTickets, out string hash) { Tuple <SearchResult, List <Tour> > result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, CacheHelper.GetCacheKeyHashed(new[] { count.ToString(), countryId.ToString(), departCityId.ToString(), dateFrom.ToString(), dateTo.ToString(), adults.ToString(), kids.ToString(), kidsAges != null ? String.Join("_", kidsAges) : String.Empty, nightsMin.ToString(), nightsMax.ToString(), resorts != null ? String.Join("_", resorts) : String.Empty, hotelCategories != null ? String.Join("_", hotelCategories) : String.Empty, hotels != null ? String.Join("_", hotels) : String.Empty, meals != null ? String.Join("_", meals) : String.Empty, currencyId.ToString(), priceMin.ToString(), priceMax.ToString(), hotelsIsNotInStop.ToString(), ticketsIncluded.ToString(), hasTickets.ToString() })); if ((result = CacheHelper.GetCacheItem <Tuple <SearchResult, List <Tour> > >(hash)) != null) { return(result); } string hashOut; var cacheDependencies = new List <string>(); var searchResult = searchDc.GetSearchResult(mainDc, sftDc, null, count, countryId, departCityId, dateFrom, dateTo, adults, kids, kidsAges, nightsMin, nightsMax, resorts, hotelCategories, hotels, meals, currencyId, priceMin, priceMax, hotelsIsNotInStop, ticketsIncluded, hasTickets, out hashOut); cacheDependencies.Add(hashOut); var tours = searchDc.ConvertSearchItemsToTours(mainDc, searchResult.SearchItems, currencyId); result = new Tuple <SearchResult, List <Tour> >(searchResult, tours); CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
/// <summary> /// Отели /// </summary> /// <param name="searchDc"></param> /// <param name="sftDc"></param> /// <param name="hotelKey">Ключ категории</param> /// <param name="mainDc"></param> /// <param name="hash"></param> /// <returns></returns> public static List <DataModel.Hotel> GetHotels(this MtMainDbDataContext mainDc, MtSearchDbDataContext searchDc, SftWebDbDataContext sftDc, int?hotelKey, out string hash) { List <DataModel.Hotel> result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, hotelKey); if ((result = CacheHelper.GetCacheItem <List <DataModel.Hotel> >(hash)) != null) { return(result); } result = new List <DataModel.Hotel>(); var cacheDependencies = new List <string>(); if (hotelKey == null) { string hashOut; var hotelCities = (from r in searchDc.GetResorts(sftDc, null, out hashOut) select r.Id) .ToList(); cacheDependencies.Add(hashOut); var hotels = (from h in searchDc.GetAllHotels() join c in mainDc.GetAllHotelCats() on h.Stars equals c.COH_Name where hotelCities.Contains(h.CtKey) select new DataModel.Hotel { Id = h.Key, Name = h.Name, ResortId = h.CtKey, HotelCategoryId = c.COH_Id }) .ToList(); result.AddRange(hotels); } else { string hashOut; var hotel = searchDc.GetHotelByKey(hotelKey.Value, out hashOut); cacheDependencies.Add(hashOut); if (hotel != null) { var cat = mainDc.GetAllHotelCats().SingleOrDefault(c => c.COH_Name == hotel.Stars); if (cat != null) { result.Add(new DataModel.Hotel { HotelCategoryId = cat.COH_Id, Id = hotel.Key, Name = hotel.Name, ResortId = hotel.CtKey }); } } } cacheDependencies.Add(HotelsExtension.TableName); cacheDependencies.Add(HotelCategoriesExtension.TableName); CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
private static SearchResult GetSearchResult(this MtSearchDbDataContext searchDc, MtMainDbDataContext mainDc, SftWebDbDataContext sftDc, long?offerId, int currencyId, out string hash) { SearchResult result; hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, offerId, currencyId); if ((result = CacheHelper.GetCacheItem <SearchResult>(hash)) != null) { return(result); } var cacheDependencies = new List <string>(); string hashOut; result = searchDc.GetSearchResult(mainDc, sftDc, offerId, 0, 0, 0, DateTime.Now, DateTime.Now, 0, 0, null, 0, 0, null, null, null, null, currencyId, null, null, null, null, null, out hashOut); cacheDependencies.Add(hashOut); CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
private static SearchResult GetSearchResult(this MtSearchDbDataContext searchDc, MtMainDbDataContext mainDc, SftWebDbDataContext sftDc, long?offerId, int count, int countryId, int departCityId, DateTime dateFrom, DateTime dateTo, ushort adults, ushort kids, IEnumerable <ushort> kidsAges, int nightsMin, int nightsMax, IEnumerable <int> resorts, IEnumerable <int> hotelCategories, IEnumerable <int> hotels, IEnumerable <int> meals, int currencyId, uint?priceMin, uint?priceMax, int?hotelsIsNotInStop, int?ticketsIncluded, int?hasTickets, out string hash) { SearchResult result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, CacheHelper.GetCacheKeyHashed(new[] { offerId.ToString(), count.ToString(CultureInfo.InvariantCulture), countryId.ToString(CultureInfo.InvariantCulture), departCityId.ToString(CultureInfo.InvariantCulture), dateFrom.ToString(CultureInfo.InvariantCulture), dateTo.ToString(CultureInfo.InvariantCulture), adults.ToString(CultureInfo.InvariantCulture), kids.ToString(CultureInfo.InvariantCulture), kidsAges != null ? String.Join("_", kidsAges) : String.Empty, nightsMin.ToString(CultureInfo.InvariantCulture), nightsMax.ToString(CultureInfo.InvariantCulture), resorts != null ? String.Join("_", resorts) : String.Empty, hotelCategories != null ? String.Join("_", hotelCategories) : String.Empty, hotels != null ? String.Join("_", hotels) : String.Empty, meals != null ? String.Join("_", meals) : String.Empty, currencyId.ToString(CultureInfo.InvariantCulture), priceMin.ToString(), priceMax.ToString(), hotelsIsNotInStop.ToString(), ticketsIncluded.ToString(), hasTickets.ToString() })); if ((result = CacheHelper.GetCacheItem <SearchResult>(hash)) != null) { return(result); } result = new SearchResult(); var cacheDependencies = new List <string>(); string hashOut; var wrongQuery = false; if (offerId == null) { var tourTypes = searchDc.GetTourTypes(sftDc, departCityId, countryId, out hashOut).Keys.ToList(); cacheDependencies.Add(hashOut); if (tourTypes == null || !tourTypes.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } if (resorts == null || !resorts.Any()) { resorts = searchDc.GetCitiesTo(sftDc, departCityId, countryId, tourTypes, out hashOut).Keys.ToList(); cacheDependencies.Add(hashOut); } if (resorts == null || !resorts.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } IList <int> tourKeys = searchDc.GetTours(sftDc, departCityId, countryId, tourTypes, resorts, out hashOut).Keys.ToList(); cacheDependencies.Add(hashOut); if (tourKeys == null || !tourKeys.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } IList <DateTime> tourDates = searchDc.GetTourDates(sftDc, departCityId, countryId, resorts, tourKeys, out hashOut) .Where(d => d >= dateFrom && d <= dateTo) .ToList(); cacheDependencies.Add(hashOut); if (tourDates == null || !tourDates.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } IList <int> tourNights = searchDc.GetTourNights(sftDc, departCityId, countryId, resorts, tourKeys, tourDates, out hashOut) .Where(n => n >= nightsMin && n <= nightsMax) .ToList(); cacheDependencies.Add(hashOut); if (tourNights == null || !tourNights.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } IList <string> hotelStars; if (hotelCategories == null || !hotelCategories.Any()) { hotelStars = searchDc.GetTourHotelClasses(sftDc, departCityId, countryId, resorts, tourKeys, tourDates, tourNights, out hashOut).ToList(); cacheDependencies.Add(hashOut); } else { hotelStars = mainDc.GetAllHotelCats() .Where(c => hotelCategories.Contains(c.COH_Id)) .Select(c => c.COH_Name) .ToList(); cacheDependencies.Add(HotelCategoriesExtension.TableName); } if (hotelStars == null || !hotelStars.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } if (meals == null || !meals.Any()) { meals = searchDc.GetTourPansions(sftDc, departCityId, countryId, resorts, tourKeys, tourDates, tourNights, hotelStars, out hashOut).Keys.ToList(); cacheDependencies.Add(hashOut); } if (meals == null || !meals.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } if (hotels == null || !hotels.Any()) { hotels = searchDc.GetTourHotels(sftDc, departCityId, countryId, resorts, tourKeys, tourDates, tourNights, hotelStars, meals, out hashOut) .Select(h => h.Key) .ToList(); cacheDependencies.Add(hashOut); } if (hotels == null || !hotels.Any()) { wrongQuery = true; CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); } IEnumerable <int> roomKeys = null; // если по стране цена за человека, меняем алгоритм if (searchDc.IsCountryPriceForMen(countryId)) { var rooms = searchDc.GetTourRooms(sftDc, departCityId, countryId, resorts, tourKeys, tourDates, tourNights, hotels, meals); roomKeys = (from r in searchDc.GetAllRooms() where rooms.Keys.Contains(r.RM_KEY) && r.RM_NPLACES == adults select r.RM_KEY) .ToList(); } ushort?firstChildYears = null, secondChildYears = null; if (kidsAges != null) { if (kidsAges.Any()) { firstChildYears = kidsAges.ElementAtOrDefault(0); } if (kidsAges.Count() > 1) { secondChildYears = kidsAges.ElementAtOrDefault(1); } } var hotelQuotaMask = QuotesStates.Request | QuotesStates.No | QuotesStates.Availiable; if (hotelsIsNotInStop != null && hotelsIsNotInStop == 1) { hotelQuotaMask = hotelQuotaMask - (byte)QuotesStates.No; } var aviaQuotaMask = QuotesStates.None | QuotesStates.Request | QuotesStates.No | QuotesStates.Availiable; if (ticketsIncluded != null && ticketsIncluded == 1) { aviaQuotaMask = aviaQuotaMask - (byte)QuotesStates.None; } if (hasTickets != null && hasTickets == 1) { aviaQuotaMask = aviaQuotaMask - (byte)QuotesStates.No - (byte)QuotesStates.Request; } result = searchDc.PagingOnClient(mainDc, departCityId, countryId, tourKeys, tourDates, tourNights, hotels, meals, adults, kids, firstChildYears, secondChildYears, roomKeys, hotelQuotaMask, aviaQuotaMask, currencyId, priceMin, priceMax, (ushort)count, 0, new Tuple <SortingColumn, SortingDirection>(SortingColumn.Price, SortingDirection.Asc), out hashOut); cacheDependencies.Add(hashOut); } else { var countryCityKeys = mainDc.GetCountryCityKeysByTourKey((int)offerId.Value, out hashOut); cacheDependencies.Add(hashOut); result = searchDc.PagingOnClient(mainDc, countryCityKeys.Item2, countryCityKeys.Item1, offerId.Value, out hashOut); cacheDependencies.Add(hashOut); } CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
/// <summary> /// Курорты /// </summary> /// <param name="sftDc"></param> /// <param name="resortKey">Ключ курорта</param> /// <param name="searchDc"></param> /// <param name="hash"></param> /// <returns></returns> public static List <DataModel.Resort> GetResorts(this MtSearchDbDataContext searchDc, SftWebDbDataContext sftDc, int?resortKey, out string hash) { List <DataModel.Resort> result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, resortKey); if ((result = CacheHelper.GetCacheItem <List <DataModel.Resort> >(hash)) != null) { return(result); } var cacheDependencies = new List <string>(); result = new List <DataModel.Resort>(); if (resortKey == null) { string hashOut; var cities = searchDc.GetCitiesDeparture(sftDc, null, out hashOut); cacheDependencies.Add(hashOut); foreach (var city in cities) { var countries = searchDc.GetCountriesTo(sftDc, city.Key, out hashOut); if (!cacheDependencies.Contains(hashOut)) { cacheDependencies.Add(hashOut); } foreach (var country in countries) { var resorts = searchDc.GetCitiesTo(sftDc, city.Key, country.Key, null, out hashOut); if (!cacheDependencies.Contains(hashOut)) { cacheDependencies.Add(hashOut); } result.AddRange(resorts.Select(r => new DataModel.Resort { CountryId = country.Key, Id = r.Key, Name = r.Value }).ToList()); } } } else { var resort = searchDc.GetCityByKey(resortKey.Value); result.Add(new DataModel.Resort { Id = resort.CT_KEY, Name = resort.CT_NAME, CountryId = resort.CT_CNKEY }); } cacheDependencies.Add(CountriesExtension.TableName); cacheDependencies.Add(CitiesExtension.TableName); CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
public static ActualizedTour ActualizeTour(this MtSearchDbDataContext searchDc, MtMainDbDataContext mainDc, SftWebDbDataContext sftDc, long offerId, int currencyId, out string hash) { ActualizedTour result; hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, offerId, currencyId); if ((result = CacheHelper.GetCacheItem <ActualizedTour>(hash)) != null) { return(result); } string hashOut; var searchResult = searchDc.GetSearchResult(mainDc, sftDc, offerId, currencyId, out hashOut); var tour = searchDc.ConvertSearchItemsToTours(mainDc, searchResult.SearchItems, currencyId); if (tour.Count == 0) { throw new ApplicationException(MethodBase.GetCurrentMethod().Name + ". Данных по цене в БД не найдено. Параметры: " + String.Format("{0}_{1}", offerId, currencyId)); } string rateCode = searchDc.GetRateCodeByKey(currencyId); var cacheDependencies = new List <string> { hashOut }; result = new ActualizedTour { FewBusinessTicketsDpt = tour[0].FewTicketsDptB, FewBusinessTicketsRtn = tour[0].FewTicketsRtnB, FewEconomTicketsDpt = tour[0].FewTicketsDptY, FewEconomTicketsRtn = tour[0].FewTicketsRtnY, FewPlacesInHotel = tour[0].FewPlacesInHotel, TicketsIsIncluded = tour[0].TicketsIncluded, HasBusinessTicketsDpt = tour[0].HasBusinessTicketsDpt, HasBusinessTicketsRtn = tour[0].HasBusinessTicketsRtn, HasEconomTicketsDpt = tour[0].HasEconomTicketsDpt, HasEconomTicketsRtn = tour[0].HasEconomTicketsRtn, TourUrl = tour[0].TourUrl, Price = tour[0].Price }; var parameters = new List <MtServiceParams>(); var commandBuilder = new StringBuilder(); commandBuilder.AppendLine("select distinct ts_key, ts_svkey, ts_name, ts_day, ts_days, ts_attribute, ts_code, ts_subcode1, ts_subcode2, ts_ctkey, ts_men, ts_oppacketkey, ts_oppartnerkey "); commandBuilder.AppendLine("from tp_services "); commandBuilder.AppendLine(String.Format("where ts_Key in (select tl_tskey from tp_servicelists where tl_tikey in (select tp_tikey from tp_prices where tp_key = {0})) ", tour[0].OfferId)); commandBuilder.AppendLine("order by ts_day asc "); using (var command = mainDc.Connection.CreateCommand()) { command.CommandText = commandBuilder.ToString(); mainDc.Connection.Open(); using (var reader = command.ExecuteReader()) { while (reader.Read()) { var pars = new MtServiceParams() { Code = reader.GetInt32("ts_code"), CtKey = reader.GetInt32("ts_ctkey"), Day = reader.GetInt16("ts_day"), Days = reader.GetInt16("ts_days"), Men = reader.GetInt16("ts_men"), PkKey = reader.GetInt32("ts_oppacketkey"), PrKey = reader.GetInt32("ts_oppartnerkey"), SubCode1 = reader.GetInt32("ts_subcode1"), SubCode2 = reader.GetInt32("ts_subcode2"), SvKey = reader.GetInt32("ts_svkey"), Key = reader.GetInt32("ts_key"), Name = reader.GetString("ts_name"), Attribute = reader.GetInt32("ts_attribute") }; parameters.Add(pars); } } mainDc.Connection.Close(); } foreach (var pars in parameters) { var type = Converters.ServiceClassToServiceType(pars.SvKey, pars.Day); if (type == ServiceType.Undefined) { continue; } var service = new Service { Id = pars.Key, Description = String.Empty, Name = pars.Name, IsIncluded = (pars.Attribute & (int)ServiceAttribute.NotCalculate) != (int)ServiceAttribute.NotCalculate, Type = type }; if (!service.IsIncluded) { var brutto = mainDc.GetServiceCost(pars.SvKey, pars.Code, pars.SubCode1, pars.SubCode2, pars.PrKey, pars.PkKey, searchResult.SearchItems[0].Date.AddDays(pars.Day - 1), pars.Days, rateCode, pars.Men, out hashOut); if (brutto.HasValue) { service.Surcharge = (int)brutto; } else { service.Surcharge = 0; } cacheDependencies.Add(hashOut); } FlightPlainInfo flightInfo = null; QuotaStatePlaces quotaStatePlaces = null; // услуга - перелет туда и в поиске у нас есть о нем информация if (type == ServiceType.DptTransport && pars.SubCode2 == Globals.Settings.HomeCityKey && searchResult.SearchItems[0].FlightCalcInfo.CharterKey.HasValue) { service.FlightClass = Converters.CharterClassToFlightClass(pars.SubCode1); switch (service.FlightClass) { case FlightClass.Econom: quotaStatePlaces = searchResult.SearchItems[0].DirectFlightsInfo[0].QuotaState; break; case FlightClass.Business: quotaStatePlaces = searchResult.SearchItems[0].DirectFlightsInfo[1].QuotaState; break; } if (quotaStatePlaces != null) { service.FlightAvailability = Converters.QuotaStateToQuotaAvailability(quotaStatePlaces.QuotaState); if (quotaStatePlaces.QuotaState == QuotesStates.Small) { service.FlightPlacesCount = (int)quotaStatePlaces.Places; } } if (searchResult.SearchItems[0].DirectFlightsInfo.Count > 0) { service.FlightStartDateTime = searchResult.SearchItems[0].DirectFlightsInfo[0].FlightDateTimeFrom; service.FlightEndDateTime = searchResult.SearchItems[0].DirectFlightsInfo[0].FlightDateTimeTo; } flightInfo = searchResult.SearchItems[0].DirectFlightsInfo[0]; } else if (type == ServiceType.RtnTransport && pars.CtKey == Globals.Settings.HomeCityKey && searchResult.SearchItems[0].FlightCalcInfo.BackCharterKey.HasValue) { service.FlightClass = Converters.CharterClassToFlightClass(pars.SubCode1); switch (service.FlightClass) { case FlightClass.Econom: quotaStatePlaces = searchResult.SearchItems[0].BackFlightsInfo[0].QuotaState; break; case FlightClass.Business: quotaStatePlaces = searchResult.SearchItems[0].BackFlightsInfo[1].QuotaState; break; } if (searchResult.SearchItems[0].BackFlightsInfo.Count > 0) { service.FlightStartDateTime = searchResult.SearchItems[0].BackFlightsInfo[0].FlightDateTimeFrom; service.FlightEndDateTime = searchResult.SearchItems[0].BackFlightsInfo[0].FlightDateTimeTo; } flightInfo = searchResult.SearchItems[0].BackFlightsInfo[0]; } if (quotaStatePlaces != null) { service.FlightAvailability = Converters.QuotaStateToQuotaAvailability(quotaStatePlaces.QuotaState); if (quotaStatePlaces.QuotaState == QuotesStates.Small) { service.FlightPlacesCount = (int)quotaStatePlaces.Places; } } if (flightInfo != null) { service.FlightAirportFrom = flightInfo.AirportFrom; service.FlightAirportTo = flightInfo.AirportTo; service.FlightNum = flightInfo.AirlineCode + " " + flightInfo.FlightNumber; service.FlightAirline = flightInfo.AirlineCode; service.FlightAircraft = flightInfo.AircraftCode; } result.Services.Add(service); } foreach (var service in result.Services) { int compId = 0; switch (service.Type) { case ServiceType.DptTransport: { var service1 = service; compId = result.Services.Where(s => s.Type == ServiceType.RtnTransport && s.FlightAirportFrom == service1.FlightAirportTo && s.FlightAirportTo == service1.FlightAirportFrom) .Select(s => s.Id) .SingleOrDefault(); } break; case ServiceType.RtnTransport: { var service1 = service; compId = result.Services.Where(s => s.Type == ServiceType.DptTransport && s.FlightAirportFrom == service1.FlightAirportTo && s.FlightAirportTo == service1.FlightAirportFrom) .Select(s => s.Id) .SingleOrDefault(); } break; } service.FlightCompatibleIds = compId != 0 ? compId.ToString() : String.Empty; } CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }