From 7b0038a08feab763518f0da6cd6d2728d270db82 Mon Sep 17 00:00:00 2001 From: bocchanskyy Date: Tue, 29 Oct 2024 07:50:52 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B2=D0=BE=D1=80=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VolkovLabs/InternetShopOrdersApp/FormMain.cs | 107 ++++++++++++++++-- .../FormOrder.Designer.cs | 1 + VolkovLabs/InternetShopOrdersApp/FormOrder.cs | 29 +++++ 3 files changed, 125 insertions(+), 12 deletions(-) diff --git a/VolkovLabs/InternetShopOrdersApp/FormMain.cs b/VolkovLabs/InternetShopOrdersApp/FormMain.cs index e14df7d..ba26c7d 100644 --- a/VolkovLabs/InternetShopOrdersApp/FormMain.cs +++ b/VolkovLabs/InternetShopOrdersApp/FormMain.cs @@ -18,6 +18,11 @@ using WinFormsLibraryVolkov.NonVisualComponents; using ComponentsLibraryNet60.Core; using ComponentsLibraryNet60.DocumentWithTable; using ComponentsLibraryNet60.Models; +using OxyPlot.Legends; +using FormLibrary.HelperClasses; +using FormLibrary; +using System.Diagnostics; +using DocumentFormat.OpenXml.Drawing.Charts; namespace InternetShopOrdersApp { @@ -99,18 +104,6 @@ namespace InternetShopOrdersApp if (excelImagesComponent.createWithImages(new ExcelImageInfo(path, "Фотокарточки заказов", orderImages.ToArray()))) MessageBox.Show("Документ был создан"); } - private void документСТаблицейToolStripMenuItem_Click(object sender, EventArgs e) - { - string path = AppDomain.CurrentDomain.BaseDirectory + "Отчет по всем заказам.docx"; - - } - - private void документСДиаграммойToolStripMenuItem_Click(object sender, EventArgs e) - { - string path = AppDomain.CurrentDomain.BaseDirectory + "Гистограмма товаров.pdf"; - - } - private void выбранныеТоварыToolStripMenuItem_Click(object sender, EventArgs e) { var service = Program.ServiceProvider?.GetService(typeof(FormSelectedItems)); @@ -119,5 +112,95 @@ namespace InternetShopOrdersApp form.ShowDialog(); } } + + private void документСТаблицейToolStripMenuItem_Click(object sender, EventArgs e) + { + string path = AppDomain.CurrentDomain.BaseDirectory + "Отчет по всем товарам.docx"; + + // Получение списка заказов, который теперь должен возвращать список OrderViewModel + var orders = _logic.ReadList(null).Select(order => new OrderViewModel + { + Id = order.Id, + Fullname = order.Fullname, + Email = order.Email, + SelectedItemName = order.SelectedItemName, + OrderImage = order.OrderImage + }).ToList(); // Преобразование в список OrderViewModel + + // Настройка заголовков + var headers = new List<(int ColumnIndex, int RowIndex, string Header, string PropertyName)> + { + (0, 0, "Идентификатор", nameof(OrderViewModel.Id)), + (1, 0, "Личные данные", null), // Adjusting to show a single header for the merged fields + (2, 0, "Выбранный товар", nameof(OrderViewModel.SelectedItemName)) + }; + + // Задайте количество данных и заголовков + var dataCount = orders.Count; // Количество строк данных + var headerCount = headers.Count; // Количество заголовков + + // Определение ширины колонок + var columnsRowsWidth = new List<(int Column, int Row)> + { + (0, 1), // Ширина для "Идентификатор" + (1, 1), // Ширина для "Личные данные" (объединение ФИО и Эл. почты) + (2, 1) // Ширина для "Выбранный товар" + }; + + // Определение объединения колонок + var columnUnion = new List<(int StartIndex, int Count)> + { + (1, 2) // Объединяем "ФИО" и "Эл. почта" в одну ячейку + }; + + // Создание документа + componentDocumentWithTableMultiHeaderWord.CreateDoc(new ComponentDocumentWithTableHeaderDataConfig + { + Header = "Отчет по всем товарам", + Headers = headers, + ColumnsRowsDataCount = (headerCount, dataCount+1), // +1 для заголовка + ColumnsRowsWidth = columnsRowsWidth, + ColumnUnion = columnUnion, + UseUnion = true, + FilePath = path, + Data = orders // Передаем данные заказов в виде OrderViewModel + }); + } + + private void документСДиаграммойToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + var histogramGenerator = new ComponentHistogramToPdf(); + + var orders = _logic.ReadList(null); + + var itemCounts = new Dictionary(); + foreach (var order in orders) + { + if (!itemCounts.ContainsKey(order.SelectedItemName)) + { + itemCounts[order.SelectedItemName] = 0; + } + itemCounts[order.SelectedItemName]++; + } + + var chartData = new List + { + new ChartData { SeriesName = "Заказы по товарам", Data = itemCounts.ToDictionary(kvp => kvp.Key, kvp => (double)kvp.Value) } + }; + + string filePath = AppDomain.CurrentDomain.BaseDirectory + "Какие товары сколько раз заказывали.pdf"; + + histogramGenerator.CreateHistogramPdf(filePath, "Какие товары сколько раз заказывали", "Диаграмма заказов", OxyPlot.Legends.LegendPosition.BottomCenter, chartData); + + MessageBox.Show("PDF успешно сгенерирован!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } } diff --git a/VolkovLabs/InternetShopOrdersApp/FormOrder.Designer.cs b/VolkovLabs/InternetShopOrdersApp/FormOrder.Designer.cs index 56f51ce..e14877f 100644 --- a/VolkovLabs/InternetShopOrdersApp/FormOrder.Designer.cs +++ b/VolkovLabs/InternetShopOrdersApp/FormOrder.Designer.cs @@ -143,6 +143,7 @@ Controls.Add(labelFIO); Name = "FormOrder"; Text = "Заказ"; + Load += FormOrder_Load; ResumeLayout(false); PerformLayout(); } diff --git a/VolkovLabs/InternetShopOrdersApp/FormOrder.cs b/VolkovLabs/InternetShopOrdersApp/FormOrder.cs index 14202a7..b684f59 100644 --- a/VolkovLabs/InternetShopOrdersApp/FormOrder.cs +++ b/VolkovLabs/InternetShopOrdersApp/FormOrder.cs @@ -1,6 +1,7 @@ using InternetShopOrdersContracts.BindingModels; using InternetShopOrdersContracts.BusinessLogicContracts; using InternetShopOrdersContracts.ViewModels; +using InternetShopOrdersContracts.SearchModels; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,6 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Text.RegularExpressions; namespace InternetShopOrdersApp { @@ -34,6 +36,24 @@ namespace InternetShopOrdersApp { _selectedItems = _selectedItemLogic.ReadList(null); customSelectedCheckedListBox.PopulateList(_selectedItems.Select(x => x.Name).ToList()); + if (_id.HasValue) + { + try + { + var view = _logic.ReadElement(new OrderSearchModel { Id = _id.Value }); + if (view != null) + { + textBoxFIO.Text = view.Fullname; + customSelectedCheckedListBox.SelectedElement = view.SelectedItemName; + controlInputRegexEmail.Value = view.Email; + orderImage = view.OrderImage; + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } private void buttonSave_Click(object sender, EventArgs e) @@ -50,6 +70,15 @@ namespace InternetShopOrdersApp { MessageBox.Show("Выберите фото заказа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } + if (controlInputRegexEmail.Value == null) + { + MessageBox.Show("Введите электронную почту", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + if (!Regex.IsMatch(controlInputRegexEmail.Value, controlInputRegexEmail.Pattern)) + { + MessageBox.Show("Некорректный формат ввода электронной почты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + try { var model = new OrderBindingModel