diff --git a/CarRepairShop/CarRepairShop/CarRepairShop.csproj b/CarRepairShop/CarRepairShop/CarRepairShop.csproj
index cc9a359..62e0d97 100644
--- a/CarRepairShop/CarRepairShop/CarRepairShop.csproj
+++ b/CarRepairShop/CarRepairShop/CarRepairShop.csproj
@@ -14,6 +14,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/CarRepairShop/CarRepairShop/FormMain.Designer.cs b/CarRepairShop/CarRepairShop/FormMain.Designer.cs
index 9526fc9..c047715 100644
--- a/CarRepairShop/CarRepairShop/FormMain.Designer.cs
+++ b/CarRepairShop/CarRepairShop/FormMain.Designer.cs
@@ -32,9 +32,16 @@
справочникиToolStripMenuItem = new ToolStripMenuItem();
компонентыToolStripMenuItem = new ToolStripMenuItem();
ремонтToolStripMenuItem = new ToolStripMenuItem();
- ShopsToolStripMenuItem = new ToolStripMenuItem();
- SupplyToolStripMenuItem = new ToolStripMenuItem();
- SellsToolStripMenuItem = new ToolStripMenuItem();
+ магазиныToolStripMenuItem = new ToolStripMenuItem();
+ поставкиToolStripMenuItem = new ToolStripMenuItem();
+ продажиToolStripMenuItem = new ToolStripMenuItem();
+ отчётыToolStripMenuItem = new ToolStripMenuItem();
+ списокКомпонентовToolStripMenuItem = new ToolStripMenuItem();
+ компонентыПоРемонтуToolStripMenuItem = new ToolStripMenuItem();
+ списокЗаказовToolStripMenuItem = new ToolStripMenuItem();
+ списокМагазиновToolStripMenuItem = new ToolStripMenuItem();
+ ремонтПоМагазинамToolStripMenuItem = new ToolStripMenuItem();
+ заказыПоДатамToolStripMenuItem = new ToolStripMenuItem();
dataGridView = new DataGridView();
buttonCreateOrder = new Button();
buttonTakeOrderInWork = new Button();
@@ -48,7 +55,7 @@
// menuStrip
//
menuStrip.ImageScalingSize = new Size(20, 20);
- menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem });
+ menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, отчётыToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
menuStrip.Size = new Size(1082, 28);
@@ -57,7 +64,7 @@
//
// справочникиToolStripMenuItem
//
- справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, ремонтToolStripMenuItem, ShopsToolStripMenuItem, SupplyToolStripMenuItem, SellsToolStripMenuItem });
+ справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, ремонтToolStripMenuItem, магазиныToolStripMenuItem, поставкиToolStripMenuItem, продажиToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(117, 24);
справочникиToolStripMenuItem.Text = "Справочники";
@@ -76,26 +83,75 @@
ремонтToolStripMenuItem.Text = "Ремонт";
ремонтToolStripMenuItem.Click += RepairToolStripMenuItem_Click;
//
- // ShopsToolStripMenuItem
+ // магазиныToolStripMenuItem
//
- ShopsToolStripMenuItem.Name = "ShopsToolStripMenuItem";
- ShopsToolStripMenuItem.Size = new Size(224, 26);
- ShopsToolStripMenuItem.Text = "Магазины";
- ShopsToolStripMenuItem.Click += ShopsToolStripMenuItem_Click;
+ магазиныToolStripMenuItem.Name = "магазиныToolStripMenuItem";
+ магазиныToolStripMenuItem.Size = new Size(224, 26);
+ магазиныToolStripMenuItem.Text = "Магазины";
+ магазиныToolStripMenuItem.Click += ShopsToolStripMenuItem_Click;
//
- // SupplyToolStripMenuItem
+ // поставкиToolStripMenuItem
//
- SupplyToolStripMenuItem.Name = "SupplyToolStripMenuItem";
- SupplyToolStripMenuItem.Size = new Size(224, 26);
- SupplyToolStripMenuItem.Text = "Поставки";
- SupplyToolStripMenuItem.Click += SupplyToolStripMenuItem_Click;
+ поставкиToolStripMenuItem.Name = "поставкиToolStripMenuItem";
+ поставкиToolStripMenuItem.Size = new Size(224, 26);
+ поставкиToolStripMenuItem.Text = "Поставки";
+ поставкиToolStripMenuItem.Click += SupplyToolStripMenuItem_Click;
//
- // SellsToolStripMenuItem
+ // продажиToolStripMenuItem
//
- SellsToolStripMenuItem.Name = "SellsToolStripMenuItem";
- SellsToolStripMenuItem.Size = new Size(224, 26);
- SellsToolStripMenuItem.Text = "Продажи";
- SellsToolStripMenuItem.Click += SellToolStripMenuItem_Click;
+ продажиToolStripMenuItem.Name = "продажиToolStripMenuItem";
+ продажиToolStripMenuItem.Size = new Size(224, 26);
+ продажиToolStripMenuItem.Text = "Продажи";
+ продажиToolStripMenuItem.Click += SellToolStripMenuItem_Click;
+ //
+ // отчётыToolStripMenuItem
+ //
+ отчётыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { списокКомпонентовToolStripMenuItem, компонентыПоРемонтуToolStripMenuItem, списокЗаказовToolStripMenuItem, списокМагазиновToolStripMenuItem, ремонтПоМагазинамToolStripMenuItem, заказыПоДатамToolStripMenuItem });
+ отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem";
+ отчётыToolStripMenuItem.Size = new Size(73, 24);
+ отчётыToolStripMenuItem.Text = "Отчёты";
+ //
+ // списокКомпонентовToolStripMenuItem
+ //
+ списокКомпонентовToolStripMenuItem.Name = "списокКомпонентовToolStripMenuItem";
+ списокКомпонентовToolStripMenuItem.Size = new Size(267, 26);
+ списокКомпонентовToolStripMenuItem.Text = "Список компонентов";
+ списокКомпонентовToolStripMenuItem.Click += ListComponentToolStripMenuItem_Click;
+ //
+ // компонентыПоРемонтуToolStripMenuItem
+ //
+ компонентыПоРемонтуToolStripMenuItem.Name = "компонентыПоРемонтуToolStripMenuItem";
+ компонентыПоРемонтуToolStripMenuItem.Size = new Size(267, 26);
+ компонентыПоРемонтуToolStripMenuItem.Text = "Компоненты по ремонту";
+ компонентыПоРемонтуToolStripMenuItem.Click += RepairComponentToolStripMenuItem_Click;
+ //
+ // списокЗаказовToolStripMenuItem
+ //
+ списокЗаказовToolStripMenuItem.Name = "списокЗаказовToolStripMenuItem";
+ списокЗаказовToolStripMenuItem.Size = new Size(267, 26);
+ списокЗаказовToolStripMenuItem.Text = "Список заказов";
+ списокЗаказовToolStripMenuItem.Click += ListOrderToolStripMenuItem_Click;
+ //
+ // списокМагазиновToolStripMenuItem
+ //
+ списокМагазиновToolStripMenuItem.Name = "списокМагазиновToolStripMenuItem";
+ списокМагазиновToolStripMenuItem.Size = new Size(305, 26);
+ списокМагазиновToolStripMenuItem.Text = "Список магазинов";
+ списокМагазиновToolStripMenuItem.Click += ListShopsToolStripMenuItem_Click;
+ //
+ // ремонтПоМагазинамToolStripMenuItem
+ //
+ ремонтПоМагазинамToolStripMenuItem.Name = "ремонтПоМагазинамToolStripMenuItem";
+ ремонтПоМагазинамToolStripMenuItem.Size = new Size(305, 26);
+ ремонтПоМагазинамToolStripMenuItem.Text = "Ремонт по магазинам";
+ ремонтПоМагазинамToolStripMenuItem.Click += RepairShopsToolStripMenuItem_Click;
+ //
+ // заказыПоДатамToolStripMenuItem
+ //
+ заказыПоДатамToolStripMenuItem.Name = "заказыПоДатамToolStripMenuItem";
+ заказыПоДатамToolStripMenuItem.Size = new Size(305, 26);
+ заказыПоДатамToolStripMenuItem.Text = "Заказы по датам";
+ заказыПоДатамToolStripMenuItem.Click += OrdersByDateToolStripMenuItem_Click;
//
// dataGridView
//
@@ -189,14 +245,21 @@
private ToolStripMenuItem справочникиToolStripMenuItem;
private ToolStripMenuItem компонентыToolStripMenuItem;
private ToolStripMenuItem ремонтToolStripMenuItem;
+ private ToolStripMenuItem отчётыToolStripMenuItem;
+ private ToolStripMenuItem списокКомпонентовToolStripMenuItem;
+ private ToolStripMenuItem компонентыПоРемонтуToolStripMenuItem;
+ private ToolStripMenuItem списокЗаказовToolStripMenuItem;
+ private ToolStripMenuItem магазиныToolStripMenuItem;
+ private ToolStripMenuItem поставкиToolStripMenuItem;
+ private ToolStripMenuItem продажиToolStripMenuItem;
+ private ToolStripMenuItem списокМагазиновToolStripMenuItem;
+ private ToolStripMenuItem ремонтПоМагазинамToolStripMenuItem;
+ private ToolStripMenuItem заказыПоДатамToolStripMenuItem;
private DataGridView dataGridView;
private Button buttonCreateOrder;
private Button buttonTakeOrderInWork;
private Button buttonOrderReady;
private Button buttonIssuedOrder;
private Button buttonRefresh;
- private ToolStripMenuItem ShopsToolStripMenuItem;
- private ToolStripMenuItem SupplyToolStripMenuItem;
- private ToolStripMenuItem SellsToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/CarRepairShop/CarRepairShop/FormMain.cs b/CarRepairShop/CarRepairShop/FormMain.cs
index b5173c9..8d5d5d7 100644
--- a/CarRepairShop/CarRepairShop/FormMain.cs
+++ b/CarRepairShop/CarRepairShop/FormMain.cs
@@ -9,11 +9,13 @@ namespace CarRepairShop
{
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)
{
@@ -56,10 +58,39 @@ namespace CarRepairShop
form.ShowDialog();
}
}
+ private void ListComponentToolStripMenuItem_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 RepairComponentToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormReportRepairComponents));
+ if (service is FormReportRepairComponents form)
+ {
+ form.ShowDialog();
+ }
+ }
+ private void ListOrderToolStripMenuItem_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(typeof(FormCreateOrder));
+ var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder));
if (service is FormCreateOrder form)
{
form.ShowDialog();
@@ -180,5 +211,36 @@ namespace CarRepairShop
form.ShowDialog();
}
}
+ private void ListShopsToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ _reportLogic.SaveShopsToWordFile(new ReportBindingModel
+ {
+ FileName = dialog.FileName
+ });
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+ }
+ }
+
+ private void RepairShopsToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormReportShopsRepairs));
+ if (service is FormReportShopsRepairs form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+ private void OrdersByDateToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormReportDateOrders));
+ if (service is FormReportDateOrders form)
+ {
+ form.ShowDialog();
+ }
+ }
}
}
diff --git a/CarRepairShop/CarRepairShop/FormReportDateOrders.Designer.cs b/CarRepairShop/CarRepairShop/FormReportDateOrders.Designer.cs
new file mode 100644
index 0000000..15a527f
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportDateOrders.Designer.cs
@@ -0,0 +1,82 @@
+namespace CarRepairShop
+{
+ partial class FormReportDateOrders
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ MakeButton = new Button();
+ ToPdfButton = new Button();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Location = new Point(12, 71);
+ panel.Name = "panel";
+ panel.Size = new Size(776, 367);
+ panel.TabIndex = 0;
+ //
+ // MakeButton
+ //
+ MakeButton.Location = new Point(12, 36);
+ MakeButton.Name = "MakeButton";
+ MakeButton.Size = new Size(131, 29);
+ MakeButton.TabIndex = 1;
+ MakeButton.Text = "Сформировать";
+ MakeButton.UseVisualStyleBackColor = true;
+ MakeButton.Click += MakeButton_Click;
+ //
+ // ToPdfButton
+ //
+ ToPdfButton.Location = new Point(149, 36);
+ ToPdfButton.Name = "ToPdfButton";
+ ToPdfButton.Size = new Size(94, 29);
+ ToPdfButton.TabIndex = 2;
+ ToPdfButton.Text = "В PDF";
+ ToPdfButton.UseVisualStyleBackColor = true;
+ ToPdfButton.Click += ToPdfButton_Click;
+ //
+ // ReportDateOrdersForm
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(ToPdfButton);
+ Controls.Add(MakeButton);
+ Controls.Add(panel);
+ Name = "FormReportDateOrders";
+ Text = "Заказы по датам";
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button MakeButton;
+ private Button ToPdfButton;
+ }
+}
\ No newline at end of file
diff --git a/CarRepairShop/CarRepairShop/FormReportDateOrders.cs b/CarRepairShop/CarRepairShop/FormReportDateOrders.cs
new file mode 100644
index 0000000..e69aea8
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportDateOrders.cs
@@ -0,0 +1,68 @@
+using CarRepairShopContracts.BindingModels;
+using CarRepairShopContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+using Microsoft.Reporting.WinForms;
+
+namespace CarRepairShop
+{
+ public partial class FormReportDateOrders : Form
+ {
+ private readonly ReportViewer reportViewer;
+
+ private readonly ILogger _logger;
+
+ private readonly IReportLogic _logic;
+ public FormReportDateOrders(ILogger logger, IReportLogic logic)
+ {
+ InitializeComponent();
+ _logger = logger;
+ _logic = logic;
+ reportViewer = new ReportViewer
+ {
+ Dock = DockStyle.Fill
+ };
+ reportViewer.LocalReport.LoadReportDefinition(new FileStream("ReportOrdersByDate.rdlc", FileMode.Open));
+ panel.Controls.Add(reportViewer);
+ }
+
+ private void MakeButton_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ var dataSource = _logic.GetDatesOrders();
+ var source = new ReportDataSource("DataSetOrders", dataSource);
+ reportViewer.LocalReport.DataSources.Clear();
+ reportViewer.LocalReport.DataSources.Add(source);
+ reportViewer.RefreshReport();
+ _logger.LogInformation("Загрузка списка заказов на весь период по датам");
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка загрузки списка заказов на период");
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void ToPdfButton_Click(object sender, EventArgs e)
+ {
+ using var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" };
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ _logic.SaveDatesOrdersToPdfFile(new ReportBindingModel
+ {
+ FileName = dialog.FileName
+ });
+ _logger.LogInformation("Сохранение списка заказов на весь период по датам");
+ MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка сохранения списка заказов на период");
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ }
+}
diff --git a/CarRepairShop/CarRepairShop/FormReportDateOrders.resx b/CarRepairShop/CarRepairShop/FormReportDateOrders.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportDateOrders.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/CarRepairShop/CarRepairShop/FormReportOrders.Designer.cs b/CarRepairShop/CarRepairShop/FormReportOrders.Designer.cs
new file mode 100644
index 0000000..682df23
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportOrders.Designer.cs
@@ -0,0 +1,145 @@
+namespace CarRepairShop
+{
+ 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()
+ {
+ panelMenu = new Panel();
+ ToPdfButton = new Button();
+ MakeButton = new Button();
+ labelTo = new Label();
+ labelFrom = new Label();
+ dateTimePickerTo = new DateTimePicker();
+ dateTimePickerFrom = new DateTimePicker();
+ panelReport = new Panel();
+ panelMenu.SuspendLayout();
+ SuspendLayout();
+ //
+ // panelMenu
+ //
+ panelMenu.Controls.Add(ToPdfButton);
+ panelMenu.Controls.Add(MakeButton);
+ panelMenu.Controls.Add(labelTo);
+ panelMenu.Controls.Add(labelFrom);
+ panelMenu.Controls.Add(dateTimePickerTo);
+ panelMenu.Controls.Add(dateTimePickerFrom);
+ panelMenu.Location = new Point(14, 16);
+ panelMenu.Margin = new Padding(3, 4, 3, 4);
+ panelMenu.Name = "panelMenu";
+ panelMenu.Size = new Size(1192, 57);
+ panelMenu.TabIndex = 0;
+ //
+ // ToPdfButton
+ //
+ ToPdfButton.Location = new Point(1018, 22);
+ ToPdfButton.Margin = new Padding(3, 4, 3, 4);
+ ToPdfButton.Name = "ToPdfButton";
+ ToPdfButton.Size = new Size(171, 31);
+ ToPdfButton.TabIndex = 5;
+ ToPdfButton.Text = "В Pdf";
+ ToPdfButton.UseVisualStyleBackColor = true;
+ ToPdfButton.Click += ButtonToPdf_Click;
+ //
+ // MakeButton
+ //
+ MakeButton.Location = new Point(676, 22);
+ MakeButton.Margin = new Padding(3, 4, 3, 4);
+ MakeButton.Name = "MakeButton";
+ MakeButton.Size = new Size(168, 31);
+ MakeButton.TabIndex = 4;
+ MakeButton.Text = "Сформировать";
+ MakeButton.UseVisualStyleBackColor = true;
+ MakeButton.Click += ButtonMake_Click;
+ //
+ // labelTo
+ //
+ labelTo.AutoSize = true;
+ labelTo.Location = new Point(269, 31);
+ labelTo.Name = "labelTo";
+ labelTo.Size = new Size(29, 20);
+ labelTo.TabIndex = 3;
+ labelTo.Text = "По";
+ //
+ // labelFrom
+ //
+ labelFrom.AutoSize = true;
+ labelFrom.Location = new Point(9, 31);
+ labelFrom.Name = "labelFrom";
+ labelFrom.Size = new Size(18, 20);
+ labelFrom.TabIndex = 2;
+ labelFrom.Text = "С";
+ //
+ // dateTimePickerTo
+ //
+ dateTimePickerTo.Location = new Point(302, 23);
+ dateTimePickerTo.Margin = new Padding(3, 4, 3, 4);
+ dateTimePickerTo.Name = "dateTimePickerTo";
+ dateTimePickerTo.Size = new Size(228, 27);
+ dateTimePickerTo.TabIndex = 1;
+ //
+ // dateTimePickerFrom
+ //
+ dateTimePickerFrom.Location = new Point(33, 23);
+ dateTimePickerFrom.Margin = new Padding(3, 4, 3, 4);
+ dateTimePickerFrom.Name = "dateTimePickerFrom";
+ dateTimePickerFrom.Size = new Size(228, 27);
+ dateTimePickerFrom.TabIndex = 0;
+ //
+ // panelReport
+ //
+ panelReport.Location = new Point(14, 80);
+ panelReport.Name = "panelReport";
+ panelReport.Size = new Size(1192, 508);
+ panelReport.TabIndex = 1;
+ //
+ // FormReportOrders
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(1218, 600);
+ Controls.Add(panelReport);
+ Controls.Add(panelMenu);
+ Margin = new Padding(3, 4, 3, 4);
+ Name = "FormReportOrders";
+ Text = "Заказы";
+ panelMenu.ResumeLayout(false);
+ panelMenu.PerformLayout();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panelMenu;
+ private Button ToPdfButton;
+ private Button MakeButton;
+ private Label labelTo;
+ private Label labelFrom;
+ private DateTimePicker dateTimePickerTo;
+ private DateTimePicker dateTimePickerFrom;
+ private Panel panelReport;
+ }
+}
\ No newline at end of file
diff --git a/CarRepairShop/CarRepairShop/FormReportOrders.cs b/CarRepairShop/CarRepairShop/FormReportOrders.cs
new file mode 100644
index 0000000..b40c31f
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportOrders.cs
@@ -0,0 +1,95 @@
+using CarRepairShopBusinessLogic;
+using CarRepairShopContracts.BindingModels;
+using CarRepairShopContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+using Microsoft.Reporting.WinForms;
+
+namespace CarRepairShop
+{
+ 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("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/CarRepairShop/CarRepairShop/FormReportOrders.resx b/CarRepairShop/CarRepairShop/FormReportOrders.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/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/CarRepairShop/CarRepairShop/FormReportRepairComponents.Designer.cs b/CarRepairShop/CarRepairShop/FormReportRepairComponents.Designer.cs
new file mode 100644
index 0000000..3cd3991
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportRepairComponents.Designer.cs
@@ -0,0 +1,104 @@
+namespace CarRepairShop
+{
+ partial class FormReportRepairComponents
+ {
+ ///
+ /// 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()
+ {
+ ButtonSave = new Button();
+ dataGridView = new DataGridView();
+ RepairColumn = new DataGridViewTextBoxColumn();
+ ComponentColumn = new DataGridViewTextBoxColumn();
+ CountColumn = new DataGridViewTextBoxColumn();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ SuspendLayout();
+ //
+ // ButtonSave
+ //
+ ButtonSave.Location = new Point(12, 12);
+ ButtonSave.Name = "ButtonSave";
+ ButtonSave.Size = new Size(169, 37);
+ ButtonSave.TabIndex = 0;
+ ButtonSave.Text = "Сохранить в Excel";
+ ButtonSave.UseVisualStyleBackColor = true;
+ ButtonSave.Click += ButtonSaveToExcel_Click;
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Columns.AddRange(new DataGridViewColumn[] { RepairColumn, ComponentColumn, CountColumn });
+ dataGridView.Location = new Point(2, 55);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(797, 392);
+ dataGridView.TabIndex = 1;
+ //
+ // RepairColumn
+ //
+ RepairColumn.HeaderText = "Ремонт";
+ RepairColumn.MinimumWidth = 6;
+ RepairColumn.Name = "RepairColumn";
+ RepairColumn.Width = 263;
+ //
+ // ComponentColumn
+ //
+ ComponentColumn.HeaderText = "Компонент";
+ ComponentColumn.MinimumWidth = 6;
+ ComponentColumn.Name = "ComponentColumn";
+ ComponentColumn.Width = 263;
+ //
+ // CountColumn
+ //
+ CountColumn.HeaderText = "Количество";
+ CountColumn.MinimumWidth = 6;
+ CountColumn.Name = "CountColumn";
+ CountColumn.Width = 200;
+ //
+ // FormReportRepairComponents
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(dataGridView);
+ Controls.Add(ButtonSave);
+ Name = "FormReportRepairComponents";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "Компоненты по ремонтам";
+ Load += FormReportRepairComponents_Load;
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Button ButtonSave;
+ private DataGridView dataGridView;
+ private DataGridViewTextBoxColumn RepairColumn;
+ private DataGridViewTextBoxColumn ComponentColumn;
+ private DataGridViewTextBoxColumn CountColumn;
+ }
+}
\ No newline at end of file
diff --git a/CarRepairShop/CarRepairShop/FormReportRepairComponents.cs b/CarRepairShop/CarRepairShop/FormReportRepairComponents.cs
new file mode 100644
index 0000000..cce5474
--- /dev/null
+++ b/CarRepairShop/CarRepairShop/FormReportRepairComponents.cs
@@ -0,0 +1,87 @@
+using CarRepairShopBusinessLogic;
+using CarRepairShopContracts.BindingModels;
+using CarRepairShopContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+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;
+
+namespace CarRepairShop
+{
+ public partial class FormReportRepairComponents : Form
+ {
+ private readonly ILogger _logger;
+ private readonly IReportLogic _logic;
+ public FormReportRepairComponents(ILogger
+ logger, IReportLogic logic)
+ {
+ InitializeComponent();
+ _logger = logger;
+ _logic = logic;
+ }
+ private void FormReportRepairComponents_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ var dict = _logic.GetRepairComponent();
+ if (dict != null)
+ {
+ dataGridView.Rows.Clear();
+ foreach (var elem in dict)
+ {
+ dataGridView.Rows.Add(new object[] { elem.RepairName, "", "" });
+ 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