Example #1
0
        public static IMatrixHeader CreateEmptyHeader(int row, int column, int rowSpan = 1, int columnSpan = 1)
        {
            MatrixHeaderCell cell = new MatrixHeaderCell(MatrixCellType.Empty);

            cell.SetGridProperties(row, column, rowSpan, columnSpan);
            return(cell);
        }
Example #2
0
        public static IMatrixHeader CreateColumnSummaryHeader(string header, int row, int column, int rowSpan = 1, int columnSpan = 1)
        {
            MatrixHeaderCell cell = new MatrixHeaderCell(MatrixCellType.ColumnSummaryHeader, header);

            cell.SetGridProperties(row, column, rowSpan, columnSpan);
            return(cell);
        }
Example #3
0
        public static IMatrixHeader CreateRowsGroupHeader(string header, int row, int column, int rowSpan = 1, int columnSpan = 1, System.Collections.Generic.IList <IMatrixHeader> children = null)
        {
            MatrixHeaderCell cell = new MatrixHeaderCell(MatrixCellType.RowsGroupHeader, header)
            {
                Children = children
            };

            cell.SetGridProperties(row, column, rowSpan, columnSpan);
            return(cell);
        }
Example #4
0
        public static IEnumerable <IMatrix> GetPaymentsAndPofiderAnalizPivots(DateOnly period, IList <FiderAnalizMeter> fiderAnalizMeters = null)
        {
            if (fiderAnalizMeters == null)
            {
                return(new List <IMatrix>());
            }

            List <IMatrix> pivots = new();

            long total = fiderAnalizMeters.Select(meter => meter.Consumption).Sum(i => i ?? 0);

            IEnumerable <IMatrixHeader> headerCells2 = new IMatrixHeader[]
            {
                MatrixHeaderCell.CreateColumnHeader("Значение, кВт∙ч"),
                MatrixHeaderCell.CreateColumnHeader("Доля, %"),
            };

            string notDefinedString = "(не указана)";

            List <KeyValuePair <string, int> > substationsPowerSuppy = fiderAnalizMeters
                                                                       .GroupBy(i => i.Substation)
                                                                       .Select(i => new KeyValuePair <string, int>(string.IsNullOrWhiteSpace(i.Key) ? notDefinedString : i.Key, (int)i.Select(meter => meter.Consumption).Sum(i => i ?? 0)))
                                                                       .OrderByDescending(i => i.Value)
                                                                       .ToList();

            List <string> substationsNames = substationsPowerSuppy
                                             .Select(i => i.Key)
                                             .ToList();

            pivots.Add(new Matrix()
            {
                Header                    = $"Полезный отпуск электроэнергии бытовым абонентам по подстанциям (за {period:MMMM yyyy} г.)",
                Description               = " ",
                GetRowHeaderValuesFunc    = () => substationsNames.Select(i => MatrixHeaderCell.CreateRowHeader(i)),
                ShowColumnsTotal          = true,
                GetColumnHeaderValuesFunc = () => headerCells2,
                GetDataCellFunc           = (row, column) =>
                {
                    int value = substationsPowerSuppy
                                .Where(i => i.Key == row.Header)
                                .Select(i => i.Value)
                                .FirstOrDefault();
                    if (column.Header == "Доля, %")
                    {
                        return(new MatrixDataCell(100d * value / total, "N1"));
                    }
                    else
                    {
                        return(new MatrixDataCell(value));
                    }
                },
            });

            string otherString = "(остальное)";

            List <KeyValuePair <string, int> > data1 = fiderAnalizMeters
                                                       .GroupBy(i => i.Town)
                                                       .Select(i => new KeyValuePair <string, int>(i.Key, (int)i.Select(meter => meter.Consumption).Sum(i => i ?? 0)))
                                                       .OrderByDescending(i => i.Value)
                                                       .ToList();
            List <KeyValuePair <string, int> > energyPowerSupplyByStateList = new();
            List <string> stateNames = new();

            if (data1.Count > 15)
            {
                int lastCount = data1
                                .Skip(15)
                                .Count();
                otherString += $" {lastCount} шт.";

                int summOfLast = data1
                                 .Skip(15)
                                 .Sum(o => o.Value);

                List <KeyValuePair <string, int> > first = data1
                                                           .Take(15)
                                                           .ToList();

                energyPowerSupplyByStateList.AddRange(first);
                energyPowerSupplyByStateList.Add(new KeyValuePair <string, int>(otherString, summOfLast));

                List <string> firstStateNames = data1
                                                .Take(15)
                                                .Select(i => i.Key)
                                                .ToList();

                stateNames.AddRange(firstStateNames);
                stateNames.Add(otherString);
            }
            else
            {
                energyPowerSupplyByStateList = data1;
                stateNames = data1
                             .Select(i => i.Key)
                             .ToList();
            }

            pivots.Add(new Matrix()
            {
                Header                    = $"Полезный отпуск электроэнергии бытовым абонентам по населенным пунктам (за {period:MMMM yyyy} г.)",
                Description               = "показаны 15 наиболее крупных",
                GetRowHeaderValuesFunc    = () => stateNames.Select(i => MatrixHeaderCell.CreateRowHeader(i)),
                ShowColumnsTotal          = true,
                GetColumnHeaderValuesFunc = () => headerCells2,
                GetDataCellFunc           = (row, column) =>
                {
                    int value = energyPowerSupplyByStateList
                                .Where(i => i.Key == row.Header)
                                .Select(i => i.Value)
                                .FirstOrDefault();
                    if (column.Header == "Доля, %")
                    {
                        return(new MatrixDataCell(100d * value / total, "N1"));
                    }
                    else
                    {
                        return(new MatrixDataCell(value));
                    }
                },
            });

            List <FiderAnalizMeter> data2 = fiderAnalizMeters
                                            .Where(i => i.Consumption.HasValue && i.Consumption > 0)
                                            .ToList();

            List <IGrouping <string, FiderAnalizMeter> > data3 = data2
                                                                 .GroupBy(i => i.TownType)
                                                                 .ToList();

            Dictionary <string, int> data4 = data3
                                             .ToDictionary(i => i.Key, k => k.Count());

            Dictionary <string, Dictionary <string, int> > keyValuePairs = new()
            {
                { "до 5 кВт∙ч", data3.ToDictionary(i => i.Key, k => k.Count(l => l.Consumption < 5)) },
                { "от 5 до 50 кВт∙ч", data3.ToDictionary(i => i.Key, k => k.Count(l => l.Consumption is >= 5 and < 50)) },