| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- using System;
- using System.Data;
- using System.IO;
- using System.Windows.Forms;
- using System.Windows.Forms.DataVisualization.Charting;
- using OfficeOpenXml;
- namespace WindowsFormsApp4
- {
- public partial class ReportForm : Form
- {
- private DataTable currentDataTable;
- private string currentReportType = "";
- public ReportForm()
- {
- InitializeComponent();
- AttachEventHandlers();
- ConfigureChart();
- }
- private void AttachEventHandlers()
- {
- btnStatistics.Click += BtnStatistics_Click;
- btnPerformance.Click += BtnPerformance_Click;
- btnExportExcel.Click += BtnExportExcel_Click;
- btnChart.Click += BtnChart_Click;
- btnBack.Click += BtnBack_Click;
- }
- private void ConfigureChart()
- {
- chartReport.BackColor = System.Drawing.Color.FromArgb(50, 56, 67);
- chartReport.ChartAreas[0].BackColor = System.Drawing.Color.FromArgb(50, 56, 67);
- chartReport.ChartAreas[0].AxisX.LabelStyle.ForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
- chartReport.ChartAreas[0].AxisY.LabelStyle.ForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
- chartReport.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(198, 141, 255);
- chartReport.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(198, 141, 255);
- chartReport.Legends[0].ForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
- }
- private void ConfigureGrid()
- {
- if (dgvReport.Columns.Count == 0) return;
- dgvReport.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(50, 56, 67);
- dgvReport.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
- dgvReport.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(198, 141, 255);
- dgvReport.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(50, 56, 67);
- dgvReport.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(198, 141, 255);
- dgvReport.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(50, 56, 67);
- dgvReport.EnableHeadersVisualStyles = false;
- dgvReport.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
- }
- private void BtnStatistics_Click(object sender, EventArgs e)
- {
- try
- {
- currentDataTable = DatabaseHelper.GetManagerStatistics();
- dgvReport.DataSource = currentDataTable;
- ConfigureGrid();
- currentReportType = "statistics";
- tabControl1.SelectedTab = tabPageTable;
- MessageBox.Show($"Загружено {currentDataTable.Rows.Count} записей", "Информация",
- MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
- private void BtnPerformance_Click(object sender, EventArgs e)
- {
- try
- {
- DateTime startDate = dtpStartDate.Value;
- DateTime endDate = dtpEndDate.Value;
- if (startDate > endDate)
- {
- MessageBox.Show("Начальная дата не может быть позже конечной",
- "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- currentDataTable = DatabaseHelper.GetManagerPerformance(startDate, endDate);
- dgvReport.DataSource = currentDataTable;
- ConfigureGrid();
- currentReportType = "performance";
- tabControl1.SelectedTab = tabPageTable;
- MessageBox.Show($"Отчёт за период {startDate:dd.MM.yyyy} - {endDate:dd.MM.yyyy}\nЗагружено {currentDataTable.Rows.Count} записей",
- "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
- private void BtnChart_Click(object sender, EventArgs e)
- {
- if (currentDataTable == null || currentDataTable.Rows.Count == 0)
- {
- MessageBox.Show("Сначала загрузите данные (Статистика или Эффективность)",
- "Нет данных", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- DrawChart();
- tabControl1.SelectedTab = tabPageChart;
- }
- private void DrawChart()
- {
- chartReport.Series.Clear();
- Series series = new Series();
- series.ChartType = SeriesChartType.Column;
- series.Color = System.Drawing.Color.FromArgb(198, 141, 255);
- series.BorderWidth = 2;
- series.ShadowOffset = 2;
- if (currentReportType == "statistics")
- {
- series.Name = "Выполненные заявки";
- foreach (DataRow row in currentDataTable.Rows)
- {
- string managerName = $"{row["last_name"]} {row["first_name"]}";
- int completed = Convert.ToInt32(row["completed_requests"]);
- series.Points.AddXY(managerName, completed);
- }
- chartReport.Titles.Clear();
- chartReport.Titles.Add("Статистика выполнения заявок по менеджерам");
- }
- else if (currentReportType == "performance")
- {
- series.Name = "Выполнено заявок";
- foreach (DataRow row in currentDataTable.Rows)
- {
- string managerName = $"{row["last_name"]} {row["first_name"]}";
- int completed = Convert.ToInt32(row["completed_count"]);
- series.Points.AddXY(managerName, completed);
- }
- chartReport.Titles.Clear();
- chartReport.Titles.Add($"Эффективность менеджеров за период");
- }
- chartReport.Series.Add(series);
- // Настройка внешнего вида графика
- chartReport.ChartAreas[0].AxisX.LabelStyle.Angle = -45;
- chartReport.ChartAreas[0].AxisX.Interval = 1;
- chartReport.ChartAreas[0].AxisX.Title = "Менеджеры";
- chartReport.ChartAreas[0].AxisY.Title = "Количество заявок";
- chartReport.ChartAreas[0].AxisX.TitleForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
- chartReport.ChartAreas[0].AxisY.TitleForeColor = System.Drawing.Color.FromArgb(203, 232, 87);
- }
- private void BtnExportExcel_Click(object sender, EventArgs e)
- {
- if (currentDataTable == null || currentDataTable.Rows.Count == 0)
- {
- MessageBox.Show("Нет данных для экспорта", "Ошибка",
- MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- try
- {
- SaveFileDialog saveDialog = new SaveFileDialog();
- saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx";
- saveDialog.FileName = $"Отчёт_{DateTime.Now:yyyyMMdd_HHmmss}.xlsx";
- if (saveDialog.ShowDialog() == DialogResult.OK)
- {
- using (var package = new ExcelPackage())
- {
- var worksheet = package.Workbook.Worksheets.Add("Отчёт");
- // Заголовки
- for (int i = 0; i < dgvReport.Columns.Count; i++)
- {
- worksheet.Cells[1, i + 1].Value = dgvReport.Columns[i].HeaderText;
- worksheet.Cells[1, i + 1].Style.Font.Bold = true;
- worksheet.Cells[1, i + 1].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
- worksheet.Cells[1, i + 1].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(198, 141, 255));
- }
- // Данные
- for (int i = 0; i < dgvReport.Rows.Count; i++)
- {
- for (int j = 0; j < dgvReport.Columns.Count; j++)
- {
- worksheet.Cells[i + 2, j + 1].Value = dgvReport.Rows[i].Cells[j].Value?.ToString();
- }
- }
- worksheet.Cells.AutoFitColumns();
- package.SaveAs(new FileInfo(saveDialog.FileName));
- }
- MessageBox.Show("Отчёт успешно сохранён!", "Успешно",
- MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Ошибка при экспорте: {ex.Message}", "Ошибка",
- MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
- private void BtnBack_Click(object sender, EventArgs e)
- {
- this.Close();
- }
- }
- }
|