232 lines
8.8 KiB
C#
232 lines
8.8 KiB
C#
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<OrderViewModel>()!.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<string[,]> tables = new List<string[,]>();
|
||
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<UserComponentsOption19.DiagramWordNoVisibleComponent.ChartSeries> tables = new List<DiagramWordNoVisibleComponent.ChartSeries>();
|
||
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;
|
||
}
|
||
}
|
||
}
|
||
} |