protected void OnButtonTransferClicked(object sender, EventArgs e) { //Дополнительные проверки RouteList routeListTo = yentryreferenceRLTo.Subject as RouteList; RouteList routeListFrom = yentryreferenceRLFrom.Subject as RouteList; var messages = new List <string>(); if (routeListTo == null || routeListFrom == null || routeListTo.Id == routeListFrom.Id) { return; } List <RouteListItemNode> needReloadNotSet = new List <RouteListItemNode>(); List <RouteListItemNode> needReloadSetAndRlEnRoute = new List <RouteListItemNode>(); foreach (var row in ytreeviewRLFrom.GetSelectedObjects <RouteListItemNode>()) { RouteListItem item = row?.RouteListItem; logger.Debug("Проверка адреса с номером {0}", item?.Id.ToString() ?? "Неправильный адрес"); if (item == null || item.Status == RouteListItemStatus.Transfered) { continue; } if (!row.LeftNeedToReload && !row.LeftNotNeedToReload) { needReloadNotSet.Add(row); continue; } if (row.LeftNeedToReload && routeListTo.Status >= RouteListStatus.EnRoute) { needReloadSetAndRlEnRoute.Add(row); continue; } RouteListItem newItem = new RouteListItem(routeListTo, item.Order, item.Status) { WasTransfered = true, NeedToReload = row.LeftNeedToReload, WithForwarder = routeListTo.Forwarder != null }; routeListTo.ObservableAddresses.Add(newItem); item.TransferedTo = newItem; //Пересчёт зарплаты после изменения МЛ routeListFrom.CalculateWages(wageParameterService); routeListTo.CalculateWages(wageParameterService); item.RecalculateTotalCash(); newItem.RecalculateTotalCash(); if (routeListTo.ClosingFilled) { newItem.FirstFillClosing(UoW, wageParameterService); } UoW.Save(item); UoW.Save(newItem); } UpdateTranferDocuments(routeListFrom, routeListTo); if (routeListFrom.Status == RouteListStatus.Closed) { messages.AddRange(routeListFrom.UpdateMovementOperations()); } if (routeListTo.Status == RouteListStatus.Closed) { messages.AddRange(routeListTo.UpdateMovementOperations()); } UoW.Save(routeListTo); UoW.Save(routeListFrom); UoW.Commit(); if (needReloadNotSet.Count > 0) { MessageDialogHelper.RunWarningDialog("Для следующих адресов не была указана необходимость загрузки, поэтому они не были перенесены:\n * " + String.Join("\n * ", needReloadNotSet.Select(x => x.Address)) ); } if (needReloadSetAndRlEnRoute.Count > 0) { MessageDialogHelper.RunWarningDialog("Для следующих адресов была указана необходимость загрузки при переносе в МЛ со статусом \"В пути\" и выше , поэтому они не были перенесены:\n * " + String.Join("\n * ", needReloadSetAndRlEnRoute.Select(x => x.Address)) ); } if (messages.Count > 0) { MessageDialogHelper.RunInfoDialog(String.Format("Были выполнены следующие действия:\n*{0}", String.Join("\n*", messages))); } UpdateNodes(); CheckSensitivities(); }