示例#1
0
 ///<summary>МЕТОД Инициализация отчета</summary>
 /// <param name="pNodes">Ветка</param>
 public override VirtualOtchet MET_Inizial(VirtualNodes pNodes)
 {
     // Если нужно формировать отчет
     if (PROP_NewCreate)
     {
         base.MET_Inizial(pNodes);
         // Список элементов
         PRO_PoleHistory = new Queue();
         // Чистим
         Blocks.Clear();
         // Формируем отчет
         MET_Otchet();
         // Добавляем последний параграф в блок
         Blocks.Add(PRO_Paragraph);
         // Помечаем, что больше его формировать не надо
         PROP_NewCreate = false;
         // Если всего один отчет, то сразу же его показываем
         if (PRO_PoleHistory.Count == 1)
         {
             UserPole_History _Pole = (UserPole_History)PRO_PoleHistory.Peek();
             // Окрываем эспандер
             _Pole.PROP_IsExpanded = true;
         }
     }
     return(this);
 }
示例#2
0
        /// <summary>МЕТОД Заполняем Протоколы</summary>
        /// <param name="pPole">Наше поле</param>
        public void MET_Protokol(UserPole_History pPole)
        {
            // Обязательно, если экспандер содержит текст, а не под-вкладки
            pPole.PROP_IsTexted = true;
            // Документ
            FlowDocument _FlowDocument = new FlowDocument();

            _FlowDocument.Background = Brushes.White;
            // Просмоторщик
            pPole.PUB_RichTextBox = new RichTextBox();
            RichTextBox _RichTextBox = pPole.PUB_RichTextBox;

            _RichTextBox.Document = _FlowDocument;
            // Добавляем документ в экспандер
            pPole.MET_AddEle(_RichTextBox);
            // Привязываем к полю Документ,  таблицы ListShablon и  Protokol, Отчет
            pPole.PROP_DocumHistory.PROP_ListShablon = UserListShablon.MET_FactoryListShablon(pPole.PROP_Type, pPole.PROP_NumerShablon);
            pPole.PROP_DocumHistory.PROP_Otchet      = new UserOtchet_Shablon {
                PROP_Docum = pPole.PROP_DocumHistory
            };
            // Добавляем отчет к документу
            _FlowDocument.Blocks.Add(pPole.PROP_DocumHistory.PROP_Otchet.MET_Inizial());
            // Отключаем делегат
            pPole.Event_OpenNewPoleHistory = null;
        }
示例#3
0
        /// <summary>МЕТОД Заполняем экспандер при первом открытии Отчетов</summary>
        /// <param name="pPole">Наше поле</param>
        public virtual void MET_OpenOtch(UserPole_History pPole)
        {
            // Документ
            FlowDocument _FlowDocument = new FlowDocument();

            // Просмоторщик
            pPole.PUB_RichTextBox = new RichTextBox();
            RichTextBox _RichTextBox = pPole.PUB_RichTextBox;

            _RichTextBox.Document = _FlowDocument;
            // locRichTextBox.IsReadOnly = true;
            // Добавляем документ в экспандер
            pPole.MET_AddEle(_RichTextBox);
            PRO_Paragraph = new Paragraph();
            // Создаем временный поток для копирования
            using (MemoryStream _Stream = new MemoryStream())
            {
                // Выделяем область которую хотим копировать
                TextRange _TextRange = new TextRange(pPole.PROP_Nodes.PROP_Docum.PROP_Otchet.MET_Inizial(pPole.PROP_Nodes).ContentStart,
                                                     pPole.PROP_Nodes.PROP_Docum.PROP_Otchet.MET_Inizial(pPole.PROP_Nodes).ContentEnd);
                // Копируем текст в поток
                _TextRange.Save(_Stream, DataFormats.Xaml);
                _Stream.Position = 0;
                // Новый пораграф (что бы был отступ между документами)
                _FlowDocument.Blocks.Add(new Paragraph());
                // Выделяем концовку, куда хотим вставить текст
                _TextRange = new TextRange(_FlowDocument.ContentEnd, _FlowDocument.ContentEnd);
                // Вставляем текст в поток просмотра печати
                _TextRange.Load(_Stream, DataFormats.Xaml);
            }
            // Отключаем делегат
            pPole.Event_OpenNewPoleHistory = null;
        }
示例#4
0
        /// <summary>МЕТОД Создаем поле истории результата исседования КДЛ</summary>
        /// <param name="pPole">Родительское поле</param>
        private UserPole_History MET_GreatKDL(UserPole_History pPole)
        {
            // Заполняем список шаблонов
            MySql.MET_DsAdapterFill(MyQuery.MET_History_Select_4(MET_PoleInt("kdl")), "HistoryKDL");
            PRO_RowShablon = MyGlo.DataSet.Tables["HistoryKDL"].Rows[0];
            // Настраиваем поле документа
            UserPole_History _Pole = new UserPole_History();

            _Pole.PROP_Date       = MET_PoleDat("pDate");
            _Pole.PROP_Document   = MET_PoleStr("NameKr");
            _Pole.PROP_Dp         = MET_PoleDat("pDate");
            _Pole.PROP_Kdl        = MET_PoleStr("Indicator");
            _Pole.PROP_Metca      = " (" + _Pole.PROP_Kdl + ")";
            _Pole.PROP_Background = Brushes.LightYellow;
            // Окрашиваем поле в зависимости от результата
            MET_ColorKDL(_Pole);
            _Pole.PROP_Type     = eTipDocum.Kdl;
            _Pole.PROP_IsTexted = true;
            // Находим иконку
            string _Icon = MET_PoleStr("Icon") != "" ? MET_PoleStr("Icon") : "mnOneOsmotr";

            _Pole.MET_LoadIcon(_Icon);
            _Pole.PROP_Cod          = MET_PoleInt("Cod");
            _Pole.PROP_CodApstac    = pPole.PROP_CodApstac;
            _Pole.PROP_NumerShablon = MET_PoleInt("NumShablon");
            _Pole.PROP_Kdl          = "1";
            _Pole.PROP_DocumHistory = new UserDocument(_Pole.PROP_Type);
            _Pole.PROP_IsDelete     = MET_PoleInt("xDelete") == 1;
            _Pole.PROP_DocumHistory.PROP_Protokol = UserProtokol.MET_FactoryProtokol(_Pole.PROP_Type, (int)_Pole.PROP_Cod);
            _Pole.PROP_Vrach = _Pole.PROP_DocumHistory.PROP_Protokol.PROP_UserName;
            _Pole.MET_Inicial();
            // Делегат при открытии документа
            _Pole.Event_OpenNewPoleHistory = MET_Protokol;
            return(_Pole);
        }
示例#5
0
 /// <summary>МЕТОД Заполняем экспандер при первом открытии Стационара</summary>
 /// <param name="pPole">Наше поле</param>
 private void MET_OpenStac(UserPole_History pPole)
 {
     // Заполняем список шаблонов
     MySql.MET_DsAdapterFill(MyQuery.MET_History_Select_2(pPole.PROP_Cod), "History");
     foreach (DataRow _Row in MyGlo.DataSet.Tables["History"].Rows)
     {
         PRO_RowShablon = _Row;
         // Настраиваем поле документа
         UserPole_History _Pole = new UserPole_History();
         _Pole.PROP_Date       = MET_PoleDat("pDate");
         _Pole.PROP_Document   = MET_PoleStr("NameKr");
         _Pole.PROP_Dp         = MET_PoleDat("pDate");
         _Pole.Margin          = new Thickness(5, 0, 0, 0);
         _Pole.PROP_Background = Brushes.LightYellow;
         _Pole.PROP_Type       = eTipDocum.Stac;
         _Pole.PROP_IsTexted   = true;
         // Находим иконку
         string _Icon = MET_PoleStr("Icon") != "" ? MET_PoleStr("Icon") : "mnOneOsmotr";
         _Pole.MET_LoadIcon(_Icon);
         _Pole.PROP_Cod          = MET_PoleInt("Cod");
         _Pole.PROP_CodApstac    = pPole.PROP_CodApstac;
         _Pole.PROP_NumerShablon = MET_PoleInt("NumShablon");
         _Pole.PROP_Kdl          = MET_PoleStr("kdl");
         _Pole.PROP_DocumHistory = new UserDocument(_Pole.PROP_Type);
         _Pole.PROP_DocumHistory.PROP_Protokol = UserProtokol.MET_FactoryProtokol(_Pole.PROP_Type, (int)_Pole.PROP_Cod);
         _Pole.PROP_Vrach = _Pole.PROP_DocumHistory.PROP_Protokol.PROP_UserName;
         _Pole.MET_Inicial();
         // Делегат при открытии документа
         _Pole.Event_OpenNewPoleHistory = MET_Protokol;
         // Если запрет для просмотра
         if (PUB_Ban && MET_PoleInt("Dostup") == 0)
         {
             _Pole.PROP_Description         = "(Доступ Закрыт)   ";
             _Pole.PROP_Background          = Brushes.GhostWhite;
             _Pole.IsEnabled                = false;
             _Pole.Event_OpenNewPoleHistory = null;
         }
         _Pole.PROP_IsDelete = MET_PoleInt("xDelete") == 1;
         pPole.MET_AddEle(_Pole);
         if (_Pole.PROP_Kdl != "")
         {
             var _PoleKDL = MET_GreatKDL(_Pole);
             _PoleKDL.Margin = new Thickness(5, 0, 0, 0);
             // Добавляем в очередь
             pPole.MET_AddEle(_PoleKDL);
         }
     }
     // Отключаем делегат
     pPole.Event_OpenNewPoleHistory = null;
 }
示例#6
0
        /// <summary>МЕТОД Формируем отчет</summary>
        protected override void MET_Otchet()
        {
            PRO_Paragraph = new Paragraph();
            // Перебераем дочерние ветки и выводим их
            MET_OtchVet(PROP_Nodes);
            // Сортировка, с помощью промежуточных массиввов
            UserPole_History[] _mHistories = new UserPole_History[PRO_PoleHistory.Count];
            PRO_PoleHistory.CopyTo(_mHistories, 0);
            var _Protokols = _mHistories.OrderBy(x => Convert.ToDateTime(x.PROP_Dp)); //.ThenBy(x => x.PROP_NumerShablon);

            // Чистим очередь
            PRO_PoleHistory.Clear();
            // Выводим протокол на экран и запоминаем его в очередь
            foreach (var _Protokol in _Protokols)
            {
                PRO_PoleHistory.Enqueue(_Protokol);
                PRO_Paragraph.Inlines.Add(_Protokol);
            }
        }
示例#7
0
 /// <summary>МЕТОД Формируем отчет</summary>
 /// <param name="pNode">Ветка</param>
 private void MET_OtchVet(VirtualNodes pNode)
 {
     // Перебераем дочерние ветки и выводим их
     foreach (VirtualNodes _Node in pNode.Items)
     {
         // Если есть подвкладки, то перебераем их
         if (_Node.Items.Count > 0)
         {
             MET_OtchVet(_Node);
         }
         // Формируем поля истории
         if (_Node.PROP_Data > DateTime.MinValue)
         {
             // Настраиваем поле документа
             UserPole_History _Pole = new UserPole_History();
             _Pole.PROP_Dp           = _Node.PROP_Data.ToString().Substring(0, 10);
             _Pole.PROP_Date         = _Pole.PROP_Dp;
             _Pole.PROP_NumerShablon = _Node.PROP_shaNomerShablon;
             _Pole.PROP_DocumHistory = _Node.PROP_Docum;
             _Pole.PROP_Cod          = (decimal?)_Node.PROP_Docum?.PROP_Protokol?.PROP_Cod ?? 0;
             _Pole.PROP_Vrach        = _Node.PROP_Docum?.PROP_Protokol?.PROP_UserName;
             // Название протокола
             _Pole.PROP_Document   = _Node.PROP_TextDefault;
             _Pole.Margin          = new Thickness(5, 0, 0, 0);
             _Pole.PROP_Background = Brushes.LightYellow;
             _Pole.PROP_IsDelete   = _Node.PROP_Docum?.PROP_Protokol?.PROP_xDelete == 1;
             // Находим иконку
             _Pole.PROP_BitmapImage = (BitmapImage)_Node.PROP_ImageSource;
             // Обязательно, если экспандер содержит текст, а не подвкладки
             _Pole.PROP_IsTexted = true;
             _Pole.PROP_Nodes    = _Node;
             _Pole.MET_Inicial();
             // Делегат при открытии документа
             _Pole.Event_OpenNewPoleHistory = MET_OpenOtch;
             // Добавляем поле в очередь
             PRO_PoleHistory.Enqueue(_Pole);
             // Настраиваем дополнительные параметры для подветки
             MET_PropertyPoleAdd(_Pole);
             _Node.PROP_Docum.PROP_UserPole_History = _Pole;
         }
     }
 }
示例#8
0
        /// <summary>МЕТОД Окрашиваем поле в зависимости от результата КДЛ</summary>
        /// <param name="pPole">Поле которое окрашиваем</param>
        private void MET_ColorKDL(UserPole_History pPole)
        {
            Color _Color;

            switch (pPole.PROP_Kdl)
            {
            case "без патологии":
                _Color = Colors.LightGreen;
                break;

            case "патология":
                _Color = Colors.Tomato;
                break;

            default:
                _Color = Colors.Yellow;
                break;
            }
            LinearGradientBrush _myBrush = new LinearGradientBrush(((SolidColorBrush)pPole.PROP_Background).Color, _Color, new Point(0.85, 0.4), new Point(1.0, 0.4));

            pPole.PROP_Background = _myBrush;
        }
示例#9
0
 /// <summary>МЕТОД Настраиваем дополнительные параметры для подветки</summary>
 protected virtual void MET_PropertyPoleAdd(UserPole_History pPole)
 {
 }
示例#10
0
 /// <summary>МЕТОД Открываем PDF файл при открытии экспандера</summary>
 /// <param name="pPole">Наше поле</param>
 public override void MET_OpenOtch(UserPole_History pPole)
 {
     MyGlo.Event_OpenPdfNode?.Invoke(pPole.PROP_Nodes);
     pPole.PART_Expander.IsExpanded = false; // и тут же закрываем, что бы можно было опять открыть
 }
示例#11
0
 /// <summary>МЕТОД Настраиваем дополнительные параметры для подветки</summary>
 protected override void MET_PropertyPoleAdd(UserPole_History pPole)
 {
     pPole.PROP_Background = Brushes.Linen;
 }
示例#12
0
        /// <summary>МЕТОД Формируем отчет История болезни</summary>
        protected override void MET_Otchet()
        {
            PRO_Paragraph = new Paragraph();
            MyGlo.HashOtchet.Add("eleTVItem_History", this);

            // Добавляем кнопки фильтра истории
            StackPanel _Panel = new StackPanel();

            _Panel.Orientation = Orientation.Horizontal;
            PRO_Paragraph.Inlines.Add(_Panel);
            Button _ButtonSort = new Button();
            Image  _Image      = new Image();

            _Image.Height         = 20;
            _Image.Width          = 20;
            _Image.Source         = (BitmapImage)FindResource("mnGreenUp");
            _ButtonSort.Content   = _Image;
            _ButtonSort.ToolTip   = "Меняет сортировку по дате посещения на обратную";
            _ButtonSort.Focusable = false;
            _ButtonSort.Tag       = 1;
            _ButtonSort.Click    += PART_ButtonSort_Click;
            _Panel.Children.Add(_ButtonSort);
            Label _LabelFiltr = new Label();

            _LabelFiltr.Content           = "Фильтр по:";
            _LabelFiltr.VerticalAlignment = VerticalAlignment.Center;
            _Panel.Children.Add(_LabelFiltr);
            RadioButton _ButtonAll = new RadioButton();

            _ButtonAll.Content   = "Все";
            _ButtonAll.ToolTip   = "Отображает Все посещения";
            _ButtonAll.Margin    = new Thickness(5);
            _ButtonAll.IsChecked = true;
            _ButtonAll.Checked  += PART_RadioButton_Checked;
            _Panel.Children.Add(_ButtonAll);
            RadioButton _ButtonIssl = new RadioButton();

            _ButtonIssl.Content  = "Параклиника";
            _ButtonIssl.ToolTip  = "Отображает только посещения в Параклинику";
            _ButtonIssl.Margin   = new Thickness(5);
            _ButtonIssl.Checked += PART_RadioButton_Checked;
            _Panel.Children.Add(_ButtonIssl);
            RadioButton _ButtonStac = new RadioButton();

            _ButtonStac.Content  = "Стационар";
            _ButtonStac.ToolTip  = "Отображает только посещения Стационара";
            _ButtonStac.Margin   = new Thickness(5);
            _ButtonStac.Checked += PART_RadioButton_Checked;
            _Panel.Children.Add(_ButtonStac);
            RadioButton _ButtonPol = new RadioButton();

            _ButtonPol.Content  = "Поликлиника";
            _ButtonPol.ToolTip  = "Отображает только посещения Поликлиники";
            _ButtonPol.Margin   = new Thickness(5);
            _ButtonPol.Checked += PART_RadioButton_Checked;
            _Panel.Children.Add(_ButtonPol);
            RadioButton _ButtonKdl = new RadioButton();

            _ButtonKdl.Content = "Диагностика";
            _ButtonKdl.ToolTip = "     Отображает только те посещения,\n" +
                                 "в которых есть результат Диагностических исследований\n" +
                                 "(пока только Гистологии, Цитологии)";
            _ButtonKdl.Margin   = new Thickness(5);
            _ButtonKdl.Checked += PART_RadioButton_Checked;
            _Panel.Children.Add(_ButtonKdl);
            PRO_Paragraph.Inlines.Add(new LineBreak());                         // разрыв строки
            // Заполняем список шаблонов
            MySql.MET_DsAdapterFill(MyQuery.MET_History_Select_1(MyGlo.KL), "History");
            foreach (DataRow _Row in MyGlo.DataSet.Tables["History"].Rows)
            {
                PRO_RowShablon = _Row;
                UserPole_History _Pole = new UserPole_History();
                string           _Icon = "";
                // Тип поля
                _Pole.PROP_Type = (eTipDocum)MET_PoleInt("Nom");
                // Код документа
                _Pole.PROP_Cod       = MET_PoleDec("Cod");
                _Pole.PROP_Vrach     = MET_PoleStr("Vr");
                _Pole.PROP_Dp        = MET_PoleDat("Dp");
                _Pole.PROP_Diag      = MET_PoleStr("D");
                _Pole.PROP_Profil    = MET_PoleStr("Profil");
                _Pole.PROP_CodApstac = MET_PoleDec("CodApstac");
                _Pole.PROP_Kdl       = MET_PoleStr("kdl");
                _Pole.PROP_IsDelete  = MET_PoleInt("xDelete") == 1;
                _Pole.PROP_xLog      = MET_PoleStr("xLog");
                // В зависимости от типа: поликлинника/стационар/параклиника
                switch (_Pole.PROP_Type)
                {
                case eTipDocum.Pol:
                    _Icon               = "mnPosPolikl";
                    _Pole.PROP_Date     = MET_PoleDat("Dp");
                    _Pole.PROP_Document = MET_PoleStr("Profil");
                    _Pole.PROP_Vrach    = MET_PoleStr("Vr");
                    _Pole.PROP_Diag     = MET_PoleStr("D");
                    // Цвет
                    if (MET_PoleInt("pCount") > 0)
                    {
                        _Pole.PROP_Background = Brushes.Azure;
                    }
                    // Тип посещения (разовое, обращение)
                    _Pole.PROP_Metca = MET_PoleStr("Metka");
                    // Если нет протоколов, то
                    if (MET_PoleInt("pCount") == 0)
                    {
                        _Pole.PROP_Metca += " (без протоколов)";
                        _Pole.IsEnabled   = false;
                    }
                    // Ставим значек консилиум
                    if (MET_PoleStr("ImageInform") == "консилиум")
                    {
                        _Pole.MET_LoadIconInform("mnKons", "Наличие консилиума");
                    }
                    _Pole.Event_OpenNewPoleHistory = MET_OpenPolicl;
                    break;

                case eTipDocum.Stac:
                    _Icon = MET_PoleStr("ImageInform");
                    string _Dk = MET_PoleDat("Dk");
                    if (_Dk == "")
                    {
                        _Dk = "(по сегодня)";
                    }
                    _Pole.PROP_Date     = MET_PoleDat("Dp") + " - " + _Dk;
                    _Pole.PROP_Document = MET_PoleStr("Profil");
                    _Pole.PROP_Vrach    = MET_PoleStr("Vr");
                    _Pole.PROP_Diag     = MET_PoleStr("D");
                    // Цвет
                    if (MET_PoleInt("pCount") > 0)
                    {
                        _Pole.PROP_Background = Brushes.AliceBlue;
                    }
                    // Если нет протоколов, то
                    if (MET_PoleInt("pCount") == 0)
                    {
                        _Pole.PROP_Metca = "(без протоколов)";
                        _Pole.IsEnabled  = false;
                    }
                    _Pole.Event_OpenNewPoleHistory = MET_OpenStac;
                    break;

                case eTipDocum.Paracl:
                    _Icon                   = "mnParacl";
                    _Pole.PROP_Date         = MET_PoleDat("Dp");
                    _Pole.PROP_Document     = MET_PoleStr("Profil");
                    _Pole.PROP_Vrach        = MET_PoleStr("Vr");
                    _Pole.PROP_Background   = Brushes.BlanchedAlmond;
                    _Pole.PROP_NumerShablon = MET_PoleInt("pCount");
                    _Pole.PROP_IsTexted     = true;
                    _Pole.PROP_DocumHistory = new UserDocument(_Pole.PROP_Type);
                    _Pole.PROP_DocumHistory.PROP_Protokol = UserProtokol.MET_FactoryProtokol(_Pole.PROP_Type, (int)_Pole.PROP_Cod);
                    _Pole.MET_Inicial();
                    _Pole.Event_OpenNewPoleHistory = MET_Protokol;
                    // Костыль для физиологов
                    if (_Pole.PROP_NumerShablon > 300 & _Pole.PROP_NumerShablon < 400)
                    {
                        _Icon = "mnPhysiology";
                        _Pole.PROP_Background = Brushes.LightYellow;
                    }
                    break;
                }
                // Иконка
                _Pole.MET_LoadIcon(_Icon);
                // Если есть результат КДЛ, то окрашиваем это поле в зависимости от результата
                if (_Pole.PROP_Kdl != "" && _Pole.PROP_Type != eTipDocum.Paracl)
                {
                    MET_ColorKDL(_Pole);
                }
                // Добавляем в очередь
                PRO_PoleHistory.Add(_Pole);
                // Добавляем поле в параграф
                PRO_Paragraph.Inlines.Add(_Pole);
                if (_Pole.PROP_Kdl != "" && _Pole.PROP_Type == eTipDocum.Paracl)
                {
                    var _KDL = MET_GreatKDL(_Pole);
                    // Добавляем в очередь
                    PRO_PoleHistory.Add(_KDL);
                    // Добавляем поле в параграф
                    PRO_Paragraph.Inlines.Add(_KDL);
                }
                //PRO_Paragraph.Inlines.Add(new LineBreak());                     // разрыв строки
            }
        }