public IActionResult DetermineDistanceMatrix() { DropDownListForEmployees(); DistanceMatrixViewModel viewModel = new DistanceMatrixViewModel(); return(View(viewModel)); }
//[HttpPost] public IActionResult DetermineDistanceMatrixResult(string sortOrder, DistanceMatrixViewModel inputViewModel) { //Ternary conditional operator //if()? true : false ViewData["DistanceSortParam"] = String.IsNullOrEmpty(sortOrder) ? "distance_desc" : ""; ViewData["DurationSortParam"] = sortOrder == "duration" ? "duration_desc" : "duration"; string WVUEmployeeID = inputViewModel.WvuEmployeeID; //To use session objects, need to set statements in Startup.cs if (WVUEmployeeID != null) { HttpContext.Session.SetString("WVUEmployeeID", WVUEmployeeID); } if (!String.IsNullOrEmpty(HttpContext.Session.GetString("WVUEmployeeID"))) { WVUEmployeeID = HttpContext.Session.GetString("WVUEmployeeID"); } WVUEmployee employee = iApplicationUserRepo.FindWvuEmployee(WVUEmployeeID); string origin = employee.Department.DepartmentAddress; if (inputViewModel.WvuEmployeeID != null) { inputViewModel = CreateDistanceMatrix(origin); HttpContext.Session.SetComplexData("inputViewModel", inputViewModel); } else { inputViewModel = HttpContext.Session.GetComplexData <DistanceMatrixViewModel>("inputViewModel"); } switch (sortOrder) { case "distance_desc": inputViewModel.DistanceMatrix = inputViewModel.DistanceMatrix.OrderByDescending(d => d.DistanceInMiles).ToList(); ViewData["DistanceImage"] = "descending"; break; case "duration": inputViewModel.DistanceMatrix = inputViewModel.DistanceMatrix.OrderBy(d => d.DurationInMinutes).ToList(); break; case "duration_desc": inputViewModel.DistanceMatrix = inputViewModel.DistanceMatrix.OrderByDescending(d => d.DurationInMinutes).ToList(); ViewData["DurationImage"] = "descending"; break; default: inputViewModel.DistanceMatrix = inputViewModel.DistanceMatrix.OrderBy(d => d.DistanceInMiles).ToList(); break; } DropDownListForEmployees(); return(View("DetermineDistanceMatrix", inputViewModel)); }
public DistanceMatrixViewModel CreateDistanceMatrix(string origin) { DistanceMatrixViewModel inputViewModel = new DistanceMatrixViewModel(); inputViewModel.DistanceMatrix = new List <DistanceMatrixViewModel>(); List <Location> destinationLocations = new List <Location>(); List <Lot> allLots = iLotRepo.ListAllLots(); foreach (Lot eachLot in allLots) { DistanceMatrixViewModel processingViewModel = new DistanceMatrixViewModel(); processingViewModel.LotID = eachLot.LotID; processingViewModel.LotAddress = eachLot.LotAddress; processingViewModel.LotNumber = eachLot.LotNumber; processingViewModel.AvailableSpots = eachLot.MaxCapacity - eachLot.CurrentOccupancy; processingViewModel.LotName = eachLot.LocationName; inputViewModel.DistanceMatrix.Add(processingViewModel); destinationLocations.Add(new Location(eachLot.LotAddress)); } DistanceMatrixResponse response = FindDistanceAndDurationBetweenOriginAndDestinations(origin, destinationLocations); Row row = response.Rows.FirstOrDefault(); List <Element> elements = row.Elements.ToList(); int distanceInMeters; double distanceInMiles; const double metersToMileConverter = 0.00062137; int durationInSeconds; int durationInMinutes; int index = 0; foreach (Element eachElement in elements)// need to do this for all 4 { distanceInMeters = eachElement.Distance.Value; distanceInMiles = Math.Round((distanceInMeters * metersToMileConverter), 2); durationInSeconds = eachElement.Duration.Value; durationInMinutes = durationInSeconds / 60; inputViewModel.DistanceMatrix[index].DistanceInMiles = distanceInMiles; inputViewModel.DistanceMatrix[index].DurationInMinutes = durationInMinutes; index++; } return(inputViewModel); }