public ViewModelAddDoctor(NavigationController controller) : base(controller)
        {
            WidthOfBtn         = 200;
            VisibilityOfGoBAck = Visibility.Visible;

            CurrentSpecPanelViewModel = new SpecPanelViewModel(this);
            OpenAddSpecCommand        = new DelegateCommand(() =>
            {
                CurrentSpecPanelViewModel.ClearPanel();
                CurrentSpecPanelViewModel.PanelOpened = true;
            });

            SaveSpecCommand = new DelegateCommand(() =>
            {
                var newType = CurrentSpecPanelViewModel.GetPanelType();
                if (!string.IsNullOrWhiteSpace(newType.Str))
                {
                    CurrentSpecPanelViewModel.PanelOpened = false;

                    Handled = false;

                    Data.SpecializationType.Add((newType));

                    Data.Complete();

                    var DataSourceListbuf = Specializations;
                    Specializations       = new ObservableCollection <SpecDataSours>();

                    foreach (var spec in Data.SpecializationType.GetAll)
                    {
                        Specializations.Add(new SpecDataSours(spec.Str, spec.id_специлизации));
                    }

                    foreach (var spec in DataSourceListbuf)
                    {
                        if (spec.IsChecked.Value)
                        {
                            Specializations.Where(s => s.id == spec.id).ToList()[0].IsChecked = true;
                        }
                    }

                    Controller.NavigateTo <ViewModelAddDoctor>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            });
            RevertSpecCommand = new DelegateCommand(() =>
            {
                CurrentSpecPanelViewModel.PanelOpened = false;
                Handled = false;
            });


            CurrentScintificsPanelViewModel = new ScintificsPanelViewModel(this);
            OpenAddScintificsCommand        = new DelegateCommand(() =>
            {
                CurrentScintificsPanelViewModel.ClearPanel();
                CurrentScintificsPanelViewModel.PanelOpened = true;
            });

            SaveScintificsCommand = new DelegateCommand(() =>
            {
                var newType = CurrentScintificsPanelViewModel.GetPanelType();
                if (!string.IsNullOrWhiteSpace(newType.Str))
                {
                    CurrentScintificsPanelViewModel.PanelOpened = false;

                    Handled = false;

                    Data.ScientificTitleType.Add((newType));

                    Data.Complete();

                    var DataSourceListbuf = Scintifics;
                    Scintifics            = new ObservableCollection <SpecDataSours>();

                    foreach (var Scintific in Data.ScientificTitleType.GetAll)
                    {
                        Scintifics.Add(new SpecDataSours(Scintific.Str, Scintific.Id));
                    }

                    foreach (var Scintific in DataSourceListbuf)
                    {
                        if (Scintific.IsChecked.Value)
                        {
                            Scintifics.Where(s => s.id == Scintific.id).ToList()[0].IsChecked = true;
                        }
                    }

                    Controller.NavigateTo <ViewModelAddDoctor>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            });
            RevertScintificsCommand = new DelegateCommand(() =>
            {
                CurrentScintificsPanelViewModel.PanelOpened = false;
                Handled = false;
            });



            ClickOnAutoComplete = new DelegateCommand <object>(
                (sender) =>
            {
                var buf            = (AutoCompleteBox)sender;
                buf.IsDropDownOpen = true;
            }
                );


            MessageBus.Default.Subscribe("RefreshDataForDoctorsForEditUser", RefreshDataForDoctorsForEditUser);
            MessageBus.Default.Subscribe("RefreshDataForNewDoctorsForAddUser", RefreshDataForDoctorsForAddUser);
            MessageBus.Default.Subscribe("RefreshDataForNewDoctors", RefreshDataForDoctors);
            //Date = DateTime.Now;
            base.HasNavigation = true;

            TextHeader = "Добавление врача";

            nameOfButton = "Добавить";

            SetAllFieldsDefault();
            ToDashboardCommand = new DelegateCommand(
                () =>
            {
                Name       = "";
                Surname    = "";
                Patronimic = "";
                Aditional  = "";
                MessageBus.Default.Call("RefreshDataForNewDoctors", this, "");
            }
                );
            GoToDoctorListCommand = new DelegateCommand(
                () =>
            {
                MessageBus.Default.Call("OpenDoctors", this, "");
                Controller.NavigateTo <ViewModelViewDoctors>();
            }
                );
            SaveAndGoDoctorListCommand = new DelegateCommand(
                () =>
            {
                if (TestRequiredFields())
                {
                    currentDoctor = new Doctor();
                    bool test     = true;
                    foreach (var Category in Data.СategoryType.GetAll)
                    {
                        if (Category.Str == СategoryTypeSelectedText)
                        {
                            test = false;
                            currentDoctor.категория = Category.Id;
                            break;
                        }
                    }
                    if (test)
                    {
                        СategoryType newСategory = new СategoryType();
                        newСategory.Str          = СategoryTypeSelectedText;
                        Data.СategoryType.Add(newСategory);
                        Data.Complete();
                        currentDoctor.категория = newСategory.Id;
                    }

                    currentDoctor.Name       = Name;
                    currentDoctor.Sirname    = Surname;
                    currentDoctor.Patronimic = Patronimic;
                    currentDoctor.Aditional  = Aditional;
                    currentDoctor.isEnabled  = true;

                    Data.Doctor.Add(currentDoctor);
                    Data.Complete();
                    foreach (var spec in Specializations)
                    {
                        if (spec.IsChecked == true)
                        {
                            DoctorsSpecializations DoctorSpec = new DoctorsSpecializations();
                            DoctorSpec.id_doctor         = currentDoctor.Id;
                            DoctorSpec.id_specialization = spec.id;
                            Data.DoctorsSpecializations.Add(DoctorSpec);
                            Data.Complete();
                        }
                    }
                    Data.Complete();
                    foreach (var Tytle in Scintifics)
                    {
                        if (Tytle.IsChecked == true)
                        {
                            ScientificTitles DoctorTitle = new ScientificTitles();
                            DoctorTitle.id_doctor        = currentDoctor.Id;
                            DoctorTitle.id_title         = Tytle.id;
                            Data.ScientificTitles.Add(DoctorTitle);
                        }
                    }
                    Data.Complete();
                    MessageBus.Default.Call("OpenDoctors", this, "");
                    Controller.NavigateTo <ViewModelViewDoctors>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            }
                );
        }
        public ViewModelEditDoctor(NavigationController controller) : base(controller)
        {
            WidthOfBtn = 300;

            VisibilityOfGoBAck        = Visibility.Collapsed;
            CurrentSpecPanelViewModel = new SpecPanelViewModel(this);
            OpenAddSpecCommand        = new DelegateCommand(() =>
            {
                CurrentSpecPanelViewModel.ClearPanel();
                CurrentSpecPanelViewModel.PanelOpened = true;
            });

            SaveSpecCommand = new DelegateCommand(() =>
            {
                var newType = CurrentSpecPanelViewModel.GetPanelType();
                if (!string.IsNullOrWhiteSpace(newType.Str))
                {
                    CurrentSpecPanelViewModel.PanelOpened = false;

                    Handled = false;

                    Data.SpecializationType.Add((newType));

                    Data.Complete();

                    var DataSourceListbuf = Specializations;
                    Specializations       = new ObservableCollection <SpecDataSoursForEdit>();

                    foreach (var spec in Data.SpecializationType.GetAll)
                    {
                        Specializations.Add(new SpecDataSoursForEdit(spec.Str, spec.id_специлизации));
                    }

                    foreach (var spec in DataSourceListbuf)
                    {
                        if (spec.IsChecked.Value)
                        {
                            Specializations.Where(s => s.id == spec.id).ToList()[0].IsChecked = true;
                        }
                    }

                    Controller.NavigateTo <ViewModelEditDoctor>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            });
            RevertSpecCommand = new DelegateCommand(() =>
            {
                CurrentSpecPanelViewModel.PanelOpened = false;
                Handled = false;
            });


            CurrentScintificsPanelViewModel = new ScintificsPanelViewModel(this);
            OpenAddScintificsCommand        = new DelegateCommand(() =>
            {
                CurrentScintificsPanelViewModel.ClearPanel();
                CurrentScintificsPanelViewModel.PanelOpened = true;
            });

            SaveScintificsCommand = new DelegateCommand(() =>
            {
                var newType = CurrentScintificsPanelViewModel.GetPanelType();
                if (!string.IsNullOrWhiteSpace(newType.Str))
                {
                    CurrentScintificsPanelViewModel.PanelOpened = false;

                    Handled = false;

                    Data.ScientificTitleType.Add((newType));

                    Data.Complete();

                    var DataSourceListbuf = Scintifics;
                    Scintifics            = new ObservableCollection <SpecDataSoursForEdit>();

                    foreach (var Scintific in Data.ScientificTitleType.GetAll)
                    {
                        Scintifics.Add(new SpecDataSoursForEdit(Scintific.Str, Scintific.Id));
                    }

                    foreach (var Scintific in DataSourceListbuf)
                    {
                        if (Scintific.IsChecked.Value)
                        {
                            Scintifics.Where(s => s.id == Scintific.id).ToList()[0].IsChecked = true;
                        }
                    }

                    Controller.NavigateTo <ViewModelEditDoctor>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            });
            RevertScintificsCommand = new DelegateCommand(() =>
            {
                CurrentScintificsPanelViewModel.PanelOpened = false;
                Handled = false;
            });



            ClickOnAutoComplete = new DelegateCommand <object>(
                (sender) =>
            {
                var buf = (AutoCompleteBox)sender;

                buf.IsDropDownOpen = true;

                buf.FilterMode = AutoCompleteFilterMode.None;
            }
                );
            MessageBus.Default.Subscribe("UpdateNameOfButtonForEditDoctor", UpdateNameOfButton);
            MessageBus.Default.Subscribe("GetDoctorForEditDoctor", GetCurrentDoctor);
            //Date = DateTime.Now;
            base.HasNavigation = true;

            TextHeader = "Редактирование врача";

            nameOfButton = "К списку врачей";

            SetAllFieldsDefault();
            ToDashboardCommand = new DelegateCommand(
                () =>
            {
                MessageBus.Default.Call("GetDoctorForEditDoctor", this, currentDoctor.Id);
            }
                );

            SaveAndGoDoctorListCommand = new DelegateCommand(
                () =>
            {
                if (TestRequiredFields())
                {
                    Doctor bufDoc     = Data.Doctor.Get(currentDoctor.Id);
                    bufDoc.Name       = Name;
                    bufDoc.Sirname    = Surname;
                    bufDoc.Patronimic = Patronimic;
                    bufDoc.Aditional  = Aditional;

                    bool test = true;
                    foreach (var Category in Data.СategoryType.GetAll)
                    {
                        if (Category.Str == СategoryTypeSelectedText)
                        {
                            test             = false;
                            bufDoc.категория = Category.Id;
                            break;
                        }
                    }
                    if (test)
                    {
                        СategoryType newСategory = new СategoryType();
                        newСategory.Str          = СategoryTypeSelectedText;
                        Data.СategoryType.Add(newСategory);
                        Data.Complete();
                        bufDoc.категория = newСategory.Id;
                        Data.Complete();
                    }
                    // bufDoc.категория = CategorySelectedId;
                    Data.Complete();

                    bool specTestbuf = false;
                    foreach (var specOld in SpecializationsOld)
                    {
                        if (specOld.IsChecked == true)
                        {
                            specTestbuf = false;
                            foreach (var spec in Specializations)
                            {
                                if (specOld.Name == spec.Name && spec.IsChecked == true)
                                {
                                    specTestbuf = true;
                                    break;
                                }
                            }
                            if (specTestbuf == false)
                            {
                                foreach (var doctorSpec in Data.DoctorsSpecializations.GetAll)
                                {
                                    if (doctorSpec.id_doctor == currentDoctor.Id && doctorSpec.id_specialization == specOld.id)
                                    {
                                        Data.DoctorsSpecializations.Remove(doctorSpec);
                                        Data.Complete();

                                        specOld.IsChecked = false;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    //     Data.Complete();
                    foreach (var spec in Specializations)
                    {
                        if (spec.IsChecked == true)
                        {
                            specTestbuf = false;
                            foreach (var specOld in SpecializationsOld)
                            {
                                if (specOld.Name == spec.Name && specOld.IsChecked == true)
                                {
                                    specTestbuf = true;
                                    break;
                                }
                            }
                            if (specTestbuf == false)
                            {
                                DoctorsSpecializations bufDS = new DoctorsSpecializations();
                                bufDS.id_doctor         = currentDoctor.Id;
                                bufDS.id_specialization = spec.id;
                                Data.DoctorsSpecializations.Add(bufDS);
                                Data.Complete();
                            }
                        }
                    }



                    //
                    foreach (var specOld in ScintificsOld)
                    {
                        if (specOld.IsChecked == true)
                        {
                            specTestbuf = false;
                            foreach (var spec in Scintifics)
                            {
                                if (specOld.Name == spec.Name && spec.IsChecked == true)
                                {
                                    specTestbuf = true;
                                    break;
                                }
                            }
                            if (specTestbuf == false)
                            {
                                foreach (var doctorSpec in Data.ScientificTitles.GetAll)
                                {
                                    if (doctorSpec.id_doctor == currentDoctor.Id && doctorSpec.id_title == specOld.id)
                                    {
                                        Data.ScientificTitles.Remove(doctorSpec);
                                        Data.Complete();

                                        specOld.IsChecked = false;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    Data.Complete();
                    foreach (var spec in Scintifics)
                    {
                        if (spec.IsChecked == true)
                        {
                            specTestbuf = false;
                            foreach (var specOld in ScintificsOld)
                            {
                                if (specOld.Name == spec.Name && specOld.IsChecked == true)
                                {
                                    specTestbuf = true;
                                    break;
                                }
                            }
                            if (specTestbuf == false)
                            {
                                ScientificTitles bufDS = new ScientificTitles();
                                bufDS.id_doctor        = currentDoctor.Id;
                                bufDS.id_title         = spec.id;
                                Data.ScientificTitles.Add(bufDS);
                                Data.Complete();
                            }
                        }
                    }

                    //    Data.Complete();

                    MessageBus.Default.Call("OpenDoctors", this, "");
                    Controller.NavigateTo <ViewModelViewDoctors>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            }
                );
            GoToDoctorListCommand = new DelegateCommand(
                () =>
            {
                MessageBus.Default.Call("OpenDoctors", this, "");
                Controller.NavigateTo <ViewModelViewDoctors>();
            }
                );
        }
        private void RefreshDataForDoctors(object sender, object data)
        {
            Name = "";

            Surname = "";

            Patronimic = "";
            Aditional  = "";
            СategoryTypeSelectedText = "";
            Category        = new ObservableCollection <СategoryType>();
            Specializations = new ObservableCollection <SpecDataSours>();
            Scintifics      = new ObservableCollection <SpecDataSours>();

            foreach (var category in Data.СategoryType.GetAll)
            {
                Category.Add(category);
            }

            foreach (var spec in Data.SpecializationType.GetAll)
            {
                Specializations.Add(new SpecDataSours(spec.Str, spec.id_специлизации));
            }

            foreach (var title in Data.ScientificTitleType.GetAll)
            {
                Scintifics.Add(new SpecDataSours(title.Str, title.Id));
            }
            CategorySelectedId    = 0;
            СategoryTypeSelected  = Category[CategorySelectedId];
            GoToDoctorListCommand = new DelegateCommand(
                () =>
            {
                MessageBus.Default.Call("OpenDoctors", this, "");
                Controller.NavigateTo <ViewModelViewDoctors>();
            }
                );
            SaveAndGoDoctorListCommand = new DelegateCommand(
                () =>
            {
                if (TestRequiredFields())
                {
                    currentDoctor = new Doctor();
                    bool test     = true;
                    foreach (var Category in Data.СategoryType.GetAll)
                    {
                        if (Category.Str == СategoryTypeSelectedText)
                        {
                            test = false;
                            currentDoctor.категория = Category.Id;
                            break;
                        }
                    }
                    if (test)
                    {
                        СategoryType newСategory = new СategoryType();
                        newСategory.Str          = СategoryTypeSelectedText;
                        Data.СategoryType.Add(newСategory);
                        Data.Complete();
                        currentDoctor.категория = newСategory.Id;
                    }

                    currentDoctor.Name       = Name;
                    currentDoctor.Sirname    = Surname;
                    currentDoctor.Patronimic = Patronimic;
                    currentDoctor.Aditional  = Aditional;
                    currentDoctor.isEnabled  = true;

                    Data.Doctor.Add(currentDoctor);
                    Data.Complete();
                    foreach (var spec in Specializations)
                    {
                        if (spec.IsChecked == true)
                        {
                            DoctorsSpecializations DoctorSpec = new DoctorsSpecializations();
                            DoctorSpec.id_doctor         = currentDoctor.Id;
                            DoctorSpec.id_specialization = spec.id;
                            Data.DoctorsSpecializations.Add(DoctorSpec);
                            Data.Complete();
                        }
                    }
                    Data.Complete();
                    foreach (var Tytle in Scintifics)
                    {
                        if (Tytle.IsChecked == true)
                        {
                            ScientificTitles DoctorTitle = new ScientificTitles();
                            DoctorTitle.id_doctor        = currentDoctor.Id;
                            DoctorTitle.id_title         = Tytle.id;
                            Data.ScientificTitles.Add(DoctorTitle);
                        }
                    }
                    Data.Complete();
                    MessageBus.Default.Call("OpenDoctors", this, "");
                    Controller.NavigateTo <ViewModelViewDoctors>();
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены");
                }
            }
                );
            //СategoryTypeSelectedText = СategoryTypeSelected.Str;
        }