Example #1
0
        public NewBlank
        (
            System.Windows.Forms.DataVisualization.Charting.Chart chartСпросЗаКвартал,
            System.Windows.Forms.DataVisualization.Charting.Chart chartСпросЗаМесяц
        )
        {
            string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Resources\doors.mdf;Integrated Security=True;Connect Timeout=30";

            Directory.CreateDirectory(Environment.CurrentDirectory + $@"\Отчеты по продажам\{DateTime.Now.Year}\{НазваниеМесяца(DateTime.Now.Month, true)}\");
            string        path       = Environment.CurrentDirectory + $@"\Отчеты по продажам\{DateTime.Now.Year}\{НазваниеМесяца(DateTime.Now.Month, true)}\Отчет по продажам и предыдущий квартал ({НазваниеМесяца(DateTime.Now.Month, true)} {DateTime.Now.Year}).docx";
            SqlConnection Connection = new SqlConnection(ConnectionString);

            DocX document = DocX.Create(path);

            document.MarginTop    = 30;
            document.MarginLeft   = 30;
            document.MarginRight  = 30;
            document.MarginBottom = 30;

            document.InsertParagraph($"Дата составления: {DataReturner(DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year)}\n").
            Font("Times New Roman").
            FontSize(11).
            Alignment = Alignment.right;

            document.InsertParagraph("Отчет о продажах за текущий месяц и предыдущий квартал\n\n").
            Font("Times New Roman").
            FontSize(28).
            Bold().
            Alignment = Alignment.center;

            document.InsertParagraph("На приведенном ниже графике отображен график спроса дверей за месяц:\n")
            .Font("Times New Roman")
            .FontSize(12)
            .Alignment = Alignment.left;

            #region Составление и заполнение графиков продаж за месяц

            PieChart WordChart_СпросЗаМесяц = new PieChart();
            WordChart_СпросЗаМесяц.AddLegend(ChartLegendPosition.Right, false);

            try
            {
                Connection.Open();
            }
            catch (SqlException)
            {
                MessageBox.Show("Проверьте, достаточно ли места на диске, достаточно ли прав у учетной записи для операций с БД (См. справку), файлы MDF и LDF не должны быть помечены \"Только для чтения\". \n\nВозможно стоит попробовать отключить БД и запустить программу еще раз.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            SqlCommand comm     = new SqlCommand("SELECT count(id_profil) FROM Profili", Connection);
            object     езультат = comm.ExecuteScalar();

            if (езультат != null)
            {
                int Количество_профилей = (int)езультат;

                List <string> Name   = new List <string>();
                List <int>    Value  = new List <int>();
                Series        series = new Series("Спрос товара за месяц, группировка по профилю");

                for (int i = 0; i < Количество_профилей; i++)
                {
                    comm = new SqlCommand($"SELECT profil FROM Profili where id_profil={i + 1}", Connection);
                    string НазваниеПрофиля = (string)comm.ExecuteScalar();
                    comm     = new SqlCommand($"select kolvo from Zakazy where id_profil = {i + 1} and data between '{DateTime.Now.Year}/{DateTime.Now.Month}/01' and '{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"{НазваниеПрофиля} ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                }
                series.Bind(Name, Value);
                WordChart_СпросЗаМесяц.AddSeries(series);
            }
            Connection.Close();
            document.InsertChart(WordChart_СпросЗаМесяц);
            #endregion

            document.InsertParagraph("\n\nА также диаграмма продаж за предыдущий квартал. Она предоставлена ниже:\n")
            .Font("Times New Roman")
            .FontSize(12)
            .Alignment = Alignment.left;

            #region Составление и заполнение графиков продаж за предыдущий квартал

            BarChart WordChart_СпросЗаКвартал = new BarChart();
            WordChart_СпросЗаКвартал.AddLegend(ChartLegendPosition.Right, false);
            WordChart_СпросЗаКвартал.BarDirection = BarDirection.Column;
            WordChart_СпросЗаКвартал.BarGrouping  = BarGrouping.Clustered;
            WordChart_СпросЗаКвартал.GapWidth     = 200;

            try
            {
                Connection.Open();
            }
            catch (SqlException)
            {
                MessageBox.Show("Проверьте, достаточно ли места на диске, достаточно ли прав у учетной записи для операций с БД (См. справку), файлы MDF и LDF не должны быть помечены \"Только для чтения\". \n\nВозможно стоит попробовать отключить БД и запустить программу еще раз.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            comm     = new SqlCommand("SELECT count(id_profil) FROM Profili", Connection);
            езультат = comm.ExecuteScalar();

            if (езультат != null)
            {
                List <string> Name  = new List <string>();
                List <int>    Value = new List <int>();

                switch (Statistics.КакойКварталОтобразить())
                {
                case 1:
                {
                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year - 1}/10/01' and " +
                                          $"'{DateTime.Now.Year - 1}/10/{DateTime.DaysInMonth(DateTime.Now.Year - 1, 10)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Октябрь ({DateTime.Now.Year - 1}) ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Октябрь ({DateTime.Now.Year - 1}) (0)");
                        Value.Add(0);
                    }


                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year - 1}/11/01' and " +
                                          $"'{DateTime.Now.Year - 1}/11/{DateTime.DaysInMonth(DateTime.Now.Year - 1, 11)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Ноябрь ({DateTime.Now.Year - 1}) ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Ноябрь ({DateTime.Now.Year - 1}) (0)");
                        Value.Add(0);
                    }

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year - 1}/12/01' and " +
                                          $"'{DateTime.Now.Year - 1}/12/{DateTime.DaysInMonth(DateTime.Now.Year - 1, 12)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Декабрь ({DateTime.Now.Year - 1}) ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Декабрь ({DateTime.Now.Year - 1}) (0)");
                        Value.Add(0);
                    }
                }
                break;

                case 2:
                {
                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/01/01' and " +
                                          $"'{DateTime.Now.Year}/01/{DateTime.DaysInMonth(DateTime.Now.Year, 01)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Январь ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Январь (0)");
                        Value.Add(0);
                    }
                    Name.Add($"Январь");
                    Value.Add((int)comm.ExecuteScalar());

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/02/01' and " +
                                          $"'{DateTime.Now.Year}/02/{DateTime.DaysInMonth(DateTime.Now.Year, 02)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Февраль ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Февраль (0)");
                        Value.Add(0);
                    }

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/03/01' and " +
                                          $"'{DateTime.Now.Year}/03/{DateTime.DaysInMonth(DateTime.Now.Year, 03)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Март ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Март (0)");
                        Value.Add(0);
                    }
                }
                break;

                case 3:
                {
                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/04/01' and " +
                                          $"'{DateTime.Now.Year}/04/{DateTime.DaysInMonth(DateTime.Now.Year, 04)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Апрель ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Апрель (0)");
                        Value.Add(0);
                    }

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/05/01' and " +
                                          $"'{DateTime.Now.Year}/05/{DateTime.DaysInMonth(DateTime.Now.Year, 05)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Май ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Май (0)");
                        Value.Add(0);
                    }

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/06/01' and " +
                                          $"'{DateTime.Now.Year}/06/{DateTime.DaysInMonth(DateTime.Now.Year, 06)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Июнь ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Июнь (0)");
                        Value.Add(0);
                    }
                }
                break;

                case 4:
                {
                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/07/01' and " +
                                          $"'{DateTime.Now.Year}/07/{DateTime.DaysInMonth(DateTime.Now.Year, 07)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Июль ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Июль (0)");
                        Value.Add(0);
                    }

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/08/01' and " +
                                          $"'{DateTime.Now.Year}/08/{DateTime.DaysInMonth(DateTime.Now.Year, 08)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Август ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Август (0)");
                        Value.Add(0);
                    }

                    comm = new SqlCommand($"SELECT sum(kolvo) FROM Zakazy where data between " +
                                          $"'{DateTime.Now.Year}/09/01' and " +
                                          $"'{DateTime.Now.Year}/09/{DateTime.DaysInMonth(DateTime.Now.Year, 09)}'", Connection);
                    езультат = comm.ExecuteScalar();
                    if (езультат != null)
                    {
                        Name.Add($"Сентябрь ({(int)Результат})");
                        Value.Add((int)езультат);
                    }
                    else
                    {
                        Name.Add($"Сентябрь (0)");
                        Value.Add(0);
                    }
                }
                break;
                }

                var series = new Series("Статистика проданных дверей за квартал");
                series.Bind(Name, Value);
                WordChart_СпросЗаКвартал.AddSeries(series);
            }
            Connection.Close();
            document.InsertChart(WordChart_СпросЗаКвартал);

            #endregion

            try
            {
                document.Save();
            }
            catch (IOException)
            {
                MessageBox.Show($"Ошибка при сохранении. \n\nНе удалось записать в файл. Убедитесь что требуемый файл ({path}) закрыт. \n\nИгнорируйте следующее сообщение");
            }
            MessageBox.Show($"Отчет создан. Он находится в директории: \"{path}\".");
        }
Example #2
0
        private void ShowStatistics_Click(object sender, EventArgs e)
        {
            Statistics statisticsWindow = new Statistics();

            statisticsWindow.ShowDialog();
        }