示例#1
0
 public virtual void RecalculatePlanedDistance(RouteGeometryCalculator distanceCalculator)
 {
     if (WayBillDocumentItems.Count == 0)
     {
         PlanedDistance = 0;
     }
     else
     {
         PlanedDistance = distanceCalculator.GetRouteDistance(HashPointsOfRoute.ToArray()) / 1000m;
     }
 }
示例#2
0
        protected void OnButtonRecalculateMileageClicked(object sender, EventArgs e)
        {
            logger.Info("Рассчет длинны маршрута...");
            RouteGeometryCalculator routeCalculator = new RouteGeometryCalculator(DistanceProvider.Osrm);

            var points = new List <long> {
                CachedDistance.BaseHash
            };

            #region если нет координат хотя бы у одной точки доставки
            bool   hasError = false;
            string ErMsg    = "Пересчёт километража невозможен, т.к. не найдены координаты для следующих точек доставки:\n";
            foreach (RouteListItem address in Entity.Addresses.Where(p => p.Order.DeliveryPoint.Latitude == null ||
                                                                     p.Order.DeliveryPoint.Longitude == null))
            {
                hasError = true;
                ErMsg   += String.Format("\tЗаказ №{0} - {1}\n", address.Order.Id, address.Order.DeliveryPoint.ShortAddress);
            }
            ErMsg += "Перейдите в указанные точки доставки и добавьте (проверьте) их координаты.";
            if (hasError)
            {
                MessageDialogHelper.RunWarningDialog(ErMsg);
                return;
            }
            #endregion
            foreach (RouteListItem address in Entity.Addresses.OrderBy(x => x.StatusLastUpdate))
            {
                if (address.Status == RouteListItemStatus.Completed)
                {
                    points.Add(address.Order.DeliveryPoint.СoordinatesHash);
                }
            }
            points.Add(CachedDistance.BaseHash);

            var distance = (decimal)routeCalculator.GetRouteDistance(points.ToArray());
            Entity.RecalculatedDistance = distance / 1000;
            logger.Info("Ок.");
        }