PIbd-31_Belianin.N.N_COP_8/Lab 4/Belianin_4/DesktopWithMyVisualComponents/PluginsConvention.cs

287 lines
6.7 KiB
C#
Raw Normal View History

using BarsukovComponents.NotVisualComponents.Configs;
using BelianinComponents.Models;
using BelianinComponents;
using EnterpriseBusinessLogic.BusinessLogics;
using EnterpriseContracts.BindingModels;
using EnterpriseContracts.BusinessLogicContracts;
using EnterpriseContracts.ViewModels;
using KryukovLib;
using PluginsConventionLibrary.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PluginsConventionLibrary;
using BarsukovComponents.NotVisualComponents;
namespace DesktopWithMyVisualComponents
{
public class PluginsConvention : IPluginsConvention
{
private CustomDataGridView krykovItemTable;
private readonly IEmployeeLogic _employeeLogic;
private readonly ISkillLogic _skillLogic;
public PluginsConvention()
{
_employeeLogic = new EmployeeLogic();
_skillLogic = new SkillLogic();
krykovItemTable = new CustomDataGridView();
var menu = new ContextMenuStrip();
var skillMenuItem = new ToolStripMenuItem("Формы");
menu.Items.Add(skillMenuItem);
skillMenuItem.Click += (sender, e) =>
{
var formSkill = new FormSkill(_skillLogic);
formSkill.ShowDialog();
};
krykovItemTable.ContextMenuStrip = menu;
ReloadData();
}
/// Название плагина
string IPluginsConvention.PluginName => PluginName();
public string PluginName()
{
return "Сотрудники";
}
public UserControl GetControl => krykovItemTable;
PluginsConventionElement IPluginsConvention.GetElement => GetElement();
public PluginsConventionElement GetElement()
{
var employee = krykovItemTable.GetSelectedObjectInRow<MainPluginConventionElement>(); ;
MainPluginConventionElement element = null;
if (krykovItemTable != null)
{
element = new MainPluginConventionElement
{
Id = employee.Id,
FIO = employee.FIO,
PhoneNumber = employee.PhoneNumber,
Photo = employee.Photo,
Skill = employee.Skill,
};
}
return (new PluginsConventionElement { Id = element.Id });
}
public Form GetForm(PluginsConventionElement element)
{
var formEmployee = new FormEmployee(_employeeLogic, _skillLogic);
if (element != null)
{
formEmployee.Id = element.Id;
}
return formEmployee;
}
public bool DeleteElement(PluginsConventionElement element)
{
try
{
_employeeLogic.Delete(new EmployeeBindingModel { Id = element.Id });
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return true;
}
public void ReloadData()
{
krykovItemTable.ClearDataGrid();
krykovItemTable.ClearDataGrid();
krykovItemTable.ConfigColumn(new()
{
ColumnsCount = 4,
NameColumn = new string[] { "Id", "ФИО", "Навык", "Номер телефона" },
Width = new int[] { 10, 150, 250, 200 },
Visible = new bool[] { false, true, true, true },
PropertiesObject = new string[] { "Id", "FIO", "Skill", "PhoneNumber" }
});
var list = _employeeLogic.Read(null);
if (list != null)
{
for (int j = 0; j < list.Count; j++)
{
krykovItemTable.AddItem(list[j], j);
krykovItemTable.Update();
}
}
}
private byte[] StringToImage(string bytes)
{
byte[] arrayimg = Convert.FromBase64String(bytes);
return arrayimg;
}
public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
{
try
{
string fileName = "";
using (var dialog = new SaveFileDialog { Filter = "docx|*.docx" })
{
if (dialog.ShowDialog() == DialogResult.OK)
{
fileName = dialog.FileName.ToString();
MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
var list = _employeeLogic.Read(null);
var list_images = new List<byte[]>();
foreach (var item in list)
{
var img = StringToImage(item.Photo);
list_images.Add(img);
}
WordWithImages wordWithImages = new WordWithImages();
wordWithImages.CreateDoc(new WordWithImageConfig
{
FilePath = fileName,
Header = "Фотографии:",
Images = list_images
});
}
catch (Exception)
{
return false;
}
return true;
}
public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
{
try
{
string fileName = "";
using (var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" })
{
if (dialog.ShowDialog() == DialogResult.OK)
{
fileName = dialog.FileName.ToString();
MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
PdfTable componentTableToPdf = new PdfTable();
componentTableToPdf.CreateDoc(new ComponentTableToPdfConfig<EmployeeViewModel>
{
FilePath = fileName,
Header = "Таблица с сотрудниками",
UseUnion = true,
ColumnsRowsWidth = new List<(int, int)> { (20, 0), (20, 0), (20, 0), (20, 0) },
ColumnUnion = new List<(int StartIndex, int Count)> { (2, 2) },
Headers = new List<(int ColumnIndex, int RowIndex, string Header, string PropertyName)>
{
(0, 0, "Идент.", "Id"),
(1, 0, "ФИО", "FIO"),
(2, 0, "Работа", ""),
(2, 1, "Номер телефона", "PhoneNumber"),
(3, 1, "Навык", "Skill")
},
Data = _employeeLogic.Read(null)
});
}
catch (Exception)
{
return false;
}
return true;
}
public bool CreateChartDocument(PluginsConventionSaveDocument saveDocument)
{
try
{
string fileName = "";
using (var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" })
{
if (dialog.ShowDialog() == DialogResult.OK)
{
fileName = dialog.FileName.ToString();
MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
var list2D = new List<(string Date, double Value)>();
var emps = _employeeLogic.Read(null);
var skills = _skillLogic.Read(null);
foreach (var skill in skills)
{
double count = 0;
foreach (var emp in emps)
{
if (skill.Name.Equals(emp.Skill))
{
count++;
}
}
var elem = (skill.Name, count);
list2D.Add(elem);
}
ExcelGistogram excelGistogram = new ExcelGistogram();
excelGistogram.CreateDoc(new()
{
FilePath = fileName,
Header = "Chart",
ChartTitle = "BarChart",
LegendLocation = KryukovLib.Models.Location.Top,
Data = new Dictionary<string, List<(string Date, double Value)>> {
{ "Series 1", list2D }
}
});
}
catch (Exception)
{
return false;
}
return true;
}
public Form GetThesaurus()
{
return new FormSkill(_skillLogic);
}
}
}