Beispiel #1
0
        public static void UpdateTemplate(AnimalListItem obj)
        {
            var templateAnimal = FFPresenterModel.LoadActualTemplate(EidssSiteContext.Instance.CountryID, obj.idfsDiagnosisForCs, FFTypeEnum.LivestockAnimalCS);

            obj.FFPresenterCs.SetProperties(templateAnimal, obj.idfAnimal);
            obj.idfsFormTemplate = templateAnimal.idfsFormTemplate;
        }
Beispiel #2
0
        public void SetTemplateTest()
        {
            var target = new FFPresenterModel();

            target.SetTemplate(GetTemplate(249540000000));
            Assert.IsNotNull(target.TemplateFlexNode);
        }
Beispiel #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ffPresenter"></param>
        /// <param name="form"></param>
        /// <param name="errMessage"></param>
        /// <returns></returns>
        public static bool UpdateModelRoutines(FFPresenterModel ffPresenter, FormCollection form, out string errMessage)
        {
            bool isDatesValid = DateTimeHelper.TryParseCustomDates(form, out errMessage);

            if (!isDatesValid)
            {
                return(false);
            }

            errMessage = String.Empty;
            var result = true;

            m_Error = string.Empty;

            ffPresenter.Validation     += ffPresenter_Validation;
            ffPresenter.ErrorValueType += ffPresenter_ErrorValueType;
            ffPresenter.ParseFormCollection(form);
            ffPresenter.Validate();
            ffPresenter.ErrorValueType -= ffPresenter_ErrorValueType;
            ffPresenter.Validation     -= ffPresenter_Validation;

            if (!String.IsNullOrWhiteSpace(m_Error))
            {
                errMessage = m_Error;
                result     = false;
            }

            return(result);
        }
Beispiel #4
0
        public static string GetClinicalSigns(FFPresenterModel presenter)
        {
            string result = string.Empty;

            if (presenter.CurrentTemplate.ParameterTemplatesLookup.Count(p => p.ParameterType == FFParameterTypes.Boolean) > 0)
            {
                var list = presenter.CurrentTemplate.ParameterTemplatesLookup.Where(p => p.ParameterType == FFParameterTypes.Boolean)
                           .Join(presenter.ActivityParameters, x => x.idfsParameter, y => y.idfsParameter, (x, y) => new { LabelText = x.NationalName, Checked = y.ToBool() })
                           .Where(v => v.Checked)
                           .Select(s => s.LabelText)
                           .ToArray();

                if (list.Length > 0)
                {
                    foreach (var s in list)
                    {
                        result += String.Format(", {0}", s);
                    }
                    if (result.Length > 0)
                    {
                        result = result.Substring(2);
                    }
                }
            }

            return(result);
        }
Beispiel #5
0
        //protected new List<FlexNode> ChildList { get; set; }

        public FlexNode(FlexNode parentNode, FlexItem ffObject, EditableList <ActivityParameter> activityParameters, FFPresenterModel model)
            : base(parentNode, ffObject)
        {
            m_ActivityParameters = activityParameters;
            m_Model     = model;
            UseFullPath = false;
            idfRow      = -1;
        }
Beispiel #6
0
        public static void UpdateTemplate(VetFarmTree obj)
        {
            var templateSpecies = FFPresenterModel.LoadActualTemplate(EidssSiteContext.Instance.CountryID,
                                                                      obj.idfsDiagnosisForCs,
                                                                      (obj._HACode == (int)HACode.Livestock)
                                                                               ? FFTypeEnum.LivestockSpeciesCS
                                                                               : FFTypeEnum.AvianSpeciesCS);

            obj.FFPresenterCs.SetProperties(templateSpecies, obj.idfFarm);
            obj.idfsFormTemplate = templateSpecies.idfsFormTemplate;
        }
Beispiel #7
0
        public ActionResult ShowFlexibleFormDirect(long root, long key, FFPresenterModel ffpresenter, bool canUpdate = true)
        {
            //TODO определиться, нужен ли этот метод вообще

            if ((ffpresenter != null) && (ffpresenter.CurrentTemplate != null))
            {
                if (ViewBag.GridName == null)
                {
                    ViewBag.GridName = String.Empty;
                }

                ffpresenter.Settings.WindowMode = false;
                ModelStorage.Put(Session.SessionID, root, root, ffpresenter.CurrentObservation.ToString(), ffpresenter);
                ModelStorage.Put(Session.SessionID, root, key, ffpresenter.CurrentObservation.ToString(), ffpresenter);
                ViewBag.FFKey         = key;
                ViewBag.FFpresenterId = ffpresenter.CurrentObservation.Value;
                ViewBag.CanUpdate     = canUpdate;
                return(PartialView("ShowFlexibleForm", ffpresenter));
            }
            return(PartialView("Empty"));
        }
Beispiel #8
0
 public FlexNode Insert(object ffObject, int index, FFPresenterModel model)
 {
     return(Add(ffObject, null, index, model));
 }
Beispiel #9
0
 public static FlexNode CreateFlexNodeForTemplate(this FFPresenterModel model)
 {
     return(model.CurrentTemplate.CreateFlexNodeForTemplate(model.CurrentObservation ?? 0, model.ActivityParameters, null, model));
 }
Beispiel #10
0
        /// <summary>
        /// Create FlexNode For Section
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="parentSection"></param>
        /// <param name="template"></param>
        /// <param name="activityParameters"></param>
        /// <param name="predefinedStubRows"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        private static void CreateFlexNodeForSection(FlexNode parentNode, SectionTemplate parentSection, Template template, EditableList <ActivityParameter> activityParameters, List <PredefinedStub> predefinedStubRows, FFPresenterModel model)
        {
            //для табличной секции верхнего уровня следует добавить пользовательские данные

            var sectionList = parentSection != null
                                  ? template.GetSectionTemplateChildren(parentSection).ToList()
                                  : template.GetSectionTemplateRoot().ToList();

            var parameterList = parentSection != null
                                    ? template.GetParameterTemplateChildren(parentSection).ToList()
                                    : template.GetParameterTemplateRoot().ToList();

            var labelList = parentSection != null
                                    ? template.GetLabelChildren(parentSection).ToList()
                                    : template.GetLabelRoot().ToList();

            //рекурсивно транслируем в узлы каждую секцию с её содержимым
            foreach (var sectionTemplate in sectionList)
            {
                FlexNode node;
                if (sectionTemplate.blnGrid && (parentSection == null))
                {
                    node = parentNode.Add(sectionTemplate, activityParameters, model);

                    if (predefinedStubRows != null)
                    {
                        sectionTemplate.PredefinedStubRows = predefinedStubRows;

                        #region Добавление параметров-столбцов боковика

                        //параметры боковика не имеют секции над собой, всегда крайние слева
                        //вынимаем уникальные параметры из данных боковика (spGetPredefinedStub)
                        var usedParams = new List <long>();
                        //for (var index = predefinedStubRows.Count - 1; index >= 0; index--)
                        var nodes = new List <FlexNode>();
                        foreach (var predefinedStubRow in predefinedStubRows)
                        {
                            if (!predefinedStubRow.idfsParameter.HasValue)
                            {
                                continue;
                            }
                            if (usedParams.Contains(predefinedStubRow.idfsParameter.Value))
                            {
                                continue;
                            }
                            usedParams.Add(predefinedStubRow.idfsParameter.Value);
                            predefinedStubRow.intOrder = usedParams.Count - 1;
                            var nodePred = node.Add(predefinedStubRow, null, predefinedStubRow.intOrder, model);
                            nodePred.Order = predefinedStubRow.intOrder;
                            nodes.Add(nodePred);
                        }
                        //у каждого нода боковика должен быть отрицательный индекс в порядке возрастания
                        for (var index = 0; index < nodes.Count; index++)
                        {
                            nodes[index].Order = index - nodes.Count;
                        }

                        #endregion
                    }
                }
                else
                {
                    node = parentNode.Add(sectionTemplate, activityParameters, model);
                }
                if (sectionTemplate.intOrder.HasValue)
                {
                    node.Order = sectionTemplate.intOrder.Value;
                }
                node.FormKey = parentNode.FormKey;

                CreateFlexNodeForSection(node, sectionTemplate, template, activityParameters, predefinedStubRows, model);
            }

            //транслируем все параметры, находящиеся на этом уровне
            foreach (var parameterTemplate in parameterList)
            {
                //parameterTemplate.RootKeyID = template.RootKeyID;
                var node = parentNode.Add(parameterTemplate, activityParameters, model);
                node.FormKey = parentNode.FormKey;
                node.Order   = parameterTemplate.intOrder;
            }

            //транслируем лейблы
            foreach (var label in labelList)
            {
                parentNode.Add(label, model);
            }
        }
Beispiel #11
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="ffPresenterModel"></param>
 /// <returns></returns>
 private long GetAdditionalKeyFFPresenter(FFPresenterModel ffPresenterModel)
 {
     return(ffPresenterModel.CurrentObservation.HasValue ? ffPresenterModel.CurrentObservation.Value : 0);
 }
Beispiel #12
0
        public void LoadAggregateTemplate(AggregateCaseSectionEnum matrixId, long idfObservation)
        {
            var idfVersion = FFPresenterModel.LoadObservationVersion(idfObservation);

            Model.PrepareAggregateCase(matrixId, idfVersion ?? 0);
        }
Beispiel #13
0
 public void LoadTemplate(List <long> observations, long idfsFormTemplate)
 {
     Model.SetProperties(FFPresenterModel.LoadActualTemplate(idfsFormTemplate), observations, 0);
 }
Beispiel #14
0
 /// <summary>
 /// Создаёт образ шаблона в древовидной форме
 /// </summary>
 /// <param name="template"></param>
 /// <param name="idfObservation"></param>
 /// <param name="activityParameters"></param>
 /// <param name="model"></param>
 /// <returns></returns>
 public static FlexNode CreateFlexNodeForTemplate(this Template template, long?idfObservation, EditableList <ActivityParameter> activityParameters, FFPresenterModel model)
 {
     return(template.CreateFlexNodeForTemplate(idfObservation, activityParameters, null, model));
 }
Beispiel #15
0
        public void RulesCheckRoutines(List <Rule> rules, FFPresenterModel ff, out List <Rule> executedRules, out List <Rule> enablingRules)
        {
            //правила, которые выполнились
            executedRules = new List <Rule>();
            //правила, которые не выполнились, но по которым надо разблокировать контролы
            enablingRules = new List <Rule>();

            if (!ff.CurrentObservation.HasValue)
            {
                return;
            }
            var idObservation = ff.CurrentObservation.Value;

            foreach (var rule in rules)
            {
                //получаем значение параметра
                //если значение не задано, то правило игнорируется
                //TODO обработать табличные значения
                var value1 = ff.ActivityParameters.GetActivityParameter(false, idObservation, rule.ParametersLookup[0].idfsParameter);
                //if ((rule.idfsRuleFunction != (long)FFRuleFunctions.Empty || rule.idfsRuleFunction != (long)FFRuleFunctions.Value) && (Utils.IsEmpty(value1) || Utils.IsEmpty(value1.varValue))) return;
                if (Utils.IsEmpty(value1) || Utils.IsEmpty(value1.varValue))
                {
                    if (!(
                            (rule.idfsRuleFunction == (long)FFRuleFunctions.Empty) ||
                            (rule.idfsRuleFunction == (long)FFRuleFunctions.Value)
                            ))
                    {
                        return;
                    }
                }

                ActivityParameter value2 = null;
                if (rule.intNumberOfParameters == 2)
                {
                    value2 = ff.ActivityParameters.GetActivityParameter(false, idObservation, rule.ParametersLookup[1].idfsParameter);
                    if (Utils.IsEmpty(value2) || Utils.IsEmpty(value2.varValue))
                    {
                        return;
                    }
                }
                //метка того, что условия для срабатывания правила выполнились
                var conditionsDone = false; //изначально не соблюдены
                //выполняем действия в зависимости от типа правила
                switch (rule.idfsRuleFunction)
                {
                case (long)FFRuleFunctions.CurrentDate:
                    var dt = ((DateTime)value1.varValue).Date;
                    if (dt <= DateTime.Now.Date)
                    {
                        conditionsDone = true;
                    }
                    break;

                case (long)FFRuleFunctions.Empty:
                    if (Utils.IsEmpty(value1) || Utils.IsEmpty(value1.varValue))
                    {
                        conditionsDone = true;
                    }
                    break;

                case (long)FFRuleFunctions.Value:
                    //если есть константы, с которыми надо сравнивать, то сравним с каждой из них
                    foreach (var constant in rule.ConstantsLookup)
                    {
                        if (Utils.IsEmpty(constant.varConstant) || constant.varConstant.ToString() == "-1")
                        {
                            if (value1 == null || Utils.IsEmpty(value1.varValue))
                            {
                                conditionsDone = true;
                                break;
                            }
                        }
                        else if (value1 != null && value1.varValue != null)
                        {
                            //сравним как строки
                            if (constant.varConstant.ToString().Equals(value1.varValue.ToString()))
                            {
                                conditionsDone = true;
                                break;
                            }
                        }
                    }
                    break;

                case (long)FFRuleFunctions.Greater:
                    double   d1;
                    double   d2;
                    DateTime dt1;
                    DateTime dt2;

                    if (value2 != null)
                    {
                        var p1 = value1.varValue.ToString();
                        var p2 = value2.varValue.ToString();

                        if (Double.TryParse(p1, out d1) &&
                            Double.TryParse(p2, out d2))
                        {
                            if (d1 > d2)
                            {
                                conditionsDone = true;
                            }
                        }
                        else if (DateTime.TryParse(p1, out dt1) &&
                                 DateTime.TryParse(p2, out dt2))
                        {
                            if (dt1 > dt2)
                            {
                                conditionsDone = true;
                            }
                        }
                    }
                    break;

                case (long)FFRuleFunctions.GreaterEqual:
                    if (value2 != null)
                    {
                        var p1 = value1.varValue.ToString();
                        var p2 = value2.varValue.ToString();

                        if (Double.TryParse(p1, out d1) &&
                            Double.TryParse(p2, out d2))
                        {
                            if (d1 >= d2)
                            {
                                conditionsDone = true;
                            }
                        }
                        else if (DateTime.TryParse(p1, out dt1) &&
                                 DateTime.TryParse(p2, out dt2))
                        {
                            if (dt1 >= dt2)
                            {
                                conditionsDone = true;
                            }
                        }
                    }
                    break;
                }
                //накладываем условие отрицания, если оно есть
                if (rule.blnNot)
                {
                    conditionsDone = !conditionsDone;
                }
                if (conditionsDone)
                {
                    executedRules.Add(rule);
                }
                else if (rule.ActionsLookup.Any(c => c.idfsRuleAction == (long)FFRuleActions.Disabled))
                {
                    enablingRules.Add(rule);
                }
            }
        }
Beispiel #16
0
 public FlexNode Add(object ffObject, FFPresenterModel model)
 {
     return(Add(ffObject, null, model));
 }
Beispiel #17
0
 public FlexNode Add(object ffObject, EditableList <ActivityParameter> activityParameters, FFPresenterModel model)
 {
     return(Add(ffObject, activityParameters, -1, model));
 }
Beispiel #18
0
        //TODO сделать добавление для лейблов и линий(?)

        //public void Add(FlexibleFormsDS.LinesRow row)
        //{
        //    FlexLineItem item = new FlexLineItem(row);
        //    mChildList.Add(new FlexNode(this, item));
        //}

        ///// <summary>
        /////
        ///// </summary>
        ///// <param name="row"></param>
        //public void Add(FlexibleFormsDS.LabelsRow row)
        //{
        //    FlexLabelItem item = new FlexLabelItem(row);
        //    mChildList.Add(new FlexNode(this, item));
        //}

        /// <summary>
        ///
        /// </summary>
        /// <param name="ffObject"></param>
        /// <param name="activityParameters"></param>
        /// <param name="index">Индекс для вставки</param>
        /// <param name="model"></param>
        public FlexNode Add(object ffObject, EditableList <ActivityParameter> activityParameters, int index, FFPresenterModel model)
        {
            var flexNode = new FlexNode(this, new FlexItem(ffObject), activityParameters, model);

            if (index == -1)
            {
                ChildList.Add(flexNode);
            }
            else
            {
                ChildList.Insert(0, flexNode);
            }
            return(flexNode);
        }
Beispiel #19
0
 public TemplateHelper()
 {
     Model = new FFPresenterModel();
 }
Beispiel #20
0
        public static FlexNode CreateFlexNodeForTemplate(this Template template, long?idfObservation, EditableList <ActivityParameter> activityParameters, List <PredefinedStub> predefinedStubRows, FFPresenterModel model)
        {
            var rootNode = new FlexNode(null, null, null, null)
            {
                FormKey = idfObservation.HasValue
                    ? DataHelper.GetFFParameterKey(template.idfsFormTemplate, idfObservation.Value)
                    : DataHelper.GetFFParameterSimpleKey(template.idfsFormTemplate)
            };

            //начинаем с корня шаблона и внутрь
            CreateFlexNodeForSection(rootNode, null, template, activityParameters, predefinedStubRows, model);
            //рекурсивная сортировка узлов
            rootNode.SortRecursive();
            //динамические параметры
            FlexNode dynamicSectNode = null;

            if (idfObservation.HasValue)
            {
                var deletedFromTemplates = FFHelper.GetDeletedParameters(activityParameters, idfObservation.Value, template);
                if (deletedFromTemplates.Count > 0 || model.DynamicParameterEnabled)
                {
                    FlexNode prevNode = rootNode.ChildListCount == 0 ? null : (FlexNode)rootNode.ChildList[rootNode.ChildListCount - 1];

                    var sectCaption = new SectionDeletedFromTemplate(EidssMessages.Get("DynamicParametersGroupControlCaption"));
                    sectCaption.intLeft   = prevNode == null ? 4 : prevNode.Coord.X;
                    sectCaption.intTop    = prevNode == null ? 4 : prevNode.Coord.Y + prevNode.Height;
                    sectCaption.intOrder  = prevNode == null ? 1 : prevNode.Order + 1;
                    sectCaption.intHeight = 0;

                    //создаём псевдосекцию, в которой будем размещать эти параметры
                    dynamicSectNode = new FlexNode(null, new FlexItem(sectCaption), activityParameters, model);
                    for (var i = 0; i < deletedFromTemplates.Count; i++)
                    {
                        var dp = deletedFromTemplates[i];

                        // calculate section size from its content
                        if (sectCaption.intWidth == null || dp.intWidth > sectCaption.intWidth)
                        {
                            sectCaption.intWidth = dp.intWidth;
                        }
                        dp.intTop              = sectCaption.Height + 4;
                        sectCaption.intHeight += dp.intHeight + 4;
                        dp.intLeft             = sectCaption.Left;

                        var ap = activityParameters.FirstOrDefault(c => c.idfsParameter == dp.idfsParameter);
                        if (ap != null)
                        {
                            ap.IsDynamicParameter = true;
                        }
                        var node = dynamicSectNode.Add(dp, activityParameters, model);
                        node.FormKey = dynamicSectNode.FormKey;
                        node.Order   = i;
                    }
                    //если динамическая секция есть, то добавляем её в самый конец списка
                    if (dynamicSectNode != null)
                    {
                        rootNode.Add(dynamicSectNode);
                    }
                }
            }

            return(rootNode);
        }