/// <summary> /// Возвращает последнюю версию переданного шаблона /// </summary> /// <param name="p_ChildTemplate">Шаблон</param> /// <returns></returns> internal Cl_Template f_GetActualTemplate(Cl_Template p_ChildTemplate) { if (p_ChildTemplate == null) { return(null); } Cl_Template tmpl = m_DataContextMegaTemplate.p_Templates.Where(e => e.p_TemplateID == p_ChildTemplate.p_TemplateID).OrderByDescending(d => d.p_Version).FirstOrDefault(); if (tmpl != null && p_ChildTemplate.p_ID != tmpl.p_ID) { return(tmpl); } return(p_ChildTemplate); }
/// <summary>Загрузка полного списка элементов шаблона</summary> public void f_LoadTemplatesElements(Cl_Template a_Template) { if (a_Template != null) { if (a_Template.p_TemplateElements == null) { var elements = m_DataContextMegaTemplate.p_TemplatesElements.Include(te => te.p_ChildElement).Include(te => te.p_ChildElement.p_ParamsValues).Include(te => te.p_ChildElement.p_PartAgeNorms).Include(te => te.p_ChildTemplate) .Where(t => t.p_TemplateID == a_Template.p_ID).OrderBy(t => t.p_Index).ToArray(); foreach (var el in elements) { f_RecursiveLoadTE(el.p_ChildTemplate); } } } }
public Cl_Template[] f_GetConflictTemplates(Cl_Template a_Template) { var templates = new List <Cl_Template>(); if (a_Template == null) { return(templates.ToArray()); } var templatesElements = Cl_App.m_DataContext.p_TemplatesElements.Include(te => te.p_Template).Where(te => te.p_ChildTemplateID == a_Template.p_ID).ToArray(); foreach (var te in templatesElements) { templates.Add(te.p_Template); templates.AddRange(f_GetConflictTemplates(te.p_Template)); } return(templates.ToArray()); }
/// <summary>Рекурсивная загрузка списка элементов шаблона</summary> private void f_RecursiveLoadTE(Cl_Template a_Template) { if (a_Template != null) { var tes = m_DataContextMegaTemplate.Entry(a_Template).Collection(d => d.p_TemplateElements); if (!tes.IsLoaded) { tes.Load(); } if (a_Template.p_TemplateElements != null) { foreach (var te in a_Template.p_TemplateElements) { m_DataContextMegaTemplate.Entry(te).Reference(d => d.p_ChildTemplate).Load(); f_RecursiveLoadTE(te.p_ChildTemplate); m_DataContextMegaTemplate.Entry(te).Reference(d => d.p_ChildElement).Query().Include(p => p.p_ParamsValues).Include(p => p.p_PartAgeNorms).Load(); } } } }
private int f_GetHeight(Cl_Template a_Template) { if (a_Template != null && a_Template.p_TemplateElements != null) { int height = 0; foreach (var te in a_Template.p_TemplateElements) { if (te.p_ChildTemplate != null) { height += f_GetHeight(te.p_ChildTemplate); } else if (te.p_ChildElement != null) { height += Ctrl_Element.m_ElementHeight; } } return(height); } return(Ctrl_Element.m_ElementHeight); }
/// <summary>Получение полного списка элемента в шаблоне</summary> public Cl_Element[] f_GetElements(Cl_Template a_Template) { var elements = new List <Cl_Element>(); if (a_Template == null) { return(elements.ToArray()); } if (a_Template.p_TemplateElements == null) { f_LoadTemplatesElements(a_Template); } foreach (var te in a_Template.p_TemplateElements) { if (te.p_ChildElement != null) { elements.Add(te.p_ChildElement); } elements.AddRange(f_GetElements(te.p_ChildTemplate)); } return(elements.ToArray()); }
internal bool f_IsActualElementsOnTemplate(Cl_Template template) { bool defNewElements = false; bool defNewTemplate = false; if (template == null) { return(false); } Cl_Template actTemplate = this.f_GetActualTemplate(template); defNewTemplate = actTemplate.p_ID != template.p_ID; if (template.p_TemplateElements == null || template.p_TemplateElements.Count == 0) { return(true); } foreach (Cl_TemplateElement item in template.p_TemplateElements) { if (item.p_ChildElement != null) { if (this.f_IsActualElement(item.p_ChildElement) == false) { defNewElements = true; break; } } if (item.p_ChildTemplate != null) { return(this.f_IsActualElementsOnTemplate(item.p_ChildTemplate)); } } return(defNewTemplate == false && defNewElements == false); }
protected bool f_HasElement(Cl_Template a_Template) { foreach (I_Element item in Items) { if (item is Ctrl_Element) { var el = (Ctrl_Element)item; if (a_Template.f_HasElement(el.p_Element)) { return(true); } } else if (item is Ctrl_Template) { var tpl = (Ctrl_Template)item; if (a_Template.f_HasElement(tpl.p_Template) || tpl.p_Template.p_TemplateID == a_Template.p_TemplateID) { return(true); } } } return(false); }
public void f_SetTemplate(Cl_Template a_Template) { if (a_Template == null) { return; } p_EditingTemplate = a_Template; if (p_EditingTemplate.p_Version == 0) { ctrl_Version.Text = "Черновик"; } else { ctrl_Version.Text = p_EditingTemplate.p_Version.ToString(); } Cl_TemplatesFacade.f_GetInstance().f_LoadTemplatesElements(a_Template); m_Log.f_SetEntity(a_Template); if (a_Template.p_TemplateElements != null) { ctrl_EditorPanel.f_SetTemplatesElements(a_Template.p_TemplateElements.ToArray()); } }
private void f_TemplateNew(Cl_Template.E_TemplateType a_TemplateType) { using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { Cl_EntityLog eLog = new Cl_EntityLog(); Cl_Template newTemplate = (Cl_Template)Activator.CreateInstance(typeof(Cl_Template)); eLog.f_SetEntity(newTemplate); Cl_Group group = null; if (p_SelectedGroup != null && p_SelectedGroup.p_Group != null) { group = p_SelectedGroup.p_Group; } Dlg_EditorTemplate dlg = new Dlg_EditorTemplate(); dlg.ctrlPCategories.Enabled = a_TemplateType == Cl_Template.E_TemplateType.Template; if (a_TemplateType == Cl_Template.E_TemplateType.Template) { dlg.Text = "Новый шаблон"; } else if (a_TemplateType == Cl_Template.E_TemplateType.Block) { dlg.Text = "Новый блок"; } else if (a_TemplateType == Cl_Template.E_TemplateType.Table) { dlg.Text = "Новая таблица"; } if (group != null) { newTemplate.p_ParentGroup = p_SelectedGroup.p_Group; dlg.ctrl_LGroupValue.Text = p_SelectedGroup.p_Group.p_Name; } if (dlg.ShowDialog() != DialogResult.OK) { return; } newTemplate.p_Name = dlg.ctrl_TBName.Text; newTemplate.p_Title = dlg.ctrlTitle.Text; newTemplate.p_Type = a_TemplateType; if (a_TemplateType == Cl_Template.E_TemplateType.Template) { var catTotal = (Cl_Category)dlg.ctrlCategoriesTotal.SelectedItem; newTemplate.p_CategoryTotalID = catTotal.p_ID; newTemplate.p_CategoryTotal = catTotal; var catClinic = (Cl_Category)dlg.ctrlCategoriesClinic.SelectedItem; newTemplate.p_CategoryClinicID = catClinic.p_ID; newTemplate.p_CategoryClinic = catClinic; } Cl_App.m_DataContext.p_Templates.Add(newTemplate); Cl_App.m_DataContext.SaveChanges(); newTemplate.p_TemplateID = newTemplate.p_ID; Cl_App.m_DataContext.SaveChanges(); eLog.f_SaveEntity(newTemplate); transaction.Commit(); SelectedNode.Nodes.Add(new Ctrl_TreeNodeTemplate(group, newTemplate)); } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Tree", "При создании нового шаблона произошла ошибка", ex, null, null); return; } } }
private void ctrl_TemplateDelete_Click(object sender, EventArgs e) { if (p_SelectedTemplate == null && p_SelectedTemplate.p_Template == null) { return; } string typeName = "шаблон"; string typeNameR = "шаблона"; if (p_SelectedTemplate.p_Template.p_Type == Cl_Template.E_TemplateType.Block) { typeName = "блок"; typeNameR = "блока"; } else if (p_SelectedTemplate.p_Template.p_Type == Cl_Template.E_TemplateType.Table) { typeName = "таблицу"; typeNameR = "таблицы"; } if (MessageBox.Show($"Удалить \"{typeName} {p_SelectedTemplate.p_Template.p_Name}\"?", $"Удаление {typeNameR}", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { Cl_EntityLog eLog = new Cl_EntityLog(); var els = Cl_App.m_DataContext.p_Templates.Where(el => el.p_TemplateID == p_SelectedTemplate.p_Template.p_TemplateID).OrderByDescending(v => v.p_Version); if (els != null) { Cl_Template lastVersion = els.FirstOrDefault(); eLog.f_SetEntity(lastVersion); bool isChange = false; foreach (Cl_Template el in els) { el.p_IsDelete = true; isChange = true; } if (isChange) { Cl_App.m_DataContext.SaveChanges(); eLog.f_SaveEntity(lastVersion); transaction.Commit(); SelectedNode.Remove(); } } else { MonitoringStub.Error("Error_Tree", "Не найдена шаблон", new Exception("EX ERROR"), "p_SelectedTemplate.p_Template.p_TemplateID = " + p_SelectedTemplate.p_Template.p_TemplateID, null); } } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Tree", "При удалении шаблона произошла ошибка", ex, null, null); return; } } }
private Cl_Template f_UpdateTemplate(Cl_Template template) { Cl_Template defNewTemplate = this.f_GetActualTemplate(template); if (defNewTemplate.p_Version > template.p_Version) { return(defNewTemplate); } if (template.p_TemplateElements == null || template.p_TemplateElements.Count == 0) { return(template); } Cl_Template newTemplate = new Cl_Template(); newTemplate.p_TemplateID = template.p_TemplateID; newTemplate.p_Title = template.p_Title; newTemplate.p_CategoryTotalID = template.p_CategoryTotalID; newTemplate.p_CategoryTotal = template.p_CategoryTotal; newTemplate.p_CategoryClinicID = template.p_CategoryClinicID; newTemplate.p_CategoryClinic = template.p_CategoryClinic; newTemplate.p_Type = template.p_Type; newTemplate.p_Name = template.p_Name; newTemplate.p_Version = template.p_Version + 1; newTemplate.p_ParentGroupID = template.p_ParentGroupID; newTemplate.p_ParentGroup = template.p_ParentGroup; newTemplate.p_Description = template.p_Description; m_DataContextMegaTemplate.p_Templates.Add(newTemplate); m_DataContextMegaTemplate.SaveChanges(); int i = 0; foreach (Cl_TemplateElement item in template.p_TemplateElements) { Cl_TemplateElement tplEl = new Cl_TemplateElement(); tplEl.p_Template = newTemplate; if (item.p_ChildElement != null) { tplEl.p_ChildElement = this.f_GetActualElement(item.p_ChildElement); } else if (item.p_ChildTemplate != null) { tplEl.p_ChildTemplate = this.f_UpdateTemplate(item.p_ChildTemplate); if (this.f_IsActualElementsOnTemplate(item.p_ChildTemplate) == false) { tplEl.p_ChildTemplate = this.f_UpdateTemplate(tplEl.p_ChildTemplate); } } tplEl.p_Index = i = ++i; m_DataContextMegaTemplate.p_TemplatesElements.Add(tplEl); } m_DataContextMegaTemplate.SaveChanges(); return(newTemplate); }
/// <summary> /// Сохранение шаблона /// </summary> /// <param name="curTemplate">Сохраняемый шаблон</param> /// <param name="items">Новый список элементов в сохраняемом шаблоне</param> /// <param name="m_Log">Объект логгера</param> /// <returns></returns> public Cl_Template f_SaveTemplate(Cl_Template curTemplate, I_Element[] elements, Cl_EntityLog m_Log = null) { using (var transaction = m_DataContextMegaTemplate.Database.BeginTransaction()) { try { Cl_Template newTemplate = null; if (curTemplate.p_Version == 0) { newTemplate = curTemplate; newTemplate.p_Version = 1; } else { newTemplate = new Cl_Template(); newTemplate.p_TemplateID = curTemplate.p_TemplateID; newTemplate.p_Title = curTemplate.p_Title; newTemplate.p_CategoryTotalID = curTemplate.p_CategoryTotalID; newTemplate.p_CategoryTotal = curTemplate.p_CategoryTotal; newTemplate.p_CategoryClinicID = curTemplate.p_CategoryClinicID; newTemplate.p_CategoryClinic = curTemplate.p_CategoryClinic; newTemplate.p_Type = curTemplate.p_Type; newTemplate.p_Name = curTemplate.p_Name; newTemplate.p_Version = curTemplate.p_Version + 1; newTemplate.p_ParentGroupID = curTemplate.p_ParentGroupID; newTemplate.p_ParentGroup = curTemplate.p_ParentGroup; newTemplate.p_Description = curTemplate.p_Description; m_DataContextMegaTemplate.p_Templates.Add(newTemplate); } m_DataContextMegaTemplate.SaveChanges(); foreach (I_Element item in elements) { Cl_TemplateElement tplEl = new Cl_TemplateElement(); tplEl.p_TemplateID = newTemplate.p_ID; tplEl.p_Template = newTemplate; if (item is Ctrl_Element) { Ctrl_Element block = (Ctrl_Element)item; tplEl.p_ChildElementID = block.p_ID; tplEl.p_ChildElement = block.p_Element; } else if (item is Ctrl_Template) { Ctrl_Template block = (Ctrl_Template)item; tplEl.p_ChildTemplateID = block.p_ID; tplEl.p_ChildTemplate = block.p_Template; } tplEl.p_Index = Array.IndexOf(elements, item) + 1; m_DataContextMegaTemplate.p_TemplatesElements.Add(tplEl); } m_DataContextMegaTemplate.SaveChanges(); if (m_Log != null && m_Log.f_IsChanged(newTemplate) == false) { if (newTemplate.Equals(curTemplate) && newTemplate.p_Version == 1) { newTemplate.p_Version = 0; } MonitoringStub.Message("Шаблон не изменялся!"); transaction.Rollback(); } else { m_Log.f_SaveEntity(newTemplate); transaction.Commit(); return(newTemplate); } } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Editor", "При сохранении изменений произошла ошибка", ex, null, null); } return(curTemplate); } }
/// <summary>Обновление части дерева</summary> public void f_Update() { m_Template = Cl_TemplatesFacade.f_GetInstance().f_GetActualTemplate(m_Template); f_ReDraw(); }
public Ctrl_TreeNodeTemplate(Cl_Group a_Group, Cl_Template a_Template) { p_Group = a_Group; p_Template = a_Template; }
public void f_TestCreateRecord() { var temlName = "Тест проверки создания API работы с записями"; var dc = new Cl_DataContextMegaTemplate(f_GetConnectionString()); dc.f_Init(); var result = Cl_MedicalCardsFacade.f_GetInstance().f_Init(dc); Assert.AreEqual(true, result); result = Cl_TemplatesFacade.f_GetInstance().f_Init(dc); Assert.AreEqual(true, result); result = Cl_RecordsFacade.f_GetInstance().f_Init(dc, f_GetLocalResourcesPath()); Assert.AreEqual(true, result); result = Cl_CatalogsFacade.f_GetInstance().f_Init(dc); Assert.AreEqual(true, result); var groupTpl = dc.p_Groups.FirstOrDefault(g => g.p_Type == Cl_Group.E_Type.Templates && g.p_Name == "test"); if (groupTpl == null) { groupTpl = new Cl_Group() { p_Name = "test", p_Type = Cl_Group.E_Type.Elements }; dc.p_Groups.Add(groupTpl); dc.SaveChanges(); } var groupEl = dc.p_Groups.FirstOrDefault(g => g.p_Type == Cl_Group.E_Type.Templates && g.p_Name == "test"); if (groupEl == null) { groupEl = new Cl_Group() { p_Name = "test", p_Type = Cl_Group.E_Type.Elements }; dc.p_Groups.Add(groupEl); dc.SaveChanges(); } if (!Cl_CatalogsFacade.f_GetInstance().f_HasCategory("Осмотр")) { Cl_CatalogsFacade.f_GetInstance().f_AddCategory(Cl_Category.E_CategoriesTypes.Total, "Осмотр"); } if (!Cl_CatalogsFacade.f_GetInstance().f_HasCategory("Клиническая 1")) { Cl_CatalogsFacade.f_GetInstance().f_AddCategory(Cl_Category.E_CategoriesTypes.Clinic, "Клиническая 1"); } var catTotal = Cl_CatalogsFacade.f_GetInstance().f_GetCategory("Осмотр"); Assert.AreNotEqual(null, catTotal); var catClinic = Cl_CatalogsFacade.f_GetInstance().f_GetCategory("Клиническая 1"); Assert.AreNotEqual(null, catClinic); var tmpl = Cl_TemplatesFacade.f_GetInstance().f_GetTemplateByName(temlName); if (tmpl == null) { tmpl = new Cl_Template() { p_Name = temlName, p_Type = Cl_Template.E_TemplateType.Template }; var elements = new List <Cl_TemplateElement>(); var element = new Cl_Element() { p_ParentGroupID = groupEl.p_ID, p_ParentGroup = groupEl, p_Name = "Формула 1", p_Tag = "one", p_IsNumber = true, p_NumberRound = 3 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } elements.Add(new Cl_TemplateElement() { p_Template = tmpl, p_ChildElement = element, p_Index = 0 }); element = new Cl_Element() { p_ParentGroupID = groupEl.p_ID, p_ParentGroup = groupEl, p_Name = "Формула 2", p_Tag = "dva", p_IsNumber = true, p_NumberRound = 2 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } elements.Add(new Cl_TemplateElement() { p_Template = tmpl, p_ChildElement = element, p_Index = 1 }); element = new Cl_Element() { p_ParentGroupID = groupEl.p_ID, p_ParentGroup = groupEl, p_Name = "Формула 3", p_Tag = "tri", p_IsNumber = true, p_NumberRound = 2 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } elements.Add(new Cl_TemplateElement() { p_Template = tmpl, p_ChildElement = element, p_Index = 2 }); tmpl.p_ParentGroupID = groupTpl.p_ID; tmpl.p_ParentGroup = groupTpl; tmpl.p_TemplateElements = elements; tmpl.p_CategoryTotalID = catTotal.p_ID; tmpl.p_CategoryTotal = catTotal; tmpl.p_CategoryClinicID = catClinic.p_ID; tmpl.p_CategoryClinic = catClinic; dc.p_Templates.Add(tmpl); dc.SaveChanges(); } Assert.AreNotEqual(null, tmpl); var elts = Cl_TemplatesFacade.f_GetInstance().f_GetElements(tmpl); Assert.AreNotEqual(null, elts); var vals = new List <Cl_RecordValue>(); foreach (var el in elts) { vals.Add(new Cl_RecordValue() { p_ElementID = el.p_ID, p_Element = el, p_ValueUser = "******" }); } var medicalCard1 = Cl_MedicalCardsFacade.f_GetInstance().f_GetMedicalCard("777", 1); if (medicalCard1 == null) { medicalCard1 = Cl_MedicalCardsFacade.f_GetInstance().f_CreateMedicalCard("777", 1, Core.Permision.Cl_User.E_Sex.Man, "Иванов", "Иван", "Иванович", new DateTime(1996, 3, 11), "Медкарта API тест 777"); } Assert.IsNotNull(medicalCard1); result = Cl_RecordsFacade.f_GetInstance().f_CreateRecord(medicalCard1, catTotal, catClinic, "Заголовок API тест - значения", "Клиника API тест значения", 56369, "Доктор_Фамилия", "Доктор_Имя", "Доктор_Отчество", tmpl, vals); Assert.AreEqual(true, result); result = Cl_RecordsFacade.f_GetInstance().f_CreateRecord(medicalCard1, catTotal, catClinic, "Заголовок API тест - файл", "Клиника API тест файл", 56369, "Доктор_Фамилия", "Доктор_Имя", "Доктор_Отчество", E_RecordFileType.HTML, Encoding.UTF8.GetBytes("<h1>API тест файл<h1>")); Assert.AreEqual(true, result); }
public void f_TestElementVisibleFromFormula() { //tag_one = "pat2"; tag_dva = 11; tag_tri = 5 var record = new Cl_Record() { p_Title = "Тест проверки формул" }; var medicalCard = new Cl_MedicalCard(); medicalCard.p_PatientSex = Core.Permision.Cl_User.E_Sex.Man; medicalCard.p_PatientDateBirth = new DateTime(1981, 4, 1); record.p_MedicalCard = medicalCard; record.p_Values = new List <Cl_RecordValue>(); var template = new Cl_Template() { p_Name = "Тест проверки формул", p_Type = Cl_Template.E_TemplateType.Template }; var elements = new List <Cl_TemplateElement>(); var element = new Cl_Element() { p_ID = 1, p_Name = "Формула 1", p_Tag = "one" }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = "norm" + i.ToString() }); var ep = new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = "pat" + i.ToString() }; if (i == 2) { record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element, p_Params = new List <Cl_RecordParam>() { new Cl_RecordParam() { p_ElementParam = ep } } }); } element.p_ParamsValues.Add(ep); } elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 0 }); element = new Cl_Element() { p_ID = 2, p_Name = "Формула 2", p_Tag = "dva", p_IsNumber = true, p_NumberRound = 2 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element, p_ValueUser = "******" }); elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 1 }); element = new Cl_Element() { p_ID = 3, p_Name = "Формула 3", p_Tag = "tri", p_IsNumber = true, p_NumberRound = 2 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element, p_ValueUser = "******" }); elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 2 }); template.p_TemplateElements = elements; record.f_SetTemplate(template); bool actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\""); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = tag_one"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_dva > 10"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_dva < 15"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_dva = 11"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_dva > 14"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_dva < 11"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva > 10 ИЛИ tag_tri = 3"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva < 12 ИЛИ tag_tri = 3"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 11 ИЛИ tag_tri = 3"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13 ИЛИ tag_tri = 5"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13 ИЛИ tag_tri > 4"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13 ИЛИ tag_tri < 6"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13 ИЛИ tag_tri < tag_dva"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13 ИЛИ tag_tri > tag_dva"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13 ИЛИ tag_tri = 6"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva = 13"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva > 11"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat2\" И tag_dva < 11"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"pat3\" И tag_dva = 11"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_one = \"\" И tag_dva = 11"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_gender = man И tag_age > 10"); Assert.AreEqual(true, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_gender = man И tag_age > 40"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_gender = female И tag_age > 10"); Assert.AreEqual(false, actual); actual = Cl_RecordsFacade.f_GetInstance().f_GetElementVisible(record, "tag_gender = female"); Assert.AreEqual(false, actual); }
public void f_TestElementMathematicalFormula() { //tag_one = "14"; tag_dva = 11; tag_tri = 5 var record = new Cl_Record() { p_Title = "Тест проверки формул" }; record.p_Values = new List <Cl_RecordValue>(); var template = new Cl_Template() { p_Name = "Тест проверки формул", p_Type = Cl_Template.E_TemplateType.Template }; var elements = new List <Cl_TemplateElement>(); var element = new Cl_Element() { p_ID = 1, p_Name = "Формула 1", p_Tag = "one", p_IsNumber = true, p_NumberRound = 3 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element, p_ValueUser = "******" }); elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 0 }); element = new Cl_Element() { p_ID = 2, p_Name = "Формула 2", p_Tag = "dva", p_IsNumber = true, p_NumberRound = 2 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element, p_ValueUser = "******" }); elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 1 }); element = new Cl_Element() { p_ID = 3, p_Name = "Формула 3", p_Tag = "tri", p_IsNumber = true, p_NumberRound = 2 }; element.p_ParamsValues = new List <Cl_ElementParam>(); for (int i = 1; i < 4; i++) { element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.NormValues, p_Value = i.ToString() }); element.p_ParamsValues.Add(new Cl_ElementParam() { p_Element = element, p_TypeParam = Cl_ElementParam.E_TypeParam.PatValues, p_Value = i.ToString() }); } record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element, p_ValueUser = "******" }); elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 2 }); element = new Cl_Element() { p_ID = 4, p_Name = "Формула 4", p_Tag = "chet", p_IsNumber = true, p_NumberRound = 2, p_NumberFormula = "tag_dva - 100" }; //record.p_Values.Add(new Cl_RecordValue() { p_ElementID = element.p_ID, p_Element = element }); elements.Add(new Cl_TemplateElement() { p_Template = template, p_ChildElement = element, p_Index = 4 }); template.p_TemplateElements = elements; record.f_SetTemplate(template); decimal?result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_one + 3"); Assert.AreEqual(17, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_one + 8"); Assert.AreEqual(22, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_one - 3"); Assert.AreEqual(11, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_dva - 8"); Assert.AreEqual(3, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_dva * 11"); Assert.AreEqual(121, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_dva / 2"); Assert.AreEqual((decimal)5.5, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_tri - 7"); Assert.AreEqual(-2, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_one + tag_dva - tag_tri"); Assert.AreEqual(20, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_one * tag_dva / tag_tri"); Assert.AreEqual((decimal)30.8, result); result = Cl_RecordsFacade.f_GetInstance().f_GetElementMathematicValue(record, "tag_one / tag_chet / tag_chet"); Assert.AreEqual((decimal)0.001767, Math.Round(result.Value, 6)); }
public Dlg_RecordSelectPattern(Cl_Template a_Template) { f_Init(a_Template); }
/// <summary>Инициализация пользовательских контролов</summary> private void f_AddControlsTemplate(Cl_Template a_Template, ControlCollection a_Controls = null) { if (m_Record != null && a_Template != null) { if (a_Template.p_TemplateElements == null) { var cTe = Cl_App.m_DataContext.Entry(a_Template).Collection(g => g.p_TemplateElements).Query().Include(te => te.p_ChildElement).Include(te => te.p_ChildElement.p_Default).Include(te => te.p_ChildElement.p_ParamsValues).Include(te => te.p_ChildElement.p_PartAgeNorms).Include(te => te.p_ChildTemplate); cTe.Load(); } if (a_Template.p_TemplateElements != null && a_Template.p_TemplateElements.Count > 0) { int top = 0; ControlCollection controls = null; if (a_Controls != null) { controls = a_Controls; } else { controls = ctrlContent.Controls; } foreach (var te in a_Template.p_TemplateElements) { if (te.p_ChildElement != null) { var ctrlEl = new Ctrl_Element(); ctrlEl.p_Element = te.p_ChildElement; ctrlEl.e_ValueChanged += CtrlEl_e_ValueChanged; Cl_RecordValue recval = m_Record.p_Values.FirstOrDefault(v => v.p_ElementID == te.p_ChildElement.p_ID); if (recval == null) { recval = new Cl_RecordValue(); recval.p_ElementID = ctrlEl.p_Element.p_ID; recval.p_Element = ctrlEl.p_Element; recval.p_RecordID = m_Record.p_ID; recval.p_Record = m_Record; } if (controls is TableLayoutControlCollection && controls.Owner is TableLayoutPanel) { var table = (TableLayoutPanel)controls.Owner; table.RowCount++; table.RowStyles.Add(new RowStyle(SizeType.AutoSize)); ctrlEl.f_SetRecordElementValues(recval, table, table.RowCount - 1); } else { ctrlEl.f_SetRecordElementValues(recval); controls.Add(ctrlEl); } ctrlEl.Top = top; ctrlEl.Left = m_PaddingX; top += ctrlEl.Height + m_PaddingY; m_Elements.Add(ctrlEl); } else if (te.p_ChildTemplate != null) { if (te.p_ChildTemplate.p_Type == Cl_Template.E_TemplateType.Block) { var ctrlGroup = new GroupBox(); ctrlGroup.Text = te.p_ChildTemplate.p_Name; ctrlGroup.AutoSize = true; ctrlGroup.Top = top; FlowLayoutPanel panel = new FlowLayoutPanel(); panel.Top = 20; panel.Left = 3; panel.WrapContents = false; panel.AutoSize = true; panel.FlowDirection = FlowDirection.TopDown; ctrlGroup.Controls.Add(panel); controls.Add(ctrlGroup); f_AddControlsTemplate(te.p_ChildTemplate, panel.Controls); top += ctrlGroup.Height + m_PaddingY; } else if (te.p_ChildTemplate.p_Type == Cl_Template.E_TemplateType.Table) { var ctrlTable = f_GetControlTable(); ctrlTable.AutoSize = true; top += 10; ctrlTable.Top = top; ctrlTable.CellBorderStyle = TableLayoutPanelCellBorderStyle.InsetDouble; ctrlTable.RowCount = 1; ctrlTable.Controls.Add(new Label() { Text = "Показатель", TextAlign = System.Drawing.ContentAlignment.MiddleLeft }, 0, 0); //ctrlTable.Controls.Add(new Label() { Text = "Локация", TextAlign = System.Drawing.ContentAlignment.MiddleLeft }, 1, 0); ctrlTable.Controls.Add(new Label() { Text = "Значение", TextAlign = System.Drawing.ContentAlignment.MiddleLeft }, 1, 0); ctrlTable.Controls.Add(new Label() { Text = "Ед. изм.", TextAlign = System.Drawing.ContentAlignment.MiddleLeft }, 2, 0); ctrlTable.Controls.Add(new Label() { Text = "Нормa", TextAlign = System.Drawing.ContentAlignment.MiddleLeft }, 3, 0); controls.Add(ctrlTable); f_AddControlsTemplate(te.p_ChildTemplate, ctrlTable.Controls); top += ctrlTable.Height + m_PaddingY; } } } } } }