/// <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); }
/// <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)); }