public void DistanceBetweenTwoPointsReturns0WhenOriginMatchesDestination() { const double expectedDistance = 0; const float latitude = 0f; const float longitude = 0f; double distance = _distanceCalculator.DistanceBetweenTwoPoints(latitude, longitude, latitude, longitude); Assert.AreEqual(expectedDistance, distance, "Incorrect distance returned."); }
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); }