PIbd-31_Malafeev.L.S._COP_25/Cop_25/Forms/PluginsConvention.cs

193 lines
7.0 KiB
C#
Raw Normal View History

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<DeliveryViewModel>();
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<DeliveryViewModel>
{
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<SeriesData>
{
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;
}
}
}