249 lines
8.6 KiB
C#
249 lines
8.6 KiB
C#
|
using Components.SaveToPdfHelpers;
|
|||
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|||
|
using PdfSharp.Pdf.Advanced;
|
|||
|
using PortalAccountsContracts.BindingModels;
|
|||
|
using PortalAccountsContracts.BusinessLogicsContracts;
|
|||
|
using PortalAccountsContracts.ViewModels;
|
|||
|
using RodionovLibrary.NonVisualComponents;
|
|||
|
using RodionovLibrary.NonVisualComponents.HelperModels;
|
|||
|
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 static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
|
|||
|
|
|||
|
namespace PortalAccountsView
|
|||
|
{
|
|||
|
public partial class FormMain : Form
|
|||
|
{
|
|||
|
public readonly IAccountLogic _logic;
|
|||
|
|
|||
|
public readonly IInterestLogic _interestlogic;
|
|||
|
public FormMain(IAccountLogic logic, IInterestLogic interestlogic)
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
_logic = logic;
|
|||
|
|
|||
|
var accounts = new List<(string, string, float)> {
|
|||
|
("Идентификатор", "Id", 1),
|
|||
|
("Логин", "Login", 1),
|
|||
|
("Интерес", "InterestName", 2),
|
|||
|
("Почта", "Email", 2)
|
|||
|
};
|
|||
|
|
|||
|
customDataGridViewTable.ConfigureColumns(accounts);
|
|||
|
_interestlogic = interestlogic;
|
|||
|
}
|
|||
|
|
|||
|
private void LoadData()
|
|||
|
{
|
|||
|
var accounts = _logic.ReadList(null);
|
|||
|
|
|||
|
customDataGridViewTable.FillData(accounts);
|
|||
|
}
|
|||
|
private void создатьToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var service = Program.ServiceProvider?.GetService(typeof(FormAccount));
|
|||
|
if (service is FormAccount form)
|
|||
|
{
|
|||
|
if (form.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void FormMain_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
|
|||
|
private void интересыToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var service = Program.ServiceProvider?.GetService(typeof(FormInterests));
|
|||
|
if (service is FormInterests form)
|
|||
|
{
|
|||
|
form.ShowDialog();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void документСАватарамиToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
string fileName = "";
|
|||
|
using (var dialog = new SaveFileDialog { Filter = "Excel Files|*.xlsx" })
|
|||
|
{
|
|||
|
if (dialog.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
fileName = dialog.FileName.ToString();
|
|||
|
MessageBox.Show("Файл выбран", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
}
|
|||
|
else return;
|
|||
|
}
|
|||
|
|
|||
|
List<string> images = new List<string>();
|
|||
|
var list = _logic.ReadList(null);
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
if (list != null)
|
|||
|
{
|
|||
|
foreach (var item in list)
|
|||
|
{
|
|||
|
images.Add(item.AvatarPath);
|
|||
|
}
|
|||
|
string[] imagesArray = images.ToArray();
|
|||
|
|
|||
|
componentExcelWithImage.CreateExcelWithImages(fileName, "Сканы чеков", imagesArray);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void редактироватьToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var service = Program.ServiceProvider?.GetService(typeof(FormAccount));
|
|||
|
if (service is FormAccount form)
|
|||
|
{
|
|||
|
var selected = customDataGridViewTable.GetSelectedObject<AccountViewModel>();
|
|||
|
if (selected == null)
|
|||
|
return;
|
|||
|
form.Id = selected.Id;
|
|||
|
if (form.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var selected = customDataGridViewTable.GetSelectedObject<AccountViewModel>();
|
|||
|
if (selected == null)
|
|||
|
return;
|
|||
|
if (MessageBox.Show("Удалить запись?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
|||
|
{
|
|||
|
if (_logic.Delete(new AccountBindingModel { Id = selected.Id }))
|
|||
|
{
|
|||
|
LoadData();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void документСТаблицей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);
|
|||
|
}
|
|||
|
else return;
|
|||
|
}
|
|||
|
|
|||
|
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 = _logic.ReadList(null);
|
|||
|
|
|||
|
var tableInfo = new WordTableInfo<AccountViewModel>
|
|||
|
{
|
|||
|
FileName = fileName,
|
|||
|
Title = title,
|
|||
|
ColumnParameters = columns,
|
|||
|
Items = list,
|
|||
|
MergedColumns = mergedColumns
|
|||
|
};
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
wordTableComponent.CreateTable(tableInfo);
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void документСГистограммойToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
|
|||
|
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);
|
|||
|
}
|
|||
|
else return;
|
|||
|
}
|
|||
|
var accounts = _logic.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 = fileName,
|
|||
|
DocumentTitle = "Гистограмма PDF",
|
|||
|
ChartTitle = "Количетсво интересов у пользователей",
|
|||
|
LegendPosition = LegendPositions.Bottom,
|
|||
|
ChartData = acc,
|
|||
|
};
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
histogrampdf.CreateHistogramPdf(histogrammInfo);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "Ошибка");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|