protected void OnButtonAcceptClicked(object sender, EventArgs e) { try { SetSensetivity(false); var callTaskWorker = new CallTaskWorker( CallTaskSingletonFactory.GetInstance(), new CallTaskRepository(), new OrderRepository(), _employeeRepository, _baseParametersProvider, ServicesConfig.CommonServices.UserService, ErrorReporter.Instance); if (Entity.Car == null) { MessageDialogHelper.RunWarningDialog("Не заполнен автомобиль"); return; } StringBuilder warningMsg = new StringBuilder($"Автомобиль '{ Entity.Car.Title }':"); if (Entity.HasOverweight()) { warningMsg.Append($"\n\t- перегружен на { Entity.Overweight() } кг"); } if (Entity.HasVolumeExecess()) { warningMsg.Append($"\n\t- объём груза превышен на { Entity.VolumeExecess() } м<sup>3</sup>"); } if (buttonAccept.Label == "Подтвердить" && (Entity.HasOverweight() || Entity.HasVolumeExecess())) { if (ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_confirm_routelist_with_overweight")) { warningMsg.AppendLine("\nВы уверены что хотите подтвердить маршрутный лист?"); if (!MessageDialogHelper.RunQuestionDialog(warningMsg.ToString())) { return; } } else { warningMsg.AppendLine("\nПодтвердить маршрутный лист нельзя."); MessageDialogHelper.RunWarningDialog(warningMsg.ToString()); return; } } if (Entity.Status == RouteListStatus.New) { var valid = new QSValidator <RouteList>(Entity, new Dictionary <object, object> { { "NewStatus", RouteListStatus.Confirmed }, { nameof(IRouteListItemRepository), new RouteListItemRepository() } }); if (valid.RunDlgIfNotValid((Window)this.Toplevel)) { return; } Entity.ChangeStatusAndCreateTask(RouteListStatus.Confirmed, callTaskWorker); //Строим маршрут для МЛ. if ((!Entity.PrintsHistory?.Any() ?? true) || MessageDialogHelper.RunQuestionWithTitleDialog("Перестроить маршрут?", "Этот маршрутный лист уже был когда-то напечатан. При новом построении маршрута порядок адресов может быть другой. При продолжении обязательно перепечатайте этот МЛ.\nПерестроить маршрут?")) { RouteOptimizer optimizer = new RouteOptimizer(ServicesConfig.InteractiveService); var newRoute = optimizer.RebuidOneRoute(Entity); if (newRoute != null) { createroutelistitemsview1.DisableColumnsUpdate = true; newRoute.UpdateAddressOrderInRealRoute(Entity); //Рассчитываем расстояние using (var calc = new RouteGeometryCalculator()) { Entity.RecalculatePlanedDistance(calc); } createroutelistitemsview1.DisableColumnsUpdate = false; var noPlan = Entity.Addresses.Count(x => !x.PlanTimeStart.HasValue); if (noPlan > 0) { MessageDialogHelper.RunWarningDialog($"Для маршрута незапланировано { noPlan } адресов."); } } else { MessageDialogHelper.RunWarningDialog($"Маршрут не был перестроен."); } } Save(); if (Entity.GetCarVersion.IsCompanyCar && Entity.Car.CarModel.CarTypeOfUse == CarTypeOfUse.Truck && !Entity.NeedToLoad) { if (MessageDialogHelper.RunQuestionDialog( "Маршрутный лист для транспортировки на склад, перевести машрутный лист сразу в статус '{0}'?", RouteListStatus.OnClosing.GetEnumTitle())) { Entity.CompleteRouteAndCreateTask(_wageParameterService, callTaskWorker, _trackRepository); } } else { //Проверяем нужно ли маршрутный лист грузить на складе, если нет переводим в статус в пути. var needTerminal = Entity.Addresses.Any(x => x.Order.PaymentType == PaymentType.Terminal); if (!Entity.NeedToLoad && !needTerminal) { if (MessageDialogHelper.RunQuestionDialog("Для маршрутного листа, нет необходимости грузится на складе. Перевести маршрутный лист сразу в статус '{0}'?", RouteListStatus.EnRoute.GetEnumTitle())) { valid = new QSValidator <RouteList>( Entity, new Dictionary <object, object> { { "NewStatus", RouteListStatus.EnRoute }, { nameof(IRouteListItemRepository), new RouteListItemRepository() } }); if (!valid.IsValid) { return; } Entity.ChangeStatusAndCreateTask(valid.RunDlgIfNotValid((Window)this.Toplevel) ? RouteListStatus.New : RouteListStatus.EnRoute, callTaskWorker); } else { Entity.ChangeStatusAndCreateTask(RouteListStatus.New, callTaskWorker); } } } Save(); UpdateButtonStatus(); createroutelistitemsview1.SubscribeOnChanges(); UpdateAdditionalLoadingWidgets(); return; } if (Entity.Status == RouteListStatus.InLoading || Entity.Status == RouteListStatus.Confirmed) { if (_routeListRepository.GetCarLoadDocuments(UoW, Entity.Id).Any()) { MessageDialogHelper.RunErrorDialog("Для маршрутного листа были созданы документы погрузки. Сначала необходимо удалить их."); } else { Entity.ChangeStatusAndCreateTask(RouteListStatus.New, callTaskWorker); } UpdateButtonStatus(); return; } } finally { SetSensetivity(true); } UpdateDlg(_isLogistican); }