Exemple #1
0
        private static void ApplyProgressFormat(ReportColumn column, IEnumerable <ReportConditionalFormatRule> rules)
        {
            if (column.ColumnFormattingRule != null)
            {
                column.ColumnFormattingRule.AsWritable().Delete();
            }
            ReportConditionalFormatRule rule = rules.First();
            decimal min;

            if (!decimal.TryParse(rule.PercentageBounds.LowerBounds.ToString(), out min))
            {
                min = 0;
            }
            int max;

            if (!int.TryParse(rule.PercentageBounds.UpperBounds.ToString(), out max))
            {
                max = 0;
            }
            BarFormattingRule formattingRule = new BarFormattingRule
            {
                BarColor = rule.ForegroundColor != null?rule.ForegroundColor.ToColourString() : null,
                               BarMinValue = ReportConditionHelper.ArgumentForConditionType(column.ColumnExpression.ReportExpressionResultType, rule.PercentageBounds.LowerBounds.ToString()),
                               BarMaxValue = ReportConditionHelper.ArgumentForConditionType(column.ColumnExpression.ReportExpressionResultType, rule.PercentageBounds.UpperBounds.ToString())
            };

            formattingRule.Save();
            column.ColumnFormattingRule = formattingRule.As <FormattingRule>();
        }
Exemple #2
0
        private static ReportCondition ReportConditionFromRule(ReportConditionalFormatRule rule, ReportColumn column)
        {
            ReportCondition reportCondition = new ReportCondition();

            if (rule.Operator.HasValue && rule.Operator != ConditionType.Unspecified)
            {
                string alias = "oper" + rule.Operator.ToString();
                reportCondition.Operator = Entity.Get <OperatorEnum>(new EntityRef(alias));
            }

            Parameter parameter = reportCondition.ConditionParameter != null?reportCondition.ConditionParameter.AsWritable <Parameter>() : new Parameter();

            // Clear the old parameter
            if (parameter.ParamTypeAndDefault != null)
            {
                parameter.ParamTypeAndDefault.AsWritable().Delete();
            }
            // Force entity resource list for argument if we have entities
            ActivityArgument activityArgument = null;

            if (rule.Values != null && rule.Values.Count > 0)
            {
                ResourceListArgument resourceList = new ResourceListArgument();
                foreach (KeyValuePair <long, string> valuePair in rule.Values)
                {
                    Resource resource = Entity.Get <Resource>(valuePair.Key);
                    if (resource != null)
                    {
                        resourceList.ResourceListParameterValues.Add(resource);
                    }
                }
                TypedArgument argumentType = column.ColumnExpression.ReportExpressionResultType.As <TypedArgument>();
                resourceList.ConformsToType = argumentType.ConformsToType;
                activityArgument            = resourceList.As <ActivityArgument>();
                activityArgument.Save();
            }
            else if (rule.Operator.HasValue)
            {
                int operatorCount = ConditionTypeHelper.GetArgumentCount(rule.Operator.Value);
                if (operatorCount > 0)
                {
                    activityArgument = ReportConditionHelper.ArgumentForConditionType(column.ColumnExpression.ReportExpressionResultType, rule.Operator.Value, rule.Value);
                    activityArgument.Save();
                }
            }
            parameter.ParamTypeAndDefault = activityArgument;
            parameter.Save();
            reportCondition.ConditionParameter = parameter;
            return(reportCondition);
        }
        /// <summary>
        /// Tries to get the rule based on the default condition rules for the choice field column.
        /// </summary>
        /// <param name="conditionalFormat">The conditional column format.</param>
        /// <param name="data">The data.</param>
        /// <param name="ruleIndex">Index of the rule.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        /// <exception cref="System.InvalidOperationException">Predicate has not been set of condition.</exception>
        public bool TryGetDefaultRule(ReportColumnConditionalFormat conditionalFormat, object data, out long ruleIndex)
        {
            if (conditionalFormat != null && conditionalFormat.Rules != null && conditionalFormat.Rules.Count > 0)
            {
                for (int i = 0; i < conditionalFormat.Rules.Count; i++)
                {
                    ReportConditionalFormatRule rule = conditionalFormat.Rules[i];

                    if (rule.Values == null || rule.Predicate == null)
                    {
                        continue;
                    }

                    if (rule.Predicate(data))
                    {
                        ruleIndex = i;
                        return(true);
                    }
                }
            }

            ruleIndex = -1;
            return(false);
        }
        /// <summary>
        /// Builds a list of conditional format rules for the report.
        /// </summary>
        /// <returns>Dictionary{GuidList{ReportConditionalFormatRule}}.</returns>
        public Dictionary <string, ReportColumnConditionalFormat> FormatsForReport(out Dictionary <string, ReportImageScale> imageScaleRules)
        {
            imageScaleRules = null;
            if (_formatRules != null && _formatRules.Count > 0)
            {
                Dictionary <string, ReportColumnConditionalFormat> formats = new Dictionary <string, ReportColumnConditionalFormat>(_formatRules.Count);
                EntityRef         imageScale        = null;
                EntityRef         imageSize         = null;
                ThumbnailSizeEnum thumbnailSizeEnum = null;
                foreach (KeyValuePair <string, List <ConditionInfo> > formatRule in _formatRules)
                {
                    ReportColumnConditionalFormat columnFormat = new ReportColumnConditionalFormat();

                    List <ReportConditionalFormatRule> rules = new List <ReportConditionalFormatRule>();
                    foreach (ConditionInfo conditionInfo in formatRule.Value)
                    {
                        if (rules.Count <= 0)
                        {
                            columnFormat.Style     = conditionInfo.Style;
                            columnFormat.ShowValue = conditionInfo.ShowText;
                        }
                        ReportConditionalFormatRule rule = new ReportConditionalFormatRule
                        {
                            Operator = conditionInfo.Operator,
                        };
                        if (conditionInfo.ColorRule != null)
                        {
                            if (conditionInfo.ColorRule.ForegroundColor != null)
                            {
                                rule.ForegroundColor = new ReportConditionColor
                                {
                                    Alpha = conditionInfo.ColorRule.ForegroundColor.A,
                                    Blue  = conditionInfo.ColorRule.ForegroundColor.B,
                                    Green = conditionInfo.ColorRule.ForegroundColor.G,
                                    Red   = conditionInfo.ColorRule.ForegroundColor.R
                                };
                            }
                            if (conditionInfo.ColorRule.BackgroundColor != null)
                            {
                                rule.BackgroundColor = new ReportConditionColor
                                {
                                    Alpha = conditionInfo.ColorRule.BackgroundColor.A,
                                    Blue  = conditionInfo.ColorRule.BackgroundColor.B,
                                    Green = conditionInfo.ColorRule.BackgroundColor.G,
                                    Red   = conditionInfo.ColorRule.BackgroundColor.R
                                };
                            }
                        }
                        if (conditionInfo.LowerBounds != null || conditionInfo.Upperbounds != null)
                        {
                            rule.PercentageBounds = new ReportPercentageBounds
                            {
                                LowerBounds = conditionInfo.LowerBounds,
                                UpperBounds = conditionInfo.Upperbounds
                            };
                        }
                        if (conditionInfo.IconRule != null && (conditionInfo.IconRule.IconId ?? 0) > 0)
                        {
                            if ((conditionInfo.IconRule.CfEntityId ?? 0) > 0)
                            {
                                IEntity cfEntity = Entity.Get(conditionInfo.IconRule.CfEntityId.Value);
                                var     cfi      = cfEntity.As <ConditionalFormatIcon>();
                                if (cfi != null)
                                {
                                    rule.CfEntityId    = cfi.Id;
                                    rule.ImageEntityId = cfi.CondFormatImage != null ? cfi.CondFormatImage.Id : -1;
                                }
                            }
                            else
                            {
                                IEntity entity = Entity.Get(conditionInfo.IconRule.IconId.Value);
                                if (entity.Is <IconFileType>())
                                {
                                    rule.ImageEntityId = conditionInfo.IconRule.IconId.Value;
                                }
                            }

                            if (imageScale == null)
                            {
                                imageScale = new EntityRef("core", "scaleImageProportionally");
                            }
                            if (imageSize == null)
                            {
                                imageSize = new EntityRef("console", "iconThumbnailSize");
                            }
                            if (thumbnailSizeEnum == null)
                            {
                                thumbnailSizeEnum = Entity.Get <ThumbnailSizeEnum>(imageSize);
                            }
                            if (imageScaleRules == null)
                            {
                                imageScaleRules = new Dictionary <string, ReportImageScale>();
                            }
                            if (!imageScaleRules.ContainsKey(formatRule.Key))
                            {
                                ReportImageScale reportImageScale = new ReportImageScale
                                {
                                    ImageScaleId = imageScale.Id,
                                    ImageSizeId  = imageSize.Id,
                                    ImageWidth   = thumbnailSizeEnum.ThumbnailWidth ?? 16,
                                    ImageHeight  = thumbnailSizeEnum.ThumbnailHeight ?? 16
                                };
                                imageScaleRules.Add(formatRule.Key, reportImageScale);
                            }
                        }
                        // Handle the values for the typed value only if this is not an icon as it has relationships
                        if (conditionInfo.Values != null && conditionInfo.Values.Count > 0)
                        {
                            if (conditionInfo.Values[0].Type is ChoiceRelationshipType || conditionInfo.Values[0].Type is InlineRelationshipType || conditionInfo.Values[0].Type is StructureLevelsType)
                            {
                                rule.Values = ProcessConditionValues(conditionInfo.Values);
                                // If there are no values returned then this must be a text string rather than a list of entity identifiers.
                                if (rule.Values == null)
                                {
                                    rule.Value = conditionInfo.Values[0].ValueString;
                                }
                            }
                            else
                            {
                                DateTime dateTimeValue;
                                if ((conditionInfo.Values[0].Type is DateTimeType || conditionInfo.Values[0].Type is TimeType || conditionInfo.Values[0].Type is DateType) &&
                                    (DateTime.TryParse(conditionInfo.Values[0].Value.ToString(), out dateTimeValue)))
                                {
                                    rule.Value = dateTimeValue.ToString("yyyy-MM-ddTHH:mm:ssZ");
                                }
                                else
                                {
                                    rule.Value = conditionInfo.Values[0].ValueString;
                                }
                            }
                        }
                        rules.Add(rule);
                    }
                    columnFormat.Rules = rules;
                    formats.Add(formatRule.Key, columnFormat);
                }
                return(formats);
            }
            return(null);
        }