using BusinessLogics.BusinessLogics; using Components.Components.NonVisualComponents.HelperModels; using Components.Components.VisualComponents; using Components.NonVisualComponents; using Components.NonVisualComponents.HelperModels; using ComponentsLibraryNet60.DocumentWithChart; using ComponentsLibraryNet60.Models; using Contracts.BindingModels; using Contracts.BusinessLogicsContracts; using Contracts.ViewModels; using ControlsLibraryNet60.Models; using DocumentFormat.OpenXml.Spreadsheet; 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 MergeCells = Components.NonVisualComponents.HelperModels.MergeCells; namespace WinForms { public partial class FormMain : Form { private readonly IOrderLogic _orderLogic; private readonly IDishLogic _dishLogic; public FormMain(IDishLogic dishLogic, IOrderLogic orderLogic) { _dishLogic = dishLogic; _orderLogic = orderLogic; InitializeComponent(); List columnConfigs = new List { new DataTableColumnConfig { ColumnHeader = "Идентификатор", PropertyName = "Id", Width = 150, Visible = true }, new DataTableColumnConfig { ColumnHeader = "ФИО официанта", PropertyName = "WaiterFullName", Width = 250, Visible = true }, new DataTableColumnConfig { ColumnHeader = "Заказанное блюдо", PropertyName = "Dish", Width = 200, Visible = true }, new DataTableColumnConfig { ColumnHeader = "Дата оплаты счета", PropertyName = "OrderDate", Width = 200, Visible = true } }; controlDataTableRow1.LoadColumns(columnConfigs); controlDataTableRow1.ContextMenuStrip = contextMenuStrip; } private void FormMain_Load(object sender, EventArgs e) { LoadData(); } private void LoadData() { controlDataTableRow1.Clear(); try { var orders = _orderLogic.ReadList(null); if (orders == null) { return; } foreach (var order in orders) { controlDataTableRow1.AddRow(order); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void AddElement() { var service = Program.ServiceProvider?.GetService(typeof(FormOrder)); if (!(service is FormOrder form)) { return; } if (form.ShowDialog() == DialogResult.OK) { LoadData(); } } private void UpdateElement() { var service = Program.ServiceProvider?.GetService(typeof(FormOrder)); if (!(service is FormOrder form)) { return; } var selectedOrder = controlDataTableRow1.GetSelectedObject(); if (selectedOrder == null) { MessageBox.Show("Выберите счет для редактирования!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } form.Id = Convert.ToInt32(selectedOrder.Id); if (form.ShowDialog() == DialogResult.OK) { LoadData(); } } private void DeleteElement() { if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } var selectedOrder = controlDataTableRow1.GetSelectedObject(); int id = Convert.ToInt32(selectedOrder.Id); try { _orderLogic.Delete(new OrderBindingModel { Id = id }); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } LoadData(); } private void CreatePdf() { 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; } List images = new List(); var list = _orderLogic.ReadList(null); try { if (list != null) { foreach (var item in list) { images.Add(item.PicturePath); } string[] imagesArray = images.ToArray(); pdfImage.CreatePdfDoc(new DataForImage(fileName, "Сканы чеков", imagesArray)); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка"); } } private void CreateExcel() { 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); } else return; } string title = "Документ с таблицей"; List mergeCells = new List() { new MergeCells("Счет", new int[] { 1, 2}) }; List columns = new List() { new ColumnInfo("Id", "Идент.", 10), new ColumnInfo("WaiterFullName", "ФИО официанта", 20), new ColumnInfo("Dish", "Блюдо", 20), new ColumnInfo("OrderDate", "Дата оплаты чека", 30), new ColumnInfo("", "заглушка", 0), }; var list = _orderLogic.ReadList(null); try { tableComponent.CreateDocument(fileName, title, mergeCells, columns, list); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка"); } } private void CreateWord() { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); 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; } var data = new Dictionary>(); var orders = _orderLogic.ReadList(null); var groupedOrders = orders.GroupBy(order => order.Dish) .Select(group => new { DishName = group.Key, OrderCount = group.Count() }) .ToList(); data["Блюда"] = new List<(int Date, double Value)>(); int counter = 1; foreach (var group in groupedOrders) { data["Блюда"].Add((counter, group.OrderCount)); counter++; } try { componentDocumentWithChartBarWord.CreateDoc(new ComponentDocumentWithChartConfig { Header = "test", FilePath = fileName, ChartTitle = "Количество заказов определенных блюд", LegendLocation = ComponentsLibraryNet60.Models.Location.Bottom, Data = data }); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка"); } } private void созToolStripMenuItem_Click(object sender, EventArgs e) { AddElement(); } private void редактироватьToolStripMenuItem_Click(object sender, EventArgs e) { UpdateElement(); } private void удалитьToolStripMenuItem_Click(object sender, EventArgs e) { DeleteElement(); } private void wordToolStripMenuItem_Click(object sender, EventArgs e) { CreateWord(); } private void excelToolStripMenuItem_Click(object sender, EventArgs e) { CreateExcel(); } private void pdfToolStripMenuItem_Click(object sender, EventArgs e) { CreatePdf(); } private void ShowFormDish() { var service = Program.ServiceProvider?.GetService(typeof(FormDish)); if (!(service is FormDish form)) { return; } form.ShowDialog(); } private void блюдоToolStripMenuItem_Click(object sender, EventArgs e) { ShowFormDish(); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { // Ctrl+A - добавить запись if (keyData == (Keys.Control | Keys.A)) { AddElement(); return true; } // Ctrl+U - редактировать запись if (keyData == (Keys.Control | Keys.U)) { UpdateElement(); return true; } // Ctrl+D - удалить запись if (keyData == (Keys.Control | Keys.D)) { DeleteElement(); return true; } // Ctrl+S - создать документ Word if (keyData == (Keys.Control | Keys.S)) { CreateWord(); return true; } // Ctrl+T - создать документ Excel if (keyData == (Keys.Control | Keys.T)) { CreateExcel(); return true; } // Ctrl+C - создать документ Pdf if (keyData == (Keys.Control | Keys.C)) { CreatePdf(); return true; } // Ctrl+M - вывести форму списка блюд if (keyData == (Keys.Control | Keys.M)) { ShowFormDish(); return true; } return base.ProcessCmdKey(ref msg, keyData); } } }