This commit is contained in:
Jim Paine 2020-05-05 15:15:08 +01:00
Родитель a0bd483443
Коммит 9e6178a3ca
3 изменённых файлов: 34 добавлений и 25 удалений

Просмотреть файл

@ -72,7 +72,7 @@ namespace Project.Zap.Tests
SearchShiftViewModel viewModel = new SearchShiftViewModel { Locations = new List<string> { "Contoso" }, Start = DateTime.Now };
// Act
await controller.Search(viewModel);
await controller.Index(viewModel);
// Assert
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
@ -95,7 +95,7 @@ namespace Project.Zap.Tests
SearchShiftViewModel viewModel = new SearchShiftViewModel { Locations = new List<string> { "Contoso" }, Start = DateTime.Now };
// Act
IActionResult result = await controller.Search(viewModel);
IActionResult result = await controller.Index(viewModel);
// Assert
ViewResult viewResult = Assert.IsType<ViewResult>(result);
@ -121,7 +121,7 @@ namespace Project.Zap.Tests
SearchShiftViewModel viewModel = new SearchShiftViewModel { Locations = new List<string> { "Contoso" }, Start = DateTime.Now.Add(new TimeSpan(1, 0, 0, 0)) };
// Act
IActionResult result = await controller.Search(viewModel);
IActionResult result = await controller.Index(viewModel);
// Assert
ViewResult viewResult = Assert.IsType<ViewResult>(result);
@ -146,7 +146,7 @@ namespace Project.Zap.Tests
SearchShiftViewModel viewModel = new SearchShiftViewModel { Locations = new List<string> { "Contoso" }, Start = DateTime.Now };
// Act
IActionResult result = await controller.Search(viewModel);
IActionResult result = await controller.Index(viewModel);
// Assert
ViewResult viewResult = Assert.IsType<ViewResult>(result);

Просмотреть файл

@ -47,18 +47,24 @@ namespace Project.Zap.Controllers
this.logger = logger;
}
public async Task<IActionResult> Index()
{
IEnumerable<Location> locations = await this.locationService.Get();
if (locations == null || !locations.Any())
[HttpGet]
public async Task<IActionResult> Index(SearchShiftViewModel search = null)
{
if(search == null)
{
this.logger.LogInformation("No locations, so redirecting to location view");
return Redirect("/Locations");
}
SearchShiftViewModel viewModel = await GetShifts(locations);
IEnumerable<Location> locations = await this.locationService.Get();
if (locations == null || !locations.Any())
{
this.logger.LogInformation("No locations, so redirecting to location view");
return Redirect("/Locations");
}
SearchShiftViewModel viewModel = await GetShifts(locations);
ViewData["AzureMapsKey"] = this.configuration["AzureMapsSubscriptionKey"];
return View("Index", viewModel);
ViewData["AzureMapsKey"] = this.configuration["AzureMapsSubscriptionKey"];
return View("Index", viewModel);
}
return await this.Search(search);
}
private async Task<SearchShiftViewModel> GetShifts(IEnumerable<Location> locations)
@ -79,7 +85,12 @@ namespace Project.Zap.Controllers
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Search(SearchShiftViewModel search)
public IActionResult OnSearch(SearchShiftViewModel search)
{
return RedirectToAction("Index", new { Start = search.Start.ToString("yyyy-MM-ddTHH:mm"), search.Locations, search.UseMyLocation, search.Available, search.ZipOrPostcode });
}
private async Task<IActionResult> Search(SearchShiftViewModel search)
{
IEnumerable<Location> locations = await this.locationService.Get();
@ -88,8 +99,8 @@ namespace Project.Zap.Controllers
if (search.Locations != null && search.Locations.Any())
{
locationIds.AddRange(locations.Where(x => search.Locations.Contains(x.Name)).Select(x => x.id).ToList());
}
if(search.DistanceInMeters != null && !string.IsNullOrWhiteSpace(search.ZipOrPostcode))
}
if (search.DistanceInMeters != null && !string.IsNullOrWhiteSpace(search.ZipOrPostcode))
{
Point point = await this.mapService.GetCoordinates(new Address { ZipOrPostcode = search.ZipOrPostcode });
IEnumerable<Location> filteredLocations = await this.locationService.GetByDistance(point, search.DistanceInMeters.Value);
@ -107,12 +118,13 @@ namespace Project.Zap.Controllers
sql = sql + " AND ARRAY_CONTAINS(@locationIds, c.LocationId)";
parameters.Add("@locationIds", locationIds);
}
IEnumerable <Shift> shifts = await this.shiftRepository.Get(sql, parameters);
IEnumerable<Shift> shifts = await this.shiftRepository.Get(sql, parameters);
search.LocationNames = this.GetLocationNames(locations);
search.Result = shifts.Map(locations).Where(x => search.Available ? x.Available > 0 : true);
ViewData["AzureMapsKey"] = this.configuration["AzureMapsSubscriptionKey"];
return View("Index", search);
}

Просмотреть файл

@ -31,7 +31,7 @@
}
<div class="container">
<partial name="Search" model="new Project.Zap.Models.SearchShiftViewModel { LocationNames = Model.LocationNames }" />
<partial name="Search" model="Model ?? new Project.Zap.Models.SearchShiftViewModel { LocationNames = Model.LocationNames }" />
</div>
<div id="results">
@ -127,7 +127,7 @@
map = L.map('myMap', { layers: [roads] });
@if((Model.Locations == null || !Model.Locations.Any()) && string.IsNullOrEmpty(Model.ZipOrPostcode))
@if(Model.UseMyLocation)
{
<text>
map.locate({ setView: false, enableHighAccuracy: true });
@ -139,8 +139,7 @@
"Azure Roads": roads
};
L.control.layers(baseMaps, null, { collapsed: false }).addTo(map);
var count = 0.00004;
L.control.layers(baseMaps, null, { collapsed: false }).addTo(map);
@foreach(var shift in Model.Result)
{
@ -166,13 +165,11 @@
<a class="btn btn-primary text-white" asp-controller="Shifts" asp-action="Book" asp-route-LocationName="@shift.LocationName" asp-route-Start="@shift.Start.ToString("yyyy-MM-ddTHH:mm")" asp-route-End="@shift.End.ToString("yyyy-MM-ddTHH:mm")" asp-route-WorkType="@shift.WorkType">@Localizer["LinkBook"]</a>
}`);
markers.push(L.marker([@shift.Point.Coordinates[0] - count, @shift.Point.Coordinates[1] - count])
markers.push(L.marker([@shift.Point.Coordinates[0], @shift.Point.Coordinates[1]])
.addTo(map)
.bindPopup(popUpContent)
.openPopup());
count = count - 0.00004;
</text>
}