/// <summary>МЕТОД Заполняем Поля</summary> protected override void MET_LoadPole() { // Наименование документа VirtualPole _Pole = MET_CreateUserPole(8); _Pole.PROP_FormShablon = this; _Pole.PROP_VarId = 1; // Ответ if (PROP_StadNodes == eStadNodes.Old) { _Pole.PROP_Text = MyMet.MET_GetPole(_Pole.PROP_VarId, PRO_StrProtokol); } _Pole.Name = "elePoleShabl_" + _Pole.PROP_VarId; // имя поля PUB_HashPole.Add(_Pole.Name, _Pole); // записываем элемент в очередь // Имя файла _Pole = MET_CreateUserPole(8); _Pole.PROP_FormShablon = this; _Pole.PROP_VarId = 2; // Ответ if (PROP_StadNodes == eStadNodes.Old) { _Pole.PROP_Text = MyMet.MET_GetPole(_Pole.PROP_VarId, PRO_StrProtokol); } _Pole.Name = "elePoleShabl_" + _Pole.PROP_VarId; // имя поля PUB_HashPole.Add(_Pole.Name, _Pole); // записываем элемент в очередь }
} // func lOperInfo /// <summary>Lua Функция. Удаление данных из поля xInfo, таблицы Oper</summary> /// <param name="pVarId">VarId поля с кодом операции</param> /// <param name="pTag">Имя ключа тега</param> /// <returns>Возвращаем успех или не успех добавления/изменения данных</returns> private bool lOperInfoDel(int pVarId, string pTag) { // Находим наше поле VirtualPole _VirtualPole = PUB_Pole.PROP_FormShablon.GetPole(pVarId); // Проверяем на соответствие типу UserPole_MultyList if (_VirtualPole is UserPole_MultyList _Pole) { _Pole.MET_DeleteInfo(pTag); return(true); } return(false); } // func lOperInfo
/// <summary>КОНСТРУКТОР</summary> /// <param name="pPole">Поле с которым работаем</param> public UserWindow_Lua(VirtualPole pPole) { InitializeComponent(); PART_Log.PART_TextBox.MaxHeight = 80; PART_Log.VerticalAlignment = VerticalAlignment.Stretch; // Родительское окно if (Owner == null) { Owner = Application.Current.MainWindow; } // Настраиваем положение окна Left = 0; if (Owner != null) { Top = 15; Height = Owner.Height + Owner.Top - 15; Owner.Left = Width - 15; #if DEBUG // Left = Owner.Left + Owner.Width + 500; #endif } // Находим вопрос шаблона PRI_Pole = pPole; PRI_Document = pPole.PROP_Docum; PRI_Shablon = PRI_Document.PROP_Shablon.Find(x => x.PROP_VarId == pPole.PROP_VarId); this.DataContext = PRI_Shablon; // Настраиваем Lua поле PRI_Regular = @"(lPole|Pole|lMessage|lKbolInfoAdd|lKbolInfoDel|lPolePDate|"; PRI_Regular += "lOperInfo|lOperInfoDel|lRead|lNew|lDateIf|lTimeGosp|lSqlToStr|"; PRI_Regular += "lKbolInfoOms|lLog|lVisiblOn|lVisiblOff|lNecesOn|lNecesOf|"; PRI_Regular += "lTextClear|"; PRI_Regular += "gKorpus|gKL|gFIO|gDR|gUser|gUserName|gPol|gLpu|gOtd|gCodApstac|"; PRI_Regular += "OnCreat|OnChange|OnBeforeSave|OnSave|"; PRI_Regular += "PROP_Text|OnChange|OnBeforeSave|OnSave)"; PART_FCTextBox = new FastColoredTextBox(); PART_FCTextBox.Language = FastColoredTextBoxNS.Language.Lua; PART_FCTextBox.TextChanged += Ts_TextChanged; PART_FCTextBox.WordWrap = true; PART_WindowsFormsHostFCTB.Child = PART_FCTextBox; // Заполняем список вопросов шаблона боковой панели PART_RadListBox.ItemsSource = PRI_Document.PROP_Shablon; PART_RadListBox.SelectedValue = PRI_Shablon; // Делегаты для функции lLog MyGlo.Event_sLuaLog = MET_LogAdd; }
/// <summary>МЕТОД Проверка перед сохранением</summary> public virtual bool MET_Verification() { // Проверяем ответы на правильность заполнений // ReSharper disable once LoopCanBeConvertedToQuery foreach (DictionaryEntry _DiEnt in PUB_HashPole) { VirtualPole _Pole = (VirtualPole)_DiEnt.Value; // наше поле с ответом if (!_Pole.MET_Verification()) // сообщение об ошибки выдает само поле { return(false); } } return(true); }
/// <summary>МЕТОД Отчищаем шаблон</summary> public virtual void MET_Clear() { foreach (DictionaryEntry _DictEn in PUB_HashPole) { try { VirtualPole _Pole = (VirtualPole)_DictEn.Value; // элемент поля _Pole.PROP_Text = _Pole.PROP_DefaultText; // Значение по умолчанию _Pole.PROP_ForegroundText = Brushes.Gray; // Окрашиваем текст в серый цвет (текст по умолчанию) } catch { } } }
} // func lPolePDate /// <summary>Lua Функция. Добавление/изменение данных в поле xInfo, таблицы Oper</summary> /// <param name="pVarId">VarId поля с кодом операции</param> /// <param name="pTag">Имя ключа тега</param> /// <param name="pValue">Значение, по умолчанию, берем из поля</param> /// <returns>Возвращаем успех или не успех добавления/изменения данных</returns> private bool lOperInfo(int pVarId, string pTag, object pValue = null) { // Находим наше поле VirtualPole _VirtualPole = PUB_Pole.PROP_FormShablon.GetPole(pVarId); // Проверяем на соответствие типу UserPole_MultyList if (_VirtualPole is UserPole_MultyList) { // Значение object _Value = pValue ?? PUB_Pole.PROP_Text; UserPole_MultyList _Pole = (UserPole_MultyList)_VirtualPole; _Pole.MET_ChangeInfo(pTag, _Value); return(true); } return(false); } // func lOperInfo
} // func lOperInfo /// <summary>Lua Функция. Расчет времени госпитализации</summary> /// <returns>Возвращаем расчетное время госпитализации</returns> private string lTimeGosp() { // Находим отделение госпитализации VirtualPole _PoleOtd = PUB_Pole.PROP_FormShablon.GetPole(3); // Находим дату госпитализации VirtualPole _PoleDate = PUB_Pole.PROP_FormShablon.GetPole(4); // Время по умолчанию string _Time = "9:00"; if (_PoleOtd.PROP_Text != "" && _PoleDate.PROP_Text != "") { try { int _Otd = int.Parse(_PoleOtd.PROP_Text.Split('.')[0]); _Time = MySql.MET_QueryStr(MyQuery.MET_varTimeGosp(_Otd, _PoleDate.PROP_Text)); } catch { _Time = "9:00"; } } return(_Time); } // func lTimeGosp
/// <summary>МЕТОД Выбираем вопрос</summary> private void MET_SelectedShablon() { PRI_Pole = PRI_Document.PROP_FormShablon.GetPole(PRI_Shablon.PROP_VarId); DataContext = PRI_Shablon; PART_FCTextBox.Text = PRI_Shablon.PROP_xLua; }
/// <summary>КОНСТРУКТОР 2</summary> public UserLua_Standart(VirtualPole pPole) { PRI_Env = PRI_Lua.CreateEnvironment(); PUB_Pole = pPole; MET_RegisterFunction(); }
/// <summary>МЕТОД Формируем Форму Шаблона</summary> public override void MET_CreateForm() { PRI_StackPanel.Orientation = Orientation.Vertical; if (PROP_Docum.PROP_ListShablon == null) { PROP_Docum.PROP_ListShablon = UserListShablon.MET_FactoryListShablon(PROP_TipProtokol.PROP_TipDocum, PRO_NomerShablon); } // Исключение при выполнении запроса к базе try { PUB_HashPole = new SortedList(); // список полей Background = Brushes.GhostWhite; // Если открываем заполненый протокол if (!PROP_NewProtokol) { PRO_StrProtokol = PROP_Docum.PROP_Protokol.PROP_Protokol; PROP_Cod = PROP_Docum.PROP_Protokol.PROP_Cod; // Старый шаблон PROP_StadNodes = eStadNodes.Old; } else // Пытаемся найти последний протокол по KL и коду шаблона { if (MySql.MET_DsAdapterFill(MyQuery.MET_Protokol_Select_8(MyGlo.KL, PRO_NomerShablon, PROP_TipProtokol.PROP_Prefix), PROP_TipProtokol.PROP_Protokol) > 0) { // Новый шаблон, с предыдушими данными PROP_StadNodes = eStadNodes.NewPerw; PRO_StrProtokol = MyGlo.DataSet.Tables[PROP_TipProtokol.PROP_Protokol].Rows[0]["Protokol"].ToString(); } else { // Новый шаблон PROP_StadNodes = eStadNodes.New; } } // ---- Дата осмотра PROP_Format = PROP_Docum.PROP_ListShablon.PROP_MyFormat; VirtualPole _Date = MET_CreateUserPole(3); _Date.PROP_Necessarily = true; _Date.PROP_Description = PROP_Format.MET_If("pDateT") ? PROP_Format.PROP_Value["pDateT"].ToString() : "Дата"; // Если старый протокол if (!PROP_NewProtokol) { _Date.PROP_Text = PROP_Docum.PROP_Protokol.PROP_pDate.ToString(); } else { // Если новый шаблон if (PROP_Format.MET_If("pDateD")) { switch (PROP_Format.PROP_Value["pDateD"].ToString()) { case "pol": // если посещение поликлиники _Date.PROP_Text = MyMet.MET_ParseDat(MyGlo.HashAPAC["DP"]).ToString(); break; default: _Date.PROP_Text = DateTime.Today.ToString(); // текущий день break; } } else { _Date.PROP_Text = DateTime.Today.ToString(); // текущий день } } _Date.PROP_DefaultText = DateTime.Today.ToString(); // начальное значение _Date.PROP_ValueMin = Convert.ToDateTime("01/01/2011"); // минимальное число - 2011 год _Date.Name = "DateOsmotr"; // имя поля _Date.PROP_FormShablon = this; // ссылка на форму PUB_HashPole.Add(_Date.Name, _Date); // записываем элемент в очередь PRI_StackPanel.Children.Add(_Date); // добавляем элемент на форму // Перебераем все вопросы MET_LoadPole(); // Деактивируем кнопку "Сохранить" PROP_EditShablon = false; // Всё шаблон создан! PROP_Created = true; } catch { // ignored } }
/// <summary>МЕТОД Заполняем Поля</summary> protected override void MET_LoadPole() { // Пробегаемся по вопросам шаблона foreach (UserShablon _Shablon in PROP_Docum.PROP_Shablon) { try { MyFormat _Format = new MyFormat(_Shablon.PROP_xFormat); // формат // Если поле нужно проппустить, то следующее поле if (_Format.MET_If("hide") || _Format.MET_If("old")) { continue; } VirtualPole _Pole = MET_CreateUserPole(_Shablon.PROP_Type); // создаем поле, соответствующего типа _Pole.PROP_FormShablon = this; // ссылка на форму _Pole.PROP_Shablon = _Shablon.PROP_ID; // номер шаблона, как минимум нужен для Картинок _Pole.PROP_Description = _Shablon.PROP_Name; // вопрос _Pole.PROP_VarId = _Shablon.PROP_VarId; // номер индификатора VarId _Pole.PROP_Format = _Format; // формат поля _Pole.PROP_Necessarily = _Format.MET_If("nec"); // обязательное поле _Pole.IsEnabled = !_Format.MET_If("disab"); // запрет на редактирование _Pole.PROP_DefaultText = MET_ReplaceProp(_Shablon.PROP_ValueStart, PRO_NomerShablon, _Pole.PROP_VarId); // Значение ответа по умолчанию // Ответ if (PROP_StadNodes == eStadNodes.New || (PROP_StadNodes == eStadNodes.NewPerw && _Format.MET_If("nprev"))) { // Значения по умолчанию _Pole.PROP_Text = _Pole.PROP_DefaultText; } else { // Значения из протокола (либо eStadNodes.Old, либо eStadNodes.NewPerw) _Pole.PROP_Text = MyMet.MET_GetPole(_Pole.PROP_VarId, PRO_StrProtokol); } // Если новый протокол, то текст серый (значение по умолчанию) if (PROP_NewProtokol) { _Pole.PROP_ForegroundText = Brushes.Gray; } _Pole.Name = "elePoleShabl_" + _Pole.PROP_VarId; // имя поля // Lua if (!string.IsNullOrEmpty(_Shablon.PROP_xLua)) { _Pole.PROP_Lua = new UserLua_Standart(_Pole) { PROP_ChankText = _Shablon.PROP_xLua }; _Pole.PROP_Lua.MET_StartLua(); } PUB_HashPole.Add(_Pole.Name, _Pole); // записываем элемент в очередь // Указатель на принадлежность к разделу string _Maska = _Shablon.PROP_Maska; // Добавляем элемент в ... if (_Maska == "") { PRI_StackPanel.Children.Add(_Pole); // добавляем элемент на форму } else { ((VirtualPole)PUB_HashPole["elePoleShabl_" + _Maska]).MET_AddElement(_Pole); } // добавляем элемент в родительское поле _Pole.MET_Inicial(); // инициализация поля (если есть) } catch { // ignored } } Children.Add(PRI_StackPanel); // Ещё раз пробегаем по полям и запускаем Lua код foreach (DictionaryEntry _DiEnt in PUB_HashPole) { var _PoleLua = (VirtualPole)_DiEnt.Value; _PoleLua?.PROP_Lua?.MET_OnCreat(); } }
/// <summary>МЕТОД Формируем поля</summary> /// <param name="pVirtualPole">Поле</param> /// <param name="pText">Текст ответа</param> private void MET_CreatePole(VirtualPole pVirtualPole, string pText) { pVirtualPole.PROP_Text = pText; pVirtualPole.PROP_DefaultText = pText; }