示例#1
0
        protected void CreateFile(ElectionYear electionYear, string path, int fileLength)
        {
            var dir = Path.GetDirectoryName(this.GetType().Assembly.Location);

            var dest = Path.Combine(dir + @"\..\" + Data.Core.Consts.TopPath, "BarChartTest");

            Directory.CreateDirectory(dest);
            var dirInfo = new DirectoryInfo(dest);

            string fileName       = Path.Combine(Path.Combine(dir, electionYear.FullPath), string.Format(path, electionYear.Year));
            var    fileNameSource = _barChartPreparer.CreateDiagram(new FileInfo(fileName), electionYear.CaptionDiagram, true);

            var fileInfo = new FileInfo(fileNameSource);

            var destFileName = Path.Combine(Path.GetFullPath(dirInfo.FullName), Path.GetFileName(fileNameSource));

            sb.AppendLine($"<img src=\"{Path.GetFileName(fileNameSource)}\"/>");

            if (File.Exists(destFileName))
            {
                File.Delete(destFileName);
            }

            fileInfo.CopyTo(destFileName);

            Assert.AreEqual(fileLength, new FileInfo(fileNameSource).Length);
        }
示例#2
0
        public override string ToString()
        {
            var sb = new StringBuilder();

            sb.Append("ElectionYear = ");
            sb.AppendLine(ElectionYear.ToString());
            sb.Append("Party = ");
            sb.AppendLine(Party.ToString());
            sb.Append("OfficeType   = ");
            sb.AppendLine(OfficeType.ToString());
            sb.Append("OfficeId     = ");
            sb.AppendLine(OfficeId.ToString());
            sb.Append("Flow");
            sb.AppendLine(Flow.ToString());
            sb.AppendLine("--");

            return(sb.ToString());
        }
示例#3
0
        public static string GenerateGraphic(
            ElectionYear electionYear,
            string[] foos,
            AxisYType axisYType,
            DiagramType diagramType
            )
        {
            var fooDatas = electionYear.FooData.Where(f => !f.IsHiddenForIks).ToArray();
            var path     = Consts.LocalPath;
            Func <string, List <Election>, AxisYType, SortedDictionary <int, int> > getResults;

            if (diagramType == DiagramType.Results)
            {
                getResults = GetNumbersToResult;
            }
            else
            {
                getResults = GetNumbersToPresence;
            }

            var firstPart  = diagramType == DiagramType.Results ? "Results" : "Presence";
            var secondPart = axisYType == AxisYType.People ? "ByPeople" : "ByUIKs";

            string picName = firstPart + secondPart;

            Directory.CreateDirectory(Consts.GraphicsPath);
            var name        = Path.Combine(Consts.GraphicsPath, picName + electionYear.Year);
            var pictureName = name + ".jpg";
            var xls         = name + ".xls";
            var fi          = new FileInfo(pictureName);
            var fiXls       = new FileInfo(xls);

            if (File.Exists(pictureName))
            {
                return(fi.Name);
            }

            var what = electionYear.DirElectionInfo;

            var fileName  = path + @"\" + Consts.ElectionsDir + @"\" + what + @"\" + what + electionYear.Year + ".xml";
            var elections = ProcessData.ReadSavedData(fileName);

            object misValue = System.Reflection.Missing.Value;

            const int Width  = 400; // 467;
            const int Height = 230; // 200;

            var app       = new ApplicationClass();
            var workBook  = app.Workbooks.Add(misValue);
            var workSheet = (Worksheet)workBook.Worksheets[1];

            var chartObjects = (ChartObjects)workSheet.ChartObjects(Type.Missing);
            var chartObject  = chartObjects.Add(10, 80, (diagramType == DiagramType.Results) ? Width : 300, Height);
            var chart        = chartObject.Chart;

            chart.ChartType = XlChartType.xlXYScatterLinesNoMarkers;

            var seriesCollection = (SeriesCollection)chart.SeriesCollection(misValue);

            if (diagramType == DiagramType.Presence)
            {
                int c = 0;
                var percentsCounter = getResults(null, elections, axisYType);
                foreach (var kvp in percentsCounter)
                {
                    c++;
                    workSheet.Cells[c, 1] = kvp.Value;
                    workSheet.Cells[c, 2] = kvp.Key;
                }

                var series = seriesCollection.NewSeries();
                series.Values  = workSheet.Range["a1", "a" + c.ToString()];
                series.XValues = workSheet.Range["b1", "b" + c.ToString()];
                chart.Legend.Delete();
            }
            else
            {
                var values = new Triple <SortedDictionary <int, int>, string, int> [foos.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    var value = getResults(foos[i], elections, axisYType);
                    values[i] = new Triple <SortedDictionary <int, int>, string, int>(value, foos[i], value.Count);
                }
                for (int i = 0; i < values.Length; i++)
                {
                    int c = 0;
                    foreach (var kvp in values[i].First)
                    {
                        c++;
                        workSheet.Cells[c, 2 * i + 1] = kvp.Value;
                        workSheet.Cells[c, 2 * i + 2] = kvp.Key;
                    }
                    var series = seriesCollection.NewSeries();
                    var first  = (char)('a' + 2 * i);
                    var second = (char)('a' + 2 * i + 1);
                    var foo    = fooDatas.First(f => string.Compare(f.EnglishShort, foos[i], StringComparison.CurrentCultureIgnoreCase) == 0);
                    series.Name    = string.Format("{0},\n{1}%", foo.RussianLong, foo.Result);
                    series.Values  = workSheet.Range[first.ToString() + "1", first.ToString() + c.ToString()];
                    series.XValues = workSheet.Range[second + "1", second.ToString() + c.ToString()];
                }
            }

            Axis xAxis = (Axis)chart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary);

            xAxis.HasTitle       = true;
            xAxis.AxisTitle.Text = diagramType == DiagramType.Results ? "Результат, %" : "Явка, %";

            xAxis.MinimumScale      = 0;
            xAxis.MajorUnit         = 10;
            xAxis.MinorUnit         = 1;
            xAxis.MinorTickMark     = XlTickMark.xlTickMarkInside;
            xAxis.HasMajorGridlines = true;
            //xAxis.HasMinorGridlines = true;
            xAxis.MaximumScale = 100;

            Axis yAxis = (Axis)chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);

            yAxis.HasTitle       = true;
            yAxis.AxisTitle.Text = (axisYType == AxisYType.UIK) ? "Количество участков" : "Количество людей на участках";
            yAxis.MaximumScale   = diagramType == DiagramType.Results
                                    ? axisYType == AxisYType.People ? 14000000 : 10000
                                    : axisYType == AxisYType.People ? 6000000 : 6000;


            chart.HasTitle = true;
            var presence = diagramType == DiagramType.Results ? "" : string.Format(", {0}%", electionYear.Presence.ToString().Replace(",", "."));

            chart.ChartTitle.Text = string.Format("{0} {1} {2}{3}", diagramType == DiagramType.Results ? "Результаты выборов" : "Явка на выборах",
                                                  (electionYear.ElectionType == ElectionType.Duma) ? "в Думу" : "президента",
                                                  electionYear.Year, presence);

            if (diagramType == DiagramType.Results)
            {
                chart.PlotArea.Width = 262;
            }
            Trace.WriteLine(chart.PlotArea.Width);
            File.Delete(pictureName);
            File.Delete(fiXls.FullName);
            //workBook.SaveAs(fiXls.FullName, XlFileFormat.xlWorkbookDefault, misValue, misValue, misValue, misValue, XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            chart.Export(fi.FullName, "JPG", misValue);
            workBook.Close(false, misValue, misValue);
            app.Quit();


            Marshal.ReleaseComObject(workSheet);
            Marshal.ReleaseComObject(workBook);
            Marshal.ReleaseComObject(app);

            return(fi.Name);
        }