правки нужны небольшие
This commit is contained in:
parent
fc0539b911
commit
fef40a6aa8
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace InternetShopOrdersContracts.ViewModels
|
||||||
|
{
|
||||||
|
public class OrderExcelViewModel
|
||||||
|
{
|
||||||
|
public OrderExcelViewModel(int id, string fullname, string destinationCityName, DateTime expectedDeliveryDate)
|
||||||
|
{
|
||||||
|
this.Id = id;
|
||||||
|
this.Fullname = fullname;
|
||||||
|
//this.DestinationCityId = destinationCityId;
|
||||||
|
this.DestinationCityName = destinationCityName;
|
||||||
|
this.ExpectedDeliveryDate = expectedDeliveryDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Id;
|
||||||
|
public string Fullname;
|
||||||
|
//public int DestinationCityId;
|
||||||
|
public string DestinationCityName;
|
||||||
|
public DateTime ExpectedDeliveryDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
12
KopLab1/Lab3Form/FormMain.Designer.cs
generated
12
KopLab1/Lab3Form/FormMain.Designer.cs
generated
@ -41,6 +41,8 @@
|
|||||||
выбранныеТоварыToolStripMenuItem = new ToolStripMenuItem();
|
выбранныеТоварыToolStripMenuItem = new ToolStripMenuItem();
|
||||||
controlDataTable = new ControlsLibraryNet60.Data.ControlDataTableTable();
|
controlDataTable = new ControlsLibraryNet60.Data.ControlDataTableTable();
|
||||||
pdfTable1 = new FormLibrary.PDFTable(components);
|
pdfTable1 = new FormLibrary.PDFTable(components);
|
||||||
|
excelTableComponent1 = new WinFormsLibraryVolkov.NonVisualComponents.ExcelTableComponent(components);
|
||||||
|
componentDocumentWithChartLineWord1 = new ComponentsLibraryNet60.DocumentWithChart.ComponentDocumentWithChartLineWord(components);
|
||||||
menuStrip.SuspendLayout();
|
menuStrip.SuspendLayout();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
@ -99,15 +101,15 @@
|
|||||||
документToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.S;
|
документToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.S;
|
||||||
документToolStripMenuItem.Size = new Size(309, 22);
|
документToolStripMenuItem.Size = new Size(309, 22);
|
||||||
документToolStripMenuItem.Text = "Документ с простой таблицей";
|
документToolStripMenuItem.Text = "Документ с простой таблицей";
|
||||||
документToolStripMenuItem.Click += документToolStripMenuItem_Click;
|
документToolStripMenuItem.Click += GeneratePdfButton_Click;
|
||||||
//
|
//
|
||||||
// документСТаблицейToolStripMenuItem
|
// документСТаблицейToolStripMenuItem
|
||||||
//
|
//
|
||||||
документСТаблицейToolStripMenuItem.Name = "документСТаблицейToolStripMenuItem";
|
документСТаблицейToolStripMenuItem.Name = "документСТаблицейToolStripMenuItem";
|
||||||
документСТаблицейToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.T;
|
документСТаблицейToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.T;
|
||||||
документСТаблицейToolStripMenuItem.Size = new Size(309, 22);
|
документСТаблицейToolStripMenuItem.Size = new Size(309, 22);
|
||||||
документСТаблицейToolStripMenuItem.Text = "Отчет по всем заказам";
|
документСТаблицейToolStripMenuItem.Text = "Отчет по всем заказам Excel";
|
||||||
документСТаблицейToolStripMenuItem.Click += документСТаблицейToolStripMenuItem_Click;
|
документСТаблицейToolStripMenuItem.Click += buttonCreateOrderReport_Click;
|
||||||
//
|
//
|
||||||
// документСДиаграммойToolStripMenuItem
|
// документСДиаграммойToolStripMenuItem
|
||||||
//
|
//
|
||||||
@ -115,7 +117,7 @@
|
|||||||
документСДиаграммойToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.C;
|
документСДиаграммойToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.C;
|
||||||
документСДиаграммойToolStripMenuItem.Size = new Size(309, 22);
|
документСДиаграммойToolStripMenuItem.Size = new Size(309, 22);
|
||||||
документСДиаграммойToolStripMenuItem.Text = "Документ с линейной диаграммой";
|
документСДиаграммойToolStripMenuItem.Text = "Документ с линейной диаграммой";
|
||||||
документСДиаграммойToolStripMenuItem.Click += документСДиаграммойToolStripMenuItem_Click;
|
документСДиаграммойToolStripMenuItem.Click += CreateDocumentButton_Click;
|
||||||
//
|
//
|
||||||
// выбранныеТоварыToolStripMenuItem
|
// выбранныеТоварыToolStripMenuItem
|
||||||
//
|
//
|
||||||
@ -167,5 +169,7 @@
|
|||||||
private ToolStripMenuItem документСДиаграммойToolStripMenuItem;
|
private ToolStripMenuItem документСДиаграммойToolStripMenuItem;
|
||||||
private ControlsLibraryNet60.Data.ControlDataTableTable controlDataTable;
|
private ControlsLibraryNet60.Data.ControlDataTableTable controlDataTable;
|
||||||
private FormLibrary.PDFTable pdfTable1;
|
private FormLibrary.PDFTable pdfTable1;
|
||||||
|
private WinFormsLibraryVolkov.NonVisualComponents.ExcelTableComponent excelTableComponent1;
|
||||||
|
private ComponentsLibraryNet60.DocumentWithChart.ComponentDocumentWithChartLineWord componentDocumentWithChartLineWord1;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,6 +18,9 @@ using WinFormsLibraryVolkov.NonVisualComponents;
|
|||||||
using ComponentsLibraryNet60.Core;
|
using ComponentsLibraryNet60.Core;
|
||||||
using ComponentsLibraryNet60.DocumentWithTable;
|
using ComponentsLibraryNet60.DocumentWithTable;
|
||||||
using ComponentsLibraryNet60.Models;
|
using ComponentsLibraryNet60.Models;
|
||||||
|
using FormLibrary.HelperClasses;
|
||||||
|
using FormLibrary;
|
||||||
|
using ComponentsLibraryNet60.DocumentWithChart;
|
||||||
|
|
||||||
namespace Lab3Form
|
namespace Lab3Form
|
||||||
{
|
{
|
||||||
@ -109,25 +112,207 @@ namespace Lab3Form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GeneratePdfButton_Click(object sender, EventArgs e)
|
||||||
private void документToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
{
|
||||||
List<string> orderImages = new List<string>();
|
try
|
||||||
string path = AppDomain.CurrentDomain.BaseDirectory + "Фотокарточки заказов с интернет-магазина.xlsx";
|
{
|
||||||
//if (excelImagesComponent.createWithImages(new ExcelImageInfo(path, "Фотокарточки заказов", orderImages.ToArray()))) MessageBox.Show("Документ был создан");
|
// Получаем заказы из логики
|
||||||
|
var orders = _logic.ReadList(null);
|
||||||
|
|
||||||
|
// Создаем список таблиц для PDF
|
||||||
|
var orderTables = new List<string[,]>();
|
||||||
|
|
||||||
|
foreach (var order in orders)
|
||||||
|
{
|
||||||
|
// Получаем количество строк для таблицы на основе количества статусов
|
||||||
|
int rowCount = order.OrderStatusHistory.Count;
|
||||||
|
|
||||||
|
// Создаем таблицу с числом строк, равным количеству статусов, и четырьмя колонками
|
||||||
|
// +1 строка для заголовков
|
||||||
|
string[,] orderTable = new string[rowCount+1, 4];
|
||||||
|
|
||||||
|
// Первая строка — заголовок
|
||||||
|
orderTable[0, 0] = "Статус";
|
||||||
|
orderTable[0, 1] = "Идентификатор заказа";
|
||||||
|
orderTable[0, 2] = "Город назначения";
|
||||||
|
orderTable[0, 3] = "Дата доставки";
|
||||||
|
|
||||||
|
// Заполняем строки таблицы статусами и данными о заказе
|
||||||
|
for (int i = 0; i < rowCount; i++)
|
||||||
|
{
|
||||||
|
orderTable[i+1, 0] = order.OrderStatusHistory[i]; // Статус заказа
|
||||||
|
orderTable[i+1, 1] = order.Id.ToString(); // Имя заказчика
|
||||||
|
orderTable[i+1, 2] = order.DestinationCityName; // Город назначения
|
||||||
|
orderTable[i+1, 3] = order.ExpectedDeliveryDate.ToString("yyyy-MM-dd"); // Дата доставки
|
||||||
|
}
|
||||||
|
|
||||||
|
// Добавляем таблицу заказа в список
|
||||||
|
orderTables.Add(orderTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запрашиваем у пользователя путь и имя файла для сохранения
|
||||||
|
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
|
||||||
|
{
|
||||||
|
saveFileDialog.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
|
||||||
|
saveFileDialog.Title = "Сохранить PDF-документ";
|
||||||
|
saveFileDialog.FileName = "Отчет1.pdf"; // Имя по умолчанию
|
||||||
|
|
||||||
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
// Создаем PDF данные с указанным пользователем путем
|
||||||
|
var pdfData = new PdfDocumentData(
|
||||||
|
saveFileDialog.FileName, // Используем выбранный путь и имя файла
|
||||||
|
"Отчет по заказам",
|
||||||
|
orderTables // Передаем список таблиц в PDF-данные
|
||||||
|
);
|
||||||
|
|
||||||
|
var documentGenerator = new PDFTable();
|
||||||
|
documentGenerator.GeneratePdf(pdfData);
|
||||||
|
|
||||||
|
MessageBox.Show("PDF-документ успешно создан!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show($"Произошла ошибка: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void документСТаблицейToolStripMenuItem_Click(object sender, EventArgs e)
|
private void buttonCreateOrderReport_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string path = AppDomain.CurrentDomain.BaseDirectory + "Отчет по всем заказам.docx";
|
// Получаем список заказов из логики
|
||||||
|
var orders = _logic.ReadList(null);
|
||||||
|
if (orders == null || orders.Count == 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Нет заказов для отчета.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Подготовка данных для Excel
|
||||||
|
var tableData = new List<OrderExcelViewModel>();
|
||||||
|
foreach (var order in orders)
|
||||||
|
{
|
||||||
|
if (order != null)
|
||||||
|
{
|
||||||
|
tableData.Add(new OrderExcelViewModel(
|
||||||
|
order.Id,
|
||||||
|
order.Fullname,
|
||||||
|
//order.DestinationCityId,
|
||||||
|
order.DestinationCityName,
|
||||||
|
order.ExpectedDeliveryDate
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Определение параметров для Excel
|
||||||
|
string path = AppDomain.CurrentDomain.BaseDirectory + "OrderReport.xlsx";
|
||||||
|
|
||||||
|
// Определяем объединения для заголовков
|
||||||
|
List<(int, int)> merges = new List<(int, int)>
|
||||||
|
{
|
||||||
|
(0,1),
|
||||||
|
(2, 3)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Убедитесь, что высоты соответствуют количеству строк
|
||||||
|
List<int> heights = Enumerable.Repeat(20, 4).ToList();
|
||||||
|
|
||||||
|
// Заголовки шапки
|
||||||
|
List<(string, string)> headers = new List<(string, string)>
|
||||||
|
{
|
||||||
|
|
||||||
|
("","Данные"),
|
||||||
|
("Id", "Идентификатор"),
|
||||||
|
("Fullname", "ФИО заказчика"),
|
||||||
|
//("DestinationCityId","Идентификатор города"),
|
||||||
|
("", "Заказ"),
|
||||||
|
("DestinationCityName", "Город назначения"),
|
||||||
|
("ExpectedDeliveryDate", "Дата получения заказа")
|
||||||
|
};
|
||||||
|
|
||||||
|
// Проверьте, что все списки заполнены
|
||||||
|
if (merges.Count == 0 || heights.Count == 0 || headers.Count == 0 || tableData.Count == 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Недостаточно данных для создания отчета.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Вывод отладочной информации
|
||||||
|
Console.WriteLine($"Merges Count: {merges.Count}");
|
||||||
|
Console.WriteLine($"Heights Count: {heights.Count}");
|
||||||
|
Console.WriteLine($"Headers Count: {headers.Count}");
|
||||||
|
Console.WriteLine($"TableData Count: {tableData.Count}");
|
||||||
|
// Вызов метода для создания Excel файла
|
||||||
|
if (excelTableComponent1.createWithTable(path, "Отчет по заказам", merges, heights, headers, tableData))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Отчет успешно создан!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Ошибка при создании отчета.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void документСДиаграммойToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
string path = AppDomain.CurrentDomain.BaseDirectory + "Гистограмма товаров.pdf";
|
|
||||||
|
|
||||||
|
private void CreateDocumentButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Извлечение заказов
|
||||||
|
var orders = _logic.ReadList(null).Cast<OrderViewModel>().ToList();
|
||||||
|
|
||||||
|
// Подготовка данных для диаграммы
|
||||||
|
var chartData = new Dictionary<string, List<(DateTime Date, int Count)>>();
|
||||||
|
|
||||||
|
foreach (var order in orders)
|
||||||
|
{
|
||||||
|
if (!chartData.ContainsKey(order.DestinationCityName))
|
||||||
|
{
|
||||||
|
chartData[order.DestinationCityName] = new List<(DateTime Date, int Count)>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Добавляем заказ в соответствующий город назначения и дату
|
||||||
|
var existingData = chartData[order.DestinationCityName]
|
||||||
|
.FirstOrDefault(d => d.Date.Date == order.ExpectedDeliveryDate.Date);
|
||||||
|
|
||||||
|
if (existingData.Date == default)
|
||||||
|
{
|
||||||
|
chartData[order.DestinationCityName].Add((order.ExpectedDeliveryDate.Date, 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Увеличиваем счетчик для существующей даты
|
||||||
|
int index = chartData[order.DestinationCityName].FindIndex(d => d.Date.Date == order.ExpectedDeliveryDate.Date);
|
||||||
|
var updatedValue = chartData[order.DestinationCityName][index];
|
||||||
|
chartData[order.DestinationCityName][index] = (updatedValue.Date, updatedValue.Count + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Создание конфигурации для документа
|
||||||
|
string filePath = "G://report.docx"; // Укажите нужное имя файла
|
||||||
|
var config = new ComponentDocumentWithChartConfig
|
||||||
|
{
|
||||||
|
ChartTitle = "Отчет по заказам",
|
||||||
|
LegendLocation = ComponentsLibraryNet60.Models.Location.Bottom,
|
||||||
|
Data = chartData.ToDictionary(
|
||||||
|
entry => entry.Key,
|
||||||
|
entry => entry.Value.Select(d => (DateTimeToInt(d.Date), (double)d.Count)).ToList()),
|
||||||
|
FilePath = filePath, // Устанавливаем путь к файлу
|
||||||
|
Header = "Заголовок отчета" // Устанавливаем заголовок
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Создание экземпляра вашего связующего класса
|
||||||
|
var documentComponent = new ComponentDocumentWithChartLineWord();
|
||||||
|
|
||||||
|
// Создание документа
|
||||||
|
documentComponent.CreateDoc(config);
|
||||||
|
|
||||||
|
MessageBox.Show("Документ создан успешно!");
|
||||||
}
|
}
|
||||||
|
private int DateTimeToInt(DateTime date)
|
||||||
|
{
|
||||||
|
return date.Day;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void выбранныеТоварыToolStripMenuItem_Click(object sender, EventArgs e)
|
private void выбранныеТоварыToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
@ -123,6 +123,12 @@
|
|||||||
<metadata name="pdfTable1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="pdfTable1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>126, 17</value>
|
<value>126, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="excelTableComponent1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>231, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="componentDocumentWithChartLineWord1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>409, 17</value>
|
||||||
|
</metadata>
|
||||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>177</value>
|
<value>177</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
Loading…
Reference in New Issue
Block a user