/// <summary>
        /// Converts a list with observations result to a dictionary
        /// where only the properties that is in the table fields list is used.
        /// </summary>
        /// <param name="obsResultList">The observations.</param>
        /// <param name="tableFields">The table fields.</param>
        public List <Dictionary <ViewTableField, string> > GetObservationsListDictionary(
            IEnumerable <SpeciesObservationViewModel> obsResultList,
            IEnumerable <ViewTableField> tableFields)
        {
            var result = new List <Dictionary <ViewTableField, string> >();
            List <PropertyInfo> properties = GetObservationViewModelPropertyInfos(tableFields);
            Dictionary <string, ViewTableField> tableFieldsDictionary = new Dictionary <string, ViewTableField>();

            //SpeciesObservationFieldDescriptionViewManager fieldDescriptionViewManager = new SpeciesObservationFieldDescriptionViewManager(userContext, mySettings);
            //var fieldDescriptionsViewModel = fieldDescriptionViewManager.CreateSpeciesObservationFieldDescriptionsViewModel();
            foreach (var viewTableField in tableFields)
            {
                tableFieldsDictionary.Add(viewTableField.DataField, viewTableField);
            }
            bool           addObservationId          = false;
            ViewTableField observationViewTableField = null;

            if (tableFields.All(x => x.DataField != "ObservationId"))
            {
                addObservationId          = true;
                observationViewTableField = new ViewTableField("ObservationId", "ObservationId");
            }

            foreach (SpeciesObservationViewModel observation in obsResultList)
            {
                var dic = new Dictionary <ViewTableField, string>();
                foreach (PropertyInfo propertyInfo in properties)
                {
                    object propValue = propertyInfo.GetValue(observation, null);
                    dic.Add(tableFieldsDictionary[propertyInfo.Name], propValue == null ? "" : propValue.ToString());
                }
                if (addObservationId)
                {
                    dic.Add(observationViewTableField, observation.ObservationId);
                }

                if (observation.Projects != null)
                {
                    foreach (var projectViewModel in observation.Projects)
                    {
                        if (projectViewModel.ProjectParameters != null)
                        {
                            foreach (var projectParameter in projectViewModel.ProjectParameters.Values)
                            {
                                string         headerTitle    = string.Format("[{0}].[{1}]", projectViewModel.Name, projectParameter.Name);
                                ViewTableField viewTableField = new ViewTableField(headerTitle, headerTitle);
                                dic.Add(viewTableField, projectParameter.Value);
                            }
                        }
                    }
                }

                result.Add(dic);
            }

            return(result);
        }
        /// <summary>
        /// Returns the view model of the table data.
        /// </summary>
        /// <returns></returns>
        public ViewTableViewModel GetViewTableViewModel()
        {
            ViewTableViewModel model = new ViewTableViewModel();
            List <ISpeciesObservationFieldDescription> fields = PresentationTableSetting.SpeciesObservationTable.GetTableFields(UserContext);
            var tableFields = new List <ViewTableField>();

            foreach (ISpeciesObservationFieldDescription field in fields)
            {
                ViewTableField viewTableField = new ViewTableField(field.Label, field.Name);
                tableFields.Add(viewTableField);
            }
            model.TableFields = tableFields;
            return(model);
        }
        public ViewTableViewModel CreateViewTableViewModel()
        {
            ViewTableViewModel model = new ViewTableViewModel();
            PagedSpeciesObservationResultCalculator resultCalculator = new PagedSpeciesObservationResultCalculator(UserContext, MySettings);

            model.ComplexityEstimate = resultCalculator.GetQueryComplexityEstimate();

            List <ISpeciesObservationFieldDescription> fields = PresentationTableSetting.SpeciesObservationTable.GetTableFields(UserContext);
            var tableFields = new List <ViewTableField>();

            foreach (ISpeciesObservationFieldDescription field in fields)
            {
                ViewTableField viewTableField = new ViewTableField(field.Label, field.Name.FirstLetterToUpper());
                tableFields.Add(viewTableField);
            }
            model.TableFields = tableFields;
            return(model);
        }
        public ViewTableViewModel CreateViewTableViewModelByImportance(int?importance)
        {
            ViewTableViewModel model = new ViewTableViewModel();
            List <ISpeciesObservationFieldDescription> fields;

            if (importance.HasValue)
            {
                fields = PresentationTableSetting.SpeciesObservationTable.GetTableFieldsByImportance(UserContext, importance.Value);
            }
            else
            {
                fields = PresentationTableSetting.SpeciesObservationTable.GetTableFields(UserContext);
            }

            var tableFields = new List <ViewTableField>();

            foreach (ISpeciesObservationFieldDescription field in fields)
            {
                ViewTableField viewTableField = new ViewTableField(field.Label, field.Name.FirstLetterToUpper());
                tableFields.Add(viewTableField);
            }
            model.TableFields = tableFields;
            return(model);
        }