示例#1
0
        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();
        }