public dynamic GetListTrackingData(int courierId, DateTime filterDateTime, int?requestId) { var fromdt = (new DateTime(filterDateTime.Year, filterDateTime.Month, filterDateTime.Day, 0, 0, 0)).ToUtcTimeFromClientTime(); var todt = (new DateTime(filterDateTime.Year, filterDateTime.Month, filterDateTime.Day, 23, 59, 59)).ToUtcTimeFromClientTime(); if (filterDateTime > DateTime.MinValue) { fromdt = DateTimeHelper.GetStartDateTime(filterDateTime); todt = DateTimeHelper.GetEndDateTime(filterDateTime); } var query = _trackingRepository.Get(p => p.Request != null && p.TimeTracking != null && p.TimeTracking.Value >= fromdt && p.TimeTracking.Value <= todt) .OrderBy(p => p.TimeTracking) .Select(p => new TrackingVo() { RequestId = p.Request.Id, IsActiveRequest = (p.Courier.CurrentReq == p.Request.Id && p.Request.Status == (int)StatusRequest.Started), RequestNo = p.Request.RequestNo, Address = p.Address, Direction = p.Direction.GetValueOrDefault(0), Distance = p.Distance, Velocity = p.Velocity ?? 0, TimeTracking = p.TimeTracking.GetValueOrDefault(DateTime.UtcNow).ToClientTime("hh:mm tt"), IsFinish = (p.Request.Status == (int)StatusRequest.Completed || p.Request.Status == (int)StatusRequest.Cancelled), CourierId = p.Request.CourierId, //Implement show courier name FirstName = p.Request.CourierId != null ? p.Request.Courier.User.FirstName: "", MiddleName = p.Request.CourierId != null ? p.Request.Courier.User.MiddleName : "", LastName = p.Request.CourierId != null ? p.Request.Courier.User.LastName : "", }); if (courierId != 0) { query = query.Where(p => p.CourierId == courierId); } if (requestId != null) { query = query.Where(p => p.RequestId == requestId); } var dataDirection = new List <GoogleMapApiHelper.LocationVo>(); var dataDirectionPoints = new List <GoogleMapApiHelper.LocationVo>(); if (requestId != null) { var req = _requestRepository.GetById(requestId.GetValueOrDefault()); var dataFromGoogle = req != null?_googleService.GetDirection(new GoogleMapPoint(req.LocationFromObj.Lat.GetValueOrDefault(), req.LocationFromObj.Lng.GetValueOrDefault()), new GoogleMapPoint(req.LocationToObj.Lat.GetValueOrDefault(), req.LocationToObj.Lng.GetValueOrDefault())) : new GoogleMapResultObject() { Status = GoogleMapStatus.ZERO_RESULTS.ToString() }; if (dataFromGoogle.Status == GoogleMapStatus.OK.ToString()) { dataDirection = dataFromGoogle.routes[0].overview_polyline.Points.DecodePolylinePoints(); } else { dataDirectionPoints.Add( new GoogleMapApiHelper.LocationVo() { Latitude = req.LocationFromObj.Lat.GetValueOrDefault(), Longitude = req.LocationFromObj.Lng.GetValueOrDefault() }); dataDirectionPoints.Add( new GoogleMapApiHelper.LocationVo() { Latitude = req.LocationToObj.Lat.GetValueOrDefault(), Longitude = req.LocationToObj.Lng.GetValueOrDefault() }); } } var data = query.ToList(); return(new { Data = data.ToList(), Direction = dataDirection, TotalRowCount = data.Count, DataDirectionPoints = dataDirectionPoints }); }