private async void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { string address = SuggestBox.Text; if (!CrossGeolocator.Current.IsListening) { IGeolocator locator = await LocationLogic.GetGeolocator(PermissionsLogic.IsLocationAccessPermitted); } var location = await LocationLogic.GetLocation(); string PositionNow = LocationLogic.LocationStringBuilder(location); var places = await GoogleAPIRequest.GetPlaces(PositionNow, address); // Only get results when it was a user typing, // otherwise assume the value got filled in by TextMemberPath // or the handler for SuggestionChosen. if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) { //Set the ItemsSource to be your filtered dataset //sender.ItemsSource = dataset; var PlacesList = places.predictions.ToList(); List <string> AddresList = new List <string>(); PlacesList.ForEach(l => AddresList.Add(l.description)); SuggestBox.ItemsSource = AddresList; } }
public JsonResult AutoSuggest(string accessToken, string query, string lat, string lng, string types, int radius = 15000) { if (HttpContext.Request.RequestType == "POST") { var newAccessToken = _accessTokenService.GenerateAccessToken(accessToken); if (newAccessToken == null) { return(Json(new { status = "INVALID ACCESSTOKEN" })); } var userId = _accessTokenService.GetUserId(newAccessToken); if (userId == null) { return(Json(new { status = "ERR", accessToken = newAccessToken })); } double latDouble = 0; double lonDouble = 0; lat.Replace('.', ','); lng.Replace('.', ','); if (double.TryParse(lat, out latDouble) && double.TryParse(lng, out lonDouble)) { var places = GoogleAPIRequest.AutoCompleteList(query, new Models.Models.Location() { Latitude = latDouble, Longitude = lonDouble }, radius, types); return(Json(new { status = "OK", places = places, accessToken = newAccessToken })); } else { return(Json(new { status = "LatLon Parse Error", accessToken = newAccessToken })); } } return(Json(new { })); }
/// <summary> /// Takes the answer of the driver and returns true if it is saved successfully otherwise false /// </summary> /// <param name="answer"></param> /// <param name="requestId"></param> /// <param name="driver"></param> /// <returns></returns> public bool UpdateAnswer(bool answer, int requestId, Driver driver) { var driverCarInstance = data.Drivers.Where(x => x.Id == driver.Id).Include(x => x.Car).Include(x => x.Company).First(); if (answer == false) { var requestSelected = data.RequestsInfo.First(x => x.Id == requestId); requestSelected.RequestStatus = RequestStatusEnum.NoCarChosen; var request = data.ActiveRequests.FirstOrDefault(x => x.Request.Id == requestId); request.AppropriateCar = null; data.CarsDismissedRequests.Add(new CarDismissedRequest() { Car = driverCarInstance.Car, Request = requestSelected }); data.SaveChanges(); return(true); } else { var request = data.ActiveRequests.Where(x => x.Request.Id == requestId).Include(x => x.Request).Include(x => x.AppropriateCar).FirstOrDefault(); if (request != null && request.AppropriateCar == null) { return(false); } if (request.AppropriateCar.Id == driver.Car.Id) { var distanceObject = GoogleAPIRequest.GetDistance(request.Request.StartingLocation, driver.Car.Location); data.TakenRequests.Add(new TakenRequest() { Request = request.Request, DateTimeTaken = DateTime.Now, Car = driver.Car, Company = driver.Company, DriverLocation = new Models.Models.Location() { Latitude = driver.Car.Location.Latitude, Longitude = driver.Car.Location.Longitude }, DriverUserId = driver.UserId, DuractionText = distanceObject.rows[0].elements[0].duration.text, DuractionValue = distanceObject.rows[0].elements[0].duration.value, DistanceText = distanceObject.rows[0].elements[0].distance.text, DistanceValue = distanceObject.rows[0].elements[0].distance.value, OnAddressDateTime = DateTime.Now }); request.Request.RequestStatus = RequestStatusEnum.Taken; request.AppropriateCar.CarStatus = CarStatus.Busy; data.ActiveRequests.Remove(request); data.SaveChanges(); } } return(true); }
private async void StartButton_Clicked(object sender, EventArgs e) { //Quando o usuário dá a partida, o sistema verifica o número de serviço, que dev conter 7 algarismos //Essa lógica pode ser realizada em uma classe separada assim como o login if (string.IsNullOrEmpty(ServiceEntry.Text)) { await DisplayAlert("Falha!", "Entre com o número do serviço", "OK"); } else if (ServiceEntry.Text.Length != 7) { await DisplayAlert("Falha!", "Número do serviço deve conter 7 algarismos", "OK"); } else { //Então o sistema busca no banco de dados se o serviço já foi adcionado //isRunning = true; var ServiceMatch = await App.client.GetTable <Servico>().Where(u => u.NUMERO == int.Parse(ServiceEntry.Text)).ToListAsync(); if (ServiceMatch.Count > 0) { await DisplayAlert("Falha!", "Serviço já foi adcionado", "OK").ConfigureAwait(false); } else { //O número de serviço também foi setado erroneamente como int e será nvarchar no banco definitivo ServiceLogic.ServiceNumber = int.Parse(ServiceEntry.Text); ServiceLogic.StartPosition = await LocationLogic.GetLocation(); ServiceLogic.StopAddress = SuggestBox.Text; ServiceLogic.StopPosition = await LocationLogic.GetLocationFromAddress(ServiceLogic.StopAddress); ServiceLogic.StartDatetime = DateTime.Now; string StartPositionString = LocationLogic.LocationStringBuilder(ServiceLogic.StartPosition); Routes.CurrentRoute = routeInformation = await GoogleAPIRequest.GetRouteInfo(StartPositionString, ServiceLogic.StopAddress); ServiceLogic.StartAddress = routeInformation.origin_addresses.FirstOrDefault(); await Navigation.PushAsync(new EmployeeMap()).ConfigureAwait(false); } } }
/// <summary> /// Returns suggested places or addresses /// </summary> /// <param name="text"></param> /// <returns></returns> public JsonResult AutoComplete(string text) { var userId = User.Identity.GetUserId(); var dispatcher = _dispatcherService.GetAll().First(x => x.UserId == userId); var company = _companyService.GetAll().First(x => x.Id == dispatcher.Company.Id); var cityLocation = company.CityLocation; var suggestions = GoogleAPIRequest.AutoCompleteList(text, cityLocation, 10000, ""); object[] result = new object[suggestions.Count]; for (int i = 0; i < result.Length; i++) { result[i] = new { main_text = suggestions[i].MainText, secondary_text = suggestions[i].Address, placeId = suggestions[i].PlaceId }; } return(Json(new { status = "OK", suggestions = result })); }
/// <summary> /// Adds a new request /// </summary> /// <param name="startingAddress"></param> /// <param name="finishAddress"></param> /// <returns></returns> public JsonResult CreateRequest(string startingAddress, string finishAddress) { var userId = User.Identity.GetUserId(); var dispatcher = _dispatcherService.GetAll().First(x => x.UserId == userId); var company = _companyService.GetAll().First(x => x.Id == dispatcher.Company.Id); var startingLocation = GoogleAPIRequest.GetLocation(startingAddress + " " + company.City); var finishLocation = GoogleAPIRequest.GetLocation(finishAddress + " " + company.City); if (startingLocation == null) { return(Json(new { status = "INVALID STARTING LOCATION" })); } if (finishLocation == null) { finishLocation = new Models.Models.Location() { Latitude = 0, Longitude = 0 }; } var request = new RequestInfo() { CreatedBy = CreatedBy.Dispatcher, CreatorUserId = userId, RequestStatus = RequestStatusEnum.NoCarChosen, StartingAddress = startingAddress, StartingLocation = startingLocation, FinishAddress = finishAddress, FinishLocation = finishLocation, CreatedDateTime = DateTime.Now, LastModificationDateTime = DateTime.Now, Company = company }; _requestService.AddRequestInfo(request); var dashboardCell = new DispatcherDashboard() { DispatcherUserId = userId, LastSeen = DateTime.Now, LastSeenStatus = RequestStatusEnum.NoCarChosen, Request = request }; _dashboardService.AddDispatcherDashboard(dashboardCell); var activeRequest = new ActiveRequest() { AppropriateCar = null, DateTimeChosenCar = DateTime.Now, Request = request }; _requestService.AddActiveRequest(activeRequest); var car = _carService.AppropriateCar(startingLocation, dispatcher.Company); if (car != null) { request.RequestStatus = RequestStatusEnum.NotTaken; activeRequest.AppropriateCar = car; _requestService.ModifyActiveRequest(activeRequest); _requestService.ModifyRequestInfo(request); } return(Json(new { status = "OK" })); }
/// <summary> /// Returns additional information about the request /// </summary> /// <param name="id"></param> /// <returns></returns> public JsonResult RequestInfo(string id) { var userId = User.Identity.GetUserId(); var dispatcher = _dispatcherService.GetAll().First(x => x.UserId == userId); var dispatcherCompanyId = dispatcher.Company.Id; var requestId = 0; int.TryParse(id, out requestId); var foundRequest = _requestService.GetRequestInfos().Where(x => x.Id == requestId && x.Company.Id == dispatcherCompanyId).FirstOrDefault(); var creator = UserManager.FindById(foundRequest.CreatorUserId); var requestInfo = new Dictionary <string, object>(); if (foundRequest != null) { requestInfo.Add("status", "OK"); requestInfo.Add("id", id); requestInfo.Add("startingAddress", foundRequest.StartingAddress); requestInfo.Add("finishAddress", foundRequest.FinishAddress); requestInfo.Add("requestStatus", foundRequest.RequestStatus); requestInfo.Add("createdBy", creator.FirstName + " " + creator.LastName); requestInfo.Add("createdDateTime", foundRequest.CreatedDateTime.AddHours(10).ToString("dd/MM/yyyy \"г. \" HH:mm:ss")); if (foundRequest.RequestStatus == RequestStatusEnum.Finishted) { var requestHistory = _requestService.GetRequestHistories().Where(x => x.Request.Id == foundRequest.Id).FirstOrDefault(); if (requestHistory != null) { string carInternalNum = null; var car = _carService.GetCars().Where(x => x.Id == requestHistory.Car.Id).FirstOrDefault(); if (car != null) { carInternalNum = car.InternalNumber; } var takenDriver = UserManager.FindById(requestHistory.DriverUserId); requestInfo.Add("takenBy", takenDriver.FirstName + " " + takenDriver.LastName); requestInfo.Add("takenByCar", carInternalNum); } } else if (foundRequest.RequestStatus == RequestStatusEnum.ClientConnected && foundRequest.RequestStatus == RequestStatusEnum.OnAddress && foundRequest.RequestStatus == RequestStatusEnum.ClientConnected) { var takenRequest = _requestService.GetTakenRequests().Where(x => x.Request.Id == foundRequest.Id).FirstOrDefault(); if (takenRequest != null) { string carInternalNum = null; var car = _carService.GetCars().Where(x => x.Id == takenRequest.Car.Id).FirstOrDefault(); if (car != null) { carInternalNum = car.InternalNumber; } var takenDriver = UserManager.FindById(takenRequest.DriverUserId); requestInfo.Add("takenBy", takenDriver.FirstName + " " + takenDriver.LastName); requestInfo.Add("takenByCar", carInternalNum); } } else if (foundRequest.RequestStatus == RequestStatusEnum.Taken) { var takenRequest = _requestService.GetTakenRequests().Where(x => x.Request.Id == foundRequest.Id).FirstOrDefault(); if (takenRequest != null) { string carInternalNum = null; var car = _carService.GetCars().Where(x => x.Id == takenRequest.Car.Id).FirstOrDefault(); if (car != null) { carInternalNum = car.InternalNumber; } var distance = GoogleAPIRequest.GetDistance(car.Location, foundRequest.StartingLocation); var takenDriver = UserManager.FindById(takenRequest.DriverUserId); requestInfo.Add("takenBy", takenDriver.FirstName + " " + takenDriver.LastName); requestInfo.Add("takenByCar", carInternalNum); requestInfo.Add("duration", distance.rows[0].elements[0].duration.text); requestInfo.Add("distance", distance.rows[0].elements[0].distance.text); } } } else { requestInfo.Add("status", "ERR"); } string json = JsonConvert.SerializeObject(requestInfo, Formatting.Indented); return(Json(json)); }