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)); } }
/// <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; }