Example #1
0
        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);
        }
Example #2
0
        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, "Событие получено от незарегестрированого элемента.");
            }
        }
Example #4
0
        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();
                }
            }
        }
Example #6
0
        /// <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);
        }