コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }