Ejemplo n.º 1
0
        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;
                }
            }
        }
Ejemplo n.º 2
0
        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;
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
        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());
        }
Ejemplo n.º 8
0
        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);
         }
     }
 }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 14
0
        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());
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 22
0
        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);
                }
            }
        }
Ejemplo n.º 23
0
 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));
        }