public JsonResult SendRequest(string accessToken, string startingAddressMainText, string startingAddressSecondaryText, string startingAddressLocationLat, string startingAddressLocationLng, string finishAddressMainText, string finishAddressSecondaryText, string finishAddressLocationLat, string finishAddressLocationLng)
        {
            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 = "ERR1", accessToken = newAccessToken }));
                }
                var client = _clientService.GetAll().Where(x => x.UserId == userId).FirstOrDefault();
                if (client == null)
                {
                    return(Json(new { status = "ERR2", accessToken = newAccessToken }));
                }
                var anotherRequest = _requestService.GetClientRequest().Where(c => c.Client.Id == client.Id).FirstOrDefault();
                if (anotherRequest != null)
                {
                    return(Json(new { status = "ERR3", accessToken = accessToken }));
                }
                var requestInfo = new RequestInfo()
                {
                    CreatedBy                = CreatedBy.Client,
                    CreatedDateTime          = DateTime.Now,
                    CreatorUserId            = userId,
                    LastModificationDateTime = DateTime.Now,
                    RequestStatus            = RequestStatusEnum.NoCarChosen,
                    StartingAddress          = startingAddressMainText + " " + startingAddressSecondaryText,
                    FinishAddress            = finishAddressMainText + " " + finishAddressSecondaryText,
                    StartingLocation         = new Models.Models.Location()
                    {
                        Latitude  = double.Parse(startingAddressLocationLat),
                        Longitude = double.Parse(startingAddressLocationLng)
                    },
                    FinishLocation = new Models.Models.Location()
                    {
                        Latitude  = double.Parse(finishAddressLocationLat),
                        Longitude = double.Parse(finishAddressLocationLng)
                    }
                };
                _requestService.AddRequestInfo(requestInfo);
                var activeRequest = new ActiveRequest();
                activeRequest.Request           = requestInfo;
                activeRequest.DateTimeChosenCar = DateTime.Now;
                var appropriateCar = _carService.AppropriateCar(new Models.Models.Location()
                {
                    Latitude = double.Parse(startingAddressLocationLat), Longitude = double.Parse(startingAddressLocationLng)
                });
                if (appropriateCar != null)
                {
                    activeRequest.AppropriateCar = appropriateCar;
                    requestInfo.RequestStatus    = RequestStatusEnum.NotTaken;
                    _requestService.ModifyRequestInfo(requestInfo);
                }
                _requestService.AddActiveRequest(activeRequest);

                var clientRequest = new ClientRequest()
                {
                    Client  = client,
                    Request = requestInfo
                };
                _requestService.AddClientRequest(clientRequest);

                return(Json(new { accessToken = newAccessToken, status = "OK" }));
            }
            return(Json(new { }));
        }
        /// <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" }));
        }