using BusinessLogic.BusinessLogic; using ComponentsLibraryNet60.DocumentWithChart; using ComponentsLibraryNet60.DocumentWithTable; using ComponentsLibraryNet60.Models; using Contracts.BindlingModels; using Contracts.BusinessLogicContracts; using Contracts.ViewModels; using Controls; using ControlsLibraryNet60.Data; using ControlsLibraryNet60.Models; using CustomComponents.NonViewComponents; using CustomComponents.NonViewComponents.Enums; using CustomComponents.NonViewComponents.SupportClasses; using DatabaseImplement.Implements; using NotVisualComponent; using NotVisualComponent.Models; using PluginsConventionLibrary; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Forms { public class PluginsConvention : IPluginsConvention { private readonly IDeliveryLogic _dlogic; private readonly IDeliveryTypeLogic _dtlogic; private readonly ControlDataTreeTable _controlDataTreeTable = new(); private readonly LargeTextComponent _largeTextComponent = new(); private readonly ExcelHardTable excelHardTable = new(); private readonly PieChartWord pieChartWord = new(); public PluginsConvention() { _dtlogic = new DeliveryTypeLogic(new DeliveryTypeStorage()); _dlogic = new DeliveryLogic(new DeliveryStorage()); ReloadData(); } public string PluginName => "PluginLab3"; public UserControl GetControl => _controlDataTreeTable; public PluginsConventionElement GetElement { get { var selected = _controlDataTreeTable.GetSelectedObject(); if (selected == null) throw new Exception("Не удалось получить выбранный элемент"); byte[] bytes = new byte[16]; BitConverter.GetBytes(selected.Id).CopyTo(bytes, 0); return new PluginsConventionProvider() { Id = new Guid(bytes), FCs = selected.FCs, Wishes = selected.Wishes, DeliveryType = selected.DeliveryType, DeliveryDate = selected.DeliveryDate, }; } } public Form GetForm(PluginsConventionElement element) { var deliveryForm = new DeliveryForm(_dlogic, _dtlogic); if (element != null) { deliveryForm = new DeliveryForm(_dlogic, _dtlogic, element.Id.GetHashCode()); } return deliveryForm; } public Form GetThesaurus() { return new DeliveryTypeForm(_dtlogic); } public bool DeleteElement(PluginsConventionElement element) { return _dlogic.Delete(new DeliveryBindingModel { Id = element.Id.GetHashCode() }); } public void ReloadData() { DataTreeNodeConfig treeConfig = new(); treeConfig.NodeNames = new(); treeConfig.NodeNames.Enqueue("Id"); treeConfig.NodeNames.Enqueue("FCs"); treeConfig.NodeNames.Enqueue("Wishes"); treeConfig.NodeNames.Enqueue("DeliveryType"); treeConfig.NodeNames.Enqueue("DeliveryDate"); _controlDataTreeTable.LoadConfig(treeConfig); var list = _dlogic.ReadList(null); if (list != null) { _controlDataTreeTable.Clear(); _controlDataTreeTable.AddTable(list); } } public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument) { var list = _dlogic.ReadList(null); if (list != null) { int i = 0; foreach (var item in list) { if (item.DeliveryDate == "Даты доставки нет") i++; } string[] strings = new string[i]; int j = 0; foreach (var item in list) { if (item.DeliveryDate == "Даты доставки нет") { strings[j] = ($"{item.FCs} : {item.Wishes}"); j++; } } _largeTextComponent.CreateDocument(saveDocument.FileName, $"Отчет по доставкам без даты:", strings); MessageBox.Show("Отчет готов"); return true; } return false; } public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument) { var list = _dlogic.ReadList(null); if (list != null) { excelHardTable.CreateDoc(new TableWithHeaderConfig { FilePath = saveDocument.FileName, Header = "Deliveryies", ColumnsRowsWidth = new List<(int Column, int Row)> { (5, 5), (20, 5), (10, 0), (15, 0), }, Headers = new List<(int ColumnIndex, int RowIndex, string Header, string PropertyName)> { (0, 0, "Id", "Id"), (1, 0, "FCs", "FCs"), (2, 0, "DeliveryType", "DeliveryType"), (3, 0, "DeliveryDate", "DeliveryDate"), }, Data = list }); MessageBox.Show("Отчет готов"); return true; } return false; } public bool CreateChartDocument(PluginsConventionSaveDocument saveDocument) { var list = _dlogic.ReadList(null); var data = list .Where(x => x.DeliveryDate != "Даты доставки нет") .GroupBy(x => x.DeliveryType) .Select(g => (type: g.Key, Value: g.Count())) .ToList(); var categoriesX = data.Select(d => d.type).ToList(); var valuesY = data.Select(d => (double)d.Value).ToList(); if (list != null) { var series = new List { new() { SeriesName = "Количество доставок", ValuesY = valuesY, Color = Color.FromArgb(100, 150, 200) } }; pieChartWord.CreateDiagramDocument(new PieChartData() { FileName = saveDocument.FileName, DocumentTitle = "Диаграмма", DiagramTitle = "Количество доставок по типам", LegendLayout = PieChartLegendAlign.Bottom, CategoriesX = categoriesX, SeriesData = series }); MessageBox.Show("Отчет готов"); return true; } return false; } } }