예제 #1
0
 public AsyncSolveCompletedEventArgs(Exception error,
     bool cancelled,
     Guid operationId,
     SolveResult result)
     : base(error, cancelled, operationId)
 {
     _result = result;
 }
예제 #2
0
 public AsyncSolveCompletedEventArgs(Exception error,
                                     bool cancelled,
                                     Guid operationId,
                                     SolveResult result)
     : base(error, cancelled, operationId)
 {
     _result = result;
 }
 private void _NotifyAsyncSolveCompleted(Exception error,
                                         bool cancelled,
                                         Guid operationId,
                                         SolveResult result)
 {
     if (AsyncSolveCompleted != null)
     {
         AsyncSolveCompleted(this,
                             new AsyncSolveCompletedEventArgs(error, cancelled, operationId, result));
     }
 }
 private void _NotifyAsyncSolveCompleted(Exception error,
     bool cancelled,
     Guid operationId,
     SolveResult result)
 {
     if (AsyncSolveCompleted != null)
     {
         AsyncSolveCompleted(this,
             new AsyncSolveCompletedEventArgs(error, cancelled, operationId, result));
     }
 }
        /// <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>
        /// Creates collection of message detail when solve operation failed
        /// </summary>
        /// <param name="schedule"></param>
        /// <param name="info"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        private ICollection<MessageDetail> _GetErrorFailedDetails(AsyncOperationInfo info, SolveResult result)
        {
            Debug.Assert(info != null);
            Debug.Assert(result != null);

            // Create details.
            ICollection<MessageDetail> details = null;

            if (0 < result.Violations.Count)
                details = ViolationMessageBuilder.GetViolationDetails(info.Schedule, info, result.Violations);
            else
            {
                // Create details from solver error message.
                details = new Collection<MessageDetail>();
                details.Add(new MessageDetail(MessageType.Error, RoutingCmdHelpers.FormatSolverErrorMsg(result)));
            }

            return details;
        }