Example #1
0
        /// <summary>
        /// Creates tracking stops for the specified stops collection.
        /// </summary>
        /// <param name="deviceId">The object ID of the device to create stops for.</param>
        /// <param name="currentVersion">The version of stops to be created.</param>
        /// <param name="plannedDate">The date/time to create stops for.</param>
        /// <param name="routeStops">A collection of route stops sorted by their sequence
        /// number to create tracking stops for.</param>
        /// <returns>A collection of tracking stops corresponding to the specified route
        /// stops.</returns>
        private IEnumerable <DM.Stop> _CreateTrackingStops(
            long deviceId,
            int currentVersion,
            DateTime plannedDate,
            IList <Stop> routeStops)
        {
            Debug.Assert(routeStops != null);

            var propertyFilter = Functional.MakeLambda((string _) => true);
            var stopInfos      = RouteExporter.ExportStops(
                routeStops,
                _project.CapacitiesInfo,
                _project.OrderCustomPropertiesInfo,
                _geocoder.AddressFields,
                _solver,
                propertyFilter).ToList();

            var trackingStops = routeStops
                                .Select((stop, index) =>
            {
                var stopInfo = stopInfos[index];
                var objectId = 0;

                var trackingStop = new DM.Stop
                {
                    ObjectID = objectId,
                    Version  = currentVersion,
                    // Name of the stop can exceed 50 chars, so we need to trim excess chars.
                    Name                  = _TrimStringField(stopInfo.Name),
                    Location              = stopInfo.Location,
                    OrderType             = stopInfo.OrderType,
                    Priority              = stopInfo.Priority,
                    CurbApproach          = stopInfo.CurbApproach,
                    Address               = _ToCollection(stopInfo.Address),
                    Capacities            = _ToCollection(stopInfo.Capacities),
                    CustomOrderProperties = _ToCollection(stopInfo.CustomOrderProperties),
                    Type                  = _GetStopType(stop, routeStops),
                    PlannedDate           = plannedDate,
                    DeviceID              = deviceId,
                    SequenceNumber        = stop.SequenceNumber,
                    ServiceTime           = (int)stop.TimeAtStop,
                    MaxViolationTime      = stopInfo.MaxViolationTime,
                    ArriveTime            = stopInfo.ArriveTime.ToUniversalTime(),
                };

                _FillTimeWindows(stop, plannedDate, trackingStop);

                return(trackingStop);
            });

            return(trackingStops);
        }
        public MainViewModel(INavigationService navigationService, RouteExporter routeExporter, PlaceExporter placeExporter, StepExporter stepExporter)
        {
            _navigationService = navigationService;
            _routeExporter = routeExporter;
            _placeExporter = placeExporter;
            _stepExporter = stepExporter;

            From = DateTime.Today;
            Until = DateTime.Today;

            Places = new ExportItemViewModel();
            Routes = new ExportItemViewModel();
            Steps = new ExportItemViewModel();

            Export = new MultiDependentRelayCommand(DataTransferManager.ShowShareUI,
                IsExportEnabled, 
                new CommandDependency(Routes, nameof(Routes.IsSelected), nameof(Routes.IsEnabled)),
                new CommandDependency(Places, nameof(Places.IsSelected), nameof(Places.IsEnabled)),
                new CommandDependency(Steps, nameof(Steps.IsSelected), nameof(Steps.IsEnabled)));
            ShareRequested = new RelayCommand<DataRequest>(OnShareRequested);
            Settings = new RelayCommand(()=> _navigationService.NavigateTo("Settings"));
        }