lab 4 hard complete

This commit is contained in:
AnnZhimol 2023-04-21 10:44:25 +04:00
parent c92f283cc1
commit 3437825d46
26 changed files with 1276 additions and 21 deletions

View File

@ -6,10 +6,14 @@ namespace SofrwareInstallationContracts.BusinessLogicsContracts
public interface IReportLogic
{
List<ReportPackageComponentViewModel> GetPackageComponent();
List<ReportStorePackageViewModel> GetStorePackage();
List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
List<ReportOrdersGroupByDateViewModel> GetOrdersGroupByDate();
void SavePackagesToWordFile(ReportBindingModel model);
void SaveStoresToWordFile(ReportBindingModel model);
void SavePackageComponentToExcelFile(ReportBindingModel model);
void SaveStorePackageToExcelFile(ReportBindingModel model);
void SaveOrdersToPdfFile(ReportBindingModel model);
void SaveOrdersGroupByDateToPdfFile(ReportBindingModel model);
}
}

View File

@ -0,0 +1,9 @@
namespace SofrwareInstallationContracts.ViewModels
{
public class ReportOrdersGroupByDateViewModel
{
public DateTime DateCreate { get; set; }
public int Count { get; set; }
public double Sum { get; set; }
}
}

View File

@ -0,0 +1,11 @@
namespace SofrwareInstallationContracts.ViewModels
{
public class ReportStorePackageViewModel
{
public string StoreName { get; set; } = string.Empty;
public int TotalCount { get; set; }
public List<(string Package, int Count)> Packages { get; set; } = new();
}
}

View File

@ -32,11 +32,11 @@
this.СправочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ИзделияToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.КомпонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.StoreToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.отчетыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.списокИзделийToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.компонентыПоИзделиямToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.списокЗаказовToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.StoreToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.DataGridView = new System.Windows.Forms.DataGridView();
this.CreateOrderButton = new System.Windows.Forms.Button();
this.TakeOrderInWorkButton = new System.Windows.Forms.Button();
@ -45,6 +45,9 @@
this.UpdateListButton = new System.Windows.Forms.Button();
this.StoreReplenishment = new System.Windows.Forms.Button();
this.SellPackageButton = new System.Windows.Forms.Button();
this.списокМагазиновToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.изделияПоМагазинамToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.списокЗаказовгруппировкаПоДатеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.MenuStrip.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.DataGridView)).BeginInit();
this.SuspendLayout();
@ -73,21 +76,21 @@
// ИзделияToolStripMenuItem
//
this.ИзделияToolStripMenuItem.Name = "ИзделияToolStripMenuItem";
this.ИзделияToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.ИзделияToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.ИзделияToolStripMenuItem.Text = "Изделия";
this.ИзделияToolStripMenuItem.Click += new System.EventHandler(this.ИзделияToolStripMenuItem_Click);
//
// КомпонентыToolStripMenuItem
//
this.КомпонентыToolStripMenuItem.Name = "КомпонентыToolStripMenuItem";
this.КомпонентыToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.КомпонентыToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.КомпонентыToolStripMenuItem.Text = "Компоненты";
this.КомпонентыToolStripMenuItem.Click += new System.EventHandler(this.КомпонентыToolStripMenuItem_Click);
//
// StoreToolStripMenuItem
//
this.StoreToolStripMenuItem.Name = "StoreToolStripMenuItem";
this.StoreToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.StoreToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.StoreToolStripMenuItem.Text = "Магазины";
this.StoreToolStripMenuItem.Click += new System.EventHandler(this.StoreToolStripMenuItem_Click);
//
@ -96,7 +99,10 @@
this.отчетыToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.списокИзделийToolStripMenuItem,
this.компонентыПоИзделиямToolStripMenuItem,
this.списокЗаказовToolStripMenuItem});
this.списокЗаказовToolStripMenuItem,
this.списокМагазиновToolStripMenuItem,
this.изделияПоМагазинамToolStripMenuItem,
this.списокЗаказовгруппировкаПоДатеToolStripMenuItem});
this.отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
this.отчетыToolStripMenuItem.Size = new System.Drawing.Size(60, 20);
this.отчетыToolStripMenuItem.Text = "Отчеты";
@ -104,21 +110,21 @@
// списокИзделийToolStripMenuItem
//
this.списокИзделийToolStripMenuItem.Name = "списокИзделийToolStripMenuItem";
this.списокИзделийToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.списокИзделийToolStripMenuItem.Size = new System.Drawing.Size(286, 22);
this.списокИзделийToolStripMenuItem.Text = "Список Изделий";
this.списокИзделийToolStripMenuItem.Click += new System.EventHandler(this.списокИзделийToolStripMenuItem_Click);
//
// компонентыПоИзделиямToolStripMenuItem
//
this.компонентыПоИзделиямToolStripMenuItem.Name = омпонентыПоИзделиямToolStripMenuItem";
this.компонентыПоИзделиямToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.компонентыПоИзделиямToolStripMenuItem.Size = new System.Drawing.Size(286, 22);
this.компонентыПоИзделиямToolStripMenuItem.Text = "Компоненты по Изделиям";
this.компонентыПоИзделиямToolStripMenuItem.Click += new System.EventHandler(this.компонентыПоИзделиямToolStripMenuItem_Click);
//
// списокЗаказовToolStripMenuItem
//
this.списокЗаказовToolStripMenuItem.Name = "списокЗаказовToolStripMenuItem";
this.списокЗаказовToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.списокЗаказовToolStripMenuItem.Size = new System.Drawing.Size(286, 22);
this.списокЗаказовToolStripMenuItem.Text = "Список Заказов";
this.списокЗаказовToolStripMenuItem.Click += new System.EventHandler(this.списокЗаказовToolStripMenuItem_Click);
//
@ -201,6 +207,27 @@
this.SellPackageButton.UseVisualStyleBackColor = true;
this.SellPackageButton.Click += new System.EventHandler(this.SellPackageButton_Click);
//
// списокМагазиновToolStripMenuItem
//
this.списокМагазиновToolStripMenuItem.Name = "списокМагазиновToolStripMenuItem";
this.списокМагазиновToolStripMenuItem.Size = new System.Drawing.Size(286, 22);
this.списокМагазиновToolStripMenuItem.Text = "Список Магазинов";
this.списокМагазиновToolStripMenuItem.Click += new System.EventHandler(this.списокМагазиновToolStripMenuItem_Click);
//
// изделияПоМагазинамToolStripMenuItem
//
this.изделияПоМагазинамToolStripMenuItem.Name = "изделияПоМагазинамToolStripMenuItem";
this.изделияПоМагазинамToolStripMenuItem.Size = new System.Drawing.Size(286, 22);
this.изделияПоМагазинамToolStripMenuItem.Text = "Изделия по магазинам";
this.изделияПоМагазинамToolStripMenuItem.Click += new System.EventHandler(this.изделияПоМагазинамToolStripMenuItem_Click);
//
// списокЗаказовгруппировкаПоДатеToolStripMenuItem
//
this.списокЗаказовгруппировкаПоДатеToolStripMenuItem.Name = "списокЗаказовгруппировкаПоДатеToolStripMenuItem";
this.списокЗаказовгруппировкаПоДатеToolStripMenuItem.Size = new System.Drawing.Size(286, 22);
this.списокЗаказовгруппировкаПоДатеToolStripMenuItem.Text = "Список Заказов (группировка по дате)";
this.списокЗаказовгруппировкаПоДатеToolStripMenuItem.Click += new System.EventHandler(this.списокЗаказовгруппировкаПоДатеToolStripMenuItem_Click);
//
// FormMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
@ -245,5 +272,8 @@
private ToolStripMenuItem списокИзделийToolStripMenuItem;
private ToolStripMenuItem компонентыПоИзделиямToolStripMenuItem;
private ToolStripMenuItem списокЗаказовToolStripMenuItem;
private ToolStripMenuItem списокМагазиновToolStripMenuItem;
private ToolStripMenuItem изделияПоМагазинамToolStripMenuItem;
private ToolStripMenuItem списокЗаказовгруппировкаПоДатеToolStripMenuItem;
}
}

View File

@ -254,5 +254,33 @@ namespace SoftwareInstallationView
form.ShowDialog();
}
}
private void списокМагазиновToolStripMenuItem_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
if (dialog.ShowDialog() == DialogResult.OK)
{
_reportLogic.SaveStoresToWordFile(new ReportBindingModel { FileName = dialog.FileName });
MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void изделияПоМагазинамToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormReportStorePackages));
if (service is FormReportStorePackages form)
{
form.ShowDialog();
}
}
private void списокЗаказовгруппировкаПоДатеToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormReportOrdersGroupByDate));
if (service is FormReportOrdersGroupByDate form)
{
form.ShowDialog();
}
}
}
}

View File

@ -0,0 +1,86 @@
namespace SoftwareInstallationView
{
partial class FormReportOrdersGroupByDate
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Panel = new System.Windows.Forms.Panel();
this.ToPdfButton = new System.Windows.Forms.Button();
this.MakeButton = new System.Windows.Forms.Button();
this.Panel.SuspendLayout();
this.SuspendLayout();
//
// Panel
//
this.Panel.Controls.Add(this.ToPdfButton);
this.Panel.Controls.Add(this.MakeButton);
this.Panel.Dock = System.Windows.Forms.DockStyle.Top;
this.Panel.Location = new System.Drawing.Point(0, 0);
this.Panel.Name = "Panel";
this.Panel.Size = new System.Drawing.Size(800, 38);
this.Panel.TabIndex = 0;
//
// ToPdfButton
//
this.ToPdfButton.Location = new System.Drawing.Point(142, 3);
this.ToPdfButton.Name = "ToPdfButton";
this.ToPdfButton.Size = new System.Drawing.Size(113, 32);
this.ToPdfButton.TabIndex = 1;
this.ToPdfButton.Text = "В Pdf";
this.ToPdfButton.UseVisualStyleBackColor = true;
this.ToPdfButton.Click += new System.EventHandler(this.ToPdfButton_Click);
//
// MakeButton
//
this.MakeButton.Location = new System.Drawing.Point(23, 3);
this.MakeButton.Name = "MakeButton";
this.MakeButton.Size = new System.Drawing.Size(113, 32);
this.MakeButton.TabIndex = 2;
this.MakeButton.Text = "Сформировать";
this.MakeButton.UseVisualStyleBackColor = true;
this.MakeButton.Click += new System.EventHandler(this.MakeButton_Click);
//
// FormReportOrdersGroupByDate
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.Panel);
this.Name = "FormReportOrdersGroupByDate";
this.Text = "Заказы (группировка по дате)";
this.Panel.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private Panel Panel;
private Button ToPdfButton;
private Button MakeButton;
}
}

View File

@ -0,0 +1,72 @@
using Microsoft.Reporting.WinForms;
using SofrwareInstallationContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging;
using SofrwareInstallationContracts.BindingModels;
namespace SoftwareInstallationView
{
public partial class FormReportOrdersGroupByDate : Form
{
private readonly ReportViewer reportViewer;
private readonly ILogger _logger;
private readonly IReportLogic _logic;
public FormReportOrdersGroupByDate(ILogger<FormReportOrdersGroupByDate> logger, IReportLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
reportViewer = new ReportViewer
{
Dock = DockStyle.Fill
};
reportViewer.LocalReport.LoadReportDefinition(new FileStream("ReportOrdersGroupByDate.rdlc", FileMode.Open));
Controls.Clear();
Controls.Add(reportViewer);
Controls.Add(Panel);
}
private void MakeButton_Click(object sender, EventArgs e)
{
try
{
var dataSource = _logic.GetOrdersGroupByDate();
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.SaveOrdersGroupByDateToPdfFile(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);
}
}
}
}
}

View File

@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,100 @@
namespace SoftwareInstallationView
{
partial class FormReportStorePackages
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.DataGridView = new System.Windows.Forms.DataGridView();
this.SaveToExcelButton = new System.Windows.Forms.Button();
this.StoreName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.PackageName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.CountPackage = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.DataGridView)).BeginInit();
this.SuspendLayout();
//
// DataGridView
//
this.DataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.DataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.StoreName,
this.PackageName,
this.CountPackage});
this.DataGridView.Location = new System.Drawing.Point(2, 55);
this.DataGridView.Name = "DataGridView";
this.DataGridView.RowTemplate.Height = 25;
this.DataGridView.Size = new System.Drawing.Size(795, 383);
this.DataGridView.TabIndex = 0;
//
// SaveToExcelButton
//
this.SaveToExcelButton.Location = new System.Drawing.Point(26, 12);
this.SaveToExcelButton.Name = "SaveToExcelButton";
this.SaveToExcelButton.Size = new System.Drawing.Size(113, 37);
this.SaveToExcelButton.TabIndex = 1;
this.SaveToExcelButton.Text = "Сохранить в Excel";
this.SaveToExcelButton.UseVisualStyleBackColor = true;
this.SaveToExcelButton.Click += new System.EventHandler(this.SaveToExcelButton_Click);
//
// StoreName
//
this.StoreName.HeaderText = "Название магазина";
this.StoreName.Name = "StoreName";
//
// PackageName
//
this.PackageName.HeaderText = "Название изделия";
this.PackageName.Name = "PackageName";
//
// CountPackage
//
this.CountPackage.HeaderText = "Количество";
this.CountPackage.Name = "CountPackage";
//
// FormReportStorePackages
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.SaveToExcelButton);
this.Controls.Add(this.DataGridView);
this.Name = "FormReportStorePackages";
this.Text = "Изделия по магазинам";
this.Load += new System.EventHandler(this.FormReportStorePackages_Load);
((System.ComponentModel.ISupportInitialize)(this.DataGridView)).EndInit();
this.ResumeLayout(false);
}
#endregion
private DataGridView DataGridView;
private Button SaveToExcelButton;
private DataGridViewTextBoxColumn StoreName;
private DataGridViewTextBoxColumn PackageName;
private DataGridViewTextBoxColumn CountPackage;
}
}

View File

@ -0,0 +1,69 @@
using SofrwareInstallationContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging;
using SofrwareInstallationContracts.BindingModels;
using System.Windows.Forms;
namespace SoftwareInstallationView
{
public partial class FormReportStorePackages : Form
{
private readonly ILogger _logger;
private readonly IReportLogic _logic;
public FormReportStorePackages(ILogger<FormReportStorePackages> logger, IReportLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void SaveToExcelButton_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" };
if (dialog.ShowDialog() == DialogResult.OK)
{
try
{
_logic.SaveStorePackageToExcelFile(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);
}
}
}
private void FormReportStorePackages_Load(object sender, EventArgs e)
{
try
{
var dict = _logic.GetStorePackage();
if (dict != null)
{
DataGridView.Rows.Clear();
foreach (var elem in dict)
{
DataGridView.Rows.Add(new object[] { elem.StoreName, "", "" });
foreach (var listElem in elem.Packages)
{
DataGridView.Rows.Add(new object[] { "", listElem.Item1, listElem.Item2 });
}
DataGridView.Rows.Add(new object[] { "Итого", "", elem.TotalCount });
DataGridView.Rows.Add(Array.Empty<object>());
}
}
_logger.LogInformation("Загрузка списка магазинов с изделиями");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки списка магазинов с изделиями");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@ -0,0 +1,78 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="StoreName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PackageName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CountPackage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="StoreName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PackageName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="CountPackage.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@ -36,14 +36,17 @@ namespace SoftwareInstallationView
services.AddTransient<IOrderStorage, OrderStorage>();
services.AddTransient<IPackageStorage, PackageStorage>();
services.AddTransient<IStoreStorage, StoreStorage>();
services.AddTransient<IComponentLogic, ComponentLogic>();
services.AddTransient<IOrderLogic, OrderLogic>();
services.AddTransient<IPackageLogic, PackageLogic>();
services.AddTransient<IReportLogic, ReportLogic>();
services.AddTransient<IStoreLogic, StoreLogic>();
services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
services.AddTransient<AbstractSaveToWord, SaveToWord>();
services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
services.AddTransient<IStoreLogic, StoreLogic>();
services.AddTransient<FormMain>();
services.AddTransient<FormComponent>();
services.AddTransient<FormComponents>();
@ -52,7 +55,9 @@ namespace SoftwareInstallationView
services.AddTransient<FormPackageComponent>();
services.AddTransient<FormPackages>();
services.AddTransient<FormReportOrders>();
services.AddTransient<FormReportOrdersGroupByDate>();
services.AddTransient<FormReportPackageComponents>();
services.AddTransient<FormReportStorePackages>();
services.AddTransient<FormStores>();
services.AddTransient<FormStore>();
services.AddTransient<FormStoreReplenishment>();

View File

@ -0,0 +1,394 @@
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<AutoRefresh>0</AutoRefresh>
<DataSources>
<DataSource Name="SofrwareInstallationContractsViewModels">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>10791c83-cee8-4a38-bbd0-245fc17cefb3</rd:DataSourceID>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="DataSetOrders">
<Query>
<DataSourceName>SofrwareInstallationContractsViewModels</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<Fields>
<Field Name="DateCreate">
<DataField>DateCreate</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="Sum">
<DataField>Sum</DataField>
<rd:TypeName>System.Decimal</rd:TypeName>
</Field>
<Field Name="Count">
<DataField>Count</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
</Fields>
<rd:DataSetInfo>
<rd:DataSetName>SofrwareInstallationContracts.ViewModels</rd:DataSetName>
<rd:TableName>ReportOrdersViewModel</rd:TableName>
<rd:ObjectDataSourceType>SofrwareInstallationContracts.ViewModels.ReportOrdersViewModel, SofrwareInstallationContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
</rd:DataSetInfo>
</DataSet>
</DataSets>
<ReportSections>
<ReportSection>
<Body>
<ReportItems>
<Textbox Name="ReportParameterPeriod">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Parameters!ReportParameterPeriod.Value</Value>
<Style>
<FontSize>14pt</FontSize>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Center</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<rd:DefaultName>ReportParameterPeriod</rd:DefaultName>
<Top>1cm</Top>
<Height>1cm</Height>
<Width>21cm</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Textbox Name="TextboxTitle">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>Заказы</Value>
<Style>
<FontSize>16pt</FontSize>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Center</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<Height>1cm</Height>
<Width>21cm</Width>
<ZIndex>1</ZIndex>
<Style>
<Border>
<Style>None</Style>
</Border>
<VerticalAlign>Middle</VerticalAlign>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Tablix Name="Tablix1">
<TablixBody>
<TablixColumns>
<TablixColumn>
<Width>6.60986cm</Width>
</TablixColumn>
<TablixColumn>
<Width>6.60986cm</Width>
</TablixColumn>
<TablixColumn>
<Width>6.60986cm</Width>
</TablixColumn>
</TablixColumns>
<TablixRows>
<TablixRow>
<Height>0.61323cm</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Textbox Name="Textbox2">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>Дата заказов</Value>
<Style>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox2</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="Textbox1">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>Количество заказов</Value>
<Style>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox1</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="Textbox7">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>Сумма</Value>
<Style>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox7</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
</TablixCells>
</TablixRow>
<TablixRow>
<Height>0.61323cm</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Textbox Name="DateCreate">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Fields!DateCreate.Value</Value>
<Style>
<Format>d</Format>
</Style>
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>DateCreate</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<rd:Selected>true</rd:Selected>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="Count">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Fields!Count.Value</Value>
<Style />
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Count</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="Sum">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Fields!Sum.Value</Value>
<Style />
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Sum</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
</TablixCells>
</TablixRow>
</TablixRows>
</TablixBody>
<TablixColumnHierarchy>
<TablixMembers>
<TablixMember />
<TablixMember />
<TablixMember />
</TablixMembers>
</TablixColumnHierarchy>
<TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<KeepWithGroup>After</KeepWithGroup>
</TablixMember>
<TablixMember>
<Group Name="Подробности" />
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>
<DataSetName>DataSetOrders</DataSetName>
<Top>2.48391cm</Top>
<Left>0.55245cm</Left>
<Height>1.22646cm</Height>
<Width>19.82958cm</Width>
<ZIndex>2</ZIndex>
<Style>
<Border>
<Style>Double</Style>
</Border>
</Style>
</Tablix>
</ReportItems>
<Height>5.72875cm</Height>
<Style />
</Body>
<Width>21cm</Width>
<Page>
<PageHeight>29.7cm</PageHeight>
<PageWidth>21cm</PageWidth>
<LeftMargin>2cm</LeftMargin>
<RightMargin>2cm</RightMargin>
<TopMargin>2cm</TopMargin>
<BottomMargin>2cm</BottomMargin>
<ColumnSpacing>0.13cm</ColumnSpacing>
<Style />
</Page>
</ReportSection>
</ReportSections>
<ReportParameters>
<ReportParameter Name="ReportParameterPeriod">
<DataType>String</DataType>
<Nullable>true</Nullable>
<Prompt>ReportParameter1</Prompt>
</ReportParameter>
</ReportParameters>
<ReportParametersLayout>
<GridLayoutDefinition>
<NumberOfColumns>4</NumberOfColumns>
<NumberOfRows>2</NumberOfRows>
<CellDefinitions>
<CellDefinition>
<ColumnIndex>0</ColumnIndex>
<RowIndex>0</RowIndex>
<ParameterName>ReportParameterPeriod</ParameterName>
</CellDefinition>
</CellDefinitions>
</GridLayoutDefinition>
</ReportParametersLayout>
<rd:ReportUnitType>Cm</rd:ReportUnitType>
<rd:ReportID>2de0031a-4d17-449d-922d-d9fc54572312</rd:ReportID>
</Report>

View File

@ -13,10 +13,12 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
private readonly IComponentStorage _componentStorage;
private readonly IPackageStorage _packageStorage;
private readonly IOrderStorage _orderStorage;
private readonly IStoreStorage _storeStorage;
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
public ReportLogic(IPackageStorage packageStorage, IComponentStorage componentStorage, IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
public ReportLogic(IStoreStorage storeStorage, IPackageStorage packageStorage, IComponentStorage componentStorage, IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
{
_packageStorage = packageStorage;
_componentStorage = componentStorage;
@ -24,7 +26,9 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
_storeStorage= storeStorage;
}
public List<ReportPackageComponentViewModel> GetPackageComponent()
{
var components = _componentStorage.GetFullList();
@ -50,6 +54,31 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
}
return list;
}
public List<ReportStorePackageViewModel> GetStorePackage()
{
var stores = _storeStorage.GetFullList();
var list = new List<ReportStorePackageViewModel>();
foreach (var store in stores)
{
var record = new ReportStorePackageViewModel
{
StoreName = store.StoreName,
Packages = new(),
TotalCount = 0
};
foreach (var package in store.StorePackages)
{
record.Packages.Add(new(package.Value.Item1.PackageName, package.Value.Item2));
record.TotalCount += package.Value.Item2;
}
list.Add(record);
}
return list;
}
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
{
return _orderStorage.GetFilteredList(new OrderSearchModel
@ -67,6 +96,20 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
})
.ToList();
}
public List<ReportOrdersGroupByDateViewModel> GetOrdersGroupByDate()
{
return _orderStorage.GetFullList()
.GroupBy(x => x.DateCreate.Date)
.Select(x => new ReportOrdersGroupByDateViewModel
{
DateCreate = x.Key,
Count = x.Count(),
Sum = x.Sum(x => x.Sum)
})
.ToList();
}
public void SavePackagesToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
@ -77,6 +120,16 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
});
}
public void SaveStoresToWordFile(ReportBindingModel model)
{
_saveToWord.CreateStoresDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список магазинов",
Stores = _storeStorage.GetFullList()
});
}
public void SavePackageComponentToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
@ -87,6 +140,16 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
});
}
public void SaveStorePackageToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateStoreReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список магазинов",
StorePackages = GetStorePackage()
});
}
public void SaveOrdersToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateDoc(new PdfInfo
@ -98,5 +161,15 @@ namespace SoftwareInstallationBusinessLogic.BusinessLogic
Orders = GetOrders(model)
});
}
public void SaveOrdersGroupByDateToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateOrdersGroupByDateDoc(new PdfInfo
{
FileName = model.FileName,
Title = "Список заказов",
OrdersGroupByDate = GetOrdersGroupByDate()
});
}
}
}

View File

@ -80,6 +80,77 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage
SaveExcel(info);
}
public void CreateStoreReport(ExcelInfo info)
{
CreateExcel(info);
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = 1,
Text = info.Title,
StyleInfo = ExcelStyleInfoType.Title
});
MergeCells(new ExcelMergeParameters
{
CellFromName = "A1",
CellToName = "C1"
});
uint rowIndex = 2;
foreach (var sp in info.StorePackages)
{
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = rowIndex,
Text = sp.StoreName,
StyleInfo = ExcelStyleInfoType.Text
});
rowIndex++;
foreach (var package in sp.Packages)
{
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "B",
RowIndex = rowIndex,
Text = package.Item1,
StyleInfo = ExcelStyleInfoType.TextWithBroder
});
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "C",
RowIndex = rowIndex,
Text = package.Item2.ToString(),
StyleInfo = ExcelStyleInfoType.TextWithBroder
});
rowIndex++;
}
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = rowIndex,
Text = "Итого",
StyleInfo = ExcelStyleInfoType.Text
});
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "C",
RowIndex = rowIndex,
Text = sp.TotalCount.ToString(),
StyleInfo = ExcelStyleInfoType.Text
});
rowIndex++;
}
SaveExcel(info);
}
protected abstract void CreateExcel(ExcelInfo info);
protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);

View File

@ -1,7 +1,5 @@
using SoftwareInstallationBusinessLogic.OfficePackage.HelperEnums;
using SoftwareInstallationBusinessLogic.OfficePackage.HelperModels;
using System.Collections.Generic;
using System.Linq;
namespace SoftwareInstallationBusinessLogic.OfficePackage
{
@ -45,6 +43,32 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage
});
SavePdf(info);
}
public void CreateOrdersGroupByDateDoc(PdfInfo info)
{
CreatePdf(info);
CreateParagraph(new PdfParagraph { Text = info.Title, Style = "NormalTitle", ParagraphAlignment = PdfParagraphAlignmentType.Center });
CreateTable(new List<string> { "3cm", "3cm", "3cm" });
CreateRow(new PdfRowParameters
{
Texts = new List<string> { "Дата заказов", "Количество заказов", "Сумма" },
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
foreach (var order in info.OrdersGroupByDate)
{
CreateRow(new PdfRowParameters
{
Texts = new List<string> { order.DateCreate.ToShortDateString(), order.Count.ToString(), order.Sum.ToString() },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Left
});
}
SavePdf(info);
}
protected abstract void CreatePdf(PdfInfo info);
protected abstract void CreateParagraph(PdfParagraph paragraph);
protected abstract void CreateTable(List<string> columns);

View File

@ -35,7 +35,47 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage
}
SaveWord(info);
}
public void CreateStoresDoc(WordInfo info)
{
CreateWord(info);
CreateParagraph(new WordParagraph
{
Texts = new List<(string, WordTextProperties)> { (info.Title, new WordTextProperties { Bold = true, Size = "24" }) },
TextProperties = new WordTextProperties
{
Size = "24",
JustificationType = WordJustificationType.Center
}
});
List<WordRow> rows = new List<WordRow>();
rows.Add(new WordRow
{
Rows = new List<(string, WordTextProperties)> {
("Название", new WordTextProperties { Size = "24", Bold = true }),
("Адрес", new WordTextProperties { Size = "24", Bold = true }),
("Дата открытия", new WordTextProperties { Size = "24", Bold = true })
}
});
foreach (var store in info.Stores)
{
rows.Add(new WordRow
{
Rows = new List<(string, WordTextProperties)> {
(store.StoreName, new WordTextProperties { Size = "24" }),
(store.StoreAdress, new WordTextProperties { Size = "24" }),
(store.OpeningDate.ToShortDateString(), new WordTextProperties { Size = "24" })
}
});
}
CreateTable(rows);
SaveWord(info);
}
protected abstract void CreateTable(List<WordRow> rows);
protected abstract void CreateWord(WordInfo info);
protected abstract void CreateParagraph(WordParagraph paragraph);
protected abstract void SaveWord(WordInfo info);

View File

@ -11,5 +11,6 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage.HelperModels
get;
set;
} = new();
public List<ReportStorePackageViewModel> StorePackages { get; set; } = new();
}
}

View File

@ -9,5 +9,6 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage.HelperModels
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public List<ReportOrdersViewModel> Orders { get; set; } = new();
public List<ReportOrdersGroupByDateViewModel> OrdersGroupByDate { get; set; } = new();
}
}

View File

@ -12,6 +12,6 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage.HelperModels
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public List<PackageViewModel> Packages { get; set; } = new();
public List<StoreViewModel> Stores { get; set; } = new();
}
}

View File

@ -0,0 +1,7 @@
namespace SoftwareInstallationBusinessLogic.OfficePackage.HelperModels
{
public class WordRow
{
public List<(string, WordTextProperties)> Rows { get; set; } = new();
}
}

View File

@ -75,6 +75,60 @@ namespace SoftwareInstallationBusinessLogic.OfficePackage.Implements
_docBody = mainPart.Document.AppendChild(new Body());
}
protected override void CreateTable(List<WordRow> data)
{
if (_docBody == null || data == null)
{
return;
}
Table table = new Table();
var tableProp = new TableProperties();
tableProp.AppendChild(new TableLayout { Type = TableLayoutValues.Fixed });
tableProp.AppendChild(new TableBorders(
new TopBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
new LeftBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
new RightBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
new BottomBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
new InsideHorizontalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
new InsideVerticalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 }
));
tableProp.AppendChild(new TableWidth { Type = TableWidthUnitValues.Auto });
table.AppendChild(tableProp);
TableGrid tableGrid = new TableGrid();
for (int j = 0; j < data[0].Rows.Count; ++j)
{
tableGrid.AppendChild(new GridColumn() { Width = "3200" });
}
table.AppendChild(tableGrid);
for (int i = 0; i < data.Count; ++i)
{
TableRow docRow = new TableRow();
for (int j = 0; j < data[i].Rows.Count; ++j)
{
var docParagraph = new Paragraph();
var docRun = new Run();
var runProperties = new RunProperties();
docParagraph.AppendChild(CreateParagraphProperties(data[i].Rows[j].Item2));
runProperties.AppendChild(new RunFonts() { Ascii = "Times New Roman", ComplexScript = "Times New Roman", HighAnsi = "Times New Roman" });
runProperties.AppendChild(new FontSize { Val = data[i].Rows[j].Item2.Size == null ? data[i].Rows[j].Item2.Size : "24" });
if (data[i].Rows[j].Item2.Bold)
runProperties.AppendChild(new Bold());
docRun.AppendChild(runProperties);
docRun.AppendChild(new Text { Text = data[i].Rows[j].Item1.ToString(), Space = SpaceProcessingModeValues.Preserve });
docParagraph.AppendChild(docRun);
TableCell docCell = new TableCell();
docCell.AppendChild(docParagraph);
docRow.AppendChild(docCell);
}
table.AppendChild(docRow);
}
_docBody.AppendChild(table);
}
protected override void CreateParagraph(WordParagraph paragraph)
{
if (_docBody == null || paragraph == null)

View File

@ -40,15 +40,26 @@ namespace SoftwareInstallationDataBaseImplement.Implements
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{
if (!model.DateFrom.HasValue && !model.DateTo.HasValue)
if (!model.DateFrom.HasValue && !model.DateTo.HasValue && !model.DateFrom.HasValue)
{
return new();
}
using var context = new SoftwareInstallationDataBase();
return context.Orders.Include(x => x.Package)
.Where(x => x.Id == model.Id || model.DateFrom <= x.DateCreate && x.DateCreate <= model.DateTo)
.Select(x => x.GetViewModel)
.ToList();
if (model.DateFrom.HasValue)
{
return context.Orders
.Include(x => x.Package)
.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo)
.Select(x => x.GetViewModel)
.ToList();
}
return context.Orders
.Include(x => x.Package)
.Where(x => x.Id == model.Id)
.Select(x => x.GetViewModel)
.ToList();
}
public List<OrderViewModel> GetFullList()

View File

@ -37,6 +37,9 @@ namespace SoftwareInstallationDataBaseImplement.Models
[ForeignKey("PackageId")]
public virtual List<Order> Orders { get; set; } = new();
[ForeignKey("PackageId")]
public virtual List<StorePackage> StorePackages { get; set; } = new();
public static Package Create(SoftwareInstallationDataBase context, PackageBindingModel model)
{
return new Package()

View File

@ -47,7 +47,18 @@ namespace SoftwareInstallationFileImplement.Implements
return new();
}
return source.Orders.Where(x => x.Id.Equals(model.Id)).Select(x => x.GetViewModel).ToList();
if (model.DateFrom.HasValue)
{
return source.Orders
.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo)
.Select(x => x.GetViewModel)
.ToList();
}
return source.Orders
.Where(x => x.Id.Equals(model.Id))
.Select(x => x.GetViewModel)
.ToList();
}
public List<OrderViewModel> GetFullList()

View File

@ -30,11 +30,24 @@ namespace SoftwareInstallationListImplement.Implements
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (!model.Id.HasValue)
var result = new List<OrderViewModel>();
if (!model.Id.HasValue && !model.DateFrom.HasValue)
{
return null;
}
if (model.DateFrom.HasValue)
{
foreach (var order in _source.Orders)
{
if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo)
{
result.Add(order.GetViewModel);
}
}
}
foreach (var order in _source.Orders)
{
if (model.Id.HasValue && order.Id == model.Id)