From ad2cd595372916f9653acd538980b1fecb3c5548 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Mon, 16 Dec 2024 00:58:01 +0400 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B8=20=D1=81=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormRepairCompany.Designer.cs | 10 ++ .../ProjectRepairCompany/FormRepairCompany.cs | 12 ++ .../Forms/FormDirectoryReport.Designer.cs | 100 +++++++++++++++ .../Forms/FormDirectoryReport.cs | 62 +++++++++ .../Forms/FormDirectoryReport.resx | 120 ++++++++++++++++++ .../ProjectRepairCompany/Reports/DocReport.cs | 72 +++++++++++ 6 files changed, 376 insertions(+) create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.Designer.cs create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.cs create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.resx create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Reports/DocReport.cs diff --git a/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.Designer.cs index 5a2c8e5..6bf6a71 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.Designer.cs @@ -37,6 +37,7 @@ OrderToolStripMenuItem = new ToolStripMenuItem(); StorageDetailToolStripMenuItem = new ToolStripMenuItem(); отчетыToolStripMenuItem = new ToolStripMenuItem(); + DirectoryReportToolStripMenuItem = new ToolStripMenuItem(); menuStrip1.SuspendLayout(); SuspendLayout(); // @@ -100,10 +101,18 @@ // // отчетыToolStripMenuItem // + отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { DirectoryReportToolStripMenuItem }); отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; отчетыToolStripMenuItem.Size = new Size(63, 21); отчетыToolStripMenuItem.Text = "Отчеты"; // + // DirectoryReportToolStripMenuItem + // + DirectoryReportToolStripMenuItem.Name = "DirectoryReportToolStripMenuItem"; + DirectoryReportToolStripMenuItem.Size = new Size(248, 22); + DirectoryReportToolStripMenuItem.Text = "Документ со справочниками"; + DirectoryReportToolStripMenuItem.Click += DirectoryReportToolStripMenuItem_Click; + // // FormRepairCompany // AutoScaleDimensions = new SizeF(7F, 17F); @@ -134,5 +143,6 @@ private ToolStripMenuItem отчетыToolStripMenuItem; private ToolStripMenuItem StorageDetailToolStripMenuItem; private ToolStripMenuItem OrderToolStripMenuItem; + private ToolStripMenuItem DirectoryReportToolStripMenuItem; } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.cs b/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.cs index 10177e6..85ae560 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/FormRepairCompany.cs @@ -72,5 +72,17 @@ namespace ProjectRepairCompany MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); } } + + private void DirectoryReportToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.Designer.cs new file mode 100644 index 0000000..aa14418 --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.Designer.cs @@ -0,0 +1,100 @@ +namespace ProjectRepairCompany.Forms +{ + partial class FormDirectoryReport + { + /// + /// 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() + { + checkBoxMasters = new CheckBox(); + checkBoxDetails = new CheckBox(); + checkBoxStorages = new CheckBox(); + ButtonBuild = new Button(); + SuspendLayout(); + // + // checkBoxMasters + // + checkBoxMasters.AutoSize = true; + checkBoxMasters.Location = new Point(34, 28); + checkBoxMasters.Name = "checkBoxMasters"; + checkBoxMasters.Size = new Size(89, 21); + checkBoxMasters.TabIndex = 0; + checkBoxMasters.Text = "Работники"; + checkBoxMasters.UseVisualStyleBackColor = true; + // + // checkBoxDetails + // + checkBoxDetails.AutoSize = true; + checkBoxDetails.Location = new Point(34, 83); + checkBoxDetails.Name = "checkBoxDetails"; + checkBoxDetails.Size = new Size(69, 21); + checkBoxDetails.TabIndex = 1; + checkBoxDetails.Text = "Детали"; + checkBoxDetails.UseVisualStyleBackColor = true; + // + // checkBoxStorages + // + checkBoxStorages.AutoSize = true; + checkBoxStorages.Location = new Point(34, 135); + checkBoxStorages.Name = "checkBoxStorages"; + checkBoxStorages.Size = new Size(71, 21); + checkBoxStorages.TabIndex = 2; + checkBoxStorages.Text = "Склады"; + checkBoxStorages.UseVisualStyleBackColor = true; + // + // ButtonBuild + // + ButtonBuild.Location = new Point(155, 28); + ButtonBuild.Name = "ButtonBuild"; + ButtonBuild.Size = new Size(139, 128); + ButtonBuild.TabIndex = 3; + ButtonBuild.Text = "Формировать отчет"; + ButtonBuild.UseVisualStyleBackColor = true; + ButtonBuild.Click += ButtonBuild_Click; + // + // FormDirectoryReport + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(398, 249); + Controls.Add(ButtonBuild); + Controls.Add(checkBoxStorages); + Controls.Add(checkBoxDetails); + Controls.Add(checkBoxMasters); + Name = "FormDirectoryReport"; + StartPosition = FormStartPosition.CenterParent; + Text = "FormDirectoryReport"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private CheckBox checkBoxMasters; + private CheckBox checkBoxDetails; + private CheckBox checkBoxStorages; + private Button ButtonBuild; + } +} \ No newline at end of file diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.cs new file mode 100644 index 0000000..af2bea3 --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.cs @@ -0,0 +1,62 @@ +using ProjectRepairCompany.Reports; +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 Unity; + +namespace ProjectRepairCompany.Forms +{ + public partial class FormDirectoryReport : Form + { + private readonly IUnityContainer _container; + public FormDirectoryReport(UnityContainer container) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + } + + private void ButtonBuild_Click(object sender, EventArgs e) + { + try + { + if (!checkBoxMasters.Checked && !checkBoxDetails.Checked && !checkBoxStorages.Checked) + { + throw new Exception("Не выбран ни один справочник для выгрузки"); + } + var sfd = new SaveFileDialog() + { + Filter = "Docx Files | *.docx" + }; + if (sfd.ShowDialog() != DialogResult.OK) + { + throw new Exception("Не выбран файла для отчета"); + } + if (_container.Resolve().CreateDoc(sfd.FileName, checkBoxMasters.Checked, checkBoxDetails.Checked, checkBoxStorages.Checked)) + { + MessageBox.Show("Документ сформирован", "Формирование документа", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Возникли ошибки при формировании документа.Подробности в логах","Формирование документа", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при создании отчета", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + + } + + } + +} diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.resx b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDirectoryReport.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/ProjectRepairCompany/ProjectRepairCompany/Reports/DocReport.cs b/ProjectRepairCompany/ProjectRepairCompany/Reports/DocReport.cs new file mode 100644 index 0000000..2e0ff7d --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Reports/DocReport.cs @@ -0,0 +1,72 @@ +using Microsoft.Extensions.Logging; +using ProjectRepairCompany.Repositories; +using ProjectRepairCompany.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairCompany.Reports; + +internal class DocReport +{ + private readonly IStorageRepository _storageRepository; + private readonly IMasterRepository _masterRepository; + private readonly IDetailRepository _detailRepository; + + private readonly ILogger _logger; + public DocReport(IMasterRepository masterRepository, IDetailRepository detailRepository, IStorageRepository storageRepository, ILogger logger) + { + _masterRepository = masterRepository + ?? throw new ArgumentNullException(nameof(masterRepository)); + _detailRepository = detailRepository + ?? throw new ArgumentNullException(nameof(detailRepository)); + _storageRepository = storageRepository + ?? throw new ArgumentNullException(nameof(storageRepository)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } + + public bool CreateDoc(string filePath, bool includeMasters, bool includeDetails, bool includeStorages) + { + try + { + var builder = new WordBuilder(filePath).AddHeader("Документ со справочниками"); + if (includeMasters) + { + builder.AddParagraph("Мастера").AddTable([2400, 2400, 2400], GetMasters()); + } + if (includeDetails) + { + builder.AddParagraph("Детали").AddTable([2400, 2400, 2400, 2400], GetDetails()); + } + if (includeStorages) + { + builder.AddParagraph("Склады").AddTable([2400, 2400], GetStorages()); + } + builder.Build(); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка формирования"); + return false; + } + } + + private List GetMasters() + { + return [["Работник", "Должность", "Дата начала работы"], + .. _masterRepository.ReadMasters().Select(x => new string[] { x.MasterName, x.MasterPost.ToString(), x.StartDate.ToString("dd.MM.yyyy") }),]; + } + private List GetDetails() + { + return [["Название детали", "Цена", "Число", "Свойства"], + .. _detailRepository.ReadDetails().Select(x => new string[] { x.NameDetail, x.PriceDetail.ToString("N2"), x.NumberDetail.ToString(), x.DetailProperties.ToString() }),]; + } + private List GetStorages() + { + return [["Адрес", "Вместимость"], + .. _storageRepository.ReadStorages().Select(x => new string[] { x.StorageAddress, x.Capacity.ToString() }),]; + } +}