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

193 lines
7.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}