diff --git a/LibraryPlugin/LibraryPlugin.csproj b/LibraryPlugin/LibraryPlugin.csproj
index 060aa1c..8483a7d 100644
--- a/LibraryPlugin/LibraryPlugin.csproj
+++ b/LibraryPlugin/LibraryPlugin.csproj
@@ -7,4 +7,15 @@
enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LibraryPlugin/PluginsConvention.cs b/LibraryPlugin/PluginsConvention.cs
new file mode 100644
index 0000000..c5a0100
--- /dev/null
+++ b/LibraryPlugin/PluginsConvention.cs
@@ -0,0 +1,262 @@
+using ComponentLibrary1.pdf_image;
+using DocumentFormat.OpenXml.Drawing.Charts;
+using Library_var_4_lab_1;
+using LibraryContracts.StorageContracts;
+using LibraryDatabase.Models;
+using LibraryDatabase.Storages;
+using LibraryDataModels.AbstractModels;
+using LibraryDataModels.Dtos;
+using LibraryDataModels.Views;
+using LibraryPlugin.Helpers;
+using LibraryWinFormsApp;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using YunusovComponentsLibrary;
+using YunusovComponentsLibrary.OfficePackage.HelperModels;
+using static LibraryUtils.ImageConverter.ImageConverter;
+
+namespace LibraryPlugin
+{
+ public class PluginsConvention : IPluginsConvention
+ {
+ private readonly IAuthorStorage _authorStorage = new AuthorStorage();
+ private readonly IBookStorage _bookStorage = new BookStorage();
+ private PdfImage pdfImage = new PdfImage();
+ private ConfigurableTable configurableTable = new ConfigurableTable();
+ private WordDiagram wordDiagram = new WordDiagram();
+ private ListOutputComponent bookTable = new ListOutputComponent();
+ #region interface getters
+ public string PluginName { get; } = "LibraryPlugin";
+ public UserControl GetControl
+ {
+ get
+ {
+ ReloadData();
+ return bookTable;
+ }
+ }
+ public PluginsConventionElement GetElement
+ {
+ get
+ {
+ var book = bookTable.GetSelectedObject();
+ int? id = null;
+ if (book != null)
+ {
+ id = Convert.ToInt32(book.Id);
+ }
+ byte[] bytes = new byte[16];
+ if (!id.HasValue)
+ {
+ id = -1;
+ }
+ BitConverter.GetBytes(id.Value).CopyTo(bytes, 0);
+ return new()
+ {
+ Id = new Guid(bytes)
+ };
+ }
+ }
+ public Form GetForm(PluginsConventionElement element)
+ {
+ FormBook form = new FormBook(_bookStorage, _authorStorage);
+ int id = element?.Id.GetHashCode() ?? -1;
+ if ( id > 0)
+ {
+ form._id = id;
+ }
+ return form;
+ }
+ public Form GetThesaurus()
+ {
+ return new FormAuthors(_authorStorage);
+ }
+ #endregion
+ #region interface methods
+
+ public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
+ {
+ try
+ {
+ string fileName = saveDocument.FileName;
+ if (string.IsNullOrWhiteSpace(fileName))
+ {
+ return false;
+ }
+ var _books = _bookStorage.GetFullList();
+ List selectedImages = new List();
+ foreach (var book in _books)
+ {
+ selectedImages.Add(StringToByteArray(book.BookCover));
+ }
+ var info = new PdfImageInfo
+ {
+ FileName = fileName,
+ Title = "Обложки",
+ Images = selectedImages,
+ };
+ pdfImage.CreatePdf(info);
+ MessageBox.Show("PDF успешно создан!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+ public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
+ {
+ try
+ {
+ string fileName = saveDocument.FileName;
+ if (string.IsNullOrWhiteSpace(fileName))
+ {
+ return false;
+ }
+ List headers = new List
+ {
+ new TreeNode
+ {
+ Text = "Идентификатор",
+ Tag = "Id",
+ Name = "40",
+ },
+ new TreeNode("Книга", new TreeNode[]
+ {
+ new TreeNode
+ {
+ Text = "Название",
+ Tag = "Name",
+ Name = "40",
+ },
+ new TreeNode
+ {
+ Text = "Автор",
+ Tag = "Author",
+ Name = "40",
+ },
+ }),
+ new TreeNode
+ {
+ Text = "Дата",
+ Tag = "ReleaseDate",
+ Name = "40",
+ },
+ };
+ var _books = _bookStorage.GetFullList();
+ configurableTable.CreateTable(
+ fileName,
+ "Книги",
+ headers,
+ _books);
+ MessageBox.Show("Excell успешно создан!", "Успех", 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
+ {
+ string fileName = saveDocument.FileName;
+ if (string.IsNullOrWhiteSpace(fileName))
+ {
+ return false;
+ }
+ var _books = _bookStorage.GetFullList();
+ var authors = _authorStorage.GetFullList();
+ WordDiagramSeries series = new WordDiagramSeries();
+ series.SeriesName = "Авторы";
+ foreach (var author in authors)
+ {
+ double sum = 0.0;
+ foreach (var book in _books)
+ {
+ if (string.Equals(book.Author, author.Name))
+ {
+ sum++;
+ }
+ }
+ series.Data.Add(author.Name, sum);
+ }
+ wordDiagram.CreateDiagram(new WordDiagramInfo()
+ {
+ FileName = fileName,
+ Title = "Авторы",
+ ChartTitle = "Авторы",
+ Series = series,
+ });
+ MessageBox.Show("Word успешно создан!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+ public bool DeleteElement(PluginsConventionElement element)
+ {
+ try
+ {
+ int selectedRow = bookTable.SelectedRow;
+ if (selectedRow == -1)
+ {
+ throw new Exception("Выберите книгу для удаления");
+ }
+ if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
+ {
+ int id = Convert.ToInt32(bookTable.Rows[selectedRow].Cells[0].Value);
+ _bookStorage.Delete(new BookDto()
+ {
+ Id = id
+ });
+ ReloadData();
+ }
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+ public void ReloadData()
+ {
+ try
+ {
+ List _books = _bookStorage.GetFullList();
+ List parameters = new List()
+ {
+ new ColumnInfo("", 0, false, "Id"),
+ new ColumnInfo("Название", 258, true, "Name"),
+ new ColumnInfo("", 0, false, "BookCover"),
+ new ColumnInfo("ФИО автора", 258, true, "Author"),
+ new ColumnInfo("Дата издания", 258, true, "ReleaseDate"),
+ };
+ bookTable.ConfigColumn(parameters);
+ if (_books == null)
+ {
+ return;
+ }
+ foreach (var book in _books)
+ {
+ bookTable.AddItem(book);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ #endregion
+ }
+}