diff --git a/Confectionery/Confectionery.sln b/Confectionery/Confectionery.sln
index fb79f85..4d62b6f 100644
--- a/Confectionery/Confectionery.sln
+++ b/Confectionery/Confectionery.sln
@@ -19,7 +19,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfectioneryListImplement"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfectioneryFileImplement", "ConfectioneryFileImplement\ConfectioneryFileImplement.csproj", "{511A9EBD-14A4-48E9-9101-41A5FB8D3C17}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConfectioneryDatabaseImplement", "ConfectioneryDatabaseImplement\ConfectioneryDatabaseImplement.csproj", "{E8F1F27D-0DD1-47DA-9BDF-8419D0B3EF58}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfectioneryDatabaseImplement", "ConfectioneryDatabaseImplement\ConfectioneryDatabaseImplement.csproj", "{E8F1F27D-0DD1-47DA-9BDF-8419D0B3EF58}"
ProjectSection(ProjectDependencies) = postProject
{181AF2FE-AE82-4767-B58B-36C0F22B56CD} = {181AF2FE-AE82-4767-B58B-36C0F22B56CD}
{92EBD50D-79CE-46FC-B261-43098E98B78F} = {92EBD50D-79CE-46FC-B261-43098E98B78F}
diff --git a/Confectionery/Confectionery/ConfectioneryView.csproj b/Confectionery/Confectionery/ConfectioneryView.csproj
index 8d8e5d9..460d0ef 100644
--- a/Confectionery/Confectionery/ConfectioneryView.csproj
+++ b/Confectionery/Confectionery/ConfectioneryView.csproj
@@ -9,12 +9,17 @@
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/Confectionery/Confectionery/DataSources/ConfectioneryContracts.BusinessLogicsContracts.IComponentLogic.datasource b/Confectionery/Confectionery/DataSources/ConfectioneryContracts.BusinessLogicsContracts.IComponentLogic.datasource
new file mode 100644
index 0000000..40f5428
--- /dev/null
+++ b/Confectionery/Confectionery/DataSources/ConfectioneryContracts.BusinessLogicsContracts.IComponentLogic.datasource
@@ -0,0 +1,10 @@
+
+
+
+ ConfectioneryContracts.BusinessLogicsContracts.IComponentLogic, ConfectioneryContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Confectionery/Confectionery/FormMain.Designer.cs b/Confectionery/Confectionery/FormMain.Designer.cs
index f9b4147..02bbddf 100644
--- a/Confectionery/Confectionery/FormMain.Designer.cs
+++ b/Confectionery/Confectionery/FormMain.Designer.cs
@@ -38,6 +38,10 @@
referencesToolStripMenuItem = new ToolStripMenuItem();
componentsToolStripMenuItem = new ToolStripMenuItem();
pastriesToolStripMenuItem = new ToolStripMenuItem();
+ отчётыToolStripMenuItem = new ToolStripMenuItem();
+ listOfComponentsToolStripMenuItem = new ToolStripMenuItem();
+ ComponentsByPastryToolStripMenuItem = new ToolStripMenuItem();
+ listOfOrdersToolStripMenuItem = new ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
menuStrip.SuspendLayout();
SuspendLayout();
@@ -50,7 +54,7 @@
dataGridView.Location = new Point(0, 36);
dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 62;
- dataGridView.Size = new Size(1001, 406);
+ dataGridView.Size = new Size(1001, 408);
dataGridView.TabIndex = 1;
//
// buttonCreateOrder
@@ -112,10 +116,10 @@
//
menuStrip.Dock = DockStyle.None;
menuStrip.ImageScalingSize = new Size(24, 24);
- menuStrip.Items.AddRange(new ToolStripItem[] { referencesToolStripMenuItem });
+ menuStrip.Items.AddRange(new ToolStripItem[] { referencesToolStripMenuItem, отчётыToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
- menuStrip.Size = new Size(147, 33);
+ menuStrip.Size = new Size(235, 33);
menuStrip.TabIndex = 8;
menuStrip.Text = "menuStrip1";
//
@@ -140,11 +144,39 @@
pastriesToolStripMenuItem.Text = "Кондитерские изделия";
pastriesToolStripMenuItem.Click += PastriesToolStripMenuItem_Click;
//
+ // отчётыToolStripMenuItem
+ //
+ отчётыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { listOfComponentsToolStripMenuItem, ComponentsByPastryToolStripMenuItem, listOfOrdersToolStripMenuItem });
+ отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem";
+ отчётыToolStripMenuItem.Size = new Size(88, 29);
+ отчётыToolStripMenuItem.Text = "Отчёты";
+ //
+ // listOfComponentsToolStripMenuItem
+ //
+ listOfComponentsToolStripMenuItem.Name = "listOfComponentsToolStripMenuItem";
+ listOfComponentsToolStripMenuItem.Size = new Size(449, 34);
+ listOfComponentsToolStripMenuItem.Text = "Список компонентов";
+ listOfComponentsToolStripMenuItem.Click += ListOfComponentsToolStripMenuItem_Click;
+ //
+ // ComponentsByPastryToolStripMenuItem
+ //
+ ComponentsByPastryToolStripMenuItem.Name = "ComponentsByPastryToolStripMenuItem";
+ ComponentsByPastryToolStripMenuItem.Size = new Size(449, 34);
+ ComponentsByPastryToolStripMenuItem.Text = "Компоненты по кондитерским изделиям";
+ ComponentsByPastryToolStripMenuItem.Click += ComponentsByPastryToolStripMenuItem_Click;
+ //
+ // listOfOrdersToolStripMenuItem
+ //
+ listOfOrdersToolStripMenuItem.Name = "listOfOrdersToolStripMenuItem";
+ listOfOrdersToolStripMenuItem.Size = new Size(449, 34);
+ listOfOrdersToolStripMenuItem.Text = "Список заказов";
+ listOfOrdersToolStripMenuItem.Click += ListOfOrdersToolStripMenuItem_Click;
+ //
// FormMain
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(1154, 442);
+ ClientSize = new Size(1154, 444);
Controls.Add(menuStrip);
Controls.Add(buttonRef);
Controls.Add(buttonIssuedOrder);
@@ -175,5 +207,9 @@
private ToolStripMenuItem referencesToolStripMenuItem;
private ToolStripMenuItem pastriesToolStripMenuItem;
private ToolStripMenuItem componentsToolStripMenuItem;
+ private ToolStripMenuItem отчётыToolStripMenuItem;
+ private ToolStripMenuItem listOfComponentsToolStripMenuItem;
+ private ToolStripMenuItem ComponentsByPastryToolStripMenuItem;
+ private ToolStripMenuItem listOfOrdersToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/Confectionery/Confectionery/FormMain.cs b/Confectionery/Confectionery/FormMain.cs
index 31ae8de..f212a04 100644
--- a/Confectionery/Confectionery/FormMain.cs
+++ b/Confectionery/Confectionery/FormMain.cs
@@ -1,4 +1,5 @@
-using ConfectioneryContracts.BindingModels;
+using ConfectioneryBusinessLogic.BusinessLogics;
+using ConfectioneryContracts.BindingModels;
using ConfectioneryContracts.BusinessLogicsContracts;
using ConfectioneryDataModels.Enums;
using Microsoft.Extensions.Logging;
@@ -8,11 +9,14 @@ namespace ConfectioneryView
{
private readonly ILogger _logger;
private readonly IOrderLogic _orderLogic;
- public FormMain(ILogger logger, IOrderLogic orderLogic)
+ private readonly IReportLogic _reportLogic;
+ public FormMain(ILogger logger, IOrderLogic orderLogic,
+ IReportLogic reportLogic)
{
InitializeComponent();
_logger = logger;
_orderLogic = orderLogic;
+ _reportLogic = reportLogic;
}
private void FormMain_Load(object sender, EventArgs e)
{
@@ -60,6 +64,40 @@ namespace ConfectioneryView
form.ShowDialog();
}
}
+ private void ListOfComponentsToolStripMenuItem_Click(object sender,
+ EventArgs e)
+ {
+ using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ _reportLogic.SaveComponentsToWordFile(new ReportBindingModel
+ {
+ FileName = dialog.FileName
+ });
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+ }
+ }
+ private void ComponentsByPastryToolStripMenuItem_Click(object sender,
+ EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(
+ typeof(FormReportPastryComponents));
+ if (service is FormReportPastryComponents form)
+ {
+ form.ShowDialog();
+ }
+ }
+ private void ListOfOrdersToolStripMenuItem_Click(object sender,
+ EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(
+ typeof(FormReportOrders));
+ if (service is FormReportOrders form)
+ {
+ form.ShowDialog();
+ }
+ }
private void ButtonCreateOrder_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(
diff --git a/Confectionery/Confectionery/FormReportOrders.Designer.cs b/Confectionery/Confectionery/FormReportOrders.Designer.cs
new file mode 100644
index 0000000..738da50
--- /dev/null
+++ b/Confectionery/Confectionery/FormReportOrders.Designer.cs
@@ -0,0 +1,143 @@
+namespace ConfectioneryView
+{
+ partial class FormReportOrders
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ panelControl = new Panel();
+ buttonToPdf = new Button();
+ buttonMake = new Button();
+ labelFrom = new Label();
+ dateTimePickerFrom = new DateTimePicker();
+ labelTo = new Label();
+ dateTimePickerTo = new DateTimePicker();
+ panelReport = new Panel();
+ panelControl.SuspendLayout();
+ SuspendLayout();
+ //
+ // panelControl
+ //
+ panelControl.Anchor = AnchorStyles.Left | AnchorStyles.Right;
+ panelControl.Controls.Add(buttonToPdf);
+ panelControl.Controls.Add(buttonMake);
+ panelControl.Controls.Add(labelFrom);
+ panelControl.Controls.Add(dateTimePickerFrom);
+ panelControl.Controls.Add(labelTo);
+ panelControl.Controls.Add(dateTimePickerTo);
+ panelControl.Location = new Point(0, 0);
+ panelControl.Name = "panelControl";
+ panelControl.Size = new Size(1154, 57);
+ panelControl.TabIndex = 0;
+ //
+ // buttonToPdf
+ //
+ buttonToPdf.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+ buttonToPdf.Location = new Point(995, 12);
+ buttonToPdf.Name = "buttonToPdf";
+ buttonToPdf.Size = new Size(147, 34);
+ buttonToPdf.TabIndex = 5;
+ buttonToPdf.Text = "В Pdf";
+ buttonToPdf.UseVisualStyleBackColor = true;
+ buttonToPdf.Click += ButtonToPdf_Click;
+ //
+ // buttonMake
+ //
+ buttonMake.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+ buttonMake.Location = new Point(842, 12);
+ buttonMake.Name = "buttonMake";
+ buttonMake.Size = new Size(147, 34);
+ buttonMake.TabIndex = 4;
+ buttonMake.Text = "Сформировать";
+ buttonMake.UseVisualStyleBackColor = true;
+ buttonMake.Click += ButtonMake_Click;
+ //
+ // labelFrom
+ //
+ labelFrom.AutoSize = true;
+ labelFrom.Location = new Point(12, 17);
+ labelFrom.Name = "labelFrom";
+ labelFrom.Size = new Size(23, 25);
+ labelFrom.TabIndex = 2;
+ labelFrom.Text = "С";
+ //
+ // dateTimePickerFrom
+ //
+ dateTimePickerFrom.Location = new Point(43, 14);
+ dateTimePickerFrom.Name = "dateTimePickerFrom";
+ dateTimePickerFrom.Size = new Size(217, 31);
+ dateTimePickerFrom.TabIndex = 0;
+ //
+ // labelTo
+ //
+ labelTo.AutoSize = true;
+ labelTo.Location = new Point(266, 17);
+ labelTo.Name = "labelTo";
+ labelTo.Size = new Size(33, 25);
+ labelTo.TabIndex = 3;
+ labelTo.Text = "по";
+ //
+ // dateTimePickerTo
+ //
+ dateTimePickerTo.Location = new Point(305, 14);
+ dateTimePickerTo.Name = "dateTimePickerTo";
+ dateTimePickerTo.Size = new Size(216, 31);
+ dateTimePickerTo.TabIndex = 1;
+ //
+ // panelReport
+ //
+ panelReport.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ panelReport.Location = new Point(0, 57);
+ panelReport.Name = "panelReport";
+ panelReport.Size = new Size(1154, 387);
+ panelReport.TabIndex = 1;
+ //
+ // FormReportOrders
+ //
+ AutoScaleDimensions = new SizeF(10F, 25F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(1154, 444);
+ Controls.Add(panelReport);
+ Controls.Add(panelControl);
+ Name = "FormReportOrders";
+ Text = "Заказы";
+ panelControl.ResumeLayout(false);
+ panelControl.PerformLayout();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panelControl;
+ private Button buttonToPdf;
+ private Button buttonMake;
+ private Label labelTo;
+ private Label labelFrom;
+ private DateTimePicker dateTimePickerTo;
+ private DateTimePicker dateTimePickerFrom;
+ private Panel panelReport;
+ }
+}
\ No newline at end of file
diff --git a/Confectionery/Confectionery/FormReportOrders.cs b/Confectionery/Confectionery/FormReportOrders.cs
new file mode 100644
index 0000000..6bf9463
--- /dev/null
+++ b/Confectionery/Confectionery/FormReportOrders.cs
@@ -0,0 +1,106 @@
+using ConfectioneryContracts.BindingModels;
+using ConfectioneryContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+using Microsoft.Reporting.WinForms;
+namespace ConfectioneryView
+{
+ public partial class FormReportOrders : Form
+ {
+ private readonly ReportViewer reportViewer;
+ private readonly ILogger _logger;
+ private readonly IReportLogic _logic;
+ public FormReportOrders(ILogger logger,
+ IReportLogic logic)
+ {
+ InitializeComponent();
+ _logger = logger;
+ _logic = logic;
+ reportViewer = new ReportViewer
+ {
+ Dock = DockStyle.Fill
+ };
+ reportViewer.LocalReport.LoadReportDefinition(new
+ FileStream("C:\\Users\\ellev\\OneDrive\\Рабочий стол\\Университет\\4 семестр\\РПП\\Confectionery\\Confectionery\\Confectionery\\ReportOrders.rdlc", FileMode.Open));
+ panelReport.Controls.Add(reportViewer);
+ }
+ private void ButtonMake_Click(object sender, EventArgs e)
+ {
+ if (dateTimePickerFrom.Value.Date >= dateTimePickerTo.Value.Date)
+ {
+ MessageBox.Show(
+ "Дата начала должна быть меньше даты окончания",
+ "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ try
+ {
+ var dataSource = _logic.GetOrders(new ReportBindingModel
+ {
+ DateFrom = dateTimePickerFrom.Value,
+ DateTo = dateTimePickerTo.Value
+ });
+ var source = new ReportDataSource("DataSetOrders", dataSource);
+ reportViewer.LocalReport.DataSources.Clear();
+ reportViewer.LocalReport.DataSources.Add(source);
+ var parameters = new[] { new ReportParameter(
+ "ReportParameterPeriod", $"c " +
+ $"{dateTimePickerFrom.Value.ToShortDateString()} по " +
+ $"{dateTimePickerTo.Value.ToShortDateString()}") };
+ reportViewer.LocalReport.SetParameters(parameters);
+ reportViewer.RefreshReport();
+ _logger.LogInformation("Загрузка списка заказов на период " +
+ "{From}-{ To}",
+ dateTimePickerFrom.Value.ToShortDateString(),
+ dateTimePickerTo.Value.ToShortDateString());
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(
+ ex, "Ошибка загрузки списка заказов на период");
+ MessageBox.Show(
+ ex.Message, "Ошибка", MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ }
+ }
+ private void ButtonToPdf_Click(object sender, EventArgs e)
+ {
+ if (dateTimePickerFrom.Value.Date >= dateTimePickerTo.Value.Date)
+ {
+ MessageBox.Show(
+ "Дата начала должна быть меньше даты окончания",
+ "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ using var dialog = new SaveFileDialog
+ {
+ Filter = "pdf|*.pdf"
+ };
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ _logic.SaveOrdersToPdfFile(new ReportBindingModel
+ {
+ FileName = dialog.FileName,
+ DateFrom = dateTimePickerFrom.Value,
+ DateTo = dateTimePickerTo.Value
+ });
+ _logger.LogInformation(
+ "Сохранение списка заказов на период { From}-{ To}",
+ dateTimePickerFrom.Value.ToShortDateString(),
+ dateTimePickerTo.Value.ToShortDateString());
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(
+ ex, "Ошибка сохранения списка заказов на период");
+ MessageBox.Show(
+ ex.Message, "Ошибка", MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ }
+ }
+ }
+ }
+}
diff --git a/Confectionery/Confectionery/FormReportOrders.resx b/Confectionery/Confectionery/FormReportOrders.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Confectionery/Confectionery/FormReportOrders.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Confectionery/Confectionery/FormReportPastryComponents.Designer.cs b/Confectionery/Confectionery/FormReportPastryComponents.Designer.cs
new file mode 100644
index 0000000..223182e
--- /dev/null
+++ b/Confectionery/Confectionery/FormReportPastryComponents.Designer.cs
@@ -0,0 +1,104 @@
+namespace ConfectioneryView
+{
+ partial class FormReportPastryComponents
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ dataGridView = new DataGridView();
+ buttonSaveToExcel = new Button();
+ ComponentColumn = new DataGridViewTextBoxColumn();
+ PastryColumn = new DataGridViewTextBoxColumn();
+ CountColumn = new DataGridViewTextBoxColumn();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ SuspendLayout();
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Columns.AddRange(new DataGridViewColumn[] { PastryColumn, ComponentColumn, CountColumn });
+ dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ dataGridView.BackgroundColor = SystemColors.Window;
+ dataGridView.Location = new Point(0, 52);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 62;
+ dataGridView.Size = new Size(878, 392);
+ dataGridView.TabIndex = 0;
+ //
+ // buttonSaveToExcel
+ //
+ buttonSaveToExcel.Location = new Point(12, 12);
+ buttonSaveToExcel.Name = "buttonSaveToExcel";
+ buttonSaveToExcel.Size = new Size(200, 34);
+ buttonSaveToExcel.TabIndex = 1;
+ buttonSaveToExcel.Text = "Сохранить в Excel";
+ buttonSaveToExcel.UseVisualStyleBackColor = true;
+ buttonSaveToExcel.Click += ButtonSaveToExcel_Click;
+ //
+ // PastryColumn
+ //
+ PastryColumn.HeaderText = "Кондитерское изделие";
+ PastryColumn.MinimumWidth = 6;
+ PastryColumn.Name = "PastryColumn";
+ PastryColumn.Width = 300;
+ //
+ // ComponentColumn
+ //
+ ComponentColumn.HeaderText = "Компонент";
+ ComponentColumn.MinimumWidth = 6;
+ ComponentColumn.Name = "ComponentColumn";
+ ComponentColumn.Width = 200;
+ //
+ // CountColumn
+ //
+ CountColumn.HeaderText = "Количество";
+ CountColumn.MinimumWidth = 6;
+ CountColumn.Name = "CountColumn";
+ CountColumn.Width = 130;
+ //
+ // FormReportPastryComponents
+ //
+ AutoScaleDimensions = new SizeF(10F, 25F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(878, 444);
+ Controls.Add(buttonSaveToExcel);
+ Controls.Add(dataGridView);
+ Name = "FormReportPastryComponents";
+ Text = "Компоненты по кондитерским изделиям";
+ Load += FormReportPastryComponents_Load;
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private DataGridView dataGridView;
+ private Button buttonSaveToExcel;
+ private DataGridViewTextBoxColumn ComponentColumn;
+ private DataGridViewTextBoxColumn PastryColumn;
+ private DataGridViewTextBoxColumn CountColumn;
+ }
+}
\ No newline at end of file
diff --git a/Confectionery/Confectionery/FormReportPastryComponents.cs b/Confectionery/Confectionery/FormReportPastryComponents.cs
new file mode 100644
index 0000000..b225062
--- /dev/null
+++ b/Confectionery/Confectionery/FormReportPastryComponents.cs
@@ -0,0 +1,81 @@
+using ConfectioneryContracts.BindingModels;
+using ConfectioneryContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+namespace ConfectioneryView
+{
+ public partial class FormReportPastryComponents : Form
+ {
+ private readonly ILogger _logger;
+ private readonly IReportLogic _logic;
+ public FormReportPastryComponents(ILogger
+ logger, IReportLogic logic)
+ {
+ InitializeComponent();
+ _logger = logger;
+ _logic = logic;
+ }
+ private void FormReportPastryComponents_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ var dict = _logic.GetPastryComponent();
+ if (dict != null)
+ {
+ dataGridView.Rows.Clear();
+ foreach (var elem in dict)
+ {
+ dataGridView.Rows.Add(new object[] {
+ elem.PastryName, "", "" });
+ foreach (var listElem in elem.Components)
+ {
+ dataGridView.Rows.Add(new object[] { "",
+ listElem.Item1, listElem.Item2 });
+ }
+ dataGridView.Rows.Add(new object[] { "Итого", "",
+ elem.TotalCount });
+ dataGridView.Rows.Add(Array.Empty