/// <summary>
        /// Define whether option is enabled.
        /// </summary>
        protected override void _CheckEnabled(OptimizeAndEditPage schedulePage)
        {
            Debug.Assert(schedulePage != null);

            if (schedulePage.CurrentSchedule == null)
            {
                this.IsEnabled = false;

                return;
            }

            bool result = false;

            // If all routes locked - option should be disabled.
            foreach (Route route in schedulePage.CurrentSchedule.Routes)
            {
                if (!route.IsLocked)
                {
                    result = true;
                    break;
                }
            }

            IsEnabled = result;
        }
        /// <summary>
        /// Method finds all routes what not in current routes and satisfies current day
        /// </summary>
        private void _MakeAvailableRoutes()
        {
            _availableRoutes.Clear();

            Schedule currentSchedule = null;

            OptimizeAndEditPage _schedulePage = (OptimizeAndEditPage)(((MainWindow)App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath));

            currentSchedule = _schedulePage.CurrentSchedule;

            if (currentSchedule != null)
            {
                _currentRoutes = currentSchedule.Routes;

                if (_currentRoutes != null && DefaultRoutes != null)
                {
                    foreach (Route defaultRoute in DefaultRoutes)
                    {
                        if (!_IsRouteFound(_currentRoutes, defaultRoute))
                        {
                            Route newRoute = (Route)defaultRoute.Clone();
                            _availableRoutes.Add(newRoute);
                        }
                    }
                }
            }

            _ComboBox.ItemsSource = null;
            _ComboBox.Items.Clear();
            _ComboBox.ItemsSource = _availableRoutes;
        }
Esempio n. 3
0
        /// <summary>
        /// Creates instance of ScheduleViewsEditingManager, initializes local field _multipleListViewManager
        /// and adds handler to ListViewsCollectionChanged event.
        /// </summary>
        /// <param name="optimizeAndEditPage">OptimizeAndEditPage.</param>
        public ScheduleViewsEditingManager(OptimizeAndEditPage optimizeAndEditPage)
        {
            _ordersView = optimizeAndEditPage.OrdersView;
            _AddEditingEventHandlers(_ordersView);

            _routesView = optimizeAndEditPage.RoutesView;
            _AddEditingEventHandlers(_routesView);
        }
Esempio n. 4
0
        /// <summary>
        /// Starts option process.
        /// </summary>
        /// <param name="args">Operation args. Empty there.</param>
        protected override void _Execute(params object[] args)
        {
            OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)App.Current.MainWindow.GetPage(PagePaths.SchedulePagePath);
            Schedule            schedule     = schedulePage.CurrentSchedule;
            ICollection <Route> targetRoutes = _GetOtherRoutes(schedule, schedulePage.SelectedItems);

            base._Execute(targetRoutes, (string)App.Current.FindResource(BEST_OTHER_ROUTE));
        }
        /// <summary>
        /// Initializes a new instance.
        /// </summary>
        /// <param name="parentPage">Parent page.</param>
        public OrdersViewContextHandler(OptimizeAndEditPage parentPage)
        {
            Debug.Assert(null != parentPage);

            _parentPage      = parentPage;
            _currentSchedule = parentPage.CurrentSchedule;
            _geocodablePage  = parentPage.GeocodablePage;
        }
Esempio n. 6
0
        private void App_ApplicationInitialized(object sender, EventArgs e)
        {
            OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)((MainWindow)App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath);

            if (schedulePage != null)
            {
                schedulePage.CurrentScheduleChanged += new EventHandler(schedulePage_CurrentScheduleChanged);
            }
        }
        /// <summary>
        /// Starts operation process.
        /// </summary>
        /// <param name="args">Command args. Empty there.</param>
        protected override void _Execute(params object[] args)
        {
            // Create command parameters.
            OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)App.Current.MainWindow.GetPage(PagePaths.SchedulePagePath);
            Schedule schedule = schedulePage.CurrentSchedule;
            ICollection<Route> targetRoutes = ViolationsHelper.GetBuildRoutes(schedule);

            // And pass they to call _Execute from base class.
            base._Execute(targetRoutes, (string)App.Current.FindResource(BEST_ROUTE_OPTION_RESOURCE));
        }
        /// <summary>
        /// "Finish" button cliked in page.
        /// </summary>
        /// <param name="sender">Page when button clicked.</param>
        /// <param name="e">Ignored.</param>
        protected override void _OnFinishRequired(object sender, EventArgs e)
        {
            OptimizeAndEditPage optimizePage = _GetOptimizePage();

            if (optimizePage.IsAllowed)
            {
                optimizePage.Loaded += new System.Windows.RoutedEventHandler(_OptimizePageLoaded);
            }

            // Close wizard.
            _Close(optimizePage.IsAllowed ? PagePaths.SchedulePagePath : PagePaths.ProjectsPagePath);
        }
Esempio n. 9
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="parentPage">Optimize and edit page.</param>
        public RoutesListViewContextHandler(OptimizeAndEditPage parentPage)
        {
            Debug.Assert(null != parentPage);
            Debug.Assert(null != parentPage.CurrentSchedule);

            _parentPage      = parentPage;
            _routes          = parentPage.CurrentSchedule.Routes;
            _dataGridControl = parentPage.RoutesView.RoutesGrid;
            _dataGridControl.InitializingInsertionRow += new EventHandler <InitializingInsertionRowEventArgs>(xceedGrid_InitializingInsertionRow);
            _mapControl = parentPage.MapView.mapCtrl;
            _mapControl.EndEditRouteCallback = _EditEnded;
        }
Esempio n. 10
0
        /// <summary>
        /// Method creates collection of already used drivers in other routes
        /// </summary>
        public static Collection <ESRI.ArcLogistics.Data.DataObject> CreateUsedDriversCollection()
        {
            OptimizeAndEditPage schedulePage    = (OptimizeAndEditPage)((App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath));
            Schedule            currentSchedule = schedulePage.CurrentSchedule;
            ICollection <Route> routeCollection = currentSchedule.Routes;

            Collection <ESRI.ArcLogistics.Data.DataObject> usedDrivers = new Collection <ESRI.ArcLogistics.Data.DataObject>();

            foreach (Route route in routeCollection)
            {
                usedDrivers.Add(route.Driver);
            }
            return(usedDrivers);
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="optimizeAndEditPage">Parent page.</param>
        /// <param name="timeView">Time view.</param>
        public SelectionManager(OptimizeAndEditPage optimizeAndEditPage)
        {
            _optimizeAndEditPage = optimizeAndEditPage;
            _timeView            = optimizeAndEditPage.TimeView;
            _mapView             = optimizeAndEditPage.MapView;
            _ordersView          = optimizeAndEditPage.OrdersView;
            _routesView          = optimizeAndEditPage.RoutesView;

            // Set callback for checking selection possibility.
            _mapView.mapCtrl.CanSelectCallback = _CanSelect;

            _CreateCollectionsInMultiCollectionBinding();

            _InitEventHandlers();

            _selectionChanger = new SelectionChanger(_optimizeAndEditPage);
        }
        /// <summary>
        /// Method reloads all schedules in optimize and edit page
        /// </summary>
        private void _UpdateOptimizeAndEditPageSchedules()
        {
            OptimizeAndEditPage page = (OptimizeAndEditPage)((MainWindow)App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath);

            page.SetRoutingStatus(string.Empty, App.Current.CurrentDate);

            Debug.Assert(page != null);
            foreach (UnassignScheduleInfo info in _schedulesToUnassign)
            {
                // Refresh unassigned orders collection if schedule was changed
                if (info.IsProcessed)
                {
                    if (info.Schedule.UnassignedOrders == null)
                    {
                        info.Schedule.UnassignedOrders = App.Current.Project.Orders.SearchUnassignedOrders(info.Schedule, true);
                    }
                }
            }
        }
        /// <summary>
        /// Adds new routes to current schedule routes.
        /// </summary>
        private void _UpdateCurrentScheduleRoutes()
        {
            OptimizeAndEditPage optimizePage = _GetOptimizePage();
            Schedule            schedule     = optimizePage.CurrentSchedule;

            if (null != schedule)
            {
                IDataObjectCollection <Route> wizardRoutes   = DataKeeper.Routes;
                IDataObjectCollection <Route> scheduleRoutes = schedule.Routes;
                for (int index = 0; index < wizardRoutes.Count; ++index)
                {
                    Route route = wizardRoutes[index];
                    if (!_IsObjectPresentInCollection(route, scheduleRoutes))
                    {
                        scheduleRoutes.Add(route);
                    }
                }
            }
        }
Esempio n. 14
0
        protected override void _Execute(params object[] args)
        {
            OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)((MainWindow)App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath);
            IVrpSolver          solver       = App.Current.Solver;

            Debug.Assert(solver != null);

            // get operations for current date
            IList <AsyncOperationInfo> currentOperations = solver.GetAsyncOperations(App.Current.CurrentDate);

            Debug.Assert(currentOperations != null && currentOperations.Count == 1);

            // cancel current operation
            bool isEnabled = !solver.CancelAsyncOperation(currentOperations[0].Id);

            Debug.Assert(!isEnabled);

            // Change status string for current date to "Canceling..." and hide "Cancel" button
            schedulePage.SetCancellingStatus(App.Current.CurrentDate);
        }
Esempio n. 15
0
        /// <summary>
        /// Define whether option is enabled.
        /// </summary>
        protected override void _CheckEnabled(OptimizeAndEditPage schedulePage)
        {
            Debug.Assert(schedulePage != null);

            // Option is enabled if all selected stops belong to the same route.
            if (!_AreAllSelectedOrdersAssignedToOneRoute(schedulePage.SelectedItems))
            {
                IsEnabled = false;
                return;
            }

            var sourceRoute = _GetSourceRoute(schedulePage.SelectedItems);

            var result =
                schedulePage.CurrentSchedule != null &&
                schedulePage.CurrentSchedule.Routes.Any(
                    route => !route.IsLocked && route != sourceRoute);

            IsEnabled = result;
        }
Esempio n. 16
0
        /// <summary>
        /// Method starts moving orders.
        /// </summary>
        /// <param name="ordersToAssign">Collection of orders to move.</param>
        /// <param name="targetRoutes">Target routes.</param>
        /// <param name="sequence">Order sequence. Can be null.</param>
        private void _MoveOrders(Collection <Order> ordersToAssign, ICollection <Route> targetRoutes, int?sequence)
        {
            _RemoveRedundantOrders(ref ordersToAssign, targetRoutes, sequence);

            // if collection of dropping orders is empty - return
            if (ordersToAssign.Count == 0)
            {
                return;
            }

            // get current schedule
            OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)(App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath);
            Schedule            schedule     = schedulePage.CurrentSchedule;

            if (_CheckRoutingParams(schedule, targetRoutes, ordersToAssign))
            {
                SolveOptions options = new SolveOptions();
                options.GenerateDirections            = App.Current.MapDisplay.TrueRoute;
                options.FailOnInvalidOrderGeoLocation = false;

                // Update status.
                _SetOperationStartedStatus((string)App.Current.FindResource("AssignOrders"), (DateTime)schedule.PlannedDate);

                // Start solve.
                OperationsIds.Add(App.Current.Solver.AssignOrdersAsync(schedule, ordersToAssign,
                                                                       targetRoutes, sequence,
                                                                       false, options));

                IEnumerator <Route> rtEnum = targetRoutes.GetEnumerator();
                rtEnum.MoveNext();

                // Set solve started message.
                string infoMessage = RoutingMessagesHelper.GetAssignOperationStartedMessage(
                    ordersToAssign, rtEnum.Current.Name);

                if (!string.IsNullOrEmpty(infoMessage))
                {
                    App.Current.Messenger.AddInfo(infoMessage);
                }
            }
        }
        /// <summary>
        /// Do routes shapes generation.
        /// </summary>
        /// <param name="routesWithoutGeometry">Route to generate geometry.</param>
        private void _DoGenerateRoutesShapes(List <Route> routesWithoutGeometry)
        {
            Debug.Assert(routesWithoutGeometry != null);
            Debug.Assert(routesWithoutGeometry.Count > 0);

            // Set routing status.
            Route               route = routesWithoutGeometry[0];
            DateTime            date  = route.Schedule.PlannedDate.Value;
            OptimizeAndEditPage optimizeAndEditPage = (OptimizeAndEditPage)App.Current.MainWindow.GetPage(PagePaths.SchedulePagePath);

            optimizeAndEditPage.SetRoutingStatus((string)App.Current.FindResource("GenerateRouteShapes"), date);

            // Add routing message to messenger.
            string message = string.Format((string)App.Current.FindResource("GenerateRouteShapesStartText"), date.ToShortDateString());

            App.Current.Messenger.AddInfo(message);

            // Lock all application UI.
            App.Current.UIManager.Lock(true);

            // Subscribe to routing command completed.
            App.Current.Solver.AsyncSolveCompleted += _AsyncSolveCompleted;

            try
            {
                // Save operation ID.
                _operationID = App.Current.Solver.GenerateDirectionsAsync(routesWithoutGeometry);
            }
            catch (Exception e)
            {
                App.Current.Solver.AsyncSolveCompleted -= _AsyncSolveCompleted;

                Logger.Error(e);
                CommonHelpers.AddRoutingErrorMessage(e);

                _ReturnUIToDefaultState();
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Method starts unassigning orders.
        /// </summary>
        /// <param name="ordersToAssign">Collection of orders to unassign.</param>
        private void _UnassignOrders(Collection <Order> ordersToUnassign)
        {
            // Get current schedule.
            OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)(App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath);
            Schedule            schedule     = schedulePage.CurrentSchedule;

            // Remove unassigned orders from collection of orders to unassign.
            _RemoveUnassignedOrders(ref ordersToUnassign, schedule);

            // If all orders in selection are unassigned - just return.
            if (ordersToUnassign.Count == 0)
            {
                return;
            }

            ICollection <Route> routes = ViolationsHelper.GetRouteForUnassignOrders(schedule, ordersToUnassign);

            if (_CheckRoutingParams(schedule, routes, ordersToUnassign))
            {
                SolveOptions options = new SolveOptions();
                options.GenerateDirections            = App.Current.MapDisplay.TrueRoute;
                options.FailOnInvalidOrderGeoLocation = false;

                // Update status.
                _SetOperationStartedStatus((string)App.Current.FindResource(UNASSIGN_ORDERS), (DateTime)schedule.PlannedDate);

                // Start solve.
                OperationsIds.Add(App.Current.Solver.UnassignOrdersAsync(schedule, ordersToUnassign, options));

                // Set solve started message
                string infoMessage = RoutingMessagesHelper.GetUnassignOperationStartedMessage(ordersToUnassign);

                if (!string.IsNullOrEmpty(infoMessage))
                {
                    App.Current.Messenger.AddInfo(infoMessage);
                }
            }
        }
 /// <summary>
 ///Checks whether option enabled.
 /// </summary>
 /// <returns></returns>
 protected override void _CheckEnabled(OptimizeAndEditPage schedulePage)
 {
     IsEnabled = !_targetRoute.IsLocked;
 }
        /// <summary>
        /// Saves new schedule if it's build correctly or show error message.
        /// </summary>
        /// <param name="res">Solve result.</param>
        /// <param name="schedule">Schedule.</param>
        /// <param name="info">Operation info.</param>
        protected void _SaveSchedule(SolveResult res, Schedule schedule, AsyncOperationInfo info)
        {
            // if solver returns "failed"
            if (res.IsFailed)
            {
                // show result message(s)
                string message = string.Format(
                    (string)App.Current.FindResource(ROUTING_OPERATION_FAILED),
                    schedule.PlannedDate.Value.ToShortDateString());
                ICollection <MessageDetail> details = null;
                if (0 < res.Violations.Count)
                {
                    details = ViolationMessageBuilder.GetViolationDetails(schedule, info, res.Violations);
                }
                // Create details from solver error message.
                else
                {
                    details = new Collection <MessageDetail>();
                    var errorMessage = RoutingCmdHelpers.FormatSolverErrorMsg(res);

                    // If we have error message - add message detail.
                    if (errorMessage.Length != 0)
                    {
                        details.Add(new MessageDetail(MessageType.Error, errorMessage));
                    }
                }

                App.Current.Messenger.AddError(message, details);
            }
            else
            {
                // set unassigned orders
                if (null != schedule.UnassignedOrders)
                {
                    schedule.UnassignedOrders.Dispose();
                }

                // save route results
                Project project = App.Current.Project;
                project.Save();

                schedule.UnassignedOrders = project.Orders.SearchUnassignedOrders(schedule, true);

                // In case operation is Build Routes we should create "Original Schedule" if doesn't exist yet.
                // Schedule must be current.
                if (info.OperationType == SolveOperationType.BuildRoutes)
                {
                    if (schedule.Type == ScheduleType.BuildRoutesSnapshot)
                    {
                        // update current schedule (according to CR133526)
                        _UpdateSchedule(ScheduleType.Current, schedule,
                                        (string)App.Current.FindResource("CurrentScheduleName"));

                        // update build routes snapshot name
                        schedule.Name = _FormatBuildRoutesSnapshotName();
                    }
                    else
                    {
                        // update build routes snapshot
                        _UpdateSchedule(ScheduleType.BuildRoutesSnapshot, schedule, _FormatBuildRoutesSnapshotName());
                    }

                    // save changes
                    project.Save();
                }

                // Show result message(s).
                if (0 < res.Violations.Count)
                {
                    _ShowPartialSuccessOperationResults(res.Violations, schedule, info);
                }
                else
                {
                    // If operation type is Assign To Routes
                    // show that Order was assigned to that Route
                    if (info.OperationType.Equals(SolveOperationType.AssignOrders))
                    {
                        _ShowSuccessfullyAssignedOrders(schedule, info);
                    }
                    else
                    {
                        App.Current.Messenger.AddInfo(
                            _FormatSuccessSolveCompletedMsg(schedule, info));
                    }
                }
            }

            OptimizeAndEditPage page = (OptimizeAndEditPage)((MainWindow)App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath);

            if (null != page)
            {
                page.OnScheduleChanged(schedule);
            }
        }
        /// <summary>
        /// Sets status to status bar in OptimizeAndEditPage
        /// </summary>
        /// <param name="statusString"></param>
        protected void _SetOperationStartedStatus(string statusString, DateTime date)
        {
            OptimizeAndEditPage optimizeAndEditPage = (OptimizeAndEditPage)App.Current.MainWindow.GetPage(PagePaths.SchedulePagePath);

            optimizeAndEditPage.SetRoutingStatus(statusString, date);
        }
Esempio n. 22
0
        /// <summary>
        /// Starts command executing.
        /// </summary>
        /// <param name="args">Command args.</param>
        protected override void _Execute(params object[] args)
        {
            // Get OptimizeAndEdit page.
            OptimizeAndEditPage schedulePage = ((MainWindow)App.Current.MainWindow).GetPage(PagePaths.SchedulePagePath) as OptimizeAndEditPage;

            Debug.Assert(schedulePage != null);

            // If editing is in progress - try to save editing.
            if (schedulePage.IsEditingInProgress)
            {
                // If editing cannot be saved - cancel editing.
                if (!schedulePage.SaveEditedItem())
                {
                    schedulePage.CancelObjectEditing();
                }
            }

            // Orders to assign.
            Collection <Order> ordersToAssign = (Collection <Order>)args[0];

            Debug.Assert(ordersToAssign != null);

            // Target object.
            Object target = (Object)args[1];

            // Include paired orders unless we are moving one order within the same route
            bool movingSingleOrderInPair = false;

            if (ordersToAssign.Count == 1 && (target is Stop))
            {
                Route targetRoute   = (target as Stop).Route;
                Order orderToAssign = ordersToAssign.ElementAt(0);
                foreach (Stop stop in targetRoute.Stops)
                {
                    Order associatedOrder = stop.AssociatedObject as Order;
                    if (associatedOrder == null)
                    {
                        continue;
                    }

                    if (associatedOrder == orderToAssign)
                    {
                        movingSingleOrderInPair = true;
                        break;
                    }
                }
            }

            if (!movingSingleOrderInPair)
            {
                ordersToAssign = RoutingCmdHelpers.GetOrdersIncludingPairs(schedulePage.CurrentSchedule, ordersToAssign) as Collection <Order>;
            }

            int?sequence = null;

            if (target is Stop)
            {
                // Set sequence only if there is a single order to assign.
                if (ordersToAssign.Count == 1)
                {
                    sequence = (target as Stop).SequenceNumber;
                }
                else // Otherwise change target to route. For more details see CR161083.
                {
                    target = (target as Stop).Route;
                }
            }

            // Get target routes.
            ICollection <Route> targetRoutes = _CreateTargetRoutes(target);

            try
            {
                // If target routes count is 0 - orders must be unassigned.
                if (targetRoutes.Count == 0)
                {
                    // Start unassigning orders.
                    _UnassignOrders(ordersToAssign);
                }
                else
                {
                    // Start moving orders.
                    _MoveOrders(ordersToAssign, targetRoutes, sequence);
                }
            }
            catch (RouteException e)
            {
                if (e.InvalidObjects != null) // If exception throw because any Routes or Orders are invalid.
                {
                    _ShowSolveValidationResult(e.InvalidObjects);
                }
                else
                {
                    _ShowErrorMsg(RoutingCmdHelpers.FormatRoutingExceptionMsg(e));
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                if ((e is LicenseException) || (e is AuthenticationException) || (e is CommunicationException))
                {
                    CommonHelpers.AddRoutingErrorMessage(e);
                }
                else
                {
                    throw;
                }
            }
        }
        /// <summary>
        /// Overrided method for move orders. It will be called in parent class
        /// </summary>
        /// <param name="args"></param>
        protected override void _ProcessOrders(params object[] args)
        {
            Collection <Order> ordersToAssign = args[0] as Collection <Order>;
            DateTime           targetDate     = (DateTime)args[1];

            Debug.Assert(targetDate != null);
            Debug.Assert(ordersToAssign != null);

            // Include any paired orders
            ICollection <Schedule> currentSchedules = App.Current.Project.Schedules.Search(App.Current.CurrentDate);

            if (currentSchedules != null && currentSchedules.Count > 0)
            {
                Schedule schedule = currentSchedules.ElementAt(0);
                // Ensure unassigned orders is up to date
                schedule.UnassignedOrders = null;
                OptimizeAndEditHelpers.FixSchedule(App.Current.Project, schedule);
                ordersToAssign = RoutingCmdHelpers.GetOrdersIncludingPairs(schedule, ordersToAssign) as Collection <Order>;
            }

            // Change orders planned date
            foreach (Order order in ordersToAssign)
            {
                order.PlannedDate = targetDate;
            }

            App.Current.Project.Save();

            // add info message to MessageWindow
            string infoMessage = string.Format((string)App.Current.FindResource("DropOnDateCmdSuccessText"), ordersToAssign.Count, App.Current.CurrentDate.ToShortDateString(), targetDate.ToShortDateString());

            App.Current.Messenger.AddInfo(infoMessage);

            // clear unassigned orders for all schedule in current date
            foreach (Schedule schedule in currentSchedules)
            {
                if (schedule.UnassignedOrders != null)
                {
                    schedule.UnassignedOrders.Dispose();
                    schedule.UnassignedOrders = null;
                }
            }

            // clear unassigned orders for all schedule in target date
            ICollection <Schedule> targetSchedules = App.Current.Project.Schedules.Search(targetDate);

            foreach (Schedule schedule in targetSchedules)
            {
                if (schedule.UnassignedOrders != null)
                {
                    schedule.UnassignedOrders.Dispose();
                    schedule.UnassignedOrders = null;
                }
            }

            OptimizeAndEditPage optimizeAndEditPage = (OptimizeAndEditPage)App.Current.MainWindow.GetPage(PagePaths.SchedulePagePath);

            if (ordersToAssign[0].PlannedDate != optimizeAndEditPage.CurrentSchedule.PlannedDate)
            {
                optimizeAndEditPage.DeleteStoredSelection(optimizeAndEditPage.CurrentSchedule.PlannedDate.Value);
            }

            // schedule has changed - all views should be refreshed
            optimizeAndEditPage.OnScheduleChanged(optimizeAndEditPage.CurrentSchedule);

            // update days statuses
            DayStatusesManager.Instance.UpdateDayStatus(App.Current.CurrentDate);
            DayStatusesManager.Instance.UpdateDayStatus(targetDate);

            // clear selection in OptimizeAndEditPage
            optimizeAndEditPage.SelectedItems.Clear();
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="optimizeAndEditPage">Parent page.</param>
        public SelectionChanger(OptimizeAndEditPage optimizeAndEditPage)
        {
            Debug.Assert(optimizeAndEditPage != null);

            _optimizeAndEditPage = optimizeAndEditPage;
        }
Esempio n. 25
0
 /// <summary>
 /// Checks whether command option is enabled.
 /// </summary>
 protected abstract void _CheckEnabled(OptimizeAndEditPage schedulePage);
Esempio n. 26
0
        /// <summary>
        /// Excecutes command.
        /// </summary>
        /// <param name="args"></param>
        protected override void _Execute(params object[] args)
        {
            try
            {
                OptimizeAndEditPage schedulePage = (OptimizeAndEditPage)App.Current.MainWindow.GetPage(PagePaths.SchedulePagePath);
                Schedule            schedule     = schedulePage.CurrentSchedule;

                // Get selected orders.
                Collection <Order> selectedOrders = _GetOrdersWhichCanBeMovedFromSelection(schedulePage.SelectedItems);
                selectedOrders = RoutingCmdHelpers.GetOrdersIncludingPairs(schedule, selectedOrders) as Collection <Order>;
                bool keepViolOrdrsUnassigned = false;

                Debug.Assert(args[0] != null);
                ICollection <Route> targetRoutes = args[0] as ICollection <Route>;
                Debug.Assert(targetRoutes != null);

                string routeName = args[1] as string;

                if (_CheckRoutingParams(schedule, targetRoutes, selectedOrders))
                {
                    SolveOptions options = new SolveOptions();
                    options.GenerateDirections            = App.Current.MapDisplay.TrueRoute;
                    options.FailOnInvalidOrderGeoLocation = false;

                    _SetOperationStartedStatus((string)App.Current.FindResource(ASSIGN_ORDERS), (DateTime)schedule.PlannedDate);

                    // Start "Assign to best other route" operation.
                    OperationsIds.Add(App.Current.Solver.AssignOrdersAsync(schedule, selectedOrders,
                                                                           targetRoutes, null,
                                                                           keepViolOrdrsUnassigned,
                                                                           options));
                    // Set solve started message
                    string infoMessage = RoutingMessagesHelper.GetAssignOperationStartedMessage(selectedOrders, routeName);

                    if (!string.IsNullOrEmpty(infoMessage))
                    {
                        App.Current.Messenger.AddInfo(infoMessage);
                    }
                }
            }
            catch (RouteException e)
            {
                if (e.InvalidObjects != null) // If exception throw because any Routes or Orders are invalid
                {
                    _ShowSolveValidationResult(e.InvalidObjects);
                }
                else
                {
                    _ShowErrorMsg(RoutingCmdHelpers.FormatRoutingExceptionMsg(e));
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                if ((e is LicenseException) || (e is AuthenticationException) || (e is CommunicationException))
                {
                    CommonHelpers.AddRoutingErrorMessage(e);
                }
                else
                {
                    throw;
                }
            }
        }