示例#1
0
        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);
        }
示例#4
0
        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));
        }