Example #1
0
		public ReadOnlyCollection<Comment> GetComments(
			long ownerId,
			long postId,
			out int totalCount,
			SortOrderBy? sort = null,
			bool needLikes = false,
			int? count = null,
			int? offset = null,
			int previewLength = 0)
		{
			VkErrors.ThrowIfNumberIsNegative(() => postId);
			VkErrors.ThrowIfNumberIsNegative(() => offset);
			VkErrors.ThrowIfNumberIsNegative(() => count);
			VkErrors.ThrowIfNumberIsNegative(() => previewLength);

			var parameters = new WallGetCommentsParams
			{
				OwnerId = ownerId,
				PostId = postId,
				NeedLikes = needLikes,
				Count = count,
				Offset = offset,
				PreviewLength = previewLength,
				Sort = sort
			};

			return GetComments(out totalCount, parameters);
		}
Example #2
0
        public OnlineSchedulingEventListModel Create(IEnumerable <Event> events, IEnumerable <Host> hosts, IEnumerable <OrderedPair <long, int> > totalSlotsOrderedPair, IEnumerable <OrderedPair <long, int> > availableSlotsOrderedPair, ZipCode filterZipCode,
                                                     IEnumerable <EventSchedulingSlot> slots, long selectedEventId, int cutOffHourforMarkEventOnlineSelection, SortOrderBy sortOrderBy, SortOrderType sortOrderType, int maxNumberofRecordstoFetch, int pageNumber, int pageSize, out int totalRecords)
        {
            var listModel           = new OnlineSchedulingEventListModel();
            var viewModelCollection = new List <OnlineSchedulingEventViewModel>();

            DateTime?nextDay = null;

            if (cutOffHourforMarkEventOnlineSelection > 0)
            {
                var currentDay = DateTime.Now;
                nextDay = currentDay.Date.AddDays(1);

                if (currentDay.AddHours(cutOffHourforMarkEventOnlineSelection) < nextDay)
                {
                    nextDay = currentDay;
                }
            }

            foreach (var theEvent in events)
            {
                var host          = hosts.Where(h => h.Id == theEvent.HostId).FirstOrDefault();
                var totalSlot     = totalSlotsOrderedPair.Where(op => op.FirstValue == theEvent.Id).SingleOrDefault();
                var availableSlot = availableSlotsOrderedPair.Where(op => op.FirstValue == theEvent.Id).SingleOrDefault();

                if (theEvent.EventDate.Date == DateTime.Now.Date && slots != null && theEvent.Id != selectedEventId)
                {
                    var slot         = slots.Where(a => a.EventId == theEvent.Id).ToArray();
                    var maxStartTime = slot.Select(a => a.StartTime).Max();
                    if (DateTime.Now.Date.AddHours(maxStartTime.Hour).AddMinutes(maxStartTime.Minute) < DateTime.Now.AddHours(1))
                    {
                        continue;
                    }
                }

                double distance = 0;
                if (filterZipCode != null && host.Address.ZipCode != null)
                {
                    distance = _distanceCalculator.DistanceBetweenTwoPoints(filterZipCode.Latitude, filterZipCode.Longitude,
                                                                            host.Address.ZipCode.Latitude, host.Address.ZipCode.Longitude);
                }

                if (distance > 0)
                {
                    distance = Math.Round(distance, 2);
                }

                var model = new OnlineSchedulingEventViewModel
                {
                    EventDate               = theEvent.EventDate,
                    EventId                 = theEvent.Id,
                    HostName                = host.OrganizationName,
                    EventLocation           = Mapper.Map <Address, AddressViewModel>(host.Address),
                    TotalSlots              = totalSlot != null ? totalSlot.SecondValue : 0,
                    AvailableSlots          = availableSlot != null ? availableSlot.SecondValue : 0,
                    DistanceFromZip         = distance,
                    IsMarkedOffforSelection = nextDay != null && theEvent.EventDate.Date <= nextDay.Value.Date ? true : false,
                    EventType               = theEvent.EventType,
                    IsFemaleOnly            = theEvent.IsFemaleOnly,
                    RegistrationMode        = theEvent.RegistrationMode
                };

                viewModelCollection.Add(model);
            }

            if (viewModelCollection.Count < 1)
            {
                totalRecords     = 0;
                listModel.Events = viewModelCollection;
                return(listModel);
            }

            if (sortOrderBy == SortOrderBy.Distance)
            {
                int    countForUncalculatableZip = viewModelCollection.Where(vm => vm.DistanceFromZip < 0).Count();
                double maxDistance = viewModelCollection.Max(vm => vm.DistanceFromZip);

                if (countForUncalculatableZip > 0 && maxDistance >= 0 && sortOrderType == SortOrderType.Ascending)
                {
                    maxDistance += 1;
                    viewModelCollection.Where(vm => vm.DistanceFromZip < 0).All(vm =>
                    {
                        vm.DistanceFromZip = maxDistance;
                        return(true);
                    });
                }

                viewModelCollection = sortOrderType == SortOrderType.Ascending
                                          ? viewModelCollection.OrderBy(m => m.EventDate).OrderBy(m => m.DistanceFromZip).ToList()
                                          : viewModelCollection.OrderByDescending(m => m.EventDate).OrderBy(m => m.DistanceFromZip).ToList();

                if (countForUncalculatableZip > 0 && maxDistance >= 0 && sortOrderType == SortOrderType.Ascending)
                {
                    viewModelCollection.Where(vm => vm.DistanceFromZip == maxDistance).All(vm =>
                    {
                        vm.DistanceFromZip = -0.0009;
                        return(true);
                    });
                }
            }
            else // Default Ordering will be Event Date
            {
                viewModelCollection = sortOrderType == SortOrderType.Ascending
                                          ? viewModelCollection.OrderBy(m => m.DistanceFromZip).OrderBy(m => m.EventDate).ToList()
                                          : viewModelCollection.OrderByDescending(m => m.DistanceFromZip).OrderBy(m => m.EventDate).ToList();
            }

            viewModelCollection = viewModelCollection.Where(vw => vw.EventId != selectedEventId).ToList();

            totalRecords = viewModelCollection.Count();
            totalRecords = totalRecords > maxNumberofRecordstoFetch ? maxNumberofRecordstoFetch : totalRecords;

            viewModelCollection = viewModelCollection.Take(totalRecords).ToList();

            listModel.Events = viewModelCollection.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray();

            if (pageNumber > 1 && listModel.Events.Count() < 1)
            {
                listModel.Events = viewModelCollection.Skip((pageNumber - 2) * pageSize).Take(pageSize).ToArray();
            }

            return(listModel);
        }