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);
        }