Exemple #1
0
        public BalanceSubstationView(IBalance balance)
        {
            _balance = balance;

            _task = new Task(() =>
            {
                //System.Threading.Thread.Sleep(5000);
                table.Dispatcher.BeginInvoke(
                    new Action(delegate()
                {
                    table.BeginInit();
                    Create_tableColumns();
                    //ate = State.Idle;
                    table.ItemsSource = _balance.Items;
                    table.EndInit();
                    IsBusy = false;
                }));
            });

            _task.ContinueWith((t) =>
            {
                //State = State.Idle;
                EmcosSiteWrapperApp.LogError("Просмотр баланса подстанции - ошибка: " + t.Exception.Message);
                EmcosSiteWrapperApp.ShowError("Произошла ошибка.\n" + t.Exception.Message);
            }, TaskContinuationOptions.OnlyOnFaulted);

            InitializeComponent();

            _task.Start();

            DataContext          = this;
            rootGrid.DataContext = _balance;

            _balance.PropertyChanged += Balance_PropertyChanged;
        }
Exemple #2
0
        private async Task LoadPointsFromServiceAsync()
        {
            const string ErrorMessage = "Получение списка точек от сервиса - ошибка:\n{0}";

            try
            {
                IsGettingPointsFromService = true;

                var source = await FillPointsTree(_rootEmcosGroup);

                IsGettingPointsFromService = false;
                if (source.Count == 0)
                {
                    this.ShowDialogWarning("Список пуст!");
                    EmcosFromSiteModel = null;
                }
                else
                {
                    EmcosFromSiteModel = new TreeModel(new EmcosPoint("ROOT", source));
                }
            }
            catch (Exception ex)
            {
                EmcosSiteWrapperApp.Log("Получение списка точек от сервиса - ошибка");
                IsGettingPointsFromService = false;
                this.ShowDialogError(String.Format(ErrorMessage, EmcosSiteWrapperApp.GetExceptionDetails(ex)));
            }
        }
Exemple #3
0
        private void GetEmcosArchivesForSubstations()
        {
            EmcosSiteWrapperApp.LogInfo("Получение архивных данных");
            Status        = State.Busy;
            DialogMessage = "Получение архивных данных ...";

            EmcosSiteWrapperApp.LogInfo("Сохранение текущей сессии");
            Repository.SaveBackup();

            _cts          = new System.Threading.CancellationTokenSource();
            IsCancel      = false;
            IsGettingData = true;

            try
            {
                var task = EmcosSiteWrapper.Instance.ExecuteAction(_cts, GetSubstationsDaysArchives);

                task.ContinueWith((s) =>
                {
                    EmcosSiteWrapperApp.LogInfo("Выполнено получение архивных данных");
                    try
                    {
                        DispatcherExtensions.InUi(() => ShowDialogInfo("Выполнено. "));
                        IsGettingData = false;
                        Status        = State.Ready;

                        /*RaisePropertyChanged("HasData");
                         * RaisePropertyChanged("SubstationsTree");
                         * RaisePropertyChanged("WindowTitle");*/
                    }
                    catch (Exception ex)
                    {
                        EmcosSiteWrapperApp.LogError("Получение данных. Ошибка - " + ex.Message);
                    }
                }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion);
                task.ContinueWith((s) =>
                {
                    EmcosSiteWrapperApp.LogInfo("Прервано получение архивных данных");
                    ShowDialogWarning("Прервано. ");
                    IsGettingData = false;
                    Status        = State.Ready;

                    /*RaisePropertyChanged("HasData");
                     * RaisePropertyChanged("SubstationsTree");
                     * RaisePropertyChanged("WindowTitle");*/
                }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);
            }
            catch (Exception ex)
            {
                EmcosSiteWrapperApp.LogError("Получение архивных данных. Ошибка - " + ex.Message);
                ShowDialogError("Произошла ошибка.\n" + ex.Message, Title);
                IsGettingData = false;
            }
        }
Exemple #4
0
        /// <summary>
        /// Список точек с расходом для программы 'Balans'
        /// </summary>
        private void BalanceExport()
        {
            if (HasData == false)
            {
                EmcosSiteWrapperApp.ShowWarning("Отсутствуют данные.");
                return;
            }
            Status        = State.Busy;
            DialogMessage = "Экспорт данных: Список точек с расходом для программы 'Balans'";

            var fileName = CreateNameForReport("ForBalance");
            var task     = new System.Threading.Tasks.Task(() =>
            {
                var be = new Export.ForBalanceExport(
                    new Export.ExportInfo
                {
                    Title       = "Данные для програмы Balance",
                    StartDate   = Session.Info.Period.StartDate,
                    EndDate     = Session.Info.Period.EndDate,
                    Substations = Substations
                });
                DispatcherExtensions.InUi(() =>
                {
                    if (be.Export(fileName) == false)
                    {
                        return;
                    }
                });
                System.Diagnostics.Process.Start(fileName);
            });

            task.ContinueWith((t) =>
            {
                Status = State.Ready;
            }, System.Threading.Tasks.TaskContinuationOptions.None);

            task.ContinueWith((s) =>
            {
                EmcosSiteWrapperApp.LogError("Экспорт для программы 'Balance' - ошибка");
                EmcosSiteWrapperApp.LogException(s.Exception);
                ShowDialogError("Произошла ошибка при формировании отчёта.\nОбратитесь к разработчику.");
            }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);

            task.Start(System.Threading.Tasks.TaskScheduler.Current);
        }
Exemple #5
0
        private void Export_Click(object sender, RoutedEventArgs e)
        {
            //State = State.Busy;
            //wait.Message = "Пожалуйста, подождите..\nПодготовка отчёта...";
            var task = new System.Threading.Tasks.Task(() =>
            {
                var reportFileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), _balance.Substation.Name + ".xlsx");
                int index          = 0;
                while (System.IO.File.Exists(reportFileName) == true)
                {
                    try
                    {
                        System.IO.File.Delete(reportFileName);
                    }
                    catch (System.IO.IOException)
                    {
                        reportFileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), _balance.Substation.Name + " " + ++index + ".xlsx");
                    }
                }
                using (var sbe = new Export.SubstationExport(_balance))
                    sbe.Export(reportFileName);

                System.Diagnostics.Process.Start(reportFileName);
                //State = State.Idle;
                //DispatcherExtensions.InUi(() => wait.Message = "Пожалуйста, подождите..\nПодготовка данных.");
            }, System.Threading.Tasks.TaskCreationOptions.AttachedToParent);


            task.ContinueWith((s) =>
            {
                var sb       = new System.Text.StringBuilder();
                Exception ex = s.Exception.Flatten();
                while (ex != null)
                {
                    if (ex.InnerException != null)
                    {
                        sb.AppendLine(ex.InnerException.Message);
                        ex = ex.InnerException;
                    }
                }
                EmcosSiteWrapperApp.LogError("Экспорт балансов подстанций - ошибка: " + sb.ToString());
                DispatcherExtensions.InUi(() => EmcosSiteWrapperApp.ShowError("Произошла ошибка при формировании отчёта.\nОбратитесь к разработчику."));
            }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);
            task.Start(System.Threading.Tasks.TaskScheduler.Current);
        }
Exemple #6
0
 public virtual bool Export(string outputFile)
 {
     CreateHeader();
     CreateBody();
     CreateFooter();
     ChangePageSettings();
     try
     {
         package.SaveAs(new System.IO.FileInfo(outputFile));
         return(true);
     }
     catch (Exception e)
     {
         EmcosSiteWrapperApp.ShowError(e, "Ошибка экспорта данных.\n{0}");
         EmcosSiteWrapperApp.LogException(e);
         return(false);
     }
 }
        private void UpdateData_Click(object sender, RoutedEventArgs e)
        {
            var btn = sender as Button;

            if (btn == null)
            {
                return;
            }
            //string dir = btn.Tag as String;
            //if (String.IsNullOrWhiteSpace(dir)) return;

            var item = rootGrid.DataContext as Model.Balance.IBalanceItem;

            //wait.Message = "Пожалуйста, подождите ...\nОбновление данных.";
            var cts = new System.Threading.CancellationTokenSource();

            var task = EmcosSiteWrapper.Instance.ExecuteAction(cts, () =>
            {
                //State = State.Busy;

                try
                {
                    Emcos.Utils.GetBalanceItemArchiveData(item, _period.StartDate, _period.EndDate, cts);
                }
                catch (Exception ex)
                {
                    EmcosSiteWrapperApp.LogError(String.Format("Обновление данных по точке ({0}). Произошла ошибка: {1}", item.Name, ex.Message));
                    //State = State.Idle;
                }

                DispatcherExtensions.InUi(() =>
                {
                    //Progress = 0;
                });

                //State = State.Idle;
            });
        }
Exemple #8
0
        /// <summary>
        /// Баланс подстанций
        /// </summary>
        private void ExportSubstationsBalance()
        {
            if (HasData == false)
            {
                EmcosSiteWrapperApp.ShowWarning("Отсутствуют данные.");
                return;
            }
            Status        = State.Busy;
            DialogMessage = "Экспорт данных: Баланс подстанций";

            var dialog = ShowDialogQuestion(
                String.Format("Скопировать файл отчёта в папку '{0}'?", Properties.Settings.Default.ReportBalancePSFolder),
                Title, TMPApplication.WpfDialogs.DialogMode.YesNo);
            var r = dialog.Result;

            var task = new System.Threading.Tasks.Task(() =>
            {
                var defaultFileName = CreateNameForReport("out");
                var sbe             = new Export.SubstationsBalanceExport(
                    new Export.ExportInfo
                {
                    Title       = "Отчёт по балансам подстанций",
                    StartDate   = Session.Info.Period.StartDate,
                    EndDate     = Session.Info.Period.EndDate,
                    Substations = Substations
                });
                DispatcherExtensions.InUi(() =>
                {
                    if (sbe.Export(defaultFileName) == false)
                    {
                        return;
                    }
                });

                if (r == TMPApplication.WpfDialogs.DialogResultState.Yes)
                {
                    if (System.IO.Directory.Exists(Properties.Settings.Default.ReportBalancePSFolder) == false)
                    {
                        try
                        {
                            System.IO.Directory.CreateDirectory(Properties.Settings.Default.ReportBalancePSFolder);
                        }
                        catch (System.IO.IOException ioe)
                        {
                            ShowDialogError(String.Format("Папка {0} не найдена. При попытке её создать произошла ошибка: {1}.\nФайл отчёта не скопирован.", Properties.Settings.Default.ReportBalancePSFolder, ioe.Message));
                        }
                    }
                    var filename = System.IO.Path.Combine(
                        Properties.Settings.Default.ReportBalancePSFolder,
                        String.Format(Properties.Settings.Default.ReportBalancePSFileNameTemplate, Session.Info.Period.StartDate) + ".xlsx");
                    System.IO.File.Copy(defaultFileName, filename, true);
                    System.Diagnostics.Process.Start(filename);
                }
                else
                {
                    System.Diagnostics.Process.Start(defaultFileName);
                }
            }, System.Threading.Tasks.TaskCreationOptions.AttachedToParent);

            task.ContinueWith((t) =>
            {
                Status = State.Ready;
            }, System.Threading.Tasks.TaskContinuationOptions.None);

            task.ContinueWith((s) =>
            {
                EmcosSiteWrapperApp.LogError("Экспорт балансов подстанций - ошибка");
                EmcosSiteWrapperApp.LogException(s.Exception);

                ShowDialogError("Произошла ошибка при формировании отчёта.\nОбратитесь к разработчику.");
            }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);
            task.Start(System.Threading.Tasks.TaskScheduler.Current);
        }
Exemple #9
0
        public BalanceViewModel(System.Windows.Window window) : base(window as IWindowWithDialogs)
        {
            if (window == null)
            {
                return;
            }

            try
            {
                if (System.IO.Directory.Exists(REPORTS_FOLDER) == false)
                {
                    Directory.CreateDirectory(REPORTS_FOLDER);
                }
            }
            catch (System.IO.IOException ex)
            {
                _callBackAction(ex);
            }
            #region Добавление обработчиков окна
            if (window != null)
            {
                window.Closed += (s, e) =>
                {
                    if (Session == null)
                    {
                        return;
                    }
                    // сохранение сессии
                    if (Repository.Save())
                    {
                        EmcosSiteWrapperApp.LogInfo("Сессия сохранена");
                    }
                    else
                    {
                        EmcosSiteWrapperApp.LogInfo("Сессия не сохранена");
                    }
                }
            }
            ;
            if (window != null)
            {
                window.Loaded += (s, e) =>
                {
                    if (Status == State.Busy)
                    {
                        ShowDialogWaitingScreen("Подготовка данных ....");
                    }

                    if (Session == null && Repository.SessionsInfoList.Count == 0)
                    {
                        ShowDialogInfo(string.Format("В папке '{0}' не обнаружены сессии (файлы с расширением '{1}').\nБудет создана новая сессия.",
                                                     Repository.SESSIONS_FOLDER, Repository.SESSION_FILE_EXTENSION),
                                       Title,
                                       () => Repository.CreateEmptySession());
                    }
                    else
                    {
                        if (Session == null)
                        {
                            SelectSessionCommand.Execute(s);
                        }
                        else
                        {
                            Status = State.Ready;
                        }
                    }
                }
            }
            ;
            #endregion

            // инициализация репозитория
            _repository.Loaded          += Repository_LoadedOrSaved;
            _repository.Saved           += Repository_LoadedOrSaved;
            _repository.PropertyChanged += Repository_PropertyChanged;
            _repository.Init();

            // Инициализация команд
            InitCommands(window);

            _timer.Elapsed += Timer_Elapsed;
        }

        ~BalanceViewModel()
        {
            if (_repository != null)
            {
                _repository.Loaded          -= Repository_LoadedOrSaved;
                _repository.Saved           -= Repository_LoadedOrSaved;
                _repository.PropertyChanged -= Repository_PropertyChanged;
            }
            if (_session != null)
            {
                _session.PropertyChanged -= Session_PropertyChanged;
            }
        }
Exemple #10
0
        private void InitCommands(System.Windows.Window window)
        {
            // Редактор конфигурации
            PointsEditorCommand = new DelegateCommand(() =>
            {
                DialogMessage        = "Редактор конфигурации";
                var pe               = new Controls.PointsEditor(Repository.ConfigPoints, Repository.ConfigOtherPoints, this.Window);
                var dialog           = this.CreateDialogCustom(pe, TMPApplication.WpfDialogs.DialogMode.Ok);
                dialog.Caption       = DialogMessage;
                dialog.CloseBehavior = TMPApplication.WpfDialogs.DialogCloseBehavior.ExplicitClose;

                dialog.OkText = "Закрыть";
                dialog.Ok     = () =>
                {
                    dialog.Close();
                    this.ShowDialogWaitingScreen("Применение конфигурации");
                    // сохранить конфигурацию
                    if (Repository.SaveConfiguration() == false)
                    {
                        EmcosSiteWrapperApp.LogWarning("Конфигурация не сохранена");
                    }
                    else
                    {
                        EmcosSiteWrapperApp.LogWarning("Конфигурация сохранена");
                    }

                    // обновить формулы групп в сессии
                    foreach (IHierarchicalEmcosPoint point in pe.EmcosPoints.FlatItemsList)
                    {
                        if (point is IBalanceGroupItem balanceGroupItem)
                        {
                            Repository.UpdateGroupBalanceFormula(balanceGroupItem.Id, balanceGroupItem.Formula);
                        }
                    }
                    // если появились новые точки - добавить точки в сессию и получить данные
                    if (pe.NewPoints != null && pe.NewPoints.Count > 1)
                    {
                        ;
                    }
                    if (pe.DeletedPoints != null && pe.DeletedPoints.Count > 1)
                    {
                        ;
                    }

                    // пересчёт баланса
                    var balanceGroups = Repository.ActiveSession.BalancePoints.FlatItemsList
                                        .Where(p => (p.TypeCode == "SUBSTATION" || p.ElementType == ElementTypes.SUBSTATION) || (p.TypeCode == "SECTIONBUS" || p.ElementType == ElementTypes.SECTION));
                    foreach (IBalanceGroupItem group in balanceGroups)
                    {
                        group.RecalculateBalance();
                    }
                    this.CloseDialog();
                };

                dialog.Show();
            });
            //
            GetDataCommand = new DelegateCommand(GetEmcosArchivesForSubstations);
            // Сохранение данных
            SaveDataCommand = new DelegateCommand(() =>
            {
                var result = U.InputBox("Сохранение", "Укажите название сессии", Session.Info.Period.GetFileNameForSaveSession());
                if (String.IsNullOrWhiteSpace(result) == true)
                {
                    return;
                }
                Repository.SaveAs(result);
                Repository.FillSessionsList();
            },
                                                  (o) => (IsSessionLoadedAdnPeriodSelected));
            // Выбор сессии
            SelectSessionCommand = new DelegateCommand(() =>
            {
                CloseDialog();
                DialogMessage = "Выбор сессии ...";
                Repository.FillSessionsList();

                Controls.SessionManager sm = new Controls.SessionManager(Repository);

                var dialog           = this.CreateDialogCustom(sm, TMPApplication.WpfDialogs.DialogMode.YesNoCancel);
                dialog.Caption       = DialogMessage;
                dialog.CloseBehavior = TMPApplication.WpfDialogs.DialogCloseBehavior.ExplicitClose;

                void closeDialogAction()
                {
                    dialog.Close();
                }

                dialog.YesText = "Загрузить";
                dialog.Yes     = () =>
                {
                    if (sm.SelectedSessionInfo == null)
                    {
                        ShowDialogWarning("Необходимо выбрать сессию из списка!", DialogMessage);
                        return;
                    }
                    else
                    {
                        if (_repository.LoadFromFile(sm.SelectedSessionInfo.FileName) == false)
                        {
                            TMPApp.ShowWarning("Не удалось загрузить сессию.");
                        }
                        else
                        {
                            closeDialogAction();
                        }
                    }
                };

                dialog.NoText = "Новая";
                dialog.No     = () =>
                {
                    _repository.CreateEmptySession();
                    closeDialogAction();
                };

                dialog.CancelText = "Закрыть";
                dialog.Cancel     = () =>
                {
                    closeDialogAction();
                };

                dialog.Show();
            });

            CancelCommand = new DelegateCommand(() =>
            {
                IsCancel = true;
                _cts.Cancel();
            },
                                                (o) => !IsCancel);
            // Детальная информация об элементе
            ViewDetailsCommand = new DelegateCommand(() =>
            {
                ShowDetails(SelectedBalanceItem.ElementType);
            },
                                                     (o) => SelectedBalanceItem != null);

            ExportList = new List <ICommand>
            {
                new DelegateCommand(() => ExportSubstationsBalance(), (o) => (IsSessionLoadedAdnPeriodSelected), "Баланс подстанций"),
                new DelegateCommand(() => BalanceExport(), (o) => (IsSessionLoadedAdnPeriodSelected), "Для программы 'Balance'"),
                new DelegateCommand(() => ExportFiderAnaliz(), (o) => (IsSessionLoadedAdnPeriodSelected), "Для пофидерного анализа")
            };

            OpenAuxiliaryReportCommand = new DelegateCommand(() =>
            {
                IList <AuxiliaryReportItem> model = new List <Model.AuxiliaryReportItem>();

                var list = Substations
                           .GroupBy(i => i.Departament, i => i,
                                    (k, g) => new { Departament = k, Substations = g.ToList() })
                           .OrderBy(i => i.Departament)
                           .ToList();

                foreach (var item in list)
                {
                    var departament = item.Departament;
                    var dep         = new AuxiliaryReportItem
                    {
                        Name = departament,
                        Type = "Departament",

                        Children = new List <AuxiliaryReportItem>()
                    };

                    foreach (Model.Balance.Substation substation in item.Substations)
                    {
                        var sub = new AuxiliaryReportItem
                        {
                            Children = new List <AuxiliaryReportItem>(),
                            Name     = substation.Name,
                            Type     = "Substation"
                        };

                        foreach (Model.Balance.IBalanceItem BalanceItem in substation.Items)
                        {
                            if (BalanceItem.ElementType == ElementTypes.UNITTRANSFORMER || BalanceItem.ElementType == ElementTypes.UNITTRANSFORMERBUS)
                            {
                                sub.Children.Add(new AuxiliaryReportItem
                                {
                                    Name   = BalanceItem.Name,
                                    APlus  = BalanceItem.ActiveEnergy.Plus.Value,
                                    AMinus = BalanceItem.ActiveEnergy.Minus.Value,
                                    RPlus  = BalanceItem.ReactiveEnergy.Plus.Value,
                                    RMinus = BalanceItem.ReactiveEnergy.Minus.Value,
                                });
                            }
                        }
                        dep.Children.Add(sub);
                    }
                    model.Add(dep);
                }
                var arw = new AuxiliaryReportWindow(new AuxiliaryReportTreeModel(model))
                {
                    Owner         = Window as System.Windows.Window,
                    ShowInTaskbar = false
                };

                arw.ShowDialog();
            },
                                                             (o) => IsSessionLoadedAdnPeriodSelected);

            bool canExecuteUpdateSubstationDataCommand(object o)
            {
                if (SelectedBalanceItem == null)
                {
                    return(false);
                }
                if (SelectedBalanceItem is Model.Balance.IBalanceGroupItem && (SelectedBalanceItem as Model.Balance.IBalanceGroupItem).ElementType == ElementTypes.SUBSTATION)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            UpdateSubstationDataCommand = new DelegateCommand(() =>
            {
                IProgressDialog progressDialog = ShowDialogProgress("Обновление данных по подстанции ...") as IProgressDialog;
                DispatcherExtensions.InUi(() =>
                {
                    (Window as System.Windows.Window).TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Normal;
                    (Window as System.Windows.Window).TaskbarItemInfo.ProgressValue = 0;
                });
                var substation = SelectedBalanceItem as Model.Balance.Substation;
                if (substation == null)
                {
                    return;
                }
                substation.ClearData();

                Action oncompleted = () =>
                {
                    Status = State.Ready;
                    //vm.IsGettingData = false;

                    /*RaisePropertyChanged("HasData");
                     * RaisePropertyChanged("SubstationsTree");
                     * RaisePropertyChanged("WindowTitle");*/
                };

                void updateCallBack(int current, int total)
                {
                    DispatcherExtensions.InUi(() =>
                    {
                        progressDialog.Progress = 100 * current / total;
                        (Window as System.Windows.Window).TaskbarItemInfo.ProgressValue = ((double)current) / total;
                    });
                }

                try
                {
                    Status        = State.Busy;
                    IsGettingData = true;
                    IsCancel      = false;

                    _cts = new System.Threading.CancellationTokenSource();

                    substation.Status = Model.DataStatus.Wait;

                    var task = System.Threading.Tasks.Task.Factory.StartNew(() =>
                                                                            Emcos.Utils.GetArchiveDataForSubstation(Session.Info.Period.StartDate, Session.Info.Period.EndDate, substation, _cts, updateCallBack), _cts.Token);

                    task.ContinueWith((s) =>
                    {
                        if (s.Result == true)
                        {
                            DispatcherExtensions.InUi(() => ShowDialogInfo("Выполнено. "));
                        }
                        else
                        {
                            CheckOnError();
                        }
                        oncompleted();
                    }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion);
                    task.ContinueWith((s) =>
                    {
                        DispatcherExtensions.InUi(() => ShowDialogError("Произошла ошибка.\n" + s.Exception));
                        oncompleted();
                    }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);
                }
                catch (Exception e)
                {
                    EmcosSiteWrapperApp.LogError(String.Format("Обновление данных [{0}]. Ошибка - {1}", substation.Code, e.Message));
                    ShowDialogError("Произошла ошибка.\n" + e.Message);
                    oncompleted();
                }
            }, canExecuteUpdateSubstationDataCommand);

            SetSubstationToUseMonthValueCommand = new DelegateCommand((o) =>
            {
                System.Windows.Controls.MenuItem menuItem = o as System.Windows.Controls.MenuItem;
                if (menuItem == null)
                {
                    return;
                }
                var substation = SelectedBalanceItem as Model.Balance.Substation;
                if (substation == null)
                {
                    return;
                }
                else
                {
                    substation.UseMonthValue = menuItem.IsChecked;
                }
            }, canExecuteUpdateSubstationDataCommand);
        }
 public BalanceView()
 {
     EmcosSiteWrapperApp.LogInfo("Инициализация BalanceView");
     InitializeComponent();
 }
Exemple #12
0
        private async Task LoadPointsFromServiceAsync()
        {
            const string ErrorMessage = "Получение списка точек от сервиса - ошибка:\n{0}";
            IDialog      dialog       = null;

            try
            {
                dialog = _window.DialogWaitingScreen("Получение данных ...", indeterminate: true, mode: TMPApplication.WpfDialogs.DialogMode.Cancel);
                dialog.Show();
                var source = await FillPointsTree(_rootEmcosGroup);

                if (source.Count == 0)
                {
                    dialog.Close();
                    _window.ShowDialogWarning("Список пуст!", TITLE);
                    EmcosPointsFromSite = null;
                }
                else
                {
                    dialog.Caption = "Создание модели";
                    EmcosSiteWrapperApp.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { }));

                    EmcosPointsFromSite = new HierarchicalEmcosPointCollection(null, source);
                    dialog.Caption      = "Поиск изменений";
                    EmcosSiteWrapperApp.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { }));

                    // поиск новых точек
                    void checkNewItems(IEnumerable <IHierarchicalEmcosPoint> sourcePoints, IEnumerable <IHierarchicalEmcosPoint> destinationPoints)
                    {
                        foreach (var point in sourcePoints)
                        {
                            IHierarchicalEmcosPoint p = destinationPoints.Where(i => i.Id == point.Id).FirstOrDefault();
                            if (p == null)
                            {
                                point.Tag = "NEW";
                            }
                            else
                            {
                                point.Tag = null;
                                if (point.HasChildren)
                                {
                                    checkNewItems(point.Children, p.Children);
                                }
                            }
                        }
                    }
                    checkNewItems(EmcosPointsFromSite, EmcosPoints);

                    // поиск удаленных точек
                    void checkDeletedItems(IEnumerable <IHierarchicalEmcosPoint> sourcePoints, IEnumerable <IHierarchicalEmcosPoint> destinationPoints)
                    {
                        foreach (var point in sourcePoints)
                        {
                            IHierarchicalEmcosPoint p = destinationPoints.Where(i => i.Id == point.Id).FirstOrDefault();
                            if (p == null)
                            {
                                point.Tag = "DELETED";
                            }
                            else
                            {
                                point.Tag = null;
                                if (point.HasChildren)
                                {
                                    checkDeletedItems(point.Children, p.Children);
                                }
                            }
                        }
                    }
                    checkDeletedItems(EmcosPoints, EmcosPointsFromSite);

                    dialog.Close();
                }
            }
            catch (Exception ex)
            {
                EmcosSiteWrapperApp.Log("Получение списка точек от сервиса - ошибка");
                if (dialog != null)
                {
                    dialog.Close();
                }
                _window.ShowDialogError(String.Format(ErrorMessage, EmcosSiteWrapperApp.GetExceptionDetails(ex)));
            }
        }