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));
                }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 4
0
        /// <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);
        }