public static int CompareSeries(ResultSerie a, ResultSerie b)
        {
            if (a.SplitterCells == null || b.SplitterCells == null)
            {
                return(0);
            }
            return(ResultCell.CompareCells(a.SplitterCells, b.SplitterCells));

            /*     a.
             *
             *
             *   if (a.Length == 0 || a.Length != b.Length) return 0;
             *   ReportModel model = a[0].Element.Model;
             *
             *   foreach (ReportElement element in model.Elements.OrderBy(i => i.FinalSortOrder))
             *   {
             *       ResultCell aCell = a.FirstOrDefault(i => i.Element == element);
             *       ResultCell bCell = b.FirstOrDefault(i => i.Element == element);
             *       if (aCell != null && bCell != null)
             *       {
             *           int result = CompareCell(aCell, bCell);
             *           if (result != 0) return (element.SortOrder.Contains(SortOrderConverter.kAscendantSortKeyword) ? 1 : -1) * result;
             *       }
             *   }*/
            //return 0;
        }
Esempio n. 2
0
 /// <summary>
 /// Compares 2 ResultSerie objects
 /// </summary>
 public static int CompareSeries(ResultSerie a, ResultSerie b)
 {
     if (a.SplitterCells == null || b.SplitterCells == null)
     {
         return(0);
     }
     return(ResultCell.CompareCells(a.SplitterCells, b.SplitterCells));
 }
Esempio n. 3
0
        public static int CompareSeries(ResultSerie a, ResultSerie b)
        {
            if (a.SplitterCells == null || b.SplitterCells == null) return 0;
            return ResultCell.CompareCells(a.SplitterCells, b.SplitterCells);

       /*     a.


            if (a.Length == 0 || a.Length != b.Length) return 0;
            ReportModel model = a[0].Element.Model;

            foreach (ReportElement element in model.Elements.OrderBy(i => i.FinalSortOrder))
            {
                ResultCell aCell = a.FirstOrDefault(i => i.Element == element);
                ResultCell bCell = b.FirstOrDefault(i => i.Element == element);
                if (aCell != null && bCell != null)
                {
                    int result = CompareCell(aCell, bCell);
                    if (result != 0) return (element.SortOrder.Contains(SortOrderConverter.kAscendantSortKeyword) ? 1 : -1) * result;
                }
            }*/
            //return 0;
        }
Esempio n. 4
0
        private void buildSeries(ReportModel model)
        {
            foreach (ResultPage page in model.Pages)
            {
                if (Report.Cancel) break;

                foreach (List<ResultData> datas in page.Datas.Values)
                {
                    if (Report.Cancel) break;

                    foreach (ResultData data in datas)
                    {
                        if (Report.Cancel) break;

                        ResultCell[] xPrimaryDimensions = GetXSerieCells(AxisType.Primary, data.Row, data.Column, model);
                        int primaryIndex = FindDimension(xPrimaryDimensions, page.PrimaryXDimensions);
                        xPrimaryDimensions = page.PrimaryXDimensions[primaryIndex];
                        ResultCell[] xSecondaryDimensions = GetXSerieCells(AxisType.Secondary, data.Row, data.Column, model);
                        int secondaryIndex = FindDimension(xSecondaryDimensions, page.SecondaryXDimensions);
                        xSecondaryDimensions = page.SecondaryXDimensions[secondaryIndex];

                        string primarySplitterValues = Helper.ConcatCellValues(GetSplitterSerieCells(AxisType.Primary, data.Row, data.Column, model), ",");
                        string secondarySplitterValues = Helper.ConcatCellValues(GetSplitterSerieCells(AxisType.Secondary, data.Row, data.Column, model), ",");

                        foreach ( var dataCell in data.Data.Where(i => i.Element.IsSerie))
                        {
                            var serieElement = dataCell.Element;
                            ResultCell[] xValues = (serieElement.XAxisType == AxisType.Primary ? xPrimaryDimensions : xSecondaryDimensions);
                            string splitterValue = (serieElement.XAxisType == AxisType.Primary ? primarySplitterValues : secondarySplitterValues);
                            ResultSerie serie = page.Series.FirstOrDefault(i => i.Element == serieElement && i.SplitterValues == splitterValue);
                            if (serie == null)
                            {
                                serie = new ResultSerie() { Element = serieElement, SplitterValues = splitterValue };
                                page.Series.Add(serie);
                            }

                            ResultSerieValue serieValue = serie.Values.FirstOrDefault(i => i.XDimensionValues == xValues);
                            if (serieValue == null)
                            {
                                serieValue = new ResultSerieValue() { XDimensionValues = xValues };
                                serieValue.Yvalue = new ResultTotalCell() { Element = serieElement, IsSerie = true };
                                serie.Values.Add(serieValue);
                            }
                            serieValue.Yvalue.Cells.Add(new ResultCell() { Element = serieElement, Value = dataCell.Value, ContextRow = dataCell.ContextRow, ContextCol = dataCell.ContextCol });
                        }
                    }
                }
            }

            //Calculate the serie values
            foreach (ResultPage page in model.Pages)
            {
                if (Report.Cancel) break;
                foreach (var serie in page.Series)
                {
                    foreach (var serieValue in serie.Values)
                    {
                        //Classic calculation
                        serieValue.Yvalue.Calculate();
                        if (!string.IsNullOrEmpty(serieValue.Yvalue.Element.CellScript))
                        {
                            //Cell script option
                            serieValue.Yvalue.ProcessContext();
                            serieValue.Yvalue.ContextTable = page.DataTable;
                            serieValue.Yvalue.ContextPage = page;
                            serieValue.Yvalue.ContextModel = model;
                            executeCellScript(serieValue.Yvalue);
                        }
                    }
                }
            }
        }
Esempio n. 5
0
        private void buildNVD3Series(ResultPage page)
        {
            initAxisProperties(page, page.PrimaryXDimensions);
            //Sort series if necessary, only one serie is used for sorting...
            if (!page.NVD3IsNumericAxis && !page.NVD3IsDateTimeAxis)
            {
                _serieForSort = page.Series.FirstOrDefault(i => i.Element.SerieSortType != SerieSortType.None);
                if (_serieForSort != null)
                {
                    if (_serieForSort.Element.SerieSortType == SerieSortType.Y) page.PrimaryXDimensions.Sort(CompareXDimensionsWithSeries);
                    else page.PrimaryXDimensions.Sort(CompareXDimensionsWithAxis);
                }
            }
            initChartXValues(page);

            page.NVD3XLabelMaxLen = 10;
            page.NVD3YPrimaryMaxLen = 6;
            page.NVD3YSecondaryMaxLen = 6;

            StringBuilder result = new StringBuilder();
            if (!page.NVD3IsNumericAxis && !page.NVD3IsDateTimeAxis)
            {
                //Build X labels
                foreach (var key in page.PrimaryXValues.Keys)
                {
                    if (result.Length != 0) result.Append(",");
                    var xval = page.PrimaryXValues[key].ToString();
                    result.Append(Helper.QuoteSingle(HttpUtility.JavaScriptStringEncode(xval)));
                    if (xval.Length > page.NVD3XLabelMaxLen) page.NVD3XLabelMaxLen = xval.Length;
                }

                page.NVD3XLabels = result.ToString();
            }

            foreach (ResultSerie resultSerie in page.Series)
            {
                if (Report.Cancel) break;

                if (string.IsNullOrEmpty(page.NVD3PrimaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Primary)
                {
                    page.NVD3PrimaryYAxisFormat = resultSerie.Element.GetNVD3Format(CultureInfo, page.NVD3ChartType);
                    page.NVD3PrimaryYIsDateTime = resultSerie.Element.IsDateTime;
                }
                else if (string.IsNullOrEmpty(page.NVD3SecondaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Secondary)
                {
                    page.NVD3SecondaryYAxisFormat = resultSerie.Element.GetNVD3Format(CultureInfo, page.NVD3ChartType);
                    page.NVD3SecondaryYIsDateTime = resultSerie.Element.IsDateTime;
                }
                //Fill Serie
                result = new StringBuilder();
                int index = 0;
                foreach (var xDimensionKey in page.PrimaryXValues.Keys)
                {
                    string xValue = (index++).ToString(CultureInfo.InvariantCulture.NumberFormat);

                    //Find the corresponding serie value...
                    ResultSerieValue value = resultSerie.Values.FirstOrDefault(i => i.XDimensionValues == xDimensionKey);
                    object yValue = (value != null ? value.Yvalue.Value : null);
                    if (result.Length != 0) result.Append(",");
                    if (resultSerie.Element.YAxisType == AxisType.Primary && value != null && value.Yvalue.DisplayValue.Length > page.NVD3YPrimaryMaxLen) page.NVD3YPrimaryMaxLen = value.Yvalue.DisplayValue.Length;
                    if (resultSerie.Element.YAxisType == AxisType.Secondary && value != null && value.Yvalue.DisplayValue.Length > page.NVD3YSecondaryMaxLen) page.NVD3YSecondaryMaxLen = value.Yvalue.DisplayValue.Length;

                    if (page.NVD3IsNumericAxis)
                    {
                        Double db = 0;
                        if (value == null) Double.TryParse(page.PrimaryXValues[xDimensionKey].ToString(), out db);
                        else if (value.XDimensionValues[0].DoubleValue != null) db = value.XDimensionValues[0].DoubleValue.Value;
                        xValue = db.ToString(CultureInfo.InvariantCulture.NumberFormat);
                    }
                    else if (page.NVD3IsDateTimeAxis)
                    {
                        DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0);
                        if (value == null) dt = ((DateTime)page.PrimaryXValues[xDimensionKey]);
                        else if (value.XDimensionValues[0].DateTimeValue != null) dt = value.XDimensionValues[0].DateTimeValue.Value;
                        TimeSpan diff = dt.ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0));
                        xValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds));
                    }

                    if (yValue is DateTime)
                    {
                        TimeSpan diff = ((DateTime)yValue).ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0));
                        yValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds));
                    }
                    else if (yValue is Double)
                    {
                        yValue = ((Double)yValue).ToString(CultureInfo.InvariantCulture.NumberFormat);
                    }

                    result.AppendFormat("{{x:{0},y:{1}}}", xValue, yValue == null ? "0" : yValue);
                }
                resultSerie.NVD3SerieValues = result.ToString();
            }
        }
Esempio n. 6
0
        private void buildChartSeries(ResultPage page)
        {
            if (page.ChartInitDone)
            {
                return;
            }

            initAxisProperties(page, page.PrimaryXDimensions);
            //Sort series if necessary, only one serie is used for sorting...
            if (!Model.ExecChartIsNumericAxis && !Model.ExecChartIsDateTimeAxis)
            {
                _serieForSort = page.Series.FirstOrDefault(i => i.Element.SerieSortType != SerieSortType.None);
                if (_serieForSort != null)
                {
                    if (_serieForSort.Element.SerieSortType == SerieSortType.Y)
                    {
                        page.PrimaryXDimensions.Sort(CompareXDimensionsWithSeries);
                    }
                    else
                    {
                        page.PrimaryXDimensions.Sort(CompareXDimensionsWithAxis);
                    }
                }
            }
            initChartXValues(page);

            page.AxisXLabelMaxLen     = 10;
            page.AxisYPrimaryMaxLen   = 6;
            page.AxisYSecondaryMaxLen = 6;

            StringBuilder result = new StringBuilder(), navs = new StringBuilder();

            // TOCHECK ?    if (!Model.ExecChartIsNumericAxis && !Model.ExecChartIsDateTimeAxis)
            //     {
            //Build X labels
            foreach (var key in page.PrimaryXValues.Keys)
            {
                ResultCell[] dimensions = key as ResultCell[];
                if (result.Length != 0)
                {
                    result.Append(",");
                }
                var xval = (dimensions.Length == 1 ? dimensions[0].DisplayValue : page.PrimaryXValues[key].ToString());
                result.Append(Helper.QuoteSingle(HttpUtility.JavaScriptStringEncode(xval)));
                if (xval.Length > page.AxisXLabelMaxLen)
                {
                    page.AxisXLabelMaxLen = xval.Length;
                }

                var navigation = Model.GetNavigation(((ResultCell[])key)[0]);
                if (!string.IsNullOrEmpty(navigation))
                {
                    if (navs.Length != 0)
                    {
                        navs.Append(",");
                    }
                    navs.Append(navigation);
                }
            }

            page.ChartXLabels     = result.ToString();
            page.ChartNavigations = navs.ToString();
            //   }

            foreach (ResultSerie resultSerie in page.Series)
            {
                if (Report.Cancel)
                {
                    break;
                }

                if (string.IsNullOrEmpty(Model.ExecD3PrimaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Primary)
                {
                    Model.ExecD3PrimaryYAxisFormat   = resultSerie.Element.GetD3Format(CultureInfo, Model.ExecNVD3ChartType);
                    Model.ExecAxisPrimaryYIsDateTime = resultSerie.Element.IsDateTime;
                }
                else if (string.IsNullOrEmpty(Model.ExecD3SecondaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Secondary)
                {
                    Model.ExecD3SecondaryYAxisFormat   = resultSerie.Element.GetD3Format(CultureInfo, Model.ExecNVD3ChartType);
                    Model.ExecAxisSecondaryYIsDateTime = resultSerie.Element.IsDateTime;
                }
                //Fill Serie
                StringBuilder chartXResult = new StringBuilder(), chartXDateTimeResult = new StringBuilder(), chartYResult = new StringBuilder();
                StringBuilder chartXYResult = new StringBuilder(), chartYDisplayResult = new StringBuilder();
                int           index = 0;
                foreach (var xDimensionKey in page.PrimaryXValues.Keys)
                {
                    string   xValue   = (index++).ToString(CultureInfo.InvariantCulture.NumberFormat);
                    DateTime xValueDT = DateTime.MinValue;

                    //Find the corresponding serie value...
                    ResultSerieValue value  = resultSerie.Values.FirstOrDefault(i => i.XDimensionValues == xDimensionKey);
                    object           yValue = (value != null ? value.Yvalue.Value : null);
                    if (resultSerie.Element.YAxisType == AxisType.Primary && value != null && value.Yvalue.DisplayValue.Length > page.AxisYPrimaryMaxLen)
                    {
                        page.AxisYPrimaryMaxLen = value.Yvalue.DisplayValue.Length;
                    }
                    if (resultSerie.Element.YAxisType == AxisType.Secondary && value != null && value.Yvalue.DisplayValue.Length > page.AxisYSecondaryMaxLen)
                    {
                        page.AxisYSecondaryMaxLen = value.Yvalue.DisplayValue.Length;
                    }

                    if (Model.ExecChartIsNumericAxis)
                    {
                        Double db = 0;
                        if (value == null)
                        {
                            Double.TryParse(page.PrimaryXValues[xDimensionKey].ToString(), out db);
                        }
                        else if (value.XDimensionValues[0].DoubleValue != null)
                        {
                            db = value.XDimensionValues[0].DoubleValue.Value;
                        }
                        xValue = db.ToString(CultureInfo.InvariantCulture.NumberFormat);
                    }
                    else if (Model.ExecChartIsDateTimeAxis)
                    {
                        DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0);
                        if (value == null)
                        {
                            dt = ((DateTime)page.PrimaryXValues[xDimensionKey]);
                        }
                        else if (value.XDimensionValues[0].DateTimeValue != null)
                        {
                            dt = value.XDimensionValues[0].DateTimeValue.Value;
                        }
                        xValueDT = dt;
                        TimeSpan diff = dt.ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0));
                        xValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds));
                    }

                    if (yValue is DateTime)
                    {
                        TimeSpan diff = ((DateTime)yValue).ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0));
                        yValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds));
                    }
                    else if (yValue is Double)
                    {
                        yValue = ((Double)yValue).ToString(CultureInfo.InvariantCulture.NumberFormat);
                    }

                    if (yValue == null && GetBoolValue(Parameter.NVD3AddNullPointParameter))
                    {
                        yValue = "0";
                    }
                    if (yValue != null)
                    {
                        if (chartXYResult.Length != 0)
                        {
                            chartXYResult.Append(",");
                        }
                        chartXYResult.AppendFormat("{{x:{0},y:{1}}}", xValue, yValue);

                        if (chartXResult.Length != 0)
                        {
                            chartXResult.Append(",");
                        }
                        chartXResult.AppendFormat("{0}", xValue);

                        if (Model.ExecChartIsDateTimeAxis)
                        {
                            if (chartXDateTimeResult.Length != 0)
                            {
                                chartXDateTimeResult.Append(",");
                            }
                            chartXDateTimeResult.AppendFormat("\"{0:yyyy-MM-dd HH:mm:ss}\"", xValueDT);
                        }

                        if (chartYResult.Length != 0)
                        {
                            chartYResult.Append(",");
                        }
                        chartYResult.AppendFormat("{0}", yValue);

                        //? if (chartYDisplayResult.Length != 0) chartYDisplayResult.Append(",");
                        //? chartYDisplayResult.AppendFormat("'{0}'", Helper.ToJS(value.Yvalue.DisplayValue));
                    }
                }
                resultSerie.ChartXYSerieValues        = chartXYResult.ToString();
                resultSerie.ChartXSerieValues         = chartXResult.ToString();
                resultSerie.ChartXDateTimeSerieValues = chartXDateTimeResult.ToString();
                resultSerie.ChartYSerieValues         = chartYResult.ToString();
                //?resultSerie.ChartYSerieDisplayValues = chartYDisplayResult.ToString();
            }
            page.ChartInitDone = true;
        }