Example #1
0
        public static List <DashboardViewChartRawDataModel> ConvertMultiStackedData(
            List <DashboardViewChartDataMultiStackedModel> multiStackedData,
            List <DashboardViewChartDataMultiStackedModel> multiStackedRawData,
            bool isMulti)
        {
            var result           = new List <DashboardViewChartRawDataModel>();
            var invertedDataItem = new DashboardViewChartRawDataModel();
            var dataItem         = new DashboardViewChartRawDataModel();

            // Get element with max Option count
            var maxOptionObject = multiStackedData
                                  .Select(location => location.Series.OrderByDescending(item => item.Series.Count)
                                          .First())
                                  .Select(x => x.Series)
                                  .FirstOrDefault();

            if (maxOptionObject == null)
            {
                throw new Exception($"{nameof(maxOptionObject)} is null");
            }

            // Add percent headers
            var headers = new List <string>(maxOptionObject.Count);

            foreach (var dataMultiModel in maxOptionObject)
            {
                headers.Add(dataMultiModel.Name); // Option name
            }

            // Add total header
            headers.Add("%");

            // Add amount headers
            foreach (var dataMultiModel in maxOptionObject)
            {
                headers.Add(dataMultiModel.Name); // Option name
            }

            // Add total header
            headers.Add("n");

            invertedDataItem.RawHeaders = headers;
            dataItem.RawHeaders         = headers;


            // Year
            // // Location
            // // // Option
            // // // // Value
            var invertedMultiStackedDataResult = new List <DashboardViewChartRawDataItemModel>();

            foreach (var dataMultiStackedModel in multiStackedRawData)
            {
                var chartRawDataModel = new DashboardViewChartRawDataItemModel
                {
                    RawValueName = dataMultiStackedModel.Name, // Year
                };

                // Rows
                if (dataMultiStackedModel.Series.Any())
                {
                    var rawDataList = new List <DashboardViewChartRawDataValuesModel>();

                    // column count + total column
                    var columnCount          = maxOptionObject.Count + 1;
                    var lastColumnArrayIndex = columnCount - 1;

                    // Get row names
                    foreach (var multiModel in dataMultiStackedModel.Series)
                    {
                        var rawDataValuesModel = new DashboardViewChartRawDataValuesModel
                        {
                            ValueName = multiModel.Name, // location name
                            Percents  = new decimal[columnCount],
                            Amounts   = new decimal[columnCount],
                        };

                        rawDataList.Add(rawDataValuesModel);
                    }

                    // by location
                    for (var i = 0; i < dataMultiStackedModel.Series.Count; i++)
                    {
                        // location
                        var dataMultiModel = dataMultiStackedModel.Series[i];

                        // by Item
                        for (var y = 0; y < maxOptionObject.Count; y++)
                        {
                            var maxObjectSingleModel = maxOptionObject[y];

                            // TODO: FIX
                            var singleModel = dataMultiModel.Series
                                              .FirstOrDefault(x => x.Name == maxObjectSingleModel.Name);

                            if (singleModel == null)
                            {
                                rawDataList[i].Percents[y] = 0;
                                rawDataList[i].Amounts[y]  = 0;
                            }
                            else
                            {
                                rawDataList[i].Percents[y] = (decimal)singleModel.Value;
                                rawDataList[i].Amounts[y]  = singleModel.DataCount;
                            }
                        }

                        // calculate total
                        rawDataList[i].Percents[lastColumnArrayIndex] = dataMultiModel.Series
                                                                        .Where(x => x.Value != null)
                                                                        .Sum(x => (decimal)x.Value);

                        if (isMulti)
                        {
                            rawDataList[i].Amounts[lastColumnArrayIndex] = dataMultiModel.AnswersCount;
                        }
                        else
                        {
                            rawDataList[i].Amounts[lastColumnArrayIndex] = dataMultiModel.Series
                                                                           .Sum(x => x.DataCount);
                        }
                    }

                    chartRawDataModel.RawDataValues = rawDataList;
                }

                invertedMultiStackedDataResult.Add(chartRawDataModel);
            }

            // Location
            // // Year name
            // // // Option
            // // // // Value
            var multiStackedDataResult = new List <DashboardViewChartRawDataItemModel>();

            foreach (var dataMultiStackedModel in multiStackedData)
            {
                var chartRawDataModel = new DashboardViewChartRawDataItemModel
                {
                    RawValueName = dataMultiStackedModel.Name, // Location
                };

                // Rows
                if (dataMultiStackedModel.Series.Any())
                {
                    var rawDataList = new List <DashboardViewChartRawDataValuesModel>();

                    // Get element with max rows (years)
                    var maxObject = dataMultiStackedModel.Series
                                    .OrderByDescending(item => item.Series.Count)
                                    .First();

                    // column count + total column
                    var columnCount          = maxObject.Series.Count + 1;
                    var lastColumnArrayIndex = columnCount - 1;

                    // Get row names
                    foreach (var multiModel in dataMultiStackedModel.Series)
                    {
                        var rawDataValuesModel = new DashboardViewChartRawDataValuesModel
                        {
                            ValueName = multiModel.Name, // year name
                            Percents  = new decimal[columnCount],
                            Amounts   = new decimal[columnCount],
                        };

                        rawDataList.Add(rawDataValuesModel);
                    }

                    // by year
                    for (var i = 0; i < dataMultiStackedModel.Series.Count; i++)
                    {
                        // year
                        var dataMultiModel = dataMultiStackedModel.Series[i];

                        // by Item
                        for (var y = 0; y < maxOptionObject.Count; y++)
                        {
                            var maxObjectSingleModel = maxOptionObject[y];

                            // TODO: FIX
                            var singleModel = dataMultiModel.Series
                                              .FirstOrDefault(x => x.Name == maxObjectSingleModel.Name);

                            if (singleModel == null)
                            {
                                rawDataList[i].Percents[y] = 0;
                                rawDataList[i].Amounts[y]  = 0;
                            }
                            else
                            {
                                rawDataList[i].Percents[y] = (decimal)singleModel.Value;
                                rawDataList[i].Amounts[y]  = singleModel.DataCount;
                            }
                        }

                        // calculate total
                        rawDataList[i].Percents[lastColumnArrayIndex] = dataMultiModel.Series
                                                                        .Where(x => x.Value != null)
                                                                        .Sum(x => (decimal)x.Value);

                        if (isMulti)
                        {
                            rawDataList[i].Amounts[lastColumnArrayIndex] = dataMultiModel.AnswersCount;
                        }
                        else
                        {
                            rawDataList[i].Amounts[lastColumnArrayIndex] = dataMultiModel.Series
                                                                           .Sum(x => x.DataCount);
                        }
                    }

                    chartRawDataModel.RawDataValues = rawDataList;
                }

                multiStackedDataResult.Add(chartRawDataModel);
            }

            invertedDataItem.RawDataItems = invertedMultiStackedDataResult;
            dataItem.RawDataItems         = multiStackedDataResult;

            result.Add(invertedDataItem);
            result.Add(dataItem);
            return(result);
        }
Example #2
0
        public static List <DashboardViewChartRawDataModel> ConvertSingleData(
            IInsightDashboardLocalizationService localizationService,
            List <DashboardViewChartDataSingleModel> singleData,
            bool isMulti,
            int answersCount)
        {
            const int columnsCount      = 1;
            var       result            = new List <DashboardViewChartRawDataModel>();
            var       data              = new DashboardViewChartRawDataModel();
            var       chartRawDataModel = new DashboardViewChartRawDataItemModel
            {
                RawValueName = string.Empty, // Empty location
            };

            // Headers
            data.RawHeaders.Add(
                localizationService.GetString("TotalPeriod"));

            // Rows
            var rawDataList = new List <DashboardViewChartRawDataValuesModel>();

            // Get row names
            foreach (var singleModel in singleData)
            {
                var rawDataValuesModel = new DashboardViewChartRawDataValuesModel
                {
                    ValueName = singleModel.Name,
                    Percents  = new decimal[columnsCount],
                    Amounts   = new decimal[columnsCount],
                };

                rawDataList.Add(rawDataValuesModel);
            }

            var totalRow = new DashboardViewChartRawDataValuesModel
            {
                ValueName = localizationService.GetString("Total"),
                Percents  = new decimal[columnsCount],
                Amounts   = new decimal[columnsCount],
            };

            rawDataList.Add(totalRow);

            // by Item
            if (isMulti)
            {
                var percentageList = new List <decimal>();
                for (var y = 0; y < singleData.Count; y++)
                {
                    var     dataSingleModel = singleData[y];
                    decimal percentage      = Math.Round((decimal)dataSingleModel.DataCount / (decimal)answersCount * 100m, 0, MidpointRounding.AwayFromZero);
                    percentageList.Add(percentage);
                    rawDataList[y].Percents[0] = percentage;
                    rawDataList[y].Amounts[0]  = dataSingleModel.DataCount;
                }
                // calculate total
                var lastRow = singleData.Count;

                rawDataList[lastRow].Percents[0] = percentageList.Sum(x => x);
                rawDataList[lastRow].Amounts[0]  = answersCount;
            }
            else
            {
                for (var y = 0; y < singleData.Count; y++)
                {
                    var dataSingleModel = singleData[y];
                    rawDataList[y].Percents[0] = (decimal)dataSingleModel.Value;
                    rawDataList[y].Amounts[0]  = dataSingleModel.DataCount;
                }
                // calculate total
                var lastRow = singleData.Count;

                rawDataList[lastRow].Percents[0] = singleData
                                                   .Where(x => x.Value != null)
                                                   .Sum(x => (decimal)x.Value);

                rawDataList[lastRow].Amounts[0] = singleData
                                                  .Sum(x => x.DataCount);
            }

            chartRawDataModel.RawDataValues = rawDataList;
            data.RawDataItems.Add(chartRawDataModel);
            result.Add(data);
            return(result);
        }
Example #3
0
        public static List <DashboardViewChartRawDataModel> ConvertMultiData(
            IInsightDashboardLocalizationService localizationService,
            List <DashboardViewChartDataMultiModel> multiData,
            bool isLineData,
            bool isMulti)
        {
            var result = new List <DashboardViewChartRawDataModel>();
            var data   = new DashboardViewChartRawDataModel();

            if (multiData.Count == 0)
            {
                return(result);
            }

            var chartRawDataModel = new DashboardViewChartRawDataItemModel
            {
                RawValueName = string.Empty, // Empty location
            };

            // If it's data for line chart - it should be inverted
            if (isLineData)
            {
                // Get element with max columns
                var maxColumnsObject = multiData
                                       .OrderByDescending(item => item.Series.Count)
                                       .First();

                // Headers
                foreach (var dataSingleModel in maxColumnsObject.Series)
                {
                    data.RawHeaders.Add(dataSingleModel.Name); // Year name
                }

                // Rows
                var rawDataList = new List <DashboardViewChartRawDataValuesModel>();

                // Get row names
                foreach (var multiModel in multiData)
                {
                    var rawDataValuesModel = new DashboardViewChartRawDataValuesModel
                    {
                        ValueName = multiModel.Name,
                        Percents  = new decimal[maxColumnsObject.Series.Count],
                        Amounts   = new decimal[maxColumnsObject.Series.Count],
                    };

                    rawDataList.Add(rawDataValuesModel);
                }

                // Add total row
                var totalRow = new DashboardViewChartRawDataValuesModel
                {
                    ValueName = localizationService.GetString("Total"),
                    Percents  = new decimal[maxColumnsObject.Series.Count],
                    Amounts   = new decimal[maxColumnsObject.Series.Count],
                };

                rawDataList.Add(totalRow);

                // by Item
                for (var i = 0; i < multiData.Count; i++)
                {
                    var dataMultiModel = multiData[i];

                    // by week
                    for (var y = 0; y < dataMultiModel.Series.Count; y++)
                    {
                        var dataSingleModel = dataMultiModel.Series[y];

                        rawDataList[i].Amounts[y]  = dataSingleModel.DataCount;
                        rawDataList[i].Percents[y] = (decimal)dataSingleModel.Value;
                    }
                }


                // calculate total
                var lastRow = multiData.Count;
                for (var i = 0; i < maxColumnsObject.Series.Count; i++)
                {
                    decimal totalValue   = 0;
                    decimal totalAmounts = 0;
                    foreach (var rowData in rawDataList)
                    {
                        totalValue   += rowData.Percents[i];
                        totalAmounts += rowData.Amounts[i];
                    }

                    // find total
                    if (isMulti)
                    {
                        foreach (var dataMultiModel in multiData)
                        {
                            var seriesItem = dataMultiModel.Series[i];

                            if (seriesItem.AnswersDataCount > 0)
                            {
                                totalAmounts = seriesItem.AnswersDataCount;
                                break;
                            }
                        }
                    }
                    rawDataList[lastRow].Percents[i] = totalValue;
                    rawDataList[lastRow].Amounts[i]  = totalAmounts;
                }

                chartRawDataModel.RawDataValues = rawDataList;
            }
            else
            {
                // Headers
                foreach (var multiModel in multiData)
                {
                    data.RawHeaders.Add(multiModel.Name); // Year name
                }

                // Rows
                var rawDataList = new List <DashboardViewChartRawDataValuesModel>();

                // Get element with max rows
                var maxObject = multiData
                                .OrderByDescending(item => item.Series.Count)
                                .First();

                // Get row names
                foreach (var singleModel in maxObject.Series)
                {
                    var rawDataValuesModel = new DashboardViewChartRawDataValuesModel
                    {
                        ValueName = singleModel.Name,
                        Percents  = new decimal[multiData.Count],
                        Amounts   = new decimal[multiData.Count],
                    };

                    rawDataList.Add(rawDataValuesModel);
                }

                // Add total row
                var totalRow = new DashboardViewChartRawDataValuesModel
                {
                    ValueName = localizationService.GetString("Total"),
                    Percents  = new decimal[multiData.Count],
                    Amounts   = new decimal[multiData.Count],
                };

                rawDataList.Add(totalRow);

                // by week
                for (var i = 0; i < multiData.Count; i++)
                {
                    var dataMultiModel = multiData[i];

                    // by Item
                    for (var y = 0; y < maxObject.Series.Count; y++)
                    {
                        var maxObjectSingleModel = maxObject.Series[y];

                        // TODO: FIX
                        var singleModel = dataMultiModel.Series
                                          .FirstOrDefault(x => x.Name == maxObjectSingleModel.Name);

                        if (singleModel == null)
                        {
                            rawDataList[y].Percents[i] = 0;
                            rawDataList[y].Amounts[i]  = 0;
                        }
                        else
                        {
                            rawDataList[y].Percents[i] = (decimal)singleModel.Value;
                            rawDataList[y].Amounts[i]  = singleModel.DataCount;
                        }
                    }

                    // calculate total
                    var lastRow = maxObject.Series.Count;

                    rawDataList[lastRow].Percents[i] = dataMultiModel.Series
                                                       .Where(x => x.Value != null)
                                                       .Sum(x => (decimal)x.Value);

                    if (isMulti)
                    {
                        rawDataList[lastRow].Amounts[i] = dataMultiModel.AnswersCount;
                    }
                    else
                    {
                        rawDataList[lastRow].Amounts[i] = dataMultiModel.Series
                                                          .Sum(x => x.DataCount);
                    }
                }

                chartRawDataModel.RawDataValues = rawDataList;
            }

            data.RawDataItems.Add(chartRawDataModel);
            result.Add(data);
            return(result);
        }