Esempio n. 1
0
        public SearchVenue GetPlacePrice(SearchVenue searchVenue,
                                         List <EventDetail> eventDetails,
                                         List <EventTicketDetail> eventTicketDetails,
                                         List <TicketCategory> ticketCategories,
                                         List <EventTicketAttribute> eventTicketAttributes
                                         )
        {
            try
            {
                var adultCategories = ticketCategories.Where((item) =>
                { // check is adult exists
                    return(item.Name.ToLower().Contains("adult"));
                });
                var childCategories = ticketCategories.Where((item) =>
                { // check if child exists
                    return(item.Name.ToLower().Contains("child"));
                });
                var adultPriceModel = new PriceModel();
                var childPriceModel = new PriceModel();
                if (adultCategories.Count() > 0)
                { // if adult exists then pick base price of adult
                    adultPriceModel = filterPrices(adultCategories.ToList(), eventTicketDetails, eventTicketAttributes);
                }
                if (childCategories.Count() > 0)
                { // if child exists then pick base price of child
                    childPriceModel = filterPrices(childCategories.ToList(), eventTicketDetails, eventTicketAttributes);
                }

                if (adultCategories.Count() == 0 || childCategories.Count() == 0)
                { // if adult or child not exists then pick the base price of place
                    var currentPriceModel = filterEtabyPrice(eventTicketAttributes);
                    if (childCategories.Count() == 0)
                    {
                        childPriceModel = currentPriceModel;
                    }
                    if (adultCategories.Count() == 0)
                    {
                        adultPriceModel = currentPriceModel;
                    }
                }
                if (eventDetails.Count() == 0 || eventTicketDetails.Count() == 0 || eventTicketAttributes.Count() == 0)
                {
                    return(searchVenue);
                }
                else
                {
                    searchVenue.AdultETAId = adultPriceModel.EtaId;
                    searchVenue.ChildETAId = childPriceModel.EtaId;
                    searchVenue.AdultPrice = Decimal.Parse(adultPriceModel.Price.ToString("0.00"));
                    searchVenue.ChildPrice = Decimal.Parse(childPriceModel.Price.ToString("0.00"));
                    searchVenue.Price      = searchVenue.AdultPrice + searchVenue.ChildPrice;
                }
                return(searchVenue);
            }
            catch (Exception e)
            {
                _logger.Log(Logging.Enums.LogCategory.Error, e);
                return(searchVenue);
            }
        }
Esempio n. 2
0
 SearchVenue GetLastPlace(SearchVenue lastPlace, List <SearchVenue> currentDayList)
 {
     if (lastPlace.Id == 0)
     {
         lastPlace = currentDayList.FirstOrDefault();
     }
     return(lastPlace);
 }
Esempio n. 3
0
        List <SearchVenue> PushVenue(SearchVenue cardModel, List <SearchVenue> dayByDayList, int position)
        {
            ArrayList arrayList = new ArrayList(dayByDayList);

            arrayList.Insert(Convert.ToInt16(position), cardModel);
            var currentDayList = arrayList.Cast <SearchVenue>().ToList();

            return(currentDayList);
        }
Esempio n. 4
0
        public SearchVenueQueryResult Handle(SearchVenueQuery query)
        {
            List <FIL.Contracts.DataModels.SearchVenue> VenueResult = new List <Contracts.DataModels.SearchVenue>();

            try
            {
                var citiesArray = query.CityName != null?query.CityName.Split(",") : null;

                var eventCategoriesRepositoryData = _eventCategoryRepository.GetAll().Where(s => s.IsFeel == true);
                var categories = query.Categories != null?query.Categories.Split(",") : null;

                List <long> categoryList = new List <long>();
                if (categories != null && categories.Count() > 0 && query.PlaceId == 0)
                {
                    foreach (var item in categories)
                    {
                        try
                        {
                            var categoryInfo = eventCategoriesRepositoryData.FirstOrDefault(x => x.DisplayName == item).Id;
                            categoryList.Add(categoryInfo);
                        }
                        catch (Exception ex)
                        {
                            _logger.Log(Logging.Enums.LogCategory.Error, ex);
                        }
                    }
                }
                else if (categories != null && categories.Count() == 0 && query.PlaceId == 0)
                {
                    var categoryInfo = eventCategoriesRepositoryData.FirstOrDefault(x => x.DisplayName == query.Categories).Id;
                    categoryList.Add(categoryInfo);
                }
                var cityLists = query.CityIds != null?_cityRepository.GetByCityIds(query.CityIds) : null;

                var itineraryPlaces = query.PlaceId == 0 ? _eventRepository.GetAllItineraryPlaces(cityLists.Select(s => s.Id).ToList(), categoryList).GroupBy(x => x.Id, (key, group) => group.First()) :
                                      _eventRepository.GetItinerarySearchPlaces(query.PlaceId).GroupBy(x => x.Id, (key, group) => group.First());
                var placeWeekOpenDayList              = _placeWeekOpenDaysRepository.GetByEventIds(itineraryPlaces.Select(s => (long)s.Id).Distinct().ToList());
                var dayTimeMappingLists               = _dayTimeMappingsRepository.GetAllByPlaceWeekOpenDays(placeWeekOpenDayList.Select(s => (long)s.Id).Distinct().ToList());
                var placeHolidayDatesRepositoryLists  = _placeHolidayDatesRepository.GetAllByEventIds(itineraryPlaces.Select(s => (long)s.Id).Distinct().ToList());
                var placeVisitDurationRepositoryLists = _PlaceVisitDurationRepository.GetByEventIds(itineraryPlaces.Select(s => (long)s.Id).Distinct().ToList());
                var eventDetails          = _eventDetailRepository.GetByEventIds(itineraryPlaces.Select(s => (long)s.Id).Distinct().ToList()).Where(s => s.IsEnabled == true);
                var eventTicketDetails    = _eventTicketDetailRepository.GetByEventDetailIds(eventDetails.Select(s => (long)s.Id).Distinct().ToList()).Where(s => s.IsEnabled == true);
                var eventTicketAttributes = _eventTicketAttributeRepository.GetByEventTicketDetailIds(eventTicketDetails.Select(s => (long)s.Id).Distinct().ToList()).Where(s => s.IsEnabled == true);
                var ticketCategories      = _ticketCategoryRepository.GetByTicketCategoryIds(eventTicketDetails.Select(s => (long)s.TicketCategoryId).Distinct().ToList());
                var Days = _daysRepository.GetAll();
                foreach (var currentPlace in itineraryPlaces)
                {
                    var         PlaceVisitDuration = placeVisitDurationRepositoryLists.FirstOrDefault(x => x.EventId == currentPlace.Id);
                    var         placeWeekOpenDays  = placeWeekOpenDayList.Where(x => x.EventId == currentPlace.Id);
                    var         dayTimeMappings    = dayTimeMappingLists.Where(s => placeWeekOpenDays.Any(p => p.Id == s.PlaceWeekOpenDayId));
                    SearchVenue searchVenue        = new SearchVenue();
                    searchVenue.CategoryName          = currentPlace.Category;
                    searchVenue.EventId               = currentPlace.Id;
                    searchVenue.CityId                = currentPlace.CityId;
                    searchVenue.EventSource           = currentPlace.EventSource;
                    searchVenue.CityName              = currentPlace.CityName;
                    searchVenue.CountryName           = currentPlace.CountryName;
                    searchVenue.Currency              = currentPlace.Currency;
                    searchVenue.EventName             = currentPlace.Name;
                    searchVenue.EventAltId            = currentPlace.AltId;
                    searchVenue.EventSlug             = currentPlace.Slug;
                    searchVenue.Address               = (currentPlace.AddressLineOne == null ? string.Empty : currentPlace.AddressLineOne) + "," + (currentPlace.AddressLineTwo == null ? string.Empty : currentPlace.AddressLineTwo);
                    searchVenue.Id                    = currentPlace.Id;
                    searchVenue.PlaceWeekOpenDays     = placeWeekOpenDays.ToList();
                    searchVenue.DayTimeMappings       = dayTimeMappings.ToList();
                    searchVenue.PlaceHolidaysList     = placeHolidayDatesRepositoryLists.Where(x => x.EventId == currentPlace.Id).ToList();
                    searchVenue.EventDescription      = currentPlace.EventDescription;
                    searchVenue.EventDetails          = eventDetails.Where(x => x.EventId == currentPlace.Id).ToList();
                    searchVenue.EventTicketDetails    = eventTicketDetails.Where(x => searchVenue.EventDetails.Any(s => s.Id == x.EventDetailId)).ToList();
                    searchVenue.EventTicketAttributes = eventTicketAttributes.Where(x => searchVenue.EventTicketDetails.Any(s => s.Id == x.EventTicketDetailId)).ToList();
                    searchVenue.ticketCategories      = ticketCategories.Where(x => searchVenue.EventTicketDetails.Any(s => s.TicketCategoryId == x.Id)).ToList();

                    if (currentPlace.Latitude != null)
                    {
                        var latArr  = currentPlace.Latitude.Split("E");
                        var longArr = currentPlace.Longitude.Split("E");
                        searchVenue.Latitude  = latArr[0];
                        searchVenue.Longitude = longArr[0];
                    }
                    else
                    {
                        searchVenue.Latitude  = null;
                        searchVenue.Longitude = null;
                    }
                    VenueResult.Add(searchVenue);
                }
                return(new SearchVenueQueryResult()
                {
                    Venues = VenueResult.Distinct().ToList(), Days = Days.ToList()
                });
            }
            catch (Exception e)
            {
                return(new SearchVenueQueryResult()
                {
                    Venues = VenueResult.Distinct().ToList()
                });
            }
        }
Esempio n. 5
0
        public async Task <ItineraryBoardResponseViewModel> GetItineraryBoardData([FromBody] ItineraryBoardViewModel model)
        {
            var searchVenueList = new List <List <SearchVenue> >();
            List <List <SearchVenue> > searchModel = new List <List <SearchVenue> >();

            searchModel.AddRange(model.ItineraryBoardCopyData.ToList());
            var lastPlace    = new SearchVenue();
            var endTimeOfDay = "20";
            var index        = -1;

            try
            {
                var sourcelane  = model.IsAddNew ? null : model.RootObject.Lanes.Where(s => s.id == model.SourceLaneId).FirstOrDefault();
                var tagrgetlane = model.IsAddNew ? null : model.RootObject.Lanes.Where(s => s.id == model.TargetLaneId).FirstOrDefault();
                var sourceDate  = model.IsAddNew ? null : sourcelane.label.Split(" ").FirstOrDefault();
                var targetDate  = model.IsAddNew ? null : tagrgetlane.label.Split(" ").FirstOrDefault();
                var cardIndex   = model.IsAddNew ? 0 : model.RootObject.Lanes.Where(s => s.Cards.Any(p => p.id == model.CardId)).FirstOrDefault().Cards.FindIndex(p => p.id == model.CardId);
                if (!model.IsAddNew && (model.SourceLaneId == model.TargetLaneId) && model.Position == cardIndex && !model.IsDelete)
                {
                    return(new ItineraryBoardResponseViewModel
                    {
                        Success = true,
                        IsSourceCountZero = false,
                        IsValidDandD = false,
                        ItineraryBoardData = model.ItineraryBoardData
                    });
                }
                if (!model.IsAddNew && sourcelane.Cards.Count() == 0)
                {
                    return(new ItineraryBoardResponseViewModel
                    {
                        Success = false,
                        IsSourceCountZero = true,
                        IsValidDandD = false,
                        ItineraryBoardData = model.ItineraryBoardData
                    });
                }
                if (!model.IsAddNew && Convert.ToInt16(sourceDate) < 10)
                {
                    sourceDate = "0" + sourceDate;
                }
                if (!model.IsAddNew && Convert.ToInt16(targetDate) < 10)
                {
                    targetDate = "0" + targetDate;
                }
                var cardModel     = model.IsAddNew ? null : model.ItineraryBoardData.Where(s => s.Any(p => p.PlaceVisitDate.Split("-").ElementAt(2) == sourceDate)).FirstOrDefault().Where(s => s.Id == Convert.ToInt16(model.CardId)).FirstOrDefault();
                var responseModel = model.IsAddNew ? null : CheckDiffCityDrag(model.ItineraryBoardCopyData, sourceDate, targetDate);
                if (!model.IsAddNew && !responseModel.Success)
                {
                    return(responseModel);
                }
                if (model.IsAddNew)
                {
                    var veneueResultFromQuerySender = await _querySender.Send(new SearchVenueQuery
                    {
                        PlaceId = model.PlaceId
                    });

                    var data    = model.ItineraryBoardData.Where(s => s.Any(x => x.CityId == veneueResultFromQuerySender.Venues.FirstOrDefault().CityId));
                    var isAdded = false;
                    foreach (var dayByDayList in model.ItineraryBoardData)
                    {
                        var currentDayByDayList = new List <SearchVenue>();
                        if (dayByDayList.Any(s => s.CityId == veneueResultFromQuerySender.Venues.FirstOrDefault().CityId) && dayByDayList.Count() < 5 && !isAdded)
                        {
                            isAdded = true;
                            var currentDayList = dayByDayList;
                            var startTime      = GetCurrnetTimeSpan(dayByDayList.FirstOrDefault().StartTime);
                            int rand           = new Random().Next(dayByDayList.Count());
                            veneueResultFromQuerySender.Venues.FirstOrDefault().PlaceVisitDate = dayByDayList.FirstOrDefault().PlaceVisitDate;
                            currentDayList = PushVenue(veneueResultFromQuerySender.Venues.FirstOrDefault(), currentDayList, rand);
                            currentDayList.FirstOrDefault().StartTime = startTime.ToString();
                            currentDayList.FirstOrDefault().EndTime   = startTime.Add(new TimeSpan(1, 0, 0)).ToString();
                            currentDayByDayList.Add(currentDayList.FirstOrDefault());
                            lastPlace = GetLastPlace(lastPlace, currentDayList);
                            var currentTime = startTime.Add(new TimeSpan(1, 0, 0));
                            foreach (var currentPlace in currentDayList.Skip(1))
                            {
                                var responseViewModel = RegulizeDayCalendar(model.ItineraryBoardCopyData, lastPlace, currentPlace, currentTime, endTimeOfDay, true);
                                if (!responseViewModel.Success)
                                {
                                    isAdded             = false;
                                    currentDayByDayList = new List <SearchVenue>();
                                    currentDayByDayList.AddRange(model.ItineraryBoardCopyData.Where(s => s.Any(x => x.PlaceVisitDate == dayByDayList.FirstOrDefault().PlaceVisitDate)).First());
                                    break;
                                }
                                currentTime = GetCurrnetTimeSpan(responseViewModel.CurrentPlace.EndTime);
                                currentDayByDayList.Add(currentPlace);
                                lastPlace = currentPlace;
                            }
                        }
                        else
                        {
                            currentDayByDayList.AddRange(dayByDayList);
                        }
                        searchVenueList.Add(currentDayByDayList);
                    }
                    return(new ItineraryBoardResponseViewModel
                    {
                        Success = isAdded,
                        IsSourceCountZero = false,
                        IsTargetDateExceed = false,
                        IsValidDandD = true,
                        ItineraryBoardData = searchVenueList
                    });
                }

                foreach (var dayByDayList in model.ItineraryBoardData)
                {
                    index += 1;
                    var currentDayByDayList = new List <SearchVenue>();
                    if (index == Convert.ToInt16(model.TargetLaneId) && !model.IsDelete)
                    {
                        cardModel.PlaceVisitDate = dayByDayList.FirstOrDefault().PlaceVisitDate;
                        var startTime = GetCurrnetTimeSpan(dayByDayList.FirstOrDefault().StartTime);

                        var currentDayList = dayByDayList;
                        if (model.SourceLaneId == model.TargetLaneId)
                        {
                            currentDayList = currentDayList.Where(s => s.Id != Convert.ToInt16(model.CardId)).ToList();
                        }
                        currentDayList = PushVenue(cardModel, currentDayList, model.Position);
                        currentDayList.FirstOrDefault().StartTime = startTime.ToString();
                        currentDayList.FirstOrDefault().EndTime   = startTime.Add(new TimeSpan(2, 0, 0)).ToString();
                        currentDayByDayList.Add(currentDayList.FirstOrDefault());
                        lastPlace = GetLastPlace(lastPlace, currentDayList);
                        var currentTime = startTime.Add(new TimeSpan(2, 0, 0));
                        foreach (var currentPlace in currentDayList.Skip(1))
                        {
                            var responseViewModel = RegulizeDayCalendar(model.ItineraryBoardCopyData, lastPlace, currentPlace, currentTime, endTimeOfDay);
                            if (!responseViewModel.Success)
                            {
                                return(responseViewModel);
                            }
                            currentTime = GetCurrnetTimeSpan(responseViewModel.CurrentPlace.EndTime);
                            currentDayByDayList.Add(currentPlace);
                            lastPlace = currentPlace;
                        }
                    }
                    if (index == Convert.ToInt16(model.SourceLaneId) && model.SourceLaneId != model.TargetLaneId && !model.IsDelete)
                    {
                        var startTime = GetCurrnetTimeSpan(dayByDayList.FirstOrDefault().StartTime);
                        lastPlace = GetLastPlace(lastPlace, dayByDayList);
                        var currentDayList = dayByDayList.Where(s => s.Id != Convert.ToInt16(model.CardId));
                        var currentTime    = startTime;
                        foreach (var currentPlace in currentDayList)
                        {
                            var responseViewModel = RegulizeDayCalendar(model.ItineraryBoardCopyData, lastPlace, currentPlace, currentTime, endTimeOfDay);
                            if (!responseViewModel.Success)
                            {
                                return(responseViewModel);
                            }
                            currentTime = GetCurrnetTimeSpan(responseViewModel.CurrentPlace.EndTime);
                            currentDayByDayList.Add(currentPlace);
                            lastPlace = currentPlace;
                        }
                    }
                    else if (((index != Convert.ToInt16(model.SourceLaneId)) && (index != Convert.ToInt16(model.TargetLaneId))))
                    {
                        currentDayByDayList.AddRange(dayByDayList);
                    }
                    else if (model.IsDelete)
                    {
                        var iscardDelete       = dayByDayList.Where(s => s.Id == Convert.ToInt16(model.CardId)).Any();
                        var currentDayList     = dayByDayList.ToList();
                        var startTime          = GetCurrnetTimeSpan(dayByDayList.FirstOrDefault().StartTime);
                        var currentSearchVenue = dayByDayList.Where(s => s.Id == Convert.ToInt16(model.CardId)).FirstOrDefault();
                        if (iscardDelete)
                        {
                            currentDayList.RemoveAt(dayByDayList.FindIndex(s => s.Id == Convert.ToInt16(model.CardId)));
                        }
                        currentDayList.FirstOrDefault().StartTime = startTime.ToString();
                        currentDayList.FirstOrDefault().EndTime   = startTime.Add(new TimeSpan(2, 0, 0)).ToString();
                        if (lastPlace.Id == 0)
                        {
                            lastPlace = currentDayList.FirstOrDefault();
                        }
                        currentDayByDayList.Add(currentDayList.FirstOrDefault());
                        var currentTime = startTime.Add(new TimeSpan(2, 0, 0));
                        foreach (var currentPlace in currentDayList.Skip(1))
                        {
                            var responseViewModel = RegulizeDayCalendar(model.ItineraryBoardCopyData, lastPlace, currentPlace, currentTime, endTimeOfDay);
                            if (!responseViewModel.Success)
                            {
                                return(responseViewModel);
                            }
                            currentTime = GetCurrnetTimeSpan(responseViewModel.CurrentPlace.EndTime);
                            currentDayByDayList.Add(currentPlace);
                            lastPlace = currentPlace;
                        }
                    }
                    searchVenueList.Add(currentDayByDayList);
                }
            }
            catch (Exception e)
            {
                _logger.Log(Logging.Enums.LogCategory.Error, e);
                return(new ItineraryBoardResponseViewModel
                {
                    Success = false,
                    IsSourceCountZero = false,
                    IsValidDandD = false,
                    ItineraryBoardData = searchModel
                });
            }
            return(new ItineraryBoardResponseViewModel
            {
                Success = true,
                IsSourceCountZero = false,
                IsTargetDateExceed = false,
                IsValidDandD = true,
                ItineraryBoardData = searchVenueList
            });
        }
Esempio n. 6
0
        ItineraryBoardResponseViewModel RegulizeDayCalendar(List <List <SearchVenue> > searchModel,
                                                            SearchVenue lastPlace,
                                                            SearchVenue currentPlace,
                                                            TimeSpan currentTime,
                                                            string endTimeOfDay,
                                                            bool isRandom = false)
        {
            var visitMinutes = 60;
            var visitTimes   = new List <int>()
            {
                0, 30, 45, 60
            };

            if (isRandom)
            {
                visitMinutes = visitTimes.ElementAt(new Random().Next(4));
            }
            var result          = _visitDurationProvider.GetDistance((lastPlace.Address), (currentPlace.Address));
            var durationTime    = _durationTimeProvider.DurationTime(result);
            var durationValue   = GetDurationTime(result);
            var currentDate     = new DateTime(Convert.ToInt16(currentPlace.PlaceVisitDate.Split("-").ElementAt(0)), Convert.ToInt16(currentPlace.PlaceVisitDate.Split("-").ElementAt(1)), Convert.ToInt16(currentPlace.PlaceVisitDate.Split("-").ElementAt(2)));
            var currentDateTime = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, (int)currentTime.Hours, currentTime.Minutes, currentTime.Seconds);

            currentTime = currentTime.Add(new TimeSpan(0, durationTime.DurationTime + 30, 0));
            var totalMinutes = (int)(currentTime + new TimeSpan(0, 30, 0)).TotalMinutes;

            currentTime = new TimeSpan(0, totalMinutes - totalMinutes % 30, 0);
            var journeyDateTime = currentDateTime.AddMinutes(durationTime.DurationTime + 30); // Add Timespan of the total journey

            if (currentDateTime.Date != journeyDateTime.Date)
            {
                return(new ItineraryBoardResponseViewModel
                {
                    Success = false,
                    IsSourceCountZero = true,
                    IsValidDandD = false,
                    IsTargetDateExceed = true,
                    ItineraryBoardData = searchModel
                });
            }
            if (currentTime.Add(new TimeSpan(1, visitMinutes, 0)) > TimeSpan.Parse(endTimeOfDay + ":00"))
            {
                return(new ItineraryBoardResponseViewModel
                {
                    Success = false,
                    IsSourceCountZero = true,
                    IsValidDandD = false,
                    IsTargetDateExceed = true,
                    ItineraryBoardData = searchModel
                });
            }
            currentPlace.StartTime          = currentTime.ToString();
            currentPlace.EndTime            = currentTime.Add(new TimeSpan(1, visitMinutes, 0)).ToString();
            currentPlace.PlaceVisitDuration = durationValue;
            currentPlace.TravelDuration     = durationValue;
            return(new ItineraryBoardResponseViewModel
            {
                Success = true,
                IsSourceCountZero = false,
                IsValidDandD = false,
                IsTargetDateExceed = true,
                ItineraryBoardData = searchModel,
                CurrentPlace = currentPlace
            });
        }