private void Ctrl_ElementNew_Click(object sender, EventArgs e) { using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { Cl_EntityLog eLog = new Cl_EntityLog(); Cl_Element newElement = (Cl_Element)Activator.CreateInstance(typeof(Cl_Element)); eLog.f_SetEntity(newElement); Cl_Group group = null; if (p_SelectedGroup != null && p_SelectedGroup.p_Group != null) { group = p_SelectedGroup.p_Group; } Dlg_EditorElement dlg = new Dlg_EditorElement(); dlg.Text = "Новый элемент"; if (group != null) { newElement.p_ParentGroup = p_SelectedGroup.p_Group; dlg.ctrl_LGroupValue.Text = p_SelectedGroup.p_Group.p_Name; } if (dlg.ShowDialog() != DialogResult.OK) { return; } newElement.p_Name = dlg.ctrl_TBName.Text; newElement.p_Comment = dlg.ctrl_TBDecs.Text; newElement.p_ElementType = (Cl_Element.E_ElementsTypes)dlg.ctrl_CB_ControlType.f_GetSelectedItem(); newElement.p_IsPartPre = true; if (dlg.ctrl_TBName.Text.Length > 0) { newElement.p_PartPre = dlg.ctrl_TBName.Text[0].ToString().ToUpper(); if (dlg.ctrl_TBName.Text.Length > 1) { newElement.p_PartPre += dlg.ctrl_TBName.Text.Substring(1, dlg.ctrl_TBName.Text.Length - 1); } } newElement.p_SymmetryParamLeft = "Слева"; newElement.p_SymmetryParamRight = "Справа"; Cl_App.m_DataContext.p_Elements.Add(newElement); Cl_App.m_DataContext.SaveChanges(); newElement.p_ElementID = newElement.p_ID; Cl_App.m_DataContext.SaveChanges(); eLog.f_SaveEntity(newElement); transaction.Commit(); Ctrl_TreeNodeElement newNode = new Ctrl_TreeNodeElement(group, newElement); SelectedNode.Nodes.Add(newNode); SelectedNode = newNode; e_AfterCreateElement?.Invoke(this, new TreeViewEventArgs(newNode)); } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Tree", "При создании нового элемента произошла ошибка", ex, null, null); return; } } }
private void Ctrl_ElementDelete_Click(object sender, EventArgs e) { if (p_SelectedElement == null && p_SelectedElement.p_Element == null) { return; } if (MessageBox.Show($"Удалить элемент \"{p_SelectedElement.p_Element.p_Name}\"?", "Удаление элемента", 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_Elements.Where(el => el.p_ElementID == p_SelectedElement.p_Element.p_ElementID).OrderByDescending(v => v.p_Version); if (els != null) { Cl_Element lastVersion = els.FirstOrDefault(); eLog.f_SetEntity(lastVersion); bool isChange = false; foreach (Cl_Element el in els) { el.p_IsDelete = true; isChange = true; } if (isChange) { Cl_App.m_DataContext.SaveChanges(); eLog.f_SaveEntity(lastVersion); transaction.Commit(); if (!p_IsShowDeleted) { SelectedNode.Remove(); } else { p_SelectedElement.p_Element = p_SelectedElement.p_Element; } } } else { MonitoringStub.Error("Error_Tree", "Не найдена элемент", new Exception("EX ERROR"), "p_SelectedElement.p_Element.p_ElementID = " + p_SelectedElement.p_Element.p_ElementID, null); } } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Tree", "При удалении элемента произошла ошибка", ex, null, null); return; } } }
public object f_ConfirmChanges() { using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { Cl_Element el = null; if (p_EditingElement.p_Version == 0) { el = p_EditingElement; el.p_Version = 1; } else { el = new Cl_Element(); el.p_Version = p_EditingElement.p_Version + 1; el.p_ParentGroupID = p_EditingElement.p_ParentGroupID; el.p_ParentGroup = p_EditingElement.p_ParentGroup; Cl_App.m_DataContext.p_Elements.Add(el); } el.p_ElementType = E_ElementsTypes.Image; el.p_ElementID = p_EditingElement.p_ElementID; el.p_Name = ctrl_Name.Text; el.p_Tag = ctrlTag.Text; el.p_Image = ctrlImage.Image; el.p_Help = ctrl_Hint.Text; el.p_Comment = ctrl_Note.Text; Cl_App.m_DataContext.SaveChanges(); if (m_Log.f_IsChanged(el) == false) { if (el.Equals(p_EditingElement) && el.p_Version == 1) { el.p_Version = 0; } MonitoringStub.Message("Элемент не изменялся!"); transaction.Rollback(); return(null); } m_Log.f_SaveEntity(el); f_SetElement(el); transaction.Commit(); return(el); } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Editor", "При сохранении изменений произошла ошибка", ex, null, null); return(null); } } }
internal bool f_IsActualElement(Cl_Element element) { if (element == null) { return(false); } Cl_Element actElement = this.f_GetActualElement(element); return(actElement.p_ID == element.p_ID); }
private void ctrl_BSave_Click(object sender, EventArgs e) { Cl_Element el = p_EditPanel.f_ConfirmChanges() as Cl_Element; if (el != null) { Cl_EntityLog.f_CustomMessageLog(p_EditableElement.p_Element, "Нажата кнопка \"Сохранить\""); m_EditableElement.p_Element = el; p_IsReadOnly = true; } }
/// <summary>Добавление блока в формулу</summary> /// <param name="a_Block">Блок</param> /// <returns></returns> private bool f_AppendBlock(Cl_FormulaConditionBlock a_Block) { if (a_Block == null) { return(false); } if (a_Block.p_Object is string) { string txt = a_Block.p_Object.ToString(); if (m_Blocks.Count < 2) { return(false); } Cl_Element el = m_Blocks[m_Blocks.Count - 2].p_Object as Cl_Element; if (el == null || el.p_IsNumber) { return(false); } Cl_ElementParam prm = el.p_NormValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { a_Block.p_Object = prm; } else { prm = el.p_PatValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { a_Block.p_Object = prm; } else { return(false); } } } string text = a_Block.f_GetTextFromBlock(); if (string.IsNullOrWhiteSpace(text)) { return(false); } ctrlRTBFormula.SelectionStart = ctrlRTBFormula.TextLength; ctrlRTBFormula.SelectionLength = 0; ctrlRTBFormula.SelectionColor = a_Block.f_GetColorBlock(); ctrlRTBFormula.AppendText(text); ctrlRTBFormula.SelectionColor = ctrlRTBFormula.ForeColor; m_Blocks.Add(a_Block); return(true); }
private static string f_GetRecordValue(Cl_RecordValue cur, Cl_RecordValue last) { StringBuilder sBuild = new StringBuilder(); Cl_Element baseElement = cur.p_Element; if (baseElement.p_IsText) { if (baseElement.p_IsPartLocations) { if (Cl_EntityCompare.f_IsCompare(typeof(Array), cur.p_PartLocations, last.p_PartLocations) == false) { sBuild.AppendLine("Локация \"" + baseElement.p_Name + "\". " + f_GetRecordParamsValue(cur.p_PartLocations, last.p_PartLocations)); } } if (baseElement.p_IsTextFromCatalog) { if (Cl_EntityCompare.f_IsCompare(typeof(Array), cur.p_ValuesCatalog, last.p_ValuesCatalog) == false) { sBuild.AppendLine("Локация \"" + baseElement.p_Name + "\". " + f_GetRecordParamsValue(cur.p_ValuesCatalog, last.p_ValuesCatalog)); } if (baseElement.p_Symmetrical && Cl_EntityCompare.f_IsCompare(typeof(Array), last.p_ValuesDopCatalog, cur.p_ValuesDopCatalog) == false) { sBuild.AppendLine("Локация \"" + baseElement.p_Name + "\". " + f_GetRecordParamsValue(cur.p_ValuesDopCatalog, last.p_ValuesDopCatalog)); } } else { if (Cl_EntityCompare.f_IsCompare(typeof(String), last.p_ValueUser, cur.p_ValueUser) == false) { sBuild.AppendLine("Значение \"" + baseElement.p_Name + "\"" + (baseElement.p_Symmetrical ? " (" + baseElement.p_SymmetryParamLeft + ")" : "") + ". " + "Старое значение: \"" + last.p_ValueUser + "\". Новое значение: \"" + cur.p_ValueUser + "\""); } if (baseElement.p_Symmetrical && Cl_EntityCompare.f_IsCompare(typeof(String), last.p_ValueDopUser, cur.p_ValueDopUser) == false) { sBuild.AppendLine("Значение \"" + baseElement.p_Name + "\"" + (baseElement.p_Symmetrical ? " (" + baseElement.p_SymmetryParamRight + ")" : "") + ". " + "Старое значение: \"" + last.p_ValueDopUser + "\". Новое значение: \"" + cur.p_ValueDopUser + "\""); } } } else if (baseElement.p_IsImage) { sBuild.Append("Картинка \"" + baseElement.p_Name + "\" изменилась"); } else { throw new NotImplementedException(); } return(sBuild.ToString().Trim()); }
private void Ctrl_ImageNew_Click(object sender, EventArgs e) { using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { Cl_EntityLog eLog = new Cl_EntityLog(); Cl_Element newElement = (Cl_Element)Activator.CreateInstance(typeof(Cl_Element)); eLog.f_SetEntity(newElement); Cl_Group group = null; if (p_SelectedGroup != null && p_SelectedGroup.p_Group != null) { group = p_SelectedGroup.p_Group; } Dlg_EditorImage dlg = new Dlg_EditorImage(); dlg.Text = "Новый рисунок"; if (group != null) { newElement.p_ParentGroup = p_SelectedGroup.p_Group; dlg.ctrl_LGroupValue.Text = p_SelectedGroup.p_Group.p_Name; } if (dlg.ShowDialog() != DialogResult.OK) { return; } newElement.p_Name = dlg.ctrl_TBName.Text; newElement.p_Comment = dlg.ctrl_TBDecs.Text; newElement.p_ElementType = Cl_Element.E_ElementsTypes.Image; Cl_App.m_DataContext.p_Elements.Add(newElement); Cl_App.m_DataContext.SaveChanges(); newElement.p_ElementID = newElement.p_ID; Cl_App.m_DataContext.SaveChanges(); eLog.f_SaveEntity(newElement); transaction.Commit(); Ctrl_TreeNodeElement newNode = new Ctrl_TreeNodeElement(group, newElement); SelectedNode.Nodes.Add(newNode); SelectedNode = newNode; e_AfterCreateElement?.Invoke(this, new TreeViewEventArgs(newNode)); } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Tree", "При создании нового элемента произошла ошибка", ex, null, null); return; } } }
private bool f_GetIsGenderBlock() { Cl_Element el = null; int index = m_Blocks.Count - m_NumberBlockOper + 1; if (index >= 0 && m_Blocks.Count > index) { el = m_Blocks[index].p_Object as Cl_Element; } if (el != null) { return(el.p_Tag == "gender"); } return(false); }
private void f_UpdateStandartValues(Cl_Element a_Element) { ctrlStandartValues.f_Clear(); if (!a_Element.p_IsNumber) { foreach (Cl_ElementParam val in a_Element.p_NormValues) { ctrlStandartValues.f_AddObject(val); } ctrlStandartValues.f_SetSeparator(a_Element.p_NormValues.Length); foreach (Cl_ElementParam val in a_Element.p_PatValues) { ctrlStandartValues.f_AddObject(val); } } }
private void ctrlBAddTag_Click(object sender, EventArgs e) { if (ctrlCBAddElement.SelectedItem == null || !(ctrlCBAddElement.SelectedItem is Cl_Element)) { return; } Cl_Element el = (Cl_Element)ctrlCBAddElement.SelectedItem; if (string.IsNullOrWhiteSpace(el.p_Tag)) { MonitoringStub.Problem("Problem_Formula", "Невозможно добавить элемент \"" + el.p_Name + "\" в редактор формул, т.к. у него не заполнено поле \"Тег элемента\"", new Exception("EX PROBLEM"), "el.p_Tag = null", null); return; } f_AppendBlock(new Cl_FormulaMathematicalBlock(el)); f_UpdateControls(true); }
public Cl_Template[] f_GetConflictTemplates(Cl_Element a_Element) { var templates = new List <Cl_Template>(); if (a_Element == null) { return(templates.ToArray()); } var templatesElements = Cl_App.m_DataContext.p_TemplatesElements.Include(te => te.p_Template).Where(te => te.p_ChildElementID == a_Element.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> /// <param name="p_ChildElement">Элемент шаблона</param> /// <returns></returns> internal Cl_Element f_GetActualElement(Cl_Element p_ChildElement) { if (p_ChildElement == null) { return(null); } Cl_Element els = m_DataContextMegaTemplate.p_Elements .Where(e => e.p_ElementID == p_ChildElement.p_ElementID).OrderByDescending(d => d.p_Version).FirstOrDefault(); if (p_ChildElement.p_ID != els.p_ID) { return(els); } return(p_ChildElement); }
public void f_SetElement(Cl_Element a_Element) { m_Log.f_SetEntity(a_Element); if (a_Element == null || !a_Element.f_IsImage()) { return; } p_EditingElement = a_Element; if (p_EditingElement.p_Version == 0) { ctrl_Version.Text = "Черновик"; } else { ctrl_Version.Text = p_EditingElement.p_Version.ToString(); } ctrl_Name.Text = p_EditingElement.p_Name; ctrlTag.Text = p_EditingElement.p_Tag; ctrlImage.Image = p_EditingElement.p_Image; ctrl_Hint.Text = p_EditingElement.p_Help; ctrl_Note.Text = p_EditingElement.p_Comment; }
protected bool f_HasElement(Cl_Element a_Element) { foreach (I_Element item in Items) { if (item is Ctrl_Element) { var el = (Ctrl_Element)item; if (el.p_Element.Equals(a_Element) || el.p_Element.p_ElementID == a_Element.p_ElementID) { return(true); } } else if (item is Ctrl_Template) { var tpl = (Ctrl_Template)item; if (tpl.p_Template.f_HasElement(a_Element)) { return(true); } } } return(false); }
/// <summary>Получение первого блока из текста отображения элемента</summary> /// <param name="a_Elements">Список элементов</param> /// <param name="a_Text">Текст</param> /// <returns></returns> private Cl_FormulaConditionBlock f_GetFirstConditionBlockFromText(Cl_Element[] a_Elements, string a_Text) { if (!string.IsNullOrWhiteSpace(a_Text)) { string txt = ""; if (a_Text.Length >= 3) { txt = a_Text.Substring(0, 3); if (txt == " > ") { return(new Cl_FormulaConditionBlock(Cl_FormulaConditionBlock.E_Opers.more)); } else if (txt == " < ") { return(new Cl_FormulaConditionBlock(Cl_FormulaConditionBlock.E_Opers.less)); } else if (txt == " = ") { return(new Cl_FormulaConditionBlock(Cl_FormulaConditionBlock.E_Opers.equals)); } else if (txt == " И ") { return(new Cl_FormulaConditionBlock(Cl_FormulaConditionBlock.E_Opers.and)); } } if (a_Text.Length >= 4) { txt = a_Text.Substring(0, 4); if (txt == " != ") { return(new Cl_FormulaConditionBlock(Cl_FormulaConditionBlock.E_Opers.notEquals)); } } if (a_Text.Length >= 5) { txt = a_Text.Substring(0, 5); if (txt == " ИЛИ ") { return(new Cl_FormulaConditionBlock(Cl_FormulaConditionBlock.E_Opers.or)); } } if (a_Text.Length > Cl_FormulaConditionBlock.m_OperatorTag.Length) { txt = a_Text.Substring(0, Cl_FormulaConditionBlock.m_OperatorTag.Length); if (txt == Cl_FormulaConditionBlock.m_OperatorTag) { int indexEnd = a_Text.IndexOf(" "); if (indexEnd > -1) { txt = a_Text.Substring(Cl_FormulaConditionBlock.m_OperatorTag.Length, indexEnd - Cl_FormulaConditionBlock.m_OperatorTag.Length); } else { txt = a_Text.Replace(Cl_FormulaConditionBlock.m_OperatorTag, ""); } Cl_Element element = Cl_RecordsFacade.f_GetInstance().f_GetAgeElement(txt); if (element == null) { element = Cl_RecordsFacade.f_GetInstance().f_GetGenderElement(txt); } if (element == null) { element = a_Elements.FirstOrDefault(el => el.p_Tag == txt); } if (element != null) { return(new Cl_FormulaConditionBlock(element)); } } } if (a_Text.Length > 0) { int indexStart = 0; int lenght = 0; if (a_Text != "" && a_Text[0] == '"') { indexStart = 1; lenght = a_Text.IndexOf('"', 1) - indexStart; } else { byte[] asdsad = Encoding.ASCII.GetBytes(a_Text); lenght = a_Text.IndexOf(" "); } if (lenght > -1) { txt = a_Text.Substring(indexStart, lenght); } else { txt = a_Text; } int iVal = 0; if (int.TryParse(txt, out iVal)) { return(new Cl_FormulaConditionBlock(iVal)); } if (!string.IsNullOrWhiteSpace(txt)) { return(new Cl_FormulaConditionBlock(txt)); } } } return(null); }
/// <summary>Получение первого блока из текста математического вычисления</summary> /// <param name="a_Elements">Список элементов</param> /// <param name="a_Text">Текст</param> /// <returns></returns> private Cl_FormulaMathematicalBlock f_GetFirstMathematicalBlockFromText(Cl_Element[] a_Elements, string a_Text) { if (!string.IsNullOrWhiteSpace(a_Text)) { string txt = ""; if (a_Text.Length >= 3) { txt = a_Text.Substring(0, 3); if (txt == " + ") { return(new Cl_FormulaMathematicalBlock(Cl_FormulaMathematicalBlock.E_Opers.plus)); } else if (txt == " - ") { return(new Cl_FormulaMathematicalBlock(Cl_FormulaMathematicalBlock.E_Opers.minus)); } else if (txt == " / ") { return(new Cl_FormulaMathematicalBlock(Cl_FormulaMathematicalBlock.E_Opers.carve)); } else if (txt == " * ") { return(new Cl_FormulaMathematicalBlock(Cl_FormulaMathematicalBlock.E_Opers.multiply)); } } if (a_Text.Length > Cl_FormulaMathematicalBlock.m_OperatorTag.Length) { txt = a_Text.Substring(0, Cl_FormulaMathematicalBlock.m_OperatorTag.Length); if (txt == Cl_FormulaMathematicalBlock.m_OperatorTag) { int indexEnd = a_Text.IndexOf(" "); if (indexEnd > -1) { txt = a_Text.Substring(Cl_FormulaMathematicalBlock.m_OperatorTag.Length, indexEnd - Cl_FormulaMathematicalBlock.m_OperatorTag.Length); } else { txt = a_Text.Replace(Cl_FormulaMathematicalBlock.m_OperatorTag, ""); } Cl_Element element = a_Elements.FirstOrDefault(el => el.p_Tag == txt); if (element != null) { return(new Cl_FormulaMathematicalBlock(element)); } } } if (a_Text.Length > 0) { int indexEnd = a_Text.IndexOf(" "); if (indexEnd > -1) { txt = a_Text.Substring(0, indexEnd); } else { txt = a_Text; } int iVal = 0; if (int.TryParse(txt, out iVal)) { return(new Cl_FormulaMathematicalBlock(iVal)); } } } return(null); }
/// <summary>Получение блоков формулы отображения элемента</summary> /// <param name="a_Elements">Список элементов</param> /// <param name="a_Formula">Формула</param> public Cl_FormulaConditionBlock[] f_GetConditionsBlocks(Cl_Element[] a_Elements, string a_Formula) { string formula = a_Formula; var blocks = new List <Cl_FormulaConditionBlock>(); while (!string.IsNullOrWhiteSpace(formula)) { Cl_FormulaConditionBlock block = f_GetFirstConditionBlockFromText(a_Elements, formula); if (block != null) { if (block.p_Object is string) { string txt = block.p_Object.ToString(); if (blocks.Count < 2) { return(null); } Cl_Element el = blocks[blocks.Count - 2].p_Object as Cl_Element; if (el == null || el.p_IsNumber) { return(null); } if (el.p_Tag == "gender") { Cl_User.E_Sex gender; if (Enum.TryParse(block.p_Object.ToString(), true, out gender)) { block.p_Object = gender; } else { return(null); } } else { Cl_ElementParam prm = el.p_NormValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { block.p_Object = prm; } else { prm = el.p_PatValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { block.p_Object = prm; } else { return(null); } } } } blocks.Add(block); string txtBlock = block.f_GetTextFromBlock(); formula = formula.Substring(txtBlock.Length); } else { return(null); } } return(blocks.ToArray()); }
public void f_SetElement(Cl_Element a_Element) { if (a_Element == null || !a_Element.f_IsText()) { return; } m_Log.f_SetEntity(a_Element); p_EditingElement = a_Element; if (p_EditingElement.p_Version == 0) { ctrl_Version.Text = "Черновик"; } else { ctrl_Version.Text = p_EditingElement.p_Version.ToString(); } ctrl_ControlType.f_SetSelectedItem(p_EditingElement.p_ElementType); ctrl_Name.Text = p_EditingElement.p_Name; ctrlTag.Text = p_EditingElement.p_Tag; ctrl_Hint.Text = p_EditingElement.p_Help; ctrl_IsPartPre.Checked = ctrl_PartPreValue.Enabled = p_EditingElement.p_IsPartPre; ctrl_PartPreValue.Text = p_EditingElement.p_PartPre; ctrl_IsPartPost.Checked = ctrl_PartPostValue.Enabled = p_EditingElement.p_IsPartPost; ctrl_PartPostValue.Text = p_EditingElement.p_PartPost; ctrl_IsPartLocations.Checked = ctrl_PartLocationsValue.Enabled = ctrl_IsPartLocationsMulti.Enabled = p_EditingElement.p_IsPartLocations; ctrl_IsPartLocationsMulti.Checked = p_EditingElement.p_IsPartLocationsMulti; ctrl_IsPartNorm.Checked = ctrl_PartNormValue.Enabled = p_EditingElement.p_IsPartNorm; ctrl_PartNormValue.Text = p_EditingElement.p_PartNorm.ToString(); ctrl_IsPartNormRange.Checked = ctrl_TPartNormRangeValues.Enabled = p_EditingElement.p_IsPartNormRange; List <Cl_AgeNorm> ageNorms = Cl_App.m_DataContext.p_AgeNorms.Where(n => n.p_ElementID == a_Element.p_ID).ToList(); DataTable dt = new DataTable(); foreach (DataGridViewColumn col in ctrl_TPartNormRangeValues.Columns) { dt.Columns.Add(col.Name); col.DataPropertyName = col.Name; } ; foreach (var norm in ageNorms) { var row = dt.NewRow(); row["p_AgeFrom"] = norm.p_AgeFrom; row["p_AgeTo"] = norm.p_AgeTo; row["p_MaleMin"] = Math.Round(norm.p_MaleMin, p_EditingElement.p_NumberRound); row["p_MaleMax"] = Math.Round(norm.p_MaleMax, p_EditingElement.p_NumberRound); row["p_FemaleMin"] = Math.Round(norm.p_FemaleMin, p_EditingElement.p_NumberRound); row["p_FemaleMax"] = Math.Round(norm.p_FemaleMax, p_EditingElement.p_NumberRound); dt.Rows.Add(row); } ctrl_TPartNormRangeValues.DataSource = dt; ctrl_IsChangeNotNormValues.Checked = p_EditingElement.p_IsChangeNotNormValues; ctrl_IsVisible.Checked = p_EditingElement.p_Visible; ctrl_IsVisiblePatient.Checked = p_EditingElement.p_VisiblePatient; ctrl_IsRequiredFIeld.Checked = p_EditingElement.p_Required; ctrl_IsEditing.Checked = p_EditingElement.p_Editing; ctrl_IsMultiSelect.Checked = p_EditingElement.p_IsMultiSelect; ctrl_SymmetryVals.Visible = ctrl_IsSymmentry.Checked = p_EditingElement.p_Symmetrical; ctrl_Symmetry1.Text = p_EditingElement.p_SymmetryParamLeft; ctrl_Symmetry2.Text = p_EditingElement.p_SymmetryParamRight; ctrl_NumberParams.Visible = ctrl_IsNumber.Checked = p_EditingElement.p_IsNumber; ctrl_NumberRound.Value = p_EditingElement.p_NumberRound; ctrl_NumberFormula.Text = p_EditingElement.p_NumberFormula; ctrl_VisibilityFormula.Text = p_EditingElement.p_VisibilityFormula; ctrl_Note.Text = p_EditingElement.p_Comment; ctrl_PartLocationsValue.Text = string.Join("\n", p_EditingElement.p_PartLocations.ToList()); ctrl_NormValues.Text = string.Join("\n", p_EditingElement.p_NormValues.ToList()); ctrl_PatValues.Text = string.Join("\n", p_EditingElement.p_PatValues.ToList()); if (p_EditingElement.p_Default != null) { ctrl_Default.SelectedIndex = ctrl_Default.Items.IndexOf(p_EditingElement.p_Default.p_Value); } f_UpdateModeTextType((E_TextTypes)ctrl_ControlType.f_GetSelectedItem()); }
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_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 object f_ConfirmChanges() { if (!f_ValidNumber(ctrl_NormValues.Lines)) { MonitoringStub.Message("Нормальные значения не являются числовыми или не соответствуют точности числа"); return(null); } if (!f_ValidNumber(ctrl_PatValues.Lines)) { MonitoringStub.Message("Патологические значения не являются числовыми или не соответствуют точности числа"); return(null); } if (!f_ValidNumber(new string[] { ctrl_Default.Text })) { MonitoringStub.Message("Значение по-умолчанию не является числовым или не соответствует точности числа"); return(null); } var templates = f_GetConflictTemplates(p_EditingElement); if (templates.Length > 0) { if (MessageBox.Show("Этот элемент уже используется в шаблонах. Сохранить новую версию элмента?", "", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return(null); } } using (var transaction = Cl_App.m_DataContext.Database.BeginTransaction()) { try { decimal dVal = 0; Cl_Element el = null; if (p_EditingElement.p_Version == 0) { el = p_EditingElement; el.p_Version = 1; } else { el = new Cl_Element(); el.p_Version = p_EditingElement.p_Version + 1; el.p_ParentGroupID = p_EditingElement.p_ParentGroupID; el.p_ParentGroup = p_EditingElement.p_ParentGroup; Cl_App.m_DataContext.p_Elements.Add(el); } el.p_ElementType = (E_ElementsTypes)ctrl_ControlType.f_GetSelectedItem(); el.p_ElementID = p_EditingElement.p_ElementID; el.p_Name = ctrl_Name.Text.Trim(); el.p_Tag = ctrlTag.Text.Trim(); el.p_Help = ctrl_Hint.Text; el.p_IsPartPre = ctrl_IsPartPre.Checked; if (el.p_IsPartPre) { el.p_PartPre = ctrl_PartPreValue.Text.Trim(); } el.p_IsPartPost = ctrl_IsPartPost.Checked; if (el.p_IsPartPost) { el.p_PartPost = ctrl_PartPostValue.Text.Trim(); } el.p_IsPartLocations = ctrl_IsPartLocations.Checked; if (el.p_IsPartLocations) { el.p_IsPartLocationsMulti = ctrl_IsPartLocationsMulti.Checked; } el.p_IsPartNorm = ctrl_IsPartNorm.Checked; if (el.p_IsPartNorm) { if (decimal.TryParse(ctrl_PartNormValue.Text, out dVal)) { if (f_ValidNumber(new string[] { dVal.ToString() })) { el.p_PartNorm = dVal; } else { MonitoringStub.Message("Значение поля \"Норма\" не соответствует точности!"); transaction.Rollback(); return(null); } } else { MonitoringStub.Message("Значение поля \"Норма\" не корректное!"); transaction.Rollback(); return(null); } } el.p_IsPartNormRange = ctrl_IsPartNormRange.Checked; el.p_IsChangeNotNormValues = ctrl_IsChangeNotNormValues.Checked; el.p_Visible = ctrl_IsVisible.Checked; el.p_VisiblePatient = ctrl_IsVisiblePatient.Checked; el.p_Required = ctrl_IsRequiredFIeld.Checked; el.p_Editing = ctrl_IsEditing.Checked; el.p_IsMultiSelect = ctrl_IsMultiSelect.Checked; el.p_Symmetrical = ctrl_IsSymmentry.Checked; el.p_SymmetryParamLeft = ctrl_Symmetry1.Text.Trim(); el.p_SymmetryParamRight = ctrl_Symmetry2.Text.Trim(); el.p_IsNumber = ctrl_IsNumber.Checked; el.p_NumberRound = Convert.ToByte(ctrl_NumberRound.Value); el.p_NumberFormula = ctrl_NumberFormula.Text; el.p_VisibilityFormula = ctrl_VisibilityFormula.Text; el.p_Comment = ctrl_Note.Text; Cl_App.m_DataContext.SaveChanges(); el.p_ParamsValues.Clear(); if (el.p_IsPartLocations) { el.f_AddValues(Cl_ElementParam.E_TypeParam.Location, ctrl_PartLocationsValue.Lines); } el.f_AddValues(Cl_ElementParam.E_TypeParam.NormValues, ctrl_NormValues.Lines); el.f_AddValues(Cl_ElementParam.E_TypeParam.PatValues, ctrl_PatValues.Lines); el.p_PartAgeNorms.Clear(); if (el.p_IsPartNormRange) { var norms = f_GetPartNormRanges(el.p_ID); if (norms != null) { el.p_PartAgeNorms.AddRange(norms); } else { transaction.Rollback(); return(null); } } Cl_App.m_DataContext.SaveChanges(); if (ctrl_Default.SelectedItem != null) { el.p_Default = el.p_NormValues.FirstOrDefault(v => v.p_Value == ctrl_Default.SelectedItem.ToString()); if (el.p_Default == null) { el.p_Default = el.p_PatValues.FirstOrDefault(v => v.p_Value == ctrl_Default.SelectedItem.ToString()); } if (el.p_Default != null) { el.p_DefaultID = el.p_Default.p_ID; } else { el.p_DefaultID = null; } } Cl_App.m_DataContext.SaveChanges(); if (templates.Length > 0) { foreach (var t in templates) { t.p_IsConflict = true; } } if (m_Log.f_IsChanged(el) == false) { if (el.Equals(p_EditingElement) && el.p_Version == 1) { el.p_Version = 0; } MonitoringStub.Message("Элемент не изменялся!"); transaction.Rollback(); return(null); } m_Log.f_SaveEntity(el); transaction.Commit(); f_SetElement(el); return(el); } catch (Exception ex) { transaction.Rollback(); MonitoringStub.Error("Error_Editor", "При сохранении изменений произошла ошибка", ex, null, null); return(null); } } }
public Ctrl_TreeNodeElement(Cl_Group a_Group, Cl_Element a_Element) { p_Group = a_Group; p_Element = a_Element; ForeColor = Color.Blue; }
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)); }