225 lines
7.6 KiB
C#
225 lines
7.6 KiB
C#
using Components;
|
||
using Components.NonVisual;
|
||
using Components.SaveToPdfHelpers;
|
||
using NPOI.HPSF;
|
||
using PluginsConventionLibrary;
|
||
using PortalAccountsBusinessLogic.BusinessLogics;
|
||
using PortalAccountsContracts.BindingModels;
|
||
using PortalAccountsContracts.BusinessLogicsContracts;
|
||
using PortalAccountsContracts.ViewModels;
|
||
using PortalAccountsDatabaseImplement.Implements;
|
||
using PutincevLibrary;
|
||
using RodionovLibrary.NonVisualComponents;
|
||
using RodionovLibrary.NonVisualComponents.HelperModels;
|
||
using System.Text;
|
||
|
||
namespace PortalAccountsView
|
||
{
|
||
public class PluginsConvention : IPluginsConvention
|
||
{
|
||
private readonly IAccountLogic _accountLogic;
|
||
|
||
private readonly IInterestLogic _interestLogic;
|
||
|
||
private readonly CustomDataGridView _customDataGridViewTable = new();
|
||
|
||
private readonly ComponentExcelWithImage _componentExcelWithImage = new();
|
||
|
||
private readonly WordTableComponent _wordTableComponent = new();
|
||
|
||
private readonly HistogramPDF _histogrampdf = new();
|
||
|
||
public PluginsConvention()
|
||
{
|
||
_accountLogic = new AccountLogic(new AccountStorage());
|
||
_interestLogic = new InterestLogic(new InterestStorage());
|
||
ReloadData();
|
||
}
|
||
|
||
public string PluginName => "LabWork3 Plugin";
|
||
|
||
public UserControl GetControl => _customDataGridViewTable;
|
||
|
||
public PluginsConventionElement GetElement
|
||
{
|
||
get
|
||
{
|
||
var selected = _customDataGridViewTable.GetSelectedObject<AccountViewModel>()
|
||
?? throw new Exception("Не удалось получить выбранный элемент");
|
||
return new PluginsConventionAccount()
|
||
{
|
||
Id = IntToGuid(selected.Id),
|
||
Login = selected.Login,
|
||
AvatarPath = selected.AvatarPath,
|
||
InterestName = selected.InterestName,
|
||
Email = selected.Email
|
||
};
|
||
}
|
||
}
|
||
|
||
public Form GetForm(PluginsConventionElement element)
|
||
{
|
||
var formAccount = new FormAccount(_accountLogic, _interestLogic);
|
||
if (element != null)
|
||
{
|
||
formAccount.Id = element.Id.GetHashCode();
|
||
}
|
||
return formAccount;
|
||
}
|
||
|
||
public Form GetThesaurus()
|
||
{
|
||
return new FormInterests(_interestLogic);
|
||
}
|
||
|
||
public bool DeleteElement(PluginsConventionElement element)
|
||
{
|
||
return _accountLogic.Delete(
|
||
new AccountBindingModel { Id = element.Id.GetHashCode() }
|
||
);
|
||
}
|
||
|
||
public void ReloadData()
|
||
{
|
||
try
|
||
{
|
||
var accounts = _accountLogic.ReadList(null) ?? throw new Exception("Не удалось получить список аккаунтов");
|
||
|
||
_customDataGridViewTable.ClearRows();
|
||
|
||
var tables = new List<(string, string, float)> {
|
||
("Идентификатор", "Id", 1),
|
||
("Логин", "Login", 1),
|
||
("Интерес", "InterestName", 2),
|
||
("Почта", "Email", 2)
|
||
};
|
||
|
||
_customDataGridViewTable.ConfigureColumns(tables);
|
||
|
||
_customDataGridViewTable.FillData(accounts);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
|
||
public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
|
||
{
|
||
try
|
||
{
|
||
List<string> images = new List<string>();
|
||
var list = _accountLogic.ReadList(null);
|
||
if (list != null)
|
||
{
|
||
foreach (var item in list)
|
||
{
|
||
images.Add(item.AvatarPath);
|
||
}
|
||
string[] imagesArray = images.ToArray();
|
||
|
||
_componentExcelWithImage.CreateExcelWithImages(saveDocument.FileName, "Сканы чеков", imagesArray);
|
||
}
|
||
return true;
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
|
||
{
|
||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||
try
|
||
{
|
||
string title = "Документ с таблицей";
|
||
|
||
var mergedColumns = new List<(int, int)>
|
||
{
|
||
(1, 2),
|
||
};
|
||
var columns = new List<ColumnParameters>
|
||
{
|
||
new() { FirstRowHeader = "Идент", PropertyName = "Id", Width = 1.3 },
|
||
new() { FirstRowHeader = "Личные данные", SecondRowHeader = "Логин", PropertyName = "Login", Width = 1.7 },
|
||
new() { FirstRowHeader = "Личные данные", SecondRowHeader = "Почта", PropertyName = "Email", Width = 1.7 },
|
||
new() { FirstRowHeader = "Интерес", PropertyName = "InterestName", Width = 1.7 },
|
||
};
|
||
|
||
var list = _accountLogic.ReadList(null);
|
||
|
||
var tableInfo = new WordTableInfo<AccountViewModel>
|
||
{
|
||
FileName = saveDocument.FileName,
|
||
Title = title,
|
||
ColumnParameters = columns,
|
||
Items = list,
|
||
MergedColumns = mergedColumns
|
||
};
|
||
_wordTableComponent.CreateTable(tableInfo);
|
||
return true;
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public bool CreateChartDocument(PluginsConventionSaveDocument saveDocument)
|
||
{
|
||
try
|
||
{
|
||
var accounts = _accountLogic.ReadList(null);
|
||
|
||
|
||
|
||
var list = new ChartData();
|
||
|
||
var groupedAccounts = accounts.GroupBy(account => account.InterestName)
|
||
.Select(group => new
|
||
{
|
||
InterestName = group.Key,
|
||
AccountCount = group.Count()
|
||
})
|
||
.ToList();
|
||
|
||
var data = new Dictionary<string, double>();
|
||
|
||
foreach (var group in groupedAccounts)
|
||
{
|
||
data.Add(group.InterestName, (double)group.AccountCount);
|
||
}
|
||
|
||
list.Data = data;
|
||
list.SeriesName = "Пользователи";
|
||
var acc = new List<ChartData>();
|
||
|
||
acc.Add(list);
|
||
|
||
var histogrammInfo = new HistogramData
|
||
{
|
||
FilePath = saveDocument.FileName,
|
||
DocumentTitle = "Гистограмма PDF",
|
||
ChartTitle = "Количетсво интересов у пользователей",
|
||
LegendPosition = LegendPositions.Bottom,
|
||
ChartData = acc,
|
||
};
|
||
_histogrampdf.CreateHistogramPdf(histogrammInfo);
|
||
return true;
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private Guid IntToGuid(int value)
|
||
{
|
||
byte[] bytes = new byte[16];
|
||
BitConverter.GetBytes(value).CopyTo(bytes, 0);
|
||
return new Guid(bytes);
|
||
}
|
||
}
|
||
}
|