public ActionResult GetNeighbourhoodByMapType(string mapType) { string categoryName = GetCategoryName(mapType); Category category = (Category)System.Enum.Parse(typeof(Category), categoryName); if (String.IsNullOrEmpty(categoryName)) { return(Json(new { succes = false, JsonRequestBehavior.AllowGet })); } ApplicationUser user = GetUser(); var categoryParam = new SqlParameter("@category", (int)category); var congregationIdParam = new SqlParameter("@congregationId", user.CongregationId); var neighbourhoods = _context.Database.SqlQuery <NeighbourhoodsVisits>("GetNeighbourhoodsByLastVisited @category, @congregationId", categoryParam, congregationIdParam).ToList(); var max = (neighbourhoods.ToList().Count < 3) ? neighbourhoods.ToList().Count : 3; var territoryMapViewModel = new TerritoryMapViewModel { Neighbourhoods = neighbourhoods.Select(n => n.Neighbourhood), NeighbourhoodsSuggestion = neighbourhoods.Select(n => n.Neighbourhood).Take(max), }; return(Json(new { success = true, territoryMapViewModel, JsonRequestBehavior.AllowGet })); }
private List <Householder> GetHouseholdersToVisit(TerritoryMapViewModel territory, ApplicationUser user) { var myCongregationTerritoriesMap = _context.TerritoryMaps.Include(t => t.Householders).Where(t => t.CongregationId == user.CongregationId); List <Householder> houseHoldersInMap = new List <Householder>(); foreach (var terrytoryMap in myCongregationTerritoriesMap) { houseHoldersInMap.AddRange(terrytoryMap.Householders); } var categoryParam = new SqlParameter("@category", (int)territory.Category); var congregationIdParam = new SqlParameter("@congregationId", user.CongregationId); var neighbourhoodParam = new SqlParameter("@neighbourhood", territory.selectedNeighbourhood); var householdersToVisitIds = _context.Database.SqlQuery <int>("GetLastVisitedPeople @category, @congregationId, @neighbourhood", categoryParam, congregationIdParam, neighbourhoodParam).ToList(); var householdersToVisit = _context.Householders.Include(h => h.Visits).Where(h => householdersToVisitIds.Any(p => p == h.Id)).ToList(); householdersToVisit = householdersToVisit.OrderBy(h => householdersToVisitIds.IndexOf(h.Id)).ToList(); return(householdersToVisit); }
public ActionResult New(TerritoryMapViewModel territoryMapViewModel) { try { var locationService = new GoogleLocationService(ConfigurationManager.AppSettings["GooglePlaceAPIKey"]); var googleMapsService = new GoogleMapsService(ConfigurationManager.AppSettings["GooglePlaceAPIKey"]); ApplicationUser user = GetUser(); var householdersToVisit = GetHouseholdersToVisit(territoryMapViewModel, user); //Vou mudar isso para refletir as mudanças no algoritmo de montagem dos mapas territoryMapViewModel.MaxNumberOfHouseholders = 5; territoryMapViewModel.MaxDistanceAmongHouseholders = 5000; if (householdersToVisit == null) { return(View("NotAvailableHouseholders")); } var newTerritoryMap = new TerritoryMap() { CongregationId = user.CongregationId, Neighbourhood = territoryMapViewModel.selectedNeighbourhood, Householders = new List <Householder>(), UserId = user.Id }; if (householdersToVisit.Count > 0) { var firstHouseholderToVisit = householdersToVisit.First(); newTerritoryMap.Householders.Add(firstHouseholderToVisit); householdersToVisit.Remove(firstHouseholderToVisit); for (int i = 0; newTerritoryMap.Householders.Count() < territoryMapViewModel.MaxNumberOfHouseholders && i < householdersToVisit.Count(); i++) { var distance = googleMapsService.GetDistance(new LatLng((decimal)firstHouseholderToVisit.Latitude, (decimal)firstHouseholderToVisit.Longitude), new LatLng((decimal)householdersToVisit[i].Latitude, (decimal)householdersToVisit[i].Longitude)); if (distance <= territoryMapViewModel.MaxDistanceAmongHouseholders) { newTerritoryMap.Householders.Add(householdersToVisit[i]); } } _context.TerritoryMaps.Add(newTerritoryMap); _context.SaveChanges(); } else { return(View("NoMap")); } return(RedirectToAction("Index")); } catch (Exception e) { System.Threading.Thread.Sleep(1000); return(New(territoryMapViewModel)); } }