336 lines
11 KiB
C#
336 lines
11 KiB
C#
|
using BusinessLogics.BusinessLogics;
|
|||
|
using Components.NonVisualComponents;
|
|||
|
using ComponentsLibrary.NonVisualComponents.HelperModels;
|
|||
|
using ComponentsLibrary.NonVisualComponents;
|
|||
|
using ComponentsLibrary.VisualComponents;
|
|||
|
using ComponentsLibraryNet60.DocumentWithTable;
|
|||
|
using ComponentsLibraryNet60.Models;
|
|||
|
using Contracts.BindingModels;
|
|||
|
using Contracts.BusinessLogicsContracts;
|
|||
|
using Contracts.ViewModels;
|
|||
|
using DatabaseImplement.Implements;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
using Plugins;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using NLog.Extensions.Logging;
|
|||
|
|
|||
|
namespace WinForms
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Реализация интерфейса-соглашения для плагинов
|
|||
|
/// </summary>
|
|||
|
public class PluginsConvention : IPluginsConvention
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Название плагина
|
|||
|
/// </summary>
|
|||
|
public string PluginName => "Orders";
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Визуальный компонент для вывода списка в виде дерева
|
|||
|
/// </summary>
|
|||
|
private readonly UserTreeView _userTreeView;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Бизнес-логика для сущности "Счет"
|
|||
|
/// </summary>
|
|||
|
private readonly IOrderLogic _orderLogic;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Бизнес-логика для сущности "Тип заказа"
|
|||
|
/// </summary>
|
|||
|
private readonly IOrderTypeLogic _orderTypeLogic;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Конструктор
|
|||
|
/// </summary>
|
|||
|
public PluginsConvention()
|
|||
|
{
|
|||
|
_userTreeView = new UserTreeView();
|
|||
|
var hierarchy = new List<string>()
|
|||
|
{
|
|||
|
"Type",
|
|||
|
"Sum",
|
|||
|
"Id",
|
|||
|
"WaiterFullName"
|
|||
|
};
|
|||
|
_userTreeView.SetHierarchy(hierarchy);
|
|||
|
|
|||
|
var loggerFactory = LoggerFactory.Create(builder => builder.AddNLog());
|
|||
|
var orderLogicLogger = loggerFactory.CreateLogger<OrderLogic>();
|
|||
|
var orderTypeLogicLogger = loggerFactory.CreateLogger<OrderTypeLogic>();
|
|||
|
|
|||
|
_orderLogic = new OrderLogic(orderLogicLogger, new OrderStorage());
|
|||
|
_orderTypeLogic = new OrderTypeLogic(orderTypeLogicLogger, new OrderTypeStorage());
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Получение контрола для вывода набора данных
|
|||
|
/// </summary>
|
|||
|
public UserControl GetControl
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
ReloadData();
|
|||
|
return _userTreeView;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Получение элемента, выбранного в контроле
|
|||
|
/// </summary>
|
|||
|
public PluginsConventionElement GetElement
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
var order = _userTreeView.GetSelectedObject<OrderViewModel>();
|
|||
|
int id = -1;
|
|||
|
if (order != null)
|
|||
|
{
|
|||
|
id = order.Id;
|
|||
|
}
|
|||
|
|
|||
|
byte[] bytes = new byte[16];
|
|||
|
BitConverter.GetBytes(id).CopyTo(bytes, 0);
|
|||
|
return new PluginsConventionElement { Id = new Guid(bytes) };
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Получение формы для создания/редактирования объекта
|
|||
|
/// </summary>
|
|||
|
/// <param name="element"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public Form GetForm(PluginsConventionElement element)
|
|||
|
{
|
|||
|
if (element == null)
|
|||
|
{
|
|||
|
return new FormOrder(_orderLogic, _orderTypeLogic);
|
|||
|
}
|
|||
|
|
|||
|
if (element.Id.GetHashCode() >= 0)
|
|||
|
{
|
|||
|
byte[] bytes = element.Id.ToByteArray();
|
|||
|
int Id = BitConverter.ToInt32(bytes, 0);
|
|||
|
|
|||
|
var form = new FormOrder(_orderLogic, _orderTypeLogic);
|
|||
|
form.Id = Id;
|
|||
|
return form;
|
|||
|
}
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Получение формы для работы со справочником
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public Form GetThesaurus()
|
|||
|
{
|
|||
|
return new FormOrderTypes(_orderTypeLogic);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Удаление элемента
|
|||
|
/// </summary>
|
|||
|
/// <param name="element"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public bool DeleteElement(PluginsConventionElement element)
|
|||
|
{
|
|||
|
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
byte[] bytes = element.Id.ToByteArray();
|
|||
|
int Id = BitConverter.ToInt32(bytes, 0);
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
_orderLogic.Delete(new OrderBindingModel() { Id = Id });
|
|||
|
ReloadData();
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Обновление набора данных в контроле
|
|||
|
/// </summary>
|
|||
|
public void ReloadData()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var orders = _orderLogic.ReadList(null);
|
|||
|
if (orders == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
foreach (var order in orders)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(order.Sum))
|
|||
|
{
|
|||
|
order.Sum = "По акции";
|
|||
|
}
|
|||
|
|
|||
|
_userTreeView.AddObjectToTree(order);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Создание простого документа
|
|||
|
/// </summary>
|
|||
|
/// <param name="saveDocument"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var orders = _orderLogic.ReadList(null);
|
|||
|
if (orders == null)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
string title = "Информация по аукционным счетам.";
|
|||
|
|
|||
|
List<string> rows = new List<string>();
|
|||
|
foreach (var order in orders)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(order.Sum))
|
|||
|
{
|
|||
|
string row = $"ФИО официанта: {order.WaiterFullName} -- Описание счета: {order.Info}";
|
|||
|
rows.Add(row);
|
|||
|
}
|
|||
|
}
|
|||
|
string[] rowsArray = rows.ToArray();
|
|||
|
|
|||
|
var bigTextComponent = new BigTextComponent();
|
|||
|
bigTextComponent.CreateDocument(saveDocument.FileName, title, rowsArray);
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Создание документа с настраиваемой таблицей
|
|||
|
/// </summary>
|
|||
|
/// <param name="saveDocument"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var orders = _orderLogic.ReadList(null);
|
|||
|
if (orders == null)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
foreach (var order in orders)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(order.Sum))
|
|||
|
{
|
|||
|
order.Sum = "По акции";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var componentDocumentWithTableMultiHeaderWord = new ComponentDocumentWithTableMultiHeaderWord();
|
|||
|
componentDocumentWithTableMultiHeaderWord.CreateDoc(new ComponentDocumentWithTableHeaderDataConfig<OrderViewModel>
|
|||
|
{
|
|||
|
FilePath = saveDocument.FileName,
|
|||
|
Header = "Информация по счетам.",
|
|||
|
ColumnsRowsWidth = new List<(int Column, int Row)>()
|
|||
|
{
|
|||
|
(5, 5),
|
|||
|
(10, 5),
|
|||
|
(15, 0),
|
|||
|
(15, 0),
|
|||
|
},
|
|||
|
Headers = new List<(int ColumnIndex, int RowIndex, string Header, string PropertyName)>()
|
|||
|
{
|
|||
|
(0, 0, "Id", "Id"),
|
|||
|
(1, 0, "ФИО официанта", "WaiterFullName"),
|
|||
|
(2, 0, "Тип заказа", "Type"),
|
|||
|
(3, 0, "Сумма заказа", "Sum")
|
|||
|
},
|
|||
|
Data = orders,
|
|||
|
});
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Создание документа с диаграммой
|
|||
|
/// </summary>
|
|||
|
/// <param name="saveDocument"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public bool CreateChartDocument(PluginsConventionSaveDocument saveDocument)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var orders = _orderLogic.ReadList(null);
|
|||
|
if (orders == null)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
var orderTypes = _orderTypeLogic.ReadList(null);
|
|||
|
if (orderTypes == null)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
List<(double, string)> items = new List<(double, string)>();
|
|||
|
foreach (var orderType in orderTypes)
|
|||
|
{
|
|||
|
int count = 0;
|
|||
|
foreach (var order in orders)
|
|||
|
{
|
|||
|
if (order.Type == orderType.Name && string.IsNullOrEmpty(order.Sum))
|
|||
|
{
|
|||
|
count++;
|
|||
|
}
|
|||
|
}
|
|||
|
items.Add((count, orderType.Name));
|
|||
|
}
|
|||
|
|
|||
|
var pdfPieChart = new PdfPieChart();
|
|||
|
pdfPieChart.CreatePieChart(new DataForPieChart(saveDocument.FileName, "Информация по оплаченным счетам каждого типа заказов", "Круговая диаграмма", DiagramLegendEnum.Top, "Типы заказов", items));
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|