protected string SerializeToHereFormat(RouteDataDTO route) { var gpx = new gpxType(); gpx.trk = new trkType[1]; var trk = gpx.trk[0] = new trkType(); trk.trkseg = new trksegType[1]; var seg = trk.trkseg[0] = new trksegType(); seg.trkpt = route.Points.Select(x => new wptType() { lat = x.latitude, lon = x.longitude }).ToArray(); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); var serializer = new XmlSerializer(gpx.GetType()); using (StringWriter textWriter = new StringWriter()) using (XmlWriter writer = XmlWriter.Create(textWriter, new XmlWriterSettings { OmitXmlDeclaration = true })) { serializer.Serialize(writer, gpx); var str = textWriter.ToString(); var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(str); return(System.Convert.ToBase64String(plainTextBytes)); } }
public static RouteDTO MergeTwoRoutes(RouteDTO route1, RouteDTO route2) { if (route1 == null) { return(route2); } var data = new RouteDataDTO { Type = route1.Data.Type }; var info = new RouteInfoDTO { Length = route1.Info.Length + route2.Info.Length }; var result = new RouteDTO { Data = data, Info = info }; var coordinates = new List <double[]>(); if (route1.Data.Coordinates.Last().SequenceEqual(route2.Data.Coordinates.First())) { coordinates.AddRange(route1.Data.Coordinates); coordinates.AddRange(route2.Data.Coordinates); } else if (route1.Data.Coordinates.Last().SequenceEqual(route2.Data.Coordinates.Last())) { coordinates.AddRange(route2.Data.Coordinates); coordinates.Reverse(); coordinates.InsertRange(0, route1.Data.Coordinates); } else if (route1.Data.Coordinates.First().SequenceEqual(route2.Data.Coordinates.First())) { coordinates.AddRange(route1.Data.Coordinates); coordinates.Reverse(); coordinates.AddRange(route2.Data.Coordinates); } else if (route1.Data.Coordinates.First().SequenceEqual(route2.Data.Coordinates.Last())) { coordinates.AddRange(route2.Data.Coordinates); coordinates.AddRange(route1.Data.Coordinates); } else { throw new Exception("WIP"); } result.Data.Coordinates = coordinates.ToArray(); result.Info.Length = 0; //TODO fix length return(result); }
/// <summary> /// Get route details mapped to delivery point /// </summary> /// <param name="deliveryPointId">Delivery Point Id</param> /// <returns>Route Details</returns> public async Task <RouteDataDTO> GetRouteByDeliverypoint(Guid deliveryPointId) { using (loggingHelper.RMTraceManager.StartTrace("DataService.GetRouteByDeliverypoint")) { string methodName = typeof(DeliveryRouteDataService) + "." + nameof(GetRouteByDeliverypoint); loggingHelper.LogMethodEntry(methodName, LoggerTraceConstants.DeliveryRouteAPIPriority, LoggerTraceConstants.DeliveryRouteDataServiceMethodEntryEventId); RouteDataDTO routeData = new RouteDataDTO(); var block = DataContext.BlockSequences.AsNoTracking().Where(n => n.LocationID == deliveryPointId).SingleOrDefault(); if (block != null) { var routeDetails = (from route in DataContext.Routes.AsNoTracking() join routeActivity in DataContext.RouteActivities.AsNoTracking() on route.ID equals routeActivity.RouteID where route.UnSequencedBlockID == block.BlockID || routeActivity.BlockID == block.BlockID select route).FirstOrDefault(); var deliveryPointDetails = DataContext.DeliveryPoints.Include(n => n.PostalAddress).AsNoTracking().Where(m => m.ID == deliveryPointId).SingleOrDefault(); if (routeDetails != null && deliveryPointDetails != null && deliveryPointDetails.PostalAddress != null) { var postCode = await DataContext.Postcodes.AsNoTracking().Where(n => (n.PrimaryRouteGUID == routeDetails.ID || n.SecondaryRouteGUID == routeDetails.ID) && n.PostcodeUnit == deliveryPointDetails.PostalAddress.Postcode).SingleOrDefaultAsync(); if (postCode != null) { if (routeDetails.ID == postCode.PrimaryRouteGUID) { routeData.ID = routeDetails.ID; routeData.RouteName = DeliveryRouteConstants.PrimaryRoute + routeDetails.RouteName; } else if (routeDetails.ID == postCode.SecondaryRouteGUID) { routeData.ID = routeDetails.ID; routeData.RouteName = DeliveryRouteConstants.SecondaryRoute + routeDetails.RouteName; } } else { routeData.ID = routeDetails.ID; routeData.RouteName = routeDetails.RouteName; } } } loggingHelper.LogMethodExit(methodName, LoggerTraceConstants.DeliveryRouteAPIPriority, LoggerTraceConstants.DeliveryRouteDataServiceMethodExitEventId); return(routeData); } }
/// <summary> /// Gets the delivery route detailsfor PDF generation. /// </summary> /// <param name="routeId">Selected route Id</param> /// <param name="referenceDataCategoryDtoList">The reference data category dto list.</param> /// <returns>Route details </returns> public async Task <RouteDataDTO> GetRouteSummary(Guid routeId, List <ReferenceDataCategoryDTO> referenceDataCategoryDtoList) { using (loggingHelper.RMTraceManager.StartTrace("DataService.GetDeliveryRouteDetailsforPdfGeneration")) { string methodName = typeof(DeliveryRouteDataService) + "." + nameof(GetRouteSummary); loggingHelper.LogMethodEntry(methodName, LoggerTraceConstants.DeliveryRouteAPIPriority, LoggerTraceConstants.DeliveryRouteDataServiceMethodEntryEventId); // No of DPs Guid operationalObjectTypeForDp = referenceDataCategoryDtoList .Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.OperationalObjectType) .SelectMany(x => x.ReferenceDatas) .Where(x => x.ReferenceDataValue == ReferenceDataValues.OperationalObjectTypeDP).Select(x => x.ID) .SingleOrDefault(); // No. Organisation DP Guid operationalObjectTypeForDpOrganisation = referenceDataCategoryDtoList .Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.DeliveryPointUseIndicator) .SelectMany(x => x.ReferenceDatas) .Where(x => x.ReferenceDataValue == ReferenceDataValues.Organisation).Select(x => x.ID) .SingleOrDefault(); // No. Residential DP Guid operationalObjectTypeForDpResidential = referenceDataCategoryDtoList .Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.DeliveryPointUseIndicator) .SelectMany(x => x.ReferenceDatas) .Where(x => x.ReferenceDataValue == ReferenceDataValues.Residential).Select(x => x.ID) .SingleOrDefault(); // Delivery Route Method Type var referenceDataDeliveryMethodTypes = referenceDataCategoryDtoList .Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.DeliveryRouteMethodType) .SelectMany(x => x.ReferenceDatas).ToList(); // Route Activity Type var referenceDataRouteActivityTypes = referenceDataCategoryDtoList .Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.RouteActivityType) .SelectMany(x => x.ReferenceDatas).ToList(); Guid sharedDeliveryRouteMethodTypeGuid = referenceDataDeliveryMethodTypes .Where(x => x.ReferenceDataValue == ReferenceDataValues.DeliveryRouteMethodTypeRmVanShared) .Select(x => x.ID).SingleOrDefault(); Guid travelOutRouteActivityTypeGuid = referenceDataRouteActivityTypes .Where(x => x.ReferenceDataValue == ReferenceDataValues.TravelOut) .Select(x => x.ID).SingleOrDefault(); Guid travelInRouteActivityTypeGuid = referenceDataRouteActivityTypes .Where(x => x.ReferenceDataValue == ReferenceDataValues.TravelIn) .Select(x => x.ID).SingleOrDefault(); List <Guid> refDataActivityTypes = new List <Guid>() { travelOutRouteActivityTypeGuid, travelInRouteActivityTypeGuid }; var deliveryRoutesDto = await(from dr in DataContext.Routes.AsNoTracking() join sr in DataContext.ScenarioRoutes.AsNoTracking() on dr.ID equals sr.RouteID join sc in DataContext.Scenarios.AsNoTracking() on sr.ScenarioID equals sc.ID where dr.ID == routeId select new RouteDataDTO { ID = dr.ID, RouteName = dr.RouteName, RouteNumber = dr.RouteNumber, ScenarioName = sc.ScenarioName, MethodReferenceGuid = dr.RouteMethodTypeGUID, Totaltime = Math.Abs(dr.SpanTimeMinute.Value).ToString() }).SingleOrDefaultAsync(); var routeActivityTypes = (from dr in DataContext.RouteActivities.AsNoTracking() where dr.RouteID == routeId && refDataActivityTypes.Contains(dr.ActivityTypeGUID.Value) select new { dr.ActivityTypeGUID, dr.ResourceGUID }).Distinct().ToList(); if (deliveryRoutesDto != null && routeActivityTypes != null && routeActivityTypes.Count > 0) { deliveryRoutesDto.Totaltime = ConvertToMinutes(Convert.ToDouble(deliveryRoutesDto.Totaltime)); var methodType = referenceDataDeliveryMethodTypes.SingleOrDefault(x => x.ID == deliveryRoutesDto.MethodReferenceGuid); if (methodType != null) { deliveryRoutesDto.Method = methodType.ReferenceDataValue; } foreach (var refdataActivity in routeActivityTypes) { if (refdataActivity.ActivityTypeGUID == travelInRouteActivityTypeGuid) { var travelInType = referenceDataDeliveryMethodTypes.SingleOrDefault(x => x.ID == refdataActivity.ResourceGUID); if (travelInType != null) { deliveryRoutesDto.AccelarationIn = travelInType.ReferenceDataValue; } } else { var travelOutType = referenceDataDeliveryMethodTypes.SingleOrDefault(x => x.ID == refdataActivity.ResourceGUID); if (travelOutType != null) { deliveryRoutesDto.AccelarationOut = travelOutType.ReferenceDataValue; } } } } else { deliveryRoutesDto = new RouteDataDTO(); } deliveryRoutesDto.Aliases = 0; /*Currently aliases are not in scope hence setting the value to '0'*/ deliveryRoutesDto.Blocks = await GetRouteBlocksCount(routeId); deliveryRoutesDto.DPs = await GetDeliveryPointsCount(routeId); deliveryRoutesDto.BusinessDPs = await GetDeliveryPointUseIndicatorCount(routeId, operationalObjectTypeForDpOrganisation); deliveryRoutesDto.ResidentialDPs = await GetDeliveryPointUseIndicatorCount(routeId, operationalObjectTypeForDpResidential); deliveryRoutesDto.PairedRoute = await GetPairedRoutes(routeId, sharedDeliveryRouteMethodTypeGuid); loggingHelper.LogMethodExit(methodName, LoggerTraceConstants.DeliveryRouteAPIPriority, LoggerTraceConstants.DeliveryRouteDataServiceMethodExitEventId); return(deliveryRoutesDto); } }
protected override void OnSetup() { mockLoggingHelper = CreateMock <ILoggingHelper>(); mockDeliveryRouteIntegrationService = CreateMock <IDeliveryRouteIntegrationService>(); mockBlockSequenceDataService = CreateMock <IBlockSequenceDataService>(); mockPostCodedataService = CreateMock <IPostcodeDataService>(); deliveryUnitID = System.Guid.Parse("B51AA229-C984-4CA6-9C12-510187B81050"); operationalStateID = System.Guid.Parse("9C1E56D7-5397-4984-9CF0-CD9EE7093C88"); mockDeliveryRouteDataService = CreateMock <IDeliveryRouteDataService>(); var rmTraceManagerMock = new Mock <IRMTraceManager>(); rmTraceManagerMock.Setup(x => x.StartTrace(It.IsAny <string>(), It.IsAny <Guid>())); mockLoggingHelper.Setup(x => x.RMTraceManager).Returns(rmTraceManagerMock.Object); referenceDataCategoryDTOList = new List <Common.ReferenceDataCategoryDTO>() { new Common.ReferenceDataCategoryDTO() { CategoryName = ReferenceDataCategoryNames.OperationalObjectType, ReferenceDatas = new List <Common.ReferenceDataDTO>() { new Common.ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.OperationalObjectTypeDP, ID = Guid.Parse("4DBA7B39-D23E-493A-9B8F-B94D181A082F") }, new Common.ReferenceDataDTO() { ReferenceDataName = null, ReferenceDataValue = ReferenceDataValues.DeliveryUnit, ID = unitLocationTypeId } } } }; deliveryRouteDto = new RouteDTO() { }; actualDeliveryRouteResult = new List <RouteDataDTO>() { new RouteDataDTO() { ID = Guid.NewGuid(), RouteName = "RouteOne", RouteNumber = "R004341" }, new RouteDataDTO() { ID = Guid.NewGuid(), RouteName = "RouteTwo", RouteNumber = "R003414" }, }; actualRouteDataDTO = new RouteDataDTO() { RouteName = "Route 001", RouteNumber = "R003456" }; actualRouteLogSequencedPointsDataDTO = new List <RouteLogSequencedPointsDataDTO>() { new RouteLogSequencedPointsDataDTO() { StreetName = "Street001", BuildingNumber = 001 }, new RouteLogSequencedPointsDataDTO() { StreetName = "Street001", BuildingNumber = 002 }, }; actualRoueCount = 5; actualReferenceDataCategoryResult = new List <Common.ReferenceDataDTO>() { new Common.ReferenceDataDTO() { DataDescription = "Live", DisplayText = "Live", ReferenceDataName = "Live" } }; mockDeliveryRouteDataService.Setup(n => n.GetScenarioRoutes(It.IsAny <Guid>())).Returns(Task.FromResult(actualDeliveryRouteResult)); mockDeliveryRouteDataService.Setup(n => n.GetRoutesForAdvanceSearch(It.IsAny <string>(), It.IsAny <Guid>())).Returns(Task.FromResult(actualDeliveryRouteResult)); mockDeliveryRouteDataService.Setup(n => n.GetRoutesForBasicSearch(It.IsAny <string>(), It.IsAny <Guid>())).Returns(Task.FromResult(actualDeliveryRouteResult)); mockDeliveryRouteDataService.Setup(n => n.GetRouteCount(It.IsAny <string>(), It.IsAny <Guid>())).Returns(Task.FromResult(actualRoueCount)); mockDeliveryRouteDataService.Setup(n => n.GetRouteSummary(It.IsAny <Guid>(), It.IsAny <List <Common.ReferenceDataCategoryDTO> >())).Returns(Task.FromResult(actualRouteDataDTO)); mockDeliveryRouteDataService.Setup(n => n.GetSequencedRouteDetails(It.IsAny <Guid>())).Returns(Task.FromResult(actualRouteLogSequencedPointsDataDTO)); mockDeliveryRouteDataService.Setup(n => n.GetRoutesByLocation(It.IsAny <Guid>())).Returns(Task.FromResult(actualDeliveryRouteResult)); mockBlockSequenceDataService.Setup(n => n.SaveDeliveryPointRouteMapping(It.IsAny <Guid>(), It.IsAny <Guid>())); mockDeliveryRouteDataService.Setup(n => n.GetRouteByDeliverypoint(It.IsAny <Guid>())).Returns(Task.FromResult(actualRouteDataDTO)); mockDeliveryRouteIntegrationService.Setup(n => n.GetReferenceDataSimpleLists(It.IsAny <List <string> >())).Returns(Task.FromResult(referenceDataCategoryDTOList)); testCandidate = new DeliveryRouteBusinessService(mockDeliveryRouteDataService.Object, mockDeliveryRouteIntegrationService.Object, mockLoggingHelper.Object, mockBlockSequenceDataService.Object, mockPostCodedataService.Object); }