PIbd-31_Belianin.N.N_COP_8/Lab 4/Belianin_4/DesktopWithMyVisualComponents/FormMain.cs
2024-10-23 17:38:42 +04:00

247 lines
6.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using BelianinComponents;
using BelianinComponents.Models;
using EnterpriseContracts.BindingModels;
using EnterpriseContracts.BusinessLogicContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using EnterpriseContracts.ViewModels;
using EnterpriseDataBaseImplement.Models;
using Unity;
using BarsukovComponents.NotVisualComponents.Configs;
namespace DesktopWithMyVisualComponents
{
public partial class FormMain : Form
{
private readonly IEmployeeLogic _employeeLogic;
private readonly ISkillLogic _skillLogic;
// Конструктор
public FormMain(IEmployeeLogic employeeLogic, ISkillLogic skillLogic)
{
InitializeComponent();
_employeeLogic = employeeLogic;
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" }
});
_skillLogic = skillLogic;
}
private void FormMain_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
krykovItemTable.ClearDataGrid();
// Поиск записей в бд
var list = _employeeLogic.Read(null);
if (list != null)
{
for (int j = 0; j < list.Count; j++)
{
krykovItemTable.AddItem(list[j], j);
krykovItemTable.Update();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)
{
var form = Program.Container.Resolve<FormEmployee>();
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
private void изменитьToolStripMenuItem_Click(object sender, EventArgs e)
{
var form = Program.Container.Resolve<FormEmployee>();
form.Id = Convert.ToInt32(krykovItemTable.GetSelectedObjectInRow<Employee>().Id);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Удалить запись", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(krykovItemTable.GetSelectedObjectInRow<Employee>().Id);
try
{
_employeeLogic.Delete(new EmployeeBindingModel { Id = id });
krykovItemTable.ClearDataGrid();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
LoadData();
}
}
private void навыкиToolStripMenuItem_Click(object sender, EventArgs e)
{
var form = Program.Container.Resolve<FormSkill>();
form.ShowDialog();
}
private byte[] StringToImage(string bytes)
{
byte[] arrayimg = Convert.FromBase64String(bytes);
return arrayimg;
}
private void wordСФотоToolStripMenuItem_Click(object sender, EventArgs e)
{
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.CreateDoc(new WordWithImageConfig
{
FilePath = fileName,
Header = "Фотографии:",
Images = list_images
});
}
private void pdfТаблицаToolStripMenuItem_Click(object sender, EventArgs e)
{
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);
}
}
// Вызов метода CreateTable
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)
});
}
private void excelГистограммаToolStripMenuItem_Click(object sender, EventArgs e)
{
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.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 }
}
});
}
}
}