using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Plugins; using Contracts.BusinessLogicContracts; using WinFormsLibrary1; using Contracts.ViewModels; using Contracts.BindingModels; using UserComponentsOption19; using Components; using DataBaseImplements.Implements; using BusinessLogic; using WinFormsLibrary1.HelperClasses; namespace COP3_ { public class PluginsConvention : IPluginsConvention { private readonly IOrderLogic _orderLogic; private readonly ICityStatusLogic _cityLogic; private readonly ListComponent _list; private readonly PDFTable _pdfTable; private readonly ComponentExcelTableWithColumnHeader _excelTable; private readonly DiagramWordNoVisibleComponent _wordDiagram; public string PluginName { get; set; } = "Orders"; public UserControl GetControl { get { return _list; } } public PluginsConvention() { _orderLogic = new OrderLogic(new OrderStorage()); _cityLogic = new CityLogic(new CityStorage()); _pdfTable = new(); _excelTable = new(); _wordDiagram = new(); _list = new(); } public PluginsConventionElement GetElement { get { int Id = _list.GetObjectFromSelectedRow()!.Id; byte[] bytes = new byte[16]; BitConverter.GetBytes(Id).CopyTo(bytes, 0); Guid guid = new Guid(bytes); return new PluginsConventionElement() { Id = guid }; } } public Form GetForm(PluginsConventionElement element) { if (element == null) { return new FormMain(_orderLogic, _cityLogic); } else { int id = element.Id.GetHashCode(); int? idl = id; OrderViewModel model = _orderLogic.ReadElement(new Contracts.SearchModels.OrderSearchModel { Id = idl }); FormEdit form = new FormEdit(_orderLogic, _cityLogic); form.Id = element.Id.GetHashCode(); return form; } } public Form GetThesaurus() { return new FormGuide(_cityLogic); } public bool DeleteElement(PluginsConventionElement element) { _orderLogic.Delete( new OrderBindingModel { Id = element.Id.GetHashCode() } ); return true; } public void ReloadData() { try { var orders = _orderLogic.ReadList(null); _list.ClearRows(); _list.FillTemplateString("Заказ: (OrderDestination), Индентфикатор: (Id), ФИО: (FIO), Дата доставки: (OrderDeliveryTime)", "(", ")"); foreach (var order in orders) { _list.AddObjectToListBox(order); } } catch (Exception ex) { MessageBox.Show( ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error ); } } public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument) { string filePath = saveDocument.FileName; string title = "Продвижение заказа"; try { var orders = _orderLogic.ReadList(null); var cities = _cityLogic.ReadList(null); if (orders != null) { List tables = new List(); string[,] var = new string[7, orders.Count]; for (int i = 0; i < orders.Count; i++) { var[0, i] = orders[i].Id.ToString(); for (int j = 1; j < 7; j++) { if (j <= orders[i].OrderPath.Length) var[j, i] = orders[i].OrderPath[j - 1]; else var[j, i] = string.Empty; } } tables.Add(var); PdfDocumentData pdfdata = new PdfDocumentData(filePath, title, tables); _pdfTable.GeneratePdf(pdfdata); MessageBox.Show("Файл успешно создан.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); return true; } else return false; } catch (Exception ex) { MessageBox.Show(ex.Message); return false; } } public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument) { string filePath = saveDocument.FileName; try { var orders = _orderLogic.ReadList(null); if (orders == null || !orders.Any()) { MessageBox.Show("Нет данных"); return false; } List<(string title, string propertyName, float height)> headers = new List<(string title, string propertyName, float height)> { ("ID","Id",20), ("ФИО", "FIO",40), ("Пункт назначения", "OrderDestination",40), ("Дата доставки", "OrderDeliveryTime",40) }; List<(int StartRow, int EndRow, int StartCol, int EndCol, string title)> mergeCellsInfo = new List<(int StartRow, int EndRow, int StartCol, int EndCol, string title)> { (3, 4, 1, 1, "Заказ") }; _excelTable.GenerateExcelFile(filePath, "Excel", mergeCellsInfo, orders, headers); MessageBox.Show("Файл успешно создан.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); return true; } catch (Exception ex) { MessageBox.Show($"Ошибка при создании файла: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } public bool CreateChartDocument(PluginsConventionSaveDocument saveDocument) { string filePath = saveDocument.FileName; string fileTitle = "Информация о заказах"; try { var orders = _orderLogic.ReadList(null); if (orders == null || !orders.Any()) { MessageBox.Show("Нет данных"); return false; } List tables = new List(); var deliveryTime = (from order in orders select order.OrderDeliveryTime).Distinct().Order().ToArray(); var destinations = (from order in orders select order.OrderDestination).Distinct().ToList(); foreach (var item in destinations) { double[] ints = new double[deliveryTime.Length]; for (int i = 0; i < deliveryTime.Length; i++) { ints[i] = (from order in orders where order.OrderDeliveryTime == deliveryTime[i] && order.OrderDestination == item select order).Count(); } tables.Add( new DiagramWordNoVisibleComponent.ChartSeries { Name = item, Data = ints.ToList(), } ); } _wordDiagram.CreateDocumentWithChart(filePath, fileTitle, "Заказы", UserComponentsOption19.DiagramWordNoVisibleComponent.LegendPosition.Bottom, tables, (from delivery in deliveryTime select delivery.ToString()).ToList()); MessageBox.Show("Файл успешно создан.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); return true; } catch (Exception ex) { MessageBox.Show($"Ошибка при создании файла: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } } }