public static CharterQuota GetCharterQuota(QuotesStates quotaState) { var result = CharterQuota.Available; if (quotaState == QuotesStates.Request && (result == CharterQuota.Available)) { result = CharterQuota.Request; } else if ((quotaState == QuotesStates.No || quotaState == QuotesStates.None) && (result == CharterQuota.Request || result == CharterQuota.Available)) { result = CharterQuota.NoPlaces; } return(result); }
public static QuotaAvailability QuotaStateToQuotaAvailability(QuotesStates quotaState) { var result = QuotaAvailability.Undefined; switch (quotaState) { case QuotesStates.Availiable: case QuotesStates.Small: result = QuotaAvailability.Available; break; case QuotesStates.No: result = QuotaAvailability.NoPlaces; break; case QuotesStates.Request: result = QuotaAvailability.Request; break; } return(result); }
public static string GetQuotaText(QuotesStates qs) { switch (qs) { case QuotesStates.None: return("-"); case QuotesStates.Availiable: return("есть"); case QuotesStates.No: return("нет"); case QuotesStates.Request: return("запрос"); case QuotesStates.Small: return("мало"); default: throw new ArgumentOutOfRangeException("qs", qs, "Событие получено от незарегестрированого элемента."); } }
public SearchResult SearchToursWithPriceForMen(int cityKeyFrom, int countryKey, List <int> tourKeys, List <DateTime> tourDates, List <int> tourNights, List <int> hotelKeys, List <int> pansionKeys, List <int> roomTypeKeys, QuotesStates hotelQuotaMask, QuotesStates aviaQuotaMask, int rateKey, uint?maxTourPrice, ushort rowsPerPage, uint rowCounterFrom, SortingColumn sortingColumn, SortingDirection sortingDirection, FlightTicketState flightTicketState) { if (!IsCountryPriceForMen(countryKey)) { throw new ApplicationException( "Данная страна посчитана с ценами за номер. Используйте для поиска метод SearchToursWithRoomPrice."); } // ReSharper disable RedundantNameQualifier Seemplexity.Services.Wcf.ToursSearch.DataModel.SearchResult searchResult; // ReSharper restore RedundantNameQualifier using (var mtsDc = new MtSearchDbDataContext()) { using (var mtmDc = new MtMainDbDataContext()) { searchResult = // ReSharper disable RedundantNameQualifier new Seemplexity.Services.Wcf.ToursSearch.DataModel.SearchResult(mtsDc.PagingOnClient(mtmDc, // ReSharper restore RedundantNameQualifier cityKeyFrom, countryKey, tourKeys, tourDates, tourNights, hotelKeys, pansionKeys, null, null, null, null, roomTypeKeys, (QDSearch.DataModel.QuotesStates)hotelQuotaMask, (QDSearch.DataModel.QuotesStates)aviaQuotaMask, rateKey, maxTourPrice, rowsPerPage, rowCounterFrom, new Tuple <QDSearch.DataModel.SortingColumn, QDSearch.DataModel.SortingDirection>( (QDSearch.DataModel.SortingColumn)sortingColumn, (QDSearch.DataModel.SortingDirection)sortingDirection))); } } return(searchResult); }
public void ShowTours(int cityKeyFrom, int countryKey, int[] tourKeys, DateTime[] tourDates, int[] tourNights, int[] hotelKeys, int[] pansionKeys, ushort?mainPlaces, ushort?addPlaces, ushort?firstChildYears, ushort?secondChildYears, int[] roomTypeKeys, QuotesStates hotelQuotaMask, QuotesStates aviaQuotaMask, int rateKey, uint?maxTourPrice, ushort rowsPerPage) { if (tourKeys == null || !tourKeys.Any()) { throw new ArgumentNullException("tourKeys"); } if (tourDates == null || !tourDates.Any()) { throw new ArgumentNullException("tourDates"); } if (tourNights == null || !tourNights.Any()) { throw new ArgumentNullException("tourNights"); } if (hotelKeys == null || !hotelKeys.Any()) { throw new ArgumentNullException("hotelKeys"); } if (pansionKeys == null || !pansionKeys.Any()) { throw new ArgumentNullException("pansionKeys"); } if ((roomTypeKeys != null && roomTypeKeys.Any() && mainPlaces.HasValue) || ((roomTypeKeys == null || !roomTypeKeys.Any()) && !mainPlaces.HasValue)) { throw new ArgumentException("Одноверменно не могут быть указаны значение количество взрослых и тип номера", "roomTypeKeys"); } if (addPlaces > 0 && !firstChildYears.HasValue) { throw new ArgumentNullException("firstChildYears", "Не указан возраст первого ребенка"); } if (addPlaces > 1 && !secondChildYears.HasValue) { throw new ArgumentNullException("secondChildYears", "Не указан возраст второго ребенка"); } CityKeyFrom = cityKeyFrom; CountryKey = countryKey; TourKeys = tourKeys; TourDates = tourDates; TourNights = tourNights; HotelKeys = hotelKeys; PansionKeys = pansionKeys; MainPlaces = mainPlaces; AddPlaces = addPlaces; FirstChildYears = firstChildYears; SecondChildYears = secondChildYears; RoomTypeKeys = roomTypeKeys; HotelQuotaMask = hotelQuotaMask; AviaQuotaMask = aviaQuotaMask; RateKey = rateKey; MaxTourPrice = maxTourPrice; RowsPerPage = rowsPerPage; using (var mtmDc = new MtMainDbDataContext()) { using (var mtsDc = new MtSearchDbDataContext()) { var searchResult = mtsDc.PagingOnClient(mtmDc, CityKeyFrom.Value, CountryKey.Value, TourKeys, TourDates, TourNights, HotelKeys, PansionKeys, MainPlaces, AddPlaces, FirstChildYears, SecondChildYears, RoomTypeKeys, HotelQuotaMask, AviaQuotaMask | QuotesStates.None, RateKey.Value, MaxTourPrice, RowsPerPage, 0, CurrentSort); CurrentSort = searchResult.SortType; SearchPages.Clear(); if (!searchResult.SearchItems.Any()) { LtMessage.Text = @"<div id='SearchResultsMsg' class='TFS_SearchResultsMsg'><span>К сожалению по вашему запросу ничего не найдено. Попробуйте изменить параметры поиска. Например квоты или количество едущих людей и т.д.</span></div>"; Web.ShowMessage(this, @"К сожалению по вашему запросу ничего не найдено. Попробуйте изменить параметры поиска. Например квоты или количество едущих людей и т.д."); Web.ScrollToElement(this, "SearchResultsMsg"); //koshelev //сделал обработку того, что ни один тур не найден RepFindedTours.DataSource = null; RepFindedTours.DataBind(); RepPagesTop.DataSource = null; RepPagesTop.DataBind(); RepPagesBottom.DataSource = null; RepPagesBottom.DataBind(); return; } LtMessage.Text = String.Empty; // добовляем первую страницу SearchPages.Add(1, 0); CurrentPage = 1; // инициализируем следующую страницу if (searchResult.IsMorePages) { SearchPages.Add(CurrentPage + 1, searchResult.NextPageRowCounter); } RepPagesTop.DataSource = SearchPages; RepPagesTop.DataBind(); RepPagesBottom.DataSource = SearchPages; RepPagesBottom.DataBind(); RepFindedTours.DataSource = searchResult.SearchItems; RepFindedTours.DataBind(); } } }
/// <summary> /// Метод по проверке квот на перелет /// </summary> /// <param name="dc">Контекст БД</param> /// <param name="mainDc">Контекст основной БД</param> /// <param name="charterKey">Ключ перелета</param> /// <param name="cityKeyFrom">Ключ города вылета</param> /// <param name="cityKeyTo">Ключ города прилета</param> /// <param name="charterDay">День вылета в туре</param> /// <param name="partnerKey">Ключ партнера по перелету</param> /// <param name="agentKey">Ключ агентства</param> /// <param name="packetKey">Ключ пакета</param> /// <param name="tourDate">Дата тура</param> /// <param name="linkedDay">День вылета парного перелета</param> /// <param name="findFlight">Признак "подбирать или не подбирать" перелет</param> /// <param name="placesToCheck">Количество мест, которые должны быть в квоте, чтобы она считалась подходящей</param> /// <param name="flightGroups">Группы перелетов (эконом, бизнес, премиум)</param> /// <param name="hash">Хэш кэша</param> /// <param name="aviaQuotaMask">Маска квот на перелет</param> /// <returns></returns> public static Dictionary <int, FlightPlainInfo> CheckCharterQuota(this MtSearchDbDataContext dc, MtMainDbDataContext mainDc, Int32 charterKey, Int32 cityKeyFrom, Int32 cityKeyTo, Int32 charterDay, int partnerKey, int?agentKey, int packetKey, DateTime tourDate, Int32?linkedDay, bool findFlight, QuotesStates aviaQuotaMask, Int32 placesToCheck, IDictionary <int, IEnumerable <int> > flightGroups, out string hash) { Dictionary <int, FlightPlainInfo> result; hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, charterKey, CacheHelper.GetCacheKeyHashed(new[] { cityKeyFrom.ToString(), cityKeyTo.ToString(), partnerKey.ToString(), agentKey.ToString(), charterDay.ToString(), packetKey.ToString(), tourDate.ToString("yyyy-MM-dd"), linkedDay.ToString(), findFlight.ToString(), aviaQuotaMask.ToString(), placesToCheck.ToString(), String.Join("_", flightGroups.Keys), String.Join("_", flightGroups.Values) })); if ((result = CacheHelper.GetCacheItem <Dictionary <int, FlightPlainInfo> >(hash)) != null) { return(result); } var cacheDependencies = new List <string>(); string hashOut; var flightsInfo = dc.GetCharterAllQuota(mainDc, charterKey, cityKeyFrom, cityKeyTo, charterDay, partnerKey, agentKey, packetKey, tourDate, linkedDay, findFlight, flightGroups, out hashOut); result = new Dictionary <int, FlightPlainInfo>(); foreach (var key in flightsInfo.Keys) { var quotaIsOk = false; var tempState = new FlightPlainInfo(); foreach (var flightInfo in flightsInfo[key]) { var quotaState = flightInfo.QuotaState; var maskIsOk = ((quotaState.QuotaState == QuotesStates.Small && (aviaQuotaMask & QuotesStates.Availiable) == QuotesStates.Availiable) || (quotaState.QuotaState & aviaQuotaMask) == quotaState.QuotaState); if (!maskIsOk) { continue; } if ((quotaState.QuotaState == QuotesStates.Availiable || quotaState.QuotaState == QuotesStates.Small) && quotaState.Places < placesToCheck && (aviaQuotaMask & QuotesStates.Request) != QuotesStates.Request) { continue; } if (QuotasExtension.OrderderQuotaStates[flightInfo.QuotaState.QuotaState] > QuotasExtension.OrderderQuotaStates[tempState.QuotaState.QuotaState] || (tempState.QuotaState.QuotaState == flightInfo.QuotaState.QuotaState && flightInfo.QuotaState.Places > tempState.QuotaState.Places)) { tempState = flightInfo; quotaIsOk = true; } if (tempState.QuotaState.QuotaState == QuotesStates.Availiable) { break; } } if (quotaIsOk) { result.Add(key, new FlightPlainInfo(tempState)); } } CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }