Something was created.
This commit is contained in:
parent
e9733d991b
commit
e073e19639
@ -1,7 +1,10 @@
|
||||
using Contracts.ViewModel;
|
||||
using Contracts.BindingModel;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModel;
|
||||
using DatabaseImplement.Implements;
|
||||
using DataModels.Models;
|
||||
using DocumentFormat.OpenXml.EMMA;
|
||||
using IronPdf;
|
||||
using NonVisualComponents;
|
||||
using NonVisualComponents.Classes;
|
||||
using NonVisualComponents.Enums;
|
||||
@ -12,17 +15,20 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using VisualComponentsLib.Components;
|
||||
using VisualComponentsLib.Components.SupportClasses;
|
||||
using VisualComponentsLib.CustomListBox;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
|
||||
|
||||
namespace VisualComponentsForm
|
||||
{
|
||||
public class PluginsConvention : IPluginsConvention
|
||||
{
|
||||
private readonly LabWorkStorage _labWorkStorage;
|
||||
private readonly IDiscipline _discipline;
|
||||
private readonly IDisciplineStorage _discipline;
|
||||
private readonly MyListBox listBox;
|
||||
private SimpleTable wordTable;
|
||||
private ComponentWord wordTable;
|
||||
private PdfTable pdfTable;
|
||||
private ExcelChartInfo excelTable;
|
||||
|
||||
@ -32,7 +38,7 @@ namespace VisualComponentsForm
|
||||
{
|
||||
_labWorkStorage = new LabWorkStorage();
|
||||
_discipline = new DisciplineStorage();
|
||||
wordTable = new SimpleTable();
|
||||
wordTable = new ComponentWord();
|
||||
pdfTable = new PdfTable();
|
||||
//excelTable = new ExcelChartInfo();
|
||||
listBox = new MyListBox();
|
||||
@ -47,7 +53,7 @@ namespace VisualComponentsForm
|
||||
{
|
||||
get
|
||||
{
|
||||
int Id = listBox.GetSelectedRecord<LabWorkViewModel>()!.Id;
|
||||
int Id = GetSelectedId();
|
||||
byte[] bytes = new byte[16];
|
||||
|
||||
BitConverter.GetBytes(Id).CopyTo(bytes, 0);
|
||||
@ -58,6 +64,132 @@ namespace VisualComponentsForm
|
||||
}
|
||||
}
|
||||
|
||||
//запуск основной формы из лабы
|
||||
public Form GetForm(PluginsConventionElement element)
|
||||
{
|
||||
if (element == null)
|
||||
{
|
||||
return new FormMain(_labWorkStorage, _discipline);
|
||||
}
|
||||
else
|
||||
{
|
||||
FormMain form = new FormMain(_labWorkStorage, _discipline);
|
||||
|
||||
return form;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//получаем список дисциплин (мои перечисления по заданию)
|
||||
public Form GetThesaurus()
|
||||
{
|
||||
return new FormCreateDiscipline(_discipline);
|
||||
}
|
||||
|
||||
//создание word табилцы
|
||||
public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
|
||||
{
|
||||
try
|
||||
{
|
||||
//сразу группируем списки по дисциплинам
|
||||
var list = _labWorkStorage.GetFullList().OrderBy(l => l.Discipline).ToList();
|
||||
|
||||
var disciplines = _discipline.GetFullList().OrderBy(d => d.Name).ToList();
|
||||
|
||||
List<string[,]> totalList = new();
|
||||
|
||||
List<LabWorkViewModel> supportList = new();
|
||||
|
||||
foreach (var discipline in disciplines)
|
||||
{
|
||||
|
||||
foreach (var elem in list)
|
||||
{
|
||||
if (elem.Discipline == discipline.Name)
|
||||
{
|
||||
supportList.Add(elem);
|
||||
}
|
||||
}
|
||||
|
||||
supportList = supportList.OrderBy(sl => sl.Theme).ToList();
|
||||
|
||||
totalList.Add(new string[,] { { "Дисциплина", discipline.Name } });
|
||||
|
||||
foreach (var elem in supportList)
|
||||
{
|
||||
var listFCs = elem.FCs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||||
|
||||
string[,] newArray = { { elem.Theme, listFCs[listFCs.Count - 1] } };
|
||||
|
||||
totalList.Add(newArray);
|
||||
}
|
||||
|
||||
supportList.Clear();
|
||||
}
|
||||
|
||||
SimpleTable table = new(saveDocument.FileName, "Первое задание", totalList);
|
||||
|
||||
wordTable.CreateDoc(table);
|
||||
|
||||
MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//создание pdf таблицы
|
||||
public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
|
||||
{
|
||||
try
|
||||
{
|
||||
//сразу группируем списки по дисциплинам
|
||||
var list = _labWorkStorage.GetFullList().OrderBy(l => l.Discipline).ToList();
|
||||
|
||||
var disciplines = _discipline.GetFullList().OrderBy(d => d.Name).ToList();
|
||||
|
||||
List<string[,]> totalList = new();
|
||||
|
||||
List<LabWorkViewModel> supportList = new();
|
||||
|
||||
string[] headers = new[]
|
||||
{
|
||||
"Id", "Theme", "FCs",
|
||||
"Discipline", "Questions"
|
||||
};
|
||||
|
||||
Dictionary<int, (String, int)> merge = new() { [3] = ("Описание", 2) };
|
||||
|
||||
PdfTable pdfTable = new();
|
||||
|
||||
CreatePDF(new TableData<LabWorkViewModel>
|
||||
{
|
||||
FilePath = saveDocument.FileName,
|
||||
Title = "Второе задание",
|
||||
Merge = merge,
|
||||
Headers = headers,
|
||||
Data = list.ToArray(),
|
||||
RowHeight = new double[] { 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 }
|
||||
});
|
||||
|
||||
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)
|
||||
{
|
||||
try
|
||||
@ -124,160 +256,89 @@ namespace VisualComponentsForm
|
||||
}
|
||||
}
|
||||
|
||||
public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
|
||||
{
|
||||
try
|
||||
{
|
||||
var view = new OrderSearchModel
|
||||
{
|
||||
TotalPrice = null
|
||||
};
|
||||
|
||||
var list = _labWorkStorage.GetFilteredList(view);
|
||||
|
||||
string[] data = new string[list.Count];
|
||||
string curStr = "";
|
||||
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
curStr = "ФИО Заказчика: " + list[i].UserInfo + ". Информация о товарах: " + list[i].ProductsInfo;
|
||||
data[i] = curStr;
|
||||
}
|
||||
|
||||
WordData wd = new WordData
|
||||
{
|
||||
filePath = saveDocument.FileName,
|
||||
title = System.IO.Path.GetFileName(saveDocument.FileName),
|
||||
data = data
|
||||
};
|
||||
|
||||
wordTable.CreateFileWithBigText(wd);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
|
||||
{
|
||||
try
|
||||
{
|
||||
var list = _labWorkStorage.GetFullList();
|
||||
|
||||
var ColumnHeaders = new List<string>() {
|
||||
"Идентификатор",
|
||||
"ФИО заказчика",
|
||||
"Статус заказа",
|
||||
"Сумма"
|
||||
};
|
||||
|
||||
var listData = new List<OrderTableViewModel>();
|
||||
|
||||
int id = 0;
|
||||
string UserInfo = "";
|
||||
string TotalPrice = "";
|
||||
string Status = "";
|
||||
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
id = list[i].Id;
|
||||
UserInfo = list[i].UserInfo;
|
||||
|
||||
if (list[i].TotalPrice == null)
|
||||
{
|
||||
TotalPrice = "Оплачено скидками";
|
||||
}
|
||||
else
|
||||
{
|
||||
TotalPrice = list[i].TotalPrice.ToString()!;
|
||||
}
|
||||
|
||||
Status = list[i].Status;
|
||||
|
||||
var data = new OrderTableViewModel()
|
||||
{
|
||||
Id = id,
|
||||
UserInfo = UserInfo,
|
||||
TotalPrice = TotalPrice,
|
||||
Status = Status
|
||||
};
|
||||
|
||||
listData.Add(data);
|
||||
}
|
||||
|
||||
var props = new List<string>() { "Id", "UserInfo", "Status", "TotalPrice" };
|
||||
|
||||
int[] rowHeight = new int[listData.Count + 1];
|
||||
|
||||
for (int i = 0; i < rowHeight.Length; i++)
|
||||
{
|
||||
rowHeight[i] = 20;
|
||||
}
|
||||
|
||||
pdfTable.SaveToPdfFile(new PdfTableInfo<OrderTableViewModel>
|
||||
{
|
||||
FilePath = saveDocument.FileName,
|
||||
DocumentTitle = "Заголовок",
|
||||
TableData = listData,
|
||||
ColumnWidths = new int[] { 10, 10, 10, 30 },
|
||||
RowHeight = rowHeight,
|
||||
ColumnHeaders = ColumnHeaders,
|
||||
Properties = props
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool DeleteElement(PluginsConventionElement element)
|
||||
{
|
||||
_labWorkStorage.Delete(new(element.Id.GetHashCode()));
|
||||
_labWorkStorage.Delete(new LabWorkBindingModel
|
||||
{
|
||||
Id = element.Id.GetHashCode()
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Form GetForm(PluginsConventionElement element)
|
||||
{
|
||||
if (element == null)
|
||||
{
|
||||
return new FormMain(_labWorkStorage, _discipline);
|
||||
}
|
||||
else
|
||||
{
|
||||
FormMain form = new FormMain(_labWorkStorage, _discipline);
|
||||
|
||||
return form;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public Form GetThesaurus()
|
||||
{
|
||||
return new FormStatusDirectory(_discipline);
|
||||
}
|
||||
|
||||
public void ReloadData()
|
||||
{
|
||||
var labWorks = _labWorkStorage.GetFullList();
|
||||
|
||||
myListBox.ClearAll();
|
||||
listBox.ClearAll();
|
||||
|
||||
foreach (var labWork in labWorks)
|
||||
{
|
||||
myListBox.AddItem(labWork.Discipline + " | " + labWork.Id.ToString() + " | "
|
||||
listBox.AddItem(labWork.Discipline + " | " + labWork.Id.ToString() + " | "
|
||||
+ labWork.Theme + " | " + labWork.Questions);
|
||||
}
|
||||
}
|
||||
|
||||
//иначе для pdf-ки никак :(((
|
||||
public void CreatePDF<T>(TableData<T> data)
|
||||
{
|
||||
|
||||
ChromePdfRenderer renderer = new ChromePdfRenderer();
|
||||
StringBuilder htmlContainer = new StringBuilder();
|
||||
|
||||
htmlContainer.AppendLine("<link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">");
|
||||
|
||||
htmlContainer.AppendLine($"<h1>{data.Title}</h1>");
|
||||
|
||||
htmlContainer.AppendLine("<table class=\"table\">");
|
||||
|
||||
int counter = 0;
|
||||
for (int i = 0; i < data.Headers.Length; i++)
|
||||
{
|
||||
htmlContainer.Append($"<tr style=\"height: {data.RowHeight[i]}px\">\r\n");
|
||||
if (data.Merge.Keys.Contains(i))
|
||||
{
|
||||
htmlContainer.Append($"<th rowspan=\"{data.Merge[i].Item2}\">{data.Merge[i].Item1}</th>\r\n");
|
||||
htmlContainer.Append($"<th>{data.Headers[i]}</th>\r\n");
|
||||
counter = data.Merge[i].Item2 - 1;
|
||||
}
|
||||
else if (counter != 0)
|
||||
{
|
||||
htmlContainer.Append($"<th>{data.Headers[i]}</th>\r\n");
|
||||
counter--;
|
||||
}
|
||||
else
|
||||
{
|
||||
htmlContainer.Append($"<th colspan=\"2\">{data.Headers[i]}</th>\r\n");
|
||||
}
|
||||
foreach (var elem in data.Data)
|
||||
{
|
||||
Type type = typeof(T);
|
||||
string value = type
|
||||
.GetProperty(data.Headers[i])!
|
||||
.GetValue(elem, null)!.ToString()!;
|
||||
|
||||
htmlContainer.Append($"<td>{value}</th>\r\n");
|
||||
}
|
||||
htmlContainer.Append("</tr>\r\n");
|
||||
|
||||
}
|
||||
|
||||
htmlContainer.AppendLine("</table>");
|
||||
|
||||
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContainer.ToString());
|
||||
Console.WriteLine(htmlContainer.ToString());
|
||||
pdf.SaveAs(data.FilePath);
|
||||
}
|
||||
|
||||
//получение Id объекта в выделенной строке
|
||||
public int GetSelectedId()
|
||||
{
|
||||
char dilimiterSimbol = '|';
|
||||
|
||||
var _id = listBox.SelectedString.SkipWhile(z => z != dilimiterSimbol).Skip(1).ToList()[1];
|
||||
|
||||
return int.Parse(_id.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user